<?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.7.1 (Ruby 2.7.0) -->


<!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-04" 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="October" day="23"/>

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

    <abstract>


<?line 114?>

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


<?line 128?>

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

<t><list style="symbols">
  <t>the Entity Attestation Token (EAT) <xref target="I-D.ietf-rats-eat"/>,</t>
  <t>the Trusted Platform Modules (TPMs) <xref target="TPM1.2"/> <xref target="TPM2.0"/>,</t>
  <t>the Android Key Attestation, and</t>
  <t>Apple Key Attestation.</t>
</list></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 specification supports both the background check and passport model, during
TLS Handshake. In background check model the details about the attestation
technology are agnostic to TLS handshake itself. Similarly, in the passport
model, the details about the attestation results encoding and trust
relationships are agnostic to the TLS handshake.</t>

<t>To give the peer information that the handshake signing key is properly secured,
the associated attestation result has to be appraised by the peer. This must be
the case when either of the two remote attestation topologies is used. Hence,
the attestation evidence (to be appraised by the verifier) must contain the
security state of the signing key as well as the overall platform. 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 following terms are used in this document:</t>

<dl newline="true">
  <dt>TLS Identity Key (TIK):</dt>
  <dd>
    <t>A cryptographic key used by one of the peers to authenticate itself during the
TLS handshake.</t>
  </dd>
</dl>

<t>The reader is assumed to be familiar with the vocabulary and concepts defined in
<xref target="RFC9334"/>, and those in <xref target="I-D.bft-rats-kat"/>.</t>

<t>"Remote attestation evidence" is more succintly referred to as "evidence", and
"remote attestation results" is more succintly referred to as "attestation
results" throughout this document. "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 "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="RFC9334"/> 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
remote attestation credentials and nonces to be exchanged. The nonces are used
for guaranteeing freshness of the exchanged evidence when the background check
model is in use.</t>

<t>When either the evidence or the attestation results extension is successfully
negotiated, the content of the corresponding Certificate message contains a
payload that is encoded based on the wrapper defined in
<xref target="I-D.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 assertions relating to the client's TLS
Identity Key (TIK), 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>

</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="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 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-results"><name>TLS Server Authenticating Using Results</name>

<t>In this use case the TLS client, as the relying party, requests attestation
results from the TLS server. Prior to delivering its Certificate message, the
server must contact the verifier (not shown in the diagram) to receive the
attestation results that it will use as credentials.</t>

<figure 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-background-check-model"><name>Evidence Extensions (Background Check Model)</name>

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

<figure title="TLS Extension Structure for Evidence." anchor="_figure-extension-evidence"><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 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 value obtained from the early
exporter mechanism offered by the TLS implementation (<xref section="7.5" sectionFormat="of" target="RFC8446"/>). This Early Exporter Value (EEV) must be obtained immediately
following the ServerHello message, using 'attestation-binder' as the label,
an empty context, and with the key length set to 32 bytes.
<xref target="_figure-early-exporter"/> shows this computation using the notation from
<xref target="RFC8446"/>.</t>
</list></t>

<figure title="Usage of TLS v1.3 early exporter for channel binding." anchor="_figure-early-exporter"><artwork><![CDATA[
TLS-Early-Exporter(label, context_value, key_length) =
       HKDF-Expand-Label(
              Derive-Secret(early_exporter_master_secret, label, ""),
              "exporter", Hash(context_value), key_length)

channel_binder = TLS-Early-Exporter(label = "attestation-binder",
                                    context_value = "", key_length = 32)
]]></artwork></figure>

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

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

</section>
</section>
<section anchor="attestation-results-extensions-passport-model"><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(ClientOrServerExtension) {
               case client:
                 VerifierIdentityType trusted_verifiers<1..2^8-1>;
                 
               case server:
                 VerifierIdentityType selected_verifier;
           }
   } resultsRequestTypeExtension;

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

               case server:
                 VerifierIdentityType selected_verifier;
           }
   } resultsProposalTypeExtension;
]]></artwork></figure>

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

<t>The high-level message exchange in <xref target="_figure-overview"/> shows the
evidence_proposal, evidence_request, results_proposal, and results_request
extensions added to the ClientHello and the EncryptedExtensions messages.</t>

<figure 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 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
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 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="passport-model"><name>Passport Model</name>

<section anchor="client-hello-1"><name>Client Hello</name>

<t>To indicate the support for passing attestation results in TLS following the
passport model, clients include the results_proposal and/or the results_request
extensions in the ClientHello message.</t>

<t>The results_proposal extension in the ClientHello message indicates the verifier
identities from which it can relay attestation results, when requested using a
CertificateRequest message.</t>

<t>The results_request extension in the ClientHello message indicates the verifier
identities from which the client expects the server to provide attestation
results in a subsequent Certificate payload.</t>

<t>The results_proposal and results_request extensions sent in the ClientHello each
carry a list of supported verifier identities, sorted by preference.  When the
client supports only one verifier, it is a list containing a single element.</t>

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

<t>The client MUST 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 MUST 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 certificate_request message.  If the server
wants to request evidence from the client, it MUST 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 MUST be selected from
one of the values provided in the results_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
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 MUST 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 MUST contain a single value selected from the
results_request extension in the ClientHello.</t>

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

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

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

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

<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" stroke-linecap="round">
<path d="M 8,48 L 8,80" fill="none" stroke="black"/>
<path d="M 8,272 L 8,1088" fill="none" stroke="black"/>
<path d="M 32,80 L 32,272" fill="none" stroke="black"/>
<path d="M 32,304 L 32,1104" fill="none" stroke="black"/>
<path d="M 96,48 L 96,80" fill="none" stroke="black"/>
<path d="M 136,288 L 136,304" fill="none" stroke="black"/>
<path d="M 168,48 L 168,80" fill="none" stroke="black"/>
<path d="M 200,80 L 200,1152" fill="none" stroke="black"/>
<path d="M 240,48 L 240,80" fill="none" stroke="black"/>
<path d="M 280,368 L 280,376" fill="none" stroke="black"/>
<path d="M 368,32 L 368,80" fill="none" stroke="black"/>
<path d="M 400,80 L 400,1152" fill="none" stroke="black"/>
<path d="M 448,40 L 448,72" fill="none" stroke="black"/>
<path d="M 528,80 L 528,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" stroke-linecap="round">
<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 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' anchor="sec-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.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>Linaro</organization>
      </author>
      <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
      <date day="6" month="October" 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 mandatory
   members, one for the type, another for the value, and a third
   optional member complementing the type field that says which kind of
   conceptual message(s) are carried in the value.  The other format
   wraps the value in a CBOR byte string and prepends a CBOR tag to
   convey the type information.

   This document also defines a corresponding CBOR tag, as well as JSON
   Web Tokens (JWT) and CBOR Web Tokens (CWT) claims.  These allow
   embedding the wrapped conceptual messages into CBOR-based protocols
   and web tokens, respectively.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ftbs-rats-msg-wrap-04"/>
   
</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">
         </author>
      <date day="10" month="July" year="2023"/>
      <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-01"/>
   
</reference>

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




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<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>Qualcomm Technologies Inc.</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="14" month="October" year="2023"/>
      <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-22"/>
   
</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="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="24" month="July" year="2023"/>
      <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-01"/>
   
</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="30" month="August" year="2023"/>
      <abstract>
	 <t>   This document defines reusable Attestation Result information
   elements.  When these elements are offered to Relying Parties as
   Evidence, different aspects of Attester trustworthiness can be
   evaluated.  Additionally, where the Relying Party is interfacing with
   a heterogeneous mix of Attesting Environment and Verifier types,
   consistent policies can be applied to subsequent information exchange
   between each Attester and the Relying Party.

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




    </references>


<?line 1094?>

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

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

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

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

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

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

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

<figure 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:
H4sIAAAAAAAAA+19a3PjxrXg9/4VvZqqa8omqZHmEVuxvZE1moyu57WS7CSV
SlQg2RRxBQJcAJRG1mh/S35LftmeRz+BJkVy5DvZrOWpsgSgu0+fPn3efbrX
64k6rTO1L3+q0vxCHtS1quqkTotcprk8K5O8mhVlLV8nN6qUp2o4L9P6RnbO
Xp9uyyQfyRdJnVyUyXTJty/wY5EMBqW62m8N8fp0Bz8Qo2KYJ1OAZFQm47o3
LqoKPurVWdVLXJPe46dimNTqoihv9mVVj4RIZ+W+rMt5Ve89fvzN4z2RlCrZ
t+OL66K8vCiL+WwfBxOX6gaejPblX6XXb1eeHJyddvEL+Tch4Gk+Ok+yIgeA
blQlZum+kLIcD9Woqm8y/VTKuhh6v6b5SOW1eVABMko1ruzfN9Pgz7pMh/bj
YTGdQlv7Ns2zNHfDqA91L0urugedDIoMPusVX34FbwBt02Q2g8Xjb8WVyucK
gb1I68l8AE+TssjHO4zWBjqFSOb1pCjh+x40oZ80h95f9eVZNZwUY5WnF+YN
r8+rJM9VFXmtpkma7csJve/X9v0fLqYf+rmqRXOQv/Tl6USNx6oMR/gLQtx8
VZQXSZ7+QmDvy+O8nqd1Y2SeaT9V9RjGhEd9wGpr1Pd9+aq4TspROOj7ZJ41
XoRDHpRT+TqdprUaNcbFpn1u+oeknEZHPe7LN+kkyYYqCcc9LvJ53Xq36tDU
um9aLxwdMP1CVZMZULVq4Lq4gBftt6sCwO37tr0DIS/KKTS/ImI8eXm4t7v7
jf7166dPn+Ovx70X/XE9qHplUle9aXXRuy6TmXkzAHqlF5cJbBPzm0jzcaPn
b548eao/SMrhRDdHMuD2CtrDw7P3b3b7e/s0gTopLxT0OqnrWbW/s0P8Q40A
8Nm8hs1EDKMPSNgpVVXMy6HaqWfTHsw571UzNUzH6ZBws8PdMROFEeQb+ESe
+p/I1+pKZXJP/qzKCv8GKIDfqKuU/9p9Tn3YnUg/dv1wJaBnhk8eGgDlHxFC
+mgE/HAfxoWpy73Hu7s81b3+40+aapYOyqS8WTZbDdP7LKlxSeSbYjTPFBAK
tQyR0JUvk2ma3cgtAGyrq3Hy+LGHiMe7/WffPAQq3hZXajoAGQTYwA6BqfeO
gIGeqAtgoSg4jg/eHvSRFwJfVTmOXt/MVO8qyebEb7HF+wTEWqzNDF+oGhZT
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
K6X0GaIAtl+BGW3Gih6AES0CyM6RNCM7z4ZGtJ7QMcLEdkYrF0NcQ8+Uxiby
B+Y0T3deiM+YOb5GexvrS5HNGlBQOLmfsUCVLHVNKgTYH+YqKdMkr+38OM1k
fBOnJW+23nurUHaegyFnv+g8f/bsybPt9qzZeGnKCI+VrCgjkHU2S8n8SnLi
oHHE8PaWuHpPo69CjY382o0096nCpPm0mtJZUwWfilmZYmESPOYCyi0y4Jsg
mSeKeC9bG0+sCr1r4kU/+DCzbavP44eHhukgwABdGH4U2FUL4PwvPN3MJ2oQ
rGR4WdGBouCUBtVuzOQPWMiyxCBwA1H6sHcPUcFlJJCy1bgwZ6HtmbsgfXw4
UVMl7NFuOjrBKfncH+c880lAnLatLICnpvRZSbvSxViYppxihZUTQkmGVdr4
vRNkPo0PeZ7nuo/vaLf+B6c17cvdbfnd9xLLWMl+lf6iZOfrfv/50236Jr08
n80H50BpF3hmNcVyn3utBrvPXYtwsH35ZOHXd6195CZittFLPtUFCKJAi14w
/ob2S0++5cR8VjKopJ2hN2PWmExBU16hUb6lRxhPzRk6PADlzVdGcLBNqW54
jHCi1w6mfsqSWLIopiNxJMBtiCdTyTgibk31GnaVQUf4rXeoncELpy4baNYA
8eztaSo7ssLiH9Cz+kBGeunt7YJO3drKE4jlFPMLqZ4SkXPn9tacHvpd/xnS
oy1qeXe3rXfsEY4AbFL3z4y7c3T087bdwxasdEoeo1oRTF6dARjfj4BYhZBZ
5hd+XVye9hdGt8wSUAaQfaOWMJ3hcT7mMmyM2rOOuLZICvBnpYgFPdmDqUO/
WG7IbijCV89gC3Y+ao8Vc0nOYWTUuANvsM+18Q04p65ali6VZaSODZo6DLaB
9ZyWr0vhGwYSto4RSa9+fPESG8J0eq+xWaeheb1QJTCGHixVqeoOzeDczOB8
mmAKzHlFL7saXXJryxN5/LNlmmx15Ssg704A23YAnBAtxrJojvBqq718W83R
4z8BCNjTlg8GPHiyt9321wRLaNjJT8aeQTq/2u0/4a3hNgbJNW+rwfoSmznw
N7vZhIay+VCXU21iYhCjuvB7MafUJeyMChdFejMnnpulAZriSJ9iJbhsHFOa
s9ipPqGnQXLS0Qxj5BdKylJogMwh5bTURykdfHTiMRZ68KML781xNRNVMEbV
IrXaRKjPDfttKp138mf9iTnk/Bn8xzEQzJHUc3skdakDeT3nZ3RA6wQ1I8bc
mjo2+lk9w+uj678ZO2v7fG0mxP0u38gW0fE4LzcFhZKO69kzwfIHNUmuMPPj
9tFA/6oNgkl6MellVEK4eaQ1UAQLXSTEk1jKhr1snla3lefcbeVydfVJ8jC3
wq97MRq5QwJ+5QyTZrnkKGYVelsMUlb/8RND5IK8EC/3g9osTvywr2fV5Tk2
M7g9p7PQ/gfQkvoc4XfeixaOY+80Fr1XTazrV1ftHAf9xkWh18BWgDReJPm5
cktaOMTcklUbx/NIYC5y3SyS2IqtdaQutq7rdtBa/fU6iBDJOh1EMlW+vEPa
2zCTxu8PO/r76h20EzOwA51/siYY1J9L5bifulxSiYzllNA3f2/MbnFGyZd3
Zgv7QPg/rS0cSSIJAPs+9klLVhnWb0SUL4aM/8nUkDLRyHguCL56ZHgyM1Us
2GiCAhx69OoptSokcyWmhmG3oExFV2sRlVGiA4eXSy0WIFZ2irBYkc3/8sRS
u5STVpPbXa5S/8mFQsKaLOzR9JL+0fzG8oCesys4QNcV+oCgLgCkTcdEtneh
V1XlbOlsHwLuxilKd4JSmGlgPRzp1VCJRJEXohh1gWWrVXGxAdGcBZX1IPci
jI3eciogZFIMGtPpioofD7CqutJFxPpSuiCXLvdgCrhSgA5rbpiOqApaF1Nc
yY1CI+pgOK8SLhasrmK/iJ6v7pbKzBXTtG6i2blf2uS8dBHTMYIyBCu0QBcm
lc6iqn6GfoTtun3klYopwChNPFG2FPQsQqrFIUxBBlbo5pUpFhXrRgrrTGFH
pElalsdjH9lcGrSJErR9sfRzdNY+KqNoW4q1jRelpdwuXhKNL7vTgfMxczPb
zRQo0qyaEEYLZ4ySFp7ISyyoV7DK2jVU2HdVqgsuy+1hVF8ugDV7OkkrvIIl
AIMKgFTnJ9gPhCPRRneb0bgSVAG+UU4YK4blhJ6bpkpXZDvAJaWT23TCqIni
jb2E8bsl65rJlUrJYl5jlTKup4d13VJYL6pOpOu/EnDWPW9kGY3geFOAz5TU
IVeZTJqzAK4ijp0zIJunFTOBsBtcUVNiefGAbrQm5JaPrdhBVw7mdJw59erN
0ml0LJTVDP1TuRdT58VRC/pHEYg8mG1NVWNdRpKuoEdtEzkGTQWEQKYoxIEd
0Bhb87ydLrb1ydOkAlIwBnIeILBMJSg3crXyDHFVCchwYd0+kyWVSXdeOY5A
0x0EBdfH2kzbeGAtwwp1p2ZEwtcuCVezJHOM5BqjgnwuRDOCVik6c+LF8GxP
eVu6mReXaeI4woaNefc7LF7T/ScWao4hhXh0mpiHTNR1xAJdx2HrzMaZbH6C
zkFZBr0OsGgcE9YGzmvFqHV1wATfzeQiWXryy0bQ2hRnw3iMOthVNDAldJMc
jlKGcBpoyNAdz1zY1mqgwLNznI9oBrGZqp02pxHj1QVz0nQFvLa307aE5eYb
LTRJ9xbqjk4orqBt+B4Us4AFR+42UtZdnhUSrCvF62D0FPXE29cN1Y9ljlim
qVvq/ZNhei1Q2/ON7LSA+4fpqCLks2F6VrR4JRFssC/6ARYtw75HPaG1MDVT
hdXWeY+GO+yenrB9TM+RYWBjUxM5drguZi2LZv3MmJHcOn7raUpLHLdLih2b
sqiNftczODkMb2rX6bBOajRvXeWG6dlmZywoA96ylsW91nLzaNjDw+7tST7h
0rScbWnCyHHP1Y3p2Oounl3lM/+WKS0Wm9L2hKibbFfeY0+Lhfa0u+PpU03p
CFxuAy+l0JYz4V5rWi62pqPHYelzz8x2s2YLe5mBLYhdI9l7E3EAtPqUC6xt
rbGFxnYMaWsY3GKtnf9JKxfbngsWLuqjoGBinJ3iTSBIu6JKUq9ecD9md69u
douGJdA4cmFGX90Q990wodtjMY5+ZTO8XcQjaoUvhG+hES4eygiPWOBosK1r
hC+wwMnE/1WNcN8CZ1NVG+Ht8tZLzNSmFU426xqGeMQKt+M+jBke2OAIHgqH
5hzvscQXm+HY4cqW+HrazKaaQMQwX3DDpTNKzJUBmxnrZu0/zVhftuXvs9Xv
R62431Qny8eRxGIbXSzDK5eJX8X8cca7aBjvy6azgu0uvBreC2z3JQM8mOku
H9J0N66IiES3isr91vsKNBY33jXovRZzdFb7CirL/Ub7WjbDAsqtfHWMAKbq
oqSNlNUidWEc1LZ2xrm4F6S1THPDv+yVZ067nBRGY8LnMRgXH7NaZsfzPmsQ
zo3pZPH0AlP+Pkv+fjQ1FCUv4t3zIt7yiGuqVmTqH1Jt80O/bqm9DdoVAdJl
WLt8bNZ96ldUVR/UcF7ztTVe2jDsAHPbdSUnRcU3FtLtNDiyqT6v2UdJTEDf
8GbuPxLVUOVJmRZEQnwNYpevdxne9Mh4KakO7RTwk+oLThwEXeHuIQD5kfZA
CGNmdDLHTE9KTB2V8wssrg5ydTbV3GmikqyeAEGorikzJPDya0ocxbN90HqK
tz6mUzQjVT3ku3fosk4DsaZTLBgL+rLqX/S1fCcgZ7bKBT6jcxJpDmCbrSL8
WTDnAdIHxcNez6hL20YvafZGEm4kNuWAyGu8Ce7Na33XgrvsTvm429aFfK8L
eVEAN+Z7efXRIwO4pQL4g2/ptFdZYRle2OZ4n+qbhO4crah4vimYaw/ToF5k
9QzboaYpJgfQhMxlrkf0HOd6lF+lZZHTonXOjo62nXplS3KYW7PweBB7sXPO
SyxLTHybagHs3/+iwePbL8NrUYARoKXM+z+ZKiIA14TJ06ZV48aAdRnwRYWa
B9tLGLGccdcv4JHxlahpflVkV7isw7pAEUDK4awmi5COQJmzWMOe3pt3d97V
Bu3CkFSyuMMCiiw/oS+tCMtAu+tKhkUvK1iyWYwCfnu8hUWcDXQcX1Xltp4t
1WwGHKBa3dB9zd0LTJhBNDlU6kVTLBrlxjBd3wgCOhuFruW0FrTZ6UZcvqEs
0Xdc0MKZU7b28GDgezYTCp0AekYGcy7n3M5RI3NwQ2ZFZvaL72bp0U1XCi/S
LYGWajKG2MXRPtgShNWFN4Lnm7JqmTnq0gwBmMpmaojSsDY3ueOFVXg5ZBiL
ZjuEFR+kyUuz5ZE0Mnnw/hiVVSOQGkJVLxGvjA/JgNaH6Nw7huRSLVy5bPOa
L8fx74INlEVBGhLmu3K33uk4PG4EVtOsdsvSMbc/bQfjd4W7qrupHnjH+y5U
PfE9VTbLlu6eNc4TE0b2CSa4bnzR4cFAYbEnbsRMH6fA0xuOnZhN0tXEsuwS
ckF5aHQHD01A+yyHeAkoWXN4oSpfkYKnS+tKrzFfDsWWWFUg/QhNFLyPNLBN
xDu0uGNDwdV4YsYnx/CQUoeuBTc6hmvwvnjPN3QxjeKNaDaJKXbVmeE4UeQG
3EXfYuTxtuC1PobYvgPMTctYaMQIW7c5a48qMsrgBlinG1Z8qNOsuWWhtOua
G4Bp0/Ye/5ju3EQ2Ca/ryQ3vED6/CTJmXPM+8W/MrvDoX5Lh/eBBUV8MV7DT
MRitYH2WDzyTvDLRzoAkA/nnB++JGfBxm1B+eJXy6bJrNLp01nySVFcX66XF
9nsLfvrCe9Vvfd5v9PPR+Bmx4J6fYfpRfLSnMqhmvv5ch8g+tvrxfjvV+i79
Kb7o9b7So39hPoJn/PCLRj/2hffDH4pglOjQ97z4qLt4/w4skp1cXZ9q8btu
F9/22j9frQnF3uNdvFOO5OKGE3ld8E7elzu/e/71k28Ovlm7ix+K0c2+vF32
5X1dSNYxup/UBQr3Hp0h7XHMfN0u7u7/cnkXTaKjPO31J/IpUPRD0u8v+nJJ
Fx8batrHBV8u6eKrxgb8qvH/NuVH/u4DJIvw4ftelkFiZrQQr7f9fr+97uv3
08we6GzYT2QnbNgP7YFO0h10h9ub97Mde75uP4uWvbU37oUnOK20MTwPt+4x
V/bnhOcB6RDpp5Nst1+s1c+D0E9UWMYE5irzir9gTRjPnnU+qZ9w/35KP2fH
P4YfbtRPZP026Kexgb/fHJ7Dgx/w/ueufH9wtr35vL6N0MFG8KCdgldjdyfV
9r8CfvAHYPL//u/Aj2fA0fLQ6myw31uGYAcms71+P+aU3D0T/jX4Bmv2Whk+
ig67EjyfpBYH89KcuLvw8xX7gb23/POV+vkkLdn182n2jwfPw+EZZIA+0r8v
D05u7z4nfj7RlAjm1foh7foB+uHXJhhAKNusn2/bRvwm/fw683Ls+HPNyzxs
ccUN8BP7WV8PX/CzoB/5RdzyW8sc/GKhc4tGSbyz0BQg5JEXNVkgGb5f0mTh
i3bhPxtsMueudSiZKiNQfQ5yp2q3WVJpr5kuXvbokTwuzuQLvsP6nb2SOxZm
zulTuqeTPlM6iTUeNJYdvkEmEblC7+elRC8iluzf7tvkKhtErilMhnExDi9n
N5hOinHRtChTQREZtHgm6UwOoD+lz0zoy7dNyY8FoJCTVlCIpVTTAut+yWmS
JzqWpC/6bkeKu8s6tXlPU/Ktw2II6wzWYJXzvHJe9iEla1Tsy7bXknd17iyW
RIJJibIA+EZdk3WqpnMORmFZKLxzIBqvxK/b9WXToo5GIrVHWTTvp3NhRxdy
9KKTplrdegFEdPCogBR1dM4c9mKy8BN54jkIZ/4A8XNW7ItLXWK4BtaMpAMy
JszYCuJ1EX2lSrIexY/xdgnKtBaczgAwckMKUZsCNRzjTG05SQ2jCyDXlHCn
M0cCWPvyNDWnbFrVhW2Mbknei7dWSEVeEt50XmPd3LCiprhKE9kIosRPMSy5
VLjth3DLGiv1Q/OJxSyTXzdiuTx6szh8yVP/VcKXa4cszZkkn4rXDlm6SKRY
HIqUOhRpbtq6Jw4pwkDkmT+5f+2gXjuOJ4M4nvAuhg5Cd5TPCOIBc4DH8yxI
drPRVztLX0fIkhv+hhm2MOwQTwR0OX+qmCKJJ5XJKYoskrmYGx5WY8pBuRGN
FBHaajYRWyfcmLH82N3CcBy7wv3AGmkjpj5WoJhEgnT9sB8/sBY0DvqxMb2P
3iMXy/MDck2tLdB4v7DqW/hoWUBuZfWSta9YyGPNLmIhjzW7iIU8VtZvzbN4
yGM9SMyMYv2sGDa5t58V3dX399MSTZ3N+lkt3HF/P6u5q+/pZ2Uza5V5rQ9P
y4uyJGyyIIy95rpHJrzMBbpkXu2I9mb9NMPam/bTdi5tul7NsN7SfpaElZp0
vtk+XbB3192nESt6iauZHqwS3rwfntXCU/f38yD7/WNMdf/UftaCpxm9aqtu
q8ITRq9WdMNH+gmiV6u64Vv93L+8q8DTHH5lN3MLnkj0av1+mtxydbduC55I
9GqDfh4OP/jTiF6t308EPyuGp6Lw+K9WDE/d28/m+8L/+cx6wjr9tINin1ue
NoNim/bTDIpt1s+68jT+83B61IPhOR4T+0z42UTfiP3E4kQb769G/GvTeTXj
RJvSz8PPixn655zXvx4//NX7WeJfieyBBc/iITMaYfVw2ZqhssWTbYXJvFDI
8jiZKY/fiJMJLHChncWHYCJhSIIjUvL2UaWGPTwEiLXyf3hBxzzpbrHwQwq2
BXX74RF9h77W6lKH0zI+4SXHxbyUYC3rAIo7Y9sqnR9zujfOpcbK69voB14m
ICLXnlVbeJjd3n2mzxVsnaH/m0plvCa/psVLB/rZdh1Bc9v29pbuZflQ9070
o7s7drdXQUmHxFxr1T6JvlpZf3e6vnluuFKiMVCdXCpd0kQvG6/PAVap8NYm
KNRn18fcdaTPwWy5lltifbRxyXM6a+bQJhht9MpDHAc0ihkFBvnsmHY6uxJe
gDWYOx8NpcXcxznuwl8vFAcvyGMRq4OJ3+Cw737cl3+BP05MAaZ9+dczv87G
3+DlYTHFXxvj7C0bxx5Y33AgvUq+/Yo0u8KC4W5qL1qro43WzyN7sZTs6S5Q
fTcxV6NpIE6GqPN88fRyCZYEsEqJVc6RA0EnYLHJE33gGz7ni7+QeHz/Pl9I
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
K+EAAA==

-->

</rfc>

