<?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.39 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-network-device-subscription-15" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="RATS YANG Subscription">Attestation Event Stream Subscription</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-network-device-subscription-15"/>
    <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="October" day="27"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 87?>

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

<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 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"/> (CHARRA).
According to CHARRA, 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.
Once a subscription has been set up using an initial nonce, two alternative methods can be used to provide freshness handles for the subscription going forward:</t>
      <ol spacing="normal" type="1"><li>
          <t>A central provider supplies new, fresh handles (e.g., via a Handle Provider that distributes Epoch IDs to all entities in a domain, as described in <xref target="RFC9334"/> and 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 handle can be updated by sending out-of-band TPM Quote requests periodically or ad-hoc, as facilitated by CHARRA.</t>
        </li>
      </ol>
      <aside>
        <t>The YANG statement that specifies the content of the freshness handle in CHARRA is called "nonce".
As this specification's YANG module is based on CHARRA, the "nonce" information element name is inherited.
This inconveniently overloads the term's original meaning because the value is now used as a freshness handle in Streaming Remote Attestation (<xref section="7.3" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>).</t>
      </aside>
      <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 subsection 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="binding-to-the-streaming-remote-attestation-model">
          <name>Binding to the Streaming Remote Attestation Model</name>
          <t>The following identifies how the abstract parameters of Streaming Remote Attestation without a Broker, as described in <xref section="7.3.1" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/>, are represented by the CHARRA and YANG elements used by this specification. This binding does not redefine the terminology of either source specification.</t>
          <t>The protocol bindings used by <xref target="term-sequence"/> are as follows:</t>
          <ul spacing="normal">
            <li>
              <t><tt>handle</tt> is represented by the CHARRA information element named <tt>nonce</tt>. For the initial Evidence, this element carries the fresh
Verifier-generated nonce supplied with the subscription. For subsequent Evidence, the same information element carries the
freshness handle applicable to Streaming Remote Attestation, as described in <xref section="6" sectionFormat="of" target="I-D.ietf-rats-reference-interaction-models"/> and <xref target="freshness-handles"/>.</t>
            </li>
            <li>
              <t><tt>attEnvIDs</tt> is represented by <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 none of the TPM's Platform Configration Registers (PCR) are 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 after the initial subscription each notification was sent.  However, this time is not returned as part of the signed results of the TPM Quote and therefore is not as trustworthy as the objects included in the TPM 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 and thereby are trustworthy.  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.  In order to assess the freshness of the TPM Quotes that the Attester continuesly generates over time, the Verifier can aquire separate TPM Quotes via the &lt;tpm12-challenge-response-attestation&gt; RPC from <xref target="RFC9684"/> out-of-band.  These separate TPM Quotes include fresh time-related counters that can be appraised for freshness based on the predictable incrementing of these time-related counters. An example for how that can be realized is illustared in <xref target="I-D.birkholz-rats-tuda"/>.</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 is 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>MUST</bcp14> be considered during the appraisal procedure of the Verifier.</t>
            </li>
            <li>
              <t>If either the &lt;reset-counter&gt; or &lt;restart-counter&gt; has incremented, the existing subscription <bcp14>MUST</bcp14> be terminated. If the Verifier intends to continue receiving attestation Evidence, it <bcp14>MUST</bcp14> establish a new subscription.</t>
            </li>
            <li>
              <t>If a TPM Quote on any subscribed PCR has not been pushed to the Verifier for the Attester-defined heartbeat interval, a new TPM Quote notification containing that PCR <bcp14>MUST</bcp14> be sent to the Verifier.</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 can 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 every &lt;pcr-index&gt; as 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>MUST</bcp14> be emitted no later than the &lt;marshalling-period&gt; after the PCR is first extended, except when the marshalling period is extended as described below.  (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 selections of &lt;pcr-index&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>MUST</bcp14> be emitted as soon as a TPM Quote containing the latest PCR hashed values is available, and <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. The 10-second interval is fixed by this specification and is not a configurable parameter.</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-06-16.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  
      "RFC 9684: A YANG Data Model for Challenge-Response-Based
       Remote Attestation (CHARRA) Procedures Using Trusted
       Platform Modules (TPMs)";
  } 
  import ietf-tcg-algs {
    prefix taa;
    reference
      "RFC 9684: A YANG Data Model for Challenge-Response-Based
       Remote Attestation (CHARRA) Procedures Using Trusted
       Platform Modules (TPMs)";
      }

  organization
    "IETF RATS (Remote ATtestation procedureS) Working Group";
  contact
    "WG Web:   <https://datatracker.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) 2026 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 Revised
     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).

     All published revisions of IETF and IANA YANG modules are available
     from the YANG Parameters registry group
     (https://www.iana.org/assignments/yang-parameters).

     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 2026-06-16 {
    description
      "Final 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 '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 numbers. The producer MUST provide the same 
           number of entries in this leaf-list and the sibling 
           'pcr-value' leaf-list. Entry N corresponds to entry N 
           in 'pcr-value', following the TPM 1.2 PCR 
           selection/value ordering.";
      }
      leaf-list pcr-value {
        type binary;
        description
          "PCR values. The producer MUST provide the same number of
           entries in this leaf-list and the sibling 'pcr-index'
           leaf-list. Entry N corresponds to the PCR identified by
           entry N in '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 (see Section 6.4. of RFC6010) 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;
      units "seconds";
      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.";  
      reference
        "Section 4.3.1 of RFC XXXX.";
    }
    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 {
      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 defined in <xref target="attestationstream"/>, additional Event Streams can be
defined for other RATS Conceptual Messages.
Any specification that uses this framework to define an additional RATS Conceptual Message Event Stream <bcp14>MUST</bcp14> define that Event Stream using a YANG module that augments the module defined in this document. The augmentation <bcp14>MAY</bcp14> define the Event Stream content using YANG-modelled notifications or identify the content format used for non-YANG-modelled data.</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="yang-management-security">
        <name>YANG Management Security</name>
        <t>The <tt>ietf-tpm-remote-attestation-stream</tt> YANG module is intended to be accessed using YANG-based management protocols such as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. Management access to the module needs to provide confidentiality, integrity protection, and mutual authentication. The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> can be used to restrict access to the configuration, operations, and notification content defined or augmented by this module.</t>
        <t>The writable data nodes introduced by this module include &lt;marshalling-period&gt;, &lt;tpm12-subscribed-signature-scheme&gt;, &lt;tpm20-subscribed-signature-scheme&gt;, &lt;tpm20-subscription-heartbeat&gt;, &lt;subscription-aik&gt;, &lt;tpm12-pcr-index&gt;, and &lt;tpm20-pcr-index&gt;. Unauthorized modification of these nodes could alter which Evidence is available, the rate at which Evidence is delivered, or the keys and algorithms associated with attestation. Write access to these nodes therefore needs to be restricted to authorized administrators.</t>
        <t>The &lt;pcr-extend&gt;, &lt;tpm12-attestation&gt;, and &lt;tpm20-attestation&gt; notifications can expose integrity measurements, PCR values, Event Log information, and details of the Attester's hardware and software state. This information can reveal security-relevant platform configuration. Read and subscription access to these notifications therefore needs to be restricted to authorized Verifiers and other authorized consumers.</t>
        <t>The augmentation to the &lt;establish-subscription&gt; RPC creates long-lived subscription state and can cause continuing TPM operations and notification traffic. Unauthorized or excessive subscription requests can therefore consume processing, TPM, memory, and network resources. Implementations need to authenticate and authorize subscription requests and should apply appropriate resource limits.</t>
        <t>This security analysis follows the YANG security guidance in <xref target="RFC9907"/>.</t>
      </section>
      <section anchor="security-considerations-of-streaming-attestation">
        <name>Security Considerations of Streaming Attestation</name>
        <t>Moving from request/response polling to a long-lived subscription changes the consequences of lost, delayed, or suppressed messages. In particular, the absence of a new notification is not Evidence that the Attester's state has remained unchanged.</t>
        <t>If a Verifier does not receive a required attestation notification or heartbeat within the interval required by this specification, the Verifier can no longer establish freshness using that expected notification. The Verifier needs to obtain fresh Evidence, for example through a new TPM Quote or a newly established subscription, before treating subsequent appraisal results as fresh.</t>
        <t>An attacker that can cause repeated measured events can also increase the rate of &lt;pcr-extend&gt; and attestation notifications. This can increase processing and network load at both the Attester and Verifier. Existing authorization, transport-security, and resource-management protections therefore remain important even when an attacker cannot forge TPM-signed Evidence.</t>
        <t>The security considerations of <xref target="RFC9684"/>, <xref target="RFC9683"/>, <xref target="RFC8639"/>,
and the YANG modules reused by this specification also apply.</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="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </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="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="17" month="September" 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-18"/>
        </reference>
        <reference anchor="RFC9907">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="Q. Wu" initials="Q." surname="Wu"/>
            <date month="March" year="2026"/>
            <abstract>
              <t>This document provides guidelines for authors and reviewers of specifications containing YANG data models, including IANA-maintained YANG modules. Recommendations and procedures are defined, which are intended to increase interoperability and usability of Network Configuration Protocol (NETCONF) and RESTCONF protocol implementations that utilize YANG modules.</t>
              <t>This document obsoletes RFC 8407; it also updates RFC 8126 by providing additional guidelines for writing the IANA considerations for RFCs that specify IANA-maintained YANG modules.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="216"/>
          <seriesInfo name="RFC" value="9907"/>
          <seriesInfo name="DOI" value="10.17487/RFC9907"/>
        </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 981?>

<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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
mpL+H7Unlksr2QAA

-->

</rfc>
