<?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.26 (Ruby 3.1.3) -->


<!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-03" category="std" consensus="true" 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>

    <date year="2023" month="March" day="13"/>

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

    <abstract>


<t>Attestation is the process by which an entity produces evidence about itself
that another party can use to evaluate the trustworthiness of that entity.</t>

<t>In use cases that require the use of remote attestation, such as confidential computing
or device onboarding, an attester has to convey evidence or attestation results to 
a relying party. This information exchange may happen at different layers in the 
protocol stack.</t>

<t>This specification provides a generic way of passing evidence and attestation results
in the TLS handshake. Functionality-wise this is accomplished with the help of key
attestation.</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>


<section anchor="introduction"><name>Introduction</name>

<t>The Remote ATtestation ProcedureS (RATS) architecture defines two basic types 
of topological patterns to communicate between an attester, a relying party, and
a verifier, namely the background-check model and the passport model. These two 
models are fundamentally different and require a different treatment when 
incorporated into the TLS handshake. For better readability we suggest to use different 
extensions for these two models.</t>

<t>The two models can be summarized as follows:</t>

<t><list style="symbols">
  <t>In the background check model, the attester conveys evidence to the relying party,
which then forwards the evidence to the verifier for appraisal; the verifier 
computes the attestation result and sends it back to the relying party.</t>
  <t>In the passport model, the attester transmits evidence to the verifier 
directly and receives attestation results, which are then relayed to the
relying party.</t>
</list></t>

<t>This specification supports both patterns.</t>

<t>Several formats for encoding evidence are available, such as:
- the Entity Attestation Token (EAT) <xref target="I-D.ietf-rats-eat"/>, 
- the Trusted Platform Modules (TPMs) <xref target="TPM1.2"/> <xref target="TPM2.0"/>,
- the Android Key Attestation, and
- Apple Key Attestation.</t>

<t>Likewise, there are different encodings available for attestation results.
One such encoding, AR4SI <xref target="I-D.ietf-rats-ar4si"/> is being standardized by the RATS 
working group.</t>

<t>This version of the specification defines how to support the background check model
in  the TLS handshake, such that the details about the attestation technology are
agnostic to the TLS handshake itself. Later versions of the specification will 
support the passport model as well.</t>

<t>To give the peer information that the handshake signing key is properly secured, 
the associated evidence has to be verified by that peer.
Hence, attestation evidence about the security state of the signing key is needed, which
is typically associated with evidence about the overall platform state. The platform 
attestation service ensures that the key attestation service has not been tampered with.
The platform attestation service issues the Platform Attestation Token (PAT) and the
key attestation service issues the Key Attestation Token (KAT). The security of the 
protocol critically depends on the verifiable binding between these two logically separate
units of evidence.</t>

<t>This document does not define how different attestation technologies are encoded.
This is accomplished by companion specifications.</t>

</section>
<section anchor="conventions-and-terminology"><name>Conventions and Terminology</name>

<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC 2119 <xref target="RFC2119"/>.</t>

</section>
<section anchor="overview"><name>Overview</name>

<t>The Remote Attestation Procedures (RATS) architecture <xref target="I-D.ietf-rats-architecture"/>
defines two types of interaction models for attestation, namely the passport model
and the background check model. The subsections below explain the difference in their 
interactions.</t>

<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 evidence
and nonces to be exchanged. The nonces are used for guaranteeing freshness of
the exchanged evidence.</t>

<t>When the evidence extension is successfully negotiated, the content of the
Certificate message contains a payload that is encoded based on the wrapper defined 
in <xref target="I-D.ftbs-rats-msg-wrap"/>.</t>

<t>In TLS a client has to demonstrate possession of the private key via the CertificateVerify
message, when client-based authentication is requested. The attestation payload
must contain a key attestation token, which associates a private key with the
attestation information. An example of a key attestation token format utilizing 
the EAT format can be found in <xref target="I-D.bft-rats-kat"/>.</t>

<t>The recipient extracts evidence from the Certificate message and relays it to the 
verifier to obtain attestation results. Subsequently, the attested key is used
to verify the CertificateVerify message.</t>

</section>
<section anchor="use-of-evidence-with-the-background-check-model"><name>Use of Evidence with the Background Check Model</name>

<t>The background check model is described in Section 5.2 of 
<xref target="I-D.ietf-rats-architecture"/> and allows the following modes
of operation 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 three cases in
sub-sections below.</t>

<section anchor="tls-client-as-attester"><name>TLS Client as Attester</name>

<t>In this use case the TLS client, as the attester, is challenged by the TLS
server to provide evidence. The TLS client is the attester and the the TLS
server acts as a relying party. 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-as-attester"><name>TLS Server as Attester</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 Client Providing Evidence to TLS Server." 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>
<section anchor="evidence-extensions-background-check-model"><name>Evidence Extensions (Background Check Model)</name>

<t>This document defines two new extensions, the evidence_request and 
the evidence_proposal, for use with the background check model.</t>

<t>The EvidenceType structure encodes either a media type or as a
content format. The media type is a string-based identifier 
while the content format uses a number. The former is more 
flexible and does not necessarily require a registration 
through IANA while the latter is more efficient over-the-wire.</t>

<t>The EvidenceType structure also contains an indicator for the type of credential
expected in the Certificate message. The credential can either contain
attestation evidence alone, or an X.509 certificate alongside attestation
evidence.</t>

<figure title="TLS Structure for Evidence." anchor="_figure-attestation-type"><artwork><![CDATA[
   enum { NUMERIC(0), STRING(1) } encodingType;
   enum { ATTESTATION(0), CERT_ATTESTATION(1) } credentialType;

   struct {
        encodingType type;
        credentialType cred_type;
        select (encodingType) {
            case NUMERIC:
              uint16 content_format;
            case STRING:
               opaque media_type<0..2^16-1>;
        };
   } EvidenceType;
      
   struct {
           select(ClientOrServerExtension) {
               case client:
                 EvidenceType supported_evidence_types<1..2^8-1>;
                 opaque nonce<0..2^8-1>;
                 
               case server:
                 EvidenceType selected_evidence_type;
           }
   } evidenceRequestTypeExtension;

   struct {
           select(ClientOrServerExtension) {
               case client:
                 EvidenceType supported_evidence_types<1..2^8-1>;

               case server:
                 EvidenceType selected_evidence_type;
                 opaque nonce<0..2^8-1>;
           }
   } evidenceProposalTypeExtension;
]]></artwork></figure>

<section anchor="attest-only"><name>Attestation-only</name>

<t>When the chosen evidence type indicates the sole use of attestation for
authentication, the Certificate payload is used as a container for
attestation evidence, as shown in <xref target="_figure-attest-only"/>, and follows the
model of <xref target="RFC8446"/>.</t>

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

                /* payload used to convey evidence */
              case attestation:
                opaque evidence<1..2^24-1>;
              
              case X509:
                opaque cert_data<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.ftbs-rats-msg-wrap"/>.</t>

</section>
<section anchor="pkix-attest"><name>Attestation alongside X.509 certificates</name>

<t>When the chosen evidence type indicates usage of both attestation and PKIX,
the X.509 certificate will serve as the main payload in the Certificate
message, while the attestation evidence will be carried in the
CertificateEntry extension, as shown in <xref target="_figure-cert-attest"/>.</t>

<figure 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>;
              
              /* X.509 certificate conveyed as usual */
              case X509:
                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.ftbs-rats-msg-wrap"/>.</t>

<t>As described in <xref target="usage-variants"/>, this authentication mechanism is meant
primarily for carrying platform attestation evidence to provide more
context to the relying party. This evidence must be cryptographically bound
to the TLS handshake to prevent relay attacks. An Attestation Channel Binder as
described in <xref target="binding-mech"/> is therefore used when the attestation scheme
does not allow the binding data to be part of the token. The structure of
the binder is given in <xref target="_figure-tls-binder"/>.</t>

<figure title="Format of TLS channel binder." anchor="_figure-tls-binder"><artwork><![CDATA[
attestation_channel_binder = {
  &(nonce: 1) => bstr .size (8..64)
  &(ik_pub_fingerprint: 2) => bstr .size (16..64)
  &(channel_binder: 3) => bstr .size (16..64)
}
]]></artwork></figure>

<t><list style="symbols">
  <t>Nonce is the value provided as a challenge by the relying party.</t>
  <t>The identity key public fingerprint (ik_pub_fingerprint) is a hash of the
Subject Public Key Info from the leaf X.509 certificate transmitted in
the handshake.</t>
  <t>The channel binder (channel_binder) is a partial transcript of the TLS
handshake, up to (but not including) the Certificate message.</t>
</list></t>

<t>A hash of the binder must be included in the attestation evidence. Previous
to hashing, the binder must be encoded as described in <xref target="binding-mech"/>.</t>

<t>The hash algorithm negotiatied within the handshake must be used wherever
hashing is required for the binder.</t>

</section>
</section>
<section anchor="behavior"><name>TLS Client and Server Handshake Behavior</name>

<t>The high-level message exchange in <xref target="_figure-overview"/> shows the
evidence_proposal and evidence_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
     v + evidence_request
     -------->
                                                  ServerHello  ^ Key
                                                 + key_share*  | Exch
                                            + pre_shared_key*  v
                                        {EncryptedExtensions}  ^  Server
                                          + evidence_proposal  |
                                           + evidence_request  |                                     
                                        {CertificateRequest*}  v  Params
                                               {Certificate*}  ^
                                         {CertificateVerify*}  | Auth
                                                   {Finished}  v
                               <--------  [Application Data*]
     ^ {Certificate*}
Auth | {CertificateVerify*}
     v {Finished}              -------->
       [Application Data]      <------->  [Application Data]
]]></artwork></figure>

<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 MUST 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 MUST omit the evidence_proposal
extension in the ClientHello.</t>

<t>The client MUST 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 MUST 
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 certificate_request message.  If the
server wants to request evidence from the client, it MUST include the
client_attestation_type 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 MUST be selected from one of the
values provided in the evidence_proposal extension sent in the
ClientHello.  The server MUST also send a certificate_request
message.</t>

<t>If the server does not send a certificate_request message or none 
of the evidence types supported by the client (as indicated in the
evidence_proposal extension in the ClientHello) match the
server-supported evidence types, then the evidence_proposal
extension in the ServerHello MUST 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 MUST contain 
a single value selected from the evidence_request extension in 
the ClientHello.</t>

</section>
</section>
<section anchor="background-check-model-examples"><name>Background-Check Model Examples</name>

<section anchor="cloud-confidential-computing"><name>Cloud Confidential Computing</name>

<t>In this example, a confidential workload is executed on computational
resources hosted at a cloud service provider.  This is a typical
scenario for secure, privacy-preserving multiparty computation,
including anti-money laundering, drug development in healthcare, contact
tracing in pandemic times, etc.</t>

<t>In such scenarios, the users (e.g., the party providing the data input
for the computation, the consumer of the computed results, 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 kinds of evidence 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 the local API to
request the attestation.  The returned evidence binds the identity key
with the platform identity and security state.  The server
then signs the handshake transcript with the (attested) identity key,
and sends the attestation evidence together with the signature over to
the client.</t>

<t>The client forwards the attestation evidence to the verifier using the
previously established session, obtains the attestation result 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,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 208,544 L 400,544" fill="none" stroke="black"/>
<path d="M 400,624 L 520,624" fill="none" stroke="black"/>
<path d="M 408,656 L 528,656" fill="none" stroke="black"/>
<path d="M 400,688 L 520,688" fill="none" stroke="black"/>
<path d="M 408,720 L 528,720" 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,688 516,682.4 516,693.6" fill="black" transform="rotate(0,520,688)"/>
<polygon class="arrowhead" points="528,624 516,618.4 516,629.6" fill="black" transform="rotate(0,520,624)"/>
<polygon class="arrowhead" points="416,720 404,714.4 404,725.6" fill="black" transform="rotate(180,408,720)"/>
<polygon class="arrowhead" points="416,656 404,650.4 404,661.6" fill="black" transform="rotate(180,408,656)"/>
<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,544 204,538.4 204,549.6" fill="black" transform="rotate(180,208,544)"/>
<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="256" y="436">ServerHello</text>
<text x="240" y="452">{...}</text>
<text x="288" y="468">EncryptedExtensions</text>
<text x="240" y="484">{...}</text>
<text x="288" y="500">evidence_request(</text>
<text x="264" y="516">type(a)</text>
<text x="224" y="532">)</text>
<text x="456" y="564">attest_key(</text>
<text x="452" y="580">nonce,</text>
<text x="440" y="596">TIK</text>
<text x="416" y="612">)</text>
<text x="444" y="644">CAB(KAT,</text>
<text x="500" y="644">PAT)</text>
<text x="460" y="676">sign(TIK,hs)</text>
<text x="456" y="708">sig</text>
<text x="292" y="740">Certificate(KAT,PAT)</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)        |               |    |
|  |                    |  )                     |               |    |
|  |                    +----------------------->|               |    |
|  |                    | ServerHello            |               |    |
|  |                    |  {...}                 |               |    |
|  |                    | EncryptedExtensions    |               |    |
|  |                    |  {...}                 |               |    |
|  |                    |  evidence_request(     |               |    |
|  |                    |    type(a)             |               |    |
|  |                    |  )                     |               |    |
|  |                    |<-----------------------+               |    |
|  |                    |                        | attest_key(   |    |
|  |                    |                        |   nonce,      |    |
|  |                    |                        |   TIK         |    |
|  |                    |                        | )             |    |
|  |                    |                        +-------------->|    |
|  |                    |                        | CAB(KAT, PAT) |    |
|  |                    |                        |<--------------+    |
|  |                    |                        | sign(TIK,hs)  |    |
|  |                    |                        +-------------->|    |
|  |                    |                        |     sig       |    |
|  |                    |                        |<--------------+    |
|  |                    | Certificate(KAT,PAT)   |               |    |
|  |                    | CertificateVerify(sig) |               |    |
|  |                    | Finished               |               |    |
|  |                    |<-----------------------+               |    |
|  | POST /76839A9E     |                        |               |    |
|  | Body: {            |                        |               |    |
|  |   type(a),         |                        |               |    |
|  |   CAB              |                        |               |    |
|  | }                  |                        |               |    |
|  |<-------------------+                        |               |    |
|  | Body: {            |                        |               |    |
|  |   att-result: AR{} |                        |               |    |
|  | }                  |                        |               |    |
|  +------------------->|                        |               |    |
|  |                    +---.                    |               |    |
|  |                    |    | verify AR{}       |               |    |
|  |                    |<--'                    |               |    |
|  |                    +---.                    |               |    |
|  |                    |    | verify sig        |               |    |
|  |                    |<--'                    |               |    |
|  |                    |       Finished         |               |    |
|  |                    +----------------------->|               |    |
|  |                    |                        |               |    |
 '-+--------------------+------------------------+---------------+---'
                        |    application data    |
                        |<---------------------->|
                        |                        |
]]></artwork></artset></figure>

</section>
<section anchor="iot-device-onboarding"><name>IoT Device Onboarding</name>

<t>In this example, an IoT is onboarded to a cloud service provider (or to a
network operator). In this scenario there is typically no a priori
relationship between the device and the cloud service provider that 
will remotely manage the device.</t>

<t>In such scenario, the cloud service provider wants to make sure
that the device runs the correct version of firmware, has not been 
rooted, is not emulated or cloned.</t>

<t>The protocol flow is shown in <xref target="_figure-iot-example"/> where the client 
is the attester while the server is the relying party.</t>

<t>The flow starts with the client initiating a TLS exchange with the TLS
server operated by the cloud service provider. The client indicates
what evidence types it supports.</t>

<t>The server obtains a nonce from the verifier, in real-time or from a
reserved nonce range, and returns it to the client alongside the
selected evidence type. Since the evidence will be returned in the
Certificate message the server has to request mutual authentication
via the CertificateRequest message.</t>

<t>The client, when receiving the EncryptedExtension with the 
evidence_proposal, will proceed by invoking a local API to
request the attestation.  The returned evidence binds the identity key
with the workload and platform identity and security state.  The client
then signs the handshake transcript 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="1136" width="576" viewBox="0 0 576 1136" 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,1072" fill="none" stroke="black"/>
<path d="M 32,80 L 32,112" fill="none" stroke="black"/>
<path d="M 32,144 L 32,1072" 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,1120" 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,1120" 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,1072" fill="none" stroke="black"/>
<path d="M 568,48 L 568,80" fill="none" stroke="black"/>
<path d="M 568,160 L 568,1056" 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,576 L 168,576" fill="none" stroke="black"/>
<path d="M 32,608 L 160,608" fill="none" stroke="black"/>
<path d="M 40,640 L 168,640" fill="none" stroke="black"/>
<path d="M 32,672 L 160,672" fill="none" stroke="black"/>
<path d="M 168,720 L 360,720" fill="none" stroke="black"/>
<path d="M 368,832 L 520,832" fill="none" stroke="black"/>
<path d="M 376,896 L 528,896" fill="none" stroke="black"/>
<path d="M 368,912 L 392,912" fill="none" stroke="black"/>
<path d="M 376,944 L 392,944" fill="none" stroke="black"/>
<path d="M 368,960 L 392,960" fill="none" stroke="black"/>
<path d="M 376,992 L 392,992" fill="none" stroke="black"/>
<path d="M 8,1072 L 552,1072" fill="none" stroke="black"/>
<path d="M 176,1104 L 360,1104" 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,912 C 400.83064,912 408,919.16936 408,928" fill="none" stroke="black"/>
<path d="M 392,944 C 400.83064,944 408,936.83064 408,928" fill="none" stroke="black"/>
<path d="M 392,960 C 400.83064,960 408,967.16936 408,976" fill="none" stroke="black"/>
<path d="M 392,992 C 400.83064,992 408,984.83064 408,976" fill="none" stroke="black"/>
<path d="M 552,1072 C 560.83064,1072 568,1064.83064 568,1056" fill="none" stroke="black"/>
<polygon class="arrowhead" points="528,832 516,826.4 516,837.6" fill="black" transform="rotate(0,520,832)"/>
<polygon class="arrowhead" points="528,304 516,298.4 516,309.6" fill="black" transform="rotate(0,520,304)"/>
<polygon class="arrowhead" points="384,992 372,986.4 372,997.6" fill="black" transform="rotate(180,376,992)"/>
<polygon class="arrowhead" points="384,944 372,938.4 372,949.6" fill="black" transform="rotate(180,376,944)"/>
<polygon class="arrowhead" points="384,896 372,890.4 372,901.6" fill="black" transform="rotate(180,376,896)"/>
<polygon class="arrowhead" points="384,416 372,410.4 372,421.6" fill="black" transform="rotate(180,376,416)"/>
<polygon class="arrowhead" points="368,1104 356,1098.4 356,1109.6" fill="black" transform="rotate(0,360,1104)"/>
<polygon class="arrowhead" points="368,720 356,714.4 356,725.6" fill="black" transform="rotate(0,360,720)"/>
<polygon class="arrowhead" points="368,256 356,250.4 356,261.6" fill="black" transform="rotate(0,360,256)"/>
<polygon class="arrowhead" points="184,1104 172,1098.4 172,1109.6" fill="black" transform="rotate(180,176,1104)"/>
<polygon class="arrowhead" points="184,544 172,538.4 172,549.6" fill="black" transform="rotate(180,176,544)"/>
<polygon class="arrowhead" points="168,672 156,666.4 156,677.6" fill="black" transform="rotate(0,160,672)"/>
<polygon class="arrowhead" points="168,608 156,602.4 156,613.6" fill="black" transform="rotate(0,160,608)"/>
<polygon class="arrowhead" points="48,640 36,634.4 36,645.6" fill="black" transform="rotate(180,40,640)"/>
<polygon class="arrowhead" points="48,576 36,570.4 36,581.6" fill="black" transform="rotate(180,40,576)"/>
<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="96" y="516">attest_key(</text>
<text x="248" y="516">CertificateVerify</text>
<text x="92" y="532">nonce,</text>
<text x="212" y="532">Finished</text>
<text x="80" y="548">TIK</text>
<text x="56" y="564">)</text>
<text x="84" y="596">CAB(KAT,</text>
<text x="140" y="596">PAT)</text>
<text x="100" y="628">sign(TIK,hs)</text>
<text x="96" y="660">sig</text>
<text x="260" y="676">Certificate(KAT,PAT)</text>
<text x="268" y="692">CertificateVerify(sig)</text>
<text x="212" y="708">Finished</text>
<text x="396" y="756">POST</text>
<text x="456" y="756">/76839A9E</text>
<text x="400" y="772">Body:</text>
<text x="432" y="772">{</text>
<text x="428" y="788">type(a),</text>
<text x="408" y="804">CAB</text>
<text x="384" y="820">}</text>
<text x="400" y="852">Body:</text>
<text x="432" y="852">{</text>
<text x="432" y="868">att-result:</text>
<text x="500" y="868">AR{}</text>
<text x="384" y="884">}</text>
<text x="444" y="932">verify</text>
<text x="492" y="932">AR{}</text>
<text x="444" y="980">verify</text>
<text x="488" y="980">sig</text>
<text x="248" y="1092">application</text>
<text x="316" y="1092">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            |                   |    |
|  |  attest_key(   | CertificateVerify      |                   |    |
|  |    nonce,      | Finished               |                   |    |
|  |    TIK         |<-----------------------+                   |    |
|  |  )             |                        |                   |    |
|  |<---------------+                        |                   |    |
|  |  CAB(KAT, PAT) |                        |                   |    |
|  +--------------->|                        |                   |    |
|  |  sign(TIK,hs)  |                        |                   |    |
|  |<---------------+                        |                   |    |
|  |      sig       |                        |                   |    |
|  +--------------->| Certificate(KAT,PAT)   |                   |    |
|  |                | CertificateVerify(sig) |                   |    |
|  |                | Finished               |                   |    |
|  |                +----------------------->|                   |    |
|  |                |                        |                   |    |
|  |                |                        | POST /76839A9E    |    |
|  |                |                        | Body: {           |    |
|  |                |                        |   type(a),        |    |
|  |                |                        |   CAB             |    |
|  |                |                        | }                 |    |
|  |                |                        +------------------>|    |
|  |                |                        | Body: {           |    |
|  |                |                        |  att-result: AR{} |    |
|  |                |                        | }                 |    |
|  |                |                        |<------------------+    |
|  |                |                        +---.               |    |
|  |                |                        |    | verify AR{}  |    |
|  |                |                        |<--'               |    |
|  |                |                        +---.               |    |
|  |                |                        |    | verify sig   |    |
|  |                |                        |<--'               |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
|  |                |                        |                   |    |
'--+----------------+------------------------+-------------------+---'
                    |    application data    |
                    |<---------------------->|
                    |                        |
]]></artwork></artset></figure>

</section>
</section>
<section anchor="sec-cons"><name>Security Considerations</name>

<t>TBD.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="tls-extensions"><name>TLS Extensions</name>

<t>IANA is asked to allocate two new TLS extensions, evidence_request
and evidence_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 entry:</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>
</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'><organization/></author>
<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'><organization/></author>
<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.ftbs-rats-msg-wrap'>
   <front>
      <title>RATS Conceptual Messages Wrapper</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>arm</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         </author>
      <date day='7' month='March' year='2023'/>
      <abstract>
	 <t>   This document defines two encapsulation formats for RATS conceptual
   messages (i.e., evidence, attestation results, endorsements and
   reference values.)

   The first format uses a CBOR or JSON array with two members: one for
   the type, another for the value.  The other format wraps the value in
   a CBOR byte string and prepends a CBOR tag to convey the type
   information.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ftbs-rats-msg-wrap-02'/>
   
</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>arm</organization>
      </author>
      <author fullname='Hannes Tschofenig' initials='H.' surname='Tschofenig'>
         <organization>arm</organization>
      </author>
      <date day='21' month='October' year='2022'/>
      <abstract>
	 <t>   This document defines an evidence format for key attestation based on
   the Entity Attestation Token (EAT) format.

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-00'/>
   
</reference>



<reference anchor='RFC8949'>
<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author fullname='C. Bormann' initials='C.' surname='Bormann'><organization/></author>
<author fullname='P. Hoffman' initials='P.' surname='Hoffman'><organization/></author>
<date month='December' year='2020'/>
<abstract><t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t><t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t></abstract>
</front>
<seriesInfo name='STD' value='94'/>
<seriesInfo name='RFC' value='8949'/>
<seriesInfo name='DOI' value='10.17487/RFC8949'/>
</reference>




    </references>

    <references title='Informative References'>




<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>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Jeremy O&#39;Donoghue' initials='J.' surname='O&#39;Donoghue'>
         <organization>Qualcomm Technologies Inc.</organization>
      </author>
      <author fullname='Carl Wallace' initials='C.' surname='Wallace'>
         <organization>Red Hound Software, Inc.</organization>
      </author>
      <date day='19' month='December' year='2022'/>
      <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 how much
   it wishes to trust 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-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='I-D.ietf-rats-architecture'>
   <front>
      <title>Remote ATtestation procedureS (RATS) Architecture</title>
      <author fullname='Henk Birkholz' initials='H.' surname='Birkholz'>
         <organization>Fraunhofer SIT</organization>
      </author>
      <author fullname='Dave Thaler' initials='D.' surname='Thaler'>
         <organization>Microsoft</organization>
      </author>
      <author fullname='Michael Richardson' initials='M.' surname='Richardson'>
         <organization>Sandelman Software Works</organization>
      </author>
      <author fullname='Ned Smith' initials='N.' surname='Smith'>
         <organization>Intel Corporation</organization>
      </author>
      <author fullname='Wei Pan' initials='W.' surname='Pan'>
         <organization>Huawei Technologies</organization>
      </author>
      <date day='28' month='September' year='2022'/>
      <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='Internet-Draft' value='draft-ietf-rats-architecture-22'/>
   
</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='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='12' month='December' year='2022'/>
      <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-00'/>
   
</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>



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

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-rats-ar4si-04'/>
   
</reference>




    </references>


<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 signalling via existing methods, e.g. using a policy OID in
the end-entity certificate.</t>
      <t>Implicit signalling, 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>
<section anchor="binding-mech"><name>Cross-protocol binding mechanism</name>

<t>Note: This section describes a protocol-agnostic mechanism which is used in
the context of TLS within the body of the draft. The mechanism might, in
the future, be spun out into its own document.</t>

<t>One of the issues that must be addressed when using remote attestation as
an authentication mechanism is the binding to the outer protocol (i.e., the
protocol requiring authentication). For every instance of the combined
protocol, the remote attestation credentials must be verifiably linked to
the outer protocol. The main reason for this requirement is security: a
lack of binding can result in the attestation credentials being relayed.</t>

<t>If the attestation credentials can be enhanced freely and in a verifiable
way, the binding can be performed by inserting the relevant data as new
claims. If the ways of enhancing the credentials are more restricted,
ad-hoc solutions can be devised which address the issue. For example, many
roots of trust only allow a small amount (32-64 bytes) of user-provided
data which will be included in the attestation token. If more data must be
included, it must therefore be compressed. In this case, the problem is
compounded by the need to also include a challenge value coming from the
relying party. The verification steps also become more complex, as the
binding data must be returned from the verifier and checked by the relying
party.</t>

<t>However, regardless of how the binding and verification are performed,
similar but distinct approaches need to be taken for every protocol into
which remote attestation is embedded, as the type or semantics of the
binding data could differ. A more standardised way of tackling this issue
would therefore be beneficial. This appendix presents a solution to this
problem, in the context of attestation evidence.</t>

<section anchor="binding-mechanism"><name>Binding mechanism</name>

<t>The core of the binding mechanism consists of a new token format - the
Attestation Channel Binder - that represents a set of binders as a CBOR
map. Binders are individual pieces of data with an unambiguous definition.
Each binder is a name/value pair, where the name must be an integer and the
value must be a byte string.</t>

<t>Each protocol using the Attestation Channel Binder to bind attestation
credentials must define its Attestation Channel Binder using CDDL. The only
mandated binder is the challenger nonce which must use the value 1 as a
name. Every other name/value pair must come with a text description of its
semantics. The byte strings forming the values of binders can be
size-restricted where this value is known.</t>

<t>Attestation Channel Binders are encoded in CBOR, following the CBOR core
deterministic encoding requirements (<xref section="4.2.1" sectionFormat="of" target="RFC8949"/>).</t>

<t>An example Attestation Channel Binder is shown below.</t>

<figure title="Format of a possible TLS Attestation Channel Binder." anchor="_figure-binder-format"><artwork><![CDATA[
attestation_channel_binder = {
  &(nonce: 1) => bstr .size (8..64)
  &(ik_pub_fingerprint: 2) => bstr .size 32
  &(session_key_binder: 3) => bstr .size 32
}
]]></artwork></figure>

</section>
<section anchor="usage"><name>Usage</name>

<t>When a Attestation Channel Binder is used to compress data to fit the space
afforded by an attestation scheme, the encoded binder must be hashed. Since
the relying party has access to all the data expected in the binder, the
binder itself need not be conveyed. How the hashing algorithm is chosen,
used, and conveyed must be defined per outer protocol. If the digest size
does not match the user data size mandated by the attestation scheme, the
digest is truncated or expanded appropriately.</t>

<t>The verifier must first hash the encoded token received from the relying
party and then compare the hashes. The challenge value included in the
binder can then be extracted and verified. If verification is successful,
binder correctness can also be assumed by the relying party, as
verification was done with the values it expected.</t>

</section>
</section>
<section anchor="history"><name>History</name>

<t>RFC EDITOR: PLEASE REMOVE THIS SECTION</t>

<section anchor="draft-fossati-tls-attestation-02"><name>draft-fossati-tls-attestation-02</name>

<t><list style="symbols">
  <t>Focus on the background check model</t>
  <t>Added examples</t>
  <t>Updated introduction</t>
  <t>Moved attestation format-specific content to related drafts.</t>
</list></t>

</section>
<section anchor="draft-fossati-tls-attestation-01"><name>draft-fossati-tls-attestation-01</name>

<t><list style="symbols">
  <t>Added details about TPM attestation</t>
</list></t>

</section>
<section anchor="draft-fossati-tls-attestation-00"><name>draft-fossati-tls-attestation-00</name>

<t><list style="symbols">
  <t>Initial version</t>
</list></t>

</section>
</section>
<section anchor="working-group-information"><name>Working Group Information</name>

<t>The discussion list for the IETF TLS working group is located at the e-mail
address <eref target="mailto:tls@ietf.org">tls@ietf.org</eref>. Information on the group and information on how to
subscribe to the list is at <eref target="https://www1.ietf.org/mailman/listinfo/tls">https://www1.ietf.org/mailman/listinfo/tls</eref></t>

<t>Archives of the list can be found at:
<eref target="https://www.ietf.org/mail-archive/web/tls/current/index.html">https://www.ietf.org/mail-archive/web/tls/current/index.html</eref></t>

</section>


  </back>

<!-- ##markdown-source:
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
95vvQd7hrpmIcl/Y39j1Bf/+C7obraDEzKzHf3Xgfo5JJHAcwA0dwwzWd4Ra
+7/Opd1C4q8tXL/t/Iyl482B/IzEs+43gyF9st72OOL5+0eBtXFKGhmVyXHg
8MYPeNUkj26Fs1DOjdr3FsqdBoq3RSr3JjREGoJeiobp4EyMIBYIajVr9WNM
loYhIi4a5tL/hE7fXKV3h0ONXhfKxj/Qn3NJ+8wUXVvoqVoMZmldu0iCs3Vj
xS7I+vGb/h2YJTKIYSuGDlNvSK3AxHkC00oYTY0my29BG5vNKQvTD17A/lM7
/9/RzoYH5MdrZ/f78JHT+U+VvZ48/1TZ91HZ+w9V2Z/5l8Gmeqvb5bPdim4E
TnD0BnuPbi9SmW4B4h5RRG+s4dwjJy5aB87vtMoPzp4ni/fFcq6lV2XsWa2k
TmkrquRMj9DLiV8VZJMoYX237O3jHX3wGeo9Sh7PJ8blyRqPNbu3KmIwiDs2
zBeYN8lA8Q0r0lmBanac6fcpRpmQDi40lGt0M6sSUzt99kjJeZHMC0AzIMRk
SjmSgWGTUZTfdaDHwLQ0+Rgd7MMX/WuAlqylGOzii8BXnVuPf1E6Tz9Tbxxs
/IV+P9dDTl9Z5eJkGvg2ZNaYeTH9ie44Kh4L6NF05fJPydPdr+UwAI+vJxX5
hwK3TtMJADIaDJGZvJFvfnh9fHZytLW73ZPnF2cnb/64tbctb100H+nxu+D7
w4uL4/OLQwxMUZuj47OLd+FDau3Hxe0RABNV3jjlEnZBVPydexW3pz/fxV9U
OgMSy60QyHYAnKCgKW0GeNDQaWCF1XvPLJu+Yzb9Xbs506TZWhZzBYuWFwZh
9s1ukuz/vPesv/eth3JL/7yNmMu+7SSJG9gWy6m3JYsjJ36aQ7RosmnaQlM2
+JqDVEBMJ2IoPPfNHiL/VYR7c6hkGPIoV3zYiRjb1HciRoNu4hX1ccuktB8Y
swBbO+Ks4LPfAFF/WdLwb4N5atDw1KiXBhGbWjU8AEXCLlCn505Soji0iLP2
/CyMKPdpy3XzGQOjv26DIONwWsAmNkgYI13joqu0Oysylx4bSkboWMRht15L
6NoQown9sL/diFnOoOsUthQZcPvTm5uIIDyGW47Vm6xACsBxlAewpKg7njah
gJgVvN0sauVZIMtpotu8Sbxzpq5PFwMwh2Bz0+agncfyewyvYfz/X/ef7srD
8zfJ3jvY8P4HdOIanuTjQj7eaTU3nASNutswZ+8/6WRt7NySm2jdkXHc6pPG
FMxAe0gGJwsiQiH+sgv0n0BNroSJJH+HjvgVQG/DP9w6Cey5Dtl/G7LfcV6X
S0epjskPELFzb4zCd6Sg3tfdC7rZRwQBD+xxs2hEEWarFjuvVrPOw4X02kSU
TGARDWj6NMyNxsWPxo1Lo2xEiQLzikKhHNAHe2dtPD8WJ4Gd07KBKhAz88v0
vRnLPcTMgsYG6FKWaCgRcI2fvjz5U48M9LbZxZFMFOg2mIhHubzcadmBYRKB
NVg77T2CPEC/YFmmzqQUral37LhCaCG2liL/i8VR3LTxJyDSnjoWTqwUFtUC
TPFu8fTpZAig0TnVISYqD2e00tpkNEW4/QLC6GGi6BMIolUIuTGSNeTG2bCC
7qd0rDJxwGjmugjXsC2l3QeFHXNc12dHccabl2u0tmlvSpHxkHviwf2IBwDt
3naJCIfdXMEmWOW1G5/Zdy+7eSkYbfDeGZFbz2Dz5r7Yevb06ZdPt9uj5g1L
U0cEomRDHYGis3lU5xfSE4eN7JqbG5LqfUO+Ci02CiY0UrVmGrNO0mpGDgMN
n4p5mc7Y84DGLQrgZeTP7yR8kKGBbgdhVk33oQo+T+XaUiIYynr08xYTGNLU
ZNUO0NMjOvPKOQSE+aycMoVoqeFlRQlfoco8orPxmfwOCwWgt0c0CGXSe/tI
Cs7TR87W48KmEl5bPRrlIQ+neqaF89hwuiL5qEy6MCU5cK4iDtul9WC+mcnc
dDNtUhIHjCOggLntsSbDU7D83iuykMeHPM53BsbvabX+C0c2DuTetvz9txKP
CcqkSv+m5dZXSfLsyTZ9k16+my8G74DTJphUm2I5hf1Wg71nvkXc2YH8cuXX
t6115Adil9H37C0DAlG8zUwYf0Pr5bF8w8k4bGTQkWHLb3ZbY4OFNm+pcTzm
MVGcpUe9pIy4OalTGQxbdpBim51/U1VNbWanxFw7VMiSNTJloJMed+l9mVbj
Dq1rDwmxl0zI+JCCxTKmgGxQ2yCE40IPGoEEfp47DsM0Kxke7ljMkQ+3Boua
WDXNh9kCWXR7pZsOBEo4YouJXakMwYv5LpGQyFNYn2mxoLwcBEanZDqg2czX
Zh53c2kanyXh5YJvLgs3Nel+BiUvKWw3di2j1CiFQcjmqqalyRn2+FEGZJhd
B4LchLFfOODf6amCQZZgfA/MP418n6aTaT+j8/jNFL9oXRcmKR1ED5qvvJlu
J5Fg7y3feZguPRr5PKow4dom4K3JlKtiw9gOePNfGH6VK6KvQTyV2qwOprrX
8+ryHTazdHtHuZ7hB9CSYI7wu+BFO/GKXl2tjAL7EM09hh2Nnqktf63Aa4sY
GHjdtHF3kBXGIj9RAtR9htIVpP2wUcvNx9uOtD6+RfZ4YCQ4hIeAfn5YnhYH
FhGAiZ/eEw2C50ORdzOAD4rKrpgoffNzY3SrI6KPb+0qC5EIf61V1hEEjRD7
tuuTlkVhRai1J0Lzz5rl9uyPddIaGcdCCk8TWn8Ie12Dcy2tw/d8IiZIQac0
2lXHodmdXlmdGQdB3RLB8y07Rv2sE/PtEzVGK7ZBbnIMx3uBohCs2cz57B8y
OTBKGdj5UfpQT5j0KHPsw+yAlGyvtMDIuFg72k+BdyOHzOePCTsMOnxSubMT
XQ70lSS+SylXnFgtmqOgIwG0s4K+0VGAdpaLqDSG0xMVPx5gwQ5tTnMlUnr/
nslut6e9yTdZ5B5jgYB6mChNpiP1aOIAPEs4WTC7OtMYxDfjNWDpCGABRmuT
zM7Y7WDntZOYjhGVIRi1Be7eqnmR095eWf4RDnQ74Y8Sx6GXJp0oOAyQRcy1
2IVNPmcPwsJkGnaDkcIlG/AejDEAcp+MQ2LzQdgmSdAAw6oCnaMOSdlJtrVU
e/CkWJpuMCWGXm6lg+Rj4WaX28jkMxpxzHExnDib5tiiE22QBUEd1h0nPji3
o9QTrvgQUNTUrcEiL1uq5VmiE/PhGSHazETrgWgk2uRuCxp/KiuiN6gJa/Cz
mjBDM0zpyzdEpKTESJc80W3N+67XyH0RuELN2PBEULGoh8XMnHXEw3yYPkIH
m8xhZ0LOOSbC4/SBaIrImZLFY3N4cA5Nai66gHvxmIHWPKyuHQWCwQm1J9JX
d+h7a2LuxNiGAHoSNrbYcRqcraZUXJUvG4ubEmdnM3ukxTMLFvpAJPJotDWd
kPaxWHNsktoqOQZjBHRApsm5gwCoj0eLvB0cf/TRw6SzZ1KS4AEGy7RCtZHr
jUeIs0pIxhPrl5ksqQKH34Oz752q25Cto1drwvXC5dMaGcEZNWtldDjufcqR
kUj26Nk1+kMRsJMDrcOZNuXbiuzAdjPHpd6Frrc68tFbCnQsD/Z8rpUHa861
kQzwtLym+loOd/ahxdT05lhAUjR4xAqDx9PswvnZXHzGxODWYW98b4bSRLuB
T+ZgAiPPGkca1/7znrw0Pnvd1YMxqTgaGEjraG1Rx5TERsq4kz+EN0Njse4l
58q2zgwFyZ3jeETTic+87U06QxgzNajPvErdgK7tRbUtYbq5YpJh7P5KA9Jr
xg1MjtCbYSewYJflgyx2H2dGhhWuMILHMbDWVbC6G/Yfax6xzlx33PuTFX0t
VNvj7VhpkQ6I03FELG3j8HTnoW5i2GhdJBEVndi+w0ahubDH5YUz2XmNxivs
DkhpLps7EvJ1+gzffpDhK4/5OEplts14CPQoPPLhqhT6Ez3mBEuP0438p+Fh
FP1eDxc1lzrgUyOKa9QJW4URyxqR8MIqhOb4qT2pa0RGSeve1EKxRSxENdS5
KtOCtu9c4KfHVQOGyz7tI0o6wjNbZHVq6hp6DHrCOchB59ZpH5SpXspMLdAr
TE7sUbmY4ClU0I/zmRFIU62yegoMAX2ZA0ACT/+TkxlzIqD1DKskpTNckroe
crkGqrxkMTash2dtKrmlk0lilDQhOXfp2/iM4ktpDmgL67gOR2EegC2C+cZG
PplTQSNfZcxBFx46b7GAsWssrPn6lTnBTw50w6hBT9vm3NN1ISYFCN0DjNec
mDCtRdbNPPxBZaN8YRQ8tQTrtQetXiuqf1XRyWJ7vsgFHulkv6kS5wEaPmIW
APvGVhY7pufI78f5VVoWOU3U1sXx8bY3jVzKsi13QpEP0ng5O/3LEj3PM3tO
LCieYNDDRHcTQaBi4jS4ma6FeV+pmaZJ902YJV2YBxcDmBIDLuNjhKwrUYSn
v3phgnOWEZA0vyqyK1wdw7ooKz69r+Y1bXMpXGzj1sO+WY+3t8G57/YBODrh
tVX72JkgxthunJrztRGGRT8rhr4kFX1xfNznZSu6lz51YA/kbZvR0hE3oAHa
ww271R5MZ8aMtp+xPS5MXddwL0pWjD2BF+5dgM9GsRpKa0ELnMqzcYEkU2uA
J85mJLlEi0hP2QHFu3QzIks5H5NyYzTEHCzJVsjsegkju32Mb+O4fA1kNExx
H8DlQEKxH+3DRdBD4BxyxccKKg3UNhdSM1o9nKLbwtZawJJSi0yV8e6VNxBs
4iBPXtolj6yRycPTE6CWsFrI08qUZ6Ep4pkJMRnQ/BCfByFb75vxpwvta67E
EdZYi2xCQTYQBpwYbJBJ4AOoDvyWLZ2yHfXfE75sZGMkYSrERNeYG+Mn2Ya5
6AwGkiPceIYME5W+XJVoEc6z2QEhy8xNuDVbhuLELpKeYZZ1BTEFOa7RUOMB
GH/hcKjnNW3MsNwY14/ATBxgJp7jeZGlwyVvtKoC+UcYpuB1ZJBtEt6TxQ0C
REppHIIkfzi8jsH6LSpRae0K3+C0OOXyNsyjLw8vvNezq0aPlTidxI2kC6i4
AS0uN4/Ra5Oy0S6g44dld1wkCFu1CY1DEwVlmPjiGQ4rRlI8wcy5E6G06poL
oGeKhRno3R9TATVXqnnJK4RzXUDHjGteJ2H5xgrzI1SGxSqjGmBoqhOkuDeu
WyU4OYz0ld0ZRSwZ6b9wu0/CgMPxYtXBYirdWKcubK1UdTW5X6ws6a/4JSJ4
lbQ+TxpwPlgHIUYow7DTB/FB/mjX6Af/uQk7NeOZH8J/nRsbl/4Un/f7X5je
P7cfwTN++HkDjnsR/PhDIVdEUVeGVls4GhCnb2EjspPr63Ojfu8L4pt++/fF
PbHY392TR1hCGdjpgQN5VQzNTRs7//rsqy+/Pvz63iC+K0bLA3mz7su7QEi2
MXofBQKVe59OZfV5f31fELd3f7keRJPpKHh7/4F8DBZJzPrJqi/XgPjQMNM+
rPhyDYgvGgvwi8b/tjm/4+8EMFlFj9C3sg4TO6KVdL1JkqQ97/eH0/Q0bD0Q
TsdKeCAcWgNbqjfoDbcfDme76/l94aya9tbauBOfKMvowfh8unnv8lD/mvh8
Qj5E/tlS2+0X94LzSfinU1l2KcxNxtX9gi1hzBnb+ig48fr9GDgXJy/jDx8E
p2P+HgCnsYC/fTg+R4ffYU3qnqT61g+G800HHzwIH9ynbAGpe9Nq+7dAH/wB
TuHf/xP0CTZwND00Ow9Y762N4BYMZvv+cGzq3B0D/iXkBlv2xhg+7ux2I3w+
yiyOxmUkcW/l5xvCgbW3/vON4HyUlezhfNz+J8Dn09EZdECf/UAH8vDs5vbX
pM9HbiWicbV+ZF1/Ajj82gYDiGQPg/NNexP/EDi/zLi8OP61xmUftqTiA+jT
9bu/Hb7itwKO/Lx753ev7eDnK51b1IsKEqQpKMg9r2qyQjN8u6bJyhftQ5Iu
2GSTsU34mE400OEXcqe260HaxOyT4kI+5wK/b1294q7Qck6fUllD+kybHNLu
QLHcKiiNQIlco/fz0tQLL8rtxKW7ucBxTWGy6P6VvODS80WZCorI4I5nms7D
a0FsZWJ75mYFKuSkFRRi4RvvAPxM5crEkkwV5HZ0uLcOqEtrmpFvHSZDBPf5
0LflIq+8l31Yh3cL2ZrNvfiKF1EWBV1wYFJD9WzBwSg8Goo1mTrjlXRVQuss
flrUnZFI41EWzdLhPuwYl2NvX3x1jwAiOnh0xIomOmfTw5gtwpSd7ryDi7CD
7pws9sWlPjPbIGt7Gti7IDjM2Ari9ZB8pVZZn+LHWH0LP1GCUxi0uRFDUoi6
Z64P4Binvz/AFqp3AWTOGDL5IhGuiTxPbUZOqxKDi9G1SzH4iut+cObiCZcw
RcXxG6ePRcdlE92HBNbUYG37Ify0tnOqTKXWrpil+mUjluujN6vDlzz0XyR8
ee+Qpc1fCrn43iFLH4kUq0OR0oQi+XaUO+OQIg5ERvlVv+2gXjuOJ6M4ngjq
6EahO0pb9PfRRDlrLvrqRhnaCHQ3qRfYwopD0INjrrlYFTNkcVXZPKKOSbJ1
jOFhNaYclKVopIjQUnM51CbhxvYVxu5WhuPYFR4G1sgasQdUI8OkI0iXxHDC
wFrUOILjYnofgkc+lhcG5JpWW2Txfu7Mt/jRuoDcxuYlW19dIY97gugKedwT
RFfIY2P71j7rDnncDxM7oi44G4ZN7oSzobv6bjgt1bT1MDibhTvuhrOZu/oO
OBtvszYZ1/3xaXlR1oRNVoSx7znvHQNe5wJdM652RPthcJph7YfCaTuXHjpf
zbDeWjhrwkpNPn/YOl2xdu+7Tjt20WtczfRgk/Dm3fhsFp66G84nWe8fukz3
j4VzL3ya0au26bYpPnH0akM3fAecKHq1qRu+Befu6d0En2b3G7uZW/h0RK/u
D6cpLTd367bw6YhePQDOp6MP/hrRq/vD6aDPhuGpTnzCVxuGp+6E8/B1Ef5+
ZTvhPnDaQbFfW582g2IPhdMMij0Mzn31affv09lRn4zO3TGxX4k+D7E3un5d
caIHr69G/Ouh42rGiR7KP59+XCzQf81x/fbk4S8OZ41/pWMNrHjWHTKjHjYP
l90zVLZ6sK0wWRAKWR8na9/saq5Vw/tz2Vl8ZK7G5IiUvPms0sM+HvzDQnTf
PaejnVSHNf7QXc0WVG8Q9B1d8nVpwmkZn/By97lw/MSflG0VrYhq4gRXudjg
xqOoT18BtnqEh9JdGVhzbODRBbq3qYDFK3JbumFvAZztAPlHwrW9uYF3fXjV
PzOPbm/Zm15FpRbcZeEdJXo2KpuHIO0h9vgocLujWtE900gGMytM/kOsHxGQ
Pjqz78ivzEFfc8zlkW/5ILKduqNkj1zlXcFko1cB4TheUcwp7sdHw4xP2RfA
0lj9mEqQ0FQe4Aj34K/nmiMT5I7oKouB32Cnb18eyD/DH2e2vNGB/Et0r9Bf
4eVRMZvRzRTu2uNgz4iMtAEVkYXblGwB+mV5kWqVm7sTuHBLQLd9+juiXOD/
ppdrqCRAPNEtSbjqAQjskuSZOVgNn3NFUpzR0Kf+AwXvfjSlgkGCNGoHc7yH
TkXbcHHHDeRRNSwcYVj1FgOs3slMBw87grnhze1SDWwVGQqH2ZoR1RKmdUad
YeQnDrNc6mVF9WBkpjh8pKmqMcUi8fwiVY6WdBZJC52P5gWWfTVFpenc5E8U
deaQk62uQ63xtC2nCYBUg4czOVhGR8XDO6Eaw2+Tq8dBFnv3ZSXsNU/11N/3
IYMDcI37GbdOX55g5oI9vcuHuEQ6Q/7EgtnNS5PdWED/lYUaTrFYVFGa8h44
AmIOEV0p0ChebQusuuoDQelazFbgO7JNLMqLBw66Gf1UjAMuDGHzNQQgKkVQ
1Ggv6brpAAucHURFiig9IwBGmSKsSF3EGlVxFOxIqMpiUA0bmDEl8Fi62945
lSZ4bRW0I8HHREJQIUaJ2O9ENCyyFoZGraQ4oFBlN8x1RSVM7bjwqgbHcASo
nnbd16CDSjTnWAZXZdKqaCRYSvFuTGHIaYEwJDwDuMiHLERA3B1woc3H8mhR
1aDOuB8/JmMcPXYmSz+tqgXMQzQ6U93g7LCPtL254X/c3m4TTQwMf428uy/e
A6FhwwQWLIOPDrdZKnCxnsrNuewOS1tezpsDSNwAnp8cHbsb7XRYiUfZMsrx
2g7lF9V3tnPx6Hg20FiiF3bdjxqEONdYdYXoK79K9vD/+B4d7L5PqgYYiI6u
WsRA6pcjIzOPDtfR9/Do9bHNpwr1CEPiE7JqONN9zhFyd2XANJxRblJzWc11
SXfYjWziUzDKOkLL2VBuFil9iiRTwJSIvELXq52ssUn+MZUeENBoFN8NYVNu
OAnE1j0K7hlhUCg3MRFlvMjGaZbh0VMUulHI3+QMGJY+fo+bA0zZwYB/lmEH
mKVCa4NqhmhguBEavkBeV3+Kgci3J8/jaQcN0zeB/wA729nJrNWZgWsTY2hi
S5mDsZaILztFTFAZAn2zB1wPxd2pjNf1zrRhWYUUmauUC/qaMmbRkevGrXql
VqMlD76K8xKK61xbMBXqEnPvcZov7HnutAYBa66c4nI9Q645xql1ecEiL1Lg
QINLFHBhUl2EkmEpGKkppkUsY1Qa35gQlRAPr8S5TcSTO2hoYFM/L5maGtkv
NekhlNPTFCkpzqOlsc2BiErNUw1yKpNCWXWsJzFLhEBhUk5dlO5kNN58sAxX
jk8YSuQPeZZekvlqr8bY+tJcatEgVs+eiO+FZFtz3QISHxP6SFEiF9keUMku
gEvymhIha6QI8IyrBxOV83uaoKXOWTbQ3w6R0VRkCmA2zSK6F8HsonhWQ2GK
J76NIsUrFfCiIn+oHQYHRE7km6I9uQypiirvjxalzR4LbAEacchJ0ZB5ptYM
+1nCjONY6aVbjAEZq3SWYgkNrMf/NCpEg8lNVjA7RkLesXPXdQEHby0N86RY
EQWLhJhRE0VBUq2aaJf21TV2TPuiBDlvBLhKhLSwouvgYKF7AzPNsYYKpVzy
mjFsaKeisULbNRoScnAclQCw79KU7LUa/saSm8+i+wGEeAPqypC8MvrU9lVx
USMC1VeTvABpPgxgubvZQ3+AvcTEXEwR3C4wKEZuWzgqQWPZG2MtvFk6mWIB
QQY0XtRUgwpr4c0XOZbwxPpHnLuGabJBMcy3vj4LSX8jVuyq9SwYXDRTtjW1
qoTK1972QuMwRDXJaIBXmBm2haYvSRHhnvE2hbReBBv2It9jhQ5gm6XhgKEO
yk6RPHBgembv10LbX4FauSGzugaDNGBc0UbXTIHinNmK70hkzg3qM0lmDtq3
H0glcJ9Id58ZSmBdC5vh1r7cIkRvoJn0mE438lUEV32OgOmyiylSBkv2aBT0
bLG6ykZkdl+rZS+aHtM2ML2IxijljBwDNPQVyhjyaGIGt74Ww0ylsyqxFXkB
LJc8IhRcxZUARypdhffeAAXqMsUM4Z5Qo/60GOL+d8Eix2CDBiPzIS4dw5ee
bw0/2HT9mcqXlExOKHDlEL5Djy7OgR3lDCtbqVmxIJW233/2BIYJtNzGBlib
qm/rRAoaJPdr05PXXUlirtwBMtDgqLVhLmHbUdWjmalnYm7/GXCdM15vSUdR
XOsIADMEP8S8Tp84nmvrfaoKv1kI6kbZ8poznArrHxWtq5Ia9iqYA/OKgQ40
FgLmQWH/mX7fMxfxiegWIruSXNZyK9Xc59z6AURVwIDBXxTXuLx7plpzhtMN
UzNt3HvkK/7YPVoZsG5PWBWIXpoRWdVYGNo7JSzdBs5n6uSKk0IoPAUzQIcQ
wc2/2W5Zerjbvis9Q900rKw/KSLUsFhkYB+k6J9CnUakpYpgeA6FuF2x4Aex
kfESouqDwPDimhpH7DMAQw/v31aZ17GwJ0jf20RhulfcrCyWwsBLhq16vtie
00OdN+2QQ/S7pn40mfNF6cRwW4WSh6jiNcnOUTbDTDXZPlFozW1afVZOpQ6H
o2srUNHJR5v2o+/enomZmiemYWVKAI5SGAMeDJineOM5tuO1TVsTUG+w8xmk
k0WxMIWRyQ5PxDGaKf62LEU7pB1zLxTsb3rB8RJ85dVnToUHJ4bja+u/9x+Q
0DF3vQNlqSfHd77u1BqiIO+msXNLtPQaexXIAFgDivs7ev78FUsClJhAR2BH
OqHiCEBcYgVLaY6F8Pqg3mzNex7rHt95T7tKeUwriws2NajIbUnGmL0iseHI
+6ZxwmAIwq0qRjMgITkZZ5ZqJlYSsAcrE4GXhvW91nHTR9YzuesreZmDqYQF
GlfSi9nK3icFqwf5rte4qQOf0bIQI83J6SkZg+5Cvqia49bNjfXNPEn22TPz
//CC46+ffM3VxA5zq+XWzaQ7EUVFtX+NC9y+3KdvTT04ulhp5fVt8G374jb+
um8rTTfvblN+B0DRqZW0sCf9KOxgrqlVd9DOX2/J+tjdrjc21f2ruRpqocaA
ndHBaP62LuzrGbcMc0jjIjK8EwwVPZ2CEu3oBJVepwMXJqrE9j9i4gqJ2g0C
Qe45DUPV9CqdjVm98fk6V1o7kS+MErXXkvn7zdDgoPt7ewKJwHt5V5Pbom6r
xs/xXFnDLDbm3yidYHYmzq+/ttAVkebqnzQW4gAvZEJPRIuUwkDlwyn50J4N
BHooMoZIsQNLKjzlaE4OOaODsB+nJTlHqmk0N6yIzB0LgcUSWSVWiHMJYWUk
Ps2jEUVNc6thJ9rJoXJ2CGdAXnIsTKtHYfHCEdExsmtwSfvzNw4Sn63MkUsQ
qrHUjCOuaVwxZ6GVIiLY13jjBZbq9OeUWHTijR+G1yiy/yKt6OiNwGuGj5+f
XLw9O5Cnr44Pz4/l2fHrtz8ey4sXJ+fy/Pjo4uTtG1p4tGOFdVzh4R26jzEs
N7q7jyHJ72FHWplyfrL7biP46pBc2tpWiO7LH+YjU9O8LovRYmhilq8LqlQb
318PvNfnmBxIX7JxOGxl650SmhW6ozZAek84dECsqxR3MxRAvDh9HWnijaDt
IrQTOjea2VOySO2fipLOCv4RiDGnKx+Ng4oZG0xEoBo5qOmOHVuX+eT44nt2
IZj2E2qfcgFNU+KamL8P+9dM2M3UN4DYH1Jdj5OinHybhB3aqWFIvIuMXpJZ
XlChf/KA2D0+IZbSHRLfTOt6Xh3s7FxfX+8ltp8dRAGW/05Gxvm42AEsvgU9
h5etXGlrOJtbhHgvOCbeUPWBCGHGIPuKAexc6wGC3DH+tR1cN++TaT3LoJf/
Buh4QCgftwAA

-->

</rfc>

