<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.6 (Ruby 3.0.2) -->
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-fossati-tls-attestation-05" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="Attestation in TLS/DTLS">Using Attestation in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>
    <seriesInfo name="Internet-Draft" value="draft-fossati-tls-attestation-05"/>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <author initials="Y." surname="Sheffer" fullname="Yaron Sheffer">
      <organization>Intuit</organization>
      <address>
        <email>yaronf.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Howard" fullname="Paul Howard">
      <organization>Arm Limited</organization>
      <address>
        <email>Paul.Howard@arm.com</email>
      </address>
    </author>
    <author initials="I." surname="Mihalcea" fullname="Ionut Mihalcea">
      <organization>Arm Limited</organization>
      <address>
        <email>Ionut.Mihalcea@arm.com</email>
      </address>
    </author>
    <author initials="Y." surname="Deshpande" fullname="Yogesh Deshpande">
      <organization>Arm Limited</organization>
      <address>
        <email>Yogesh.Deshpande@arm.com</email>
      </address>
    </author>
    <author initials="A." surname="Niemi" fullname="Arto Niemi">
      <organization>Huawei</organization>
      <address>
        <email>arto.niemi@huawei.com</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <area>Security</area>
    <workgroup>TLS</workgroup>
    <keyword>attestation</keyword>
    <keyword>RATS</keyword>
    <keyword>TLS</keyword>
    <abstract>
      <?line 122?>

<t>The TLS handshake protocol allows authentication of one or both peers using static, long-term credentials.
In some cases, it is also desirable to ensure that the peer runtime environment is in a secure state.
Such an assurance can be achieved using attestation which is a process by which an entity produces evidence about itself that another party can use to appraise whether that entity is found in a secure state.
This document describes a series of protocol extensions to the TLS 1.3 handshake that enables the binding of the TLS authentication key to a remote attestation session.
This enables an entity capable of producing attestation evidence, such as a confidential workload running in a Trusted Execution Environment (TEE), or an IoT device that is trying to authenticate itself to a network access point, to present a more comprehensive set of security metrics to its peer.
These extensions have been designed to allow the peers to use any attestation technology, in any remote attestation topology, and mutually.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-fossati-tls-attestation/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/yaronf/draft-tls-attestation"/>.</t>
    </note>
  </front>
  <middle>
    <?line 131?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Attestation <xref target="RFC9334"/> is the process by which an entity produces evidence about itself that another party can use to evaluate the trustworthiness of that entity.
This document describes a series of protocol extensions to the TLS 1.3 handshake that enables the binding of the TLS authentication key to a remote attestation session.
As a result, a peer can use "attestation credentials", consisting of compound platform evidence and key attestation, to authenticate itself to its peer during the setup of the TLS channel.
This enables an attester, such as a confidential workload running in a Trusted Execution Environment (TEE) <xref target="I-D.ietf-teep-architecture"/>, or an IoT device that is trying to authenticate itself to a network access point, to present a more comprehensive set of security metrics to its peer.
This, in turn, allows for the implementation of authorization policies at the relying parties that are based on stronger security signals.</t>
      <t>Given the variety of deployed and emerging attestation technologies (e.g., <xref target="TPM1.2"/>, <xref target="TPM2.0"/>, <xref target="I-D.ietf-rats-eat"/>) these extensions have been explicitly designed to be agnostic of the attestation formats.
This is achieved by reusing the generic encapsulation defined in <xref target="I-D.ietf-rats-msg-wrap"/> for transporting evidence and attestation result payloads in the TLS Certificate message.</t>
      <t>The proposed design supports both background-check and passport topologies, as described in Sections <xref target="RFC9334" section="5.2" sectionFormat="bare"/> and <xref target="RFC9334" section="5.1" sectionFormat="bare"/> of <xref target="RFC9334"/>.
This is detailed in <xref target="evidence-extensions"/> and <xref target="attestation-results-extensions"/>.
This specification provides both one-way (server-only) and mutual (client and server) authentication using attestation credentials, and allows the attestation topologies at each peer to be independent of each other.</t>
      <t>This document does not specify any attestation technology.
Companion documents are expected to define specific attestation mechanisms.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The reader is assumed to be familiar with the vocabulary and concepts defined in
<xref section="4" sectionFormat="of" target="RFC9334"/>, and those in <xref section="2" sectionFormat="of" target="I-D.bft-rats-kat"/>.</t>
      <t>The following terms are used in this document:</t>
      <dl newline="true">
        <dt>TLS Identity Key (TIK):</dt>
        <dd>
          <t>A cryptographic key used by one of the peers to authenticate itself during the
TLS handshake.</t>
        </dd>
        <dt>TIK-C, TIK-S:</dt>
        <dd>
          <t>The TIK that identifies the client or the server, respectively.</t>
        </dd>
        <dt>TIK-C-ID, TIK-S-ID:</dt>
        <dd>
          <t>An identifier for TIK-C or respectively, TIK-S. This may be a fingerprint 
(cryptographic hash) of the public key, but other implementations are possible.</t>
        </dd>
      </dl>
      <t>"Remote attestation credentials", or "attestation credentials", is used
to refer to both attestation evidence and attestation results, when no
distinction needs to be made between them.</t>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>The basic functional goal is to link the authenticated key exchange of TLS with an interleaved remote attestation session in such a way that the key used to sign the handshake can be proven to be residing within the boundaries of an attested TEE.
The requirement is that the attester can provide evidence containing the security status of both the signing key and the platform that is hosting it.
The associated security goal is to obtain such binding so that no replay, relay or splicing from an adversary is possible.</t>
      <t>Throughout the document, we will assume the conceptual attester model described in <xref section="3" sectionFormat="of" target="I-D.bft-rats-kat"/>, where TEE attestation is provided by a Platform Attestation Token (PAT) signed by the attester's "attesting environment".
Among other security metrics, the PAT contains evidence about the integrity of a "Key Attestation Service" executing within the TEE which issues a Key Attestation Token (KAT) for the TLS handshake signing key (TIK) as described in <xref target="handshake-overview"/>.</t>
      <t>The protocol's security relies on the verifiable binding between these two logically separate units of evidence.</t>
    </section>
    <section anchor="attestation-extensions">
      <name>Attestation Extensions</name>
      <t>As typical with new features in TLS, the client indicates support for the new
extension in the ClientHello message. The newly introduced extensions allow
remote attestation credentials and nonces to be exchanged. The nonces are used
for guaranteeing freshness of the exchanged evidence when the background check
model is in use.</t>
      <t>When either the evidence or the attestation results extension is successfully
negotiated, the content of the corresponding Certificate message contains a
payload that is encoded based on the wrapper defined in <xref target="I-D.ietf-rats-msg-wrap"/>.
Both JSON and CBOR serializations are allowed in CMW, with the emitter choosing which serialization to use.</t>
      <t>In TLS a client has to demonstrate possession of the private key via the
CertificateVerify message, when client-based authentication is requested. The
attestation payload must contain assertions relating to the client's TLS
Identity Key (TIK-C), which associate the private key with the attestation
information. These assertions may come in the form of a Key Attestation Token
(KAT), or of specific claims in an attestation result document. An example of a
KAT format utilizing the EAT format can be found in <xref target="I-D.bft-rats-kat"/>.</t>
      <t>The relying party can obtain and appraise the remote attestation results either
directly from the Certificate message (in the passport model), or by relaying
the evidence from the Certificate message to the verifier and receiving the
attestation results. Subsequently, the attested key is used to verify the
CertificateVerify message.</t>
      <t>When using the passport model, the remote attestation results obtained by the
attester from its trusted verifiers can be cached and used for any number of
subsequent TLS handshakes, as long as the freshness policy requirements are
satisfied.</t>
      <t>This protocol supports both monolithic and split implementations. In a monolithic
implementation, the TLS stack is completely embedded within the TEE. In a split
implementation, the TLS stack is located outside the TEE, but any private keys
(and in particular, the TIK) only exist within the TEE. In order to support
both options, only the TIK's identity and its public component are ever
passed between the Client or Server TLS stack and its Attestation Service.</t>
    </section>
    <section anchor="use-of-remote-attestation-credentials-in-the-tls-handshake">
      <name>Use of Remote Attestation Credentials in the TLS Handshake</name>
      <t>For both the passport model (described in section 5.1 of <xref target="RFC9334"/>) and
background check model (described in Section 5.2 of <xref target="RFC9334"/>) the following
modes of operation are allowed when used with TLS, namely:</t>
      <ul spacing="normal">
        <li>
          <t>TLS client is the attester,</t>
        </li>
        <li>
          <t>TLS server is the attester, and</t>
        </li>
        <li>
          <t>TLS client and server mutually attest towards each other.</t>
        </li>
      </ul>
      <t>We will show the message exchanges of the first two cases in sub-sections below.
Mutual authentication via attestation combines these two (non-interfering)
flows, including cases where one of the peers uses the passport model for its
attestation, and the other uses the background check model.</t>
      <section anchor="handshake-overview">
        <name>Handshake Overview</name>
        <t>The handshake defined here is analogous to certificate-based authentication in a regular TLS handshake. Instead of the certificate's private key, we use
the TIK identity key. This key is attested, with attestation being carried
by the Certificate message. Following that, the peer being attested proves possession of the private key using the CertificateVerify message.</t>
        <t>Depending on the use case, the protocol supports peer authentication
using attestation only, or using both attestation and a regular public
key certificate.</t>
        <t>The current version of the document assumes the KAT/PAT construct of 
<xref target="I-D.bft-rats-kat"/>. Not all platforms support this model, and a document
that defines private key attestation for use in TLS Attestation as defined here, must specify:</t>
        <ul spacing="normal">
          <li>
            <t>The format and the lifetime of TIK (e.g. an ephemeral, per session TIK vs.
a long lived one).</t>
          </li>
          <li>
            <t>How the key is attested using a structure carried by the
Certificate message.</t>
          </li>
          <li>
            <t>How proof of possession is performed.</t>
          </li>
        </ul>
      </section>
      <section anchor="tls-client-authenticating-using-evidence">
        <name>TLS Client Authenticating Using Evidence</name>
        <t>In this use case, the TLS server (acting as a relying party) challenges the TLS
client (as the attester) to provide evidence. The TLS server needs to provide a
nonce in the EncryptedExtensions message to the TLS client so that the
attestation service can feed the nonce into the generation of the evidence. The
TLS server, when receiving the evidence, will have to contact the verifier
(which is not shown in the diagram).</t>
        <t>An example of this flow can be found in device onboarding where the 
client initiates the communication with cloud infrastructure to 
get credentials, firmware and other configuration data provisioned
to the device. For the server to consider the device genuine it needs
to present evidence.</t>
        <figure anchor="_figure-background-check-model1">
          <name>TLS Client Providing Evidence to TLS Server.</name>
          <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + evidence_proposal
     | + key_share*
     | + signature_algorithms*
     v                         -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                                               v
                                        {EncryptedExtensions}  ^  Server
                                          + evidence_proposal  |  Params
                                                      (nonce)  |
                                         {CertificateRequest}  v  
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork>
        </figure>
      </section>
      <section anchor="tls-server-authenticating-using-evidence">
        <name>TLS Server Authenticating Using Evidence</name>
        <t>In this use case the TLS client challenges the TLS server to present evidence. 
The TLS server acts as an attester while the TLS client is the relying party. 
The TLS client, when receiving the evidence, will have to contact the verifier 
(which is not shown in the diagram).</t>
        <t>An example of this flow can be found in confidential computing where 
a compute workload is only submitted to the server infrastructure 
once the client/user is assured that the confidential computing platform is
genuine.</t>
        <figure anchor="_figure-background-check-model2">
          <name>TLS Server Providing Evidence to TLS Client.</name>
          <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + evidence_request
     |   (nonce)
     | + key_share*
     | + signature_algorithms*
     v                         -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                                               v
                                        {EncryptedExtensions}  ^  Server
                                          + evidence_request   |  Params
                                                               |
                                         {CertificateRequest}  v  
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork>
        </figure>
      </section>
      <section anchor="tls-client-authenticating-using-attestation-results">
        <name>TLS Client Authenticating Using Attestation Results</name>
        <t>In this use case the TLS client, as the attester, provides attestation results
to the TLS server. The TLS client is the attester and the the TLS server acts as
a relying party. Prior to delivering its Certificate message, the client must
contact the verifier (not shown in the diagram) to receive the attestation
results that it will use as credentials.</t>
        <figure anchor="_figure-passport-model1">
          <name>TLS Client Providing Results to TLS Server.</name>
          <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + results_proposal
     | + key_share*
     | + signature_algorithms*
     v                         -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                                               v
                                        {EncryptedExtensions}  ^  Server
                                           + results_proposal  |  Params
                                         {CertificateRequest}  v  
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork>
        </figure>
      </section>
      <section anchor="tls-server-authenticating-using-results">
        <name>TLS Server Authenticating Using Results</name>
        <t>In this use case the TLS client, as the relying party, requests attestation
results from the TLS server. Prior to delivering its Certificate message, the
server must contact the verifier (not shown in the diagram) to receive the
attestation results that it will use as credentials.</t>
        <figure anchor="_figure-passport-model2">
          <name>TLS Server Providing Attestation Results to TLS Client.</name>
          <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + results_request
     | + key_share*
     | + signature_algorithms*
     v                         -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                                               v
                                        {EncryptedExtensions}  ^  Server
                                           + results_request   |  Params
                                                               |
                                         {CertificateRequest}  v  
                                                {Certificate}  ^
                                          {CertificateVerify}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate}
Auth | {CertificateVerify}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="evidence-extensions">
      <name>Evidence Extensions (Background Check Model)</name>
      <t>The EvidenceType structure also contains an indicator for the type of credential
expected in the Certificate message. The credential can either contain
attestation evidence alone, or an X.509 certificate alongside attestation
evidence.</t>
      <figure anchor="_figure-extension-evidence">
        <name>TLS Extension Structure for Evidence.</name>
        <artwork><![CDATA[
    enum { CONTENT_FORMAT(0), MEDIA_TYPE(1) } typeEncoding;
    enum { ATTESTATION(0), CERT_ATTESTATION(1) } credentialKind;

    struct {
        credentialKind credential_kind;
        typeEncoding type_encoding;
        select (EvidenceType.type_encoding) {
            case CONTENT_FORMAT:
                uint16 content_format;
            case MEDIA_TYPE:
                opaque media_type<0..2^16-1>;
        };
    } EvidenceType;

    struct {
        select(Handshake.msg_type) {
            case client_hello:
                EvidenceType supported_evidence_types<1..2^8-1>;
                opaque nonce<8..2^8-1>;
            case server_hello:
                EvidenceType selected_evidence_type;
        }
    } evidenceRequestTypeExtension;

    struct {
        select(Handshake.msg_type) {
            case client_hello:
                EvidenceType supported_evidence_types<1..2^8-1>;
            case server_hello:
                EvidenceType selected_evidence_type;
                opaque nonce<8..2^8-1>;
        }
    } evidenceProposalTypeExtension;
]]></artwork>
      </figure>
      <section anchor="attest-only">
        <name>Attestation-only</name>
        <t>When the chosen evidence type indicates the sole use of attestation for
authentication, the Certificate payload is used as a container for
attestation evidence, as shown in <xref target="_figure-attest-only"/>, and follows the
model of <xref target="RFC8446"/>.</t>
        <figure anchor="_figure-attest-only">
          <name>Certificate Message when using only attestation.</name>
          <artwork><![CDATA[
    struct {
        select (certificate_type) {
            case RawPublicKey:
                /* From RFC 7250 ASN.1_subjectPublicKeyInfo */
                opaque ASN1_subjectPublicKeyInfo<1..2^24-1>;

              case X509:
                opaque cert_data<1..2^24-1>;

              case attestation:
                  /* payload used to convey evidence */
                  opaque evidence<1..2^24-1>;
          };
          Extension extensions<0..2^16-1>;
      } CertificateEntry;

      struct {
          opaque certificate_request_context<0..2^8-1>;
          CertificateEntry certificate_list<0..2^24-1>;
      } Certificate;
]]></artwork>
        </figure>
        <t>The encoding of the evidence structure is defined in <xref target="I-D.ietf-rats-msg-wrap"/>.</t>
      </section>
      <section anchor="pkix-attest">
        <name>Attestation Alongside X.509 Certificates</name>
        <t>When the chosen evidence type indicates usage of both attestation and PKIX,
the X.509 certificate will serve as the main payload in the Certificate
message, while the attestation evidence will be carried in the
CertificateEntry extension, as shown in <xref target="_figure-cert-attest"/>.</t>
        <figure anchor="_figure-cert-attest">
          <name>Certificate Message when using PKIX and attestation.</name>
          <artwork><![CDATA[
    struct {
        select (certificate_type) {
            case RawPublicKey:
                /* From RFC 7250 ASN.1_subjectPublicKeyInfo */
                opaque ASN1_subjectPublicKeyInfo<1..2^24-1>;
              
            case X509:
                /* X.509 certificate conveyed as usual */
                opaque cert_data<1..2^24-1>;
        };

        /* attestation evidence conveyed as an extension, see below */
        Extension extensions<0..2^16-1>;
      } CertificateEntry;

    struct {
        opaque certificate_request_context<0..2^8-1>;
        CertificateEntry certificate_list<0..2^24-1>;
    } Certificate;

    struct {
        ExtensionType extension_type;
        /* payload used to convey evidence */
        opaque extension_data<0..2^16-1>;
    } Extension;

    enum {
        /* other extension types defined in the IANA TLS 
           ExtensionType Value registry */

        /* variant used to identify attestation evidence */
        attestation_evidence(60),
        (65535)
    } ExtensionType;
]]></artwork>
        </figure>
        <t>The encoding of the evidence structure is defined in <xref target="I-D.ietf-rats-msg-wrap"/>.</t>
        <t>As described in <xref target="usage-variants"/>, this authentication mechanism is meant
primarily for carrying platform attestation evidence to provide more
context to the relying party. This evidence must be cryptographically bound
to the TLS handshake to prevent relay attacks. An Attestation Channel Binder as
described in <xref target="binding-mech"/> is therefore used when the attestation scheme
does not allow the binding data to be part of the token. The structure of
the binder is given in <xref target="_figure-tls-binder"/>.</t>
        <figure anchor="_figure-tls-binder">
          <name>Format of TLS channel binder.</name>
          <artwork><![CDATA[
attestation_channel_binder = {
  &(nonce: 1) => bstr .size (8..64)
  &(ik_pub_fingerprint: 2) => bstr .size (16..64)
  &(channel_binder: 3) => bstr .size (16..64)
}
]]></artwork>
        </figure>
        <ul spacing="normal">
          <li>
            <t>Nonce is the value provided as a challenge by the relying party.</t>
          </li>
          <li>
            <t>The identity key fingerprint (ik_pub_fingerprint) is a hash of the
Subject Public Key Info from the leaf X.509 certificate transmitted in
the handshake.</t>
          </li>
          <li>
            <t>The channel binder (channel_binder) is a value obtained from the early
exporter mechanism offered by the TLS implementation (<xref section="7.5" sectionFormat="of" target="RFC8446"/>). This Early Exporter Value (EEV) must be obtained immediately
following the ServerHello message, using 'attestation-binder' as the label,
an empty context, and with the key length set to 32 bytes.
<xref target="_figure-early-exporter"/> shows this computation using the notation from
<xref target="RFC8446"/>.</t>
          </li>
        </ul>
        <figure anchor="_figure-early-exporter">
          <name>Usage of TLS v1.3 early exporter for channel binding.</name>
          <artwork><![CDATA[
TLS-Early-Exporter(label, context_value, key_length) =
       HKDF-Expand-Label(
              Derive-Secret(early_exporter_master_secret, label, ""),
              "exporter", Hash(context_value), key_length)

channel_binder = TLS-Early-Exporter(label = "attestation-binder",
                                    context_value = "", key_length = 32)
]]></artwork>
        </figure>
        <t>A hash of the binder must be included in the attestation evidence. Previous
to hashing, the binder must be encoded as described in <xref target="binding-mech"/>.</t>
        <t>The hash algorithm negotiatied within the handshake must be used wherever
hashing is required for the binder.</t>
      </section>
    </section>
    <section anchor="attestation-results-extensions">
      <name>Attestation Results Extensions (Passport Model)</name>
      <figure anchor="_figure-extension-results">
        <name>TLS Extension Structure for Attestation Results.</name>
        <artwork><![CDATA[
    struct {
        opaque verifier_identity<0..2^16-1>;
    } VerifierIdentityType;
      
    struct {
        select(Handshake.msg_type) {
            case client_hello:
                VerifierIdentityType trusted_verifiers<1..2^8-1>;
                 
            case server_hello:
                VerifierIdentityType selected_verifier;
        }
    } resultsRequestTypeExtension;

    struct {
        select(Handshake.msg_type) {
            case client_hello:
                VerifierIdentityType trusted_verifiers<1..2^8-1>;

            case server_hello:
                VerifierIdentityType selected_verifier;
        }
    } resultsProposalTypeExtension;
]]></artwork>
      </figure>
    </section>
    <section anchor="behavior">
      <name>TLS Client and Server Handshake Behavior</name>
      <t>The high-level message exchange in <xref target="_figure-overview"/> shows the
evidence_proposal, evidence_request, results_proposal, and results_request
extensions added to the ClientHello and the EncryptedExtensions messages.</t>
      <figure anchor="_figure-overview">
        <name>Attestation Message Overview.</name>
        <artwork><![CDATA[
       Client                                           Server

Key  ^ ClientHello
Exch | + key_share*
     | + signature_algorithms*
     | + psk_key_exchange_modes*
     | + pre_shared_key*
     | + evidence_proposal*
     | + evidence_request*
     | + results_proposal*
     v + results_request*
     -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                            + pre_shared_key*  v
                                        {EncryptedExtensions}  ^  Server
                                         + evidence_proposal*  |
                                          + evidence_request*  |
                                          + results_proposal*  |
                                           + results_request*  |
                                        {CertificateRequest*}  v  Params
                                               {Certificate*}  ^
                                         {CertificateVerify*}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate*}
Auth | {CertificateVerify*}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork>
      </figure>
      <section anchor="background-check-model">
        <name>Background Check Model</name>
        <section anchor="client-hello">
          <name>Client Hello</name>
          <t>To indicate the support for passing evidence in TLS following the 
background check model, clients include the evidence_proposal 
and/or the evidence_request extensions in the ClientHello.</t>
          <t>The evidence_proposal extension in the ClientHello message indicates
the evidence types the client is able to provide to the server,
when requested using a CertificateRequest message.</t>
          <t>The evidence_request extension in the ClientHello message indicates
the evidence types the client challenges the server to 
provide in a subsequent Certificate payload.</t>
          <t>The evidence_proposal and evidence_request extensions sent in
the ClientHello each carry a list of supported evidence types,
sorted by preference.  When the client supports only one evidence
type, it is a list containing a single element.</t>
          <t>The client <bcp14>MUST</bcp14> omit evidence types from the evidence_proposal 
extension in the ClientHello if it cannot respond to a request
from the server to present a proposed evidence type, or if 
the client is not configured to use the proposed evidence type 
with the given server.  If the client has no evidence types 
to send in the ClientHello it <bcp14>MUST</bcp14> omit the evidence_proposal
extension in the ClientHello.</t>
          <t>The client <bcp14>MUST</bcp14> omit evidence types from the evidence_request
extension in the ClientHello if it is not able to pass the 
indicated verification type to a verifier.  If the client does 
not act as a relying party with regards to evidence processing
(as defined in the RATS architecture) then the client <bcp14>MUST</bcp14> 
omit the evidence_request extension from the ClientHello.</t>
        </section>
        <section anchor="server-hello">
          <name>Server Hello</name>
          <t>If the server receives a ClientHello that contains the
evidence_proposal extension and/or the evidence_request
extension, then three outcomes are possible:</t>
          <ul spacing="normal">
            <li>
              <t>The server does not support the extensions defined in this
document.  In this case, the server returns the EncryptedExtensions
without the extensions defined in this document.</t>
            </li>
            <li>
              <t>The server supports the extensions defined in this document, but
it does not have any evidence type in common with the client.
Then, the server terminates the session with a fatal alert of
type "unsupported_evidence".</t>
            </li>
            <li>
              <t>The server supports the extensions defined in this document and
has at least one evidence type in common with the client.  In
this case, the processing rules described below are followed.</t>
            </li>
          </ul>
          <t>The evidence_proposal extension in the ClientHello indicates
the evidence types the client is able to provide to the server,
when challenged using a certificate_request message.  If the
server wants to request evidence from the client, it <bcp14>MUST</bcp14> include the
evidence_proposal extension in the EncryptedExtensions. This
evidence_proposal extension in the EncryptedExtensions then indicates
what evidence format the client is requested to provide in a
subsequent Certificate message.  The value conveyed in the
evidence_proposal extension by the server <bcp14>MUST</bcp14> be selected from one of the
values provided in the evidence_proposal extension sent in the
ClientHello.  The server <bcp14>MUST</bcp14> also send a certificate_request
message.</t>
          <t>If the server does not send a certificate_request message or none 
of the evidence types supported by the client (as indicated in the
evidence_proposal extension in the ClientHello) match the
server-supported evidence types, then the evidence_proposal
extension in the ServerHello <bcp14>MUST</bcp14> be omitted.</t>
          <t>The evidence_request extension in the ClientHello indicates what
types of evidence the client can challenge the server to return
in a subsequent Certificate message. With the evidence_request 
extension in the EncryptedExtensions, the server indicates the 
evidence type carried in the Certificate message sent by the server.
The evidence type in the evidence_request extension <bcp14>MUST</bcp14> contain 
a single value selected from the evidence_request extension in 
the ClientHello.</t>
        </section>
      </section>
      <section anchor="passport-model">
        <name>Passport Model</name>
        <section anchor="client-hello-1">
          <name>Client Hello</name>
          <t>To indicate the support for passing attestation results in TLS following the
passport model, clients include the results_proposal and/or the results_request
extensions in the ClientHello message.</t>
          <t>The results_proposal extension in the ClientHello message indicates the verifier
identities from which it can relay attestation results, when requested using a
CertificateRequest message.</t>
          <t>The results_request extension in the ClientHello message indicates the verifier
identities from which the client expects the server to provide attestation
results in a subsequent Certificate payload.</t>
          <t>The results_proposal and results_request extensions sent in the ClientHello each
carry a list of supported verifier identities, sorted by preference.  When the
client supports only one verifier, it is a list containing a single element.</t>
          <t>The client <bcp14>MUST</bcp14> omit verifier identities from the results_proposal extension in
the ClientHello if it cannot respond to a request from the server to present
attestation results from a proposed verifier, or if the client is not configured
to relay the results from the proposed verifier with the given server. If the
client has no verifier identities to send in the ClientHello it <bcp14>MUST</bcp14> omit the
results_proposal extension in the ClientHello.</t>
          <t>The client <bcp14>MUST</bcp14> omit verifier identities from the results_request extension in
the ClientHello if it is not configured to trust attestation results issued by
said verifiers. If the client does not act as a relying party with regards to
the processing of attestation results (as defined in the RATS architecture) then
the client <bcp14>MUST</bcp14> omit the results_request extension from the ClientHello.</t>
        </section>
        <section anchor="server-hello-1">
          <name>Server Hello</name>
          <t>If the server receives a ClientHello that contains the results_proposal
extension and/or the results_request extension, then three outcomes are
possible:</t>
          <ul spacing="normal">
            <li>
              <t>The server does not support the extensions defined in this document.  In this
case, the server returns the EncryptedExtensions without the extensions
defined in this document.</t>
            </li>
            <li>
              <t>The server supports the extensions defined in this document, but it does not
have any trusted verifiers in common with the client. Then, the server
terminates the session with a fatal alert of type "unsupported_verifiers".</t>
            </li>
            <li>
              <t>The server supports the extensions defined in this document and has at least
one trusted verifier in common with the client.  In this case, the processing
rules described below are followed.</t>
            </li>
          </ul>
          <t>The results_proposal extension in the ClientHello indicates the verifier
identities from which the client is able to provide attestation results to the
server, when challenged using a certificate_request message.  If the server
wants to request evidence from the client, it <bcp14>MUST</bcp14> include the results_proposal
extension in the EncryptedExtensions. This results_proposal extension in the
EncryptedExtensions then indicates what verifier the client is requested to
provide attestation results from in a subsequent Certificate message.  The value
conveyed in the results_proposal extension by the server <bcp14>MUST</bcp14> be selected from
one of the values provided in the results_proposal extension sent in the
ClientHello.  The server <bcp14>MUST</bcp14> also send a certificate_request message.</t>
          <t>If the server does not send a certificate_request message or none of the
verifier identities proposed by the client (as indicated in the results_proposal
extension in the ClientHello) match the server-trusted verifiers, then the
results_proposal extension in the ServerHello <bcp14>MUST</bcp14> be omitted.</t>
          <t>The results_request extension in the ClientHello indicates what verifiers the
client trusts as issuers of attestation results for the server. With the
results_request extension in the EncryptedExtensions, the server indicates the
identity of the verifier who issued the attestation results carried in the
Certificate message sent by the server. The verifier identity in the
results_request extension <bcp14>MUST</bcp14> contain a single value selected from the
results_request extension in the ClientHello.</t>
        </section>
      </section>
    </section>
    <section anchor="background-check-model-examples">
      <name>Background-Check Model Examples</name>
      <section anchor="cloud-confidential-computing">
        <name>Cloud Confidential Computing</name>
        <t>In this example, a confidential workload is executed on computational
resources hosted at a cloud service provider.  This is a typical
scenario for secure, privacy-preserving multiparty computation,
including anti-money laundering, drug development in healthcare, contact
tracing in pandemic times, etc.</t>
        <t>In such scenarios, the users (e.g., the party providing the data input for the
computation, the consumer of the computed attestation results, the party
providing a proprietary ML model used in the computation) have two goals:</t>
        <ul spacing="normal">
          <li>
            <t>Identifying the workload they are interacting with,</t>
          </li>
          <li>
            <t>Making sure that the platform on which the workload executes is a
Trusted Execution Environment (TEE) with the expected features.</t>
          </li>
        </ul>
        <t>A convenient arrangement is to verify that the two requirements are met
at the same time that the secure channel is established.</t>
        <t>The protocol flow, alongside all the involved actors, is captured in
<xref target="_figure-cc-example"/> where the TLS client is the user (the relying
party) while the TLS server is co-located with the TEE-hosted
confidential workload (the attester).</t>
        <t>The flow starts with the client initiating a verification session with a
trusted verifier.  The verifier returns the evidence types it
understands and a nonce that will be used to challenge the attester.</t>
        <t>The client starts the TLS handshake with the server by supplying the
attestation-related parameters it has obtained from the verifier.  If
the server supports one of the offered evidence types, it will echo it
in the specular extension and proceed by invoking a local API
(represented by <tt>attest_key(...)</tt> in the figure below) to request
attestation using the nonce supplied by the verifier.  The returned
evidence binds the identity key (TIK-S) with the platform identity and
security state, packaged into a CAB.  The server then signs a transcript
hash (represented by <tt>hs</tt> in the figure below) of the handshake context
and the server's Certificate message with the (attested) identity key,
and sends the attestation evidence together with the signature over to
the client.</t>
        <t>The client forwards the attestation evidence to the verifier using the
previously established session, obtains the attestation result (AR) and
checks whether it is acceptable according to its local policy.  If so,
it proceeds and verifies the handshake signature using the corresponding
public key (for example, using the PoP key in the KAT evidence
<xref target="I-D.bft-rats-kat"/>).</t>
        <t>The attestation evidence verification combined with the verification of
the CertificateVerify signature provide confirmation that the presented
cryptographic identity is bound to the workload and platform identity,
and that the workload and platform are trustworthy.  Therefore, after
the handshake is finalized, the client can trust the workload on the
other side of the established secure channel to provide the required
confidential computing properties.</t>
        <figure anchor="_figure-cc-example">
          <name>Example Exchange with Server as Attester.</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1168" width="576" viewBox="0 0 576 1168" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,48 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,272 L 8,1088" fill="none" stroke="black"/>
                <path d="M 32,80 L 32,272" fill="none" stroke="black"/>
                <path d="M 32,304 L 32,1104" fill="none" stroke="black"/>
                <path d="M 96,48 L 96,80" fill="none" stroke="black"/>
                <path d="M 136,288 L 136,304" fill="none" stroke="black"/>
                <path d="M 168,48 L 168,80" fill="none" stroke="black"/>
                <path d="M 200,80 L 200,1152" fill="none" stroke="black"/>
                <path d="M 240,48 L 240,80" fill="none" stroke="black"/>
                <path d="M 280,368 L 280,376" fill="none" stroke="black"/>
                <path d="M 368,32 L 368,80" fill="none" stroke="black"/>
                <path d="M 400,80 L 400,1152" fill="none" stroke="black"/>
                <path d="M 448,40 L 448,72" fill="none" stroke="black"/>
                <path d="M 528,80 L 528,672" fill="none" stroke="black"/>
                <path d="M 528,704 L 528,1104" fill="none" stroke="black"/>
                <path d="M 568,32 L 568,80" fill="none" stroke="black"/>
                <path d="M 568,320 L 568,1088" fill="none" stroke="black"/>
                <path d="M 368,32 L 568,32" fill="none" stroke="black"/>
                <path d="M 8,48 L 96,48" fill="none" stroke="black"/>
                <path d="M 168,48 L 240,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 96,80" fill="none" stroke="black"/>
                <path d="M 168,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 368,80 L 568,80" fill="none" stroke="black"/>
                <path d="M 40,128 L 200,128" fill="none" stroke="black"/>
                <path d="M 32,240 L 192,240" fill="none" stroke="black"/>
                <path d="M 8,272 L 120,272" fill="none" stroke="black"/>
                <path d="M 8,304 L 552,304" fill="none" stroke="black"/>
                <path d="M 200,416 L 392,416" fill="none" stroke="black"/>
                <path d="M 400,496 L 520,496" fill="none" stroke="black"/>
                <path d="M 408,528 L 528,528" fill="none" stroke="black"/>
                <path d="M 208,672 L 400,672" fill="none" stroke="black"/>
                <path d="M 400,704 L 520,704" fill="none" stroke="black"/>
                <path d="M 408,736 L 528,736" fill="none" stroke="black"/>
                <path d="M 208,784 L 400,784" fill="none" stroke="black"/>
                <path d="M 40,880 L 200,880" fill="none" stroke="black"/>
                <path d="M 32,944 L 192,944" fill="none" stroke="black"/>
                <path d="M 200,960 L 224,960" fill="none" stroke="black"/>
                <path d="M 208,992 L 224,992" fill="none" stroke="black"/>
                <path d="M 200,1008 L 224,1008" fill="none" stroke="black"/>
                <path d="M 208,1040 L 224,1040" fill="none" stroke="black"/>
                <path d="M 200,1072 L 392,1072" fill="none" stroke="black"/>
                <path d="M 24,1104 L 552,1104" fill="none" stroke="black"/>
                <path d="M 208,1136 L 392,1136" fill="none" stroke="black"/>
                <path d="M 120,272 C 128.83064,272 136,279.16936 136,288" fill="none" stroke="black"/>
                <path d="M 552,304 C 560.83064,304 568,311.16936 568,320" fill="none" stroke="black"/>
                <path d="M 224,960 C 232.83064,960 240,967.16936 240,976" fill="none" stroke="black"/>
                <path d="M 224,992 C 232.83064,992 240,984.83064 240,976" fill="none" stroke="black"/>
                <path d="M 224,1008 C 232.83064,1008 240,1015.16936 240,1024" fill="none" stroke="black"/>
                <path d="M 224,1040 C 232.83064,1040 240,1032.83064 240,1024" fill="none" stroke="black"/>
                <path d="M 24,1104 C 15.16936,1104 8,1096.83064 8,1088" fill="none" stroke="black"/>
                <path d="M 552,1104 C 560.83064,1104 568,1096.83064 568,1088" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="528,704 516,698.4 516,709.6" fill="black" transform="rotate(0,520,704)"/>
                <polygon class="arrowhead" points="528,496 516,490.4 516,501.6" fill="black" transform="rotate(0,520,496)"/>
                <polygon class="arrowhead" points="416,736 404,730.4 404,741.6" fill="black" transform="rotate(180,408,736)"/>
                <polygon class="arrowhead" points="416,528 404,522.4 404,533.6" fill="black" transform="rotate(180,408,528)"/>
                <polygon class="arrowhead" points="400,1136 388,1130.4 388,1141.6" fill="black" transform="rotate(0,392,1136)"/>
                <polygon class="arrowhead" points="400,1072 388,1066.4 388,1077.6" fill="black" transform="rotate(0,392,1072)"/>
                <polygon class="arrowhead" points="400,416 388,410.4 388,421.6" fill="black" transform="rotate(0,392,416)"/>
                <polygon class="arrowhead" points="216,1136 204,1130.4 204,1141.6" fill="black" transform="rotate(180,208,1136)"/>
                <polygon class="arrowhead" points="216,1040 204,1034.4 204,1045.6" fill="black" transform="rotate(180,208,1040)"/>
                <polygon class="arrowhead" points="216,992 204,986.4 204,997.6" fill="black" transform="rotate(180,208,992)"/>
                <polygon class="arrowhead" points="216,784 204,778.4 204,789.6" fill="black" transform="rotate(180,208,784)"/>
                <polygon class="arrowhead" points="216,672 204,666.4 204,677.6" fill="black" transform="rotate(180,208,672)"/>
                <polygon class="arrowhead" points="200,944 188,938.4 188,949.6" fill="black" transform="rotate(0,192,944)"/>
                <polygon class="arrowhead" points="200,240 188,234.4 188,245.6" fill="black" transform="rotate(0,192,240)"/>
                <polygon class="arrowhead" points="48,880 36,874.4 36,885.6" fill="black" transform="rotate(180,40,880)"/>
                <polygon class="arrowhead" points="48,128 36,122.4 36,133.6" fill="black" transform="rotate(180,40,128)"/>
                <g class="text">
                  <text x="404" y="52">Server</text>
                  <text x="512" y="52">Attestation</text>
                  <text x="52" y="68">Verifier</text>
                  <text x="204" y="68">Client</text>
                  <text x="496" y="68">Service</text>
                  <text x="68" y="116">POST</text>
                  <text x="136" y="116">/newSession</text>
                  <text x="56" y="148">201</text>
                  <text x="104" y="148">Created</text>
                  <text x="80" y="164">Location:</text>
                  <text x="156" y="164">/76839A9</text>
                  <text x="64" y="180">Body:</text>
                  <text x="96" y="180">{</text>
                  <text x="84" y="196">nonce,</text>
                  <text x="124" y="212">supp-media-types</text>
                  <text x="48" y="228">}</text>
                  <text x="32" y="292">TLS</text>
                  <text x="88" y="292">handshake</text>
                  <text x="256" y="324">ClientHello</text>
                  <text x="240" y="340">{...}</text>
                  <text x="288" y="356">evidence_request(</text>
                  <text x="256" y="372">nonce</text>
                  <text x="284" y="388">types(a,b,c)</text>
                  <text x="224" y="404">)</text>
                  <text x="456" y="436">attest_key(</text>
                  <text x="452" y="452">nonce,</text>
                  <text x="460" y="468">TIK-S-ID</text>
                  <text x="416" y="484">)</text>
                  <text x="444" y="516">CAB(KAT,</text>
                  <text x="500" y="516">PAT)</text>
                  <text x="256" y="548">ServerHello</text>
                  <text x="240" y="564">{...}</text>
                  <text x="288" y="580">EncryptedExtensions</text>
                  <text x="240" y="596">{...}</text>
                  <text x="288" y="612">evidence_request(</text>
                  <text x="264" y="628">type(a)</text>
                  <text x="224" y="644">)</text>
                  <text x="292" y="660">Certificate(KAT,PAT)</text>
                  <text x="472" y="692">sign(TIK-S-ID,hs)</text>
                  <text x="456" y="724">sig</text>
                  <text x="300" y="756">CertificateVerify(sig)</text>
                  <text x="244" y="772">Finished</text>
                  <text x="60" y="804">POST</text>
                  <text x="120" y="804">/76839A9E</text>
                  <text x="64" y="820">Body:</text>
                  <text x="96" y="820">{</text>
                  <text x="92" y="836">type(a),</text>
                  <text x="72" y="852">CAB</text>
                  <text x="48" y="868">}</text>
                  <text x="64" y="900">Body:</text>
                  <text x="96" y="900">{</text>
                  <text x="104" y="916">att-result:</text>
                  <text x="172" y="916">AR{}</text>
                  <text x="48" y="932">}</text>
                  <text x="276" y="980">verify</text>
                  <text x="324" y="980">AR{}</text>
                  <text x="276" y="1028">verify</text>
                  <text x="320" y="1028">sig</text>
                  <text x="292" y="1060">Finished</text>
                  <text x="280" y="1124">application</text>
                  <text x="348" y="1124">data</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
                                             .------------------------.
.----------.        .--------.               | Server  |  Attestation |
| Verifier |        | Client |               |         |  Service     |
'--+-------'        '---+----'               '---+---------------+----'
   |                    |                        |               |
   |  POST /newSession  |                        |               |
   |<-------------------+                        |               |
   | 201 Created        |                        |               |
   | Location: /76839A9 |                        |               |
   | Body: {            |                        |               |
   |   nonce,           |                        |               |
   |   supp-media-types |                        |               |
   | }                  |                        |               |
   +------------------->|                        |               |
   |                    |                        |               |
.--+-----------.        |                        |               |
| TLS handshake |       |                        |               |
+--+------------+-------+------------------------+---------------+---.
|  |                    | ClientHello            |               |    |
|  |                    |  {...}                 |               |    |
|  |                    |  evidence_request(     |               |    |
|  |                    |    nonce,              |               |    |
|  |                    |    types(a,b,c)        |               |    |
|  |                    |  )                     |               |    |
|  |                    +----------------------->|               |    |
|  |                    |                        | attest_key(   |    |
|  |                    |                        |   nonce,      |    |
|  |                    |                        |   TIK-S-ID    |    |
|  |                    |                        | )             |    |
|  |                    |                        +-------------->|    |
|  |                    |                        | CAB(KAT, PAT) |    |
|  |                    |                        |<--------------+    |
|  |                    | ServerHello            |               |    |
|  |                    |  {...}                 |               |    |
|  |                    | EncryptedExtensions    |               |    |
|  |                    |  {...}                 |               |    |
|  |                    |  evidence_request(     |               |    |
|  |                    |    type(a)             |               |    |
|  |                    |  )                     |               |    |
|  |                    | Certificate(KAT,PAT)   |               |    |
|  |                    |<-----------------------+               |    |
|  |                    |                        |sign(TIK-S-ID,hs)   |
|  |                    |                        +-------------->|    |
|  |                    |                        |     sig       |    |
|  |                    |                        |<--------------+    |
|  |                    | CertificateVerify(sig) |               |    |
|  |                    | Finished               |               |    |
|  |                    |<-----------------------+               |    |
|  | POST /76839A9E     |                        |               |    |
|  | Body: {            |                        |               |    |
|  |   type(a),         |                        |               |    |
|  |   CAB              |                        |               |    |
|  | }                  |                        |               |    |
|  |<-------------------+                        |               |    |
|  | Body: {            |                        |               |    |
|  |   att-result: AR{} |                        |               |    |
|  | }                  |                        |               |    |
|  +------------------->|                        |               |    |
|  |                    +---.                    |               |    |
|  |                    |    | verify AR{}       |               |    |
|  |                    |<--'                    |               |    |
|  |                    +---.                    |               |    |
|  |                    |    | verify sig        |               |    |
|  |                    |<--'                    |               |    |
|  |                    |       Finished         |               |    |
|  |                    +----------------------->|               |    |
|  |                    |                        |               |    |
 '-+--------------------+------------------------+---------------+---'
                        |    application data    |
                        |<---------------------->|
                        |                        |
]]></artwork>
          </artset>
        </figure>
      </section>
      <section anchor="iot-device-onboarding">
        <name>IoT Device Onboarding</name>
        <t>In this example, an IoT is onboarded to a cloud service provider (or to a
network operator). In this scenario there is typically no a priori
relationship between the device and the cloud service provider that 
will remotely manage the device.</t>
        <t>In such scenario, the cloud service provider wants to make sure
that the device runs the correct version of firmware, has not been 
rooted, is not emulated or cloned.</t>
        <t>The protocol flow is shown in <xref target="_figure-iot-example"/> where the client 
is the attester while the server is the relying party.</t>
        <t>The flow starts with the client initiating a TLS exchange with the TLS
server operated by the cloud service provider. The client indicates
what evidence types it supports.</t>
        <t>The server obtains a nonce from the verifier, in real-time or from a
reserved nonce range, and returns it to the client alongside the
selected evidence type. Since the evidence will be returned in the
Certificate message the server has to request mutual authentication
via the CertificateRequest message.</t>
        <t>The client, when receiving the EncryptedExtension with the
evidence_proposal, will proceed by invoking a local API to request the
attestation.  The returned evidence binds the identity key (TIK-C) with
the workload and platform identity and security state, packaged into a
CAB.  The client then signs a transcript hash of the handshake context
and the client's Certificate message  with the (attested) identity key,
and sends the evidence together with the signature over to the server.</t>
        <t>The server forwards the attestation evidence to the verifier, obtains 
the attestation result and checks that it is acceptable according to its 
local policy. The evidence verification combined with the verification of
the CertificateVerify signature provide confirmation that the presented
cryptographic identity is bound to the platform identity, and that the 
platform is trustworthy.</t>
        <t>If successful, the server proceeds with the application layer protocol 
exchange. If, for some reason, the attestation result is not satisfactory
the TLS server will terminate the exchange.</t>
        <figure anchor="_figure-iot-example">
          <name>Example Exchange with Client as Attester.</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="1152" width="576" viewBox="0 0 576 1152" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 8,32 L 8,80" fill="none" stroke="black"/>
                <path d="M 8,112 L 8,1088" fill="none" stroke="black"/>
                <path d="M 32,80 L 32,112" fill="none" stroke="black"/>
                <path d="M 32,144 L 32,1088" fill="none" stroke="black"/>
                <path d="M 136,40 L 136,72" fill="none" stroke="black"/>
                <path d="M 136,128 L 136,144" fill="none" stroke="black"/>
                <path d="M 168,80 L 168,664" fill="none" stroke="black"/>
                <path d="M 168,680 L 168,1136" fill="none" stroke="black"/>
                <path d="M 224,32 L 224,80" fill="none" stroke="black"/>
                <path d="M 328,48 L 328,80" fill="none" stroke="black"/>
                <path d="M 368,80 L 368,1136" fill="none" stroke="black"/>
                <path d="M 400,48 L 400,80" fill="none" stroke="black"/>
                <path d="M 440,368 L 440,376" fill="none" stroke="black"/>
                <path d="M 480,48 L 480,80" fill="none" stroke="black"/>
                <path d="M 528,80 L 528,1088" fill="none" stroke="black"/>
                <path d="M 568,48 L 568,80" fill="none" stroke="black"/>
                <path d="M 568,160 L 568,1072" fill="none" stroke="black"/>
                <path d="M 8,32 L 224,32" fill="none" stroke="black"/>
                <path d="M 328,48 L 400,48" fill="none" stroke="black"/>
                <path d="M 480,48 L 568,48" fill="none" stroke="black"/>
                <path d="M 8,80 L 224,80" fill="none" stroke="black"/>
                <path d="M 328,80 L 400,80" fill="none" stroke="black"/>
                <path d="M 480,80 L 568,80" fill="none" stroke="black"/>
                <path d="M 8,112 L 120,112" fill="none" stroke="black"/>
                <path d="M 8,144 L 552,144" fill="none" stroke="black"/>
                <path d="M 168,256 L 360,256" fill="none" stroke="black"/>
                <path d="M 368,304 L 520,304" fill="none" stroke="black"/>
                <path d="M 376,416 L 528,416" fill="none" stroke="black"/>
                <path d="M 176,544 L 368,544" fill="none" stroke="black"/>
                <path d="M 40,592 L 168,592" fill="none" stroke="black"/>
                <path d="M 32,640 L 160,640" fill="none" stroke="black"/>
                <path d="M 168,656 L 360,656" fill="none" stroke="black"/>
                <path d="M 40,688 L 168,688" fill="none" stroke="black"/>
                <path d="M 32,720 L 160,720" fill="none" stroke="black"/>
                <path d="M 168,736 L 360,736" fill="none" stroke="black"/>
                <path d="M 368,848 L 520,848" fill="none" stroke="black"/>
                <path d="M 376,912 L 528,912" fill="none" stroke="black"/>
                <path d="M 368,928 L 392,928" fill="none" stroke="black"/>
                <path d="M 376,960 L 392,960" fill="none" stroke="black"/>
                <path d="M 368,976 L 392,976" fill="none" stroke="black"/>
                <path d="M 376,1008 L 392,1008" fill="none" stroke="black"/>
                <path d="M 8,1088 L 552,1088" fill="none" stroke="black"/>
                <path d="M 176,1120 L 360,1120" fill="none" stroke="black"/>
                <path d="M 120,112 C 128.83064,112 136,119.16936 136,128" fill="none" stroke="black"/>
                <path d="M 552,144 C 560.83064,144 568,151.16936 568,160" fill="none" stroke="black"/>
                <path d="M 392,928 C 400.83064,928 408,935.16936 408,944" fill="none" stroke="black"/>
                <path d="M 392,960 C 400.83064,960 408,952.83064 408,944" fill="none" stroke="black"/>
                <path d="M 392,976 C 400.83064,976 408,983.16936 408,992" fill="none" stroke="black"/>
                <path d="M 392,1008 C 400.83064,1008 408,1000.83064 408,992" fill="none" stroke="black"/>
                <path d="M 552,1088 C 560.83064,1088 568,1080.83064 568,1072" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="528,848 516,842.4 516,853.6" fill="black" transform="rotate(0,520,848)"/>
                <polygon class="arrowhead" points="528,304 516,298.4 516,309.6" fill="black" transform="rotate(0,520,304)"/>
                <polygon class="arrowhead" points="384,1008 372,1002.4 372,1013.6" fill="black" transform="rotate(180,376,1008)"/>
                <polygon class="arrowhead" points="384,960 372,954.4 372,965.6" fill="black" transform="rotate(180,376,960)"/>
                <polygon class="arrowhead" points="384,912 372,906.4 372,917.6" fill="black" transform="rotate(180,376,912)"/>
                <polygon class="arrowhead" points="384,416 372,410.4 372,421.6" fill="black" transform="rotate(180,376,416)"/>
                <polygon class="arrowhead" points="368,1120 356,1114.4 356,1125.6" fill="black" transform="rotate(0,360,1120)"/>
                <polygon class="arrowhead" points="368,736 356,730.4 356,741.6" fill="black" transform="rotate(0,360,736)"/>
                <polygon class="arrowhead" points="368,656 356,650.4 356,661.6" fill="black" transform="rotate(0,360,656)"/>
                <polygon class="arrowhead" points="368,256 356,250.4 356,261.6" fill="black" transform="rotate(0,360,256)"/>
                <polygon class="arrowhead" points="184,1120 172,1114.4 172,1125.6" fill="black" transform="rotate(180,176,1120)"/>
                <polygon class="arrowhead" points="184,544 172,538.4 172,549.6" fill="black" transform="rotate(180,176,544)"/>
                <path class="jump" d="M 168,680 C 174,680 174,664 168,664" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="168,720 156,714.4 156,725.6" fill="black" transform="rotate(0,160,720)"/>
                <polygon class="arrowhead" points="168,640 156,634.4 156,645.6" fill="black" transform="rotate(0,160,640)"/>
                <polygon class="arrowhead" points="48,688 36,682.4 36,693.6" fill="black" transform="rotate(180,40,688)"/>
                <polygon class="arrowhead" points="48,592 36,586.4 36,597.6" fill="black" transform="rotate(180,40,592)"/>
                <g class="text">
                  <text x="64" y="52">Attestation</text>
                  <text x="180" y="52">Client</text>
                  <text x="48" y="68">Service</text>
                  <text x="364" y="68">Server</text>
                  <text x="524" y="68">Verifier</text>
                  <text x="32" y="132">TLS</text>
                  <text x="88" y="132">handshake</text>
                  <text x="224" y="180">ClientHello</text>
                  <text x="208" y="196">{...}</text>
                  <text x="260" y="212">evidence_proposal(</text>
                  <text x="252" y="228">types(a,b,c)</text>
                  <text x="192" y="244">)</text>
                  <text x="224" y="292">ServerHello</text>
                  <text x="396" y="292">POST</text>
                  <text x="464" y="292">/newSession</text>
                  <text x="208" y="308">{...}</text>
                  <text x="392" y="324">201</text>
                  <text x="440" y="324">Created</text>
                  <text x="416" y="340">Location:</text>
                  <text x="484" y="340">/76839</text>
                  <text x="400" y="356">Body:</text>
                  <text x="432" y="356">{</text>
                  <text x="416" y="372">nonce</text>
                  <text x="256" y="388">EncryptedExtensions</text>
                  <text x="444" y="388">types(a,b,c)</text>
                  <text x="208" y="404">{...}</text>
                  <text x="384" y="404">}</text>
                  <text x="260" y="420">evidence_proposal(</text>
                  <text x="228" y="436">nonce,</text>
                  <text x="232" y="452">type(a)</text>
                  <text x="192" y="468">)</text>
                  <text x="252" y="484">CertificateRequest</text>
                  <text x="224" y="500">Certificate</text>
                  <text x="248" y="516">CertificateVerify</text>
                  <text x="96" y="532">attest_key(</text>
                  <text x="212" y="532">Finished</text>
                  <text x="92" y="548">nonce,</text>
                  <text x="100" y="564">TIK-C-ID</text>
                  <text x="56" y="580">)</text>
                  <text x="84" y="628">CAB(KAT,</text>
                  <text x="140" y="628">PAT)</text>
                  <text x="260" y="644">Certificate(KAT,PAT)</text>
                  <text x="100" y="676">sign(TIK-C-ID,hs</text>
                  <text x="96" y="708">sig</text>
                  <text x="268" y="708">CertificateVerify(sig)</text>
                  <text x="212" y="724">Finished</text>
                  <text x="396" y="772">POST</text>
                  <text x="456" y="772">/76839A9E</text>
                  <text x="400" y="788">Body:</text>
                  <text x="432" y="788">{</text>
                  <text x="428" y="804">type(a),</text>
                  <text x="408" y="820">CAB</text>
                  <text x="384" y="836">}</text>
                  <text x="400" y="868">Body:</text>
                  <text x="432" y="868">{</text>
                  <text x="432" y="884">att-result:</text>
                  <text x="500" y="884">AR{}</text>
                  <text x="384" y="900">}</text>
                  <text x="444" y="948">verify</text>
                  <text x="492" y="948">AR{}</text>
                  <text x="444" y="996">verify</text>
                  <text x="488" y="996">sig</text>
                  <text x="248" y="1108">application</text>
                  <text x="316" y="1108">data</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
.--------------------------.
| Attestation   |  Client  |            .--------.         .----------.
| Service       |          |            | Server |         | Verifier |
'--+----------------+------'            '----+---'         '-----+----'
   |                |                        |                   |
.--+-----------.    |                        |                   |
| TLS handshake |   |                        |                   |
+--+------------+---+------------------------+-------------------+---.
|  |                |                        |                   |    |
|  |                | ClientHello            |                   |    |
|  |                |  {...}                 |                   |    |
|  |                |  evidence_proposal(    |                   |    |
|  |                |    types(a,b,c)        |                   |    |
|  |                |  )                     |                   |    |
|  |                +----------------------->|                   |    |
|  |                |                        |                   |    |
|  +                | ServerHello            | POST /newSession  |    |
|  |                |  {...}                 +------------------>|    |
|  |                |                        | 201 Created       |    |
|  |                |                        | Location: /76839  |    |
|  |                |                        | Body: {           |    |
|  |                |                        |   nonce,          |    |
|  |                | EncryptedExtensions    |   types(a,b,c)    |    |
|  |                |  {...}                 | }                 |    |
|  |                |  evidence_proposal(    |<------------------+    |
|  |                |    nonce,              |                   |    |
|  |                |    type(a)             |                   |    |
|  |                |  )                     |                   |    |
|  |                | CertificateRequest     |                   |    |
|  |                | Certificate            |                   |    |
|  |                | CertificateVerify      |                   |    |
|  |  attest_key(   | Finished               |                   |    |
|  |    nonce,      |<-----------------------+                   |    |
|  |    TIK-C-ID    |                        |                   |    |
|  |  )             |                        |                   |    |
|  |<---------------+                        |                   |    |
|  |                |                        |                   |    |
|  |  CAB(KAT, PAT) |                        |                   |    |
|  +--------------->| Certificate(KAT,PAT)   |                   |    |
|  |                +----------------------->|                   |    |
|  |sign(TIK-C-ID,hs)                        |                   |    |
|  |<---------------+                        |                   |    |
|  |      sig       | CertificateVerify(sig) |                   |    |
|  +--------------->| Finished               |                   |    |
|  |                +----------------------->|                   |    |
|  |                |                        |                   |    |
|  |                |                        | POST /76839A9E    |    |
|  |                |                        | Body: {           |    |
|  |                |                        |   type(a),        |    |
|  |                |                        |   CAB             |    |
|  |                |                        | }                 |    |
|  |                |                        +------------------>|    |
|  |                |                        | Body: {           |    |
|  |                |                        |  att-result: AR{} |    |
|  |                |                        | }                 |    |
|  |                |                        |<------------------+    |
|  |                |                        +---.               |    |
|  |                |                        |    | verify AR{}  |    |
|  |                |                        |<--'               |    |
|  |                |                        +---.               |    |
|  |                |                        |    | verify sig   |    |
|  |                |                        |<--'               |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
'--+----------------+------------------------+-------------------+---'
                    |    application data    |
                    |<---------------------->|
                    |                        |
]]></artwork>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sec-cons">
      <name>Security Considerations</name>
      <t>TBD.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="tls-extensions">
        <name>TLS Extensions</name>
        <t>IANA is asked to allocate four new TLS extensions, evidence_request,
evidence_proposal, results_request, results_proposal, from the "TLS
ExtensionType Values" subregistry of the "Transport Layer Security (TLS)
Extensions" registry <xref target="TLS-Ext-Registry"/>.  These extensions are used in the
ClientHello and the EncryptedExtensions messages. The values carried in these
extensions are taken from TBD.</t>
      </section>
      <section anchor="tls-alerts">
        <name>TLS Alerts</name>
        <t>IANA is requested to allocate a value in the "TLS Alerts"
subregistry of the "Transport Layer Security (TLS) Parameters" registry
<xref target="TLS-Param-Registry"/> and populate it with the following entries:</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD1</t>
          </li>
          <li>
            <t>Description: unsupported_evidence</t>
          </li>
          <li>
            <t>DTLS-OK: Y</t>
          </li>
          <li>
            <t>Reference: [This document]</t>
          </li>
          <li>
            <t>Comment:</t>
          </li>
          <li>
            <t>Value: TBD2</t>
          </li>
          <li>
            <t>Description: unsupported_verifiers</t>
          </li>
          <li>
            <t>DTLS-OK: Y</t>
          </li>
          <li>
            <t>Reference: [This document]</t>
          </li>
          <li>
            <t>Comment:</t>
          </li>
        </ul>
      </section>
      <section anchor="tls-certificate-types">
        <name>TLS Certificate Types</name>
        <t>IANA is requested to allocate a new value in the "TLS Certificate Types"
subregistry of the "Transport Layer Security (TLS) Extensions"
registry <xref target="TLS-Ext-Registry"/>, as follows:</t>
        <ul spacing="normal">
          <li>
            <t>Value: TBD2</t>
          </li>
          <li>
            <t>Description: Attestation</t>
          </li>
          <li>
            <t>Reference: [This document]</t>
          </li>
        </ul>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Intel</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <date day="27" month="February" year="2024"/>
            <abstract>
              <t>   This document defines the RATS conceptual message wrapper (CMW)
   format, a type of encapsulation format that can be used for any RATS
   messages, such as Evidence, Attestation Results, Endorsements, and
   Reference Values.  Additionally, the document describes a collection
   type that enables the aggregation of one or more CMWs into a single
   message.

   This document also defines corresponding CBOR tag, JSON Web Tokens
   (JWT) and CBOR Web Tokens (CWT) claims, as well as an X.509
   extension.  These allow embedding the wrapped conceptual messages
   into CBOR-based protocols, web APIs, and PKIX protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-04"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.bft-rats-kat">
          <front>
            <title>An EAT-based Key Attestation Token</title>
            <author fullname="Mathias Brossard" initials="M." surname="Brossard">
              <organization>arm</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document defines an evidence format for key attestation based on
   the Entity Attestation Token (EAT).

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the Remote ATtestation
   ProcedureS Working Group mailing list (rats@ietf.org), which is
   archived at https://mailarchive.ietf.org/arch/browse/rats/.

   Source for this draft and an issue tracker can be found at
   https://github.com/thomas-fossati/draft-kat.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bft-rats-kat-03"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="I-D.ietf-rats-eat">
          <front>
            <title>The Entity Attestation Token (EAT)</title>
            <author fullname="Laurence Lundblade" initials="L." surname="Lundblade">
              <organization>Security Theory LLC</organization>
            </author>
            <author fullname="Giridhar Mandyam" initials="G." surname="Mandyam">
         </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Carl Wallace" initials="C." surname="Wallace">
              <organization>Red Hound Software, Inc.</organization>
            </author>
            <date day="15" month="January" year="2024"/>
            <abstract>
              <t>   An Entity Attestation Token (EAT) provides an attested claims set
   that describes state and characteristics of an entity, a device like
   a smartphone, IoT device, network equipment or such.  This claims set
   is used by a relying party, server or service to determine the type
   and degree of trust placed in the entity.

   An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with
   attestation-oriented claims.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-eat-25"/>
        </reference>
        <reference anchor="I-D.ietf-rats-ar4si">
          <front>
            <title>Attestation Results for Secure Interactions</title>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Hardjono" initials="T." surname="Hardjono">
              <organization>MIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Vincent Scarlata" initials="V." surname="Scarlata">
              <organization>Intel</organization>
            </author>
            <date day="30" month="August" year="2023"/>
            <abstract>
              <t>   This document defines reusable Attestation Result information
   elements.  When these elements are offered to Relying Parties as
   Evidence, different aspects of Attester trustworthiness can be
   evaluated.  Additionally, where the Relying Party is interfacing with
   a heterogeneous mix of Attesting Environment and Verifier types,
   consistent policies can be applied to subsequent information exchange
   between each Attester and the Relying Party.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-ar4si-05"/>
        </reference>
        <reference anchor="I-D.ietf-teep-architecture">
          <front>
            <title>Trusted Execution Environment Provisioning (TEEP) Architecture</title>
            <author fullname="Mingliang Pei" initials="M." surname="Pei">
              <organization>Broadcom</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Dave Wheeler" initials="D. M." surname="Wheeler">
              <organization>Amazon</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>A Trusted Execution Environment (TEE) is an environment that enforces the following: any code within the environment cannot be tampered with, and any data used by such code cannot be read or tampered with by any code outside the environment.  This architecture document discusses the motivation for designing and standardizing a protocol for managing the lifecycle of Trusted Applications running inside such a TEE.
              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-teep-architecture-19"/>
        </reference>
        <reference anchor="TPM1.2" target="https://trustedcomputinggroup.org/resource/tpm-main-specification/">
          <front>
            <title>TPM Main Specification Level 2 Version 1.2, Revision 116</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date year="2011" month="March"/>
          </front>
        </reference>
        <reference anchor="TPM2.0" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
          <front>
            <title>Trusted Platform Module Library Specification, Family "2.0", Level 00, Revision 01.59</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date year="2019" month="November"/>
          </front>
        </reference>
        <reference anchor="TLS-Ext-Registry" target="http://www.iana.org/assignments/tls-extensiontype-values">
          <front>
            <title>Transport Layer Security (TLS) Extensions</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="TLS-Param-Registry" target="http://www.iana.org/assignments/tls-parameters">
          <front>
            <title>Transport Layer Security (TLS) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="I-D.acme-device-attest">
          <front>
            <title>Automated Certificate Management Environment (ACME) Device Attestation Extension</title>
            <author fullname="Brandon Weeks" initials="B." surname="Weeks">
              <organization>Google</organization>
            </author>
            <date day="22" month="February" year="2024"/>
            <abstract>
              <t>   This document specifies new identifiers and a challenge for the
   Automated Certificate Management Environment (ACME) protocol which
   allows validating the identity of a device using attestation.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-acme-device-attest-02"/>
        </reference>
        <reference anchor="RA-TLS" target="https://arxiv.org/abs/1801.05863">
          <front>
            <title>Integrating Remote Attestation with Transport Layer Security</title>
            <author initials="T." surname="Knauth" fullname="Thomas Knauth">
              <organization/>
            </author>
            <author initials="M." surname="Steiner" fullname="Michael Steiner">
              <organization/>
            </author>
            <author initials="S." surname="Chakrabarti" fullname="Somnath Chakrabarti">
              <organization/>
            </author>
            <author initials="L." surname="Lei" fullname="Li Lei">
              <organization/>
            </author>
            <author initials="C." surname="Xing" fullname="Cedric Xing">
              <organization/>
            </author>
            <author initials="M." surname="Vij" fullname="Mona Vij">
              <organization/>
            </author>
            <date year="2018" month="January"/>
          </front>
        </reference>
        <reference anchor="DICE-Layering" target="https://trustedcomputinggroup.org/resource/dice-layering-architecture/">
          <front>
            <title>DICE Layering Architecture Version 1.00 Revision 0.19</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date year="2020" month="July"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1119?>

<section anchor="usage-variants">
      <name>Design Rationale: X.509 and Attestation Usage Variants</name>
      <t>The inclusion of attestation results and evidence as part of the TLS
handshake offers the relying party information about the state of the
system and its cryptographic keys, but lacks the means to specify a stable
endpoint identifier. While it is possible to solve this problem by
including an identifier as part of the attestation result, some use cases
require the use of a public key infrastructure (PKI). It is therefore
important to consider the possible approaches for conveying X.509
certificates and attestation within a single handshake.</t>
      <t>In general, the following combinations of X.509 and attestation usage are
possible:</t>
      <ol spacing="normal" type="1"><li>
          <t>X.509 certificates only: In this case no attestation is exchanged in the
 TLS handshake. Authentication relies on PKI alone, i.e. TLS with X.509
 certificates.</t>
        </li>
        <li>
          <t>X.509 certificates containing attestation extension: The X.509
 certificates in the Certificate message carry attestation as part of
 the X.509 certificate extensions. Several proposals exist that enable
 this functionality:
          </t>
          <ul spacing="normal">
            <li>
              <t>Custom X.509 extension:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Attester-issued certificates (e.g., RA-TLS <xref target="RA-TLS"/>): The
attester acts as a certification authority (CA) and includes the
attestation evidence within an X.509 extension.</t>
                </li>
                <li>
                  <t>DICE defines extensions that include attestation information in
the "Embedded CA" certificates (See Section 8.1.1.1 of <xref target="DICE-Layering"/>).</t>
                </li>
                <li>
                  <t>Third party CA-issued certificates (e.g., ACME Device Attestation
<xref target="I-D.acme-device-attest"/>): Remote attestation is performed between
the third party CA and the attester prior to certificate issuance,
after which the CA adds an extension indicating that the certificate
key has fulfilled some verification policy.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Explicit signalling via existing methods, e.g. using a policy OID in
the end-entity certificate.</t>
            </li>
            <li>
              <t>Implicit signalling, e.g. via the issuer name.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>X.509 certificates alongside a PAT: This use case assumes that a keypair
 with a corresponding certificate already exists and that the owner
 wishes to continue using it. As a consequence, there is no
 cryptographic linkage between the certificate and the PAT. This
 approach is described in <xref target="pkix-attest"/>.</t>
        </li>
        <li>
          <t>X.509 certificates alongside the PAT and KAT: The addition of key
 attestation implies that the TLS identity key must have been generated
 and stored securely by the attested platform. Unlike in variant (3),
 the certificate, the KAT, and the PAT must be cryptographically linked.
 This variant is currently not addressed in this document.</t>
        </li>
        <li>
          <t>Combined PAT/KAT: With this variant the attestation token carries
 information pertaining to both platform and key. No X.509 certificate
 is transmitted during the handshake. This approach is currently not
 addressed in this document.</t>
        </li>
        <li>
          <t>PAT alongside KAT: This variant is similar to (5) with the exception
 that the key and the platform attestations are stored in separate
 tokens, cryptographically linked together. This approach is covered by
 this document in <xref target="attest-only"/>. A possible instantiation of the KAT
 is described in <xref target="I-D.bft-rats-kat"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="binding-mech">
      <name>Cross-protocol Binding Mechanism</name>
      <t>Note: This section describes a protocol-agnostic mechanism which is used in
the context of TLS within the body of the draft. The mechanism might, in
the future, be spun out into its own document.</t>
      <t>One of the issues that must be addressed when using remote attestation as
an authentication mechanism is the binding to the outer protocol (i.e., the
protocol requiring authentication). For every instance of the combined
protocol, the remote attestation credentials must be verifiably linked to
the outer protocol. The main reason for this requirement is security: a
lack of binding can result in the attestation credentials being relayed.</t>
      <t>If the attestation credentials can be enhanced freely and in a verifiable way,
the binding can be performed by inserting the relevant data as new claims. If
the ways of enhancing the attestation credentials are more restricted, ad-hoc
solutions can be devised which address the issue. For example, many roots of
trust only allow a small amount (32-64 bytes) of user-provided data which will
be included in the attestation token. If more data must be included, it must
therefore be compressed. In this case, the problem is compounded by the need to
also include a challenge value coming from the relying party. The verification
steps also become more complex, as the binding data must be returned from the
verifier and checked by the relying party.</t>
      <t>However, regardless of how the binding and verification are performed,
similar but distinct approaches need to be taken for every protocol into
which remote attestation is embedded, as the type or semantics of the
binding data could differ. A more standardised way of tackling this issue
would therefore be beneficial. This appendix presents a solution to this
problem, in the context of attestation evidence.</t>
      <section anchor="binding-mechanism">
        <name>Binding Mechanism</name>
        <t>The core of the binding mechanism consists of a new token format - the
Attestation Channel Binder - that represents a set of binders as a CBOR
map. Binders are individual pieces of data with an unambiguous definition.
Each binder is a name/value pair, where the name must be an integer and the
value must be a byte string.</t>
        <t>Each protocol using the Attestation Channel Binder to bind attestation
credentials must define its Attestation Channel Binder using CDDL. The only
mandated binder is the challenger nonce which must use the value 1 as a
name. Every other name/value pair must come with a text description of its
semantics. The byte strings forming the values of binders can be
size-restricted where this value is known.</t>
        <t>Attestation Channel Binders are encoded in CBOR, following the CBOR core
deterministic encoding requirements (<xref section="4.2.1" sectionFormat="of" target="RFC8949"/>).</t>
        <t>An example Attestation Channel Binder is shown below.</t>
        <figure anchor="_figure-binder-format">
          <name>Format of a possible TLS Attestation Channel Binder.</name>
          <artwork><![CDATA[
attestation_channel_binder = {
  &(nonce: 1) => bstr .size (8..64)
  &(ik_pub_fingerprint: 2) => bstr .size 32
  &(session_key_binder: 3) => bstr .size 32
}
]]></artwork>
        </figure>
      </section>
      <section anchor="usage">
        <name>Usage</name>
        <t>When a Attestation Channel Binder is used to compress data to fit the space
afforded by an attestation scheme, the encoded binder must be hashed. Since
the relying party has access to all the data expected in the binder, the
binder itself need not be conveyed. How the hashing algorithm is chosen,
used, and conveyed must be defined per outer protocol. If the digest size
does not match the user data size mandated by the attestation scheme, the
digest is truncated or expanded appropriately.</t>
        <t>The verifier must first hash the encoded token received from the relying
party and then compare the hashes. The challenge value included in the
binder can then be extracted and verified. If verification is successful,
binder correctness can also be assumed by the relying party, as
verification was done with the values it expected.</t>
      </section>
    </section>
    <section anchor="history">
      <name>History</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION</t>
      <section anchor="draft-fossati-tls-attestation-02">
        <name>draft-fossati-tls-attestation-02</name>
        <ul spacing="normal">
          <li>
            <t>Focus on the background check model</t>
          </li>
          <li>
            <t>Added examples</t>
          </li>
          <li>
            <t>Updated introduction</t>
          </li>
          <li>
            <t>Moved attestation format-specific content to related drafts.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-fossati-tls-attestation-01">
        <name>draft-fossati-tls-attestation-01</name>
        <ul spacing="normal">
          <li>
            <t>Added details about TPM attestation</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-fossati-tls-attestation-00">
        <name>draft-fossati-tls-attestation-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial version</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="working-group-information">
      <name>Working Group Information</name>
      <t>The discussion list for the IETF TLS working group is located at the e-mail
address <eref target="mailto:tls@ietf.org">tls@ietf.org</eref>. Information on the group and information on how to
subscribe to the list is at <eref target="https://www1.ietf.org/mailman/listinfo/tls">https://www1.ietf.org/mailman/listinfo/tls</eref></t>
      <t>Archives of the list can be found at:
<eref target="https://www.ietf.org/mail-archive/web/tls/current/index.html">https://www.ietf.org/mail-archive/web/tls/current/index.html</eref></t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3cbx5Ho9/4VvdQ5a9AGQJF6RGZsbSgKihiJEi9JO/HJ
SbgDoAHMcjCDnRmQQije35Lfkl9269HPmQEIUPQ6m2vGJyKBmeru6up6d1Wn
0xFlXCZqX/5QxOlYHpSlKsqojLNUxqk8z6O0mGV5Kd9HC5XLMzWY53G5kK3z
92fbMkqH8nVURuM8mq549jU+LKJ+P1dX+7Uh3p/t4ANimA3SaAozGebRqOyM
sqKAhzplUnQi90rn8TMxiEo1zvLFvizKoRDxLN+XZT4vyr3Hj799vCeiXEX7
dnxxneWX4zybz/ZxMHGpFvDJcF/+WXpw2/L04PysjU/IvwgBn6bDiyjJUpjQ
QhViFu8LKfPRQA2LcpHoT6Uss4H3a5wOVVqaDwpARq5Ghf17MQ3+LPN4YB8e
ZNMpvGu/jdMkTt0w6lPZSeKi7ACQfpbAY53s62/gG0DbNJrNYPP4WXGl0rnC
yY7jcjLvw6dRnqWjHUZrBZ1CRPNykuXwfAdeoZ84Behvu/K8GEyykUrjsfmG
9+dtlKaqaPhaTaM42ZcT+r5b2u9/N55+6qaqFNVBfurKs4kajVQejvATzrj6
VZaPozT+G017Xx6l5TwuKyPzSruxKkcwJnzUBazWRj3pyrfZdZQPw0FPonlS
+SIc8iCfyvfxNC7VsDIuvtrlV38X5dPGUY+68jieRMlAReG4R1k6L2vfrTs0
vd01by8dHTD9WhWTGVC1quA6G8MX9W/XnQC/37XvL53CQVd+iNU0Doc/yMss
/Dwc+O08ulZxZcwIXuqm+NLvJvQ9D5hm+RReuyLqP31zuLe7+63+9cXTp8+B
SSTF7hP44Kjzmoikk0dl0ZkW4851HgF7GEyvRZyOfDD4aB/ODT15GcFxNb8x
4G+fPHmqP4vywaQGXNlXFL0SfhvlT4vYvg6/+0+USs0IKGB9UM5zwJb9CJ47
Pzne7e7tE2rKKB8rGGhSlrNif2eHuKEaAlZm8xJYA7G/LmB2J1dFNs8Haqec
TTuAzbRTzNQgHsUDQvgOg2ORACPIY3hEnvmPyPfqSiVyT/6o8gL/hlkA91RX
Mf+1+5xgWL5CP5YUcHsBMs9PHpoJyt/jDOmhIXD3fRgXVin3Hu/u8lL3uo+/
aKlJ3M+jfLFqtXpOJ0lUIgnI42w4TxSQPb0ZIqEt30TTOFnILZjYVlvj5PFj
DxGPd7vPvn0IVHzIrtS0DxIVsIEAQUR1eiAOTtUYBAKKwaODDwdd5OwgJVSK
o5eLmepcRcmcpAe+cRKBkG56Z4ZfqBI2UxNfNJiqzhCWMVBaVNAhOugAmOY9
iPJP8RXhPOoXO7svYOmPn714/sRHLzBsBXoCrfBUTbNSBZrANQirpSpEAxY9
NBJ3Oe/Kdyk+Yj9m/nI+yaZRUfmu8u4xiKFSgbTNKy8fx4NJBPta+bby+llX
Hk6iyzzqA1+KKyDOsmkawdIanqiAed8FKqq+/j72P6y8cdiVfwJ0Vl45VEPQ
K4Jv6uv9Mf6v6lqzNLIfM+H9IUrnSPlAdy/g49dHh70ObQwqG/c9jEMkq0RD
CdhbcBpxMGkGAynhHvP4zuPH3nHr7j7IafvDPMEV7z0WotPpSCDoMo8GoLuc
TxRph6DeDAvYTSVneQY6X5bIKEmy64JGBhXO8MlsJEF9hHFlPwMKmCmYt5yT
mk1UP2hL0C/HwOeB2QxyhapjHCVFVxyloDtOlRxEhSraMi5lDNCTIpNDVcRA
RsCWQGzCUUd8lJOohP9TNILM5wAF3lXpVQzaEOqU+DZw8UgWeJ4Uja664mwO
HDaCzwsAE6UDHC+VfSUjQDbws6GebOQf0wkcCZoNrn6gikL2F/pTeBlXABo/
fDWcw5cSNgdWBZCjfgZKTlwWKhnxhKMUkALzBfYDb+DI84JWBcpsHsXw+/VE
0RP0uIYMI4+yOZgdDes5n8C3oA7Pac2AqUEe91VBz+Ux/AIbYrfMcsoCxyz1
3u52n3j7qwdGdBf0SB/0e8RINrJvVPYcjAtag8yZxfm4g73EAfVEDVyHtUE0
o53laQICq8g32GzLgrYOlzYAhTfWlCPR0kmyaIhEkOLbhCVD871PgC4C1PNo
o3Xe6223kUphJkfZuWTOz4uHeYKwQEi4KLdUZbcS1wqqPY4MdEMEMcvitGzj
VzM49ThGJKcZ7BOyhVxNEO9XsGuqxKUWxkwEGQR8i7YDgBMxI6oAgr9Zkwhe
7SuV0lEYp7AunAMeQHsGCAZSU5QuAgQCB5mkWZKNF21CDXzdsE9lNtPPoH07
nZdzAL/oMj+YxsNhooR4JFGi0TaxHeULs5ubjtUIb28JixP1sx0YhXIe9wQH
IQ4Mu1FOQGIVBZOqPT//iw7JQUEPFPMEaCli3mYWveW/4XFOUMTgPBSg4egJ
IMURu5gZpc4hGD7FiQQ+gOVUbkhSDuckkXBpQMHzmb/OAZm+Sf2E8yAqf/iT
i7RmrYLb23/igxwXdOhAhAOitcSELSHkxdNZonBRVnKyFNdmIMwkiQdInVrS
5SqhxeBZiInu8IDAzPogMYcS6QjOZjqG/bLTQm5B0lX8HmadEpyrCGgevoMB
h2qWZAt4GQkD5pKPq+zXcg8csaW6424bsM9mGGKefgdzgH+35t/t7TaOtYyN
qU8zXFsJWofP0VAMj9MMKHlgKMyfC9uohaY0lMdGZveRp7HgxpfGChRXgAE0
H83gMPHrQzWKcaCYeBWYvcClaC+MAo6vB0fFH5xPJSB/gSRLuoU5AYcK3h0x
ZU2BhqIxCGZSnYCpzDLcHF4lHIQZDlSwctSPBuSjS4edwUQNLmnMGWgmZA1o
jhyjMgRnx3AtPX+wEkpC6rPuHr33rLuLOPN5sEPUUJVRnJh3zRqd5VQAKhDI
zY3vdeQlF8FjGmZgUeIyEaReFuh/netoIVvAXK9U3snSZLHtiRXZGiQxHSz4
iJ/ZrnLLuhLmcTyWUfo0VYnEoQ3PjQISYRbG5IW+ypkihyVii74mCUMbFkiJ
DCCA9NFLXayQq12BmnWUEpHp9ws6mUDnsE9M3Ex+FnMBrKlCLhoXUzypj0BR
T69wrbi/uNRzUJZjHovpKlfRENaERwD02Kk9PSO0z+MoZ8uSDns2iPpwAvIF
QQL+O1CzsvAOg7DEJJ9WKYgxDUypUAHZyT335CWedk3voww3hY4hTJlxMC+Y
7kofvftC3OzLq2IWDdT3W4+3buF9OElHQ60bvFPobj96t70v9uUBbP5iVmZg
Sc9AhyAJRlDh2JOxMQq1oCZW7ySYCOwZnPjRu85hW+I/Zzgc2TxH77QMoRmN
Yi3nNeVqDs7E20begPsMHJZUJgLYOXqtYcJvsFxYRuqg5cR56EEE5gPQb3Ul
0eMUDhKyRQnbBZx9BqsopWiFCJlExWTbomHeTxhJbdkHdYoVqFDY8M4Aaypi
kNYw5a3TulYS6hgwyxUaSFzQjgjAfq5G+rghM2hS5ZfwVjjXYP2kcOjEkLQZ
JrVUqWGh6XsKZA//lteKZdlU0x1SBMY3Crl1/MPZOUyI/pUfPtLvp73/88PR
ae81/n729uD9e/uL0E+cvf34w/vX7jf35uHH4+Peh9f8Mnwqg4/E1vHBT1t8
TLY+npwfffxw8H6rRu6EbsOBStxGhVwhKkTA1l8dnvzj77tP4Zz9m/bkAl/m
P17s/uYp/IEI4tGQq+o/ARELARakgoOPKlSSoFkVl8wqgVlPsutUAhXgTn/9
Z8TMX/bld/3BbPfpS/0BLjj40OAs+JBwVv+k9jIjseGjhmEsNoPPK5gO53vw
U/C3wbv34Xf/gYEk2dl98R8vBbLUj3BQr2J1zfQCGhMckdGcSQxE0jiD/4uJ
zODFS5YqHhthtVl9QjY9Jo6DXIS4bJTyniYqQlVkuXqPe8OasETxaD0Ylp3B
4KQl4IfO1tD+CZSxSPRERHBgYrI3cAZaE+mjIhEZc8bp3yA+er2uFhv/PY9z
ZdwjdgZGU6extDB3pxVkBmgPqTMAjG4Jy5vTYHTS6TuYPj5HNgZJDuWsEKOT
TzI2VeKSZwUiLBvEhGQL29uPrI+jM+aMmVVkDC1FdgMDLJAHwz/IpQpSLeGh
UZ5NCQ9D2PsCJWBc+DzvfAK613iCJifO05xV4EIK8AqHiGUr832Wm6i9WGRN
s6FKluhl8klFQBJvAyYAexHQBk6JEU7iLHKeeN+2Ps8uYe9bJwfn21Kry/1F
sHVfFYY9kxbrLKYtsCqnGVqGJAeqBgtxDwmAzTbXzHEyVciPHbPREMktFM/+
/M7wcA3UFpwQMtpCysQ1Gx9aMSe7uwpAL/AdLtDYR6Hf0Sct0gwalGL7dCfT
x91qJsa8BzxZFADJ0GnRZhGYDKOYnFGGzDxJg16Ha2AOoFkO0DMCUDCGACd9
nqLBh8qkxhupcP7ielZ/Fmjhl4sZwmDukaprOQKDaQ5HWmcGtH1NA2eCDKgw
toNFD7wprGZuzJFDeuutAjXMmiKk0MDTMOlYe28AYZ5dRpq0aGBcnoyn45zi
KTCy2DDDoR6AvzMan8BpjueAIiAdxcdRFRPnnvEAOIoj+U/MzJpGkkwjwYeN
fboAH3D8R3xWxdpb6vErjZ8GBUN6+EKEksU/msN2ilSNs5KYUNsc+FIbCfxn
jjpaxnTRYPC54xMJbSNahgezyuh8GzsdIWLwdYaulbpV2hWvkKH+4ezjB0L7
4auPp+SpihLtG2A8077xq4fHf2w7pV9N45LY+STLyJDi0xeA0O5CQORRyv4q
Q3KgTbK9AmwD4wAla4paiBktM4+v8Bs8jldxRIq1h5Yf8TAtDHK0YsfwO4yG
isEHaELpRAKLCEr4+2cwOp0XpcE0smccELGBzL/Ujh53eOCsY+5LzajoHG63
jTfSyJ7aoiwy/cQRGyfPUppkofxZoK4+wBCGPozExolhNrI7QeyONGv0JBm7
cJBE8ZRjF2mTB8LIqS4aFOpThIo9jSIAnPaRSODBsNFGZPfcF1qbsPGEm5tq
sN+yTN/fxL5XLYpJfTcBC/ZM1ViHPXF0QEGhz0EwAgcioUycquEMtTTirA+E
Tj2jiFw8IOIxwhcc95UQNT0wb1c5TR1mouIrYw02TLorz+b9AqkxLdEe8+Qs
64Ha2kHoV0zoK8nfMCvnoAoX2L4LiYx3K/SFVUFo7Sh+dAzSLrQwGz2IgH+y
f4+mPCJX6UKmc4quZyNR2LWGEpdtBwzW4b9Ez5aDk2ty4euTxJEEJq8VMP7Q
uFOsVz30fAFnAQgl2q7kBAKVrayaqF15lJLv1TwqwgfaVkkAdA0ucVPQRZuA
ZQV0hskDQ2S6oR6igdKAd8NLMtb9QQ0qUCXWQNiuRix6DKMQrYiPFPlnB+hz
0SBRWSFzTX0Cu7ZpRmC6ss2s0STYkTYjRLT5ZQ0KmFpsGBoNiN5mNvnJ8Z8a
c1MBLQgkNKQbp8hoFQGP1Bm5L7wlG3gNqh0pNT8UxGkaMhkOPU3B84y+NcQk
xBsTEq7Tv2wFelyhVWjt0by50RlH6FMGeKKqGzQCObNA9mpASt9TRZoF6SQZ
iGNejS9cr/nkakpi/QyTB5LFvhAdjoBoVc13RqJbSH/NXqL617iWAIDzh9oA
nH4cSAPz7ArfYSmBq2hDBQ18Am7YnlGtrK41inOEAhoshdfZFO13CuNF7itY
bVccs4O2IptRvgdqYTbtY6DN04tboP51yAweUfLCthihdxaDH4NkTkoTD8xW
UM1rNy+0g61CGciugCJ9Lt22liVbNPbVZrpAwn3kCNE6AuTNowZzgSWfszqM
dkazRndrGoEJkM1JQxo4hr9EqUkpnDdGXhAyVzz1QAWg0hgF08H6qvD5Cpmj
sEahz787/fCldhJqmWRklNYE/S3rK96CPAfmLLTt2BS3kG+cCxfU17bLsWAQ
Vg6SP6K4QzN0Em+VcHxNLnmKXjLrwHAnkkvbhJArMoTmE+Ja1CMGyDVJdeCv
au5IUmPs9jAPxURpfy+0KgQGY44n9Epn4eilOvceeQqYDEEL29H2NGjP8wHZ
EKJRz5IfspLcdcZH4qw8ch9q7YAnagYTZFYwYQaUUo2VERrZpAx4dVQEZN1m
rVqHOYCpfS3PtfIalfasJfFIUYoNur6ACikUSMH82QQDhxHMc0b+BSYGfOaq
6IqINYgkviLTR213Af5bza4qdGuiPpLxhlkummKN4tMYaWN4QCXIw0c+RaIC
AhwJVkIaCfABCtcxtz3w6AdG5asAPaNVkllEmxASo8fQW9GA3ow4aO8py9sY
FE8SRRxYvyU0k29FoRzY5lBz6HNjk9obyzrBzZORIIPbCNteShEBNXS+hqoO
7Aka4z6r6r8Fy3rSHUdK8c6bcTQYiq3aiLWvibPZ5iatrb5A3fbSeUhyUUgY
WSnadIMyUNZFyyZeURyOvNh6vcOY7l8ANYnQCqItQ9lTs3R0ZkCW9jMQpWwV
q5yVOmG9LTE5AXSwJ5tO56lh5sRTB0k2R2ijPHJECvMXY1WGIUqQuNNrUiTQ
WU+SipIfxnONvWFURryduF0cO6Gl0TyREftBJo0kVENz7zHcjjl6ukF/JhoR
XuKC55D6v/Aj/vF3af7TZ8D75D7/sQIpBJq3//j7X33vk+iBCiI/y2/sLC44
GB4ldh74LbCAC5CIufo6+JjyFhC5F1EyznJA/bRwT1ytNbuO/nkp1l/Rmktm
BxsuGZZuky3X/vGXLQFJiKvNoYQ/V1+0ypsGBnJLC/zH3/Uub7K82p7jKiVl
Yxf3XGiL+NA2AFofwI0nL07Zu3SryefBaMIfgzD2pZBvaqrSLR0KlFcPScn/
+PvNG+B3xUQNCSmbwv7OnC/4/c8HM4y6MGPDy3Ff/8WC+2uIIoHrAGpoWKZ3
voOp1f9rPNq1SfylNteXjY8xd7zZl4+IPaMyHybmdEgR2+U07e+3PCXihMRx
oDkAA8YH+NR0MbPBKB7a3l6peNT1jqrwrqsWnoiosX4pKpoESNmCVBaXoIe+
0KQ2jrZXA8XGA8dPfamMlw8s5IP8QpuRryW9iPRHyqUexgV7V8AaJqf50KhL
xmoPRb0gZci5mHdgl2weTq6GLqa6ZCY2GhoXQstutOT/GeSz9r8ze/3sWO6v
8vr/H3mtaUB+uby2P5+/cDt/FeKr0fOrEN9EiO/5QlwL5OVCnBkmCfE1nAe+
k+VUh27ulOdtGVUdwzadtiEWJDxrnkWU8xU0+6GtC6dsVAREVBXxJ3mc5RwB
RrdNzrk6RZO7MEhVQDeSaBTyraWiXVLCICoPqhZsNdEvDqOXrEzQDZcivDn2
S0pPPclfjVtPmvxLC8uGPb+XsPxVrK3871extkSsmQDZOjapEUL3M0n12+tL
sECOtE0+T9HI1G3Whi/INpU8wkZLTVrQvSVPUx7I/w7JY8w28/avgudfXvD8
aqX9Ks7+JcXZauusyb5qMNScFecFQ1uvXHbIIWWHHFNuobx51HQdksP+BtD5
Yqa8oDQVpXD5vqlJ0s5ym5yNpWjoLraVFsLeBTSp2k3ZF5RsYN8h96ZOcdbj
BXLKZepjzTZzDfpP3WePv/WTGOjrMWWw+aK4Gh5ENqDS+VTeyMOPH857H84v
3nw8PT44bz3ebsvj3uujg4vzn056rd1teUsr7GFiM+zMb/13D87Pe2fnB3gl
h1487J2eX/gf0utuke8Ae78VBEHnS9xYZhY+5f15cUlvmef8ydAfFyqYGgFX
CeBftvxN7QbPbnsj0+io64So2K/x2XmclrvPTb74BadN/LYOx+GvDiObRcAx
gQpAObnAKX33uNvd++vu887uSwfqln+9DchyGeZ4tS2b99SdFmMC3bhIVuQu
JiiA69MLjwEnqKjhhXUaItjiu12c8otgxpX1kTv5uxfNz9E8WJ9bbx60wOo0
PGxpZJmvtVDCdy1b+KdH3kMjZd0NqSLvRFu6FexVmblloB3LmTx+bl+UZ5aV
Ir80KzBuNo/N091xYNHMtuivW51MTY4nvJjssUHiuu7GDIVxsoTzyTBDPsyP
EmEGWbvGlc2tA5PubSpYUDJ2ziAaK9XYO5eUYK+R469BX6zmJFSaqL7gYlJV
sXQfJeJbzryESGXLY/TLafQ0uj6hBDfQrOs0tPO1fIP2GAwsf7P37LE8OPvQ
3b0o5v3/giHsi0fpKJNf7yyjJnip+R2m7r2nRGKVt2l2fwKBtZQr4vouMFnm
TjDeZtSh0SrNjprs/QFetF84AmpYnJ2HeSiYhnvq1v/DkbrTKRp4+q1Pbr20
zBd2YbXtDvBh9lsbAhckfT6VPESVjVTHCCBgeVV+LVhRMLP6Qfdo2Zxw/+Ac
68yza3frgR71NogOO2o7RvhWs8k8fSsumm9JVZiFPLBqDqtA3pQKYCKzy/iT
nvkGTGROKzGXXKv5oyfvjv7UptTcutbFqdnIvI2DBEtPOq5SUwOFd13KBOQb
1T2C3HfZkQxK1DbaEt8SloSzNRj5l2Q24av1mTYzHphhfTeZVbAUmBeYJb98
cs0syzx063EvGKpxh/3RotTfyEIpztb3x/9SflPb7/vxms05TYXPNE/Gro50
HLvCim6zGXs3TN0Co+2qouxWVnVFNnL8QTm3090sJYXOZ1h4jLHwKBmqPsmE
6/oRC5diOjrVKsW5+qNg0aYoLe3SdCWRRTP5eAv1vrdaYes5GGb2idbzZ8+e
PNuuLpitiyrn91jGmpwfWWS14seDcP+D2v1v4tUdjaoCtSzyW1duZdhiOwh6
quBRMcvjKbyF9xOznNjqIkjWaUSyl42NBcKEPhgmgagSVeXqaOZd8lgjB/fr
uNCFHyrj4Ed5vapzlN+FlYF0tQOYVjS4LOgmaHAbi0uyyVdY7iivlRm5udEX
3DuIClurL1ejzNTrsRexg/TwAab6C1sZyRUgNBfmKaeZr4fjss2ulnjdlZ0b
bl+zkTCvcgrVmCqU+fIJK/Xy9048+fSsS89daBjf08H8d05b2pe72/L7lxJL
mcpuEf9NyRZYOs+fbtMz8eXFbN6/8Krq7Mu92gu7z90b4WD78snSp29rp8Yt
xByaN3y9QhcS0bA1Muh0dOQHTrxn1YHKGrtSEWyKmExAUwwiJDm8XAYf+veF
gipCDTjY5iqnWE9I7x0s/YylrGQxS3eZSTjbEE6iolGDxKS6ajqpLk4BUOlf
rTLTC5cuK2jWE+LV22uwdmQV5QlGCtQnMqtz72xnWEbf1clALFcK7rVctY7f
dJ8hPdqq6be32/rE9nAEYIoaPjPpVq/347Y9w3Za8ZQ8OHj/FEB5tbBgfD/C
YdU8ZpBf+TXXeNlfGY0xiUDWI6tGJWA6w3vYzGXYgLSX1HFvkRTKCVUmhCP4
ZA+WDnC78LI9UISvjsEWnHzUCQvmkpyj6Jdf49sfxmAGnBOomnVKpbkJsEFT
i6dt5npB29em8AxPEo6OET9v371+gy/Ccjrv8bVWRat6rXJgDB3YqlyVLVrB
hVnBxTTCFJeLgr5sa3TJrS1PvPHPlnllqy3fAnm3grltB5MTosZYlq0Rvtqq
b99WdfTmn2AKCGnLnwZ88GRvu+5jCbbQsJMfjJWCdH6FxUrpOXcwSK55Rw32
l9jMgX/YzSE0lM2XN50W0yQGMWoLv2dzSk1CYAC63QTNlMGo120JxVHXXMKE
edk4pTQFOuLwTreTjmYYI79yugCtJ2TqS8S5vgPv5lcr12JCC3704MRcS7VR
gzsKJa4yprTuaYLUF4ZDN6ifP+pnTA2Lc0/l/fl9l02jm1IDF7bUwCrPb4PN
tdqd2TikdWuaMeueSr0Fv5SXd3NM/Q8jZmMPrs2BuNuB23B4dCTOy0pBcaUj
eu4y9is1ia4w5+PmUV//aq5gx+NJJ6EGE9VL7YGK6Ao9WVmmbGTLZmi1axnO
7VoWV1sXBwmzKvwySVRPQmvmfqElk2C54hJm4XtX4EcjZf0fPyVELskI8bI+
6J3lKR/261lxeYGvGdxeUDUE/wF4k2AO8TnvixqOm77TWPS+qmJdf3VVz27Q
37j48wbYCpDGmyR/qaySGg4xq2Tdl5szSGAtctP8kaYd2+gyXdO+bgqgtvub
AWggkk0ANOSofH2LtHfPHBofHgL66/oA6ikZCEBnnmw4DYLnkjjupi6XTiKb
sknomb9WVrc8l+TrW3OE/Un4P7Uj3JA+EkzsZdMjNVllWL8RUb4YMn4oU+3D
xBabs0Dwq0eGJzNTFeeZDQJwINErv4dJK0GxcF1lITT5lhSqaWtVojDqdeD4
cknFAsTKThbWtrOZX55Yqlf+0wp0HeQ65QJd6CMss8VuTS/dHw1z3ZPFuMGC
q3Ntoa8G6qputrpD/RRWqqYvX+1DzLtyf9LdnRRmGdxmxZXFaogJL0UxFdJf
sVsFlxkQ1VVQYR9yPMLY6CqnmnAmXaCynLYo+OM+lqDCestsiUkX1NKFHkzF
FAq/YdUdA0ggINtlh0f0Cr3C+uEf2F3FHhNTB4XBUsHgbBqXVTQ7x0ydnFdu
YjzCqQzAPs1KqSstmnYZrIhZ0PXLrpGrsx/MhxKiALIIqRaHMKUYWKGbF6b+
XxMYKaybhV2UJl1ZHo18ZGPdxDSrogStYpjlsHHVPiob0bYSa/felJpyu3xL
NL7sSQfOx8zNHDdTc06zakIYbZwxSWp4Iv+xIKiDsqF6Cnu1cjWmilelh1Hd
TAardrWiWowFe5lKv7cWVfoKzgPhSNTRXWc0rqpggG+UE8aKYTmh16apUmeU
45p8XFIiuc0YbDRRvLFXMH63ZW2zuFwpLFCHhSfDsu5Un4yd7jw519LAFhkK
+nME+IxJHXLFJqW5BeBq4dg1Y3uTYpkJhGBwR00t4eUDutGqM7d8bE0AVKEP
B469Rg50Dx2r9lVD/VToxVR4cdSCnlOcRBqstqReDC6/SJca4opbcgSaCrZG
UxT8QAA0xtY8rad+bX3xMqmEHIyBnAcILFERyo1Urb1C3FWaZLix7pzJfJ4o
31/HoecoNxX01HJRuJq7PKyWYYW6UzMaYtcuz1azJHOB5BrjhXwjRDOCWnVR
c9fF8GxPeVt5mJcXaOIIwz1f5tPvsHhNHansrDm6FOLRaWIeMlHXEUt0HYet
cxuBsokJOudk1ex16EXjmLDWdz4rRq2rBCi4c6eLcenFrxpBa1Oc/eIx6uBU
0cCUs01yuJEyhNNAQ4bueObSd60GCjw7xfWIajCbqdppcxoxXkUwJ03XwGv9
OG1L2O7BxCPpzlLd0QnFNbQN34NiNjDjmN69lHWXV4UEKxgxXu30QFGPvHNd
Uf1Y5ohVmrql3j/astjVqdbX23DSAu4fJpeKkM+G6ViN9YiJYINz0Q2waBn2
HeoJ7YUphC2sts5nNDxhd0DC95v0HBmGPO5rIjddq2uylkW1JHKTkVy7eOtp
Sisctytq45tK1xW4mxmcHKA3Vet0NCc2mreub8P0bPM2lvS+qVnL4k5ruXop
7OHn7p1JvsRStZxtUcKGi57rG9NNu7t8dYXP/GumtFhuStu7oW6xbXmHPS2W
2tMG2peb0g3zcgd4JYXWnAl3WtNyuTXdeBGWW6k4+9itmi3sVQY294RKooW/
EDeBGky5xNrWGltobDchbQODW2x08r9o55qO55KNa/RRUDCxmZ1iUxWkXVFE
sVcCvttkd69vdouKJVC5QGFGX98Q990wodtjOY5+ZjO8Xr6j0QpfOr+lRrh4
KCO8wQJHg21TI3yJBU4m/s9qhPsWOJuq2givdyxYYaZWrXCyWTcwxBuscDvu
w5jhgQ2O00PhUF3jHZb4cjMcAa5tiW+mzdxXE2gwzBtLKGSeUWL6wNzPWDd7
/2XG+qojf5etfjdqxd2mOlk+jiSW2+hiFV6588c65o8z3kXFeF+1nDVsd+FV
8V9iu68Y4MFMd/mQprtxRTRIdKuo3G29r0Fjzca7nnqnxhyd1b6GynK30b6R
zbCEcgtfHaMJU11R0kbyYpm6MAqqWjvjXNw5pY1Mc8O/FpZArXY5yYzGhJ83
zXH5tapVdjyfswrhLAyQ5csLTPm7LPm70VRRlLyId8eLeMseV1MtyNQ/pKrm
h37F0kNTsdSV/9EFWNtL27jTM9j/j7uceQnFcAJg4tk8xxZx2P8R00BLajmG
I5u685p95MQEdItv0y5PFAOVRnmcEQlRDz/V5vYHg0WHjJecKtBOAT+x7lnl
ZtAWrhMJyI+4A0IYc6ajOeaAUsrqMJ+Psaw6yNXZVHOniYqScgIEodqmwJAo
82igu9Vj1rKaxgOJrRGAHFU54IZq1K3SzFjTKZaKtT3USb7TJGe2vgV+Rjco
4hSmbY6K8FfBnAdIHxSP3DWno6K2S3rq2pGEG4lNOWwDj20xj9/rbiuuVbPy
cbetS/heZ9SXsyCd9khfQDITt1QAfyxILaF2MLpHAqo7bXjrOLqk/p1UNt+U
yrXXbFAvsnqGBahpiskBNKFzzRx73GsSXuq5dpeydd7rbXut8EzVDdNkES8O
sRc75bzEPMfEN9sT1WvppaeH6652usL2mUJ/X0TYJDSeeiti8rQJ13gwYF/6
CWXHVDpSUiHjtl+jI0kISJxeZQm2zQAcZigCSDmclWQRUt9ucydr0NFnkzsE
58tqOVOx4hYLKLL8hG5XERaAdg2LBlnH9MCyGAX8dvgIi2Y20HJ8VeXbpjM4
KquAA1SrK7qv6brAhBlEk0OlXlTFolFuDNP1jaCK8z0uBZ10mEI6LHRLlVRX
c45Ke6XWXh0MHM9mNaEHQC/HoM2lotsFakz2F2RTJOawiDB5PCEEYztRoCqy
hNi/Ub/vEsTUhTeC55iyOpm5AVP1/5uCZmqAorAU+sBjAxjqhBOYwGyEsNaD
BHnJu4RUkciDkyPRypX2HPFD/8lrw0zHVrfb3f5Pw1CYWNls2fbU98Dh5F88
oWuAiDbXAKa687zhQIl2jZjTz1sS3Huito9nHl9wdbjNYxhLDXobo3gB4RmN
6biR++zw4FWooJJWhjm2JKnwwhNYZ7OSrh3IGmomxRJs6B3zmj7z1RBhUot5
uK8aS+G5RbVMJ53tYPVtwZ3FDGaW3GYcq3Liu99s6rDM2EXoOXDCgwCI5PZk
K6CHWpjdZzHTt0fwsorjkebkt/UhqIPW3TBbB6fcFY4y7Ki/GK1Ce2MH2LWZ
7FT4NeO2L3h7tiw0CXMnQ7Yxiwy0hNJQPDMJPeOisj8ON45igx6xQvfkI+JD
SW61J/fCSXbCLZCYJLB9p03PauoXZXhpI4YDvqk7tHlcO/haX72s9+RyyzK2
J7F43fLUk9iGrEVwgdXTegu+yGo23goHYinVs9fWdK6hNz+MUpcEAHxdThZ8
DvnOKkjPETBOEe4R9giIU2x4a5v6usAiu1OD0bj5mNB9snHxJo4b0GUg2f20
hIltsF6RjF71/xybDKI5qe8DRFFxNd4s4bfbWfLTFd5X3drj3Qqcz8aDikUE
/dzZz+KzvW1CfQD04zr497kGx/tNd4vkP8VXnc43evSvzEPwGX/4VQWO/cL7
4QdFMErj0Hd88VmDOPkIttZOqq7PtGKxKYjvOvWfbzacxd7jXeyXSUL/ngt5
n/FJ3pc7v3n+4sm3B99uDOJVNlzsy5tVT94FQrKQbn8RCJTwHbo322FNbVMQ
t3c/uRpElegoA33zhXzJLLoh6XeXPbkCxOeKDvp5yZMrQHxTOYDfVP6tU37D
312YyTJ8+F6lVTMxK1qK1xvQLOv7vjmcal5E655wGk7CPeHQGWhF7X57sH1/
ONtNn28KZ9m2187GOutq/sKzFb4IToj/L4FDdkLn6PWXwdmu/H0/ON804f1e
8wG7BZvNt+XJwfn2/ddVkX7f3AUnuH+3fID/sfPeFJz5JefzgPwH+UYraqC7
jeA8CN/47BsWRHZEdZvDaVK2LN1ttK7mn89o7rTMiW9Piu37wXm4c4o/MCn/
7/+Jc1ozBFswie3N993c/7tjoj/HvrNmr5XhXuOwa83ni9TiYF36RLaXPr4m
HODdqx9fC84XackOzpfZP958Hg7PoEPoYgX78uD05vaXxM8XmhLBumo/pF0/
ABz+2oQ5CGX3g/Nd3Yi/D5yfZ12Ojf5S6zIf1rjiPfDT9POAengjHPlVs+W3
kTn41VLnFo0Sebe8KfTJIy97ZYlkeLnilaVf1Esb2jCauVGug+RU84Eqj5A7
VbvNokJ7zXTBtkeP5FF2Ll9zX+6Pts14UwA9pUep9yg9pnR6bnM4XLa4K04k
UoXez0uJXkTsN7DdtWljNjxeUgAQI34cOE8WmCiLEd84y2NB4SbUfCfxTPYB
ntK3QXRDcRNxWDIVctIKih/lapphrTM5jdJIB8p08/J6DLy9CqjN6JqSbx02
Q1hnsJ5WPk8L52UfUBpKwb5s22q9rbOCsQwULErkGcxv2Db5tGo650gblsLC
hgmNkVh8ul4pN87Kxhir9iiLas89F1B1wVQv7moq9G0WGkUHjwpIUYcezTU2
Jgs/Rak5u+LcH6D5BpmJmtrIop6sGUlHZUwMtRahbCP6chUlHYqMY2sMyiEX
nKgBc+QXKfhuSu9w9Da2JTT1HF1ovKRUQp0TE8y1K89ic3+oVifZhAlXZfR4
e4VU5KUXTucllvsNq4iKqziSlSBK8/2MFY2S6/ao3damGka0nDvisf7EK5Hm
SsxUrhUzPeSYqbg7iCM5yLgygCpcANUkjjUHUIOqdMvDogxkSVh047joJrFQ
P/MrOBkbx0JdiFMsiXFGpoCI60h2R2xThMHNc39x/9yBwnpsUAaxQeE10A7C
gZT9CSIHM6ZH8yRIDbQRXbtKX+9IogU/w0JAGBaL9yfanG2WTfHcRIXJwGrY
JNPAHD4sRpSxsxCVhBo6vzZtXacnmbH8eODSEB+71/1gHWk4pppYoOw0BP66
IRw/WBe8HMCxccLP3kcuPugH+aqaYKBFf2VVwvCjVUG+tVVW1uiawigbgmgK
o2wIoimMsrbObD5rDqNsNhOzoiY4a4Zi7oSzpiv0bjg1ede6H5z1Qih3w1nP
FXoHnLVNt3XWtfl8ap6ZFS75JaHxDfe9YcGr3KEr1lWPkt8PTjVUfl84dYfV
fferGipcCWdFyKJK5/c7p0vO7qbntMEyX+F2pg/WCZnePZ/1Qh93w3mQ8/65
yRz4UjgPNR+tuq0HpxqZXdO13zCfIDK7rmu/AQ5ZI35ktunnzvncTSbrwKku
Y20XeG0+dz++HpyGCO/mcKrc++Xaobw71nVfOWgDdIcuQHePdT3wfvkRujVD
ZyGcBjzf/3z5P7+wvrEJnHrA7peWy9WA3X3hVAN294OzqVxu/nk4fezB8Nwc
r/uF8HMfvaXppymGde/zVYnN3Xdd1RjWfenn4dfFDPSXXNc/Hz/82eGs8NM0
nIElnzWH82iE9UN5G4bxli+2FsLzwjSrY3imKUElhiewrIj2YB+CqYXhEo6W
yZtHhRp0Bro5+KvXdLmW2rqFD1IgMOiWAB/Rc+izLS51qC/he3VylM1zCVa3
Du64m821hgVNEYHKbeCmpgY2MoMtHERDy7liC0sI2L5z2ue+dY6+eCpQ8p78
oxYvLYCz7QDB6/bdmxvqk/Op7Jzqj25v2d1fBIU0ItNmrH7/f71mCq6mQfW2
dqFEZaAyulS6kIzeNt6fA6wN4u1NUB7R7o/pPaXv6Gy5N7fE5mjjQvN0yc+h
TTDa6CsPcRxlyWYUtORLe9p57QqnAdZg7XwhlzZzH9e4C3+9VhxIIc9HU/VR
fAaH/fhuX/4Ef5yaslf78s/nfnWTv8CXh9kUf62Ms7dqHFsm4J4D6V3y7WCk
2TU2DE9TfdNqgO61fx7Zi5VkTx1XdX9nrgFUQZwMUef59OnLFVgSwCol1pZH
DgRAwEaSp/qaPTzOjdiQePw4ATeI+lG3RgRuVumVyDEsuiNvwupNpRH88ua4
Qr/LH/IX5zin26cNQW8Yg6uT0gXTvqlJRPFCU36jWMC2TmkwjGaFoaNLtSi4
tFAScUhMURdHLvw1UwPqiinpzhYwg3Q4y7DbHceT+O7oHyk6z2E0U6iJ3sb7
1pxOAQwUPpxiVS2/cIAHprr8OrraHDjC6uJY1KcQ+nqYuYtNSJbeRUFATR65
Domtk3dHmOFh7m/zZTcRT5E+sRkotzgtdGKGq/yMsjjPosFEccENrvuCKyDi
EF4llKLamtM017KVKLyOfZjVMVYpiDodX3OciAOJWlZmI48Kw+u9SIWV+li7
3XrzQK6wtx8URaI0Fg8YZdSwULeSBNWCIIDTpZYaLm6PxBgTeGxMSqkFWAa/
Cw/ie8RjGUkIyp9RV+w1TtQv9eeHew2n2Cdh1QxzValQXcHQbzhtCY4AlZOm
rtPKq1l0hi3QokQabQARFlNiAKZ6pHRAGBLelZynA2YiwO72uXEXMOR5UYLk
5HHcmrSi1rHqU0fXVAlWp2tdnB50ELc3N/zL7e024UTDsDkz0YAryPiVemjZ
sIEZ8+DDg23mClzPqbB7LptD7YaW0+oCunYBr48Oe7qyV+HrKBxp13WjArLz
+Be1tTR7sdWb9hX1iDo82Kog4kxhWR5uNvmiu4v/w1Nyc4PDd0jUAAHRFV8z
MeD6+VDzzMODVfg9ODzumbwzX44wJL5JHA2mqsO5VLbjN2zDKeVwVY/VTOW4
RioyRgli3irLYFpWXbO7SGlmxJk8osTJR+gGNps10klSutYHAhoOw1bXJjWJ
k2VMNWuvWzqDQr6JCTujeTKKkwSv6CLTDdIYdB6EJuneJzRUMLUJkxiSBAfA
bB46G1RBRgHBDVEHB/TaEmUMRH48eh1uO0iYjk5m8GZnBjua1gbTcE0CERdM
kinohV3xpJHFeLVB0L+7z9VxjFyBM4PlYDTJRoiRWRRzayhdDS+4mh7sTJTk
KhouePFFmGuRXafKgCkmXFkTuV2czs2997gEBltwRSCuQjbg4nWcgphmzPIC
AQ44wJygIPkwmJImKVipLpFOJKNFGveDDtpHzi7jT14b+6d34FDDpnHeMTYV
kl+sU14QgaLKUrB3bGxwbPI6gnQp6j9JhXIo+5DlJGa+EChMNCqz3N4gx07P
C//kuIyqrvwhTeJLUl9N2+/WE93RtIKstqkc0PbRtqK9NCIfEx9JUCIVmRFQ
yM6BStKSEkZLxAjQjLXSgsqQz7qoqXPmEIy3Q2jUpbw8mFW1iPpAa4ONd9Vn
pngzXgtSbCGdATR3+R8WB0juyg9ZfXMZUhE0HB7Oc5Nl5+kCtGKfkoIl806t
WPbzLhOOJaV39jB6aCziaYx1VGARrWdBKSJM2DKM2RIS0o7Zu6aG42zFauKJ
sSYOVorRqyaMAqdattE2la1p7ZjKxoVjrRJgS1rSweJZdFAVQ0P+wCmYcYqF
dCg1lc+MJkOzFZUTWq9l0SVny2EOADs29eqVbiN+bLs43zwKesMK8QHElUZ5
oeWpGavgslYEqhON0wy4+cDrCK0LcRfG9cDlTHTTdt061+ss28+G1iwc5iCx
2Ovg4E3j8QRrTDKg0bykimRYJXE2T7EaLCc9ogWD6cReXdWPrkgPcX/NVsyp
dSRIOaPMafO6pI4KEaUru9vTOjRSdYIdzMvPdmuh6ktcRNjP2EwhqRfABlvk
DVYyAbJZaAoYKK8IGfEDC6atbb/atAdAdFwZo7BLZnENCqlHuKI+Xb0FEecW
F1ggmIqkue6+po6XSUTdl5FAOxGnaTDBhdg5a6/e2NifXl8x6jFFcOgKTC57
HAFTo+MJYgbrNilk9Kyx2tpWlLJ5HS3awt8e/a6nehGOkctpPgbTUFfIY8i7
ipnu6loOkiieUqlnTtGNFtxPgaZg3lw2XypkBnwFsVHm8YCy5aNhZ5INBNjC
c2Y/emaoPDJN4jHSNOpoWNOGueIwxRq/mIBfUBIpVVuhounoqLlG63KKdc6i
aTYn8bbXef6UG5ZTNSSsVNax1URpwTwu5lCKO1pTE1Ok6te0OHq72tKaymDh
h8Ia1iQws+mMz163uSAvOQV0t3TMW3XJ9qliqqVypdZw8AqJmQYqU9wWrz64
fyPAq2em88xBNZgVXAO1r7C+NC8Kx0/Up7ZpFG/IKFisTfW25SNtASabU+wW
UL2b8Da7VlS0l2uCJ7jdsDUT2D5/RFclydhruUfGbWHEIXpshqRhY/lx56DQ
eMP5alet5TGWIyEjFUwADQwFHQHa9LL4oILPVChyinJqUBjfUoCoQTZPgLxi
9FWhfCPUUok4vLtD1B6xEAAWkvBxinWNU3FNLwfk0welD/AAh8vJW7AP4k8m
ERpllDlZzJFBvdVk1XalF61Mauy4zp0sq7JS3zbAmXjd3NmeMSKBvEVFydVZ
iX+wSqb7BXUIQ77b8FDXOXrFrdw7LKhsXTNajioNc0WHHxnwh68+noppNOvq
FwtdEHIYwxrwMsUsVgPu/MJnm8wUEHVgBfXj8Tyb62rbpJN3RQ9VFt1OnoqC
orW0wwcKbZ22dyUHv3KiNKUylGNN8aVpM+QeIKaDzcEBU4BZGsnSnavVtQIp
SLtx6OgSNRnHHgZSBlaA4vEOX79+z5wAOSbgEciRbvVYBBCVGMaS66s0fD5o
NNPQkNe6S5siyMKUPTpZXOSqgkV+l3iMthuJDIfOT40bBksQ9lTxND0UksNx
arCmQzQeebAwAabwN9VxUsduH2nS5Lov5GUKahOW61yKLyYrOBOZlgRId+1K
G1b8jI6FGCpOvo9JMaTXWLx7tT1bNzfGT/O0u8demn87fXP44tun33IFtoPU
SLlVO2lvkVGFP9P92yORC11C7ELv6vfUdP7fW7SX+3J3W37/UvYBQbKLyJKt
F93u86fb9Ex8eTGb9y+AomD3Z4D2cl/uVV94skfP6kJ61OWbh9qXTxqeva0F
U/npjuklxuHUN/wXe66NNUBBsaW4MLcjKQQhBPVUie7AnS3DqeUxswn4YKRb
RhSzaKBENILZaRmMqrAHswDhMtVy21CIRrU5+3jHCAU93RwT9UgFlfSnCyU6
wsS2AM7ElpU1xgJBblsJQxUIC5WMWLzxnUTbPK0r32ohilMgIWqas5NuMcmA
ubYFIoHtelu43UzdtCKY4V28ioqsldRhPMbsU9xfYUuhu0rjVAuW1kIU4JiM
75WooVJoqHz5Jh2Y+5SAj4iUIRLsQJIR3gzVN6Os0kGzH8V5oe93+XvDgkg3
7hjW9COuVGuYOBeXjjTHp33UrKiqblX0RLM5VAIQ4fTJY45litXQL/g4JDwG
eg0eaXe/yELi+6gpUglC1Zqadso1K1eopYgA9jV2UcHare4eFrPOuLS0RhkH
b+OCrhYJ4Emy9/ro/OPpvjx53zs468nT3vHHH3vy/O3RmTzrHZ4fffxAB4+s
VzjHBV5O6pRJ0fHrzz7ew/DkG7BOC10CUTY3roanDsi9rUzt8I78YTbUde/L
PBvOBzp+eZxdVcpRMxfpcHwOuC/pOBzCMgVwaZoFuqbWmPSusNMBth7FaM1Q
MPH85DiQxGtBe0wVremubWJuFiO2/5jldMHy94CMGTxgnVVM2KAiAtbIWU1d
n0xx+6Pe+Rt2J+j3x/R+zEVHdfFzIv4O2LKJMMbUdzCx38WqHHWzfPyy6w9o
toYhsUUZfElqeUatHMkbYux9mlhMvUm+m5TlrNjf2bm+vt7tmnF2cApw/HcS
Us5H2Q7M4iXIOWzgc6WM4qz7WrEtOCLaiMp94cMMQXYiBrBzrfoIckf72nbw
3HzqTsppAqP8P+y7D22N7QAA

-->

</rfc>
