<?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-12" category="info" 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-12"/>
    <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="January" day="23"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 128?>

<t>This document describes interaction models for remote attestation procedures (RATS).
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 134?>

<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 defines interaction models that can be used in specific RATS-related solution documents.
The primary focus of this document is the conveyance of attestation Evidence. 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 attestation Evidence from an Attester to a Verifier.
While the conveyance of other Conceptual Messages is out of scope, the models described in this document may be adapted to the conveyance of Endorsements or Attestation Results, or supplemental messages, such as 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.
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)). It is useful but not necessary for readers of this document to be familiar with the Concept Data/Message flows as described in <xref section="3.1" sectionFormat="of" target="RFC9334"/> and the definition of Attestation in general as described in <xref target="I-D.ietf-rats-tpm-based-network-device-attest"/>.</t>
      </section>
    </section>
    <section anchor="scope-and-intent">
      <name>Scope and Intent</name>
      <t>This document outlines common interaction models between RATS roles.
This document illustrates interaction models focusing on conveying Evidence about boot-time integrity from Attesters to Verifiers.
This document does not exclude the application of those interaction models to runtime integrity or the conveyance of other RATS Conceptual Messages.
This document does not cover every detail about Evidence conveyance.
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 through a digital signature over Attestation Evidencewhich may be symmetric, like an HMAC, 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 confidential channel with encryption.</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>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>
        <dt>Evidence Protection:</dt>
        <dd>
          <t>Evidence MUST be a set of well-formatted and well-protected Claims that an Attester can create and convey to a Verifier in a tamper-evident manner.</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>Attestation Key IDs (<tt>attKeyIDs</tt>):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>One or more identifiers associated with corresponding attestation keys (Authentication Secrets) used to protect Evidence Claims produced by Attesting Environments of an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>While a Verifier may (and typically does) not know an Attesting Environment's Attestation Key, each distinct Attesting Environment has access to a protected capability that includes an Attestation Key.
Therefore, an Attestation Key ID can also identify an Attesting Environment.
If no attestation key identifiers are provided, a local default applies based on the Attester.
For example, all Attesting Environments will report.</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.birkholz-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>Reference Values (<tt>refValues</tt>)</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Reference Values as defined in <xref section="8.3" sectionFormat="of" target="RFC9334"/>. This specific type of Claims is used to appraise Claims incorporated in Evidence. For example, Reference Values MAY be Reference Integrity Measurements (RIM) or assertions that are implicitly trusted because they are signed by a trusted authority (see Endorsements in <xref target="RFC9334"/>). Reference Values typically represent (trusted) Claim sets about an Attester's intended platform operational state.</t>
        </dd>
        <dt>Claim Selection (<tt>claimSelection</tt>):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A (sub-)set of the Claims that can be created by an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>Claim Selections are optional filters that specify the exact set of Claims to be included in Evidence. For example, a Verifier could send a Claim Selection, along with other elements, to an Attester. An Attester MAY decide whether 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 to 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 consists of: (a) a list of Attestation Key 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 72,176" fill="none" stroke="black"/>
              <path d="M 232,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="188" y="180">requestAttestation(handle,</text>
                <text x="344" y="180">?attKeyIDs,</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">?attKeyIDs,</text>
                <text x="380" y="260">collectedClaims)</text>
                <text x="68" y="276">=&gt;</text>
                <text x="116" y="276">evidence</text>
                <text x="96" y="308">evidence,</text>
                <text x="180" 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">refValues)</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                                      |
     |                                                            |
     |<-- requestAttestation(handle, ?attKeyIDs, ?claimSelection) |
     |                                                            |
  collectClaims(claims, ?claimSelection)                          |
     | => collectedClaims                                         |
     |                                                            |
  generateEvidence(handle, ?attKeyIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | evidence, ?eventLogs ------------------------------------->|
     |                                                            |
==========================[Evidence Appraisal]==========================
     |                                                            |
     |                appraiseEvidence(evidence, ?eventLogs, refValues)
     |                                       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 224,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 200,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="340" y="180">requestAttestation(handle,</text>
                    <text x="312" y="196">?attKeyIDs,</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">?attKeyIDs,</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">refValues)</text>
                    <text x="256" y="436">attestationResult</text>
                    <text x="340" y="436">&lt;=</text>
                    <text x="280" 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                |                 |
     |                                      |                 |
     |<--------------------- requestAttestation(handle,       |
     |                           ?attKeyIDs, ?claimSelection) |
     |                                      |                 |
  collectClaims(claims, ?claimSelection)    |                 |
     | => collectedClaims                   |                 |
     |                                      |                 |
  generateEvidence(handle,                  |                 |
     ?attKeyIDs, collectedClaims)           |                 |
     | => evidence                          |                 |
     |                                      |                 |
     | {evidence, ?eventLogs} ------------->|                 |
     |                                      |                 |
==========================[Evidence Appraisal]==========================
     |                                      |                 |
     |                         appraiseEvidence(evidence,     |
     |                             ?eventLogs, refValues)     |
     |                 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 224,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="340" y="132">requestAttestation(handle,</text>
                    <text x="312" y="148">?attKeyIDs,</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">?attKeyIDs,</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">refValues)</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]===================
     |                                   |                       |
     |<--------------------- requestAttestation(handle,          |
     |                           ?attKeyIDs, ?claimSelection)    |
     |                                   |                       |
  generateClaims(attestingEnvironment)   |                       |
     | => {claims, ?eventLogs}           |                       |
     |                                   |                       |
  collectClaims(claims,                  |                       |
     ?claimSelection)                    |                       |
     | => collectedClaims                |                       |
     |                                   |                       |
  generateEvidence(handle,               |                       |
     ?attKeyIDs, collectedClaims)        |                       |
     | => evidence                       |                       |
     |                                   |                       |
     | {evidence, ?eventLogs} ---------->|                       |
     |                                   |                       |
==========================[Evidence Appraisal]==========================
     |                                   |                       |
     |                                   | {handle, evidence,    |
     |                                   |  ?eventLogs} -------->|
     |                                   |                       |
     |                                   |   appraiseEvidence(evidence,
     |                                   |        ?eventLogs, refValues)
     |                                   |  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="944" width="584" viewBox="0 0 584 944" 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,576 L 8,896" fill="none" stroke="black"/>
              <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
              <path d="M 48,112 L 48,208" fill="none" stroke="black"/>
              <path d="M 48,272 L 48,288" fill="none" stroke="black"/>
              <path d="M 48,320 L 48,336" fill="none" stroke="black"/>
              <path d="M 48,368 L 48,416" fill="none" stroke="black"/>
              <path d="M 48,448 L 48,512" fill="none" stroke="black"/>
              <path d="M 48,640 L 48,656" fill="none" stroke="black"/>
              <path d="M 48,688 L 48,704" fill="none" stroke="black"/>
              <path d="M 48,736 L 48,784" fill="none" stroke="black"/>
              <path d="M 48,816 L 48,904" 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,80" fill="none" stroke="black"/>
              <path d="M 368,128 L 368,176" 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,80" fill="none" stroke="black"/>
              <path d="M 536,112 L 536,208" fill="none" stroke="black"/>
              <path d="M 536,240 L 536,416" fill="none" stroke="black"/>
              <path d="M 536,608 L 536,784" fill="none" stroke="black"/>
              <path d="M 536,880 L 536,904" fill="none" stroke="black"/>
              <path d="M 560,480 L 560,488" fill="none" stroke="black"/>
              <path d="M 560,848 L 560,856" fill="none" stroke="black"/>
              <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
              <path d="M 576,576 L 576,896" 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 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 56,160 L 280,160" fill="none" stroke="black"/>
              <path d="M 456,160 L 528,160" fill="none" stroke="black"/>
              <path d="M 8,222 L 136,222" fill="none" stroke="black"/>
              <path d="M 8,226 L 136,226" fill="none" stroke="black"/>
              <path d="M 432,222 L 576,222" fill="none" stroke="black"/>
              <path d="M 432,226 L 576,226" fill="none" stroke="black"/>
              <path d="M 240,400 L 528,400" fill="none" stroke="black"/>
              <path d="M 8,430 L 208,430" fill="none" stroke="black"/>
              <path d="M 8,434 L 208,434" fill="none" stroke="black"/>
              <path d="M 376,430 L 576,430" fill="none" stroke="black"/>
              <path d="M 376,434 L 576,434" fill="none" stroke="black"/>
              <path d="M 24,560 L 80,560" fill="none" stroke="black"/>
              <path d="M 136,560 L 560,560" fill="none" stroke="black"/>
              <path d="M 24,590 L 120,590" fill="none" stroke="black"/>
              <path d="M 24,594 L 120,594" fill="none" stroke="black"/>
              <path d="M 464,590 L 560,590" fill="none" stroke="black"/>
              <path d="M 464,594 L 560,594" fill="none" stroke="black"/>
              <path d="M 280,768 L 528,768" fill="none" stroke="black"/>
              <path d="M 24,798 L 184,798" fill="none" stroke="black"/>
              <path d="M 24,802 L 184,802" fill="none" stroke="black"/>
              <path d="M 400,798 L 560,798" fill="none" stroke="black"/>
              <path d="M 400,802 L 560,802" fill="none" stroke="black"/>
              <path d="M 24,912 L 560,912" fill="none" stroke="black"/>
              <path d="M 24,560 C 15.16936,560 8,567.16936 8,576" fill="none" stroke="black"/>
              <path d="M 560,560 C 568.83064,560 576,567.16936 576,576" fill="none" stroke="black"/>
              <path d="M 24,912 C 15.16936,912 8,904.83064 8,896" fill="none" stroke="black"/>
              <path d="M 560,912 C 568.83064,912 576,904.83064 576,896" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="536,768 524,762.4 524,773.6 " fill="black" transform="rotate(0,528,768)"/>
              <polygon class="arrowhead" points="536,400 524,394.4 524,405.6 " fill="black" transform="rotate(0,528,400)"/>
              <polygon class="arrowhead" points="536,160 524,154.4 524,165.6 " fill="black" transform="rotate(0,528,160)"/>
              <polygon class="arrowhead" points="64,160 52,154.4 52,165.6 " fill="black" transform="rotate(180,56,160)"/>
              <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="240" y="100">[Handle</text>
                <text x="320" y="100">Generation]</text>
                <text x="404" y="116">generateHandle()</text>
                <text x="388" y="132">=&gt;</text>
                <text x="428" y="132">handle</text>
                <text x="324" y="164">{handle}</text>
                <text x="412" y="164">{handle}</text>
                <text x="368" y="196">x</text>
                <text x="176" y="228">[Evidence</text>
                <text x="260" y="228">Generation</text>
                <text x="320" y="228">and</text>
                <text x="384" y="228">Conveyance]</text>
                <text x="48" y="244">|</text>
                <text x="164" y="260">generateClaims(attestingEnvironment)</text>
                <text x="68" y="276">=&gt;</text>
                <text x="112" y="276">claims,</text>
                <text x="184" y="276">eventLogs</text>
                <text x="104" y="308">collectClaims(claims,</text>
                <text x="256" y="308">claimSelection)</text>
                <text x="68" y="324">=&gt;</text>
                <text x="144" y="324">collectedClaims</text>
                <text x="116" y="356">generateEvidence(handle,</text>
                <text x="260" y="356">attKeyIDs,</text>
                <text x="372" y="356">collectedClaims)</text>
                <text x="68" y="372">=&gt;</text>
                <text x="116" y="372">evidence</text>
                <text x="100" y="404">{evidence,</text>
                <text x="188" y="404">eventLogs}</text>
                <text x="248" y="436">[Evidence</text>
                <text x="332" y="436">Appraisal]</text>
                <text x="536" y="452">|</text>
                <text x="460" y="468">appraiseEvidence(evidence,</text>
                <text x="520" y="484">eventLogs</text>
                <text x="524" y="500">refValues)</text>
                <text x="432" y="516">attestationResult</text>
                <text x="516" y="516">&lt;=</text>
                <text x="536" y="516">|</text>
                <text x="48" y="532">~</text>
                <text x="536" y="532">~</text>
                <text x="48" y="548">|</text>
                <text x="536" y="548">|</text>
                <text x="108" y="564">[loop]</text>
                <text x="48" y="580">|</text>
                <text x="536" y="580">|</text>
                <text x="148" y="596">[Delta</text>
                <text x="212" y="596">Evidence</text>
                <text x="292" y="596">Generation</text>
                <text x="352" y="596">and</text>
                <text x="416" y="596">Conveyance]</text>
                <text x="48" y="612">|</text>
                <text x="164" y="628">generateClaims(attestingEnvironment)</text>
                <text x="68" y="644">=&gt;</text>
                <text x="132" y="644">claimsDelta,</text>
                <text x="244" y="644">eventLogsDelta</text>
                <text x="124" y="676">collectClaims(claimsDelta,</text>
                <text x="296" y="676">claimSelection)</text>
                <text x="68" y="692">=&gt;</text>
                <text x="164" y="692">collectedClaimsDelta</text>
                <text x="116" y="724">generateEvidence(handle,</text>
                <text x="260" y="724">attKeyIDs,</text>
                <text x="392" y="724">collectedClaimsDelta)</text>
                <text x="68" y="740">=&gt;</text>
                <text x="116" y="740">evidence</text>
                <text x="100" y="772">{evidence,</text>
                <text x="208" y="772">eventLogsDelta}</text>
                <text x="212" y="804">[Delta</text>
                <text x="276" y="804">Evidence</text>
                <text x="356" y="804">Appraisal]</text>
                <text x="536" y="820">|</text>
                <text x="460" y="836">appraiseEvidence(evidence,</text>
                <text x="500" y="852">eventLogsDelta</text>
                <text x="524" y="868">refValues)</text>
                <text x="432" y="884">attestationResult</text>
                <text x="516" y="884">&lt;=</text>
                <text x="48" y="932">|</text>
                <text x="536" y="932">|</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
.----------.                       .--------------------.   .----------.
| Attester |                       | Handle Distributor |   | Verifier |
'----+-----'                       '---------+----------'   '-----+----'
     |                                       |                    |
==========================[Handle Generation]===========================
     |                                    generateHandle()        |
     |                                       | => handle          |
     |                                       |                    |
     |<---------------------------- {handle} | {handle} --------->|
     |                                       |                    |
     |                                       x                    |
     |                                                            |
=================[Evidence Generation and Conveyance]===================
     |                                                            |
  generateClaims(attestingEnvironment)                            |
     | => claims, eventLogs                                       |
     |                                                            |
  collectClaims(claims, claimSelection)                           |
     | => collectedClaims                                         |
     |                                                            |
  generateEvidence(handle, attKeyIDs, collectedClaims)            |
     | => evidence                                                |
     |                                                            |
     | {evidence, eventLogs} ------------------------------------>|
     |                                                            |
==========================[Evidence Appraisal]==========================
     |                                                            |
     |                                      appraiseEvidence(evidence,
     |                                                      eventLogs,
     |                                                      refValues)
     |                                       attestationResult <= |
     ~                                                            ~
     |                                                            |
 .--------[loop]------------------------------------------------------.
|    |                                                            |    |
| =============[Delta Evidence Generation and Conveyance]============= |
|    |                                                            |    |
| generateClaims(attestingEnvironment)                            |    |
|    | => claimsDelta, eventLogsDelta                             |    |
|    |                                                            |    |
| collectClaims(claimsDelta, claimSelection)                      |    |
|    | => collectedClaimsDelta                                    |    |
|    |                                                            |    |
| generateEvidence(handle, attKeyIDs, collectedClaimsDelta)       |    |
|    | => evidence                                                |    |
|    |                                                            |    |
|    | {evidence, eventLogsDelta} ------------------------------->|    |
|    |                                                            |    |
| =====================[Delta Evidence Appraisal]===================== |
|    |                                                            |    |
|    |                                      appraiseEvidence(evidence, |
|    |                                                 eventLogsDelta, |
|    |                                                      refValues) |
|    |                                       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 or the emission of a beacon).
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 created and used always remains as the distinguishing quality of this model.</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 3rd entity -- 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.
Correspondingly, conveyed Evidence in this model provides a proof that it was fresh at a certain point in time.</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 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.
The observer pattern directly connects observers to subjects without a broker, while the publish-subscribe pattern involves a central broker for message distribution.
In the following Subsections, streaming remote attestation without a broker (observer pattern) as well as with a broker (publish-subscribe pattern) are illustrated.</t>
        <section anchor="streaming-remote-attestation-without-a-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="944" width="584" viewBox="0 0 584 944" 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,576 L 8,896" fill="none" stroke="black"/>
                <path d="M 48,64 L 48,80" fill="none" stroke="black"/>
                <path d="M 48,112 L 48,208" fill="none" stroke="black"/>
                <path d="M 48,272 L 48,288" fill="none" stroke="black"/>
                <path d="M 48,320 L 48,336" fill="none" stroke="black"/>
                <path d="M 48,368 L 48,384" fill="none" stroke="black"/>
                <path d="M 48,416 L 48,512" fill="none" stroke="black"/>
                <path d="M 48,640 L 48,656" fill="none" stroke="black"/>
                <path d="M 48,688 L 48,704" fill="none" stroke="black"/>
                <path d="M 48,736 L 48,752" fill="none" stroke="black"/>
                <path d="M 48,784 L 48,904" 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,144 L 536,208" fill="none" stroke="black"/>
                <path d="M 536,240 L 536,384" fill="none" stroke="black"/>
                <path d="M 536,416 L 536,448" fill="none" stroke="black"/>
                <path d="M 536,608 L 536,752" fill="none" stroke="black"/>
                <path d="M 536,784 L 536,816" fill="none" stroke="black"/>
                <path d="M 536,880 L 536,904" fill="none" stroke="black"/>
                <path d="M 560,480 L 560,488" fill="none" stroke="black"/>
                <path d="M 560,848 L 560,856" fill="none" stroke="black"/>
                <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                <path d="M 576,576 L 576,896" 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 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 56,176 L 152,176" fill="none" stroke="black"/>
                <path d="M 136,192 L 528,192" fill="none" stroke="black"/>
                <path d="M 8,222 L 136,222" fill="none" stroke="black"/>
                <path d="M 8,226 L 136,226" fill="none" stroke="black"/>
                <path d="M 432,222 L 576,222" fill="none" stroke="black"/>
                <path d="M 432,226 L 576,226" fill="none" stroke="black"/>
                <path d="M 8,398 L 208,398" fill="none" stroke="black"/>
                <path d="M 8,402 L 208,402" fill="none" stroke="black"/>
                <path d="M 376,398 L 576,398" fill="none" stroke="black"/>
                <path d="M 376,402 L 576,402" fill="none" stroke="black"/>
                <path d="M 304,432 L 528,432" fill="none" stroke="black"/>
                <path d="M 24,560 L 80,560" fill="none" stroke="black"/>
                <path d="M 136,560 L 560,560" fill="none" stroke="black"/>
                <path d="M 24,590 L 120,590" fill="none" stroke="black"/>
                <path d="M 24,594 L 120,594" fill="none" stroke="black"/>
                <path d="M 464,590 L 560,590" fill="none" stroke="black"/>
                <path d="M 464,594 L 560,594" fill="none" stroke="black"/>
                <path d="M 24,766 L 184,766" fill="none" stroke="black"/>
                <path d="M 24,770 L 184,770" fill="none" stroke="black"/>
                <path d="M 400,766 L 560,766" fill="none" stroke="black"/>
                <path d="M 400,770 L 560,770" fill="none" stroke="black"/>
                <path d="M 280,800 L 528,800" fill="none" stroke="black"/>
                <path d="M 24,912 L 560,912" fill="none" stroke="black"/>
                <path d="M 24,560 C 15.16936,560 8,567.16936 8,576" fill="none" stroke="black"/>
                <path d="M 560,560 C 568.83064,560 576,567.16936 576,576" fill="none" stroke="black"/>
                <path d="M 24,912 C 15.16936,912 8,904.83064 8,896" fill="none" stroke="black"/>
                <path d="M 560,912 C 568.83064,912 576,904.83064 576,896" 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,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="240" y="100">[Handle</text>
                  <text x="320" y="100">Generation]</text>
                  <text x="536" y="116">|</text>
                  <text x="500" y="132">generateHandle()</text>
                  <text x="492" y="148">handle&lt;=</text>
                  <text x="232" y="180">subscribe(handle,</text>
                  <text x="348" y="180">attKeyIDs,</text>
                  <text x="456" y="180">claimSelection)</text>
                  <text x="92" y="196">{handle}</text>
                  <text x="176" y="228">[Evidence</text>
                  <text x="260" y="228">Generation</text>
                  <text x="320" y="228">and</text>
                  <text x="384" y="228">Conveyance]</text>
                  <text x="48" y="244">|</text>
                  <text x="164" y="260">generateClaims(attestingEnvironment)</text>
                  <text x="68" y="276">=&gt;</text>
                  <text x="112" y="276">claims,</text>
                  <text x="184" y="276">eventLogs</text>
                  <text x="104" y="308">collectClaims(claims,</text>
                  <text x="256" y="308">claimSelection)</text>
                  <text x="68" y="324">=&gt;</text>
                  <text x="144" y="324">collectedClaims</text>
                  <text x="116" y="356">generateEvidence(handle,</text>
                  <text x="260" y="356">attKeyIDs,</text>
                  <text x="372" y="356">collectedClaims)</text>
                  <text x="68" y="372">=&gt;</text>
                  <text x="116" y="372">evidence</text>
                  <text x="248" y="404">[Evidence</text>
                  <text x="332" y="404">Appraisal]</text>
                  <text x="92" y="436">{handle,</text>
                  <text x="168" y="436">evidence,</text>
                  <text x="252" y="436">eventLogs}</text>
                  <text x="460" y="468">appraiseEvidence(evidence,</text>
                  <text x="520" y="484">eventLogs</text>
                  <text x="524" y="500">refValues)</text>
                  <text x="432" y="516">attestationResult</text>
                  <text x="516" y="516">&lt;=</text>
                  <text x="536" y="516">|</text>
                  <text x="48" y="532">~</text>
                  <text x="536" y="532">~</text>
                  <text x="48" y="548">|</text>
                  <text x="536" y="548">|</text>
                  <text x="108" y="564">[loop]</text>
                  <text x="48" y="580">|</text>
                  <text x="536" y="580">|</text>
                  <text x="148" y="596">[Delta</text>
                  <text x="212" y="596">Evidence</text>
                  <text x="292" y="596">Generation</text>
                  <text x="352" y="596">and</text>
                  <text x="416" y="596">Conveyance]</text>
                  <text x="48" y="612">|</text>
                  <text x="164" y="628">generateClaims(attestingEnvironment)</text>
                  <text x="68" y="644">=&gt;</text>
                  <text x="132" y="644">claimsDelta,</text>
                  <text x="244" y="644">eventLogsDelta</text>
                  <text x="124" y="676">collectClaims(claimsDelta,</text>
                  <text x="296" y="676">claimSelection)</text>
                  <text x="68" y="692">=&gt;</text>
                  <text x="164" y="692">collectedClaimsDelta</text>
                  <text x="116" y="724">generateEvidence(handle,</text>
                  <text x="260" y="724">attKeyIDs,</text>
                  <text x="392" y="724">collectedClaimsDelta)</text>
                  <text x="68" y="740">=&gt;</text>
                  <text x="116" y="740">evidence</text>
                  <text x="212" y="772">[Delta</text>
                  <text x="276" y="772">Evidence</text>
                  <text x="356" y="772">Appraisal]</text>
                  <text x="100" y="804">{evidence,</text>
                  <text x="208" y="804">eventLogsDelta}</text>
                  <text x="460" y="836">appraiseEvidence(evidence,</text>
                  <text x="500" y="852">eventLogsDelta</text>
                  <text x="524" y="868">refValues)</text>
                  <text x="432" y="884">attestationResult</text>
                  <text x="516" y="884">&lt;=</text>
                  <text x="48" y="932">|</text>
                  <text x="536" y="932">|</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
.----------.                                                .----------.
| Attester |                                                | Verifier |
'----+-----'                                                '-----+----'
     |                                                            |
==========================[Handle Generation]===========================
     |                                                            |
     |                                                generateHandle()
     |                                                   handle<= |
     |                                                            |
     |<------------ subscribe(handle, attKeyIDs, claimSelection)  |
     | {handle} ------------------------------------------------->|
     |                                                            |
=================[Evidence Generation and Conveyance]===================
     |                                                            |
  generateClaims(attestingEnvironment)                            |
     | => claims, eventLogs                                       |
     |                                                            |
  collectClaims(claims, claimSelection)                           |
     | => collectedClaims                                         |
     |                                                            |
  generateEvidence(handle, attKeyIDs, collectedClaims)            |
     | => evidence                                                |
     |                                                            |
==========================[Evidence Appraisal]==========================
     |                                                            |
     | {handle, evidence, eventLogs} ---------------------------->|
     |                                                            |
     |                                      appraiseEvidence(evidence,
     |                                                      eventLogs,
     |                                                      refValues)
     |                                       attestationResult <= |
     ~                                                            ~
     |                                                            |
 .--------[loop]------------------------------------------------------.
|    |                                                            |    |
| =============[Delta Evidence Generation and Conveyance]============= |
|    |                                                            |    |
| generateClaims(attestingEnvironment)                            |    |
|    | => claimsDelta, eventLogsDelta                             |    |
|    |                                                            |    |
| collectClaims(claimsDelta, claimSelection)                      |    |
|    | => collectedClaimsDelta                                    |    |
|    |                                                            |    |
| generateEvidence(handle, attKeyIDs, collectedClaimsDelta)       |    |
|    | => evidence                                                |    |
|    |                                                            |    |
| =====================[Delta Evidence Appraisal]===================== |
|    |                                                            |    |
|    | {evidence, eventLogsDelta} ------------------------------->|    |
|    |                                                            |    |
|    |                                      appraiseEvidence(evidence, |
|    |                                                 eventLogsDelta, |
|    |                                                      refValues) |
|    |                                       attestationResult <= |    |
|    |                                                            |    |
 '--------------------------------------------------------------------'
     |                                                            |
]]></artwork>
          </artset>
          <t>The observer pattern is employed in scenarios where message delivery does not involve a central broker.
Instead, an observer directly subscribes to observed resources via a dedicated mechanism.
Consequently, these dedicated mechanisms contain information about the observer and are responsible for maintaining subscription state.
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.
While a Handle Distributor is not mandatory in this model, the model is also limited to bi-lateral subscription relationships, in which each Verifier has to create and provide Handles individually.
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-remote-attestation-with-a-broker">
          <name>Streaming Remote Attestation with a Broker</name>
          <t>The publish-subscribe messaging pattern is widely used for communication in different areas.
Unlike the <em>Streaming Remote Attestation without a Broker</em> interaction model, Attesters do not (need 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 the particular  publish-subscribe model and implementation, clients can be either publishers or subscribers or both.</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="224" width="584" viewBox="0 0 584 224" 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 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 248,32 L 248,64" fill="none" stroke="black"/>
                  <path d="M 312,64 L 312,80" fill="none" stroke="black"/>
                  <path d="M 312,112 L 312,160" fill="none" stroke="black"/>
                  <path d="M 376,32 L 376,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,128" fill="none" stroke="black"/>
                  <path d="M 536,176 L 536,192" fill="none" stroke="black"/>
                  <path d="M 560,144 L 560,152" 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 248,32 L 376,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 248,64 L 376,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,128 L 304,128" fill="none" stroke="black"/>
                  <path d="M 320,144 L 416,144" fill="none" stroke="black"/>
                  <path d="M 56,176 L 208,176" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="328,144 316,138.4 316,149.6 " fill="black" transform="rotate(180,320,144)"/>
                  <polygon class="arrowhead" points="312,128 300,122.4 300,133.6 " fill="black" transform="rotate(0,304,128)"/>
                  <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="284" y="52">PubSub</text>
                    <text x="340" 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="48" y="116">|</text>
                    <text x="96" y="132">sub(topic=AttReq)</text>
                    <text x="492" y="148">pub(topic=AttReq</text>
                    <text x="536" y="164">handle)</text>
                    <text x="300" y="180">notify(topic=AttReq,</text>
                    <text x="416" y="180">handle)</text>
                    <text x="312" y="196">|</text>
                    <text x="48" y="212">~</text>
                    <text x="312" y="212">~</text>
                    <text x="536" y="212">~</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.                  .---------------.             .----------.
| Attester |                  | PubSub Server |             | Verifier |
'----+-----'                  '-------+-------'             '-----+----'
     |                                |                           |
==========================[Handle Generation]===========================
     |                                |                           |
   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 provided by a Verifier on a per-request basis.
In the sequence diagram above, an Attester subscribes to the "AttReq" (= Attestation Request) topic on the PubSub server.
The Verifier publishes a Handle to the "AttReq" topic, which the PubSub server forwards to the Attester by notifying it.</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>The <em>Uni-Directional Remote Attestation over Publish-Subscribe</em> model uses the same information elements as the Uni-Directional Remote Attestation model.
Accordingly, Handles are created by a 3rd party, the Handle Distributor.
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="752" width="584" viewBox="0 0 584 752" 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,688" 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,608" fill="none" stroke="black"/>
                  <path d="M 48,640 L 48,696" 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,608" fill="none" stroke="black"/>
                  <path d="M 336,640 L 336,696" 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,608" fill="none" stroke="black"/>
                  <path d="M 560,560 L 560,568" fill="none" stroke="black"/>
                  <path d="M 560,656 L 560,664" fill="none" stroke="black"/>
                  <path d="M 576,64 L 576,96" fill="none" stroke="black"/>
                  <path d="M 576,176 L 576,688" 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,622 L 160,622" fill="none" stroke="black"/>
                  <path d="M 24,626 L 160,626" fill="none" stroke="black"/>
                  <path d="M 416,622 L 560,622" fill="none" stroke="black"/>
                  <path d="M 416,626 L 560,626" fill="none" stroke="black"/>
                  <path d="M 344,656 L 416,656" fill="none" stroke="black"/>
                  <path d="M 24,704 L 560,704" 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,704 C 15.16936,704 8,696.83064 8,688" fill="none" stroke="black"/>
                  <path d="M 560,704 C 568.83064,704 576,696.83064 576,688" 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,656 340,650.4 340,661.6 " fill="black" transform="rotate(180,344,656)"/>
                  <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="256" 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">attKeyIDs,</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">refValues)</text>
                    <text x="432" y="596">attestationResult</text>
                    <text x="516" y="596">&lt;=</text>
                    <text x="212" y="628">[Attestation</text>
                    <text x="292" y="628">Result</text>
                    <text x="368" y="628">Generation]</text>
                    <text x="536" y="644">|</text>
                    <text x="492" y="660">pub(topic=AttRes</text>
                    <text x="492" y="676">attestationResult)</text>
                    <text x="536" y="692">|</text>
                    <text x="48" y="724">|</text>
                    <text x="336" y="724">|</text>
                    <text x="536" y="724">|</text>
                    <text x="48" y="740">~</text>
                    <text x="336" y="740">~</text>
                    <text x="536" y="740">~</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, attKeyIDs,    |                        |    |
|    |             collectedClaims)      |                        |    |
|    | => evidence                       |                        |    |
|    |                                   |                        |    |
|  pub(topic=AttEv,                      |                        |    |
|    | evidence, eventLogs) ------------>|                        |    |
|    |                                   |                        |    |
|    |                               notify(topic=AttEv,          |    |
|    |                                   |  evidence,             |    |
|    |                                   |  eventLogs) ---------->|    |
|    |                                   |                        |    |
| ========================[Evidence Appraisal]======================== |
|    |                                   |                        |    |
|    |                                   |           appraiseEvidence( |
|    |                                   |                   evidence, |
|    |                                   |                  eventLogs, |
|    |                                   |                  refValues) |
|    |                                   |   attestationResult <= |    |
|    |                                   |                        |    |
| ==================[Attestation Result Generation]=================== |
|    |                                   |                        |    |
|    |                                   |<--------- pub(topic=AttRes, |
|    |                                   |          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,144 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,144 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="160" y="164">sub(topic=AttRes)</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="368" 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 anchor="publishsubscribe-topics">
            <name>Publish/Subscribe Topics</name>
            <t>Many publish-subscribe models provide hierarchical organization of topics.
This way, subscribers can subscribe to either all attestations (topic <tt>AttRes</tt>), or, for example, to topic <tt>AttRes/DbServers/Germany</tt> to receive only attestations from database servers in Germany.
Further, it may be required to distinguish between uni-directional and challenge-response attestation evidence.
<!--For this purpose a wildcard subscription may be useful, for example `AttRes/DbServers/Germany/\*\*/uni` (to receive only uni-directional attestation evidence) or `AttRes/DbServers/Germany/\*\*/cr` (to receive only challenge-response attestation Evidence).-->
            </t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="additional-application-specific-requirements">
      <name>Additional Application-Specific Requirements</name>
      <t>Depending on the use cases covered, there can be additional requirements. An exemplary subset is illustrated in this section.</t>
      <section anchor="confidentiality">
        <name>Confidentiality</name>
        <t>Confidentiality of exchanged attestation information may be desirable. This requirement usually is present when communication takes place over insecure channels, such as the public Internet. In such cases, TLS may be used as a suitable communication protocol which provides confidentiality protection. In private networks, such as carrier management networks, it must be evaluated whether or not the transport medium is considered confidential.</t>
      </section>
      <section anchor="mutual-authentication">
        <name>Mutual Authentication</name>
        <t>In particular use cases, mutual authentication may be desirable in such a way that a Verifier also needs to prove its identity to the Attester, instead of only the Attester proving its identity to the Verifier.</t>
      </section>
      <section anchor="hardware-enforcementsupport">
        <name>Hardware-Enforcement/Support</name>
        <t>Depending on given usage scenarios, hardware support for secure storage of cryptographic keys, crypto accelerators, as well as protected or isolated execution environments can be mandatory requirements. Well-known technologies in support of these requirements are roots of trusts, such as Hardware Security Modules (HSM), Physically Unclonable Functions (PUFs), Shielded Secrets, or Trusted Executions Environments (TEEs).</t>
      </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>In a remote attestation procedure the Verifier or the Attester MAY want to cryptographically blind several attributes.
For instance, information can be part of the signature after applying a one-way function (e. g., a hash function).</t>
      <t>There is also a possibility to scramble the Nonce or Attester Identity with other information that is known to both the Verifier and Attester.
A prominent example is the IP address of the Attester that usually is known by the Attester itself as well as the Verifier.
This extra information can be used to scramble the Nonce in order to counter certain types of relay attacks.</t>
    </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="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <seriesInfo name="DOI" value="10.17487/RFC8610"/>
            <seriesInfo name="RFC" value="8610"/>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
        </reference>
        <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="I-D.birkholz-rats-epoch-markers">
          <front>
            <title>Epoch Markers</title>
            <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-epoch-markers-08"/>
            <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="22" month="July" 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.ietf-rats-tpm-based-network-device-attest">
          <front>
            <title>TPM-based Network Device Remote Integrity Verification</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-tpm-based-network-device-attest-14"/>
            <author fullname="Guy Fedorkow" initials="G." surname="Fedorkow">
              <organization>Juniper Networks, Inc.</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Jessica Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay">
              <organization>National Security Agency</organization>
            </author>
            <date day="22" month="March" year="2022"/>
            <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 [TPM1.2], [TPM2.0], 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.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="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="TNC">
          <front>
            <title>TCG Trusted Network Communications TNC Architecture for Interoperability</title>
            <seriesInfo name="Specification" value="Version 2.0 Revision 13"/>
            <author initials="" surname="TCG" fullname="Trusted Computing Group">
              <organization/>
            </author>
            <date year="2017"/>
          </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>
      </references>
    </references>
    <?line 906?>

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