<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 2.5.1) -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-reference-interaction-models-13" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="REIM">Reference Interaction Models for Remote Attestation Procedures</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-reference-interaction-models-13"/>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="M." surname="Eckel" fullname="Michael Eckel">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>michael.eckel@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="W." surname="Pan" fullname="Wei Pan">
      <organization>Huawei Technologies</organization>
      <address>
        <email>william.panwei@huawei.com</email>
      </address>
    </author>
    <author initials="E." surname="Voit" fullname="Eric Voit">
      <organization abbrev="Cisco">Cisco Systems</organization>
      <address>
        <email>evoit@cisco.com</email>
      </address>
    </author>
    <date year="2025" month="February" day="26"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 126?>

<t>This document describes interaction models for remote attestation procedures (RATS) <xref target="RFC9334"/>.
Three conveying mechanisms -- Challenge/Response, Uni-Directional, and Streaming Remote Attestation  -- are illustrated and defined.
Analogously, a general overview about the information elements typically used by corresponding conveyance protocols are highlighted.</t>
    </abstract>
  </front>
  <middle>
    <?line 132?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Remote ATtestation procedureS (RATS, <xref target="RFC9334"/>) are workflows composed of roles and interactions, in which Verifiers create Attestation Results about the trustworthiness of an Attester's system component characteristics.
The Verifier's assessment in the form of Attestation Results is produced based on Endorsements, Reference Values, Attestation Policies, and Evidence -- trustable and tamper-evident Claims Sets about an Attester's system component characteristics -- generated by an Attester.
The roles <em>Attester</em> and <em>Verifier</em>, as well as the Conceptual Messages <em>Evidence</em> and <em>Attestation Results</em> are concepts defined by the RATS Architecture <xref target="RFC9334"/>.
This document illustrates three main interaction models that can be used in specific RATS-related solution documents:</t>
      <ol spacing="normal" type="1">
        <li>Challenge/Response Remote Attestation</li>
        <li>Uni-Directional Remote Attestation</li>
        <li>Streaming Remote Attestation</li>
      </ol>
      <t>As a basis to describe the interaction models is this document, the example of attestation Evidence conveyance is used to illustrate the usage scenarios.
The reference models defined can also be applied to the conveyance of other Conceptual Messages in RATS.
This document aims to:</t>
      <ol spacing="normal" type="1">
        <li>prevent inconsistencies in descriptions of interaction models in other documents, which may occur due to text cloning and evolution over time, and to</li>
        <li>highlight the exact delta/divergence between the core characteristics captured in this document and variants of these interaction models used in other specifications or solutions.</li>
      </ol>
      <t>In summary, this document enables the specification and design of trustworthy and privacy-preserving conveyance methods for RATS Conceptual Messages; specifically attestation Evidence conveyed from an Attester to a Verifier.
While the exact details for conveyance of other Conceptual Messages is out of scope, the models described in this document may be adapted to apply to the conveyance of other Conceptual Messages, such as Endorsements or Attestation Results, or supplemental messages, such as Epoch Markers <xref target="I-D.ietf-rats-epoch-markers"/> or stand-alone event logs.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the following terms defined in <xref section="4" sectionFormat="of" target="RFC9334"/>:
Attester, Verifier, Relying Party, Conceptual Message, Evidence, Endorsement, Attestation Result, Appraisal Policy, Attesting Environment, Target Environment.</t>
      <t>A PKIX Certificate is an X.509v3 certificate as specified by <xref target="RFC5280"/>.</t>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.
<?line -6?>
      </t>
      <section anchor="disambiguation">
        <name>Disambiguation</name>
        <t>"Remote Attestation" is a common expression often associated or connoted with certain properties.
In the context of this document, the term "Remote" does not necessarily refer to a remote entity in the scope of network topologies or the Internet.
It rather refers to decoupled systems or entities that exchange the Conceptual Message type called Evidence <xref target="RFC9334"/>.
This conveyance can also be "Local", if the Verifier role is part of the same entity as the Attester role, e.g., separate system components of the same Composite Device (a single RATS entity), or the Verifier and Relying Party roles are hosted by the same entity, for example in a cryptographic key Broker system (see <xref section="6" sectionFormat="of" target="RFC9334"/> for more details).
If an entity takes on two or more different roles, the functions they provide typically reside in isolated environments that are components of the same entity.
Examples of such isolated environments include a Trusted Execution Environment (TEE), Baseboard Management Controllers (BMCs), as well as other physical or logical protected/isolated/shielded Computing Environments (e.g., embedded Secure Elements (eSE) or Trusted Platform Modules (TPM)).</t>
      </section>
    </section>
    <section anchor="scope-and-intent">
      <name>Scope and Intent</name>
      <t>This document:</t>
      <ul spacing="normal">
        <li>outlines common interaction models between RATS roles;</li>
        <li>illustrates interaction models focusing on conveying Evidence about boot-time integrity from Attesters to Verifiers;</li>
        <li>does not exclude the application of those interaction models to runtime integrity or the conveyance of other RATS Conceptual Messages;</li>
        <li>does not cover every detail about Evidence conveyance.</li>
      </ul>
      <t>While details regarding Evidence of run-time integrity are not explicitly highlighted, the provided model descriptions serve as a foundation for developing corresponding model extensions.
While the interaction models described in this document, including their variants, cover many relevant conveyance models for Conceptual Messages implemented on the Internet, they do not represent an exhaustive list of all possible models.</t>
      <t>Procedures, functions, and services needed for a complete semantic binding of the concepts defined in <xref target="RFC9334"/> are not covered in this document.
Examples of such procedures include: identity establishment, key distribution and enrollment, time synchronization, and certificate revocation.</t>
      <t>Furthermore, any processes and duties beyond conducting remote attestation procedures are out of scope.
For example, utilizing the results of a remote attestation procedure generated by the Verifier, such as triggering remediation actions or recovery processes, as well as the remediation actions and recovery processes themselves, are also out of scope.</t>
      <t>The interaction models described in this document are meant to serve as a solid foundation and reference for other solution documents within or outside the IETF.
Solution documents of any kind can refer to these interaction models to prevent duplicating text and to avoid the risk of subtle discrepancies.
Similarly, deviations from the generic model described in this document can be illustrated in solution documents to highlight distinct contributions.</t>
    </section>
    <section anchor="essential-requirements">
      <name>Essential Requirements</name>
      <t>In order to ensure appropriate conveyance of Evidence, the following requirements MUST be fulfilled:</t>
      <dl>
        <dt>Integrity:</dt>
        <dd>
          <t>Information provided by an Attester MUST NOT have been altered since it was created. This may be achieved via symmetric cryptography, e.g., using COSE Mac0 as in PSA TF-M profile (<xref section="5.2" sectionFormat="of" target="I-D.tschofenig-rats-psa-token"/>), or asymmetric, like ECDSA.</t>
        </dd>
        <dt>Authentication:</dt>
        <dd>
          <t>The information provided by the Attester MUST be authentic. To do this, the Attester should authenticate itself to the Verifier. This can be done through implicit authentication using a digital signature over the Attestation Evidence, which does not require additional protocol steps, or by using a secure channel (see <xref target="I-D.ietf-rats-uccs"/>) including authentication.</t>
        </dd>
      </dl>
    </section>
    <section anchor="normative-prerequisites">
      <name>Normative Prerequisites</name>
      <t>In order to ensure Evidence is appropriately conveyed through the interaction models described in this document, the following prerequisites MUST be in place to support their implementation:</t>
      <dl>
        <dt>Authentication Secret:</dt>
        <dd>
          <t>An Authentication Secret MUST be exclusively available to an Attesting Environment of the Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>The Attester MUST protect Claims with this Authentication Secret to prove the authenticity of the Claims included in Evidence.
The Authentication Secret MUST be established before RATS take place.</t>
        </dd>
        <dt>Attester Identity:</dt>
        <dd>
          <t>A statement made by an Endorser about an Attester that affirms the Attester's distinguishability. (Note that distinguishability does not imply uniqueness.)</t>
        </dd>
        <dt/>
        <dd>
          <t>The provenance of Evidence for a distinguishable Attesting Environment MUST be unambiguous.</t>
        </dd>
        <dt/>
        <dd>
          <t>An Attester Identity MAY be an Authentication Secret which is available exclusively to one of the Attesting Environments of the Attester.
It could be a unique identity, it could be included in a zero-knowledge proof (ZKP), it could be part of a group signature, or it could be a randomized DAA credential <xref target="DAA"/>.</t>
        </dd>
        <dt>Attestation Evidence Authenticity:</dt>
        <dd>
          <t>Attestation Evidence MUST be authentic.</t>
        </dd>
        <dt/>
        <dd>
          <t>In order to provide a proof of authenticity, Attestation Evidence can be cryptographically associated with an identity document (e.g., a PKIX certificate or trusted key material, or a randomized DAA credential <xref target="DAA"/>), or could include a correct, unambiguous, and stable reference to an accessible identity document.</t>
        </dd>
        <dt/>
        <dd>
          <t>Authenticity includes the protection of Evidence in a tamper-evident manner (e.g., either by signatures or by protection mechanisms implemented at both ends of a Secure Channel; see Authentication above).</t>
        </dd>
        <dt>Evidence Freshness:</dt>
        <dd>
          <t>Evidence MUST include an indicator about its freshness that can be understood by a Verifier (See also <xref section="10" sectionFormat="of" target="RFC9334"/>).
This enables interaction models to support the conveyance of proofs of freshness in a way that is useful to Verifiers and their appraisal procedures.</t>
        </dd>
      </dl>
    </section>
    <section anchor="generic-information-elements">
      <name>Generic Information Elements</name>
      <t>This section describes the essential information elements for the interaction models described in <xref target="interaction-models"/>.
These generic information elements may be Conceptual Messages included in the protocol messages or may be added as protocol parameters, depending on the specific solution.</t>
      <dl>
        <dt>Attesting Environment IDs ('attEnvIDs'):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A statement representing one or more identifiers that MUST be associated with a corresponding Attestation Environment's keys used to protect Claims in Evidence produced by an Attester. Exemplary identifiers include attestation key material (e.g., the public key associated with the private key that is used to produce Evidence), key identifiers, environment names, or individual hardware-based immutable identifiers.</t>
        </dd>
        <dt/>
        <dd>
          <t>While a Verifier does not necessarily have knowledge about an Attesting Environment's identifiers, each distinguishable Attesting Environment typically has access to a protected capability that includes an Attesting Environment ID.
If no Attesting Environment IDs are provided, a local default applies based on the Attester.
For example, all Attesting Environments will provide Evidence.</t>
        </dd>
        <dt>Handle (<tt>handle</tt>):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>An information element provided to the Attester from an external source included in Evidence (or other RATS Conceptual Messages) to determine recentness, freshness, or to protect against replay attacks.</t>
        </dd>
        <dt/>
        <dd>
          <t>The term Handle encompasses various data types that can be utilized to determine recentness, freshness, or provide replay protection.
Examples include Nonces, which protect against replay attacks, and Epoch Markers that identify distinct periods (Epochs) of freshness <xref target="I-D.ietf-rats-epoch-markers"/>.
Handles can also indicate authenticity or attestation Evidence provenance, as only specific RATS roles (e.g., an Attester and a Verifier in a challenge-response interaction) are meant to know a certain handle.</t>
        </dd>
        <dt>Claims (<tt>claims</tt>):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Claims are assertions that represent characteristics of an Attester's Target Environment.</t>
        </dd>
        <dt/>
        <dd>
          <t>Claims are part of a Conceptual Message and are used, for example, to appraise the integrity of Attesters by Verifiers. The other information elements in this section can be presented as Claims in any type of Conceptual Message.</t>
        </dd>
        <dt>Event Logs (<tt>eventLogs</tt>):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Event Logs accompany Claims by providing event trails of security-critical events in a system. The primary purpose of Event Logs is to ensure Claim reproducibility by providing information on how Claims originated.</t>
        </dd>
        <dt>Verifier Inputs ('verInputs')</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Appraisal procedures implemented by Verifiers require certain inputs as defined in <xref target="RFC9334"/>: Reference Values, Endorsements, and Appraisal Policy for Evidence. These Conceptual Messages can take various forms. For example, Reference Values that can be expressed via Reference Integrity Measurements (RIM) or Endorsements that can range from trust anchors to assertions cryptographically bound to the public key associated with an Attesting Environment.</t>
        </dd>
        <dt>Claim Selection (<tt>claimSelection</tt>):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A (sub-)set of Claims that can be collected and incorporated in Evidence by the Attesting Environments of an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>Claim Selections act as optional filters to specify the exact set of Claims to be included in Evidence.
For example, a Verifier could send a Claim Selection, among other elements, to an Attester.
An Attester MAY decide whether or not to provide all requested Claims from a Claim Selection to the Verifier.
If there is no way to convey a Claim Selection in a remote attestation protocol, a default Claim Selection (e.g., "all") MUST be defined by the Attester and SHOULD be known by the Verifier.
In order to select Claims, Claims that can be potentially included in Evidence by an Attesting Environment have to be known by the Verifier.</t>
        </dd>
        <dt>Collected Claims (<tt>collectedClaims</tt>):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Collected Claims represent a (sub-)set of Claims created by an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>Collected Claims are gathered based on the Claim Selection. If a Verifier does not provide a Claim Selection, all available Claims on the Attester are part of the Collected Claims.</t>
        </dd>
        <dt>Evidence (<tt>evidence</tt>):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A set of Claims that can include: (a) a list of Attestation Environment IDs, each identifying an Authentication Secret in a single Attesting Environment, (b) the Attester Identity, (c) Claims about the Attester's Target Environment, and (d) a Handle.
Attestation Evidence MUST cryptographically bind all of these information elements.
Evidence MUST be protected via an Authentication Secret.
The Authentication Secret MUST be trusted by the Verifier as authoritatively "speaking for" <xref target="lampson06"/> the Attester.</t>
        </dd>
        <dt>Attestation Result (<tt>attestationResult</tt>):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>An Attestation Result is produced by the Verifier as the output of the appraisal of Evidence generated by an Attester. Attestation Results include concise assertions about integrity or other characteristics of the appraised Attester that can be processed by Relying Parties.</t>
        </dd>
      </dl>
    </section>
    <section anchor="interaction-models">
      <name>Interaction Models</name>
      <t>This document describes three interaction models for Remote Attestation:</t>
      <ol spacing="normal" type="1">
        <li>Challenge/Response (<xref target="challenge-response"/>),</li>
        <li>Unidirectional (<xref target="unidirectional"/>), and</li>
        <li>Streaming (<xref target="streaming"/>).</li>
      </ol>
      <t>Each section starts with a sequence diagram illustrating the interactions between the involved roles: Attester, Verifier and, optionally, a Relying Party.
The presented interaction models focus on the conveyance of Evidence and Attestation Results.
The same interaction models may apply to the conveyance of other Conceptual Messages (Endorsements, Reference Values, or Appraisal Policies) with other roles involved.
However, that is out of scope for the present document.</t>
      <t>All interaction models have a strong focus on the use of a Handle to incorporate a proof of freshness and to prevent replay attacks.
The way the Handle is processed is the most prominent difference between the three interaction models.</t>
      <section anchor="challenge-response">
        <name>Challenge/Response Remote Attestation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="584" viewBox="0 0 584 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
              <path d="M 48,144 L 48,192" fill="none" stroke="black"/>
              <path d="M 48,224 L 48,240" fill="none" stroke="black"/>
              <path d="M 48,272 L 48,320" fill="none" stroke="black"/>
              <path d="M 48,352 L 48,400" fill="none" stroke="black"/>
              <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
              <path d="M 536,64 L 536,80" fill="none" stroke="black"/>
              <path d="M 536,112 L 536,320" fill="none" stroke="black"/>
              <path d="M 536,384 L 536,400" fill="none" stroke="black"/>
              <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
              <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
              <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
              <path d="M 8,94 L 136,94" fill="none" stroke="black"/>
              <path d="M 8,98 L 136,98" fill="none" stroke="black"/>
              <path d="M 432,94 L 576,94" fill="none" stroke="black"/>
              <path d="M 432,98 L 576,98" fill="none" stroke="black"/>
              <path d="M 56,176 L 96,176" fill="none" stroke="black"/>
              <path d="M 240,304 L 528,304" fill="none" stroke="black"/>
              <path d="M 8,334 L 208,334" fill="none" stroke="black"/>
              <path d="M 8,338 L 208,338" fill="none" stroke="black"/>
              <path d="M 376,334 L 576,334" fill="none" stroke="black"/>
              <path d="M 376,338 L 576,338" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="536,304 524,298.4 524,309.6 " fill="black" transform="rotate(0,528,304)"/>
              <polygon class="arrowhead" points="64,176 52,170.4 52,181.6 " fill="black" transform="rotate(180,56,176)"/>
              <g class="text">
                <text x="52" y="52">Attester</text>
                <text x="532" y="52">Verifier</text>
                <text x="176" y="100">[Evidence</text>
                <text x="260" y="100">Generation</text>
                <text x="320" y="100">and</text>
                <text x="384" y="100">Conveyance]</text>
                <text x="48" y="116">|</text>
                <text x="164" y="132">generateClaims(attestingEnvironment)</text>
                <text x="68" y="148">=&gt;</text>
                <text x="112" y="148">claims,</text>
                <text x="188" y="148">?eventLogs</text>
                <text x="200" y="180">requestEvidence(handle,</text>
                <text x="344" y="180">?attEnvIDs,</text>
                <text x="460" y="180">?claimSelection)</text>
                <text x="104" y="212">collectClaims(claims,</text>
                <text x="260" y="212">?claimSelection)</text>
                <text x="68" y="228">=&gt;</text>
                <text x="144" y="228">collectedClaims</text>
                <text x="116" y="260">generateEvidence(handle,</text>
                <text x="264" y="260">?attEnvIDs,</text>
                <text x="380" y="260">collectedClaims)</text>
                <text x="68" y="276">=&gt;</text>
                <text x="116" y="276">evidence</text>
                <text x="100" y="308">{evidence,</text>
                <text x="192" y="308">?eventLogs}</text>
                <text x="248" y="340">[Evidence</text>
                <text x="332" y="340">Appraisal]</text>
                <text x="536" y="356">|</text>
                <text x="284" y="372">appraiseEvidence(evidence,</text>
                <text x="440" y="372">?eventLogs,</text>
                <text x="532" y="372">verInputs)</text>
                <text x="432" y="388">attestationResult</text>
                <text x="516" y="388">&lt;=</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
.----------.                                                .----------.
| Attester |                                                | Verifier |
'----+-----'                                                '-----+----'
     |                                                            |
=================[Evidence Generation and Conveyance]===================
     |                                                            |
  generateClaims(attestingEnvironment)                            |
     | => claims, ?eventLogs                                      |
     |                                                            |
     |<----- requestEvidence(handle, ?attEnvIDs, ?claimSelection) |
     |                                                            |
  collectClaims(claims, ?claimSelection)                          |
     | => collectedClaims                                         |
     |                                                            |
  generateEvidence(handle, ?attEnvIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | {evidence, ?eventLogs}------------------------------------>|
     |                                                            |
==========================[Evidence Appraisal]==========================
     |                                                            |
     |                appraiseEvidence(evidence, ?eventLogs, verInputs)
     |                                       attestationResult <= |
     |                                                            |
]]></artwork>
        </artset>
        <t>The Attester boots up and thereby produces Claims about its boot state and its operational state. Event Logs may accompany the produced Claims and provide an event trail of security-critical events in the system. Claims are produced by all Attesting Environments of an Attester system.</t>
        <t>The Challenge/Response remote attestation procedure is initiated by the Verifier by sending a remote attestation request to the Attester. A request includes a Handle, an optional list of Attestation Key IDs, and an optional Claim Selection.</t>
        <t>In the Challenge/Response model, the Handle is composed of qualifying data in the form of a practically infeasible to guess nonce, such as a cryptographically strong random number.
The Verifier-generated nonce is intended to guarantee Evidence freshness and to prevent replay attacks.</t>
        <t>The list of Attestation Key IDs selects the attestation keys with which the Attester is requested to sign the attestation Evidence.
Each selected key is uniquely associated with an Attesting Environment of the Attester.
As a result, a single Attestation Key ID identifies a single Attesting Environment.
Correspondingly, a particular set of Evidence originating from a particular Attesting Environment in a composite device can be requested via multiple Attestation Key IDs.
Methods to acquire Attestation Key IDs or mappings between Attesting Environments to Attestation Key IDs are out of scope of this document.</t>
        <t>The Attester selects Claims based on the specified Claim Selection, which is defined by the Verifier.
The Claim Selection determines the Collected Claims, which may be a subset of all the available Claims.
If the Claim Selection is omitted, then all available Claims on the Attester MUST be used to create corresponding Evidence.
For example, when performing a boot integrity evaluation, a Verifier may only request specific claims about the Attester, such as Evidence about the BIOS/UEFI and firmware that the Attester booted up, without including information about all currently running software.</t>
        <t>With the Handle, the Attestation Key IDs, and the Collected Claims, the Attester produces signed Evidence. That is, it digitally signs the Handle and the Collected Claims with a cryptographic secret identified by the Attestation Key ID. This is done once per Attesting Environment which is identified by the particular Attestation Key ID. The Attester communicates the signed Evidence as well as all accompanying Event Logs back to the Verifier.</t>
        <t>The Claims, the Handle, and the Attester Identity information (i.e., the Authentication Secret) MUST be cryptographically bound to the signature of Evidence. These MAY be presented obfuscated, encrypted, or cryptographically blinded.
For further reference see section <xref target="security-and-privacy-considerations"/>.</t>
        <t>Upon receiving the Evidence and Event Logs, the Verifier validates the signature, Attester Identity, and Handle, and then appraises the Claims.
Claim appraisal is driven by Policy and takes Reference Values and Endorsements as input.
The Verifier outputs Attestation Results. Attestation Results create new Claim Sets about the properties and characteristics of an Attester, which enable Relying Parties to assess an Attester's trustworthiness.</t>
        <section anchor="models-and-example-sequences-of-challengeresponse-remote-attestation">
          <name>Models and Example Sequences of Challenge/Response Remote Attestation</name>
          <t>According to the RATS Architecture, two reference models for Challenge/Response Attestation have been proposed.
This section highlights the information flows between the Attester, Verifier, and Relying Party undergoing Remote Attestation Procedure, using these models.</t>
          <section anchor="passport-model">
            <name>Passport Model</name>
            <t>The passport model is so named because of its resemblance to how nations issue passports to their citizens.
In this model, the attestation sequence is a two-step procedure.
In the first step, an Attester conveys Evidence to a Verifier, which appraises the Evidence according to its Appraisal Policy.
The Verifier then gives back an Attestation Result to the Attester, which caches it.
In the second step, the Attester presents the Attestation Result (and possibly additional Claims/Evidence) to a Relying Party, which appraises this information according to its own Appraisal Policy to establish the trustworthiness of the Attester.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="608" width="584" viewBox="0 0 584 608" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                  <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
                  <path d="M 48,144 L 48,208" fill="none" stroke="black"/>
                  <path d="M 48,240 L 48,256" fill="none" stroke="black"/>
                  <path d="M 48,304 L 48,352" fill="none" stroke="black"/>
                  <path d="M 48,384 L 48,512" fill="none" stroke="black"/>
                  <path d="M 48,544 L 48,592" fill="none" stroke="black"/>
                  <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 312,32 L 312,64" fill="none" stroke="black"/>
                  <path d="M 360,64 L 360,80" fill="none" stroke="black"/>
                  <path d="M 360,112 L 360,160" fill="none" stroke="black"/>
                  <path d="M 360,208 L 360,352" fill="none" stroke="black"/>
                  <path d="M 360,432 L 360,488" fill="none" stroke="black"/>
                  <path d="M 360,544 L 360,592" fill="none" stroke="black"/>
                  <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                  <path d="M 440,32 L 440,64" fill="none" stroke="black"/>
                  <path d="M 456,400 L 456,408" fill="none" stroke="black"/>
                  <path d="M 504,64 L 504,80" fill="none" stroke="black"/>
                  <path d="M 504,112 L 504,352" fill="none" stroke="black"/>
                  <path d="M 504,384 L 504,512" fill="none" stroke="black"/>
                  <path d="M 568,32 L 568,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                  <path d="M 312,32 L 400,32" fill="none" stroke="black"/>
                  <path d="M 440,32 L 568,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 312,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 440,64 L 568,64" fill="none" stroke="black"/>
                  <path d="M 8,94 L 136,94" fill="none" stroke="black"/>
                  <path d="M 8,98 L 136,98" fill="none" stroke="black"/>
                  <path d="M 432,94 L 576,94" fill="none" stroke="black"/>
                  <path d="M 432,98 L 576,98" fill="none" stroke="black"/>
                  <path d="M 56,176 L 248,176" fill="none" stroke="black"/>
                  <path d="M 248,336 L 352,336" fill="none" stroke="black"/>
                  <path d="M 8,366 L 208,366" fill="none" stroke="black"/>
                  <path d="M 8,370 L 208,370" fill="none" stroke="black"/>
                  <path d="M 376,366 L 576,366" fill="none" stroke="black"/>
                  <path d="M 376,370 L 576,370" fill="none" stroke="black"/>
                  <path d="M 56,464 L 184,464" fill="none" stroke="black"/>
                  <path d="M 304,496 L 496,496" fill="none" stroke="black"/>
                  <path d="M 8,526 L 160,526" fill="none" stroke="black"/>
                  <path d="M 8,530 L 160,530" fill="none" stroke="black"/>
                  <path d="M 416,526 L 576,526" fill="none" stroke="black"/>
                  <path d="M 416,530 L 576,530" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="504,496 492,490.4 492,501.6 " fill="black" transform="rotate(0,496,496)"/>
                  <polygon class="arrowhead" points="360,336 348,330.4 348,341.6 " fill="black" transform="rotate(0,352,336)"/>
                  <polygon class="arrowhead" points="64,464 52,458.4 52,469.6 " fill="black" transform="rotate(180,56,464)"/>
                  <polygon class="arrowhead" points="64,176 52,170.4 52,181.6 " fill="black" transform="rotate(180,56,176)"/>
                  <g class="text">
                    <text x="52" y="52">Attester</text>
                    <text x="356" y="52">Verifier</text>
                    <text x="480" y="52">Relying</text>
                    <text x="536" y="52">Party</text>
                    <text x="176" y="100">[Evidence</text>
                    <text x="260" y="100">Generation</text>
                    <text x="320" y="100">and</text>
                    <text x="384" y="100">Conveyance]</text>
                    <text x="48" y="116">|</text>
                    <text x="164" y="132">generateClaims(attestingEnvironment)</text>
                    <text x="68" y="148">=&gt;</text>
                    <text x="112" y="148">claims,</text>
                    <text x="188" y="148">?eventLogs</text>
                    <text x="352" y="180">requestEvidence(handle,</text>
                    <text x="312" y="196">?attEnvIDs,</text>
                    <text x="428" y="196">?claimSelection)</text>
                    <text x="104" y="228">collectClaims(claims,</text>
                    <text x="260" y="228">?claimSelection)</text>
                    <text x="68" y="244">=&gt;</text>
                    <text x="144" y="244">collectedClaims</text>
                    <text x="116" y="276">generateEvidence(handle,</text>
                    <text x="88" y="292">?attEnvIDs,</text>
                    <text x="204" y="292">collectedClaims)</text>
                    <text x="68" y="308">=&gt;</text>
                    <text x="116" y="308">evidence</text>
                    <text x="100" y="340">{evidence,</text>
                    <text x="192" y="340">?eventLogs}</text>
                    <text x="248" y="372">[Evidence</text>
                    <text x="332" y="372">Appraisal]</text>
                    <text x="360" y="388">|</text>
                    <text x="352" y="404">appraiseEvidence(evidence</text>
                    <text x="328" y="420">?eventLogs,</text>
                    <text x="420" y="420">verInputs)</text>
                    <text x="256" y="436">attestationResult</text>
                    <text x="340" y="436">&lt;=</text>
                    <text x="272" y="468">{attestationResult}</text>
                    <text x="100" y="500">{evidence,</text>
                    <text x="220" y="500">attestationResult}</text>
                    <text x="360" y="516">|</text>
                    <text x="212" y="532">[Attestation</text>
                    <text x="292" y="532">Result</text>
                    <text x="368" y="532">Generation]</text>
                    <text x="504" y="548">|</text>
                    <text x="484" y="564">appraiseResult(policy,</text>
                    <text x="492" y="580">attestationResult)</text>
                    <text x="504" y="596">|</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.                          .----------.    .---------------.
| Attester |                          | Verifier |    | Relying Party |
'----+-----'                          '-----+----'    '-------+-------'
     |                                      |                 |
=================[Evidence Generation and Conveyance]===================
     |                                      |                 |
  generateClaims(attestingEnvironment)      |                 |
     | => claims, ?eventLogs                |                 |
     |                                      |                 |
     |<------------------------ requestEvidence(handle,       |
     |                           ?attEnvIDs, ?claimSelection) |
     |                                      |                 |
  collectClaims(claims, ?claimSelection)    |                 |
     | => collectedClaims                   |                 |
     |                                      |                 |
  generateEvidence(handle,                  |                 |
     ?attEnvIDs, collectedClaims)           |                 |
     | => evidence                          |                 |
     |                                      |                 |
     | {evidence, ?eventLogs} ------------->|                 |
     |                                      |                 |
==========================[Evidence Appraisal]==========================
     |                                      |                 |
     |                         appraiseEvidence(evidence,     |
     |                             ?eventLogs, verInputs)     |
     |                 attestationResult <= |                 |
     |                                      |                 |
     |<---------------- {attestationResult} |                 |
     |                                      |                 |
     | {evidence, attestationResult} ------------------------>|
     |                                      |                 |
====================[Attestation Result Generation]=====================
     |                                      |                 |
     |                                      |    appraiseResult(policy,
     |                                      |       attestationResult)
     |                                      |                 |
]]></artwork>
            </artset>
          </section>
          <section anchor="background-check-model">
            <name>Background-Check Model</name>
            <t>The background-check model is so named because of the resemblance of how employers and volunteer organizations perform background checks.
In this model, the attestation sequence is initiated by a Relying Party.
The Attester conveys Evidence to the Relying Party, which does not process its payload, but relays the message and optionally checks its signature against a policed trust anchor store.
Upon receiving the Evidence, the Relying Party initiates a session with the Verifier.
Once the session is established, it forwards the received Evidence to the Verifier.
The Verifier appraises the received Evidence according to its appraisal policy for Evidence and returns a corresponding Attestation Result to the Relying Party.
The Relying Party then checks the Attestation Result against its own appraisal policy to conclude attestation.</t>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="656" width="584" viewBox="0 0 584 656" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                  <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
                  <path d="M 48,112 L 48,160" fill="none" stroke="black"/>
                  <path d="M 48,192 L 48,208" fill="none" stroke="black"/>
                  <path d="M 48,256 L 48,272" fill="none" stroke="black"/>
                  <path d="M 48,320 L 48,368" fill="none" stroke="black"/>
                  <path d="M 48,400 L 48,560" fill="none" stroke="black"/>
                  <path d="M 48,592 L 48,640" fill="none" stroke="black"/>
                  <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,32 L 272,64" fill="none" stroke="black"/>
                  <path d="M 336,64 L 336,80" fill="none" stroke="black"/>
                  <path d="M 336,160 L 336,368" fill="none" stroke="black"/>
                  <path d="M 336,400 L 336,560" fill="none" stroke="black"/>
                  <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                  <path d="M 480,32 L 480,64" fill="none" stroke="black"/>
                  <path d="M 528,64 L 528,80" fill="none" stroke="black"/>
                  <path d="M 528,112 L 528,368" fill="none" stroke="black"/>
                  <path d="M 528,400 L 528,448" fill="none" stroke="black"/>
                  <path d="M 528,496 L 528,560" fill="none" stroke="black"/>
                  <path d="M 528,592 L 528,640" fill="none" stroke="black"/>
                  <path d="M 568,32 L 568,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                  <path d="M 272,32 L 400,32" fill="none" stroke="black"/>
                  <path d="M 480,32 L 568,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 480,64 L 568,64" fill="none" stroke="black"/>
                  <path d="M 8,94 L 136,94" fill="none" stroke="black"/>
                  <path d="M 8,98 L 136,98" fill="none" stroke="black"/>
                  <path d="M 432,94 L 576,94" fill="none" stroke="black"/>
                  <path d="M 432,98 L 576,98" fill="none" stroke="black"/>
                  <path d="M 56,128 L 248,128" fill="none" stroke="black"/>
                  <path d="M 248,352 L 328,352" fill="none" stroke="black"/>
                  <path d="M 8,382 L 208,382" fill="none" stroke="black"/>
                  <path d="M 8,386 L 208,386" fill="none" stroke="black"/>
                  <path d="M 376,382 L 576,382" fill="none" stroke="black"/>
                  <path d="M 376,386 L 576,386" fill="none" stroke="black"/>
                  <path d="M 456,432 L 520,432" fill="none" stroke="black"/>
                  <path d="M 344,528 L 424,528" fill="none" stroke="black"/>
                  <path d="M 8,574 L 160,574" fill="none" stroke="black"/>
                  <path d="M 8,578 L 160,578" fill="none" stroke="black"/>
                  <path d="M 416,574 L 576,574" fill="none" stroke="black"/>
                  <path d="M 416,578 L 576,578" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="528,432 516,426.4 516,437.6 " fill="black" transform="rotate(0,520,432)"/>
                  <polygon class="arrowhead" points="352,528 340,522.4 340,533.6 " fill="black" transform="rotate(180,344,528)"/>
                  <polygon class="arrowhead" points="336,352 324,346.4 324,357.6 " fill="black" transform="rotate(0,328,352)"/>
                  <polygon class="arrowhead" points="64,128 52,122.4 52,133.6 " fill="black" transform="rotate(180,56,128)"/>
                  <g class="text">
                    <text x="52" y="52">Attester</text>
                    <text x="312" y="52">Relying</text>
                    <text x="368" y="52">Party</text>
                    <text x="524" y="52">Verifier</text>
                    <text x="176" y="100">[Evidence</text>
                    <text x="260" y="100">Generation</text>
                    <text x="320" y="100">and</text>
                    <text x="384" y="100">Conveyance]</text>
                    <text x="336" y="116">|</text>
                    <text x="352" y="132">requestEvidence(handle,</text>
                    <text x="312" y="148">?attEnvIDs,</text>
                    <text x="428" y="148">?claimSelection)</text>
                    <text x="164" y="180">generateClaims(attestingEnvironment)</text>
                    <text x="68" y="196">=&gt;</text>
                    <text x="116" y="196">{claims,</text>
                    <text x="200" y="196">?eventLogs}</text>
                    <text x="104" y="228">collectClaims(claims,</text>
                    <text x="108" y="244">?claimSelection)</text>
                    <text x="68" y="260">=&gt;</text>
                    <text x="144" y="260">collectedClaims</text>
                    <text x="116" y="292">generateEvidence(handle,</text>
                    <text x="88" y="308">?attEnvIDs,</text>
                    <text x="204" y="308">collectedClaims)</text>
                    <text x="68" y="324">=&gt;</text>
                    <text x="116" y="324">evidence</text>
                    <text x="100" y="356">{evidence,</text>
                    <text x="192" y="356">?eventLogs}</text>
                    <text x="248" y="388">[Evidence</text>
                    <text x="332" y="388">Appraisal]</text>
                    <text x="380" y="420">{handle,</text>
                    <text x="456" y="420">evidence,</text>
                    <text x="400" y="436">?eventLogs}</text>
                    <text x="468" y="468">appraiseEvidence(evidence,</text>
                    <text x="448" y="484">?eventLogs,</text>
                    <text x="540" y="484">verInputs)</text>
                    <text x="424" y="500">attestationResult</text>
                    <text x="508" y="500">&lt;=</text>
                    <text x="476" y="532">{evidence,</text>
                    <text x="444" y="548">attestationResult}</text>
                    <text x="212" y="580">[Attestation</text>
                    <text x="292" y="580">Result</text>
                    <text x="368" y="580">Generation]</text>
                    <text x="336" y="596">|</text>
                    <text x="332" y="612">appraiseResult(policy,</text>
                    <text x="332" y="628">attestationResult)</text>
                    <text x="336" y="644">|</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.                     .---------------.         .----------.
| Attester |                     | Relying Party |         | Verifier |
'----+-----'                     '-------+-------'         '-----+----'
     |                                   |                       |
=================[Evidence Generation and Conveyance]===================
     |                                   |                       |
     |<------------------------ requestEvidence(handle,          |
     |                           ?attEnvIDs, ?claimSelection)    |
     |                                   |                       |
  generateClaims(attestingEnvironment)   |                       |
     | => {claims, ?eventLogs}           |                       |
     |                                   |                       |
  collectClaims(claims,                  |                       |
     ?claimSelection)                    |                       |
     | => collectedClaims                |                       |
     |                                   |                       |
  generateEvidence(handle,               |                       |
     ?attEnvIDs, collectedClaims)        |                       |
     | => evidence                       |                       |
     |                                   |                       |
     | {evidence, ?eventLogs} ---------->|                       |
     |                                   |                       |
==========================[Evidence Appraisal]==========================
     |                                   |                       |
     |                                   | {handle, evidence,    |
     |                                   |  ?eventLogs} -------->|
     |                                   |                       |
     |                                   |   appraiseEvidence(evidence,
     |                                   |        ?eventLogs, verInputs)
     |                                   |  attestationResult <= |
     |                                   |                       |
     |                                   |<---------- {evidence, |
     |                                   |    attestationResult} |
     |                                   |                       |
====================[Attestation Result Generation]=====================
     |                                   |                       |
     |                        appraiseResult(policy,             |
     |                          attestationResult)               |
     |                                   |                       |
]]></artwork>
            </artset>
          </section>
        </section>
      </section>
      <section anchor="unidirectional">
        <name>Uni-Directional Remote Attestation</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="992" width="584" viewBox="0 0 584 992" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 8,112 L 8,944" fill="none" stroke="black"/>
              <path d="M 16,608 L 16,928" fill="none" stroke="black"/>
              <path d="M 48,64 L 48,88" fill="none" stroke="black"/>
              <path d="M 48,144 L 48,240" fill="none" stroke="black"/>
              <path d="M 48,304 L 48,320" fill="none" stroke="black"/>
              <path d="M 48,352 L 48,368" fill="none" stroke="black"/>
              <path d="M 48,400 L 48,448" fill="none" stroke="black"/>
              <path d="M 48,480 L 48,544" fill="none" stroke="black"/>
              <path d="M 48,672 L 48,688" fill="none" stroke="black"/>
              <path d="M 48,720 L 48,736" fill="none" stroke="black"/>
              <path d="M 48,768 L 48,816" fill="none" stroke="black"/>
              <path d="M 48,848 L 48,936" fill="none" stroke="black"/>
              <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
              <path d="M 288,32 L 288,64" fill="none" stroke="black"/>
              <path d="M 368,64 L 368,88" fill="none" stroke="black"/>
              <path d="M 368,160 L 368,208" fill="none" stroke="black"/>
              <path d="M 456,32 L 456,64" fill="none" stroke="black"/>
              <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
              <path d="M 536,64 L 536,88" fill="none" stroke="black"/>
              <path d="M 536,144 L 536,240" fill="none" stroke="black"/>
              <path d="M 536,272 L 536,448" fill="none" stroke="black"/>
              <path d="M 536,640 L 536,816" fill="none" stroke="black"/>
              <path d="M 536,912 L 536,936" fill="none" stroke="black"/>
              <path d="M 552,880 L 552,888" fill="none" stroke="black"/>
              <path d="M 560,512 L 560,520" fill="none" stroke="black"/>
              <path d="M 568,608 L 568,928" fill="none" stroke="black"/>
              <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
              <path d="M 576,112 L 576,944" fill="none" stroke="black"/>
              <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
              <path d="M 288,32 L 456,32" fill="none" stroke="black"/>
              <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
              <path d="M 288,64 L 456,64" fill="none" stroke="black"/>
              <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
              <path d="M 24,96 L 80,96" fill="none" stroke="black"/>
              <path d="M 136,96 L 560,96" fill="none" stroke="black"/>
              <path d="M 24,126 L 208,126" fill="none" stroke="black"/>
              <path d="M 24,130 L 208,130" fill="none" stroke="black"/>
              <path d="M 368,126 L 560,126" fill="none" stroke="black"/>
              <path d="M 368,130 L 560,130" fill="none" stroke="black"/>
              <path d="M 56,192 L 280,192" fill="none" stroke="black"/>
              <path d="M 456,192 L 528,192" fill="none" stroke="black"/>
              <path d="M 24,254 L 136,254" fill="none" stroke="black"/>
              <path d="M 24,258 L 136,258" fill="none" stroke="black"/>
              <path d="M 432,254 L 560,254" fill="none" stroke="black"/>
              <path d="M 432,258 L 560,258" fill="none" stroke="black"/>
              <path d="M 240,432 L 528,432" fill="none" stroke="black"/>
              <path d="M 24,462 L 208,462" fill="none" stroke="black"/>
              <path d="M 24,466 L 208,466" fill="none" stroke="black"/>
              <path d="M 376,462 L 560,462" fill="none" stroke="black"/>
              <path d="M 376,466 L 560,466" fill="none" stroke="black"/>
              <path d="M 32,592 L 80,592" fill="none" stroke="black"/>
              <path d="M 136,592 L 552,592" fill="none" stroke="black"/>
              <path d="M 32,622 L 120,622" fill="none" stroke="black"/>
              <path d="M 32,626 L 120,626" fill="none" stroke="black"/>
              <path d="M 464,622 L 552,622" fill="none" stroke="black"/>
              <path d="M 464,626 L 552,626" fill="none" stroke="black"/>
              <path d="M 280,800 L 528,800" fill="none" stroke="black"/>
              <path d="M 32,830 L 184,830" fill="none" stroke="black"/>
              <path d="M 32,834 L 184,834" fill="none" stroke="black"/>
              <path d="M 400,830 L 552,830" fill="none" stroke="black"/>
              <path d="M 400,834 L 552,834" fill="none" stroke="black"/>
              <path d="M 32,944 L 552,944" fill="none" stroke="black"/>
              <path d="M 24,960 L 560,960" fill="none" stroke="black"/>
              <path d="M 24,96 C 15.16936,96 8,103.16936 8,112" fill="none" stroke="black"/>
              <path d="M 560,96 C 568.83064,96 576,103.16936 576,112" fill="none" stroke="black"/>
              <path d="M 32,592 C 23.16936,592 16,599.16936 16,608" fill="none" stroke="black"/>
              <path d="M 552,592 C 560.83064,592 568,599.16936 568,608" fill="none" stroke="black"/>
              <path d="M 32,944 C 23.16936,944 16,936.83064 16,928" fill="none" stroke="black"/>
              <path d="M 552,944 C 560.83064,944 568,936.83064 568,928" fill="none" stroke="black"/>
              <path d="M 24,960 C 15.16936,960 8,952.83064 8,944" fill="none" stroke="black"/>
              <path d="M 560,960 C 568.83064,960 576,952.83064 576,944" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="536,800 524,794.4 524,805.6 " fill="black" transform="rotate(0,528,800)"/>
              <polygon class="arrowhead" points="536,432 524,426.4 524,437.6 " fill="black" transform="rotate(0,528,432)"/>
              <polygon class="arrowhead" points="536,192 524,186.4 524,197.6 " fill="black" transform="rotate(0,528,192)"/>
              <polygon class="arrowhead" points="64,192 52,186.4 52,197.6 " fill="black" transform="rotate(180,56,192)"/>
              <g class="text">
                <text x="52" y="52">Attester</text>
                <text x="324" y="52">Handle</text>
                <text x="400" y="52">Distributor</text>
                <text x="532" y="52">Verifier</text>
                <text x="108" y="100">[loop]</text>
                <text x="48" y="116">|</text>
                <text x="536" y="116">|</text>
                <text x="240" y="132">[Handle</text>
                <text x="320" y="132">Generation]</text>
                <text x="404" y="148">generateHandle()</text>
                <text x="388" y="164">=&gt;</text>
                <text x="428" y="164">handle</text>
                <text x="324" y="196">{handle}</text>
                <text x="412" y="196">{handle}</text>
                <text x="368" y="228">x</text>
                <text x="176" y="260">[Evidence</text>
                <text x="260" y="260">Generation</text>
                <text x="320" y="260">and</text>
                <text x="384" y="260">Conveyance]</text>
                <text x="48" y="276">|</text>
                <text x="164" y="292">generateClaims(attestingEnvironment)</text>
                <text x="68" y="308">=&gt;</text>
                <text x="112" y="308">claims,</text>
                <text x="184" y="308">eventLogs</text>
                <text x="104" y="340">collectClaims(claims,</text>
                <text x="260" y="340">?claimSelection)</text>
                <text x="68" y="356">=&gt;</text>
                <text x="144" y="356">collectedClaims</text>
                <text x="116" y="388">generateEvidence(handle,</text>
                <text x="260" y="388">attEnvIDs,</text>
                <text x="372" y="388">collectedClaims)</text>
                <text x="68" y="404">=&gt;</text>
                <text x="116" y="404">evidence</text>
                <text x="100" y="436">{evidence,</text>
                <text x="188" y="436">eventLogs}</text>
                <text x="248" y="468">[Evidence</text>
                <text x="332" y="468">Appraisal]</text>
                <text x="536" y="484">|</text>
                <text x="460" y="500">appraiseEvidence(evidence,</text>
                <text x="520" y="516">eventLogs</text>
                <text x="524" y="532">verInputs)</text>
                <text x="432" y="548">attestationResult</text>
                <text x="516" y="548">&lt;=</text>
                <text x="536" y="548">|</text>
                <text x="48" y="564">~</text>
                <text x="536" y="564">~</text>
                <text x="48" y="580">|</text>
                <text x="536" y="580">|</text>
                <text x="108" y="596">[loop]</text>
                <text x="48" y="612">|</text>
                <text x="536" y="612">|</text>
                <text x="148" y="628">[Delta</text>
                <text x="212" y="628">Evidence</text>
                <text x="292" y="628">Generation</text>
                <text x="352" y="628">and</text>
                <text x="416" y="628">Conveyance]</text>
                <text x="48" y="644">|</text>
                <text x="172" y="660">generateClaims(attestingEnvironment)</text>
                <text x="68" y="676">=&gt;</text>
                <text x="132" y="676">claimsDelta,</text>
                <text x="244" y="676">eventLogsDelta</text>
                <text x="132" y="708">collectClaims(claimsDelta,</text>
                <text x="308" y="708">?claimSelection)</text>
                <text x="68" y="724">=&gt;</text>
                <text x="164" y="724">collectedClaimsDelta</text>
                <text x="124" y="756">generateEvidence(handle,</text>
                <text x="268" y="756">attEnvIDs,</text>
                <text x="400" y="756">collectedClaimsDelta)</text>
                <text x="68" y="772">=&gt;</text>
                <text x="116" y="772">evidence</text>
                <text x="100" y="804">{evidence,</text>
                <text x="208" y="804">eventLogsDelta}</text>
                <text x="212" y="836">[Delta</text>
                <text x="276" y="836">Evidence</text>
                <text x="356" y="836">Appraisal]</text>
                <text x="536" y="852">|</text>
                <text x="452" y="868">appraiseEvidence(evidence,</text>
                <text x="492" y="884">eventLogsDelta</text>
                <text x="516" y="900">verInputs)</text>
                <text x="432" y="916">attestationResult</text>
                <text x="516" y="916">&lt;=</text>
                <text x="48" y="980">|</text>
                <text x="536" y="980">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
.----------.                       .--------------------.   .----------.
| Attester |                       | Handle Distributor |   | Verifier |
'----+-----'                       '---------+----------'   '-----+----'
     |                                       |                    |
 .--------[loop]------------------------------------------------------.
|    |                                                            |    |
| ========================[Handle Generation]========================= |
|    |                                    generateHandle()        |    |
|    |                                       | => handle          |    |
|    |                                       |                    |    |
|    |<---------------------------- {handle} | {handle} --------->|    |
|    |                                       |                    |    |
|    |                                       x                    |    |
|    |                                                            |    |
| ===============[Evidence Generation and Conveyance]================= |
|    |                                                            |    |
| generateClaims(attestingEnvironment)                            |    |
|    | => claims, eventLogs                                       |    |
|    |                                                            |    |
| collectClaims(claims, ?claimSelection)                          |    |
|    | => collectedClaims                                         |    |
|    |                                                            |    |
| generateEvidence(handle, attEnvIDs, collectedClaims)            |    |
|    | => evidence                                                |    |
|    |                                                            |    |
|    | {evidence, eventLogs} ------------------------------------>|    |
|    |                                                            |    |
| ========================[Evidence Appraisal]======================== |
|    |                                                            |    |
|    |                                      appraiseEvidence(evidence, |
|    |                                                      eventLogs, |
|    |                                                      verInputs) |
|    |                                       attestationResult <= |    |
|    ~                                                            ~    |
|    |                                                            |    |
| .-------[loop]-----------------------------------------------------. |
||   |                                                            |   ||
|| ============[Delta Evidence Generation and Conveyance]============ ||
||   |                                                            |   ||
|| generateClaims(attestingEnvironment)                           |   ||
||   | => claimsDelta, eventLogsDelta                             |   ||
||   |                                                            |   ||
|| collectClaims(claimsDelta, ?claimSelection)                    |   ||
||   | => collectedClaimsDelta                                    |   ||
||   |                                                            |   ||
|| generateEvidence(handle, attEnvIDs, collectedClaimsDelta)      |   ||
||   | => evidence                                                |   ||
||   |                                                            |   ||
||   | {evidence, eventLogsDelta} ------------------------------->|   ||
||   |                                                            |   ||
|| ====================[Delta Evidence Appraisal]==================== ||
||   |                                                            |   ||
||   |                                     appraiseEvidence(evidence, ||
||   |                                                eventLogsDelta, ||
||   |                                                     verInputs) ||
||   |                                       attestationResult <= |   ||
||   |                                                            |   ||
| '------------------------------------------------------------------' |
 '--------------------------------------------------------------------'
     |                                                            |
]]></artwork>
        </artset>
        <t>Uni-Directional Remote Attestation procedures can be initiated both by the Attester and by the Verifier.
Initiation by the Attester can result in unsolicited pushes of Evidence to the Verifier.
Initiation by the Verifier always results in solicited pushes to the Verifier.</t>
        <t>The Uni-Directional model uses the same information elements as the Challenge/Response model.
In the sequence diagram above, the Attester initiates the conveyance of Evidence (comparable with a RESTful POST operation).
While a request of Evidence from the Verifier would result in a sequence diagram more similar to the Challenge/Response model (comparable with a RESTful GET operation).
The specific manner how Handles are generated is not in scope of this document.
One example of a specific handle representation is <xref target="I-D.ietf-rats-epoch-markers"/>.</t>
        <t>In the Uni-Directional model, handles are composed of cryptographically signed trusted timestamps as shown in <xref target="I-D.birkholz-rats-tuda"/>, potentially including other qualifying data.
The Handles are created by an external trusted third party (TTP) -- the Handle Distributor -- which includes a trustworthy source of time, and takes on the role of a Time Stamping Authority (TSA, as initially defined in <xref target="RFC3161"/>).
Timestamps created from local clocks (absolute clocks using a global timescale, as well as relative clocks, such as tick-counters) of Attesters and Verifiers MUST be cryptographically bound to fresh Handles received from the Handle Distributor.
This binding provides a proof of synchronization that MUST be included in all produced Evidence.
This model provides proof that Evidence generation happened after the Handle generation phase.
The Verifier can always determine whether the received Evidence includes a fresh Handle, i.e., one corresponding to the current Epoch.</t>
        <section anchor="handle-lifecycle-and-propagation-delays">
          <name>Handle Lifecycle and Propagation Delays</name>
          <t>The lifecycle of a handle is a critical aspect of ensuring the freshness and validity of attestation Evidence.
When a new handle is generated by the Handle Distributor, it effectively supersedes the previous handle.
However, due to network latencies and propagation delays, there may be a period during which both the old and new handles are in circulation.
This "grey zone" can potentially lead to situations where Evidence may be associated with an outdated handle yet still appear to be valid.</t>
          <t>To manage this complexity, it is essential to define a clear policy for handle validity and expiration:</t>
          <ul spacing="normal">
            <li>
              <em>Handle Expiry</em>:
Each handle should have a well-defined expiration time, after which it is considered invalid.
This expiry must account for expected propagation delays and be clearly communicated to all entities in the attestation process.</li>
            <li>
              <em>Synchronization Checks</em>:
Implement periodic synchronization checks between the Handle Distributor and both Attesters and Verifiers to ensure that handles are updated consistently across all participants.</li>
            <li>
              <em>Grace Periods</em>:
Define grace periods during which a newly issued handle starts being accepted, and the old handle stops being valid.
This period should be long enough to account for the maximum expected propagation delay across the network.</li>
          </ul>
          <t>Implementing these measures will help mitigate the risks associated with the handle lifecycle, particularly in environments where propagation delays are significant.
This careful management ensures that the integrity and trustworthiness of the attestation process are maintained.</t>
          <t>While periodically pushing Evidence to the Verifier, the Attester only needs to generate and convey evidence generated from Claim values that have changed and new Event Log entries since the previous conveyance.
These updates reflecting the differences are called "delta" in the sequence diagram above.</t>
          <t>Effectively, the Uni-Directional model allows for a series of Evidence to be pushed to multiple Verifiers simultaneously.
Methods to detect excessive time drift that would mandate a fresh Handle to be received by the Handle Distributor as well as timing of Handle distribution are out-of-scope of this document.</t>
        </section>
      </section>
      <section anchor="streaming">
        <name>Streaming Remote Attestation</name>
        <t>Streaming Remote Attestation serves as the foundational concept for both the observer pattern <xref target="ISIS"/> and the publish-subscribe pattern <xref target="DesignPatterns"/>.
It entails establishing subscription states to enable continuous remote attestation.
In the observer pattern, observers are directly connected to target resources without a Broker, while the publish-subscribe pattern involves a central Broker for message distribution.</t>
        <section anchor="streaming-without-broker">
          <name>Streaming Remote Attestation without a Broker</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="992" width="584" viewBox="0 0 584 992" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 8,112 L 8,944" fill="none" stroke="black"/>
                <path d="M 16,608 L 16,928" fill="none" stroke="black"/>
                <path d="M 48,64 L 48,88" fill="none" stroke="black"/>
                <path d="M 48,144 L 48,240" fill="none" stroke="black"/>
                <path d="M 48,304 L 48,320" fill="none" stroke="black"/>
                <path d="M 48,352 L 48,368" fill="none" stroke="black"/>
                <path d="M 48,400 L 48,448" fill="none" stroke="black"/>
                <path d="M 48,480 L 48,544" fill="none" stroke="black"/>
                <path d="M 48,672 L 48,688" fill="none" stroke="black"/>
                <path d="M 48,720 L 48,736" fill="none" stroke="black"/>
                <path d="M 48,768 L 48,816" fill="none" stroke="black"/>
                <path d="M 48,848 L 48,936" fill="none" stroke="black"/>
                <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
                <path d="M 536,64 L 536,88" fill="none" stroke="black"/>
                <path d="M 536,176 L 536,240" fill="none" stroke="black"/>
                <path d="M 536,272 L 536,448" fill="none" stroke="black"/>
                <path d="M 536,640 L 536,816" fill="none" stroke="black"/>
                <path d="M 536,912 L 536,936" fill="none" stroke="black"/>
                <path d="M 552,880 L 552,888" fill="none" stroke="black"/>
                <path d="M 560,512 L 560,520" fill="none" stroke="black"/>
                <path d="M 568,608 L 568,928" fill="none" stroke="black"/>
                <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                <path d="M 576,112 L 576,944" fill="none" stroke="black"/>
                <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                <path d="M 24,96 L 80,96" fill="none" stroke="black"/>
                <path d="M 136,96 L 560,96" fill="none" stroke="black"/>
                <path d="M 24,126 L 208,126" fill="none" stroke="black"/>
                <path d="M 24,130 L 208,130" fill="none" stroke="black"/>
                <path d="M 368,126 L 560,126" fill="none" stroke="black"/>
                <path d="M 368,130 L 560,130" fill="none" stroke="black"/>
                <path d="M 56,208 L 152,208" fill="none" stroke="black"/>
                <path d="M 136,224 L 528,224" fill="none" stroke="black"/>
                <path d="M 24,254 L 136,254" fill="none" stroke="black"/>
                <path d="M 24,258 L 136,258" fill="none" stroke="black"/>
                <path d="M 432,254 L 560,254" fill="none" stroke="black"/>
                <path d="M 432,258 L 560,258" fill="none" stroke="black"/>
                <path d="M 304,432 L 528,432" fill="none" stroke="black"/>
                <path d="M 24,462 L 208,462" fill="none" stroke="black"/>
                <path d="M 24,466 L 208,466" fill="none" stroke="black"/>
                <path d="M 376,462 L 560,462" fill="none" stroke="black"/>
                <path d="M 376,466 L 560,466" fill="none" stroke="black"/>
                <path d="M 32,592 L 88,592" fill="none" stroke="black"/>
                <path d="M 144,592 L 552,592" fill="none" stroke="black"/>
                <path d="M 32,622 L 120,622" fill="none" stroke="black"/>
                <path d="M 32,626 L 120,626" fill="none" stroke="black"/>
                <path d="M 464,622 L 552,622" fill="none" stroke="black"/>
                <path d="M 464,626 L 552,626" fill="none" stroke="black"/>
                <path d="M 280,800 L 528,800" fill="none" stroke="black"/>
                <path d="M 32,830 L 184,830" fill="none" stroke="black"/>
                <path d="M 32,834 L 184,834" fill="none" stroke="black"/>
                <path d="M 400,830 L 552,830" fill="none" stroke="black"/>
                <path d="M 400,834 L 552,834" fill="none" stroke="black"/>
                <path d="M 32,944 L 552,944" fill="none" stroke="black"/>
                <path d="M 24,960 L 560,960" fill="none" stroke="black"/>
                <path d="M 24,96 C 15.16936,96 8,103.16936 8,112" fill="none" stroke="black"/>
                <path d="M 560,96 C 568.83064,96 576,103.16936 576,112" fill="none" stroke="black"/>
                <path d="M 32,592 C 23.16936,592 16,599.16936 16,608" fill="none" stroke="black"/>
                <path d="M 552,592 C 560.83064,592 568,599.16936 568,608" fill="none" stroke="black"/>
                <path d="M 32,944 C 23.16936,944 16,936.83064 16,928" fill="none" stroke="black"/>
                <path d="M 552,944 C 560.83064,944 568,936.83064 568,928" fill="none" stroke="black"/>
                <path d="M 24,960 C 15.16936,960 8,952.83064 8,944" fill="none" stroke="black"/>
                <path d="M 560,960 C 568.83064,960 576,952.83064 576,944" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="536,800 524,794.4 524,805.6 " fill="black" transform="rotate(0,528,800)"/>
                <polygon class="arrowhead" points="536,432 524,426.4 524,437.6 " fill="black" transform="rotate(0,528,432)"/>
                <polygon class="arrowhead" points="536,224 524,218.4 524,229.6 " fill="black" transform="rotate(0,528,224)"/>
                <polygon class="arrowhead" points="64,208 52,202.4 52,213.6 " fill="black" transform="rotate(180,56,208)"/>
                <g class="text">
                  <text x="52" y="52">Attester</text>
                  <text x="532" y="52">Verifier</text>
                  <text x="108" y="100">[loop]</text>
                  <text x="48" y="116">|</text>
                  <text x="536" y="116">|</text>
                  <text x="240" y="132">[Handle</text>
                  <text x="320" y="132">Generation]</text>
                  <text x="536" y="148">|</text>
                  <text x="500" y="164">generateHandle()</text>
                  <text x="492" y="180">handle&lt;=</text>
                  <text x="232" y="212">subscribe(handle,</text>
                  <text x="348" y="212">attEnvIDs,</text>
                  <text x="460" y="212">?claimSelection)</text>
                  <text x="92" y="228">{handle}</text>
                  <text x="176" y="260">[Evidence</text>
                  <text x="260" y="260">Generation</text>
                  <text x="320" y="260">and</text>
                  <text x="384" y="260">Conveyance]</text>
                  <text x="48" y="276">|</text>
                  <text x="164" y="292">generateClaims(attestingEnvironment)</text>
                  <text x="68" y="308">=&gt;</text>
                  <text x="112" y="308">claims,</text>
                  <text x="184" y="308">eventLogs</text>
                  <text x="104" y="340">collectClaims(claims,</text>
                  <text x="260" y="340">?claimSelection)</text>
                  <text x="68" y="356">=&gt;</text>
                  <text x="144" y="356">collectedClaims</text>
                  <text x="116" y="388">generateEvidence(handle,</text>
                  <text x="260" y="388">attEnvIDs,</text>
                  <text x="372" y="388">collectedClaims)</text>
                  <text x="68" y="404">=&gt;</text>
                  <text x="116" y="404">evidence</text>
                  <text x="92" y="436">{handle,</text>
                  <text x="168" y="436">evidence,</text>
                  <text x="252" y="436">eventLogs}</text>
                  <text x="248" y="468">[Evidence</text>
                  <text x="332" y="468">Appraisal]</text>
                  <text x="536" y="484">|</text>
                  <text x="460" y="500">appraiseEvidence(evidence,</text>
                  <text x="520" y="516">eventLogs</text>
                  <text x="524" y="532">verInputs)</text>
                  <text x="432" y="548">attestationResult</text>
                  <text x="516" y="548">&lt;=</text>
                  <text x="536" y="548">|</text>
                  <text x="48" y="564">~</text>
                  <text x="536" y="564">~</text>
                  <text x="48" y="580">|</text>
                  <text x="536" y="580">|</text>
                  <text x="116" y="596">[loop]</text>
                  <text x="48" y="612">|</text>
                  <text x="536" y="612">|</text>
                  <text x="148" y="628">[Delta</text>
                  <text x="212" y="628">Evidence</text>
                  <text x="292" y="628">Generation</text>
                  <text x="352" y="628">and</text>
                  <text x="416" y="628">Conveyance]</text>
                  <text x="48" y="644">|</text>
                  <text x="172" y="660">generateClaims(attestingEnvironment)</text>
                  <text x="68" y="676">=&gt;</text>
                  <text x="132" y="676">claimsDelta,</text>
                  <text x="244" y="676">eventLogsDelta</text>
                  <text x="132" y="708">collectClaims(claimsDelta,</text>
                  <text x="308" y="708">?claimSelection)</text>
                  <text x="68" y="724">=&gt;</text>
                  <text x="164" y="724">collectedClaimsDelta</text>
                  <text x="124" y="756">generateEvidence(handle,</text>
                  <text x="268" y="756">attEnvIDs,</text>
                  <text x="400" y="756">collectedClaimsDelta)</text>
                  <text x="68" y="772">=&gt;</text>
                  <text x="116" y="772">evidence</text>
                  <text x="100" y="804">{evidence,</text>
                  <text x="208" y="804">eventLogsDelta}</text>
                  <text x="212" y="836">[Delta</text>
                  <text x="276" y="836">Evidence</text>
                  <text x="356" y="836">Appraisal]</text>
                  <text x="536" y="852">|</text>
                  <text x="452" y="868">appraiseEvidence(evidence,</text>
                  <text x="492" y="884">eventLogsDelta</text>
                  <text x="516" y="900">verInputs)</text>
                  <text x="432" y="916">attestationResult</text>
                  <text x="516" y="916">&lt;=</text>
                  <text x="48" y="980">|</text>
                  <text x="536" y="980">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
.----------.                                                .----------.
| Attester |                                                | Verifier |
'----+-----'                                                '-----+----'
     |                                                            |
 .--------[loop]------------------------------------------------------.
|    |                                                            |    |
| ========================[Handle Generation]========================= |
|    |                                                            |    |
|    |                                                generateHandle() |
|    |                                                   handle<= |    |
|    |                                                            |    |
|    |<------------ subscribe(handle, attEnvIDs, ?claimSelection) |    |
|    | {handle} ------------------------------------------------->|    |
|    |                                                            |    |
| ===============[Evidence Generation and Conveyance]================= |
|    |                                                            |    |
| generateClaims(attestingEnvironment)                            |    |
|    | => claims, eventLogs                                       |    |
|    |                                                            |    |
| collectClaims(claims, ?claimSelection)                          |    |
|    | => collectedClaims                                         |    |
|    |                                                            |    |
| generateEvidence(handle, attEnvIDs, collectedClaims)            |    |
|    | => evidence                                                |    |
|    |                                                            |    |
|    | {handle, evidence, eventLogs} ---------------------------->|    |
|    |                                                            |    |
| ========================[Evidence Appraisal]======================== |
|    |                                                            |    |
|    |                                      appraiseEvidence(evidence, |
|    |                                                      eventLogs, |
|    |                                                      verInputs) |
|    |                                       attestationResult <= |    |
|    ~                                                            ~    |
|    |                                                            |    |
| .--------[loop]----------------------------------------------------. |
||   |                                                            |   ||
|| ============[Delta Evidence Generation and Conveyance]============ ||
||   |                                                            |   ||
|| generateClaims(attestingEnvironment)                           |   ||
||   | => claimsDelta, eventLogsDelta                             |   ||
||   |                                                            |   ||
|| collectClaims(claimsDelta, ?claimSelection)                    |   ||
||   | => collectedClaimsDelta                                    |   ||
||   |                                                            |   ||
|| generateEvidence(handle, attEnvIDs, collectedClaimsDelta)      |   ||
||   | => evidence                                                |   ||
||   |                                                            |   ||
||   | {evidence, eventLogsDelta} ------------------------------->|   ||
||   |                                                            |   ||
|| ====================[Delta Evidence Appraisal]==================== ||
||   |                                                            |   ||
||   |                                     appraiseEvidence(evidence, ||
||   |                                                eventLogsDelta, ||
||   |                                                     verInputs) ||
||   |                                       attestationResult <= |   ||
||   |                                                            |   ||
| '------------------------------------------------------------------' |
 '--------------------------------------------------------------------'
     |                                                            |
]]></artwork>
          </artset>
          <t>In the observer pattern, an observer establishes a direct connection to the observed resources through a subscription mechanism, which is designed specifically for conveying conceptual messages for remote attestation purposes.
This mechanism not only facilitates the initial subscription request but also actively maintains the state of the subscription, ensuring that any changes in the observed resources are consistently communicated to the observer.
It handles the complexities of managing these connections, including the maintenance of pertinent information about the observer's preferences and security requirements, ensuring that the transmission of attestation data remains both secure and relevant to the observer's specific context.</t>
          <t>Setting up subscription state between a Verifier and an Attester is conducted via a subscribe operation.
The subscribe operation is used to convey Handles required for Evidence generation.
Effectively, this allows for a series of Evidence to be pushed to a Verifier, similar to the Uni-Directional model.
In the observer pattern, the Handle Distributor role is optional.
While the model is typically used for direct, bi-lateral subscription relationships where the Verifier generates and provides Handles directly, it is also possible to include the trusted third party that is a Handle Distributor.
A Handle Distributor independently manages the generation and distribution of Handles to other RATS roles.
As a result, scenarios involving more than bi-lateral interactions are enabled.
However, in its basic form, the model assumes direct interaction between an Attester and a Verifier, where the Handle generation is a responsibility taken on by the Verifier roles.</t>
          <t>Handles provided by a specific subscribing Verifier MUST be used in Evidence generation for that specific Verifier.
The streaming model without a Broker uses the same information elements as the Challenge/Response and the Uni-Directional model.
Methods to detect excessive time drift that would render Handles stale and mandate a fresh Handles to be conveyed via another subscribe operation are out-of-scope of this document.</t>
        </section>
        <section anchor="streaming-with-broker">
          <name>Streaming Remote Attestation with a Broker</name>
          <t>This model includes a Broker to facilitate the distribution of messages between RATS roles, such as Attesters and Verifiers.
The Broker is a trusted third party and acts as an intermediary that ensures messages are securely and reliably conveyed between involved RATS roles.
The publish-subscribe messaging pattern is widely used for communication in different areas.
An example for a publish-subscribe model with a Broker is the Message Queuing Telemetry Transport <xref target="MQTT"/>.
Unlike the <em>Streaming Remote Attestation without a Broker</em> interaction model, Attesters are not required to be aware of corresponding Verifiers.
In scenarios with large numbers of Attesters and Verifiers, the publish-subscribe pattern may reduce interdependencies and improve scalability.</t>
          <t>With publish-subscribe, clients typically <em>connect</em> to (or <em>register</em> with) a publish-subscribe server (PubSub server or Broker).
Clients may <em>publish</em> data in the form of a <em>message</em> under a certain <em>topic</em>.
<em>Subscribers</em> to that topic get <em>notified</em> whenever a message arrives under a topic, and the appropriate message is forwarded to them.
Depending on particular publish-subscribe models and implementations, involved roles can be publishers, subscribers or both.</t>
          <t>The Broker and Handle Distributor are considered to be trusted third parties (TTPs) for all other participating roles, including Attesters and Verifiers (see also <xref target="security-and-privacy-considerations"/>).
All roles must establish a trust relationship with the Broker and Handle Distributor, as those are responsible for the secure and reliable dissemination of critical protocol information, such as Handles and Attestation Results.</t>
          <t>Ensuring the security of these trusted third parties is vital, as any compromise could undermine the entire remote attestation procedure.
Therefore, the deployment of Brokers and Handle Distributors requires stringent security measures to protect against unauthorized access and to ensure that they operate as trustworthy facilitators within the remote attestation framework.</t>
          <t>In the following sections, the interaction models <em>Challenge/Response Remote Attestation over Publish-Subscribe</em> and <em>Uni-Directional Remote Attestation over Publish-Subscribe</em> are described.
There are different phases that both models go through:</t>
          <ol spacing="normal" type="1">
            <li>Handle Generation</li>
            <li>Evidence Generation and Conveyance</li>
            <li>Evidence Appraisal</li>
            <li>Attestation Result Generation</li>
          </ol>
          <t>The models only differ in the handle generation phase.
From a remote attestations procedure's point of view Evidence Generation, Conveyance, and Appraisal, as well as Attestation Result Generation are identical in both models.</t>
          <section anchor="handle-generation-for-challengeresponse-remote-attestation-over-publish-subscribe">
            <name>Handle Generation for Challenge/Response Remote Attestation over Publish-Subscribe</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="584" viewBox="0 0 584 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                  <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
                  <path d="M 48,112 L 48,144" fill="none" stroke="black"/>
                  <path d="M 48,176 L 48,224" fill="none" stroke="black"/>
                  <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,32 L 272,64" fill="none" stroke="black"/>
                  <path d="M 336,64 L 336,80" fill="none" stroke="black"/>
                  <path d="M 336,112 L 336,192" fill="none" stroke="black"/>
                  <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
                  <path d="M 536,64 L 536,80" fill="none" stroke="black"/>
                  <path d="M 536,144 L 536,160" fill="none" stroke="black"/>
                  <path d="M 536,208 L 536,224" fill="none" stroke="black"/>
                  <path d="M 560,176 L 560,184" fill="none" stroke="black"/>
                  <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                  <path d="M 272,32 L 400,32" fill="none" stroke="black"/>
                  <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,94 L 208,94" fill="none" stroke="black"/>
                  <path d="M 8,98 L 208,98" fill="none" stroke="black"/>
                  <path d="M 368,94 L 576,94" fill="none" stroke="black"/>
                  <path d="M 368,98 L 576,98" fill="none" stroke="black"/>
                  <path d="M 176,160 L 328,160" fill="none" stroke="black"/>
                  <path d="M 344,176 L 416,176" fill="none" stroke="black"/>
                  <path d="M 56,208 L 232,208" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="352,176 340,170.4 340,181.6 " fill="black" transform="rotate(180,344,176)"/>
                  <polygon class="arrowhead" points="336,160 324,154.4 324,165.6 " fill="black" transform="rotate(0,328,160)"/>
                  <polygon class="arrowhead" points="64,208 52,202.4 52,213.6 " fill="black" transform="rotate(180,56,208)"/>
                  <g class="text">
                    <text x="52" y="52">Attester</text>
                    <text x="308" y="52">PubSub</text>
                    <text x="364" y="52">Server</text>
                    <text x="532" y="52">Verifier</text>
                    <text x="240" y="100">[Handle</text>
                    <text x="320" y="100">Generation]</text>
                    <text x="536" y="116">|</text>
                    <text x="508" y="132">generateHandle()</text>
                    <text x="476" y="148">handle</text>
                    <text x="516" y="148">&lt;=</text>
                    <text x="96" y="164">sub(topic=AttReq)</text>
                    <text x="492" y="180">pub(topic=AttReq</text>
                    <text x="536" y="196">handle)</text>
                    <text x="324" y="212">notify(topic=AttReq,</text>
                    <text x="440" y="212">handle)</text>
                    <text x="336" y="228">|</text>
                    <text x="48" y="244">~</text>
                    <text x="336" y="244">~</text>
                    <text x="536" y="244">~</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.                     .---------------.          .----------.
| Attester |                     | PubSub Server |          | Verifier |
'----+-----'                     '-------+-------'          '-----+----'
     |                                   |                        |
==========================[Handle Generation]===========================
     |                                   |                        |
     |                                   |             generateHandle()
     |                                   |              handle <= |
   sub(topic=AttReq) ------------------->|                        |
     |                                   |<--------- pub(topic=AttReq,
     |                                   |                     handle)
     |<---------------------- notify(topic=AttReq, handle)        |
     |                                   |                        |
     ~                                   ~                        ~
]]></artwork>
            </artset>
            <t>The <em>Challenge/Response Remote Attestation over Publish-Subscribe</em> interaction model uses the same information elements as the <em>Challenge/Response Remote Attestation</em> interaction model.
Handles are generated by the Verifier on a per-request basis.
In the sequence diagram above, the Verifier initiates an attestation by generating a new handle and publishing it to the "AttReq" (= Attestation Request) topic on the PubSub server.
The PubSub server then forwards this handle to the Attester by notifying it.
This mechanism ensures that each handle is uniquely associated with a specific attestation request, thereby enhancing security by preventing replay attacks.</t>
          </section>
          <section anchor="handle-generation-for-uni-directional-remote-attestation-over-publish-subscribe">
            <name>Handle Generation for Uni-Directional Remote Attestation over Publish-Subscribe</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="432" width="584" viewBox="0 0 584 432" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                  <path d="M 48,64 L 48,96" fill="none" stroke="black"/>
                  <path d="M 48,128 L 48,144" fill="none" stroke="black"/>
                  <path d="M 48,176 L 48,400" fill="none" stroke="black"/>
                  <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 120,32 L 120,80" fill="none" stroke="black"/>
                  <path d="M 176,80 L 176,96" fill="none" stroke="black"/>
                  <path d="M 176,128 L 176,152" fill="none" stroke="black"/>
                  <path d="M 176,168 L 176,224" fill="none" stroke="black"/>
                  <path d="M 176,256 L 176,272" fill="none" stroke="black"/>
                  <path d="M 232,32 L 232,80" fill="none" stroke="black"/>
                  <path d="M 272,32 L 272,64" fill="none" stroke="black"/>
                  <path d="M 336,64 L 336,96" fill="none" stroke="black"/>
                  <path d="M 336,128 L 336,336" fill="none" stroke="black"/>
                  <path d="M 400,32 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
                  <path d="M 536,64 L 536,96" fill="none" stroke="black"/>
                  <path d="M 536,128 L 536,176" fill="none" stroke="black"/>
                  <path d="M 536,208 L 536,400" fill="none" stroke="black"/>
                  <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                  <path d="M 120,32 L 232,32" fill="none" stroke="black"/>
                  <path d="M 272,32 L 400,32" fill="none" stroke="black"/>
                  <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                  <path d="M 120,80 L 232,80" fill="none" stroke="black"/>
                  <path d="M 8,110 L 208,110" fill="none" stroke="black"/>
                  <path d="M 8,114 L 208,114" fill="none" stroke="black"/>
                  <path d="M 368,110 L 576,110" fill="none" stroke="black"/>
                  <path d="M 368,114 L 576,114" fill="none" stroke="black"/>
                  <path d="M 176,160 L 328,160" fill="none" stroke="black"/>
                  <path d="M 344,192 L 416,192" fill="none" stroke="black"/>
                  <path d="M 256,304 L 328,304" fill="none" stroke="black"/>
                  <path d="M 56,352 L 224,352" fill="none" stroke="black"/>
                  <path d="M 472,384 L 528,384" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="536,384 524,378.4 524,389.6 " fill="black" transform="rotate(0,528,384)"/>
                  <polygon class="arrowhead" points="352,192 340,186.4 340,197.6 " fill="black" transform="rotate(180,344,192)"/>
                  <polygon class="arrowhead" points="336,304 324,298.4 324,309.6 " fill="black" transform="rotate(0,328,304)"/>
                  <polygon class="arrowhead" points="336,160 324,154.4 324,165.6 " fill="black" transform="rotate(0,328,160)"/>
                  <polygon class="arrowhead" points="64,352 52,346.4 52,357.6 " fill="black" transform="rotate(180,56,352)"/>
                  <g class="text">
                    <text x="52" y="52">Attester</text>
                    <text x="172" y="52">Handle</text>
                    <text x="308" y="52">PubSub</text>
                    <text x="364" y="52">Server</text>
                    <text x="532" y="52">Verifier</text>
                    <text x="176" y="68">Distributor</text>
                    <text x="240" y="116">[Handle</text>
                    <text x="320" y="116">Generation]</text>
                    <text x="96" y="164">sub(topic=Handle)</text>
                    <text x="496" y="196">sub(topic=Handle)</text>
                    <text x="204" y="244">generateHandle()</text>
                    <text x="196" y="260">=&gt;</text>
                    <text x="236" y="260">handle</text>
                    <text x="224" y="292">pub(topic=Handle,</text>
                    <text x="176" y="308">|</text>
                    <text x="216" y="308">handle)</text>
                    <text x="176" y="324">x</text>
                    <text x="316" y="356">notify(topic=Handle,</text>
                    <text x="432" y="356">handle)</text>
                    <text x="336" y="372">|</text>
                    <text x="316" y="388">notify(topic=Handle,</text>
                    <text x="432" y="388">handle)</text>
                    <text x="336" y="404">|</text>
                    <text x="48" y="420">~</text>
                    <text x="336" y="420">~</text>
                    <text x="536" y="420">~</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.  .-------------.    .---------------.          .----------.
| Attester |  |   Handle    |    | PubSub Server |          | Verifier |
'----+-----'  | Distributor |    '-------+-------'          '-----+----'
     |        '------+------'            |                        |
     |               |                   |                        |
==========================[Handle Generation]===========================
     |               |                   |                        |
     |               |                   |                        |
   sub(topic=Handle) ------------------->|                        |
     |               |                   |                        |
     |               |                   |<--------- sub(topic=Handle)
     |               |                   |                        |
     |               |                   |                        |
     |           generateHandle()        |                        |
     |               | => handle         |                        |
     |               |                   |                        |
     |             pub(topic=Handle,     |                        |
     |               | handle) --------->|                        |
     |               x                   |                        |
     |                                   |                        |
     |<--------------------- notify(topic=Handle, handle)         |
     |                                   |                        |
     |                       notify(topic=Handle, handle) ------->|
     |                                   |                        |
     ~                                   ~                        ~
]]></artwork>
            </artset>
            <t>Handles are created by a trusted third party, the Handle Distributor (see <xref target="security-and-privacy-considerations"/>).
In the sequence diagram above, both an Attester and a Verifier subscribe to the topic "Handle" on the PubSub server.
When the Handle Distributor generates and publishes a Handle to the "Handle" topic on the PubSub server, the PubSub server notifies the subscribers, Attester and Verifier, and forwards ("notify") the Handle to them during Handle Generation.</t>
          </section>
          <section anchor="evidence-generation-and-appraisal">
            <name>Evidence Generation and Appraisal</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="672" width="584" viewBox="0 0 584 672" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,64 L 8,96" fill="none" stroke="black"/>
                  <path d="M 8,176 L 8,608" fill="none" stroke="black"/>
                  <path d="M 48,48 L 48,64" fill="none" stroke="black"/>
                  <path d="M 48,96 L 48,152" fill="none" stroke="black"/>
                  <path d="M 48,240 L 48,256" fill="none" stroke="black"/>
                  <path d="M 48,288 L 48,304" fill="none" stroke="black"/>
                  <path d="M 48,336 L 48,368" fill="none" stroke="black"/>
                  <path d="M 48,400 L 48,480" fill="none" stroke="black"/>
                  <path d="M 48,512 L 48,616" fill="none" stroke="black"/>
                  <path d="M 96,64 L 96,96" fill="none" stroke="black"/>
                  <path d="M 272,64 L 272,96" fill="none" stroke="black"/>
                  <path d="M 336,48 L 336,64" fill="none" stroke="black"/>
                  <path d="M 336,96 L 336,152" fill="none" stroke="black"/>
                  <path d="M 336,208 L 336,416" fill="none" stroke="black"/>
                  <path d="M 336,448 L 336,480" fill="none" stroke="black"/>
                  <path d="M 336,512 L 336,616" fill="none" stroke="black"/>
                  <path d="M 400,64 L 400,96" fill="none" stroke="black"/>
                  <path d="M 488,64 L 488,96" fill="none" stroke="black"/>
                  <path d="M 536,48 L 536,64" fill="none" stroke="black"/>
                  <path d="M 536,96 L 536,112" fill="none" stroke="black"/>
                  <path d="M 536,208 L 536,480" fill="none" stroke="black"/>
                  <path d="M 536,592 L 536,616" fill="none" stroke="black"/>
                  <path d="M 560,560 L 560,568" fill="none" stroke="black"/>
                  <path d="M 576,64 L 576,96" fill="none" stroke="black"/>
                  <path d="M 576,176 L 576,608" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 272,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,96 L 96,96" fill="none" stroke="black"/>
                  <path d="M 272,96 L 400,96" fill="none" stroke="black"/>
                  <path d="M 488,96 L 576,96" fill="none" stroke="black"/>
                  <path d="M 344,128 L 424,128" fill="none" stroke="black"/>
                  <path d="M 24,160 L 80,160" fill="none" stroke="black"/>
                  <path d="M 136,160 L 560,160" fill="none" stroke="black"/>
                  <path d="M 24,190 L 136,190" fill="none" stroke="black"/>
                  <path d="M 24,194 L 136,194" fill="none" stroke="black"/>
                  <path d="M 432,190 L 560,190" fill="none" stroke="black"/>
                  <path d="M 432,194 L 560,194" fill="none" stroke="black"/>
                  <path d="M 232,400 L 328,400" fill="none" stroke="black"/>
                  <path d="M 448,464 L 528,464" fill="none" stroke="black"/>
                  <path d="M 24,494 L 208,494" fill="none" stroke="black"/>
                  <path d="M 24,498 L 208,498" fill="none" stroke="black"/>
                  <path d="M 376,494 L 560,494" fill="none" stroke="black"/>
                  <path d="M 376,498 L 560,498" fill="none" stroke="black"/>
                  <path d="M 24,624 L 560,624" fill="none" stroke="black"/>
                  <path d="M 24,160 C 15.16936,160 8,167.16936 8,176" fill="none" stroke="black"/>
                  <path d="M 560,160 C 568.83064,160 576,167.16936 576,176" fill="none" stroke="black"/>
                  <path d="M 24,624 C 15.16936,624 8,616.83064 8,608" fill="none" stroke="black"/>
                  <path d="M 560,624 C 568.83064,624 576,616.83064 576,608" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="536,464 524,458.4 524,469.6 " fill="black" transform="rotate(0,528,464)"/>
                  <polygon class="arrowhead" points="352,128 340,122.4 340,133.6 " fill="black" transform="rotate(180,344,128)"/>
                  <polygon class="arrowhead" points="336,400 324,394.4 324,405.6 " fill="black" transform="rotate(0,328,400)"/>
                  <g class="text">
                    <text x="48" y="36">~</text>
                    <text x="336" y="36">~</text>
                    <text x="536" y="36">~</text>
                    <text x="52" y="84">Attester</text>
                    <text x="308" y="84">PubSub</text>
                    <text x="364" y="84">Server</text>
                    <text x="532" y="84">Verifier</text>
                    <text x="500" y="132">sub(topic=AttEv)</text>
                    <text x="536" y="148">|</text>
                    <text x="108" y="164">[loop]</text>
                    <text x="48" y="180">|</text>
                    <text x="336" y="180">|</text>
                    <text x="536" y="180">|</text>
                    <text x="176" y="196">[Evidence</text>
                    <text x="260" y="196">Generation</text>
                    <text x="320" y="196">and</text>
                    <text x="384" y="196">Conveyance]</text>
                    <text x="48" y="212">|</text>
                    <text x="164" y="228">generateClaims(attestingEnvironment)</text>
                    <text x="68" y="244">=&gt;</text>
                    <text x="112" y="244">claims,</text>
                    <text x="184" y="244">eventLogs</text>
                    <text x="104" y="276">collectClaims(claims,</text>
                    <text x="260" y="276">?claimSelection)</text>
                    <text x="68" y="292">=&gt;</text>
                    <text x="144" y="292">collectedClaims</text>
                    <text x="116" y="324">generateEvidence(handle,</text>
                    <text x="260" y="324">attEnvIDs,</text>
                    <text x="220" y="340">collectedClaims)</text>
                    <text x="68" y="356">=&gt;</text>
                    <text x="116" y="356">evidence</text>
                    <text x="92" y="388">pub(topic=AttEv,</text>
                    <text x="96" y="404">evidence,</text>
                    <text x="180" y="404">eventLogs)</text>
                    <text x="376" y="436">notify(topic=AttEv,</text>
                    <text x="392" y="452">evidence,</text>
                    <text x="396" y="468">eventLogs)</text>
                    <text x="248" y="500">[Evidence</text>
                    <text x="332" y="500">Appraisal]</text>
                    <text x="536" y="516">|</text>
                    <text x="496" y="532">appraiseEvidence(</text>
                    <text x="528" y="548">evidence,</text>
                    <text x="520" y="564">eventLogs</text>
                    <text x="524" y="580">verInputs)</text>
                    <text x="432" y="596">attestationResult</text>
                    <text x="516" y="596">&lt;=</text>
                    <text x="48" y="644">|</text>
                    <text x="336" y="644">|</text>
                    <text x="536" y="644">|</text>
                    <text x="48" y="660">~</text>
                    <text x="336" y="660">~</text>
                    <text x="536" y="660">~</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
     ~                                   ~                        ~
     |                                   |                        |
.----+-----.                     .-------+-------.          .-----+----.
| Attester |                     | PubSub Server |          | Verifier |
'----+-----'                     '-------+-------'          '-----+----'
     |                                   |                        |
     |                                   |<---------- sub(topic=AttEv)
     |                                   |                        |
 .--------[loop]------------------------------------------------------.
|    |                                   |                        |    |
| ===============[Evidence Generation and Conveyance]================= |
|    |                                   |                        |    |
| generateClaims(attestingEnvironment)   |                        |    |
|    | => claims, eventLogs              |                        |    |
|    |                                   |                        |    |
| collectClaims(claims, ?claimSelection) |                        |    |
|    | => collectedClaims                |                        |    |
|    |                                   |                        |    |
| generateEvidence(handle, attEnvIDs,    |                        |    |
|    |             collectedClaims)      |                        |    |
|    | => evidence                       |                        |    |
|    |                                   |                        |    |
|  pub(topic=AttEv,                      |                        |    |
|    | evidence, eventLogs) ------------>|                        |    |
|    |                                   |                        |    |
|    |                               notify(topic=AttEv,          |    |
|    |                                   |  evidence,             |    |
|    |                                   |  eventLogs) ---------->|    |
|    |                                   |                        |    |
| ========================[Evidence Appraisal]======================== |
|    |                                   |                        |    |
|    |                                   |           appraiseEvidence( |
|    |                                   |                   evidence, |
|    |                                   |                  eventLogs, |
|    |                                   |                  verInputs) |
|    |                                   |   attestationResult <= |    |
|    |                                   |                        |    |
 '--------------------------------------------------------------------'
     |                                   |                        |
     ~                                   ~                        ~
]]></artwork>
            </artset>
            <t>Exactly as in the Challenge/Response and Uni-Directional interaction models, there is an Evidence Generation-Appraisal loop, in which the Attester generates Evidence and the Verifier appraises it.
In the Publish-Subscribe model above, the Attester publishes Evidence to the topic "AttEv" (= Attestation Evidence) on the PubSub server, to which a Verifier subscribed before.
The PubSub server notifies Verifiers, accordingly, by forwarding the attestation Evidence.
Although the above diagram depicts only full attestation Evidence and Event Logs, later attestations may use "deltas' for Evidence and Event Logs.
Verifiers appraise the Evidence and publish the Attestation Result to topic "AttRes" (= Attestation Result) on the PubSub server.</t>
          </section>
          <section anchor="attestation-result-generation">
            <name>Attestation Result Generation</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="584" viewBox="0 0 584 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                  <path d="M 8,64 L 8,96" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,320" fill="none" stroke="black"/>
                  <path d="M 48,48 L 48,64" fill="none" stroke="black"/>
                  <path d="M 48,96 L 48,112" fill="none" stroke="black"/>
                  <path d="M 48,144 L 48,200" fill="none" stroke="black"/>
                  <path d="M 48,216 L 48,328" fill="none" stroke="black"/>
                  <path d="M 96,64 L 96,96" fill="none" stroke="black"/>
                  <path d="M 112,64 L 112,96" fill="none" stroke="black"/>
                  <path d="M 136,48 L 136,64" fill="none" stroke="black"/>
                  <path d="M 136,96 L 136,112" fill="none" stroke="black"/>
                  <path d="M 136,216 L 136,328" fill="none" stroke="black"/>
                  <path d="M 240,64 L 240,96" fill="none" stroke="black"/>
                  <path d="M 272,64 L 272,96" fill="none" stroke="black"/>
                  <path d="M 336,48 L 336,64" fill="none" stroke="black"/>
                  <path d="M 336,96 L 336,112" fill="none" stroke="black"/>
                  <path d="M 336,176 L 336,200" fill="none" stroke="black"/>
                  <path d="M 336,216 L 336,272" fill="none" stroke="black"/>
                  <path d="M 336,304 L 336,328" fill="none" stroke="black"/>
                  <path d="M 400,64 L 400,96" fill="none" stroke="black"/>
                  <path d="M 488,64 L 488,96" fill="none" stroke="black"/>
                  <path d="M 536,48 L 536,64" fill="none" stroke="black"/>
                  <path d="M 536,96 L 536,112" fill="none" stroke="black"/>
                  <path d="M 536,176 L 536,200" fill="none" stroke="black"/>
                  <path d="M 536,272 L 536,328" fill="none" stroke="black"/>
                  <path d="M 560,240 L 560,248" fill="none" stroke="black"/>
                  <path d="M 576,64 L 576,96" fill="none" stroke="black"/>
                  <path d="M 576,224 L 576,320" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 112,64 L 240,64" fill="none" stroke="black"/>
                  <path d="M 272,64 L 400,64" fill="none" stroke="black"/>
                  <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                  <path d="M 8,96 L 96,96" fill="none" stroke="black"/>
                  <path d="M 112,96 L 240,96" fill="none" stroke="black"/>
                  <path d="M 272,96 L 400,96" fill="none" stroke="black"/>
                  <path d="M 488,96 L 576,96" fill="none" stroke="black"/>
                  <path d="M 8,126 L 160,126" fill="none" stroke="black"/>
                  <path d="M 8,130 L 160,130" fill="none" stroke="black"/>
                  <path d="M 416,126 L 576,126" fill="none" stroke="black"/>
                  <path d="M 416,130 L 576,130" fill="none" stroke="black"/>
                  <path d="M 192,176 L 328,176" fill="none" stroke="black"/>
                  <path d="M 24,208 L 80,208" fill="none" stroke="black"/>
                  <path d="M 136,208 L 560,208" fill="none" stroke="black"/>
                  <path d="M 344,240 L 416,240" fill="none" stroke="black"/>
                  <path d="M 144,288 L 280,288" fill="none" stroke="black"/>
                  <path d="M 24,336 L 560,336" fill="none" stroke="black"/>
                  <path d="M 24,208 C 15.16936,208 8,215.16936 8,224" fill="none" stroke="black"/>
                  <path d="M 560,208 C 568.83064,208 576,215.16936 576,224" fill="none" stroke="black"/>
                  <path d="M 24,336 C 15.16936,336 8,328.83064 8,320" fill="none" stroke="black"/>
                  <path d="M 560,336 C 568.83064,336 576,328.83064 576,320" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="352,240 340,234.4 340,245.6 " fill="black" transform="rotate(180,344,240)"/>
                  <polygon class="arrowhead" points="336,176 324,170.4 324,181.6 " fill="black" transform="rotate(0,328,176)"/>
                  <polygon class="arrowhead" points="152,288 140,282.4 140,293.6 " fill="black" transform="rotate(180,144,288)"/>
                  <g class="text">
                    <text x="48" y="36">~</text>
                    <text x="136" y="36">~</text>
                    <text x="336" y="36">~</text>
                    <text x="536" y="36">~</text>
                    <text x="52" y="84">Attester</text>
                    <text x="152" y="84">Relying</text>
                    <text x="208" y="84">Party</text>
                    <text x="308" y="84">PubSub</text>
                    <text x="364" y="84">Server</text>
                    <text x="532" y="84">Verifier</text>
                    <text x="212" y="132">[Attestation</text>
                    <text x="292" y="132">Result</text>
                    <text x="368" y="132">Generation]</text>
                    <text x="136" y="148">|</text>
                    <text x="336" y="148">|</text>
                    <text x="536" y="148">|</text>
                    <text x="160" y="164">sub(topic=AttRes,</text>
                    <text x="328" y="164">|</text>
                    <text x="528" y="164">|</text>
                    <text x="152" y="180">handle)</text>
                    <text x="136" y="196">|</text>
                    <text x="108" y="212">[loop]</text>
                    <text x="536" y="228">|</text>
                    <text x="492" y="244">pub(topic=AttRes</text>
                    <text x="492" y="260">attestationResult)</text>
                    <text x="372" y="292">notify(topic=AttRes,</text>
                    <text x="420" y="308">attestationResult)</text>
                    <text x="48" y="356">|</text>
                    <text x="136" y="356">|</text>
                    <text x="336" y="356">|</text>
                    <text x="536" y="356">|</text>
                    <text x="48" y="372">~</text>
                    <text x="136" y="372">~</text>
                    <text x="336" y="372">~</text>
                    <text x="536" y="372">~</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
     ~          ~                        ~                        ~
     |          |                        |                        |
.----+-----. .--+------------.   .-------+-------.          .-----+----.
| Attester | | Relying Party |   | PubSub Server |          | Verifier |
'----+-----' '--+------------'   '-------+-------'          '-----+----'
     |          |                        |                        |
====================[Attestation Result Generation]=====================
     |          |                        |                        |
     |     sub(topic=AttRes,            |                        |
     |         handle) ----------------->|                        |
     |          |                        |                        |
 .--------[loop]------------------------------------------------------.
|    |          |                        |                        |    |
|    |          |                        |<--------- pub(topic=AttRes, |
|    |          |                        |          attestationResult) |
|    |          |                        |                        |    |
|    |          |<----------------- notify(topic=AttRes,          |    |
|    |          |                        | attestationResult)     |    |
|    |          |                        |                        |    |
 '--------------------------------------------------------------------'
     |          |                        |                        |
     ~          ~                        ~                        ~
]]></artwork>
            </artset>
            <t>Attestation Result Generation is the same for both publish-subscribe models,<em>Challenge/Response Remote Attestation over Publish-Subscribe</em> and <em>Uni-Directional Remote Attestation over Publish-Subscribe</em>.
Relying Parties subscribe to topic <tt>AttRes</tt> (= Attestation Result) on the PubSub server.
The PubSub server forwards Attestation Results to the Relying Parties as soon as they are published to topic <tt>AttRes</tt>.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: Please remove this section as well as references to <xref target="BCP205"/> before AUTH48.</t>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="BCP205"/>.
The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.
Please note that the listing of any individual implementation here does not imply endorsement by the IETF.
Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a catalog of available implementations or their features.
Readers are advised to note that other implementations may exist.</t>
      <t>According to <xref target="BCP205"/>,
"this will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.
It is up to the individual working groups to use this information as they see fit".</t>
      <section anchor="implementer">
        <name>Implementer</name>
        <t>The open-source implementation was initiated and is maintained by the Fraunhofer Institute for Secure Information Technology SIT.</t>
      </section>
      <section anchor="implementation-name">
        <name>Implementation Name</name>
        <t>The open-source implementation is named "CHAllenge-Response based Remote Attestation" or in short: CHARRA.</t>
      </section>
      <section anchor="implementation-url">
        <name>Implementation URL</name>
        <t>The open-source implementation project resource can be located via: <eref target="https://github.com/fraunhofer-sit/charra">https://github.com/fraunhofer-sit/charra</eref></t>
      </section>
      <section anchor="maturity">
        <name>Maturity</name>
        <t>The code's level of maturity is considered to be "prototype".</t>
      </section>
      <section anchor="coverage-and-version-compatibility">
        <name>Coverage and Version Compatibility</name>
        <t>The current version ('6194b3b') implements a challenge/response interaction model and is aligned with the exemplary specification of the CoAP FETCH bodies defined in Section <xref target="coap-fetch-bodies"/> of this document.</t>
      </section>
      <section anchor="license">
        <name>License</name>
        <t>The CHARRA project and all corresponding code and data maintained on GitHub are provided under the BSD 3-Clause "New" or "Revised" license.</t>
      </section>
      <section anchor="implementation-dependencies">
        <name>Implementation Dependencies</name>
        <t>The implementation requires the use of the Trusted Computing Group (TCG) Trusted Software Stack (TSS), and an HSM interoperable with the Trusted Platform Module Library specifications, e.g., a Trusted Platform Module (TPM) 2.0 or equivalent implementation.
The corresponding project resources (code and data) for Linux-based operating systems are maintained on GitHub at <eref target="https://github.com/tpm2-software/tpm2-tss/">https://github.com/tpm2-software/tpm2-tss/</eref>.</t>
        <t>The implementation uses the Constrained Application Protocol <xref target="RFC7252"/> (http://coap.technology/) and the Concise Binary Object Representation <xref target="RFC7049"/> (https://cbor.io/).</t>
      </section>
      <section anchor="contact">
        <name>Contact</name>
        <t>Michael Eckel (michael.eckel@sit.fraunhofer.de)</t>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>This document outlines three interaction models for remote attestation procedures (RATS) <xref target="RFC9334"/>.
While the subsequent sections address additional security and privacy considerations, the security considerations from <xref section="12" sectionFormat="of" target="RFC9334"/> must also be adhered to.
Additionally, for TPM-based remote attestation, the security considerations outlined in <xref section="5" sectionFormat="of" target="RFC9683"/> should be taken into account.</t>
      <section anchor="cryptographic-blinding">
        <name>Cryptographic Blinding</name>
        <t>In a remote attestation procedure, both the Verifier and the Attester may choose to cryptographically blind certain attributes to enhance privacy.
For example, specific information can be included in the signature after being processed through a one-way function, such as a hash function.</t>
      </section>
      <section anchor="trust-assumptions-on-the-handle-distributor">
        <name>Trust Assumptions on the Handle Distributor</name>
        <t>The handle distributor, as a third party in remote attestation scenarios, holds a critical position similar to that of a Trusted Third Party (TTP).
Given its role in generating handles, it has the potential to influence the attestation process significantly.
The integrity and reliability of the handles it produces are pivotal for ensuring that the attestation evidence remains trustworthy and that the attestation process is not susceptible to manipulation or interference.</t>
        <section anchor="security-assumptions">
          <name>Security Assumptions</name>
          <ul spacing="normal">
            <li>
              <em>Integrity and Authenticity</em>:
It is assumed that the handle distributor operates with high levels of integrity and authenticity.
Handles generated by the distributor must be secure, unique, and verifiable.
This ensures that they cannot be forged or reused maliciously.</li>
            <li>
              <em>Isolation and Protection</em>:
The handle distributor must be isolated and protected from unauthorized access and attacks.
This includes physical security measures for hardware that might house the handle distributor's operations, as well as cybersecurity measures to protect against online threats.</li>
            <li>
              <em>Auditability</em>:
The operations of the handle distributor should be auditable.
This allows for the verification of its compliance with security policies and the integrity of its operations.
Regular audits help to ensure that the handle distributor is functioning as expected and has not been compromised.</li>
            <li>
              <em>Transparency</em>:
While maintaining security and confidentiality, the processes by which handles are generated and distributed should be as transparent as possible to authorized parties.
This helps in building trust and verifying that handles are distributed in a fair and unbiased manner.</li>
          </ul>
        </section>
        <section anchor="mitigating-risks">
          <name>Mitigating Risks</name>
          <t>To mitigate risks associated with the handle distributor being a central point of potential failure or attack, several measures should be implemented:</t>
          <ul spacing="normal">
            <li>
              <em>Redundancy</em>:
Deploying multiple, geographically dispersed handle distributors can ensure continuity of service even if one distributor is compromised or fails.</li>
            <li>
              <em>Cryptographic Security</em>:
Using strong cryptographic techniques to protect the generation and transmission of handles ensures that they cannot be tampered with during distribution.</li>
            <li>
              <em>Certification and Compliance</em>:
The handle distributor should comply with relevant security standards and undergo regular security certifications.
This ensures that they meet industry-wide security benchmarks and maintain high levels of trust.</li>
          </ul>
          <t>By defining and adhering to these security assumptions, the role of the handle distributor in remote attestation procedures can be securely managed, minimizing risks and enhancing the overall trust in the attestation process.</t>
        </section>
      </section>
      <section anchor="security-considerations-for-brokers-in-remote-attestation">
        <name>Security Considerations for Brokers in Remote Attestation</name>
        <t>The role of the Broker in the "Streaming Remote Attestation with a Broker model" introduces potential security vulnerabilities, including the ability to perform cross-application attacks by manipulating handles and topics.
To mitigate these risks, it is essential to implement robust security measures:</t>
        <ul spacing="normal">
          <li>
            <em>End-to-End Authentication:</em>
Establishing end-to-end authenticated channels between Attesters and Verifiers ensures that data integrity and authenticity are preserved across the communication process.
This measure prevents the Broker from altering the content of the messages, including Handles and other sensitive data.</li>
          <li>
            <em>Strong Isolation of Topics:</em>
Implementing strong isolation mechanisms for topics can help prevent the Broker from inadvertently or maliciously routing notifications to unauthorized parties.
This includes using secure naming conventions and access controls that restrict the Broker's ability to manipulate topic subscriptions.</li>
          <li>
            <em>Trusted Association Verification:</em>
To further safeguard against confusion attacks where the Broker might misroute notifications, mechanisms should be in place to verify the trust association between senders and receivers continuously.
This can be facilitated by cryptographic assurances, such as digital signatures and trusted certificates that validate the sender's identity and the integrity of the message content.</li>
          <li>
            <em>Audit and Monitoring:</em>
Regular audits and real-time monitoring of Broker activities can detect and respond to anomalous behavior that might indicate security breaches or manipulation attempts.
Logging all actions performed by the Broker provides an audit trail that can be critical for forensic analysis.</li>
          <li>
            <em>Broker as a Trusted Third Party (TTP):</em>
Recognizing the Broker as a TTP necessitates stringent security certifications and compliance with security standards to ensure that they operate under strict governance and security protocols.
This includes regular security assessments and certifications that validate the Broker's security practices.</li>
        </ul>
        <t>By addressing these vulnerabilities proactively, the integrity and confidentiality of the attestation process can be maintained, reducing the risks associated with Broker-mediated communication in remote attestation scenarios.
It is crucial for solution architects to incorporate these security measures during the design and deployment phases to ensure that the attestation process remains secure and trustworthy.</t>
      </section>
      <section anchor="additional-application-specific-security-considerations">
        <name>Additional Application-Specific Security Considerations</name>
        <t>The security and privacy requirements for remote attestation can vary significantly based on the deployment environment, the nature of the attestation mechanisms used, and the specific threats each scenario faces.
This section details additional security considerations that are pertinent to the interaction models discussed in this document.</t>
        <section anchor="confidentiality">
          <name>Confidentiality</name>
          <t>The need for confidentiality in the transmission of attestation information is critical, particularly when exchanges occur over public or untrusted networks, such as the public Internet.
For instance, in the <em>Streaming Remote Attestation with a Broker</em> model (cf.<xref target="streaming-with-broker"/>), where data might traverse multiple nodes, employing TLS can provide necessary confidentiality protections.
Similarly, for scenarios involving sensitive environments like carrier management networks, evaluating the confidentiality of the transport medium is crucial to ensure that attestation data remains secure against interception or eavesdropping.</t>
        </section>
        <section anchor="mutual-authentication">
          <name>Mutual Authentication</name>
          <t>Mutual authentication is particularly relevant in models such as the <em>Challenge/Response Remote Attestation</em> (cf. <xref target="challenge-response"/>) where both the Attester and the Verifier engage in bidirectional exchanges of sensitive information.
Ensuring that both parties can authenticate each other prevents impersonation attacks, enhancing the trustworthiness of the attestation results.</t>
        </section>
        <section anchor="hardware-enforcementsupport">
          <name>Hardware Enforcement/Support</name>
          <t>In environments where the integrity and security of attestation evidence are paramount, hardware-based security features play a critical role.
Technologies like Hardware Security Modules (HSMs), Physically Unclonable Functions (PUFs), and Trusted Execution Environments (TEEs) provide robust protections against tampering and unauthorized access.
These are especially important in high-security settings such as financial services or military applications, where attestation processes must rely on physically secure and tamper-resistant components to meet stringent regulatory and security standards.</t>
          <t>By addressing these application-specific security requirements within the context of defined interaction models, security strategies can be tailored to fit the unique challenges and operational contexts of different attestation scenarios.</t>
        </section>
      </section>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Olaf Bergmann, Michael Richardson, and Ned Smith</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3161">
          <front>
            <title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
            <seriesInfo name="DOI" value="10.17487/RFC3161"/>
            <seriesInfo name="RFC" value="3161"/>
            <author fullname="C. Adams" initials="C." surname="Adams"/>
            <author fullname="P. Cain" initials="P." surname="Cain"/>
            <author fullname="D. Pinkas" initials="D." surname="Pinkas"/>
            <author fullname="R. Zuccherato" initials="R." surname="Zuccherato"/>
            <date month="August" year="2001"/>
            <abstract>
              <t>This document describes the format of a request sent to a Time Stamping Authority (TSA) and of the response that is returned. It also establishes several security-relevant requirements for TSA operation, with regards to processing requests to generate responses. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <seriesInfo name="DOI" value="10.17487/RFC5280"/>
            <seriesInfo name="RFC" value="5280"/>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7049"/>
            <seriesInfo name="RFC" value="7049"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <seriesInfo name="DOI" value="10.17487/RFC7252"/>
            <seriesInfo name="RFC" value="7252"/>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
        </reference>
        <referencegroup anchor="BCP205" target="https://www.rfc-editor.org/info/bcp205">
          <reference anchor="RFC7942" target="https://www.rfc-editor.org/info/rfc7942">
            <front>
              <title>Improving Awareness of Running Code: The Implementation Status Section</title>
              <seriesInfo name="DOI" value="10.17487/RFC7942"/>
              <seriesInfo name="RFC" value="7942"/>
              <seriesInfo name="BCP" value="205"/>
              <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
              <author fullname="A. Farrel" initials="A." surname="Farrel"/>
              <date month="July" year="2016"/>
              <abstract>
                <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
                <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
              </abstract>
            </front>
          </reference>
        </referencegroup>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <seriesInfo name="DOI" value="10.17487/RFC9334"/>
            <seriesInfo name="RFC" value="9334"/>
            <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>
        </reference>
        <reference anchor="RFC9683">
          <front>
            <title>Remote Integrity Verification of Network Devices Containing Trusted Platform Modules</title>
            <seriesInfo name="DOI" value="10.17487/RFC9683"/>
            <seriesInfo name="RFC" value="9683"/>
            <author fullname="G. C. Fedorkow" initials="G. C." role="editor" surname="Fedorkow"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="J. Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay"/>
            <date month="December" year="2024"/>
            <abstract>
              <t>This document describes a workflow for remote attestation of the integrity of firmware and software installed on network devices that contain Trusted Platform Modules (TPMs), as defined by the Trusted Computing Group (TCG), or equivalent hardware implementations that include the protected capabilities, as provided by TPMs.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-rats-epoch-markers">
          <front>
            <title>Epoch Markers</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-epoch-markers-00"/>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="10" month="October" year="2024"/>
            <abstract>
              <t>   This document defines Epoch Markers as a way to establish a notion of
   freshness among actors in a distributed system.  Epoch Markers are
   similar to "time ticks" and are produced and distributed by a
   dedicated system, the Epoch Bell.  Systems that receive Epoch Markers
   do not have to track freshness using their own understanding of time
   (e.g., via a local real-time clock).  Instead, the reception of a
   certain Epoch Marker establishes a new epoch that is shared between
   all recipients.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <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>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <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>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.birkholz-rats-tuda">
          <front>
            <title>Time-Based Uni-Directional Attestation</title>
            <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-tuda-07"/>
            <author fullname="Andreas Fuchs" initials="A." surname="Fuchs">
              <organization>Fraunhofer Institute for Secure Information Technology</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer Institute for Secure Information Technology</organization>
            </author>
            <author fullname="Ira McDonald" initials="I." surname="McDonald">
              <organization>High North Inc</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="10" month="July" year="2022"/>
            <abstract>
              <t>   This document defines the method and bindings used to convey Evidence
   via Time-based Uni-Directional Attestation (TUDA) in Remote
   ATtestation procedureS (RATS).  TUDA does not require a challenge-
   response handshake and thereby does not rely on the conveyance of a
   nonce to prove freshness of remote attestation Evidence.  TUDA
   enables the creation of Secure Audit Logs that can constitute
   believable Evidence about both current and past operational states of
   an Attester.  In TUDA, RATS entities require access to a Handle
   Distributor to which a trustable and synchronized time-source is
   available.  The Handle Distributor takes on the role of a Time Stamp
   Authority (TSA) to distribute Handles incorporating Time Stamp Tokens
   (TST) to the RATS entities.  RATS require an Attesting Environment
   that generates believable Evidence.  While a TPM is used as the
   corresponding root of trust in this specification, any other type of
   root of trust can be used with TUDA.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.tschofenig-rats-psa-token">
          <front>
            <title>Arm's Platform Security Architecture (PSA) Attestation Token</title>
            <seriesInfo name="Internet-Draft" value="draft-tschofenig-rats-psa-token-24"/>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
         </author>
            <author fullname="Simon Frost" initials="S." surname="Frost">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Mathias Brossard" initials="M." surname="Brossard">
              <organization>Arm Limited</organization>
            </author>
            <author fullname="Adrian L. Shaw" initials="A. L." surname="Shaw">
              <organization>HP Labs</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <date day="23" month="September" year="2024"/>
            <abstract>
              <t>   The Arm Platform Security Architecture (PSA) is a family of hardware
   and firmware security specifications, as well as open-source
   reference implementations, to help device makers and chip
   manufacturers build best-practice security into products.  Devices
   that are PSA compliant can produce attestation tokens as described in
   this memo, which are the basis for many different protocols,
   including secure provisioning and network access control.  This
   document specifies the PSA attestation token structure and semantics.

   The PSA attestation token is a profile of the Entity Attestation
   Token (EAT).  This specification describes what claims are used in an
   attestation token generated by PSA compliant systems, how these
   claims get serialized to the wire, and how they are cryptographically
   protected.

   This informational document is published as an independent submission
   to improve interoperability with Arm's architecture.  It is not a
   standard nor a product of the IETF.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-rats-uccs">
          <front>
            <title>A CBOR Tag for Unprotected CWT Claims Sets</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-uccs-12"/>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Jeremy O'Donoghue" initials="J." surname="O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Nancy Cam-Winget" initials="N." surname="Cam-Winget">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="3" month="November" year="2024"/>
            <abstract>
              <t>   This document defines the Unprotected CWT Claims Set (UCCS), a data
   format for representing a CBOR Web Token (CWT) Claims Set without
   protecting it by a signature, message authentication code (MAC), or
   encryption.  UCCS enables the use of CWT claims in environments where
   protection is provided by other means, such as secure communication
   channels or trusted execution environments.  This specification
   defines a CBOR tag for UCCS and describes the UCCS format, its
   encoding, and processing considerations, and discusses security
   implications of using unprotected claims sets.


   // (This editors' note will be removed by the RFC editor:) The
   // present revision (-12) contains remaining document changes based
   // on feedback from the IESG evaluation and has been submitted as
   // input to IETF 121.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="DAA">
          <front>
            <title>Direct Anonymous Attestation</title>
            <seriesInfo name="page" value="132-145"/>
            <seriesInfo name="ACM" value="Proceedings of the 11th ACM conference on Computer and Communications Security "/>
            <author initials="E." surname="Brickell" fullname="Ernie Brickell">
              <organization/>
            </author>
            <author initials="J." surname="Camenisch" fullname="Jan Camenisch">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Liqun Chen">
              <organization/>
            </author>
            <date year="2004"/>
          </front>
        </reference>
        <reference anchor="turtles">
          <front>
            <title>Turtles All the Way Down: Foundation, Edifice, and Ruin in Faulkner and McCarthy</title>
            <seriesInfo name="DOI" value="10.1353/fau.2010.0002"/>
            <seriesInfo name="The Faulkner Journal" value="25.2"/>
            <author initials="R." surname="Rudnicki" fullname="Robert Rudnicki">
              <organization/>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="MQTT">
          <front>
            <title>Message Queuing Telemetry Transport (MQTT) Version 5.0 Committee Specification 02</title>
            <seriesInfo name="Specification" value="Version 5.0"/>
            <author initials="" surname="OASIS" fullname="Organization for the Advancement of Structured Information Standards">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="DesignPatterns">
          <front>
            <title>Design Patterns - Elements of Reusable Object-Oriented Software</title>
            <seriesInfo name="Publisher" value="Addison-Wesley"/>
            <author initials="E." surname="Gamma" fullname="Erich Gamma">
              <organization/>
            </author>
            <author initials="R." surname="Helm" fullname="Richard Helm">
              <organization/>
            </author>
            <author initials="R." surname="Johnson" fullname="Ralph Johnson">
              <organization/>
            </author>
            <author initials="J." surname="Vlissides" fullname="John Vlissides">
              <organization/>
            </author>
            <date year="1994"/>
          </front>
        </reference>
        <reference anchor="ISIS">
          <front>
            <title>Exploiting Virtual Synchrony in Distributed Systems</title>
            <seriesInfo name="DOI" value="10.1145/41457.37515"/>
            <author initials="K." surname="Birman" fullname="Ken Paul Birman">
              <organization/>
            </author>
            <author initials="T." surname="Joseph" fullname="Thomas A. Joseph">
              <organization/>
            </author>
            <date year="1987"/>
          </front>
        </reference>
        <reference anchor="lampson06">
          <front>
            <title>Practical Principles for Computer Security</title>
            <author initials="B." surname="Lampson" fullname="Butler Lampson">
              <organization/>
            </author>
            <date year="2006"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-rats-endorsements">
          <front>
            <title>RATS Endorsements</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-endorsements-05"/>
            <author fullname="Dave Thaler" initials="D." surname="Thaler">
              <organization>Armidale Consulting</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <date day="8" month="November" year="2024"/>
            <abstract>
              <t>   In the IETF Remote Attestation Procedures (RATS) architecture, a
   Verifier accepts Evidence and, using Appraisal Policy typically with
   additional input from Endorsements and Reference Values, generates
   Attestation Results in formats that are useful for Relying Parties.
   This document illustrates the purpose and role of Endorsements and
   discusses some considerations in the choice of message format for
   Endorsements in the scope of the RATS architecture.

              </t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <?line 1032?>

<section anchor="coap-fetch-bodies">
      <name>CDDL Specification for a simple CoAP Challenge/Response Interaction</name>
      <t>The following CDDL specification is an exemplary proof-of-concept to illustrate a potential implementation of the Challenge/Response Interaction Model.
The communication protocol used is CoAP.
Both the request message and the response message are exchanged via the FETCH operation and corresponding FETCH request and FETCH response body.</t>
      <t>In this example, Evidence is created via the root-of-trust for reporting primitive operation "quote" that is provided by a TPM 2.0.</t>
      <sourcecode type="cddl">
charra-bodies = charra-attestation-request / charra-attestation-response

charra-attestation-request = [
    hello: bool,    ; if true, the TPM 2.0 AK Cert shall be conveyed
    key-id: bytes,  ; the key ID to use for signing
    nonce: bytes,   ; a (random) nonce, providing freshness and/or recentness
    pcr-selections: [ * pcr-selection ]
]

pcr-selection = [
    tcg-hash-alg-id: uint .size 2,  ; TPM2_ALG_ID
    pcrs: [
        pcr: uint .size 2
    ]
]

charra-attestation-response = [
    attestation-data: bytes,  ; TPMS_ATTEST.quoted
    tpm2-signature: bytes,
    ? ak-cert: bytes,         ; TPM2 attestation key certificate (AK Cert)
]
</sourcecode>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
