<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.19 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-network-device-subscription-10" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="RATS YANG Subscription">Attestation Event Stream Subscription</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-network-device-subscription-10"/>
    <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@ietf.contact</email>
      </address>
    </author>
    <author initials="E." surname="Voit" fullname="Eric Voit">
      <organization abbrev="Cisco">Cisco Systems, Inc.</organization>
      <address>
        <email>evoit@cisco.com</email>
      </address>
    </author>
    <author initials="W." surname="Pan" fullname="Wei Pan">
      <organization abbrev="Huawei">Huawei Technologies</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhuatai District</street>
          <city>Nanjing, Jiangsu</city>
          <region/>
          <code>210012</code>
          <country>China</country>
        </postal>
        <phone/>
        <email>william.panwei@huawei.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="30"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 84?>

<t>This document defines how to subscribe to YANG Event Streams for Remote Attestation Procedures (RATS).
Specifically, this document defines a YANG module that augments the YANG module for TPM-based Challenge-Response Remote Attestation (CHARRA), enabling subscription to RATS Conceptual Messages as defined in <xref section="1" sectionFormat="of" target="I-D.ietf-rats-msg-wrap"/> of the Evidence type and auxiliary Event Logs as part of that Evidence.
The module defined requires that at least one TPM 1.2 or TPM 2.0 (or equivalent hardware implementation providing the same protected capabilities as a TPM) must be available on the Attester on which the YANG server is running.</t>
    </abstract>
  </front>
  <middle>
    <?line 90?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC9683"/> and <xref target="RFC9684"/> define the operational prerequisites and a YANG Model for acquiring Evidence from a network device containing at least one Trusted Platform Module (TPM 1.2, TPM 2.0, or equivalent hardware implementations providing the same protected capabilities <xref target="TCG-Glossary"/> as a TPM).
However, these documents are based on the challenge-response interaction model (CHARRA in <xref section="7.1" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>), which has limitations.
One such limitation is that it is the responsibility of a Verifier to request signed Evidence from a separate Attester containing a TPM.
This means that the interval between a security-relevant change event occurring and the event becoming visible to the interested RATS entities, such as a Verifiers or a Relying Parties, can be unacceptably long.
It is common to convey Conceptual Messages as defined in <xref section="1" sectionFormat="of" target="I-D.ietf-rats-msg-wrap"/> ad-hoc or periodically via requests.
As new technologies emerge, some of these solutions require Conceptual Messages to be conveyed from one RATS entity to another without the need for continuous polling.
Subscription to YANG Notifications <xref target="RFC8639"/> provides a set of standardized tools to facilitate these emerging requirements.
This memo specifies a YANG augmentation for subscribing to YANG-modelled remote attestation Evidence, as defined in <xref target="RFC9684"/>.</t>
      <t>Essentially, the limitation of poll-based interactions has two adverse effects:</t>
      <ol spacing="normal" type="1"><li>
          <t>Conceptual Messages are not streamed to interested consumers of information (e.g., Verifiers or Relying Parties) as soon as they are generated.</t>
        </li>
        <li>
          <t>Even if they were streamed, the freshness of Conceptual Messages cannot be appraised in every scenario.
This is particularly important for Conceptual Messages, such as Evidence, that depend heavily on freshness.</t>
        </li>
      </ol>
      <t>This specification addresses the first adverse effect by enabling consumers of Conceptual Messages (subscribers) to request a continuous stream of new or updated Conceptual Messages via an <xref target="RFC8639"/> subscription to an &lt;attestation&gt; Event Stream.
This new Event Stream is defined in this document and is provided by the producer of Conceptual Messages (the publisher).
As covered by this document, via a Verifier's subscription to an Attester's Evidence, the Attester will continuously stream a requested set of freshly generated Evidence to the subscribing Verifier.
For example, when a network device's Evidence changes following events such as booting, updating, control unit failover, plugging in or out of forwarding units, an attack, or certificate lifetime change, the network device will generate fresh Evidence available to the subscribing Verifier.</t>
      <t>The second adverse effect stems from the use of nonces in the challenge-response interaction model <xref section="7.1" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/> realized in <xref target="RFC9684"/>.
According to <xref target="RFC9684"/>, an Attester must wait for a new nonce from a Verifier before generating a new TPM Quote.
To address delays resulting from this wait, this specification allows freshness to be asserted asynchronously via the streaming attestation interaction model <xref target="I-D.ietf-rats-reference-interaction-models"/>.
To convey a RATS Conceptual Message, an initial nonce is provided when subscribing to an Event Stream.</t>
      <t>There are several options to populate or refresh the nonce value provided by the initial subscription.
All of these methods are out-of-band of an established subscription to YANG Notifications.
Two alternative methods are taken into account by this document:</t>
      <ol spacing="normal" type="1"><li>
          <t>A central provider supplies new, fresh nonces (e.g., via a Handle Provider that distributes Epoch IDs to all entities in a domain as described in <xref target="RFC9334"/> and as facilitated by the Uni-Directional Remote Attestation described in <xref section="7.2" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>), or</t>
        </li>
        <li>
          <t>A nonce can be updated by -- potentially periodically or ad-hoc -- sending out-of-band TPM Quote requests as facilitated by <xref target="RFC9684"/>.</t>
        </li>
      </ol>
      <t>Both approaches assume that clock drift can occur between the entities involved.
Consequently, other conditions arising in different application scenarios ought to be considered in the same way. For example, the time of Claims collection ought to be taken into account as it potentially impacts the freshness of Evidence.</t>
      <t>The scope of this document is limited to the removal of the two adverse effects described when using the specified YANG augmentation.
In essence, the YANG augmentation enables RATS Verifiers to maintain a continuous appraisal procedure of verifiably fresh Attester Evidence without relying on continuous polling.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The following terms are imported from <xref target="RFC9334"/>: Attester, Conceptual Message, Evidence, Relying Party, and Verifier.  Also imported are the time definitions time(VG), time(NS), time(EG), time(RG), and time(RA) from that document's Appendix A.  The following terms are imported from <xref target="RFC8639"/>: Event Stream, Subscription, Publisher, Event Stream Filter, Dynamic Subscription.</t>
      <section anchor="requirements-notation">
        <name>Requirements Notation</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
    </section>
    <section anchor="operational-model">
      <name>Operational Model</name>
      <t><xref target="RFC9683"/> describes the conveyance of TPM-based Evidence from a Verifier to an Attester using the CHARRA interaction model <xref section="7.1" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>. The operational model and corresponding sequence diagram described in this section is based on <xref target="RFC9684"/>. The basis for interoperability required for additional types of Event Streams is covered in <xref target="otherstreams"/>. The following sub-section focuses on subscription to YANG Notifications of the &lt;attestation&gt; Event Stream.</t>
      <section anchor="sequence-diagrams">
        <name>Sequence Diagrams</name>
        <t>This section illustrates the subscription interaction model by mapping terms from <xref target="I-D.ietf-rats-reference-interaction-models"/> and illustrating timing consideration based on Figure 3 of <xref target="RFC9683"/>.
Both sequence diagrams <xref target="term-sequence"/> and <xref target="time-sequence"/> highlight TPM-specific aspects and the Dynamic Subscription (as specified in <xref target="RFC8639"/>) to an &lt;attestation&gt; Event Stream.
The contents of the &lt;attestation&gt; Event Stream are defined below within <xref target="attestationstream"/>.</t>
        <section anchor="terminology-mapping">
          <name>Terminology Mapping</name>
          <t>The terms defined in <xref target="RFC9684"/> are mapped to the model described in <xref section="7.3.1" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/> (Streaming Remote Attestation without a Broker) to produce the sequence diagram <xref target="term-sequence"/>.</t>
          <t>The terminology mapping is as follows:</t>
          <ul spacing="normal">
            <li>
              <t><tt>handle</tt> is substituted with <tt>nonce</tt>, a nonce generated by the Verifier. This is a nonce-value byte string, obtained from either the tpm12-challenge-response-attestation remote procedure call (RPC) or the tpm20-challenge-response-attestation RPC, as specified in <xref target="RFC9684"/>. Hence, in this case, a 'nonce' value is populated out of band and can be used more than once within the scope of a subscription, based on local policies that enforce freshness requirements.</t>
            </li>
            <li>
              <t><tt>attEnvIDs</tt> is substituted with <tt>TpmName</tt>, a TPM "name" text string selected from the <tt>tpms</tt> Container, as specified in <xref target="RFC9684"/></t>
            </li>
            <li>
              <t><tt>claimsSelection</tt> is substituted with <tt>PcrSelection</tt>, an optional "pcr-index" from either the tpm12-challenge-response-attestation RPC or the tpm20-challenge-response-attestation RPC as specified in <xref target="RFC9684"/>. If no Platform Configuration Record (PCR) is selected, all PCR banks are returned.</t>
            </li>
            <li>
              <t><tt>claims</tt> is substituted with <tt>PcrQuotes</tt>, which is the "output" of either the tpm12-challenge-response-attestation RPC or the tpm20-challenge-response-attestation RPC, as specified in <xref target="RFC9684"/>. Unlike event logs, there is no delta to a previous iteration of PCR Quotes during a subscription; all new (selected) Quotes are conveyed as fresh Evidence.</t>
            </li>
            <li>
              <t><tt>eventLogs</tt> represents "system-event-logs" that are in the "output" of the log-retrieval RPC, as defined in <xref target="RFC9684"/>.</t>
            </li>
            <li>
              <t><tt>eventLogsDelta</tt> represents "system-event-logs" as specified in the "output" of the log-retrieval RPC as defined in <xref target="RFC9684"/> where the "output" is limited as if the "input" were parameterized via an index type (last-entry, index, timestamp) set to the last event in the previously conveyed <tt>eventLogs</tt>.</t>
            </li>
          </ul>
          <figure anchor="term-sequence">
            <name>YANG Subscription Model for 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 360,32 L 360,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 360,32 L 576,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 360,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 216,126" fill="none" stroke="black"/>
                  <path d="M 24,130 L 216,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 200,208" fill="none" stroke="black"/>
                  <path d="M 128,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 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 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="404" y="52">Verifier</text>
                    <text x="448" y="52">/</text>
                    <text x="488" y="52">Relying</text>
                    <text x="544" y="52">Party</text>
                    <text x="108" y="100">[loop]</text>
                    <text x="48" y="116">|</text>
                    <text x="536" y="116">|</text>
                    <text x="244" y="132">[Nonce</text>
                    <text x="320" y="132">Generation]</text>
                    <text x="536" y="148">|</text>
                    <text x="504" y="164">generateNonce()</text>
                    <text x="496" y="180">nonce&lt;=</text>
                    <text x="276" y="212">subscribe(nonce,</text>
                    <text x="380" y="212">TpmName,</text>
                    <text x="472" y="212">?PcrSelecion)</text>
                    <text x="88" y="228">{nonce}</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="124" y="308">PcrQuotes,</text>
                    <text x="208" y="308">eventLogs</text>
                    <text x="116" y="340">collectClaims(PcrQuotes,</text>
                    <text x="276" y="340">?PcrSelection)</text>
                    <text x="68" y="356">=&gt;</text>
                    <text x="144" y="356">collectedClaims</text>
                    <text x="112" y="388">generateEvidence(nonce,</text>
                    <text x="244" y="388">TpmName,</text>
                    <text x="348" 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="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="124" y="676">PcrQuotes,</text>
                    <text x="228" y="676">eventLogsDelta</text>
                    <text x="124" y="708">collectClaims(PcrQuotes,</text>
                    <text x="284" y="708">?PcrSelection)</text>
                    <text x="68" y="724">=&gt;</text>
                    <text x="164" y="724">collectedClaimsDelta</text>
                    <text x="120" y="756">generateEvidence(nonce,</text>
                    <text x="252" y="756">TpmName,</text>
                    <text x="376" 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 / Relying Party |
'----+-----'                                '---------------------+----'
     |                                                            |
 .--------[loop]------------------------------------------------------.
|    |                                                            |    |
| =========================[Nonce Generation]========================= |
|    |                                                            |    |
|    |                                                 generateNonce() |
|    |                                                    nonce<= |    |
|    |                                                            |    |
|    |<------------------ subscribe(nonce, TpmName, ?PcrSelecion) |    |
|    | {nonce} -------------------------------------------------->|    |
|    |                                                            |    |
| ===============[Evidence Generation and Conveyance]================= |
|    |                                                            |    |
| generateClaims(attestingEnvironment)                            |    |
|    | => PcrQuotes, eventLogs                                    |    |
|    |                                                            |    |
| collectClaims(PcrQuotes, ?PcrSelection)                         |    |
|    | => collectedClaims                                         |    |
|    |                                                            |    |
| generateEvidence(nonce, TpmName, collectedClaims)               |    |
|    | => evidence                                                |    |
|    |                                                            |    |
|    | {evidence, eventLogs} ------------------------------------>|    |
|    |                                                            |    |
| ========================[Evidence Appraisal]======================== |
|    |                                                            |    |
|    |                                      appraiseEvidence(evidence, |
|    |                                                      eventLogs, |
|    |                                                      verInputs) |
|    |                                       attestationResult <= |    |
|    ~                                                            ~    |
|    |                                                            |    |
| .--------[loop]----------------------------------------------------. |
||   |                                                            |   ||
|| ============[Delta Evidence Generation and Conveyance]============ ||
||   |                                                            |   ||
|| generateClaims(attestingEnvironment)                           |   ||
||   | => PcrQuotes, eventLogsDelta                               |   ||
||   |                                                            |   ||
|| collectClaims(PcrQuotes, ?PcrSelection)                        |   ||
||   | => collectedClaimsDelta                                    |   ||
||   |                                                            |   ||
|| generateEvidence(nonce, TpmName, collectedClaimsDelta)         |   ||
||   | => evidence                                                |   ||
||   |                                                            |   ||
||   | {evidence, eventLogsDelta} ------------------------------->|   ||
||   |                                                            |   ||
|| ====================[Delta Evidence Appraisal]==================== ||
||   |                                                            |   ||
||   |                                     appraiseEvidence(evidence, ||
||   |                                                eventLogsDelta, ||
||   |                                                     verInputs) ||
||   |                                       attestationResult <= |   ||
||   |                                                            |   ||
| '------------------------------------------------------------------' |
 '--------------------------------------------------------------------'
     |                                                            |
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="time-considerations-mapping">
          <name>Time Considerations Mapping</name>
          <t><xref target="RFC9334"/> defines "Relevant Events over Time" in RATS which also provides the input for Figure 3 of <xref target="RFC9683"/>.
The following sequence diagram focusses on matching the defined events with the interactions between the Attester and the Verifying Relying Party.
The action of conveying "collectClaims", which is defined in <xref section="6" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>, is not defined by <xref target="RFC9334"/>.
As a result, that action cannot be matched to a specified event time.</t>
          <figure anchor="time-sequence">
            <name>YANG Subscription Model for Remote Attestation</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="800" width="560" viewBox="0 0 560 800" 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,112 L 48,160" fill="none" stroke="black"/>
                  <path d="M 48,192 L 48,208" fill="none" stroke="black"/>
                  <path d="M 48,256 L 48,432" fill="none" stroke="black"/>
                  <path d="M 48,496 L 48,512" fill="none" stroke="black"/>
                  <path d="M 48,544 L 48,560" fill="none" stroke="black"/>
                  <path d="M 48,608 L 48,784" fill="none" stroke="black"/>
                  <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                  <path d="M 336,32 L 336,64" fill="none" stroke="black"/>
                  <path d="M 512,64 L 512,136" fill="none" stroke="black"/>
                  <path d="M 512,152 L 512,360" fill="none" stroke="black"/>
                  <path d="M 512,464 L 512,696" fill="none" stroke="black"/>
                  <path d="M 512,768 L 512,784" fill="none" stroke="black"/>
                  <path d="M 528,400 L 528,408" fill="none" stroke="black"/>
                  <path d="M 528,736 L 528,744" fill="none" stroke="black"/>
                  <path d="M 552,32 L 552,64" fill="none" stroke="black"/>
                  <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                  <path d="M 336,32 L 552,32" fill="none" stroke="black"/>
                  <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                  <path d="M 336,64 L 552,64" fill="none" stroke="black"/>
                  <path d="M 56,144 L 128,144" fill="none" stroke="black"/>
                  <path d="M 424,144 L 472,144" fill="none" stroke="black"/>
                  <path d="M 224,304 L 504,304" fill="none" stroke="black"/>
                  <path d="M 408,320 L 504,320" fill="none" stroke="black"/>
                  <path d="M 192,336 L 504,336" fill="none" stroke="black"/>
                  <path d="M 224,640 L 504,640" fill="none" stroke="black"/>
                  <path d="M 408,656 L 504,656" fill="none" stroke="black"/>
                  <path d="M 192,672 L 504,672" fill="none" stroke="black"/>
                  <path class="jump" d="M 512,152 C 506,152 506,136 512,136" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="512,672 500,666.4 500,677.6" fill="black" transform="rotate(0,504,672)"/>
                  <polygon class="arrowhead" points="512,656 500,650.4 500,661.6" fill="black" transform="rotate(0,504,656)"/>
                  <polygon class="arrowhead" points="512,640 500,634.4 500,645.6" fill="black" transform="rotate(0,504,640)"/>
                  <polygon class="arrowhead" points="512,336 500,330.4 500,341.6" fill="black" transform="rotate(0,504,336)"/>
                  <polygon class="arrowhead" points="512,320 500,314.4 500,325.6" fill="black" transform="rotate(0,504,320)"/>
                  <polygon class="arrowhead" points="512,304 500,298.4 500,309.6" fill="black" transform="rotate(0,504,304)"/>
                  <polygon class="arrowhead" points="64,144 52,138.4 52,149.6" fill="black" transform="rotate(180,56,144)"/>
                  <g class="text">
                    <text x="52" y="52">Attester</text>
                    <text x="380" y="52">Verifier</text>
                    <text x="424" y="52">/</text>
                    <text x="464" y="52">Relying</text>
                    <text x="520" y="52">Party</text>
                    <text x="60" y="84">time(VG)</text>
                    <text x="148" y="100">generateClaims(attestingEnvironment)</text>
                    <text x="68" y="116">=&gt;</text>
                    <text x="124" y="116">PcrQuotes,</text>
                    <text x="208" y="116">eventLogs</text>
                    <text x="276" y="148">establish-subscription(&lt;attestation&gt;</text>
                    <text x="492" y="148">time</text>
                    <text x="528" y="148">NS)</text>
                    <text x="100" y="180">collectClaims(PcrQuotes,</text>
                    <text x="260" y="180">?PcrSelection)</text>
                    <text x="68" y="196">=&gt;</text>
                    <text x="144" y="196">collectedClaims</text>
                    <text x="60" y="228">time(EG)</text>
                    <text x="96" y="244">generateEvidence(nonce,</text>
                    <text x="248" y="244">PcrSelection,</text>
                    <text x="372" y="244">collectedClaims)</text>
                    <text x="68" y="260">=&gt;</text>
                    <text x="180" y="260">SignedPcrEvidence(nonce,</text>
                    <text x="336" y="260">PcrSelection)</text>
                    <text x="68" y="276">=&gt;</text>
                    <text x="196" y="276">LogEvidence(collectedClaims)</text>
                    <text x="136" y="308">--filter(&lt;pcr-extend&gt;</text>
                    <text x="136" y="324">--&lt;tpm12-attestation&gt;</text>
                    <text x="236" y="324">or</text>
                    <text x="328" y="324">&lt;tpm20-attestation&gt;</text>
                    <text x="120" y="340">--&lt;log-retrieval&gt;</text>
                    <text x="496" y="372">time(RG,RA)</text>
                    <text x="428" y="388">appraiseEvidence(evidence,</text>
                    <text x="488" y="404">eventLogs</text>
                    <text x="492" y="420">verInputs)</text>
                    <text x="408" y="436">attestationResult</text>
                    <text x="492" y="436">&lt;=</text>
                    <text x="512" y="436">|</text>
                    <text x="48" y="452">~</text>
                    <text x="512" y="452">~</text>
                    <text x="64" y="468">time(VG')</text>
                    <text x="148" y="484">generateClaims(attestingEnvironment)</text>
                    <text x="68" y="500">=&gt;</text>
                    <text x="124" y="500">PcrQuotes,</text>
                    <text x="228" y="500">eventLogsDelta</text>
                    <text x="100" y="532">collectClaims(PcrQuotes,</text>
                    <text x="260" y="532">?PcrSelection)</text>
                    <text x="68" y="548">=&gt;</text>
                    <text x="164" y="548">collectedClaimsDelta</text>
                    <text x="64" y="580">time(EG')</text>
                    <text x="96" y="596">generateEvidence(nonce,</text>
                    <text x="228" y="596">TpmName,</text>
                    <text x="352" y="596">collectedClaimsDelta)</text>
                    <text x="68" y="612">=&gt;</text>
                    <text x="116" y="612">evidence</text>
                    <text x="136" y="644">--filter(&lt;pcr-extend&gt;</text>
                    <text x="136" y="660">--&lt;tpm12-attestation&gt;</text>
                    <text x="236" y="660">or</text>
                    <text x="328" y="660">&lt;tpm20-attestation&gt;</text>
                    <text x="120" y="676">--&lt;log-retrieval&gt;</text>
                    <text x="496" y="708">time(RG,RA)</text>
                    <text x="428" y="724">appraiseEvidence(evidence,</text>
                    <text x="488" y="740">eventLogs</text>
                    <text x="492" y="756">verInputs)</text>
                    <text x="408" y="772">attestationResult</text>
                    <text x="492" y="772">&lt;=</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
.----------.                             .--------------------------.
| Attester |                             | Verifier / Relying Party |
'----+-----'                             '---------------------+----'
   time(VG)                                                    |
generateClaims(attestingEnvironment)                           |
     | => PcrQuotes, eventLogs                                 |
     |                                                         |
     |<---------establish-subscription(<attestation>)------time(NS)
     |                                                         |
collectClaims(PcrQuotes, ?PcrSelection)                        |
     | => collectedClaims                                      |
     |                                                         |
   time(EG)                                                    |
generateEvidence(nonce, PcrSelection, collectedClaims)         |
     | => SignedPcrEvidence(nonce, PcrSelection)               |
     | => LogEvidence(collectedClaims)                         |
     |                                                         |
     |--filter(<pcr-extend>)---------------------------------->|
     |--<tpm12-attestation> or <tpm20-attestation>------------>|
     |--<log-retrieval>--------------------------------------->|
     |                                                         |
     |                                                  time(RG,RA)
     |                                  appraiseEvidence(evidence,
     |                                                  eventLogs,
     |                                                  verInputs)
     |                                    attestationResult <= |
     ~                                                         ~
   time(VG')                                                   |
generateClaims(attestingEnvironment)                           |
     | => PcrQuotes, eventLogsDelta                            |
     |                                                         |
collectClaims(PcrQuotes, ?PcrSelection)                        |
     | => collectedClaimsDelta                                 |
     |                                                         |
   time(EG')                                                   |
generateEvidence(nonce, TpmName, collectedClaimsDelta)         |
     | => evidence                                             |
     |                                                         |
     |--filter(<pcr-extend>)---------------------------------->|
     |--<tpm12-attestation> or <tpm20-attestation>------------>|
     |--<log-retrieval>--------------------------------------->|
     |                                                         |
     |                                                  time(RG,RA)
     |                                  appraiseEvidence(evidence,
     |                                                  eventLogs,
     |                                                  verInputs)
     |                                    attestationResult <= |
     |                                                         |
]]></artwork>
            </artset>
          </figure>
          <ul spacing="normal">
            <li>
              <t>time(VG,RG,RA) are identical to the corresponding time definitions from <xref target="RFC9683"/>.</t>
            </li>
            <li>
              <t>time(VG',RG',RA') are subsequent instances of the corresponding times from Figure 3 in <xref target="RFC9683"/>.</t>
            </li>
            <li>
              <t>time(NS) – the subscriber generates a nonce and makes an <xref target="RFC8639"/> &lt;establish-subscription&gt; request based on that nonce value. This request also includes the augmentations defined in this document's YANG model. Key subscription RPC parameters include:
              </t>
              <ul spacing="normal">
                <li>
                  <t>the nonce,</t>
                </li>
                <li>
                  <t>a set of PCRs of interest which the Verifier wants to be appraised, and</t>
                </li>
                <li>
                  <t>an optional filter that can reduce the logged events on the &lt;attestation&gt; stream pushed to the Verifier.</t>
                </li>
              </ul>
            </li>
            <li>
              <t>time(EG) – an initial response of Evidence is returned to the Verifier. This includes:
              </t>
              <ul spacing="normal">
                <li>
                  <t>a replay of filtered log entries, which have extended into a PCR of interest since boot, are sent in the &lt;pcr-extend&gt; notification, and</t>
                </li>
                <li>
                  <t>a signed TPM quote that contains at least the PCRs from the &lt;establish-subscription&gt; RPC are included in a &lt;tpm12-attestation&gt; or &lt;tpm20-attestation&gt;). This quote must have been generated based on the nonce value provided at time(NS).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>time(VG',EG') – this occurs when a PCR is extended subsequent to time(EG). Immediately after the extension, the following information needs to be pushed to the Verifier:
              </t>
              <ul spacing="normal">
                <li>
                  <t>any values extended into a PCR of interest,</t>
                </li>
                <li>
                  <t>a signed TPM Quote showing the result the PCR extension, and</t>
                </li>
                <li>
                  <t>a nonce value (see 'handle' above or <xref section="6" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>), which is either the initially received nonce or a more recently received nonce value, for example, a nonce value extracted or derived from an Epoch ID (see <xref section="10.3" sectionFormat="of" target="RFC9334"/>) that contains a new nonce value or equivalent qualified data used as a nonce value.</t>
                </li>
              </ul>
            </li>
          </ul>
          <t>One way to acquire a new time synchronisation that allows for the reuse of the initially received nonce as a fresh handle is elaborated on in <xref target="freshness-handles"/> below.</t>
        </section>
      </section>
      <section anchor="freshness-handles">
        <name>Continuously Verifying Freshness</name>
        <t>As there is no new Verifier nonce provided at time(EG'), it is important to validate the freshness of TPM Quotes which are delivered at that time.Methods of doing this verification vary based on the capabilities of the TPM cryptoprocessor used.</t>
        <section anchor="tpm-12-quote">
          <name>TPM 1.2 Quote</name>
          <t>The <xref target="RFC8639"/> notification format includes the &lt;eventTime&gt; object.  This can be used to determine the amount of time subsequent to the initial subscription each notification was sent.  However, this time is not part of the signed results which are returned from the Quote and therefore is not trustworthy as objects returned as part of the Quote.  Therefore, a Verifier <bcp14>MUST</bcp14> periodically issue a new nonce and receive this nonce within a TPM quote response in order to ensure the freshness of the results.  This can be done using the &lt;tpm12-challenge-response-attestation&gt; RPC from <xref target="RFC9684"/>.</t>
        </section>
        <section anchor="tpm-2-quote">
          <name>TPM 2 Quote</name>
          <t>When the Attester includes a TPM2-compliant cryptoprocessor, internal time-related counters are included within the signed TPM Quote.  By including an initial nonce in the <xref target="RFC8639"/> subscription request, fresh values for these counters are pushed to the Verifier as part of the first TPM Quote. As shown by <xref target="I-D.birkholz-rats-tuda"/>, subsequent TPM Quotes delivered to the Verifier out-of-band can be appraised for freshness based on the predictable incrementing of these time-related counters.</t>
          <t>The relevant internal time-related counters defined within <xref target="TPM2.0"/> can be seen within &lt;tpms-clock-info&gt;.   These counters include the &lt;clock&gt;, &lt;reset-counter&gt;, and &lt;restart-counter&gt; objects.  The rules for appraising these objects are as follows:</t>
          <ul spacing="normal">
            <li>
              <t>If the &lt;clock&gt; has incremented for no more than the same duration as both the &lt;eventTime&gt; and the Verifier's internal time since the initial time(EG) and any previous time(EG'), then the TPM Quote may be considered fresh. Note that <xref target="TPM2.0"/> allows for +/- 15% clock drift.  However, many hardware implementations significantly improve on this maximum drift.  If available, chip specific maximum drifts <bcp14>SHOULD</bcp14> be considered during the appraisal procedure of the Verifier.</t>
            </li>
            <li>
              <t>If the &lt;reset-counter&gt;, &lt;restart-counter&gt; has incremented.  The existing subscription <bcp14>MUST</bcp14> be terminated, and a new &lt;establish-subscription&gt; <bcp14>SHOULD</bcp14> be generated.</t>
            </li>
            <li>
              <t>If a TPM Quote on any subscribed PCR has not been pushed to the Verifier for a duration of an Attester defined heartbeat interval, then a new TPM Quote notification <bcp14>SHOULD</bcp14> be sent to the Verifier.  This may often be the case, as certain PCRs might be infrequently updated.</t>
            </li>
          </ul>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="208" width="520" viewBox="0 0 520 208" 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,96 L 48,112" fill="none" stroke="black"/>
                <path d="M 48,176 L 48,192" fill="none" stroke="black"/>
                <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                <path d="M 296,32 L 296,64" fill="none" stroke="black"/>
                <path d="M 464,72 L 464,112" fill="none" stroke="black"/>
                <path d="M 464,144 L 464,192" fill="none" stroke="black"/>
                <path d="M 512,32 L 512,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                <path d="M 296,32 L 512,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                <path d="M 296,64 L 512,64" fill="none" stroke="black"/>
                <path d="M 216,96 L 456,96" fill="none" stroke="black"/>
                <path d="M 216,176 L 456,176" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="464,176 452,170.4 452,181.6" fill="black" transform="rotate(0,456,176)"/>
                <polygon class="arrowhead" points="464,96 452,90.4 452,101.6" fill="black" transform="rotate(0,456,96)"/>
                <g class="text">
                  <text x="52" y="52">Attester</text>
                  <text x="336" y="52">Relying</text>
                  <text x="392" y="52">Party</text>
                  <text x="424" y="52">/</text>
                  <text x="468" y="52">Verifier</text>
                  <text x="80" y="84">time(VG',EG')</text>
                  <text x="132" y="100">-&lt;tpm20-attestation&gt;</text>
                  <text x="344" y="116">:</text>
                  <text x="48" y="132">~</text>
                  <text x="304" y="132">Heartbeat</text>
                  <text x="380" y="132">interval</text>
                  <text x="464" y="132">~</text>
                  <text x="48" y="148">|</text>
                  <text x="344" y="148">:</text>
                  <text x="64" y="164">time(EG')</text>
                  <text x="344" y="164">:</text>
                  <text x="132" y="180">-&lt;tpm20-attestation&gt;</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
.----------.                        .--------------------------.
| Attester |                        | Relying Party / Verifier |
'----------'                        '--------------------------'
   time(VG',EG')                                         |
     |-<tpm20-attestation>------------------------------>|
     |                                    :              |
     ~                           Heartbeat interval      ~
     |                                    :              |
   time(EG')                              :              |
     |-<tpm20-attestation>------------------------------>|
     |                                                   |
]]></artwork>
          </artset>
        </section>
      </section>
    </section>
    <section anchor="attestationstream">
      <name>Remote Attestation Event Stream</name>
      <t>The &lt;attestation&gt; Event Stream is an <xref target="RFC8639"/> compliant Event Stream which is defined within this section and within the YANG Module of <xref target="RFC9684"/>. This Event Stream contains YANG notifications which carry Evidence to assist a Verifier in appraising the Trustworthiness Level of an Attester. Data Nodes within <xref target="configuring"/> allow the configuration of this Event Stream's contents originating from an Attester.</t>
      <t>This &lt;attestation&gt; Event Stream may only be exposed on Attesters supporting <xref target="RFC9683"/>. As with <xref target="RFC9683"/>, it is up to the Verifier to understand which types of cryptoprocessors and keys are acceptable.</t>
      <section anchor="subscription-to-the-attestation-event-stream">
        <name>Subscription to the &lt;attestation&gt; Event Stream</name>
        <t>To establish a subscription to an Attester in a way which provides provably fresh Evidence, initial randomness must be provided to the Attester. This is done via the augmentation of a &lt;nonce-value&gt; into <xref target="RFC8639"/> the &lt;establish-subscription&gt; RPC. Additionally, a Verifier must ask for PCRs of interest from a platform.</t>
        <artwork><![CDATA[
  augment /sn:establish-subscription/sn:input:
    +---w nonce-value    binary
    +---w pcr-index*     tpm:pcr
]]></artwork>
        <t>The result of the subscription will be that passing of the following information:</t>
        <ol spacing="normal" type="1"><li>
            <t>&lt;tpm12-attestation&gt; and &lt;tpm20-attestation&gt; notifications which include the provided &lt;nonce-value&gt;.  These attestation notifications <bcp14>MUST</bcp14> at least include all the &lt;pcr-indicies&gt; requested in the RPC.</t>
          </li>
          <li>
            <t>a series of &lt;pcr-extend&gt; notifications which reference the requested PCRs on all TPM based cryptoprocessors on the Attester.</t>
          </li>
          <li>
            <t>&lt;tpm12-attestation&gt; and &lt;tpm20-attestation&gt; notifications generated within a few seconds of the &lt;pcr-extend&gt; notifications.  These attestation notifications <bcp14>MUST</bcp14> at least include any PCRs extended.</t>
          </li>
        </ol>
        <t>If the Verifier does not want to see the logged extend operations for all PCRs available from an Attester, an Event Stream Filter should be applied.  This filter will remove Evidence from any PCRs which are not interesting to the Verifier.</t>
      </section>
      <section anchor="replaying-a-history-of-previous-tpm-extend-operations">
        <name>Replaying a History of Previous TPM Extend Operations</name>
        <t>Unless it is relying on Reference Values for TPM Quotes only, a Verifier will need to acquire a history of PCR extensions since the Attester has been booted.  This history may be requested from the Attester as part of the &lt;establish-subscription&gt; RPC.  This request is accomplished by placing a very old &lt;replay-start-time&gt; within the original RPC request.  As the very old &lt;replay-start-time&gt; will pre-date the time of Attester boot, a &lt;replay-start-time-revision&gt; will be returned in the &lt;establish-subscription&gt; RPC response, indicating when the Attester booted.  Immediately following the response (and before the notifications above) one or more &lt;pcr-extend&gt; notifications which document all extend operations which have occurred for the requested PCRs since boot will be sent.  Multiple extend operations to a single PCR index on a single TPM can be included within a single notification.</t>
        <t>Note that if a Verifier has a partial history of extensions, the &lt;replay-start-time&gt; can be adjusted so that already known extensions are not forwarded.</t>
        <t>The end of this history replay will be indicated with the <xref target="RFC8639"/> &lt;replay-completed&gt; notification.  For more on this sequence, see Section 2.4.2.1 of <xref target="RFC8639"/>.</t>
        <t>After the &lt;replay-complete&gt; notification is provided, a TPM Quote will be requested and the result passed to the Verifier via a &lt;tpm12-attestation&gt; and &lt;tpm20-attestation&gt; notification.  If there have been any additional extend operations which have changed a subscribed PCR value in this quote, these <bcp14>MUST</bcp14> be pushed to the Verifier before the &lt;tpm12-attestation&gt; and &lt;tpm20-attestation&gt; notification.</t>
        <t>At this point, the Verifier has sufficient Evidence to appraise the reported extend operations for each PCR, as well as to compare a Reference Value derived from the replay of the Event Log history of extensions of the PCR value against those extensions signed by the TPM in its most recent Quote.</t>
        <section anchor="tpm2-heartbeat">
          <name>TPM2 Heartbeat</name>
          <t>For TPM 2.0, every requested PCR <bcp14>MUST</bcp14> be sent within an &lt;tpm20-attestation&gt; and no less frequent than once per heartbeat interval.   This <bcp14>MAY</bcp14> be done with a single &lt;tpm20-attestation&gt; notification that includes all requested PCRs inside every heartbeat interval.  This <bcp14>MAY</bcp14> be done with several &lt;tpm20-attestation&gt; notifications at different times during a heartbeat interval.</t>
        </section>
      </section>
      <section anchor="yang-notifications-placed-on-the-attestation-event-stream">
        <name>YANG Notifications Placed on the &lt;attestation&gt; Event Stream</name>
        <section anchor="pcr-extend">
          <name>pcr-extend</name>
          <t>This notification type documents when a subscribed PCR is extended within a single TPM cryptoprocessor.  It <bcp14>SHOULD</bcp14> be emitted no less than the &lt;marshalling-period&gt; after the PCR is first extended.  (The reason for the marshalling is that it is quite possible that multiple extensions to the same PCR have been made in quick succession, and these should be reflected in the same notification.)  This notification <bcp14>MUST</bcp14> be emitted prior to a &lt;tpm12-attestation&gt; or &lt;tpm20-attestation&gt; notification which has included and signed the results of any specific PCR extension.  If PCR extending events occur during the generation of the &lt;tpm12-attestation&gt; or &lt;tpm20-attestation&gt; notification, the marshalling period <bcp14>MUST</bcp14> be extended so that a new &lt;pcr-extend&gt; is not sent until the corresponding notifications have been sent.</t>
          <artwork><![CDATA[
+---n pcr-extend
   +--ro certificate-name     certificate-name-ref
   +--ro pcr-index-changed*   tpm:pcr
   +--ro attested-event* []
      +--ro attested-event
         +--ro extended-with             binary
         +--ro (event-details)?
            +--:(bios-event-log) {tpm:bios}?
            |  +--ro bios-event-entry* [event-number]
            |     +--ro event-number    uint32
            |     +--ro event-type?     uint32
            |     +--ro pcr-index?      pcr
            |     +--ro digest-list* []
            |     |  +--ro hash-algo?   identityref
            |     |  +--ro digest*      binary
            |     +--ro event-size?     uint32
            |     +--ro event-data*     uint8
            +--:(ima-event-log) {tpm:ima}?
            |  +--ro ima-event-entry* [event-number]
            |     +--ro event-number               uint64
            |     +--ro ima-template?              string
            |     +--ro filename-hint?             string
            |     +--ro filedata-hash?             binary
            |     +--ro filedata-hash-algorithm?   string
            |     +--ro template-hash-algorithm?   string
            |     +--ro template-hash?             binary
            |     +--ro pcr-index?                 pcr
            |     +--ro signature?                 binary
            +--:(netequip-boot-event-log) {tpm:netequip_boot}?
               +--ro boot-event-entry* [event-number]
                  +--ro event-number               uint64
                  +--ro ima-template?              string
                  +--ro filename-hint?             string
                  +--ro filedata-hash?             binary
                  +--ro filedata-hash-algorithm?   string
                  +--ro template-hash-algorithm?   string
                  +--ro template-hash?             binary
                  +--ro pcr-index?                 pcr
                  +--ro signature?                 binary
]]></artwork>
          <t>Each &lt;pcr-extend&gt; <bcp14>MUST</bcp14> include one or more values being extended into the PCR.  These are passed within the &lt;extended-with&gt; object.  For each extension, details of the event <bcp14>SHOULD</bcp14> be provided within the &lt;event-details&gt; object.
The format of any included &lt;event-details&gt; is identified by the &lt;event-type&gt;.  This document includes two YANG structures which may be inserted into the &lt;event-details&gt;.  These two structures are: &lt;ima-event-log&gt; and &lt;bios-event-log&gt;.  Implementations wanting to provide additional documentation of a type of PCR extension may choose to define additional YANG structures which can be placed into &lt;event-details&gt;.</t>
        </section>
        <section anchor="tpm12-attestation">
          <name>tpm12-attestation</name>
          <t>This notification contains an instance of a TPM1.2 style signed cryptoprocessor measurement. It is supplemented by Attester information which is not signed. This notification is generated and emitted from an Attester when at least one PCR identified within the subscribed &lt;pcr-indices&gt; has changed from the previous &lt;tpm12-attestation&gt; notification.  This notification <bcp14>MUST NOT</bcp14> include the results of any PCR extensions not previously reported by a &lt;pcr-extend&gt;.  This notification <bcp14>SHOULD</bcp14> be emitted as soon as a TPM Quote can extract the latest PCR hashed values.  This notification <bcp14>MUST</bcp14> be emitted prior to a subsequent &lt;pcr-extend&gt;.</t>
          <artwork><![CDATA[
    +---n tpm12-attestation {taa:TPM12}?
       +--ro certificate-name       tpm:certificate-name-ref
       +--ro up-time?               uint32
       +--ro TPM_QUOTE2?            binary
       +--ro TPM12-hash-algo?       identityref
       +--ro unsigned-pcr-values* []
          +--ro pcr-index*   tpm:pcr
          +--ro pcr-value*   binary
]]></artwork>
          <t>All YANG objects above are defined within <xref target="RFC9684"/>.  The &lt;tpm12-attestation&gt; is not replayable.</t>
        </section>
        <section anchor="tpm20-attestation">
          <name>tpm20-attestation</name>
          <t>This notification contains an instance of TPM2 style signed cryptoprocessor measurements. It is supplemented by Attester information which is not signed. This notification is generated at two points in time:</t>
          <ul spacing="normal">
            <li>
              <t>every time at least one PCR has changed from a previous &lt;tpm20-attestation&gt;. In this case, the notification <bcp14>SHOULD</bcp14> be emitted within 10 seconds of the corresponding &lt;pcr-extend&gt; being sent:</t>
            </li>
            <li>
              <t>after a locally configurable minimum heartbeat period since a previous &lt;tpm20-attestation&gt; was sent.</t>
            </li>
          </ul>
          <artwork><![CDATA[
    +---n tpm20-attestation {taa:TPM20}?
       +--ro certificate-name       tpm:certificate-name-ref
       +--ro TPMS_QUOTE_INFO        binary
       +--ro quote-signature?       binary
       +--ro up-time?               uint32
       +--ro unsigned-pcr-values* []
          +--ro TPM20-hash-algo?   identityref
          +--ro pcr-values* [pcr-index]
             +--ro pcr-index    pcr
             +--ro pcr-value?   binary
]]></artwork>
          <t>All YANG objects above are defined within <xref target="RFC9684"/>.  The &lt;tpm20-attestation&gt; is not replayable.</t>
        </section>
      </section>
      <section anchor="filtering-evidence-at-the-attester">
        <name>Filtering Evidence at the Attester</name>
        <t>It can be useful <em>not</em> to receive all Evidence related to a PCR.  An example of this is when a Verifier maintains Reference Values (known good values) of a PCR.  In this case, it is not necessary to send a log of each consecutive extend operation.</t>
        <t>To accomplish this reduction, when an RFC8639 &lt;establish-subscription&gt; RPC is sent, a &lt;stream-filter&gt; as per RFC8639, Section 2.2 can be set to discard a &lt;pcr-extend&gt;  notification when the &lt;pcr-index-changed&gt; is uninteresting to the verifier.</t>
      </section>
      <section anchor="replaying-previous-pcr-extend-events">
        <name>Replaying Previous PCR Extend Events</name>
        <t>To verify the value of a PCR, a Verifier must either know that the value is a "known good" value (see Section 2.3.3 of <xref target="KGV"/> about Reference Values) or be able to reconstruct the hash value by viewing all the PCR-Extends since the Attester rebooted. Wherever a hash reconstruction might be needed, the &lt;attestation&gt; Event Stream <bcp14>MUST</bcp14> support the RFC8639 &lt;replay&gt; feature. Through the &lt;replay&gt; feature, it is possible for a Verifier to retrieve and sequentially hash all of the PCR extending events since an Attester booted. Thereby, the Verifier has access to all the Evidence needed to verify a PCR's current value.</t>
      </section>
      <section anchor="configuring">
        <name>Configuring the &lt;attestation&gt; Event Stream</name>
        <t><xref target="attestationconfig"/> is tree diagram which exposes the operator configurable elements of the &lt;attestation&gt; Event Stream. This allows an Attester to select what information should be available on the stream. A fetch operation also allows an external device such as a Verifier to understand the current configuration of the stream.</t>
        <t>Almost all YANG objects below are defined via reference from <xref target="RFC9684"/>. However, there is one object which is new in this model. &lt;tpm2-heartbeat&gt; defines the maximum amount of time which should pass before a subscriber to the Event Stream should get a &lt;tpm20-attestation&gt; notification from devices which contain a TPM2.</t>
        <figure anchor="attestationconfig">
          <name>Configuring the \&lt;attestation\&gt; Event Stream</name>
          <artwork><![CDATA[
  augment /tpm:rats-support-structures:
    +--rw tras:marshalling-period?                  uint8
    +--rw tras:tpm12-subscribed-signature-scheme?
    |   -> ../tpm:attester-supported-algos/tpm12-asymmetric-signing
    |      {taa:TPM12}?
    +--rw tras:tpm20-subscribed-signature-scheme?
    |   -> ../tpm:attester-supported-algos/tpm20-asymmetric-signing
    |      {taa:TPM20}?
    +--rw tras:tpm20-subscription-heartbeat?        uint16
           {taa:TPM20}?
  
  augment /tpm:rats-support-structures/tpm:tpms:
     +--rw tras:subscription-aik?        tpm:certificate-name-ref
     +--rw (tras:subscribable)?
        +--:(tras:tpm12-stream) {taa:tpm12}?
        |  +--rw tras:tpm12-hash-algo?   identityref
        |  +--rw tras:tpm12-pcr-index*   tpm:pcr
        +--:(tras:tpm20-stream) {taa:tpm20}?
           +--rw tras:tpm20-hash-algo?   identityref
           +--rw tras:tpm20-pcr-index*   tpm:pcr
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="YANG-Module">
      <name>YANG Module</name>
      <t>This YANG module imports modules from <xref target="RFC9684"/> and <xref target="RFC8639"/>.</t>
      <sourcecode type="YANG"><![CDATA[
<CODE BEGINS> ietf-tpm-remote-attestation-stream@2025-12-29.yang
module ietf-tpm-remote-attestation-stream {
  yang-version 1.1;
  namespace 
     "urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation-stream";
  prefix tras;

  import ietf-subscribed-notifications { 
    prefix sn;
    reference
      "RFC 8639: Subscription to YANG Notifications";    
  }
  import ietf-tpm-remote-attestation { 
    prefix tpm; 
    reference  
      "draft-ietf-rats-yang-tpm-charra";  
  } 
  import ietf-tcg-algs {
    prefix taa;
  }
   
  organization "IETF";
  contact
    "WG Web:   <http://tools.ietf.org/wg/rats/>
     WG List:  <mailto:rats@ietf.org>

     Editor:   Eric Voit
               <mailto:evoit@cisco.com>";
               
  description
    "This module contains YANG specification for subscribing
     to attestation streams which contain events that have
     been generated by TPM chips or equivalent hardware
     implementations that include the protected capabilities
     as provided by TPMs.
    
     Copyright (c) 2024 IETF Trust and the persons identified
     as authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Simplified
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
     itself for full legal notices.";
  
  revision 2024-07-06 {
    description
      "Initial version.";    
    reference 
      "draft-ietf-rats-network-device-subscription";
  }
   
  /*
   * IDENTITIES
   */
   
  identity pcr-unsubscribable {
    base sn:establish-subscription-error;
    description
      "Requested PCR is unsubscribable by the Attester.";
  }
  
  
  /*
   * Groupings
   */ 

  grouping heartbeat {
    description
      "Allows an Attester to push verifiable, current TPM PCR values 
      even when there have been no recent changes to PCRs.";    
    leaf tpm20-subscription-heartbeat {
      type uint16;
      units "seconds";
      description
        "Number of seconds before the Attestation stream should send
        a new notification with a fresh quote.  This allows
        confirmation that the PCR values haven't changed since the
        last tpm20-attestation.";
    }
  }
  
  
  /*
   * RPCs
   */ 
  
  augment "/sn:establish-subscription/sn:input" {
    when 'derived-from-or-self(sn:stream, "attestation")';
    description
      "This augmentation adds a nonce to as a subscription parameters
       that apply specifically to datastore updates to RPC input.";
    uses tpm:nonce;
    leaf-list pcr-index {
      type tpm:pcr;
      min-elements 1;
      description
        "The numbers/indexes of the PCRs. This will act as a filter
        for the subscription so that 'tpm-extend' notifications
        related to non-requested PCRs will not be sent to a
        subscriber.";
    }
  }
  
  /*
   * NOTIFICATIONS
   */  

  notification pcr-extend {
    description
      "This notification indicates that one or more PCRs have been
      extended within a TPM based cryptoprocessor.  In less than the 
      'marshalling-period', it MUST be followed with either a 
      corresponding tpm12-attestation or tpm20-attestation
      notification which exposes the result of the PCRs updated.";
    uses tpm:certificate-name-ref;
    leaf-list pcr-index-changed {
      type tpm:pcr;
      min-elements 1;
      description
        "The number of each PCR extended.  This list MUST contain the
        set of PCRs descibed within the event log details.  This leaf
        can be derived from the list of attested events, but exposing
        it here allows for easy filtering of the notifications of 
        interest to a verifier.";
    }
    list attested-event {
      description
        "A set of events which extended an Attester PCR.  The
        sequence of elements represented in list must match the
        sequence of events placed into the TPM's PCR.";
      container attested-event {
        description
          "An instance of an event which extended an Attester PCR";
        leaf extended-with {
          type binary;
          mandatory true;
          description
            "Information extending the PCR.";
        }
        choice event-details {
          description
            "Contains the event happened the Attester thought  
            was worthy of recording in a PCR.
            
            choices are of types defined by the identityref 
            base tpm:attested_event_log_type";      
          case bios-event-log {
            if-feature "tpm:bios";
            description
              "BIOS/UEFI event log format";
            uses tpm:bios-event-log;
          }
          case ima-event-log {
            if-feature "tpm:ima";
            description
              "IMA event log format";
            uses tpm:ima-event-log;
          }
          case netequip-boot-event-log {
            if-feature "tpm:netequip_boot";
            description
              "IMA event log format";
            uses tpm:network-equipment-boot-event-log;
          }
        }       
      }
    }
  }  

  notification tpm12-attestation {
    if-feature "taa:tpm12";
    description
      "Contains an instance of TPM1.2 style signed cryptoprocessor 
      measurements.  It is supplemented by unsigned Attester 
      information.";   
    leaf certificate-name {
      type tpm:certificate-name-ref;
      mandatory true;
      description
        "Allows a TPM quote to be associated with a certificate.";
    } 
    uses tpm:tpm12-attestation;
    uses tpm:tpm12-hash-algo;
    list unsigned-pcr-values {
      description  
        "Allows notifications to be filtered by PCR number or
        PCR value based on via YANG related mechanisms such as PATH.
        This is done without requiring the filtering structure to be
        applied against TCG structured data.";  
      leaf-list pcr-index {
        type tpm:pcr;
        min-elements 1;
        description
          "PCR index number.";
      }
      leaf-list pcr-value {
        type binary;
        description
          "PCR value in a sequence which matches to the
          'pcr-index'.";
      }
    }
  }

  notification tpm20-attestation {
    if-feature "taa:tpm20";
    description
      "Contains an instance of TPM2 style signed cryptoprocessor 
      measurements.  It is supplemented by unsigned Attester 
      information.";      
    leaf certificate-name {
      type tpm:certificate-name-ref;
      mandatory true;
      description
        "Allows a TPM quote to be associated with a certificate.";
    }            
    uses tpm:tpm20-attestation {
      description  
        "Provides the attestation info.  Also ensures PCRs can be
        XPATH filtered by refining the unsigned data so that it
        appears.";
      refine unsigned-pcr-values {
        min-elements 1;
      }
      refine unsigned-pcr-values/pcr-values {
        min-elements 1;
      }
    }
  }  


  /*
   * DATA NODES
   */  

  augment "/tpm:rats-support-structures" {
    description
      "Defines platform wide 'attestation' stream subscription 
      parameters.";   
    leaf marshalling-period { 
      type uint8;
      default 5;
      description
        "The maximum number of seconds between the time an event  
        extends a PCR, and the 'tpm-extend' notification which
        reports it to a subscribed Verifier.  This period allows 
        multiple extend operations bundled together and handled as a
        group.";  
    }
    leaf tpm12-subscribed-signature-scheme {
      if-feature "taa:tpm12";
      type leafref {
        path "../tpm:attester-supported-algos" +
               "/tpm:tpm12-asymmetric-signing"; 
      }
      description
        "A single signature-scheme which will be used to sign the  
        evidence from a TPM 1.2. which is then placed onto the 
        'attestation' event stream.";
    }
    leaf tpm20-subscribed-signature-scheme {
      if-feature "taa:tpm20";
      type leafref {
        path "../tpm:attester-supported-algos" +
               "/tpm:tpm20-asymmetric-signing"; 
      }
      description
        "A single signature-scheme which will be used to sign the  
        evidence from a TPM 2.0. which is then placed onto the 
        'attestation' event stream.";
    }    
    uses heartbeat{
      if-feature "taa:tpm20";
    }
  }
  
  augment "/tpm:rats-support-structures/tpm:tpms" {
    description
      "Allows the configuration 'attestation' stream parameters for a 
      TPM.";  
    leaf subscription-aik {
      type tpm:certificate-name-ref;
      description 
        "Identifies the certificate-name associated with the 
        notifications in the 'attestation' stream.";
    }
    choice subscribable {
      config true;
      description
        "Indicates that the set of notifications which comprise the  
        'attestation' event stream can be modified or tuned by a 
        network administrator.";
      case tpm12-stream {
        if-feature "taa:tpm12";
        description
          "Configuration elements for a TPM1.2 event stream.";
        uses tpm:tpm12-hash-algo;
        leaf-list tpm12-pcr-index {
          type tpm:pcr;
          description
            "The numbers/indexes of the PCRs which can be
            subscribed.";
        }
      }
      case tpm20-stream {
        if-feature "taa:tpm20";
        description
          "Configuration elements for a TPM2.0 event stream.";
        uses tpm:tpm20-hash-algo;
        leaf-list tpm20-pcr-index {
          type tpm:pcr;
          description
            "The numbers/indexes of the PCRs which can be
            subscribed.";
        }
      }
    }
  }  
}
<CODE ENDS>
]]></sourcecode>
    </section>
    <section anchor="otherstreams">
      <name>Event Streams for Conceptual Messages</name>
      <t>Analogous to the <xref target="RFC8639"/> compliant &lt;attestation&gt; Event Stream for the conveyance of remote attestation Evidence as defined in Section <xref target="attestationstream"/>, additional Event Streams can be defined for this YANG augment. Additional Event Streams require separate YANG augment specifications that provide the Event Stream definition and optionally a content format definition either via subscriptions to YANG datastores or dedicated YANG Notifications. It is possible to use either YANG subscription methods to other YANG modules for RATS Conceptual Messages or to define Event Streams for other none-YANG-modeled data. In the context of RATS Conceptual Messages, both options <bcp14>MUST</bcp14> be a specified via YANG augments to this specification.</t>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>The Privacy Considerations of <xref target="RFC9683"/> apply.
Additionally, the Security Considerations from <xref target="RFC8641"/> outline how internal structures or capabilities about the system can leak, which can have an impact in personally identifiable information (PII).</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Security Considerations of <xref target="RFC9684"/> and <xref target="RFC9683"/> apply.
Additionally, the Security Requirements from <xref section="4.2.5" sectionFormat="of" target="RFC7923"/> and the Security Considerations from <xref section="5" sectionFormat="of" target="RFC7923"/> apply.
<xref target="RFC8641"/> illustrates specific Security Considerations concerning YANG Notifications for Datastore Updates. For example, it provides guidance on identifying sensitive writable subtrees and sensitive readable nodes.</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document registers the following namespace URIs in the
<xref target="xml-registry"/> as per <xref target="RFC3688"/>:</t>
      <dl>
        <dt>URI:</dt>
        <dd>
          <t>urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation-stream
</t>
          <dl>
            <dt>Registrant Contact:</dt>
            <dd>
              <t>The IESG.</t>
            </dd>
            <dt>XML:</dt>
            <dd>
              <t>N/A; the requested URI is an XML namespace.</t>
            </dd>
          </dl>
        </dd>
      </dl>
      <t>This document registers the following YANG module in the
registry <xref target="yang-parameters"/> as per Section 14 of <xref target="RFC6020"/>:</t>
      <dl>
        <dt>Name:</dt>
        <dd>
          <t>ietf-tpm-remote-attestation-stream
</t>
          <dl>
            <dt>Namespace:</dt>
            <dd>
              <t>urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation-stream</t>
            </dd>
            <dt>Prefix:</dt>
            <dd>
              <t>tras</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>draft-ietf-rats-network-device-subscription (RFC form)</t>
            </dd>
          </dl>
        </dd>
      </dl>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
        <reference anchor="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </reference>
        <reference anchor="RFC9683">
          <front>
            <title>Remote Integrity Verification of Network Devices Containing Trusted Platform Modules</title>
            <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>
          <seriesInfo name="RFC" value="9683"/>
          <seriesInfo name="DOI" value="10.17487/RFC9683"/>
        </reference>
        <reference anchor="RFC9684">
          <front>
            <title>A YANG Data Model for Challenge-Response-Based Remote Attestation (CHARRA) Procedures Using Trusted Platform Modules (TPMs)</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="M. Eckel" initials="M." surname="Eckel"/>
            <author fullname="S. Bhandari" initials="S." surname="Bhandari"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="B. Sulzen" initials="B." surname="Sulzen"/>
            <author fullname="L. Xia" initials="L." surname="Xia"/>
            <author fullname="T. Laffey" initials="T." surname="Laffey"/>
            <author fullname="G. C. Fedorkow" initials="G. C." surname="Fedorkow"/>
            <date month="December" year="2024"/>
            <abstract>
              <t>This document defines the YANG Remote Procedure Calls (RPCs) and configuration nodes that are required to retrieve attestation evidence about integrity measurements from a device, following the operational context defined in RFC 9683 "TPM-based Network Device Remote Integrity Verification". Complementary measurement logs originating from one or more Roots of Trust for Measurement (RTMs) are also provided by the YANG RPCs. The defined module requires the inclusion of the following in the device components of the composite device on which the YANG server is running: at least one Trusted Platform Module (TPM) of either version 1.2 or 2.0 as well as a corresponding TPM Software Stack (TSS), or an equivalent hardware implementation that includes the protected capabilities as provided by TPMs as well as a corresponding software stack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9684"/>
          <seriesInfo name="DOI" value="10.17487/RFC9684"/>
        </reference>
        <reference anchor="I-D.ietf-rats-reference-interaction-models">
          <front>
            <title>Reference Interaction Models for Remote Attestation Procedures</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Michael Eckel" initials="M." surname="Eckel">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Wei Pan" initials="W." surname="Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Eric Voit" initials="E." surname="Voit">
              <organization>Cisco Systems</organization>
            </author>
            <date day="5" month="November" year="2025"/>
            <abstract>
              <t>   This document describes interaction models for remote attestation
   procedures (RATS) [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>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-reference-interaction-models-15"/>
        </reference>
        <reference anchor="I-D.ietf-rats-msg-wrap">
          <front>
            <title>RATS Conceptual Messages Wrapper (CMW)</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Ned Smith" initials="N." surname="Smith">
              <organization>Independent</organization>
            </author>
            <author fullname="Thomas Fossati" initials="T." surname="Fossati">
              <organization>Linaro</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <author fullname="Dionna Glaze" initials="D." surname="Glaze">
              <organization>Google LLC</organization>
            </author>
            <date day="11" month="December" year="2025"/>
            <abstract>
              <t>   The Conceptual Messages introduced by the RATS architecture (RFC
   9334) are protocol-agnostic data units that are conveyed between RATS
   roles during remote attestation procedures.  Conceptual Messages
   describe the meaning and function of such data units within RATS data
   flows without specifying a wire format, encoding, transport
   mechanism, or processing details.  The initial set of Conceptual
   Messages is defined in Section 8 of RFC 9334 and includes Evidence,
   Attestation Results, Endorsements, Reference Values, and Appraisal
   Policies.

   This document introduces the Conceptual Message Wrapper (CMW) that
   provides a common structure to encapsulate these messages.  It
   defines a dedicated CBOR tag, corresponding JSON Web Token (JWT) and
   CBOR Web Token (CWT) claims, and an X.509 extension.

   This allows CMWs to be used in CBOR-based protocols, web APIs using
   JWTs and CWTs, and PKIX artifacts like X.509 certificates.
   Additionally, the draft defines a media type and a CoAP content
   format to transport CMWs over protocols like HTTP, MIME, and CoAP.

   The goal is to improve the interoperability and flexibility of remote
   attestation protocols.  Introducing a shared message format such as
   CMW enables consistent support for different attestation message
   types, evolving message serialization formats without breaking
   compatibility, and avoiding the need to redefine how messages are
   handled within each protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-msg-wrap-23"/>
        </reference>
        <reference anchor="RFC8639">
          <front>
            <title>Subscription to YANG Notifications</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <author fullname="E. Nilsen-Nygaard" initials="E." surname="Nilsen-Nygaard"/>
            <author fullname="A. Tripathy" initials="A." surname="Tripathy"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams. Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8639"/>
          <seriesInfo name="DOI" value="10.17487/RFC8639"/>
        </reference>
        <reference anchor="TPM2.0" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
          <front>
            <title>TPM 2.0 Library Specification</title>
            <author>
              <organization>TCG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
            <front>
              <title>Key words for use in RFCs to Indicate Requirement Levels</title>
              <author fullname="S. Bradner" initials="S." surname="Bradner"/>
              <date month="March" year="1997"/>
              <abstract>
                <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
          </reference>
          <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
            <front>
              <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <date month="May" year="2017"/>
              <abstract>
                <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="14"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
          </reference>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7923">
          <front>
            <title>Requirements for Subscription to YANG Datastores</title>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="A. Gonzalez Prieto" initials="A." surname="Gonzalez Prieto"/>
            <date month="June" year="2016"/>
            <abstract>
              <t>This document provides requirements for a service that allows client applications to subscribe to updates of a YANG datastore. Based on criteria negotiated as part of a subscription, updates will be pushed to targeted recipients. Such a capability eliminates the need for periodic polling of YANG datastores by applications and fills a functional gap in existing YANG transports (i.e., Network Configuration Protocol (NETCONF) and RESTCONF). Such a service can be summarized as a "pub/sub" service for YANG datastore updates. Beyond a set of basic requirements for the service, various refinements are addressed. These refinements include: periodicity of object updates, filtering out of objects underneath a requested a subtree, and delivery QoS guarantees.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7923"/>
          <seriesInfo name="DOI" value="10.17487/RFC7923"/>
        </reference>
        <reference anchor="RFC8641">
          <front>
            <title>Subscription to YANG Notifications for Datastore Updates</title>
            <author fullname="A. Clemm" initials="A." surname="Clemm"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <date month="September" year="2019"/>
            <abstract>
              <t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore. Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8641"/>
          <seriesInfo name="DOI" value="10.17487/RFC8641"/>
        </reference>
        <reference anchor="I-D.birkholz-rats-tuda">
          <front>
            <title>Time-Based Uni-Directional Attestation</title>
            <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>
          <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-tuda-07"/>
        </reference>
        <reference anchor="KGV" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG-NetEq-Attestation-Workflow-Outline_v1r9b_pubrev.pdf">
          <front>
            <title>KGV</title>
            <author>
              <organization>TCG</organization>
            </author>
            <date year="2003" month="October"/>
          </front>
        </reference>
        <reference anchor="TCG-Glossary" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG-Glossary-V1.1-Rev-1.0.pdf">
          <front>
            <title>TCG Glossary Version 1.1</title>
            <author>
              <organization>TCG</organization>
            </author>
            <date year="2017" month="May"/>
          </front>
        </reference>
        <reference anchor="xml-registry" target="https://www.iana.org/assignments/xml-registry/xml-registry.xhtml">
          <front>
            <title>IETF XML Registry</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="yang-parameters" target="https://www.iana.org/assignments/yang-parameters/yang-parameters.xhtml">
          <front>
            <title>YANG Parameters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 921?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Shout-out to Thomas Fossati, Zhuoyao Lin, Yogesh Deshpande, Jun Zhang, Thanassis Giannetsos, Michael Richardson, Ned Smith, and Chunchi (Peter) Liu for their extensive review feedback that was vital to produce this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
89AOfiPYf4MN/Rv2xOpiMCKe86owQjBAEWyyYSTHYGrF5CzUnAOL8AiY/PHw
7enGu4MXhx5v4YWs9WG5bAiM/9KXOtxBvOMVYMO714f68M3uteENgFgK7oIw
7isAD8K7/5gpGGOPxkGeVYOwfVZf5N+O/wMpMy26SktIXKcxW+MDX1mo8u4t
Drq6MrLTyNwg+mpB+JWJenE7XVp7x4RsfTnjqxHn05D8ixWIRSyxXUKJuenX
3ebi5zDPfuJSu2MfJisWVajVNFbmadvv1sn/1EnVltCgNtHq8RsDeijSGXhb
z/ycY0eNsuPUdpe9a4te4gEn+WaMSj7RqHcl5aS0J67Hu2evHMcNKgQZDxhq
8Ik9VHAaiD0tYhid/coFQ2wW8dmeF9fMpZx74jM25LHIGmpXDBephgsFuStw
wHhzEvFLKxCMxxoQdUG9ZCybqB47ncVEs+M9cyYx1Gu3aie/WoeOTaAWnlEP
slvEM7Y3b8Uz/i0cQ/1/yTS8T4M/tK7SQh5w7F/36LdDTGGIGwZScA3kkk0V
NjhsD3/FHR3wi4Lu85Dta1eCKqobs947+UBNDqxRR4QFZyos42eLNuSXK7vY
uHFvVoZ6HoH93bNddfR2/yBwBzgf1JKDbuN8atka+xKzYYqRAQUMtFr1FmXV
uvF8X4m0d86kuixsWvvmNM7zP37jCHYYoxH+1ZUWsAksyVqckO7WTo5pNraM
Iz0tgWgmoE6OZBZ6fJij2eacs0CFmGxGgGRd1GueypzFtnWrvrhazfkM6+Sj
T2mk2fcBv3PxfL4RwHZCnmknXr44rF8ZW2IJcJnaJSuEPaKF4Wh2GgN7WLki
CGRF/ammigp1LgpVWXmqantpkVnOtRMac2KxY8rBmAr2+Bqtrrf8YREvU0+/
5yKdKvTPTk2tCDG4bftwXzBxSVBW6HJouOJvuhZWnP1xa9EaqPPvXYvt3uZ9
rgX+z4kqew5yHbR7LtlrsVgbS7SE14oA5pNdP7yvld169yRxsKl0A3hyW58I
rR6sdDMNwpfRboEPzeG0wFtXUuo6Q7A0oXIvnsW2SYa7Rrw1LUeEcuYzulrJ
OQx92+TjZ2dea3HafDItTMWi65CW8Xzygbmmy2KqWWay2BwG2J5W8QAzUKAt
6mieu07cNDb+y9vXyxnzQpV8L6Aoq1gw6Yhx3LZJ7PZYaOkZOmPToRZP1vT1
NeyYJV62K05ygvTQoKXjqm2Ovy81NNuYtuVo9njurdEMHOxaaPaj5hag2Y+R
+y+MZqOrfpHgt4Oj/dPnknqDwXc56jIS2YPRd36AHiNuD08Np9UsTtUbTDEZ
abzkJ4vTfEQXHTDjb693vTQBwJzy8V3sxurjOLHA7nD5OsHddiYaJQhel0re
X7p+XnM4KXs8wj0xGCaGRMSJXz241px9Eci4UAZUOmgXhlUJmzMp242oaXfN
IWmT5hY8vG3MFLs2ye/eq3L2hq4VX7aUNijPHguXfFuWKSfYjNgz2Y2ujFRO
IUoyBAeK+YbFRK5Sgvdy94oNxsSbIHfPTttoRnGeriSdN8mMu8vyTEcUEEqB
7MZXw2lPHMIGqjmF9iwYp8vXe+SCE3N8GZuVkah7f9GEiNFp4K8eZgap4yK5
iPtzHIkutjA1X3HTtv8mddldcXA+vO91wnrUFHil+7MCo29qPUhQK+2ox1vQ
Qz6rUkTbOL90d5J4ifqYgeHfV8WZQiRe56B4smAE9vWh63ETOkhGn8tkigfx
sKM49o0vTRINQ66qcWc7a8eHh+uEmgXQM24WTS0sWi/RujdD1glvQGHtjCoX
mbbd+0oiv77+dvuRDHENZJse6q0ZHH8xQHmekc6gHcEs7L2PFFqQ76Ol7B0S
/r4N4njHQRw9rqphLsJLKleMfTRLBswoM7NCc0m3LRPK7bsEIGjNYNti8k4p
CU/mdyxXSr9nWJif1vFw92i3DvanB/j0iwRg22IZhR4lXCCf/LC2VK2Lan53
cmh0SkDax0kacZtijsjk3D9C5qMn33zz5ctOpwMtdjo76m5x0OhsOeGBUO7s
cewuZg7sUKbo4cHpSwog/Oub1/z0aGP3qQQYmOgQgERub4C33Jx618VCEITI
KDCThzlTyLIzGxw67HWFj20h1ieb25uEHLzMGrFzPQwcGZB5indH6TEFTHNv
GF7OaJbYRH58g8BEtYbxmMhK1judKIrUedz/gBS428dUSOD2I97VqJmwRqQH
361kOWYKnI7p0q0Z+XbOxvkEsPcCxBaA3FX/azzL53GuXmNI6y/5CGPU9uF/
UyB+2EL/McvgFZh2F1rGGV1xoV6ChgLAljmIjDfAE2OdqhP8txiUGGd7BBRx
OgFByI6ovfEs648T4H+4fOsw1MxoMElhCmnQBsMUSzXUeoDTYw0AD5wvYGOm
UsFFLrX1iKrX+b+SFBk8b8QAAA==

-->

</rfc>
