<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.39 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-fossati-tls-attestation-09" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Attestation in TLS/DTLS">Using Attestation in Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)</title>

    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization></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>
    <author initials="T." surname="Fossati" fullname="Thomas Fossati">
      <organization>Linaro</organization>
      <address>
        <email>thomas.fossati@linaro.org</email>
      </address>
    </author>

    <date year="2025" month="April" day="30"/>

    <area>Security</area>
    <workgroup>TLS</workgroup>
    <keyword>attestation</keyword> <keyword>RATS</keyword> <keyword>TLS</keyword>

    <abstract>


<?line 144?>

<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 title="About This Document" removeInRFC="true">
      <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 153?>

<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>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.
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"/>.</t>

<t>In addition, the design supports two ways of identifying the peer: a mode that combines normal X.509 certificate authentication with platform attestation, as well as an attestation-only mode.</t>

<t>This document does not mandate any particular 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. The protocol's security is critically dependent on the provenance, lifetime and
protection properties of the TIK, see <xref target="tik"/> for details.</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>The term "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 anchor="authentication-vs-attestation"><name>Authentication vs. Attestation</name>

<t>As noted, the protocol supports either combined platform attestation with X.509 certificate authentication, or attestation only.</t>

<t>Attestation when used alone is vulnerable to identity spoofing attacks, in particular when zero-day attacks exist for a class of hardware. (TODO: reference). Therefore it needs to be combined with traditional authentication, which in the case of TLS takes the form of CA-signed certificates.</t>

<t>We RECOMMEND that regular applications only use the combined mode, which provides the full security guarantees of an authenticated TLS handshake (for the peer/peers being authenticated) as
well as guarantees of platform integrity.</t>

<t>The attestation-only mode is included in this document for specialized use cases, including initial
provisioning of the TLS stack. In these cases, additional security controls <bcp14>SHOULD</bcp14> be provided,
such as hardware-enforced time limitations, or use of platform-level APIs in the case of cloud infrastructure.</t>

</section>
<section anchor="tik"><name>TLS Identity Key (TIK)</name>

<t>A central property of this protocol is that it binds a peer's identity key, the TIK, to the TLS handshake.
This applies to the client's identity (TIK-C), the server's identity (TIK-S) or both.</t>

<t>In the standard mode that combines attestation with certificate authentication, the TIK <bcp14>MUST</bcp14> be
the X.509 certificate's end entity key. The TIK is maintained and protected by the TEE, and this fact
is attested.</t>

<t>In the attestation-only mode, the TIK is generated and maintained by the TEE and <bcp14>MUST</bcp14> be used only for TLS handshakes.
We RECOMMEND that the TIK be persistent within the TEE. When this is the case,
the TIK may be used by (specialized) applications to provide continuity of identity between TLS sessions with the same peer.</t>

</section>
</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. Nonces are not used in the passport model, because the expectation
of freshness is more relaxed and is only governed by the lifetime of the signed
attestation results.</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>The attestation payload <bcp14>MUST</bcp14> 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>In TLS a client has to demonstrate possession of the private key via the
CertificateVerify message, when client-based authentication is requested.
This behavior remains unchanged in the current protocol, with the CertificateVerify
message proving possession of the TIK.</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.
While the two types of implementations offer identical functionality,
their security properties often differ, see <xref target="sec-guarantees"/> for more details.</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>

<t><list style="symbols">
  <t>TLS client is the attester,</t>
  <t>TLS server is the attester, and</t>
  <t>TLS client and server mutually attest towards each other.</t>
</list></t>

<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.
We use the TLS Identity Key (TIK) which is either a stand-alone key or is identical
to the certificate's private key (see <xref target="tik"/>).
This key is attested, with attestation being carried
in 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
how the key is attested using a structure carried by the
Certificate message.</t>

</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 title="TLS Client Providing Evidence to TLS Server." anchor="_figure-background-check-model1"><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 title="TLS Server Providing Evidence to TLS Client." anchor="_figure-background-check-model2"><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 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 title="TLS Client Providing Results to TLS Server." anchor="_figure-passport-model1"><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-attestation-results"><name>TLS Server Authenticating Using Attestation 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 title="TLS Server Providing Attestation Results to TLS Client." anchor="_figure-passport-model2"><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 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 title="TLS Extension Structure for Evidence." anchor="_figure-extension-evidence"><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>

<t>Values for media_type are defined in <xref target="iana-media-types"/>.
Values for content_format are defined in <xref target="iana-content-formats"/>.</t>

<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 title="Certificate Message when using only attestation." anchor="_figure-attest-only"><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"/>.
When using the Key Attestation Token defined in <xref target="I-D.bft-rats-kat"/>, the evidence
structure consists of the KAT and PAT bundle defined there, and the CMW collection <bcp14>MUST NOT</bcp14> contain
any other elements.</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 title="Certificate Message when using PKIX and attestation." anchor="_figure-cert-attest"><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"/>.
When using the Key Attestation Token defined in <xref target="I-D.bft-rats-kat"/>, the evidence
structure consists of the KAT and PAT bundle defined there, and the CMW collection <bcp14>MUST NOT</bcp14> contain
any other elements.</t>

</section>
</section>
<section anchor="attestation-results-extensions"><name>Attestation Results Extensions (Passport Model)</name>

<figure title="TLS Extension Structure for Attestation Results." anchor="_figure-extension-results"><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>

<t>In the Passport model, both attestation results and an indication of key attestation are
sent in a CMW structure within the Certificate message. The exact contents of this structure is
TBD.</t>

</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 title="Attestation Message Overview." anchor="_figure-overview"><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>

<t><list style="symbols">
  <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>
  <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>
  <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>
</list></t>

<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 CertificateRequest 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 CertificateRequest
message.</t>

<t>If the server does not send a CertificateRequest 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>

<t>The <spanx style="verb">results_proposal</spanx> and <spanx style="verb">results_request</spanx> extensions are used to negotiate
the protocol defined in this document, and in particular the verifier identities supported by each peer. These
extensions are included in the ClientHello and ServerHello messages.</t>

<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 the client 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>

<t><list style="symbols">
  <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>
  <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>
  <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>
</list></t>

<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 CertificateRequest 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 CertificateRequest message.</t>

<t>If the server does not send a CertificateRequest 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="example-use-cases"><name>Example Use Cases</name>

<t>This section includes specific usage scenarios of attested TLS. Both scenarios
are based on the background-check validation model.</t>

<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, Machine Learning (ML) model training, etc.</t>

<t>In such scenarios, the users (e.g., the party providing the data input for the
computation, the party consuming the computed results, or the party
providing a proprietary ML model used in the computation) have two goals:</t>

<t><list style="symbols">
  <t>Identifying the workload they are interacting with,</t>
  <t>Making sure that the platform on which the workload executes is a
Trusted Execution Environment (TEE) with the expected features.</t>
</list></t>

<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 <spanx style="verb">attest_key(...)</spanx> 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 with the (attested) identity key, and sends the attestation
evidence and the signature in the Certificate and the CertificateVerify
messages respectively. The transcript hash, denoted <spanx style="verb">hs</spanx> in the figure
below, follows the <spanx style="verb">Transcript-Hash</spanx> definition from <xref section="4.4.1" sectionFormat="of" target="RFC8446"/>.</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 title="Example Exchange with Server as Attester." anchor="_figure-cc-example"><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">
<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 scenario, an IoT device is connected to a remote device management entity, which could be a cloud service provider or a network operator.
We assume that, initially, the remote device management entity does not trust the device.</t>

<t>The device management entity's responsibility is to guarantee that the device is running the intended software version, has not been tampered with, and is not being 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 title="Example Exchange with Client as Attester." anchor="_figure-iot-example"><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">
<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 anchor="sec-guarantees"><name>Security Guarantees</name>

<t>We note that as a pure cryptographic protocol, attested TLS as-is only guarantees that the Identity Key is known by the TEE. A number of additional guarantees must be provided by the platform and/or the TLS stack,
and the overall security level depends on their existence and quality of assurance:</t>

<t><list style="symbols">
  <t>The Identity Key is generated by the TEE.</t>
  <t>The Identity Key is never exported or leaked outside the TEE.</t>
  <t>The TLS protocol, whether implemented by the TEE or outside the TEE, is implemented correctly and (for example) does not leak any session key material.</t>
</list></t>

<t>These properties may be explicitly promised ("attested") by the platform, or they can be assured in other ways such as by providing source code, reproducible builds, formal verification etc. The exact mechanisms are out of scope of this document.</t>

</section>
</section>
<section anchor="priv-cons"><name>Privacy Considerations</name>

<t>In this section, we are assuming that the Attester is a TLS client, representing an individual person.
We are concerned about the potential leakage of privacy sensitive information about that person, such as the correlation of different connections initiated by them.</t>

<t>In background-check mode, the Verifier not only has access to detailed information about the Attester's TCB through Evidence, but it also knows the exact time and the party with whom the secure channel establishment is attempted (i.e., the RP).
The privacy implications are similar to online OCSP <xref target="RFC6960"/>.
While the RP may trust the Verifier not to disclose any information it receives, the same cannot be assumed for the Attester, which generally has no prior relationship with the Verifier.
Some ways to address this include:</t>

<t><list style="symbols">
  <t>Client-side redaction of privacy-sensitive evidence claims,</t>
  <t>Using selective disclosure (e.g., SD-JWT <xref target="I-D.ietf-oauth-selective-disclosure-jwt"/> with EAT <xref target="I-D.ietf-rats-eat"/>),</t>
  <t>Co-locating the Verifier role with the RP,</t>
  <t>Utilizing privacy-preserving attestation schemes (e.g., DAA <xref target="I-D.ietf-rats-daa"/>), or</t>
  <t>Utilizing Attesters manufactured with group identities (e.g., <xref target="FIDO-REQS"/>).</t>
</list></t>

<t>The latter two also have the property of hiding the peer's identity from the RP.</t>

<t>Note that the equivalent of OCSP "stapling" involves using a passport topology where the Verifier's involvement is unrelated to the TLS session.</t>

<t>Due to the inherent asymmetry of the TLS protocol, if the Attester acts as the TLS server, a malicious TLS client could potentially retrieve sensitive information from attestation evidence without the client's trustworthiness first being established by the server.</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>

<t><list style="symbols">
  <t>Value: TBD1</t>
  <t>Description: unsupported_evidence</t>
  <t>DTLS-OK: Y</t>
  <t>Reference: [This document]</t>
  <t>Comment:</t>
  <t>Value: TBD2</t>
  <t>Description: unsupported_verifiers</t>
  <t>DTLS-OK: Y</t>
  <t>Reference: [This document]</t>
  <t>Comment:</t>
</list></t>

</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>

<t><list style="symbols">
  <t>Value: TBD2</t>
  <t>Description: Attestation</t>
  <t>Reference: [This document]</t>
</list></t>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<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">
         <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
      </author>
      <author fullname="Dionna Glaze" initials="D." surname="Glaze">
         <organization>Google LLC</organization>
      </author>
      <date day="15" month="April" year="2025"/>
      <abstract>
	 <t>   This document defines a conceptual message wrapper (CMW) format - an
   encapsulation method applicable to any RATS conceptual message, such
   as Evidence, Attestation Results, Endorsements, and Reference Values.
   It also describes a collection type that aggregates one or more CMWs
   into a single message.

   In addition, this document specifies a corresponding CBOR tag, JSON
   Web Tokens (JWT) and CBOR Web Tokens (CWT) claims, and an X.509
   extension.  These mechanisms enable the embedding of enveloped
   conceptual messages into CBOR-based protocols, web APIs, and PKIX
   protocols.  Moreover, a Media Type and a CoAP Content-Format are
   defined for transporting CMWs over HTTP, MIME, CoAP, and other
   Internet protocols.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-13"/>
   
</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>




    </references>

    <references title='Informative References'>



<reference anchor="RFC6960">
  <front>
    <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
    <author fullname="S. Santesson" initials="S." surname="Santesson"/>
    <author fullname="M. Myers" initials="M." surname="Myers"/>
    <author fullname="R. Ankney" initials="R." surname="Ankney"/>
    <author fullname="A. Malpani" initials="A." surname="Malpani"/>
    <author fullname="S. Galperin" initials="S." surname="Galperin"/>
    <author fullname="C. Adams" initials="C." surname="Adams"/>
    <date month="June" year="2013"/>
    <abstract>
      <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6960"/>
  <seriesInfo name="DOI" value="10.17487/RFC6960"/>
</reference>


<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>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         </author>
      <date day="21" month="November" 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-05"/>
   
</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">
         <organization>Mediatek USA</organization>
      </author>
      <author fullname="Jeremy O&#x27;Donoghue" initials="J." surname="O&#x27;Donoghue">
         <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname="Carl Wallace" initials="C." surname="Wallace">
         <organization>Red Hound Software, Inc.</organization>
      </author>
      <date day="6" month="September" 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-31"/>
   
</reference>


<reference anchor="I-D.ietf-rats-daa">
   <front>
      <title>Direct Anonymous Attestation for the Remote Attestation Procedures Architecture</title>
      <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname="Christopher Newton" initials="C." surname="Newton">
         <organization>University of Surrey</organization>
      </author>
      <author fullname="Liqun Chen" initials="L." surname="Chen">
         <organization>University of Surrey</organization>
      </author>
      <author fullname="Dave Thaler" initials="D." surname="Thaler">
         <organization>Microsoft</organization>
      </author>
      <date day="3" month="March" year="2025"/>
      <abstract>
	 <t>   This document maps the concept of Direct Anonymous Attestation (DAA)
   to the Remote Attestation Procedures (RATS) Architecture.  The
   protocol entity DAA Issuer is introduced and its mapping with
   existing RATS roles in DAA protocol steps is specified.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-rats-daa-07"/>
   
</reference>


<reference anchor="I-D.ietf-oauth-selective-disclosure-jwt">
   <front>
      <title>Selective Disclosure for JWTs (SD-JWT)</title>
      <author fullname="Daniel Fett" initials="D." surname="Fett">
         <organization>Authlete</organization>
      </author>
      <author fullname="Kristina Yasuda" initials="K." surname="Yasuda">
         <organization>Keio University</organization>
      </author>
      <author fullname="Brian Campbell" initials="B." surname="Campbell">
         <organization>Ping Identity</organization>
      </author>
      <date day="28" month="April" year="2025"/>
      <abstract>
	 <t>   This specification defines a mechanism for the selective disclosure
   of individual elements of a JSON-encoded data structure used as the
   payload of a JSON Web Signature (JWS).  The primary use case is the
   selective disclosure of JSON Web Token (JWT) claims.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-selective-disclosure-jwt-18"/>
   
</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="https://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="https://www.iana.org/assignments/tls-parameters">
  <front>
    <title>Transport Layer Security (TLS) Parameters</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>

<reference anchor="iana-media-types" target="https://www.iana.org/assignments/media-types">
  <front>
    <title>Media Types</title>
    <author>
      <organization>IANA</organization>
    </author>
  </front>
</reference>

<reference anchor="iana-content-formats" target="https://www.iana.org/assignments/core-parameters">
  <front>
    <title>CoAP Content-Formats</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="25" month="August" 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-03"/>
   
</reference>


<reference anchor="FIDO-REQS" target="https://fidoalliance.org/specs/fido-security-requirements/">
  <front>
    <title>FIDO Authenticator Security Requirements</title>
    <author >
      <organization></organization>
    </author>
    <date year="2021" month="November"/>
  </front>
</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></organization>
    </author>
    <author initials="M." surname="Steiner" fullname="Michael Steiner">
      <organization></organization>
    </author>
    <author initials="S." surname="Chakrabarti" fullname="Somnath Chakrabarti">
      <organization></organization>
    </author>
    <author initials="L." surname="Lei" fullname="Li Lei">
      <organization></organization>
    </author>
    <author initials="C." surname="Xing" fullname="Cedric Xing">
      <organization></organization>
    </author>
    <author initials="M." surname="Vij" fullname="Mona Vij">
      <organization></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>


<?line 1179?>

<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>

<t><list style="numbers">
  <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>
  <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:
  <list style="symbols">
      <t>Custom X.509 extension:
      <list style="symbols">
          <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>
          <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>
          <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>
        </list></t>
      <t>Explicit signaling via existing methods, e.g. using a policy OID in
the end-entity certificate.</t>
      <t>Implicit signaling, e.g. via the issuer name.</t>
    </list></t>
  <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>
  <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>
  <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>
  <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>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAOxfEmgAA+1963bbxrXw/3mKOfKPUAkJW86liZqTU0VWGiW+qJKSNKur
dYbkkEQNAiwASmZlf8/SZ+mTffsyVwCkSFlpenqiZtUSgLnt2bPvs/dgMBB1
Wmf6UH5XpflUHtW1rmpVp0Uu01xeliqvFkVZy6dqpUt5oUfLMq1Xsnf59GJf
qnwsn6haTUs13/DtE/xYqOGw1FeHrSGeXjzED8S4GOVqDjMZl2pSDyZFVcFH
gzqrBso3GTz6TFTL4TytKvirXi2gwenJ5VdipGo9LcrVoazqsRDpojyUdbms
6sePHn326LFQpVaHblLiuihfTctiuTjEGYhXegVPxofyTzIYrC/Pjy4v+viF
/LMQ8DQfv1RZkcOgK12JRXoopCwnIz2u6lVmnkpZF6Pg1zQf67y2DyqAUKkn
lft7NY/+rMt05D4eFfM5tHVv0zxLcz+Mfl0PsrSqB9DJsMjgs0Hx/gfwBmA5
V4sF7Ch/K650vtQ42Wlaz5ZDeKrKIp88ZFg3YCyEWtazooTvB9CEftIcev86
kZfVaFZMdJ5O7RvetK9Vnuuq47WeqzQ7lDN6n9Tu/e+m89dJrmvRHOTHRF7M
9GSiy3iEH3HGzVdFOVV5+neaNiBCXi/TujEyrzRJdT2BMeFRAlBtjXqWyK+L
a1WO40HP1DJrvIiHPCrn8mk6T2s9boyLTRNu+jtVzjtHPU3ks3SmspFW8bin
Rb6sW++2HZpaJ7b12tEB0k90NVsAVusGrIspvGi/3XYC3D5x7ddO4SiRz1M9
T+Phj8q6iJ/HA3+9VNc6bYypoFGSY6Pfzeh954CXifyKKUs85OWsmKuq+S4e
9mmaAy41hq2pYWLI1e8y+iaBhkLkRTmHZ1d08M6/On58cPCZ+fXTjz76BNpm
1cGH8OB08ITwc1CquhrMq+ngulRAmUbza5Hmk0Y3n3z2yaNDWYyqhWk6hCNM
LV8poBz2N/74sw8//Mg8U+Vo1hpMuyaamsRvx0qZt/Bb+LZACjGodKZHOLPB
OK1GWVEtSz346zX0WI3x37BFrfWCpgDoMqrhQ1i+fQTfXZ49O0geHxJwa1VO
NXQyq+tFdfjwIZFxPYbtXCxroGlEtxHED0tdFctypB/Wi/kA9iMfVAs9Sifp
iLbsIXfHDA5GkM/gE3kRfiKf6iudycfye10iR5EwCyD7+irlvw4+oT4cQaQf
h1KIINAzz08e2wnK3+MM6aMxsKVDGBdWKR8/OjjgpT5OHr3TUrN0WKpytWm1
Zk5nmaoRgeSzYrzMNOAwtYyB0JdfqXmareQeTGyvb2Dy6FEAiEcHycef3Qco
nhdXej4E+QCggR0Cbx2cAB8711PgZMi/T4+eHyXIkoC96dyy+cGVypbE9rDF
mQKRo6vNAl/oGjYT2aXK1WCux6kaYBeV+S54Yj8awSDAaAd81uyHowLw2ff4
sPGVQW81msMBAECNtOGiCJyvTp+8GJyf/OGie6Mn6bhQWQaDjzTtL25lRY/h
WLGQMij135ZpqUkEiHZ3D3uXR7AT8Ao3sQjkrfOg1V6wZZXds2DTiCZ+mcgz
nYL45uieIYpfAk0AcUQ3Xzfaf5Pg6Sn1om60/6YAth+9a+HAYzwR50cD2NRu
QKnydXpFEFLD6uHBp4CIjz7+9JMPQ3AA39cggxK+net5UetIyrwGmWeteNqB
0831Ac/4NsdPGsszPCN+12j7DKSZWoPQVjYaP0tHMwWnrPG20fwikccz9apU
Q2Bvze25KOa5gqV1fNHo5mkCZ7rZ/GkaPmy0OE7kHwGcjSbHegz4EL1pr/f7
9K/NtRa5co8ZBb5R+RLpEFCBT+Hxk9PjkwFtDMqsdyWNYzyCmeklYjbR6cHB
pB0MhA3/WcAFHj0KiF9ycC+075tlhit+/EiIwWAgAaHrUo1ABL6caVIy4LiM
K9hNLRdlAapDkUkgEsV1RSObs44zKiYStBAYVw4LwICFhnnLJalwhPWjvgQ1
ZQpcF0j/qNSogaQqqxJxmoMKMtdypCpd9WVayxR6z6pCjnUFp3wITAKkLyC8
CI96pmr4P00jyHIJvUBbnV+lIFQjhcHWwFOVJKKlaXSdiIsl8Ds4+6qCbpDG
wXi5HGqpANjAXcZmsio8pjM4EjQbXP1IV5UcrsxTaIwrAOoGr8ZLeClhc2BV
0LMaFiArpzVIIxOesMoBKDBfIN3QAkdeVrQq0IlKlcLv1zNNX9DnpmcYeVIs
QaXtWM/lDN6CVrWkNQOkRmU61BV9V6bwC2yI2zLHtyocszZ7e5B8GOyvGRjB
XdEnQ1ATESLFxLVo7DnoqLQGWTKJC2EHe4kDmonafj3URmpBO8vTBAA2gW+h
2ZcVbR0uDdjdJDWYI1Fhzgo1RiTIsTVByeL8yWsAF3V0EuBG7/LkZL+PWAoz
OS0uJXNJXjzME1g39oSL8kvVbitxraAh4siAN4QQiyLN6z6+WsCpxzGUnAOX
Rk0ZnswQ7lewa7rGpVpGKoF/A92i7YDOCZkRVNBDuFkzBU2HWud0FKY5rAvn
gAfQnQHqA7FJ5asIgEBBZnmRFdNVn0ADrzv2qS4W5hu0ncyX9RK6XyVMD+bp
eJxpIR5I5Gi0TayOh8zs5mbgpPm3bwmKM/2zHRiNUhfuCQ5CFBh2o54Bx6oq
RlV3fv4XHZKjij6olhngkmLaZhe9F7YIKCeIxXAeKpA3zQQQ44hcLKyI7QEM
T3EikSlpPZZblJTjJXEkXBpg8HIRrnNEFpSsfcJ5EF3e/8lFXHM62tu3/8YH
Oa3o0AELB0AbjglbQsBL54uMhGHHOZmLG7UeZpKlI8ROw+lKndFi8CykhHd4
QGBmQ+CYY4l4BGczn8J+uWkhtSDuKn4Ps86pnysFOA/vYMCxXmTFChojYsBc
ymmT/DrqgSP2dDJN+gB9VooR8vQ7KGf8u1Pd377dx7HWkTH9eoFrq0HqCCka
suFpXgAmjyyGhXMx2o3BNOTHlmcPkaYx48ZGUw2CK/QBOK8WcJi4+VhPUhwo
JVo1ml8DlaK9sAI4No+OSjg4n0oA/gpRlmQLewKONbSdMGbNAYfUFBgzTzLS
g5HGYPcVy0YgJw2u1Ur2gAhd6XJQ5NlqPyC/sjfKUkJAeMTf7DepSltYCSgD
03KDdU1gGoJv8EsDKPmo8zagaXihyT6MO0GviRITd8KFLApEOt49OOALBKBZ
2FCNyISdjwejmR69omksQOIiLccP3EeaYKmx2ZcLTaylkh8nj6ndx8kBziDk
LR4BxrpWaWbb2r3z+nkFW4yd3NyElnreyir6DDYMBFA1HqeGKMIqm4sDOiFh
w4hdMBGbrCzKIewOiVSMDfUBejFEdiTJ2pbJPyYfP/pMjgJcaewlaYOOZkck
GuB0rbOMaGgeviKkoUEtxnk2V9DYtZwDBGg44PxEO0ZwIso1MkIiUEsAlRoP
jOmqIioDZxb2hg8qHyWH3VFfc40cIa3mSHUegNKRX+EicU9xKy5B8E95LFYv
Sq3GgHd4nEEmnztKMEHLTwoTJbgQ4SpGaohzX1FPwEtGoL5XwcEWDoHkR02s
4dMABLbSEarJx/7LV0i5Ep7XpMCDQ/sLU2YYLCvGtTqE9KEQN4fyqlqokf7v
vUd7b6E9UIXTsZFzvtXoljr9dv9QHMojOKCrRV1MS7UAeYi4MfUKJIwUp0ks
0XWxLc+NRaSbJdKcTRJk3qs8G4DZwiHDXjIiue5o51ZIgz1SJGVn6USTLgW9
CuzLQAmPvGbGY5n/6bfA2rUGUNbpK0NM+UTi1sPrwXEfvxpc4MovuYlhzXx8
UiM+GUJnGCPTuj6S3AWbcUkSpQ4Hp09Mn/AbQB4gmvveSpoDfYidhR2YVggj
gMYc6C5yGwmYAwxzAQCtpejFezNT1Wzf7chymPF+9eUQpFSWS2MezkgClLFK
QQgyeESa7l6H1BfLcDDdDRJeWhGWCMCIUk8MmUZa26UqreFdQG9Bu8yBJogx
SYu8sbnW48qcuTkcRfi3vtYsK8zNGhBL0Q1Zyb1n311cwoToX/n8Bf1+fvKH
707PT57g7xdfHz196n4R5ouLr1989/SJ/823PH7x7NnJ8yfcGJ7K6JHYe3b0
4x4f3b0XZ5enL54fPd1rHUGCu+VcNe6nRkqlKhGxly+Pz/75j4OPAGH/y3g9
AGv5j08PfvMR/IEA4tGIsPKfAIiVAA1dAzFCERUIMcgVac0sFo7ZrLjOJaAD
bvn7f0LI/PlQfj4cLQ4++sI8wAVHDy3MoocEs/aTVmMGYsejjmEcNKPnDUjH
8z36Mfrbwj14+Pn/oL9XDg4+/Z8vBJL5F3Bir1J9zfgCEimclcmSUQyY37SA
/0sJzaDhK5ZGAtLGaol+jaxjSlQQKRtRfpXznmZaoai3Xn3CvWFNA7m0txA5
EguDE0PHh16XM/YfpoEGieDApKTP4QyMpDdEgUZZddHrN8DSTk4Sw8qcgZv1
XzMDqwnRWEYI9KcVjfcqzb2CZWV3WN6SBqOTTu9g+vgd6XDEzbSXGKzOMytY
FUxrnhWw1WKUEpBd38F+FEMcnSFn1diq4N5yJDcwwAqJMfyDVKoi0R0+mpTF
nOAwhr2vkCunVUz8QAaczlClJ2nKnFWgQhrgStIM8ntmAMzLUep1wEKpJlsj
H8oPG0ybaBsQAdiLCDdwSgxwYrHK+51C28Vl8Qr2vnd2dLkvjToyXEVbB9zU
kGfSErxGugda+7xAzZsYQlMhZEkSOrbb3DJ3kCpIfoKUlTIl91BkCOd3gYdr
pPfghJBSHGMmrtnaKKsl2TWaHZgFfosLtPpnbNcNUYuklQ7h3H09KMxxd9JS
l9QBKEOnxaidoJJNUjL2WTQLOA1adUC8RsWAhZRKo38LTvoyR4UalRADNxQr
H4Q+JlzgVZWECxZoSgHhV4/7VsJh644T5nVK+2Wk9HGn4M0E6DbBnc0PQStk
HUlsHCPGS0SIonQQLa+WGWip1qydWmkRlKRiYpQ60KPYfhCI7dTT33VZDMZq
ZT8CvACOTjurQJhSbAObqXJ8DZwxgQ198eTFIYsOCMJ9EhXhTzRspHUkAziI
sNxdKlaJ8GQ2lm1wjrcXzfaWbteAIizYEUTh6fHRwJyrAI4oJf6gPRtimlPq
KesnCyQ0Rq4ibkymv1kwQ6QQdhpOt6Zhl0BePLFbAibBCfOUO+I88Tno2eOB
IvhDlsOHmjYkbIXHQ1idLB7AYZI71eaMdOpt7KcYZctxh2pBO0palsrSv5Nz
wjtIqBGbzVKUEwWBADlhwxJZIY4k8tQeNNOBVXZVACokUmWRVdKIE4YxIvns
C2vGs3g10BgCMkLOigpDhhE3vF90JJaMEBYcg4yc90dnp1UTZ0ZZscTFT0pV
1eWSPF58yrsVKXnzADUOOGKATjBhWIFRT1a8bqb6fOItIwY0R7pTGbsqECp3
5kiodypNYPX1qhUr14ST2hmGWW0Je+qR7rHfD/SY1uuLfeseY6MDfYoRfADW
LvtBiyBtIkVmFZJkzqEW+HeLgL2Hdtqx9KtPnHZGulFKnMqYBY0O6FkisBur
S6NnCv2EaeWkIb+mTnT3M4Q2ZKejM0hWLz+uH4nemMUwAaWuSM0LNwhoSZuU
2KEQi9F/WmGQRINzJvKHmTbHzvgsEC37wjY2qqJV0nvBcdyPiRTZjFm4w3OU
5kvD0d3+W4ZHp5Kl1srbNyo1Z7KTSBSpQ/5x4kxVxNnq1QLZJDfN9bWcaIWH
pjKBq/1Qq0ZmS+TWMj8nAUBL4Yxg9lAeU6uvgbQVzppJ6AFfA+RT4wACaASm
XTIyis1KLm1ljoKeZTVW3h+bAfidNbQInKYjrSxx6mrmPTxBB16oup4ZM7e3
QkqyQgqWJ9ktDP0n8rkfD+1k3rijvbWSGoHGr0fKsh82hLGYAfPwk8KzgwwV
ReXXBqlTw7umKDEFqO3MLGYlzB1Fh9aOTBLXZAQW/PjELtbsY4gp59xKBvuK
G0/ODWSLK5HraVGTPtC3sndt7Lz8Z4l2k4JFtA7btpdklTDmcKd7wKwKErWt
SwJ7xJjBBXqR2gb4RHyJus03Fy+eE7iOv3xxTk45PGCBTYXwi5seP/uh78+M
Bp5DmtWsKMgWztJA1IXxjLa5sLXmM4Exy0K1BBeNQ+NO1saBFBF8DM1u8SUi
/MbLaXUuI32mV/g7mVHszMO4ZhdLWeR0FCodzgIp0AhDIwxyWqFqjZgvSMwn
FoweKmujBbEwnXNMRN7l2bAyR4IWNf1aoWWLRhHQnfG9SNA9AKpWVT3xL4wW
7eIUbm6aAaBOVQj9WOzTNSooma1sIAR7vFr0pLToTadBjEHdHqEbiZRRIl8d
CNvrPNUMInIdgWqLkUOEUPZsbezR4APrNLqkqcNMdHplLbNdJ1leLIeV/tsS
oJwZicMZERA3jJUPe6eeiVSIYPzv+al3Mv3AeoXzQjTI1i1AZLg7oiSc6k1r
R7XLxDa5hVZ2o0cKiCqTOJoyqR75SuZLip8rJngZwqy1wanJZoZBQPgv4bOj
oOTyXIV2FDr+AiOYKxjfSBfkXrfsbaYqdkmAFo5hSzVbYI1NyFpvgxN4larN
cDV2Uu5/wKSs4atJK5qkkXhINhzqmbpKyeo8J+q4zC1zsuLuEigrzNiKpgEZ
a81FWEwjiQJPS2tNQHGs06et3pLJCCACAK3Rlk0+RJBV6qbJmvQCFXwq4g/6
sRpBroQCv6jhGEuMlhyPjbIYClXUKQ14e39ZwYpYsayrdKy9kIl2dvJa+d2r
RE8xhfE6sZMp95nXsjLcMaOiHLPp3IBJsB92YXUWbGy6CqV2GhCd+uwCoPiK
3FqdQakpBZ47PEbenmHEKEnxr6gGBEu2/XVYeECKnaWZiWq5LiTFApMI2XA0
FHjZxEwRJUFva4UZk/CaBsaoyHlTYxxRiu2t+wa+G3gd1nhySJTx7pwH8jtW
1jriWI8DIS/wi39tj7wQX9mAwDaVkr3IylQZA5/x+97cmLsCGFGALqmmWNfZ
yYXr5HGrkzr07ZFQSABGAPFqQnnD2204VhdFawwdzVaHQgw4/sVI2aGLHUFr
XrMS2H6Na4k68F5+F35lPgeMxcs6VeiGl2Q6ITMquh+oc0syrFTsxORJWmIv
gE+k+rOhfDiorK99qGG1iXjGYQcNUofkMpLorV7qrXY9kNwHZKSfUOjqvphg
zEFoo+CB2Ubb8nMuK2O3aWAGoiEclJCX9p3dm+2trmk3XrAVwSGic1PImwcd
xkyWT7wtyAqsNGvUceF4FdNiSQwn0KfX8IicgrnYmtWwJvygnTVrjYnDBZ0a
uV+xjWDA9kPkYwVhlSMBwsqokZ4fMr5e4KzdN1zLiB1WDDEsKdxvNn6NVFkC
/xVWSewIeZFfeY85qAN9t8HWfmZFHXK1VLdwaS/UbJJ/npArm+xdPDFrIFtn
9qX5xBsl2kE0yAmMDYvs1E1PK0mqbm+ZL+BVzRD4Rtq1TP/KBHCbpXrPJTlB
GIdB0H5oXAVsB8OvRacoDcprTZ5Ia17z2j2ZMowAyBO1gwlS0xirY9RohFkR
GNmUEBF6VUVnog+UCggLqxgrYelQA6dskJJ0tj2LTVbu7A6gMuY/w0hDez/0
xreCnSJsjE4sQAcIEFDgnhpRS8UxloEOso8xjFmmiWSaVsJQ5Z6KCfd+aOVx
Hgk2n/mxnD3dfqkEGTcsdzzJKdJAj71dp6laBJzBeuOaakXFMgOJ5BOtmSza
cUw3xsQWYF40aeEnbaTeSIsJoq+J1VAEH9I+VJVHdaQDiZ4jWWhNYae4We84
pavY++gViZRLNiFiHHNTgTSBnEU+LID3sWavSyaZwlm2UjJkVNYtMF/mUTRV
l2EZ5y+muo4j5YBFzq+J86Pvv2bXUD5Jp0sDvbGqlXQWdg7FoKXRPJH4hcEr
BkgozpbBZ7gdS3ScW5+LCOJMA//W/4Mf8c9/SPufOQPBk7v8x4KoEMhk/vmP
v4SWPnECMoN8Iz9ws3jJMX7AV2x7fAtH+yWwsFK/Hz2mMFME7kuVTQsQOWfz
yn9xtdXsBubnC7H9irZcMhszccmwdHc3ZuufcNkSgISw2r2X+OfqnVZ500FA
3tIC//kPs8u7LK+157hKSVcZqzsutEd0aB862r6Dm4APnLN2/dagz73hRDgG
Qexde75piSdv6VAgv7pPTP7nP26+AnpXzfSYgLJr35/b8wW//+nIuy0oT8b7
f3bd/SUGkcB1ADZ0LDM439HU2v91Hu3WJP7cmusXnZ8xdbw5lA+IPKP0Hccb
D0j4OeBbdf+9FwgRZ8SOI8kBCDB+wKcmweBNK3gYvX2j4NGWO5rMuy1aBCyi
RfqlaEgSwGWrKOxXYwiANRG09c9IsAm646/elcfLe2by0XUQd4HScHqhzCPt
b4pYdwplWqlNNHLAdhusXpAw5C33D2GXXKhxqcfeTbhmJt6XXwnDu1H1/nfg
z8b+yOT1jSe5v/Lr/zv82uCAfHd+7X7evON2/srEN4PnVya+CxN/HDJxw5DX
M3EmmMTEtzAedHnNb+XnfamallwXedbhYhOBNs8sytsKug3Hzr7ZFgKEarL3
sxIdTuT9ytIrThuAnoUOg0oUEoJmG9HJ4Htr2bqkuwcoOOiW/9o6FG2gFQkS
dBm5ii/5/5Kc00zyV8U24CT/0YyyY8/vxCh/ZWkb//uVpa1hadabtY0+ahnQ
3dTRDla2PSeLeErfxjVUnQTeBcWEDG1XLiScm7Oqu9XMrblQV5jN/w4uZNU3
2/pXJvQfz4R+1dZ+ZW3/kaxts5bWpWd1KGxemwucor0vfVjHMYV1PKPQTXnz
oCvbA7vcbUeXq4UOnc4ubDm3MfFF6WLhMdKK7qI4RiFcxoNNQQ/k43dtyMLp
rpbReBGL8nf/MIzDJq7puGGG8ZEUDBdy4aaHECmAzpdzeSOPXzy/PHl++fKr
F+fPji57j/b78tnJk9Ojl5c/np30DvblW1rhCcZnw6b8Nmx7dHl5cnF5hJd8
qeHxyfnly/AhNfeL/Bag91tBPZgwhRtHx+Kvgj9fvqJW9rtwMvTHSx1NjTqn
LK6yF+5nEn27H4xMo6OYE4PisEVil2leH3xiw95fcgDzb9v9ePi1+ygWCoil
pISdL3FKnz9Kksd/OfhkcPCF7+ot//o2wsh1kOPV9lysUjKvptR15yJZhns5
Q97bnl58AjguRI9fOrshhRV+foBT/jSacWN9ZFH+/NPu72geLMptNw9aYHMa
AbQMsOxrw4+wraMI//bAu2+gbLshTeCdGYW3Ab0mHXe0c+AoU0DKXUN54ago
0ku7AiLc31P6Ww4ZdceBgiij+x7NlLd4HSBoGp/GNc0baW7pRsGD6KIUXzS7
ecBUk/56a6LkyfyF2V8CKkxT9fejyJFUZNpeXWxERYmuy3YhU7DXSWwcv015
RlH2JXfRmdrQJZGgtZq9Cddgstdw3CpN1FxnstGtmLeb4OEYw5ozInsBn1l/
RM7V9RmFtYFM30bhh+/Lr1AThIHlbx5//EgeXTxPDl5Wy+FfYQjX8DSfFPL9
h+uQGRp1t+HD9fgjwvBGa5rdH4FfriXKuL6XGK5zazfBZrR7o1XaHbXXMkaY
zWjlEahjcW4e9qNoGv6rt+Ef/qR5aaaDpbwN0e0kr8uVW1hruyN42P02KshL
Okmvax6iScWaY0Q9YFkHbhatKJpZm84EuGwJTHhwnpnYt2t/nYU+DTaIaA0K
W5b3N+PZAkkvrbrvmjVuy3QnSYhatiMv+9GgIhIv8YapC7rGW1N4ZjGgcwjy
a+YpWs3Bk9bSf/zsB2idZSZo3aaL8QJkvjIhaZrvAFQtuiePnMDIwmQA3Qro
4eJV+tpswg70cEmbYhOQNANgz749/WO/+4KxCUxHNmitTHgnxhPIlkAtgrs3
NrqhU3Cmnoc+hJS7Ei2cdedoDXXF2VqI/EfSzbhpe6bdNBRm2N5NpnrM0JYV
3hFYP7lu6ms/ehsQYhiqc4fD0VQebiTGr9NdhXD8dyWdrf2+G9ncnWg2SGb3
ZNzqSFp0K2xIibtxKsufXGe0XU2QvZVNqZvVxXBQQ5XcDvB1pYCC4jHGigWk
7YcoE6+LBEGMp6eqCTjXcBRMWKry2i3N5l7sRp9gocF7J1/3PgEV133R++Tj
jz/8eL+5YNbTmkwsIBlbMjEkkc1sbL8ysgYj6zQQhTagM3sryNl+bsnmuYma
G+S3roaX9pZfB/5/b76xt3MugzP386uhXaPb+7gv3X3cTUp8B9HfrJl2Duk0
VDtmW+k0W/BLKey7Q+pfDJidlXHnybpdF+84PERhTBKWs2Yii6YkZ4ciKuUM
o+a+SPNqEN3F5psXoNnicfdkI7hvu9ZQql+jq8+o8ZWLDQ0Jnrj88glRhcBN
inMzZmV/le9Le9/65oG9em0v8KXTmck21LwSGYmAPokZyYesVrdi4futcLt+
K6ygbxIAxK69MD8KXZI2wUBhhhVLOjfcCKpC6RR+DFC2/wn9knKNWzJwPVKb
9X5H93pRvXqJzSxsX9Jd2vADaEl9jvG74EULxl3vDBSDV02om1dXbRebeeOd
IDtAKwIab5L8pVybLRiia3Pbxt1uTFiL3NWJ2bVjO93s6NrXXTto7f5uHXQg
yS4ddDhK33+LuHdHR27YH3b0l7uFI7FfEDsw7s8dp0H9eU/i7djlfZqyy6VJ
3/ylsbr1Ds3339ojHE4i/Gkd4Q4fZjSxL7o+abFaS/othw25qJXj7V1xG0/a
7YrEVw8sTWaiKi4LZ0Rhm3KQdws9p1GhAXPNNkg3jjccu6+z940k5FIGRjK8
j3IDSXv80Dg2W8HiAVtqp/wyt5bbXW6TJ8ybjuJUOqwWBvGneAPDJL60N2Sj
exx9Ye6pmBQr7gpx+xRGFRc2rfY+5t24zOMv8gi7DC7R5FPfdLgH1oKYinBs
2C0jeYnmKigtBNrDML8tmhoo75N1XDWW0xcVPx5iWhCbEDSR0hsFza1je2We
LLGYdMDpitiRq9DFIwZJjGH98A/srlHy7EV47paUwmKe1k0wu9CyDnTeuInp
BKcyUjkGjZnUZbbUDgtiruv2zSvla1lE8yHXPPQsYqzFIey9YBbobBqH7m6k
cCl+plSAxcbMydNJCGxMYpQXTZBg9Hil83HnqkNQdoJtI9TuvCkt4Xb9lhh4
uZOOaWmJuNnjZvNKGVJNAKONsxpVC05U1EJQr6O64yo/X/su9ZTypdQBRE0h
Ksz50lMtGxWW05ZhXT7KExOdB4KRaIO7TWh85rAI3sgnrBbDfMKszWClCWvE
NYWwNMlATexKp4oSjL2B8IvAkmoWV2qNWZcwuVxcu4Cy25DKZibnqon4LBNR
bZ8InimJQz6hnLShqD4xg1szlkaq1qlA2A3uqM2TvX5AP1pz5r58y3YdUNop
HDgNaqjQpUg0XzVdJZR1wKYb8NiSYAeXtnqAoztU+8S7mk32E065IicgqWBZ
ReAYmD9NcpCM3Fvm7SCEvXdeJiUggjGQ8gCCZVoh38j11ivEXaVJxhvrz5ks
l5kOc4iz6V6VNv+SXs8KN1OX+5UyHFPfSsywFMkGMV+rnOPZHB1oJRC08daW
ZAey28azvD5ZCFcxuWNjPvweiNdUzM7NmgMwYjB6QSyAJYo6Yo2o46GF+0sV
kr1fx7jsNs3eZEk1MLb5f63FjUHr00gJLsHsM/2bxW8awZqxyHkY0OnoUNHA
VIOU2HAXYggvf8bk3FPMdU2d+AkEO8fViKYngFHai3IGLEFuGs9Kt4Bq+yzt
S9js0SxA6MFawdFzxC1EjdB8Yrev4Cvbd5LUvVMa0VW4vHh+joGUroJD3ZD7
mOGITWK6w90fXJLZ5lTb6+04ZxHpj4OMRExkY192Z8JRQtfoVCQRFB21vkU2
iTLdCieq8wmNz9ctPWH7LiFHxu4a3uyfmtabn0jb+alhkvkpyiltC27Btrmc
xcLwGE7rtZ6Ht5JExhdMjNcnbZ4uVwfPpOEVjfnEmfrbptwQ7QPz7d1MBF1m
+i5rgWimfe0yErRuwgWS4gbD9Yak4Dabb6Pf3RTuaFtEsC2EgpxsonG0uRLN
+vpWLauBuNVq0Lyh8bOugcPKmxYElyms49bV9kaFrl1ev7oq5IItk4JYb1Lo
OEd9eYtdwSbtatsVbG/vblLoOt+Olm3E1JZR5VarglxvVei8lcblkrydwK+a
LQ2bDA1c9y1Tq3AhfgKtPuUaq4MRXWOjQxfQdjA8iJ0owDvtXNfxXLNxnbYa
8gl3k1UsnIS4KyqVBumuky77w/bmB8utrEbUiCm2o29vkAjNUbH5Zz2MfmZz
RPtefac1Yu381hojxH0ZIzosEai47mqMWGOJIFPHz2qMCC0RrLIbY0Q7O/sG
db1pjSDdfQeDRIc1wo17P+aIyBaB00Pm0FzjLRaJ9eYI7HBri8RuUs1dJYEO
A0XnfeYi0M9scvo7GS3s1r+b0WLTib/NZnE7ZMXtJgvSAT1GrLdViE1g5SIH
2yiC3oghGkaMTcvZwoYhglTYa2wYGwa4LxOGvEcThjXIdLBzJ6XcbsXYAsO6
jRhm5oMWZfTWiy3klduNFzspDGvwtgplMZowZfojUaSs1skKkyjPrDdSiFun
tJOJwhKvlUNPJ1rOCisu4fOuOa6Pzd9kz+BT1kCcle1k/fLi4j23WDRuB1ND
SpInJpEhlj84xiz2puaGLVRgCGPlK+3wtYlqpHNVpkWwk1xsMJFU88i9F8h/
ooJJzVxYuJh0bMqr+7T2x5Td+DjMXHhsMxf69B8mEWOfr6L5T8OcilxWlCfA
yQ8VF5NAcBXLEstkYVlZDMqvqfQKjmzzTxuSVRLh4TJqypYoE3aZXMoQC1Lo
PqceH60GpC+VlIlyDruSmpJAfgZ94UsIAM9KB8D39UpmCmBDiUb6clwup5he
GVj5Ym4o4kyrrJ4BGsJYJsGIqEs14mqJIKtD6znsFFbggkPwDLRdzMr8VKuS
9M3es6f7pgYBNCMdtC91PeLyM1QH0W0fnyFMLAmCvE6miRE8aCkLdwsen1EO
6TSHxdljLMK1Bu0wBns5t+1MGkynyfdt4S/6WPhBWL2Es1djOd5nT80awspm
wYD7JtfndUH1gCuSs09NcL0d26EJ/LEyNjAQG00ydRTB+tDqmXpFdYMpv7bN
qemSZ6Ks5mQf16FBOsYXkM4uDc0+4Rq30OjEl9mVvcuTk/2g7pe9m28r3yVU
DRK5c84xo2WJQYmuFnNQUslMD9fdrDSEZXuFeU/l+KhGm2vC+IvCV55zLTmk
fcOMIpcalXAp42k/vMmfZdRJml8VGZayBhgWyJlIYF3UpKWCQuuvKI0G5vBy
ZfJyXdJXymraY75J2qgwee3jTLG+FMmoGNiiOw6iAN8Bn3HRTSd6ntzrct+s
ltK6AgxQ1G/I4zY9OyNm5OmPFQ3R5NZW4rK8IFTMGr6RtBZECqg4holiNjnw
adfsdTF3LSbyC9jVxFYJsxwLNl8PxFdqZEgOV6TnZPawiPheQkYAxjLGgFWk
nbHNxZXdcsJ2FO8gghECY5kTFKn0T4d7xmY80iPk0LUt1YFsiQzgkVrOihEL
Y4iQr3iXECuoRqvoldpYs/ijn3htGIXaS5Jk/ydLUBhZWZXaD3SKyAjm76rw
3hDYfAWI5s7zhgMmujVy6VY6PlYwsJWqsaCq2xmfsNd+hn7uqKY68h9gsIor
c5FJ7/joy1hqJmER45+JlQElQY1xUQvYvpkfrGfZ+n6jlizX8rEz7krh4QK/
XZB1l/fHXaxZVx6M9CmkhCnwP1PG1U8XsW0GHFJTJWz506xq7JqgXeuH98rl
T5eu/eBraP8T6+xp7WxJvgr7R8lHVKZJDOqsOvjQlfgzBwk2ggsXNQVFj7qN
OnoOT4CpwUfFssJ6Xp7GWsrRN4eo3bWpZtg7Oud6USRAUeWhGi8eGQvzCKvN
k+4NvxZcXwJvltWVOQJciY4V56oAMaS2J4aJjJkxjx9XUefd9BgfFdQUpogY
IS8KAU488w3OijOuocJbhfevXOhd100uS4s7IRzR3UZt71njdcG0p11wxy8r
KHCLJTNM4Jbj+JZiCFI1immpFlh9zgvzWJlumburEI65EElqnt2+4ANgeu/+
GLk2MRB4Xc9WfI65tDkcxAkQXhHvESYjT3Ou4BtlRUXnEpuIo9FYKBd8cY04
uXXTR3gZSQZhyAnRMxIzGpw1SDPu6rOZux5KVVfT3YK5k8Gan0QEr5LW50mj
nzfWKoxZysK46DfijbsIRQnHzefGsfmm1U/wmylvx3+K9waDD8zo79mP4Bk/
fK/Rj3sR/PCHIhqlc+hbXrwxXZy9ABXyYa6vL4xgsmsXnw/aPx/sOIvHjw6w
kh4JDXdcyNOCT/KhfPibTz798LOjz3bu4stivDqUN5u+vK0LyUy+/05doIQQ
5ovZuYu3t3+5uYsm0tHtgt0X8i6zSGLUT9Z9uaGLNw0Z9s2aLzd08UHjAH7Q
+LeN+R1/JzCTdfAIjWWbZmJXtBauNyCZtvd9936aYS+9O/bTcRLu2A+dgZ7q
D/uj/bv3s9/1fNd+1m1762xss67uF4Gu8U79xPB/l35IzxicPnm3fvYbf9+t
nw+64H6n+YDeg8XC+3i3f//u62pwvw9u6ye6W7l+gH/Zee/yOP2S87lH+oN0
o6c68G6nfu6FbrwJFQtCO8K63fvpErYc3u20ru6fN6ju9OyJ78+q/bv1c3/n
FH9gUuHf/4pz2lIEezCJ/d333d7tvGWiP8e+s2RvhOGTzmG3ms87icXRusyJ
7K/9fMt+gHZv/nyrft5JSvb9vJv+E8zn/uAMMoTJo3Eoj85v3v6S8HlHVSJa
V+uHpOt76IdfWzcJgexu/XzeVuLv0s/Psy5PRn+pddmHLap4B/h0/dyjHN7Z
j3yvW/PbSR18b61xi0ZRwQ1+8pryyOuarOEMX2xosvZFO+2Xc8PZbAE2JODE
ZpUhc6oxm6nKWM1M/Y4HD+RpcSmfcAHgF66esffQW1cy+g3oW1MsmBx1ec5+
ThN6PC9qV0x4rnJlPJzGXmrcrKNimWFw21pPPeUdl7lGm+kribZHzIVOZem5
HrnkCu7swcuwGDqbMTcO7+OFvBXVlEdmA/W6hu9VJsK6SodpZuzEsODpUpUq
r3XggfWgKZd5bi3m6JLOMWiqKiY1lXG+4nLrfRPkXAM0MPwH9o18Z+S35ksi
9jUlZZgv2WmHGYkxQ3unUxfbtBNKpkXd6a41xmXRrPPlfbPeLxu4cE2Jrx29
rGjr0RFWGi+mva7Iex0GYXVHclyGA3TfFLQOWOekNJO1IxkHjXXHtpydiF6w
WpUNyMmOufgpRF5wUAjMkRuSH99mWGJHMMY8FyEQvJe9pkhJE/UTzTWRF6m9
KdZKJ2o9jptiloK9QqwKwifnyxqzYsb5ocVVqpreu+7rJxuKs7ZVU7etXamq
aDm3uHbDiTec1g33q9zK/XrM7ldxuz/H+EU3+mKF98Xa0LhuXyw5N60rxts3
TYpOYV2n3Ml7ndWI5O2uXBG7cgPH5ZQdij4mwPnICnMbJIhti07Gzm5R7+0U
a9ydyuaJ8dWPbnFzitjPeRku7t/bZ9h2E8rITSiCor2RZ5DCW6vlCAPCJ8ss
Cn50zl23ylAEydSKv2EmICyJxeshfY5sK+Z4blRl47g6NskWTYaH1YSCf1ai
EZtD59dF5ZtIJztW6Bpc6+1jS3votyNhxyaNi+SeDh9gEvcT+u2ixlE/zmX4
JnjkXYWhv68pFEYC9XtOOowfbfL3bS29snDX5VHZsYsuj8qOXXR5VLYWn+2z
bo/KbjOxK+rqZ0uvzK39bGkVvb2fFr/r3a2f7bwpt/eznVX0ln621uK2Wdfu
82kZaTZY59d4yXfc944Fb7KMblhX22F+t36aXvO79tO2Xd11v5pew439bPBe
NPH8bud0zdnd9Zx2KOkbLND0YBvv6e3z2c4Lcns/93Le33SpA+/az33Nx4hu
2/XTdNJuaeXvmE/kpN3Wyt/RD2kjoZO26+fW+dyOJtv001zG1tbw1nxu/3y7
fjqcvbv306TeX2zt1btlXXflg85Xd+x9dXdY1z3vV+is29KLFvfTAee7n6/w
5xeWN3bpp+27+6X5ctN3d9d+mr67u/WzK1/u/rk/eeze4NztuvuF4HMXuaXr
p8uddefz1XDT3XVdTXfWXfHn/tfFBPSXXNe/Hz382fvZYKfpOANrnnV79miE
7b16O3r01i+25c0L3DSb3Xm29kTDnScwa4qxYB+jx2qMDhVSum4eVHqERSqp
EDGXsQi+/r31ZtkvnXsLv/8Br0bVxtNFmWUWdKEgsolaC2Q/ulAMnw9Sk0/J
9+kNorZqCdUJgg9f5ei7Mg6gy5OTRB7JfDkfotNmgqUqUr78G3Y2R4feUPv0
BKa5v4bhU72QPbNWo1d9Z4VHk7iiknAGGFyeY6wXZFrnKxYp3oZJYVX2ftTf
liozV9DRLQlzGWEymPfJWt1c1VTnsWsLV7bm21xfUd0qk84K5p1p9Qp/W9bW
ixS2xxV52Lu7RIg1c3dDzrTB3hrd0BXP8Gu6EjSqM/aIhPeA9r0TFadEaV7s
bUn0uMxhhWWqMvYoVDq4OgLvVrhFsCw4ZSn2Di/nKd587O1ZhNnbb26dvU28
ogswQ3YB811UU63pWq0qvvUMiDkMbzXz5XBYz1hjVRR4MV6OMGePHC7TbFz1
OZ9oFvsM8CZ1UA9mrvHcpdWcr+Biih3MNjYqFtqViAky6jyQZ3x9vH3+8F65
PYDOu8531WDbuCotObjZvWbOhz3ffHHdX6/lFZF3gu+fkysUVo6+PgB6VeTs
MueiWSNNPjM1tDmCFkVtbvrgVppSiubqO/qUqhSv7UGnnHOVbmaaxjAzHqDv
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
+hGfGYOGdisaJ7SduiwR/x/jzgst6u0AAA==

-->

</rfc>

