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

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

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

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.birkholz-rats-tuda">
          <front>
            <title>Time-Based Uni-Directional Attestation</title>
            <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-tuda-07"/>
            <author fullname="Andreas Fuchs" initials="A." surname="Fuchs">
              <organization>Fraunhofer Institute for Secure Information Technology</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer Institute for Secure Information Technology</organization>
            </author>
            <author fullname="Ira McDonald" initials="I." surname="McDonald">
              <organization>High North Inc</organization>
            </author>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="10" month="July" year="2022"/>
            <abstract>
              <t>   This document defines the method and bindings used to convey Evidence
   via Time-based Uni-Directional Attestation (TUDA) in Remote
   ATtestation procedureS (RATS).  TUDA does not require a challenge-
   response handshake and thereby does not rely on the conveyance of a
   nonce to prove freshness of remote attestation Evidence.  TUDA
   enables the creation of Secure Audit Logs that can constitute
   believable Evidence about both current and past operational states of
   an Attester.  In TUDA, RATS entities require access to a Handle
   Distributor to which a trustable and synchronized time-source is
   available.  The Handle Distributor takes on the role of a Time Stamp
   Authority (TSA) to distribute Handles incorporating Time Stamp Tokens
   (TST) to the RATS entities.  RATS require an Attesting Environment
   that generates believable Evidence.  While a TPM is used as the
   corresponding root of trust in this specification, any other type of
   root of trust can be used with TUDA.

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

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

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

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


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

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

   This document does not aim to define a conceptual message format for
   Endorsements and Reference Values.  Instead, it extends RFC9334 to
   provide further details on Reference Values and Endorsements, as
   these topics were outside the scope of the RATS charter when RFC9334
   was developed.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <seriesInfo name="DOI" value="10.17487/RFC4949"/>
            <seriesInfo name="RFC" value="4949"/>
            <seriesInfo name="FYI" value="36"/>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
        </reference>
      </references>
    </references>
    <?line 1081?>

<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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
u1/aEhdO1/As7kuf7EBq7g8SwuMhHk7Tq1xjMFEwVDq8duUN9aOhAFBpD+yR
TYiqOQAnuXM9eNVgx1p84Dz5S6cRAhEQ7Nc2U5YcmwoDeGyLhMpl6Mhjwy3c
BuxcSoGPBoosF2SJEz5na6aK3ImKQBxsxWhx2DKlxjpVH6wDbDnXsF/MxrOH
WdvcBrJUNOuGgohlHmrqiglfTHUde+pBY4GLYaZgeenKK7GDckiEneKp6R4W
mEcxNYYnK4Yja0Vcxlo1pBB5t5Faejm11/M6WUiPc7nP7zLORXlG+cWotygP
iDK2vnJnlIWtuDwYrL2V2l0bNdb2ukaBmosNE+Atb5/SE8Dz8EgUKJ8fnx9T
O3ahVdTlopyPsMgAVad2bj1UeEZP+TtpWMd4IivqwGLC3alUDD+91DWiKyW0
m7RJLKmVZNhJsaMcnNG5m3MdmiuMrmxO4V64GZNAPJ5cCh52mVSb0tS7CYMX
Rf5OcslTdcNipZoyiYt41gCg/DjBU6cluFsvQura7WrOxd3qkfw4mtJPtw6t
6f38Fyj/+zm0ZoMZ3WWgVrzOR8yIZYWGL/P+lubF6ATmRHe5bNo1ir0ZtYN4
Nv18ei/959CavoE+4vM5tOb/g9CadjD/hiE2n0NrvM/n0Jq7fj5daM1HiDWf
Q2s+h9Z8Dq35VZf2ObRmMxht8vkcWnPnz3+Z0Jo+E0ojyOb53u2MMxhv02uK
QheVvmgLPaC5iM1S2iiV2Jahcn/s2KZ0l4LQN5gtFBp+k3LhFd+WIAQdCkEG
ajRGsb0XFxXZ/mIL3V8M7+hq4sCtj0vtQNZvpMgMsmNfhBE2OzbxLOLe92eq
I1OmVDS6RC+F+DK1aV0icKgZh1jj3RGGruuV+mKtxOptPFIdcOOIDcfP0/Rs
uZtGVkrtKeLIHPEOiima3AvWG2J3DotOm+AN9rmguyHTQT1UxTbj6vHNEtru
DB6gS15ZWzsWrJSaw7pxs7R/84HBBSHDrFwkXFWk4YKmLg3wLIGZbLw0rC7v
kapLaX/uTub//I//WTp1x7m7wXgwOFcVeQbqZYf11jjunGLm0ovCbT+AtThr
2/zSWmFstJAEC7V/oO4DuhY7e0tsqAXBKPZrmNhghXHTF5GUt3Y7uAVPGxFS
nX6NNWbqHh8ChdJ4Dd5+NIZoUwzItrsgWOD0maAMg2kyQkd/0T6D7JEv58lS
u9i8wDAtanlNZ0oDXW1H165yOsdSGFV39KNqLKY+aSMISbcZDDsjYPa7YIHV
ubHdBp9e9u/x4Zz5OoTnXDE+F3ImcDQVlSamDoiNzhNlBAe1SHLdGRFxm+Lf
YLqZC0yvJSVSFvZSuI0UsaF6RR0T4MjgSR86uxaWZb0wcOysEx02SkX71XX1
hrWDcBJZEIbl6d7zGJ5Fjeab0ZMChIEGkWy01G8yJ14fPYSHedZrhuA2dHYm
w47n0Gla4NcqMmxY4NJydnxUPKb2T/Ucxtu7BAtEv8IgFJA5iSjq9hXqduZM
mkx7X0bCLnK2mSdwA4dRv7fIuoqcKDAn4koew9A1w8zF8+ufKiMtaIS1p8rG
0vXEZPDmy6sSE2DYoBGE9RHvcLNdE22KduybqVBIALGzdKUZGnbaWtkt0LM1
vWNdYjDp9O/x8BSMpz196CKMlUtxrTRBhzAznvIKZxWW1GJex6cyh+l4kzkE
diekd6k0fw3+UqsapzIh/K8AFBPk9lSD7vr65C+TCfpY32Zp8o73bfdWAuxu
u/Hp0N1FADBKe4a7MoKH1EIEw2C9uDxnv48zh7jSAlN0ukoDp3JNlOXwBq8r
xoPBTOpIyu1rJmFi25IFUjVADOCRIRNE3Y2kNeowiNKEK4Abprorwt0uLnYb
dm63UDOUIgFYuJKdzq0UBr99Wk/P66n+ivX6Cc472IqB34QL2JUBdnu6aO0K
iu9yXXryMBcoKge7VQ4T3R0Pds/1u4tyl8UQFAfx1wC927uwb9RbZJda0SCT
gmFMsbyioPrqenh6zkYjoUqdLwuM5DGPJKUuT2fk58V4cOi2xHLal/Qgu9ki
puahEaHdzs6mqzaPQUhR2tUGEq0ggf1ybmxTDD8qQ6sBHDHH+NumPog8GCgN
GjodVuzqTmTbhISR4Cvkzkr8fUFo29g+hKSkDXuH7IyptTKvnwL4bNF3IZee
FGfjq9auf8jsMkfuWCgrJ6S2ybOvD1CjQiT+pVok3ICA490lHhZ71+dRnrq8
2dJ/E6Le1x97cORG0RoNh7W+sm9nAPUusanPkFkD6XLU15lUMeTUhMcUa4zj
YuRasb4xIRF/ULjyQlI0nHZuMBsGatkDVaNuoEyAq5E+G7wYEypHHaxzkjR0
ScM6Czkq/mcM2Yoip9m1G7QIE1qJnEB9fNx4fMOncR6IBUI9OlZ7UYAUpWP6
ml2oS6PA6hi5Rk/v3c16X+dIWU7luBuitEvL2t0gF6n3eYzfUfwtlu2SoB7N
aSkAXYLhSLeVmc9ybTbZGwwej4NWPAX2ur/ZJYFd7tu2z8GzcVfRSmdwIksy
FbKT8Iw1mZ/3BdK/5D507Y0sLd6inSBPGEkvE4r3ay1j6Kxh6Fd28lIi1q6C
47lj7tyEx92FsG550gLs5iWFevb9vkp43rqGpzDuc2bcv7g/3U8Rz3uu4rm+
/NstIojuo77X3YtaNaOHPrLzg6mdBvLCNgk138DOn6l/7HT5VHprBN6yYJn+
oMTivfXuTSS8VWmo9NQYCkjUW/lv1o/eZUW9P/AYm3jAe+/55zrDvGiro6gY
8fRHM8wE8Gz0X+59ArJDibNItj+S6bXY6C0sGpu9uuMdY2PP8ZMom9YfJOpo
kB4Zk3xYJuVGCaxmDKfYdebJGlPTfZeT8ZxUJzIp1ibwNzH25i3G1a1g+5sG
M6L57Yg6I3mGnmrFyruvbVFpaaeEdqLTopq9onCyfGZ4Pi0Ph5dCoJzUnbXt
b63VywWMAFsSrODNKoPBIhHBWGSkJubkcyQtw+s/vJ7X3lnAWsNofa5KPPVu
jBYJyStTfU2CXu7CaH9p1fC7I6N94D3ksfDb8oKu+/9lzPqWk7mnMSyTfSXM
5j6Y7Cdbi8OoWzP/fwms/u9r6yHeah7tWoi//tYsG4Af3nEe8ybC3RrNuuoe
3r982zFGtxTnC3EaOA0h7l7n0fPz2nkYYP9nkibruF+a/KpPmrwzY0VRsq9U
Q5ffo9cZTDbEzc2HN0hxpL33Oxkd/5QISyx7bfHEtnqEMMpr75l/w6dc2/iX
V55UZl7RL+0N25cCsW+XbrzIlGzFnS132RBipMPtLcbzrR13+mLW1vm8LczQ
slif7cgaiVzp6j7QnE/MBmOsOW5jK/qsN6domaol5f2mS8rrnMR/QnPK5mM4
FNw3NBxd3t2A4U3l105W658LT+jXTzK6eUYf2Temkfhwc5LRhgPdx9I2TDK6
xdLu1r3kEyxtk6Duu82oOzVpcxjdsavJJ4CRb0c8uuzr9rPZjDrCzH1FbY3o
7A108+deBmpaM73132FGXuuWjxuoA3y3Tg27NantoLn3mxr2Sba/FZX/sTO6
U45Zxz13yzHruOduOWZ4z405Zvexa796LP6/XtHTKNKh5/1272ahnfS+W+l5
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
ivIk5SEBAA==

-->

</rfc>
