<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.35 (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-11" 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-11"/>
    <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="2024" month="July" day="22"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 124?>

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

<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 created based on 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.
Specific goals of this document are to:</t>
      <ol spacing="normal" type="1">
        <li>prevent inconsistencies in descriptions of interaction models in other documents (due to text cloning and evolution over time), and to</li>
        <li>enable to highlight an exact delta/divergence between the core set of characteristics captured here 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 methods described can also be applied to the conveyance of, for example, Endorsements or Attestation Results.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the following set of terms, roles, and concepts as defined in <xref 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 format 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>The term "Remote Attestation" is a common expression and often associated or connoted with certain properties.
The term "Remote" in this context 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 payload of 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).
Even 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)). Readers of this document should be familiar with the concept of Layered Attestation as described in Section 3.1 Two Types of Environments of an Attester in <xref target="RFC9334"/> and the definition of Attestation 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 focuses on generic interaction models between Attesters and Verifiers in order to convey Evidence.
Complementary procedures, functions, or services that are required for a complete semantic binding of the concepts defined in <xref target="RFC9334"/> are out-of-scope of this document.
Examples include: identity establishment, key distribution and enrollment, time synchronization, as well as certificate revocation.</t>
      <t>Furthermore, any processes and duties that go beyond carrying out remote attestation procedures are out-of-scope.</t>
      <t>For instance, using the results of a remote attestation procedure that are created by the Verifier, e.g., how to triggering remediation actions or recovery processes, as well as such remediation actions and recovery processes themselves, are also out-of-scope.</t>
      <t>The interaction models illustrated in this document are intended to provide a stable basis and reference for other solutions documents inside or outside the IETF.
Solution documents of any kind can reference the interaction models in order to avoid text clones and to avoid the danger of subtle discrepancies.
Analogously, deviations from the generic model descriptions in this document can be illustrated in solutions documents to highlight distinct contributions.</t>
    </section>
    <section anchor="essential-requirements">
      <name>Essential Requirements</name>
      <t>In order to ensure appropriate conveyance of Evidence, there exist essential requirements which MUST be fulfilled:</t>
      <dl>
        <dt>Integrity:</dt>
        <dd>
          <t>Information provided by an Attester MUST be integral. This may be achieved by means of a digital signature over Attestation Evidence. The signature may be symmetric, such as an HMAC, or asymmetric, such as ECDSA.</t>
        </dd>
        <dt>Authentication:</dt>
        <dd>
          <t>The information provided by the Attester MUST be authentic. For that purpose, the Attester should authenticate itself to the Verifier. This may be an implicit authentication by means of a digital signature over the Attestation Evidence, which does not require additional protocol steps, or may be achieved by using a confidential channel by means of encryption.</t>
        </dd>
      </dl>
      <section anchor="endorsement-of-attesting-environments">
        <name>Endorsement of Attesting Environments</name>
        <t>Via its Attesting Environments, an Attester only generates Evidence about its Target Environments.
After being appraised to be trustworthy, a Target Environment may become a new Attesting Environment in charge of generating Evidence for further Target Environments.
<xref target="RFC9334"/> explains this as Layered Attestation.
Layered Attestation has to start with an initial Attesting Environment. In essence, there cannot be turtles all the way down <xref target="turtles"/>.
At this rock bottom of Layered Attestation, the Attesting Environments are always called Roots of Trust (RoT).
An Attester cannot generate Evidence about its own RoTs by design.
As a consequence, a Verifier requires trustable statements about this subset of Attesting Environments from a different source than the Attester itself.
The corresponding trustable statements are called Endorsements and originate from external, trustable entities that take on the role of an Endorser (e.g., supply chain entities).</t>
      </section>
    </section>
    <section anchor="normative-prerequisites">
      <name>Normative Prerequisites</name>
      <t>In order to ensure an appropriate conveyance of Evidence via interaction models in general, the following set of prerequisites MUST be in place to support the implementation of interaction models:</t>
      <dl>
        <dt>Authentication Secret:</dt>
        <dd>
          <t>An Authentication Secret MUST be available exclusively to an Attesting Environment of an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>The Attester MUST protect Claims with that Authentication Secret, thereby proving the authenticity of the Claims included in Evidence.
The Authentication Secret MUST be established before RATS can take place.</t>
        </dd>
        <dt>Attester Identity:</dt>
        <dd>
          <t>A statement about a distinguishable Attester made by an Endorser.</t>
        </dd>
        <dt/>
        <dd>
          <t>The provenance of Evidence with respect to a distinguishable Attesting Environment MUST be correct and 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 an Attester.
It MAY be a unique identity, MAY be included in a zero-knowledge proof (ZKP), MAY be part of a group signature, or it MAY 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 proofs of authenticity, Attestation Evidence SHOULD 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 SHOULD 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. Analogously, interaction models MUST 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 defines the information elements that are vital to all kinds interaction models.
Varying from solution to solution, generic information elements can be either included in the scope of protocol messages (instantiating Conceptual Messages) or can be included in additional protocol parameters or payload.
Ultimately, the following information elements are required by any kind of scalable remote attestation procedure using one or more of the interaction models provided.</t>
      <dl>
        <dt>Attestation Key IDs ('authSecIDs'):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A statement representing an identifier list that MUST be associated with corresponding Attestation Keys (authentication secrets) used to protect Claims in Evidence produced by Attesting Environments of an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>While a verifier does not necessarily have knowledge about an Attesting Environment's Attestation Key (ID), each distinguishable Attesting Environment has access to a protected capability that includes an Attestation Key (Authentication Secret).
Consequently, an Attestation Key ID can also identify an Attesting Environment.</t>
        </dd>
        <dt>Handle ('handle'):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A statement provided to the Attester from the outside to be included in Evidence (or other RATS Conceptual Messages) to determine recentness, freshness, or to protect against replay attacks.</t>
        </dd>
        <dt/>
        <dd>
          <t>Handle is an umbrella term for existing data types that accomplish one or more of (a) determining recentness, (b) determining freshness, or (c) provide replay protection. Examples include: Nonces that are used to protect from replay attacks or Epoch Markers that identify distinct periods (Epoch) of freshness <xref target="I-D.birkholz-rats-epoch-markers"/>. Handles can also be used as an indicator for authenticity or attestation Evidence provenance, as only a select number of RATS Roles (e.g., an Attester and a Verifier in a challenge-response interaction) are intended to have knowledge of a current Handle.</t>
        </dd>
        <dt>Claims ('claims'):</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, for example, used to appraise the integrity of Attesters via Verifiers. The other information elements in this section can be expressed as Claims in any type of Conceptional Messages.</t>
        </dd>
        <dt>Event Logs ('eventLogs'):</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 support Claim reproducibility by providing information on how Claims originated.</t>
        </dd>
        <dt>Reference Values ('refValues')</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>Reference Values as defined in <xref 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 ('claimSelection'):</dt>
        <dd>
          <t><em>optional</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A (sub-)set of Claims which can be created by an Attester.</t>
        </dd>
        <dt/>
        <dd>
          <t>Claim Selections act as optional filters to specify the exact set of Claims to be included in Evidence. For example, a Verifier could send a Claim Selection, among other elements, to an Attester. An Attester MAY decide whether or not to provide all requested Claims from a Claim Selection to the Verifier. If there is no way to convey a Claim Selection in a remote attestation protocol, a default Claim Selection (e.g., "all") MUST be defined be the Attester and SHOULD be known to the Verifier.</t>
        </dd>
        <dt>Collected Claims ('collectedClaims'):</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 Claims selected in the Claim Selection. If a Verifier does not provide a Claim Selection, then all available Claims on the Attester are part of the Collected Claims.</t>
        </dd>
        <dt>Evidence ('evidence'):</dt>
        <dd>
          <t><em>mandatory</em></t>
        </dd>
        <dt/>
        <dd>
          <t>A set of Claims that consists of a list of Authentication Secret IDs that each identifies an Authentication Secret in a single Attesting Environment, the Attester Identity, Claims, and 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 authoritative.</t>
        </dd>
        <dt>Attestation Result ('attestationResult'):</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. Attestation Results include condensed assertions about integrity or other characteristics of the corresponding Attester that are processible by Relying Parties.</t>
        </dd>
      </dl>
    </section>
    <section anchor="interaction-models">
      <name>Interaction Models</name>
      <t>The following subsections introduce and illustrate the interaction models:</t>
      <ol spacing="normal" type="1">
        <li>Challenge/Response Remote Attestation</li>
        <li>Uni-Directional Remote Attestation</li>
        <li>Streaming Remote Attestation</li>
      </ol>
      <t>Each section starts with a sequence diagram illustrating the interactions between Attester and Verifier.
While the presented interaction models focus on the conveyance of Evidence, the intention of this document is in support of future work that applies the presented models to the conveyance of other Conceptual Messages, namely Attestation Results, Endorsements, Reference Values, or Appraisal Policies.</t>
      <t>All interaction models have a strong focus on the use of a handle to incorporate a type of proof of freshness and to prevent replay attacks.
The way these handles are processed is the most prominent difference between the three interaction models.</t>
      <section anchor="challengeresponse-remote-attestation">
        <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 80,176" fill="none" stroke="black"/>
              <path d="M 224,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="184" y="148">eventLogs</text>
                <text x="196" y="180">requestAttestation(handle,</text>
                <text x="348" y="180">attKeyIDs,</text>
                <text x="456" y="180">claimSelection)</text>
                <text x="104" y="212">collectClaims(claims,</text>
                <text x="256" 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="260" y="260">attKeyIDs,</text>
                <text x="372" 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="176" 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="436" y="372">eventLogs,</text>
                <text x="524" 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 accompany the produced claims by providing an event trail of security-critical events in a 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, a list of Authentication Secret IDs, and a 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 Authentication Secret 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 Authentication Secret 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 Authentication Secret IDs.
Methods to acquire Authentication Secret IDs or mappings between Attesting Environments to Authentication Secret IDs are out-of-scope of this document.</t>
        <t>The Attester collects Claims based on the Claim Selection. With the Claim Selection the Verifier defines the set of Claims it requires.
Correspondingly, collected Claims can be a subset of the produced Claims. This could be all available Claims, depending on the Claim Selection.
If the Claim Selection is omitted, then by default all Claims that are known and available on the Attester MUST be used to create corresponding Evidence.
For example, when performing a boot integrity evaluation, a Verifier may only be requesting a particular subset of claims about the Attester, such as Evidence about BIOS/UEFI and firmware that the Attester booted up, and not include information about all currently running software.</t>
        <t>With the Handle, the Authentication Secret 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 Authentication Secret ID. This is done once per Attesting Environment which is identified by the particular Authentication Secret ID. The Attester communicates the signed Evidence as well as all accompanying Event Logs back to the Verifier.</t>
        <t>While it is crucial that Claims, the Handle, and the Attester Identity information (i.e., the Authentication Secret) MUST be cryptographically bound to the signature of Evidence, they MAY be presented obfuscated, encrypted, or cryptographically blinded.
For further reference see section <xref target="security-and-privacy-considerations"/>.</t>
        <t>As soon as the Verifier receives the Evidence and the Event Logs, it appraises the Evidence.
For this purpose, it validates the signature, the Attester Identity, and the Handle, and then appraises the Claims.
Appraisal procedures are application-specific and can be conducted via comparison of the Claims with corresponding Reference Values, such as Reference Integrity Measurements.
The final output of the Verifier are Attestation Results. Attestation Results constitute new Claim Sets about the properties and characteristics of an Attester, which enables Relying Parties, for example, 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 compares the Evidence against its appraisal policy.  The Verifier
then gives back an Attestation Result to the Attester, which simply caches it. In the second step, the Attester presents the Attestation Result (and possibly additional Claims/Evidence) to a Relying Party, which then compares this information against 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,416 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 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 240,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="184" y="148">eventLogs</text>
                    <text x="340" y="180">requestAttestation(handle,</text>
                    <text x="308" y="196">attKeyIDs,</text>
                    <text x="416" y="196">claimSelection)</text>
                    <text x="104" y="228">collectClaims(claims,</text>
                    <text x="256" 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="84" y="292">attKeyIDs,</text>
                    <text x="196" 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="188" 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="356" y="404">appraiseEvidence(evidence,</text>
                    <text x="320" y="420">eventLogs</text>
                    <text x="412" 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 568,464 L 568,472" 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 240,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 448,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="308" y="148">attKeyIDs,</text>
                    <text x="416" 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="196" y="196">eventLogs}</text>
                    <text x="104" y="228">collectClaims(claims,</text>
                    <text x="104" 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="84" y="308">attKeyIDs,</text>
                    <text x="196" 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="188" 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="396" y="436">eventLogs}</text>
                    <text x="464" y="468">appraiseEvidence(evidence</text>
                    <text x="444" y="484">eventLogs,</text>
                    <text x="532" 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="uni-directional-remote-attestation">
        <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-remote-attestation">
        <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>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <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="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>
        <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>
        <reference anchor="BCP205">
          <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>
        <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-07"/>
            <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="24" month="April" 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>
      </references>
      <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>
      </references>
    </references>
    <?line 904?>

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