<?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-16" 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-16"/>
    <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="November" day="03"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 88?>

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

<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 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"/>. For these challenge-response RPCs, if none of the TPM's Platform Configuration Registers (PCR) are selected, all PCR banks are returned. This behavior does not apply to subscriptions: an &lt;establish-subscription&gt; to the &lt;attestation&gt; Event Stream <bcp14>MUST</bcp14> include at least one &lt;pcr-index&gt; (see <xref target="YANG-Module"/>).</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 focuses 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 after 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> obtain a TPM Quote containing a new Verifier-provided nonce at an interval no longer than the maximum Evidence age permitted by its Appraisal Policy.  Selecting that interval is a Verifier policy decision; it is independent of &lt;tpm20-subscription-heartbeat&gt;, which bounds how often notifications are sent but does not itself provide freshness.  A fresh nonce can be obtained 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 continuously generates over time, the Verifier can acquire separate TPM Quotes via the &lt;tpm20-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 illustrated 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 assist a Verifier in appraising the Trustworthiness Level of an Attester. Data Nodes within <xref target="configuring"/> allow the configuration of this Event Stream's contents 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"/>'s &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 the 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-completed&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, when &lt;tpm20-subscription-heartbeat&gt; is configured, 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.  When &lt;tpm20-subscription-heartbeat&gt; is not configured, &lt;tpm20-attestation&gt; notifications are only sent as a result of PCR extensions.  The heartbeat interval is configured on the Attester for the &lt;attestation&gt; Event Stream (see <xref target="configuring"/>), not per subscription, and applies independently to each TPM on the Attester.</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 a 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>
      <t>RFC Editor: Please replace "XXXX" in the YANG module with the RFC number assigned to this document, update the revision date to the publication date, and remove this note.</t>
      <sourcecode type="YANG"><![CDATA[
<CODE BEGINS> ietf-tpm-remote-attestation-stream@2026-10-28.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-10-28 {
    description
      "Initial Version";
    reference
      "RFC XXXX: Attestation Event Stream Subscription.
       RFC Editor: Please replace XXXX with the RFC number assigned to
       this document.";
  }
   
  /*
   * 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 {
        range "1..max";
      }
      units "seconds";
      description
        "Maximum number of seconds between tpm20-attestation
        notifications for each requested PCR. This platform-wide
        setting applies to all active TPM 2.0 attestation subscriptions.
        When this leaf is configured, the Attester sends each requested
        PCR at least once per interval, including when its value has not
        changed.";
    }
  }
  
  
  /*
   * 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
              "Network equipment boot 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 using XPath expressions as defined in Section 6.4 of
        RFC 7950. Exposing these values as separate YANG nodes permits
        filtering without inspecting the TPM-encoded attestation
        structures defined in RFC 9684.";
      reference
        "RFC 7950: The YANG 1.1 Data Modeling Language, Section 6.4;
         RFC 9684: A YANG Data Model for Challenge-Response-Based
         Remote Attestation (CHARRA) Procedures Using Trusted Platform
         Modules (TPMs).";
      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 information and exposes the unsigned
        PCR values as YANG nodes, allowing XPath filtering as described
        in Section 6.4 of RFC 7950.";
      reference
        "RFC 7950: The YANG 1.1 Data Modeling Language, Section 6.4.";
      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 and security considerations of <xref target="RFC7923"/> (Sections 4.2.5 and 5, respectively) 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="28" month="October" 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-20"/>
        </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="W3C.REC-xpath-19991116" target="https://www.w3.org/TR/1999/REC-xpath-19991116/">
          <front>
            <title>XML Path Language (XPath) Version 1.0</title>
            <author fullname="James Clark" role="editor"/>
            <author fullname="Steven DeRose" role="editor"/>
            <date day="16" month="November" year="1999"/>
          </front>
          <seriesInfo name="W3C REC" value="REC-xpath-19991116"/>
          <seriesInfo name="W3C" value="REC-xpath-19991116"/>
        </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 998?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Shout-out to Thomas Fossati, Zhuoyao Lin, Yogesh Deshpande, Jun Zhang, Thanassis Giannetsos, Michael Richardson, Ned Smith, and Chunchi (Peter) Liu for their extensive review feedback that was vital to produce this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
