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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        /* variant used to identify attestation evidence */
        attestation_evidence(60),
        (65535)
    } ExtensionType;
]]></artwork>
        </figure>
        <t>The encoding of the evidence structure is defined in <xref target="I-D.ietf-rats-msg-wrap"/>.</t>
        <t>In this use-case the nonce negotiated by the two peers is not used directly as
an input to the attestation evidence generation mechanism. Instead, it is used
in the derivation steps for a channel binder.</t>
        <section anchor="channel-binding">
          <name>Channel binding</name>
          <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. A channel binder value plays this role,
allowing a TLS handshake and a remote attestation session to be linked together
in a way that is verifiable by the relying party.</t>
          <t>Creation of the channel binder relies on a new TLS exporter, the Handshake
Exporter. The Handshake Exporter, in turn, uses a new secret value
(handshake_exporter_secret) derived as part of the key schedule.
handshake_exporter_secret is derived from Handshake Secret using Derive-Secret,
with "h exp master" as the label and a handshake context stretching from
ClientHello to ServerHello. This derivation step is shown in
<xref target="_figure-handshake-exporter-secret"/>.</t>
          <figure anchor="_figure-handshake-exporter-secret">
            <name>Derivation of the Handshake Exporter Secret for use in the associated exporter.</name>
            <artwork><![CDATA[
                  [...]
                    |
                    v
     (EC)DHE --> HKDF-Extract = Handshake Secret
                    |
                  [...]
                    |
                    +-----> Derive-Secret(., "h exp master",
                    |                     ClientHello...ServerHello)
                    |              = handshake_exporter_secret
                    v
               Derive-Secret(., "derived", "")
                    |
                    v
                  [...]
]]></artwork>
          </figure>
          <t>The Handshake Secret is used to generate the TLS Handshake Exporter value as
defined in <xref target="_figure-handshake-exporter"/>. This exporter becomes available after
the ServerHello message, and must be offered by implementation as a separate API
(i.e., TLS-Handshake-Exporter) to the TLS-Exporter and TLS-Early-Exporter.</t>
          <figure anchor="_figure-handshake-exporter">
            <name>Definition of the TLS Handshake Exporter.</name>
            <artwork><![CDATA[
TLS-Handshake-Exporter(label, context_value, key_length) =
       HKDF-Expand-Label(
              Derive-Secret(handshake_exporter_secret, label, ""),
              "exporter", Hash(context_value), key_length)
]]></artwork>
          </figure>
          <t>Using this new exporter, the channel binder is then defined as a call to
TLS-Handshake-Exporter with "attestation-binder" as the label, and the nonce
negotiated between attester and relying party as context. This is shown in
<xref target="_figure-channel-binder"/>, where nonce-seed is the negotiated nonce.</t>
          <figure anchor="_figure-channel-binder">
            <name>Usage of TLS Handshake Exporter for channel binding.</name>
            <artwork><![CDATA[
channel_binder = TLS-Handshake-Exporter("attestation-binder", nonce-seed, nonce-size)
      = HKDF-Expand-Label(Derive-Secret(handshake_exporter_secret, "attestation-binder", ""),
                      "exporter", Hash(nonce-seed), nonce-size)
]]></artwork>
          </figure>
          <t>channel_binder must be computed by both peers: the attester must use it as a
challenge value when generating attestation evidence; the relying party must
verify its correct inclusion in the evidence it received during the handshake.
Both parties must adjust the size of channel_binder to the length advertised by
the attester.</t>
        </section>
      </section>
    </section>
    <section anchor="attestation-results-extensions">
      <name>Attestation Results Extensions (Passport Model)</name>
      <figure anchor="_figure-extension-results">
        <name>TLS Extension Structure for Attestation Results.</name>
        <artwork><![CDATA[
    struct {
        opaque verifier_identity<0..2^16-1>;
    } VerifierIdentityType;
      
    struct {
        select(Handshake.msg_type) {
            case client_hello:
                VerifierIdentityType trusted_verifiers<1..2^8-1>;
                 
            case server_hello:
                VerifierIdentityType selected_verifier;
        }
    } resultsRequestTypeExtension;

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

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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-06"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6960">
          <front>
            <title>X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP</title>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="M. Myers" initials="M." surname="Myers"/>
            <author fullname="R. Ankney" initials="R." surname="Ankney"/>
            <author fullname="A. Malpani" initials="A." surname="Malpani"/>
            <author fullname="S. Galperin" initials="S." surname="Galperin"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document specifies a protocol useful in determining the current status of a digital certificate without requiring Certificate Revocation Lists (CRLs). Additional mechanisms addressing PKIX operational requirements are specified in separate documents. This document obsoletes RFCs 2560 and 6277. It also updates RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6960"/>
          <seriesInfo name="DOI" value="10.17487/RFC6960"/>
        </reference>
        <reference anchor="I-D.bft-rats-kat">
          <front>
            <title>An EAT-based Key Attestation Token</title>
            <author fullname="Mathias Brossard" initials="M." surname="Brossard">
              <organization>arm</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <date day="4" month="March" year="2024"/>
            <abstract>
              <t>   This document defines an evidence format for key attestation based on
   the Entity Attestation Token (EAT).

Discussion Venues

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

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

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

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

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-daa-05"/>
        </reference>
        <reference anchor="I-D.ietf-oauth-selective-disclosure-jwt">
          <front>
            <title>Selective Disclosure for JWTs (SD-JWT)</title>
            <author fullname="Daniel Fett" initials="D." surname="Fett">
              <organization>Authlete</organization>
            </author>
            <author fullname="Kristina Yasuda" initials="K." surname="Yasuda">
              <organization>Keio University</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   This specification defines a mechanism for selective disclosure of
   individual elements of a JSON object used as the payload of a JSON
   Web Signature (JWS) structure.  It encompasses various applications,
   including but not limited to the selective disclosure of JSON Web
   Token (JWT) claims.

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

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

<section anchor="usage-variants">
      <name>Design Rationale: X.509 and Attestation Usage Variants</name>
      <t>The inclusion of attestation results and evidence as part of the TLS
handshake offers the relying party information about the state of the
system and its cryptographic keys, but lacks the means to specify a stable
endpoint identifier. While it is possible to solve this problem by
including an identifier as part of the attestation result, some use cases
require the use of a public key infrastructure (PKI). It is therefore
important to consider the possible approaches for conveying X.509
certificates and attestation within a single handshake.</t>
      <t>In general, the following combinations of X.509 and attestation usage are
possible:</t>
      <ol spacing="normal" type="1"><li>
          <t>X.509 certificates only: In this case no attestation is exchanged in the
 TLS handshake. Authentication relies on PKI alone, i.e. TLS with X.509
 certificates.</t>
        </li>
        <li>
          <t>X.509 certificates containing attestation extension: The X.509
 certificates in the Certificate message carry attestation as part of
 the X.509 certificate extensions. Several proposals exist that enable
 this functionality:
          </t>
          <ul spacing="normal">
            <li>
              <t>Custom X.509 extension:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Attester-issued certificates (e.g., RA-TLS <xref target="RA-TLS"/>): The
attester acts as a certification authority (CA) and includes the
attestation evidence within an X.509 extension.</t>
                </li>
                <li>
                  <t>DICE defines extensions that include attestation information in
the "Embedded CA" certificates (See Section 8.1.1.1 of <xref target="DICE-Layering"/>).</t>
                </li>
                <li>
                  <t>Third party CA-issued certificates (e.g., ACME Device Attestation
<xref target="I-D.acme-device-attest"/>): Remote attestation is performed between
the third party CA and the attester prior to certificate issuance,
after which the CA adds an extension indicating that the certificate
key has fulfilled some verification policy.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Explicit signalling via existing methods, e.g. using a policy OID in
the end-entity certificate.</t>
            </li>
            <li>
              <t>Implicit signalling, e.g. via the issuer name.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>X.509 certificates alongside a PAT: This use case assumes that a keypair
 with a corresponding certificate already exists and that the owner
 wishes to continue using it. As a consequence, there is no
 cryptographic linkage between the certificate and the PAT. This
 approach is described in <xref target="pkix-attest"/>.</t>
        </li>
        <li>
          <t>X.509 certificates alongside the PAT and KAT: The addition of key
 attestation implies that the TLS identity key must have been generated
 and stored securely by the attested platform. Unlike in variant (3),
 the certificate, the KAT, and the PAT must be cryptographically linked.
 This variant is currently not addressed in this document.</t>
        </li>
        <li>
          <t>Combined PAT/KAT: With this variant the attestation token carries
 information pertaining to both platform and key. No X.509 certificate
 is transmitted during the handshake. This approach is currently not
 addressed in this document.</t>
        </li>
        <li>
          <t>PAT alongside KAT: This variant is similar to (5) with the exception
 that the key and the platform attestations are stored in separate
 tokens, cryptographically linked together. This approach is covered by
 this document in <xref target="attest-only"/>. A possible instantiation of the KAT
 is described in <xref target="I-D.bft-rats-kat"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="history">
      <name>History</name>
      <t>RFC EDITOR: PLEASE REMOVE THIS SECTION</t>
      <section anchor="draft-fossati-tls-attestation-02">
        <name>draft-fossati-tls-attestation-02</name>
        <ul spacing="normal">
          <li>
            <t>Focus on the background check model</t>
          </li>
          <li>
            <t>Added examples</t>
          </li>
          <li>
            <t>Updated introduction</t>
          </li>
          <li>
            <t>Moved attestation format-specific content to related drafts.</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-fossati-tls-attestation-01">
        <name>draft-fossati-tls-attestation-01</name>
        <ul spacing="normal">
          <li>
            <t>Added details about TPM attestation</t>
          </li>
        </ul>
      </section>
      <section anchor="draft-fossati-tls-attestation-00">
        <name>draft-fossati-tls-attestation-00</name>
        <ul spacing="normal">
          <li>
            <t>Initial version</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="working-group-information">
      <name>Working Group Information</name>
      <t>The discussion list for the IETF TLS working group is located at the e-mail
address <eref target="mailto:tls@ietf.org">tls@ietf.org</eref>. Information on the group and information on how to
subscribe to the list is at <eref target="https://www1.ietf.org/mailman/listinfo/tls">https://www1.ietf.org/mailman/listinfo/tls</eref></t>
      <t>Archives of the list can be found at:
<eref target="https://www.ietf.org/mail-archive/web/tls/current/index.html">https://www.ietf.org/mail-archive/web/tls/current/index.html</eref></t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963rbxrXo/3mKOcqPUAkBWc6liZpkV5HkWrFlq5KSNF+/
VBskhyIqEOAGQMms7PMsfZY+2VmXuQIgRcpK090TNV8tAZg1M2vWrPusiaJI
1GmdqT35fZXmV3K/rlVVJ3Va5DLN5UWZ5NWsKGv5MlmoUp6r4bxM64XsXbw8
35ZJPpKHSZ1clcl0xbeH+LFIBoNS3ey1unh5voMfiFExzJMpjGRUJuM6GhdV
BR9FdVZFiWsSPfmdGCa1uirKxZ6s6pEQ6azck3U5r+qnT558+eSpSEqV7Nn+
xW1RXl+VxXy2h52Ja7WAJ6M9+Rfpwe3Ls/2L8z5+IX8WAp7mo8skK3IY0EJV
YpbuCSnL8VCNqnqR6adS1sXQ+zXNRyqvzYMKkFGqcWX/XkyDP+syHdqPh8V0
Cm3t2zTP0tx1o97UUZZWdQRABkUGn0XFRx/DG0DbNJnNYPH4W3Gj8rnCwV6l
9WQ+gKdJWeTjHUZrA51CJPN6UpTwfQRN6CfNAfrzWF5Uw0kxVnl6Zd7w+jxP
8lxVHa/VNEmzPTmh93Ft3//havomzlUtmp38FMvziRqPVRn28BOOuPmqKK+S
PP07DXtPHuf1PK0bPfNM41TVY+gTHsWA1Vavp7F8Xtwm5Sjs9DSZZ40XYZf7
5VS+TKdprUaNfrFpzE3/kJTTzl6PY3mSTpJsqJKw3+Min9etd+t2Ta1j03pp
74DpQ1VNZkDVqoHr4gpetN+uOwBuH9v2S4ewH8tXqZqmYff7ZV2Ez8OOn8+T
W5U2+kygUZxjoz9M6H1nhxexfMZMJOzyYlJMk6r5Luz2ZZoDLTW6ralhrDnT
HzL6JoaGQuRFOYVnN7Txzp4dPN3d/VL/+sWnn34ObbNq9xN4cBwdEn1GZVJX
0bS6im7LBDjTcHor0nzcAPP5l58/2ZPFsJrppgPYwtTyOgHOYX7jj7/85JNP
9bOkHE5anSnbRFGT8O0oSfRb+M1/WyCHiCqVqSGOLBql1TArqnmpor/dAsRq
hP+24CXlp1VqhwO/+1/USs1okEBQwxpAAYLMI/ju4vRkN366R+ivk/JKQTeT
up5Vezs7xOjVCBZ8Nq+B6xFnx0XYKVVVzMuh2qln0whWLI+qmRqm43RIi7rD
4FjaQQ/yBD6R5/4n8qW6UZl8Kn9QZYV/wyhAMKiblP/a/ZxgWJZJP5bokIQA
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
CHJHc44d0FLUm3hSTzPo5f8BvepDU/frAAA=

-->

</rfc>
