<?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-12" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="RATS YANG Subscription">Attestation Event Stream Subscription</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-network-device-subscription-12"/>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@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="May" day="26"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 83?>

<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 Trusted Platform Module (TPM)-based Challenge-Response Remote Attestation (CHARRA), enabling subscription to RATS Conceptual Messages of the Evidence type and auxiliary Event Logs as part of that Evidence.
The module defined requires at least one Trusted Platform Module (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 89?>

<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 TPM 1.2 or 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 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 BCP 14 <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 to 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 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 (see definition of handle in <xref section="6" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>).</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 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 192,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="268" y="212">subscribe(nonce,</text>
                    <text x="372" y="212">TpmName,</text>
                    <text x="468" y="212">?PcrSelection)</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, ?PcrSelection) |    |
|    | {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 assists 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 on 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@2026-04-10.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 the 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"/> (Remote Integrity Verification of Network Devices Containing Trusted Platform Modules) apply.
Additionally, the security considerations from <xref target="RFC8641"/> (Subscription to YANG Notifications for Datastore Updates) how information about the system's internal structures or capabilities can be leaked, which could impact personally identifiable information (PII), apply.</t>
      <t>There are no additional privacy considerations introduced by this document.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="remote-atttestation-procedures-rats">
        <name>Remote ATttestation procedureS (RATS)</name>
        <t>The security considerations of <xref target="RFC9684"/> and <xref target="RFC9683"/> apply.</t>
      </section>
      <section anchor="yet-another-next-generation-yang">
        <name>Yet Another Next Generation (YANG)</name>
        <t>The security requirements (<xref section="4.2.5" sectionFormat="of" target="RFC7923"/>) and the security considerations (<xref section="5" sectionFormat="of" target="RFC7923"/>) from RFC7923 (Requirements for Subscription to YANG Datastores) apply.
Subscription to YANG Notifications for Datastore Updates (<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="other">
        <name>Other</name>
        <t>There are no additional security considerations introduced by this document.</t>
      </section>
    </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="2" month="April" year="2026"/>
            <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-17"/>
        </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>
        <reference anchor="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">
          <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>
      </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 931?>

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

-->

</rfc>
