<?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-rfc2629 version 1.5.25 (Ruby 3.0.3) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-birkholz-rats-tuda-06" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" obsoletes="" updates="" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="TUDA">Time-Based Uni-Directional Attestation</title>
    <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-tuda-06"/>
    <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
      <organization abbrev="Fraunhofer SIT">Fraunhofer Institute for Secure Information Technology</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>andreas.fuchs@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer Institute for Secure Information Technology</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>henk.birkholz@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="I." surname="McDonald" fullname="Ira E McDonald">
      <organization abbrev="High North Inc">High North Inc</organization>
      <address>
        <postal>
          <street>PO Box 221</street>
          <city>Grand Marais</city>
          <code>49839</code>
          <country>US</country>
        </postal>
        <email>blueroofmusic@gmail.com</email>
      </address>
    </author>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Bibliothekstr. 1</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2022" month="January" day="12"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <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>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-birkholz-rats-tuda/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Remote ATtestation ProcedureS (rats) Working Group mailing list (<eref target="mailto:rats@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/rats/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-rats/draft-birkholz-rats-tuda"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>Remote ATtestation procedureS (RATS) describe the attempt to determine and appraise system properties, such as integrity and trustworthiness, of a remote peer -- the Attester -- by the use of a Verifier in support of Relying Parties that intend to interact with the Attester. The Verifier carries the burden of appraisal of detailed Evidence about an Attester's trustworthiness. Evidence is generated by the Attester and consumed by the Verifier. To support security decisions, the Verifier generates digestable Attestation Results that can be easily consumed by Relying Parties. The RATS architecture specifies the corresponding concepts and terms <xref target="I-D.ietf-rats-architecture" format="default"/>.</t>
      <t>TUDA uses the architectural constituents of the RATS Architecture, such as the roles Attester and Verifier, and defines a method to convey Conceptual Messages between them. TUDA uses the Uni-Directional Remote Attestation interaction model described in <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>. While the Conceptual Message focused on in this document is RATS Evidence, any type of Conceptual Message content that requires a believable indication about the message's content freshness can be conveyed with TUDA (e.g. Attestation Results).</t>
      <t>The conveyance of Evidence in RATS must ensure that Evidence always remains integrity protected, tamper-evident, originates from a trustable entity (or group of entities), and is accompanied by a proof of its freshness.</t>
      <t>In contrast to bi-directional interactions as described by Challenge/Response Remote Attestation in <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>, TUDA enables uni-directional conveyance in the interactions between Attester and Verifier. TUDA allows a Verifier to receive Evidence from an Attester without solicitation. Conversely, it allows a Verifier to retrieve Evidence from an Attester without it being generated ad-hoc. Exemplary applications of TUDA are the creation of beacons in vehicular environments <xref target="IEEE1609" format="default"/> or authentication mechanisms based on EAP <xref target="RFC5247" format="default"/>.</t>
      <t>The generation of Evidence in RATS requires an Attesting Environment. In this specification, the root of trust acting as an Attesting Environment is a Trusted Platform Module (TPM, see <xref target="TPM12" format="default"/> and <xref target="TPM2" format="default"/>). The Protected Capabilities <xref target="TCGGLOSS" format="default"/> provided by a TPM support various activities in RATS, e.g., Claims collection and Evidence generation.</t>
      <t>A trusted coupling of Evidence generation with a global timescale is enabled via a Handle Distributor.
Handles generated by a Handle Distributor can include nonces, signed timestamps, or other structured or opaque content used as qualifying data in Evidence generation.
In TUDA, all RATS entities, such as the entities taking on the roles of Attester and Verifier, can receive signed timestamps from the Handle Distributor.
These trusted timestamps replace nonces in Evidence generation and Evidence appraisal <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>.</t>
      <section anchor="forward-authenticity" numbered="true" toc="default">
        <name>Forward Authenticity</name>
        <t>Nonces enable an implicit time-keeping in which the freshness of Evidence is inferred by recentness.
Recentness is estimated via the time interval between sending a nonce as part of a challenge for Evidence and the reception of Evidence based on that nonce (as outlined in the interaction model depicted in section 8.1 in <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>).
Conversely, the omission of nonces in TUDA allows for explicit time-keeping where freshness is not inferred from recentness.
Instead, a cryptographic binding of a trusted synchronization to a global timescale in the Evidence itself allows for Evidence that can prove past operational states of an Attester.
To capture and support this concept, this document introduces the term Forward Authenticity.</t>
        <dl>
          <dt>
Forward Authenticity:  </dt>
          <dd>
            <t>A property of secure communication protocols, in which later compromise of the long-term keys of a data origin does not compromise past authentication of data from that origin.
Forward Authenticity is achieved by timely recording of authenticity Claims from Target Environments (via "audit logs" during "audit sessions") that are authorized for this purpose and trustworthy (via endorsed roots of trusts, for example), in a time-frame much shorter than that expected for the compromise of the long-term keys.</t>
          </dd>
          <dt/>
          <dd>
            <t>Forward Authenticity enables new levels of assurance and can be included in basically every protocol, such as ssh, YANG Push, router advertisements, link layer neighbor discovery, or even ICMP echo requests.</t>
          </dd>
        </dl>
      </section>
      <section anchor="tuda-objectives" numbered="true" toc="default">
        <name>TUDA Objectives</name>
        <t>Time-Based Uni-directional Attestation is designed to:</t>
        <ul spacing="normal">
          <li>increase the confidence in authentication and authorization procedures,</li>
          <li>address the requirements of constrained-node networks,</li>
          <li>support interaction models that do not maintain connection-state over time, such as REST architectures <xref target="REST" format="default"/>,</li>
          <li>be able to leverage existing management interfaces, such as SNMP
(RFC 3411, <xref target="STD62" format="default"/>). RESTCONF <xref target="RFC8040" format="default"/> or CoMI <xref target="I-D.ietf-core-comi" format="default"/> --- and corresponding bindings,</li>
          <li>support broadcast and multicast schemes (e.g. <xref target="IEEE1609" format="default"/>),</li>
          <li>be able to cope with temporary loss of connectivity, and to</li>
          <li>provide trustworthy audit logs of past endpoint states.</li>
        </ul>
      </section>
      <section anchor="terminology" numbered="true" toc="default">
        <name>Terminology</name>
        <t>This document uses the terms defined in the RATS Architecture <xref target="I-D.ietf-rats-architecture" format="default"/> and by the RATS Reference Interaction Models <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>.</t>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="remote-attestation-principles" numbered="true" toc="default">
      <name>Remote Attestation Principles</name>
      <t>Based on the RATS Architecture, the processing of TPM generated Evidence can be separated in three activities.</t>
      <dl>
        <dt>
Evidence Generation:  </dt>
        <dd>
          <t>The retrieval of signed digests from an RTR based on a sequence of collected Claims about software component integrity (measurements).</t>
        </dd>
        <dt>
Evidence Conveyance:  </dt>
        <dd>
          <t>The transfer of Evidence from the Attester to the Verifier via the Internet.</t>
        </dd>
        <dt>
Evidence Appraisal:  </dt>
        <dd>
          <t>The validation of Evidence signatures as well as the assessment of Claim values in Evidence by comparing them with Reference Values.</t>
        </dd>
      </dl>
      <t>TUDA is specified in support of these RATS activities that align with the definitions presented in <xref target="PRIRA" format="default"/> and <xref target="TCGGLOSS" format="default"/>.</t>
      <section anchor="authenticity-of-evidence" numbered="true" toc="default">
        <name>Authenticity of Evidence</name>
        <t>Remote attestation Evidence is composed of a set of Claims (assertions about the trustworthiness of an Attester's Target Environments) that is accompanied by a proof of its veracity -- typically a signature based on shielded, private, and potentially use-restricted key material used as an Authentication Secret as specified in section 6 of <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/> (or a secure channel as illustrated in <xref target="I-D.birkholz-rats-uccs" format="default"/>).
As key material alone is typically not self-descriptive with respect to its intended use (its semantics), the Evidence created via TUDA MUST be accompanied by two kinds of certificates that are cryptographically associated with a trust anchor (TA) <xref target="RFC4949" format="default"/> via certification paths:</t>
        <ul spacing="normal">
          <li>an Attestation Key (AK) Certificate (AK-Cert) that represents the attestation provenance of the Attesting Environment (see section 4.2. in <xref target="I-D.ietf-rats-architecture" format="default"/>) that generates Evidence, and</li>
          <li>an Endorsement Key (EK) Certificate (EK-Cert) that represents the Protection Capabilities of an Attesting Environment the AK is stored in.</li>
        </ul>
        <t>If a Verifier decides to trust the TA of both an AK-Cert and an EK-Cert presented by an Attester -- and thereby the included Claims about the trustworthiness of an Attester's Target Environments -- the Evidence generated by the Attester can be considered trustable and believable.
Ultimately, all trustable and believable Evidence MUST be appraised by a Verifier in order to assess the trustworthiness of the corresponding Attester.
Assertions represented via Claims MUST NOT be considered believable by themselves.</t>
        <t>In this document, Evidence is generated via TPMs that come with an AK-Cert and a EK-Cert as a basis for believable Evidence generation.</t>
      </section>
      <section anchor="generating-evidence-about-software-component-integrity" numbered="true" toc="default">
        <name>Generating Evidence about Software Component Integrity</name>
        <t>Evidence generated by a TPM for TUDA is based on measured hash values of all software components deployed in Target Environments (see section 4.2. in <xref target="I-D.ietf-rats-architecture" format="default"/>) before they are executed ("measure then execute").
The underlying concept of "Attestation Logs" is elaborated on in Section 2.4.2. of <xref target="I-D.fedorkow-rats-network-device-attestation" format="default"/>.
This concept is implemented, for example, in the Linux kernel where it is called the Linux Integrity Measurement Architecture (IMA) <xref target="Safford" format="default"/> and used to generates such a sequence of hash values.
A representation for conveyance of corresponding event logs is described in the Canonical Event Log <xref target="CEL" format="default"/> specification.
Open source solutions, for example, based on <xref target="RFC5209" format="default"/> use an IMA log to enable remote attestation <xref target="Steffens" format="default"/>.</t>
        <t>An Attester MUST generate such an event/measurement log.</t>
        <!-- This section details the processed data items, the requirements for system components, and corresponding operations to enable the generation of Evidence for TUDA where TPMs take on the role of roots of trust for storage and roots of trust for reporting {{TCGGLOSS}}. -->

</section>
      <section anchor="measurements-and-digests-generated-by-an-attester" numbered="true" toc="default">
        <name>Measurements and Digests Generated by an Attester</name>
        <t>A hash value of a software component is created before it is executed by Attesters.
These hash values are typically represented as event log entries referred to as measurements, which often occur in large quantities.
Capabilities such as Linux IMA can be used to generate these measurements on an Attester.
Measurements are chained by Attesters using a rolling hash function.
A TPM acts as a root of trust for storage (RTS) by providing an Extend (<xref target="TPM12" format="default"/>, <xref target="TPM2" format="default"/>) operation to feed hash values in a rolling hash function.
Each measurement added to the sequence of all measurements results in a new current digest hash value.
A TPM acts as a root of trust for reporting (RTR) by providing Quote (<xref target="TPM12" format="default"/>, <xref target="TPM2" format="default"/>) operations to generate a digest of all currently extended hash values as Evidence.</t>
        <t>TUDA requirements on TPM primitive operations and the information elements processed by them are illustrated using pseudocode in Appendix C and D.</t>
      </section>
      <section anchor="attesting-environments-and-roots-of-trust" numbered="true" toc="default">
        <name>Attesting Environments and Roots of Trust</name>
        <t>The primitive operations used to generate an initial set of measurements at the beginning of an Attester's boot sequence MUST be provided by a Root of Trust for Measurement (RTM) that is a system component of the Attester.
An RTM MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTM, measurements based on values generated by the RTM MUST be considered invalid.
At least one RTM MUST be accessible to the first Attesting Environment in Attester conducting Layered Attestation (see section 4.3. in <xref target="I-D.ietf-rats-architecture" format="default"/>).
An RTM MAY aggregate and retain measurements until the first RTS becomes available in a Layered Attestation procedure -- instead of feeding measurements into an RTS, instantly.
The Protection Capabilities of an RTM to also act as a temporary RTS MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements.
System components supporting the use of a TPM typically include such an appropriate RTM.
In general, feeding measurements from an initial RTM into a TPM is automated and separated from Protected Capabilities that provide Claims collection from Target Environments that are regular execution environments.
A TPM providing the Protection Capabilities for an isolated and shielded location to feed measurements into (integrity and confidentiality) is an appropriate RTS for TUDA.</t>
        <t>The primitive operations used to store and chain measurements via a rolling hash function MUST be provided by an appropriate root of trust for storage (RTS) that is a system component of the Attester.
An RTS MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTS, Evidence generated based on digest values acquired from the RTS MUST be considered invalid.
An RTS MUST be accessible to all Attesting Environments that are chained in a Layered Attestation procedure.
A TPM providing the primitive operation for Extend is an appropriate RTM for TUDA.</t>
        <t>The primitive operations used to generate Evidence based on digests MUST be provided by roots of trust for reporting (RTR) that are system components of the Attester.
An RTR MUST be be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTR, Evidence generated by the RTR MUST be considered invalid.
A TPM providing the primitive operations for Quote is an appropriate RTR for TUDA.
In a Composite Device (see Section 3.5. in <xref target="I-D.ietf-rats-architecture" format="default"/> conducting a Layered Attestation procedure, Attesting Environments MAY not be TPMs.
At least one Attesting Environment MUST be a TPM.
At least one TPM MUST act as an RTR.
Attesting Environments that are not TPMs MUST NOT act as an RTR.</t>
        <t>A concise definition of the terms RTM, RTS, and RTR can be found in the Trusted Computing Group (TCG) Glossary <xref target="TCGGLOSS" format="default"/>.
An RTS and an RTR are often tightly coupled.
In TUDA, a Trusted Platform Module (TPM, see <xref target="TPM12" format="default"/> and <xref target="TPM2" format="default"/>) takes on the roles of an RTS and an RTR.
The specification in this document requires the use of a TPM as a component of the Attester.
The protocol part of this specification can also be used with other RTS and RTR as long as essential functional requirements are satisfied (e.g., a trusted relative source of time, such as a tick-counter).
A sequence of Layered Attestation using at least an RTM, RTS, and RTR enables an authenticated boot sequence typically referred to as Secure Boot.</t>
      </section>
      <section anchor="indeterministic-measurements" numbered="true" toc="default">
        <name>Indeterministic Measurements</name>
        <t>The sequence of measurements that is extended into the RTS provided by a TPM may not be deterministic due to race conditions that are side-effects of parallelization.
Parallelization occurs, for example, between different isolated execution environments or separate software components started in a execution environment.
In order to enable the appraisal of Evidence in cases where sequence of measurement varies, a corresponding event log that records all measurements in sequence, such as the IMA log, has to be conveyed next to the Evidence as depicted in section 8.2. in <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/>.</t>
        <t>In contrast to Evidence, event logs do not necessarily have to be integrity protected or tamper-evident.
Event logs are conveyed to a Verifier in order to compute the reference values required for comparison with digest values (output of TPM Quote operations).
While digest values MUST constitute Evidence, measurements in event logs MAY be part of Evidence, but do not have to be MAY be conveyed separately.
If the values in event logs or their sequence are tampered with before or during conveyance from an Attester to a Verifier, the corresponding Evidence Appraisal fails.
While this dependency reflects the intended behavior of RATS, integrity protected or tamper-evident can be beneficial or convenient in some usage scenarios.
Additionally, event logs my allow insights into the composition of an Attester and typically come with confidentiality requirements.</t>
        <t>In order to compute reference values to compare digest Claims in Evidence with, a Verifier MUST be able to replay the rolling hash function of the Extend operation provided by a TPM (see Section 2.4.2. in <xref target="I-D.fedorkow-rats-network-device-attestation" format="default"/>).</t>
        <t>A Verifier has to replay the event log using its own extend operation with an identical rolling hash function in order to generate reference values as outlined in section 2.4.1. of <xref target="I-D.fedorkow-rats-network-device-attestation" format="default"/>.
During reply, the validity of each event log record MUST be appraised individually by the Verifier in order to infer if each started software component satisfies integrity requirements.
These appraisal procedures require Reference Integrity Measurements/Manifests (RIM) as are provided via <xref target="I-D.birkholz-rats-coswid-rim" format="default"/> or <xref target="TCGRIM" format="default"/>.
Each RIM includes Reference Values that are nominal reference hash values for sets of software components.
The Reference Values can be compared with hash values about executed software components included in an event log.
A Verifier requires an appropriate set of RIMs to compare every record in an event log successfully.
RIMs or other sets Reverence Value are supplied by Reference Value Providers as defined in the RATS Architecture <xref target="I-D.ietf-rats-architecture" format="default"/>.
Corresponding procedures that enable a Verifier to acquire Reference Values are out-of-scope of this document.</t>
      </section>
    </section>
    <section anchor="tuda-principles-and-requirements" numbered="true" toc="default">
      <name>TUDA Principles and Requirements</name>
      <t>Traditional remote attestation protocols typically use bi-directional challenge/response interaction models. Examples include the Platform Trust Service protocol <xref target="PTS" format="default"/> or CAVES <xref target="PRIRA" format="default"/>, where one entity sends a challenge that is included inside the response to prove the freshness of Evidence via recentness. The corresponding interaction model depicted in Section 8.1. of <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/> tightly couples the three RATS activities of generating, conveying and appraising Evidence.</t>
      <t>Time-Based Uni-directional Attestation can decouple these three activities. As a result, TUDA provides additional capabilities, such as:</t>
      <ul spacing="normal">
        <li>remote attestation for Attesters that might not always be able to reach the Internet by enabling the appraisal of past states,</li>
        <li>secure audit logs by combining the Evidence generated with integrity measurement logs (e.g. IMA logs) that represent a detailed record of corresponding past states,</li>
        <li>the use of the uni-directional interaction model <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/> that can traverse "diode-like" network security functions (NSF) or can be leveraged RESTful telemetry as enabled by the CoAP Observe option <xref target="RFC7252" format="default"/>).</li>
      </ul>
      <section anchor="attesting-environment-requirements" numbered="true" toc="default">
        <name>Attesting Environment Requirements</name>
        <t>An Attesting Environment that generates Evidence in TUDA MUST support three specific Protected Capabilities:</t>
        <ul spacing="normal">
          <li>Platform Configuration Registers (PCR) that can extend measurements consecutively and represent the sequence of measurements as a single digest,</li>
          <li>Restricted Signing Keys (RSK) that can only be accessed, if a specific signature about a set of measurements can be provided as authentication, and</li>
          <li>a dedicated source of (relative) time, e.g. a tick counter (a tick being a specific time interval, for example 10 ms).</li>
        </ul>
        <t>A TPM is capable of providing these Protected Capabilities for TUDA.</t>
      </section>
      <section anchor="handle-distributor-requirements-time-stamp-authority" numbered="true" toc="default">
        <name>Handle Distributor Requirements: Time Stamp Authority</name>
        <t>Both Evidence generation and Evidence appraisal require a Handle Distributor that can take on the role of a trusted Time Stamp Authority (TSA) as an additional third party.
Time Stamp Tokens (TST) included in Handles MUST be generated by Time Stamp Authority based on <xref target="RFC3161" format="default"/> that acts as the Handle Distributor.
The combination of a local source of time provided by a TPM (on the Attester) and the TST provided by the Handle Distributor (to both the Attester and the Verifier) enable an appropriate proof of freshness.</t>
      </section>
    </section>
    <section anchor="information-elements-and-conveyance" numbered="true" toc="default">
      <name>Information Elements and Conveyance</name>
      <t>TUDA defines a set of information elements (IE) that represent a set of Claims, are generated and stored on the Attester, and are intended to be transferred to the Verifier in order to enable the appraisal of Evidence. Each TUDA IE:</t>
      <ul spacing="normal">
        <li>MUST be encoded in the Concise Binary Object Representation (CBOR <xref target="RFC8949" format="default"/>) to minimize the volume of data in motion. In this document, the composition of the CBOR data items that represent IE is described using the Concise Data Definition Language, CDDL <xref target="RFC8610" format="default"/>.</li>
        <li>that requires a certain freshness SHOULD only be re-generated when out-dated (not fresh, but stale), which reduces the overall resources required from the Attester, including the usage of a TPM's resources (re-generation of IE is determined by their age or by specific state changes on the Attester, e.g., due to a reboot-cycle)</li>
        <li>SHOULD only be transferred when required, which reduces the amount of data in motion necessary to conduct remote attestation significantly (only IE that have changed since their last conveyance have to be transferred)</li>
        <li>that requires a certain freshness SHOULD be reused for multiple remote attestation procedures in the limits of its corresponding freshness-window, further reducing the load imposed on the Attester and corresponding TPMs.</li>
      </ul>
    </section>
    <section anchor="tuda-core-concept" numbered="true" toc="default">
      <name>TUDA Core Concept</name>
      <t>Traditional Challenge/Response Remote Attestation <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/> includes sending a nonce in the challenge to be used in ad-hoc Evidence generation. Using the TPM 1.2 as an example, a corresponding nonce-challenge would be included within the signature created by the TPM_Quote command in order to prove the freshness of a response containing evidence, see e.g. <xref target="PTS" format="default"/>.</t>
      <t>In contrast, the TUDA protocol uses the combined output of TPM_CertifyInfo and TPM_TickStampBlob. The former provides a proof about the Attester's state by creating Evidence that a certain key is bound to that state. The latter provides proof that the Attester was in the specified state by using the bound key in a time operation. This combination enables a time-based attestation scheme. The approach is based on the concepts introduced in <xref target="SCALE" format="default"/> and <xref target="SFKE2008" format="default"/>.</t>
      <t>Each TUDA IE has an individual time-frame, in which it is considered to be fresh (and therefore valid and trustworthy). In consequence, each TUDA IE that composes data in motion is based on different methods of creation.</t>
      <t>As highlighted above, the freshness properties of a challenge-response based protocol enable implicit time-keeping via a time window between:</t>
      <ul spacing="normal">
        <li>the time of transmission of the nonce, and</li>
        <li>the reception of the corresponding response.</li>
      </ul>
      <t>Given the time-based attestation scheme, the freshness property of TUDA is equivalent to that of bi-directional challenge response attestation, if the point-in-time of attestation lies between:</t>
      <ul spacing="normal">
        <li>the transmission of a TUDA time-synchronization token, and</li>
        <li>the typical round-trip time between the Verifier and the Attester.</li>
      </ul>
      <t>The accuracy of this time-frame is defined by two factors:</t>
      <ul spacing="normal">
        <li>the time-synchronization between the Attester and the Handle Distributor. The time between the two tickstamps acquired via the RoT define the scope of the maximum drift (time "left" and time "right" in respect to the timeline) to the handle including the signed timestamp, and</li>
        <li>the drift of clocks included in the RoT.</li>
      </ul>
      <t>Since the conveyance of TUDA Evidence does not rely upon a Verifier provided value (i.e. the nonce), the security guarantees of the protocol only incorporate the Handle Distributor and the RoT used. In consequence, TUDA Evidence can even serve as proof of integrity in audit logs with precise point-in-time guarantees.</t>
      <t><xref target="rest" format="default"/> contains guidance on how to utilize a REST architecture.</t>
      <t><xref target="snmp" format="default"/> contains guidance on how to create an SNMP binding and a corresponding TUDA-MIB.</t>
      <t><xref target="yang" format="default"/> contains a corresponding YANG module that supports both RESTCONF and CoREDONF.</t>
      <t><xref target="tpm12" format="default"/> contains a realization of TUDA using TPM 1.2 primitives.</t>
      <t><xref target="tpm2" format="default"/> contains a realization of TUDA using TPM 2.0 primitives.</t>
      <!--
# Terminology

This document introduces roles, information elements and types required to conduct TUDA and uses terminology (e.g. specific certificate names) typically seen in the context of attestation or hardware security modules.


## Universal Terms

Attestation Identity Key (AIK):

: A special purpose signature (therefore asymmetric) key that supports identity related operations. The private portion of the key pair is maintained confidential to the entity via appropriate measures (that have an impact on the scope of confidence). The public portion of the key pair may be included in AIK credentials that provide a claim about the entity.

TUDA Evidence Generation:

: The creation of evidence on the Attester that provides proof of a set of the Attester's integrity measurements. This is done by digitally signing a set of PCRs using an AIK protected and operated on by a RoT.

Identity:

: A set of claims that is intended to be related to an entity.

Integrity Measurements:

: Metrics of endpoint characteristics (i.e. composition, configuration and state) that
affect the confidence in the trustworthiness of an endpoint. Digests of integrity measurements
can be stored in shielded locations (i.e. PCR of a TPM).

Reference Integrity Measurements:

: Signed measurements about the characteristics of an Attester's characteristics that are provided by an Endorser and are intended to be used as declarative guidance {{- sacmterm}} (e.g. a signed CoSWID as defined in {{I-D.birkholz-rats-coswid-rim}}).

Trustworthy:

: A quality of an Attester that it does exactly what it is expected to do and nothing else.

## Roles

Attester:
: the endpoint that is the subject of the attestation to another endpoint.

Verifier:
: the endpoint that consumes the attestation of another endpoint to conduct a verification.

TSA:
: a Time Stamp Authority {{RFC3161}}

### General Types

Byte:
: the now customary synonym for octet

Cert:
: an X.509 certificate represented as a byte-string

-->

<section anchor="tpm-specific-terms" numbered="true" toc="default">
        <name>TPM Specific Terms</name>
        <dl>
          <dt>
PCR:  </dt>
          <dd>
            <t>A Platform Configuration Register that is part of the TPM and is used to securely store and report measurements about security posture</t>
          </dd>
          <dt>
PCR-Hash:  </dt>
          <dd>
            <t>A hash value of the security posture measurements stored in a TPM PCR (e.g. regarding running software instances) represented as a byte-string</t>
          </dd>
        </dl>
      </section>
      <section anchor="certificates" numbered="true" toc="default">
        <name>Certificates</name>
        <dl>
          <dt>
HD-CA:  </dt>
          <dd>
            <t>The Certificate Authority that provides the certificate for the TSA role of a Handle Distributor (HD)</t>
          </dd>
          <dt>
AIK-CA:  </dt>
          <dd>
            <t>The Certificate Authority that provides the certificate for the AK of the TPM. This is the client platform credential for this protocol. It is a placeholder for a specific CA and AK-Cert is a placeholder for the corresponding certificate, depending on what protocol was used. The specific protocols are out of scope for this document, see also <xref target="AIK-Enrollment" format="default"/> and <xref target="IEEE802.1AR" format="default"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="the-tuda-protocol-family" numbered="true" toc="default">
      <name>The TUDA Protocol Family</name>
      <t>Time-Based Uni-Directional Attestation consists of the following seven information elements:</t>
      <dl>
        <dt>
Handle Distributor Certificate:  </dt>
        <dd>
          <t>The certificate of the Handle Distributor that takes on the role of TSA. The Handle Distributor certificate is used in a subsequent synchronization protocol tokens. This certificate is signed by the HD-CA.</t>
        </dd>
        <dt>
AK Certificate:  </dt>
        <dd>
          <t>A certificate about the Attestation Key (AIK) used. An AK-Cert may be an <xref target="IEEE802.1AR" format="default"/> IDevID or LDevID, depending on their setting of the corresponding identity property (<xref target="AIK-Credential" format="default"/>, <xref target="AIK-Enrollment" format="default"/>; see <xref target="aik" format="default"/>).</t>
        </dd>
        <dt>
Synchronization Token:  </dt>
        <dd>
          <t>The reference frame for Evidence is provided by the relative timestamps generated by the TPM. In order to put Evidence into relation with a Real Time Clock (RTC), it is necessary to provide a cryptographic synchronization between these trusted relative timestamps and the regular RTC that is a hardware component of the Attester. To do so, trustable timestamps are acquired from a Handle Distributor.</t>
        </dd>
        <dt>
Restriction Info:  </dt>
        <dd>
          <t>Evidence Generation relies on the capability of the Rot to operate on restricted keys. Whenever the PCR values of an Attesting Environment change, a new restricted key is created that can only be operated as long as the PCRs remain in their current state.</t>
        </dd>
        <dt/>
        <dd>
          <t>In order to prove to the Verifier that this restricted temporary key actually has these properties and also to provide the PCR value that it is restricted, the corresponding signing capabilities of the RoT are used. The TPM creates a signed certificate using the AK about the newly created restricted key.</t>
        </dd>
        <dt>
Measurement Log:  </dt>
        <dd>
          <t>A Verifier requires the means to derive the PCRs' values in order to appraise the trustworthiness of an Attester. As such, a list of those elements that were extended into the PCRs is reported. For certain environments, this step may be optional if a list of valid PCR configurations (in the form of RIM available to the Verifier) exists and no measurement log is required.</t>
        </dd>
        <dt>
Implicit Evidence:  </dt>
        <dd>
          <t>The actual Evidence is then based on a signed timestamp provided by the RoT using the restricted temporary key that was certified in the steps above. The signed timestamp generated provides the trustable assertion that at this point in time (with respect to the relative time of the TPM
s tick counter) a certain configuration existed (namely the PCR values associated with the restricted key). In combination with the synchronization token this timestamp represented in relative time can then be related to the real-time clock.</t>
        </dd>
        <dt>
Concise SWID tags:  </dt>
        <dd>
          <t>As an option to better assess the trustworthiness of an Attester, a Verifier can request the reference hashes (RIM, sometimes called golden measurements, known-good-values, or nominal values) of all started software components to compare them with the entries in a measurement log. References hashes regarding installed (and therefore running) software can be provided by the manufacturer via SWID tags. SWID tags are provided by the Attester using the Concise SWID representation <xref target="I-D.ietf-sacm-coswid" format="default"/> and bundled into a collection (a RIM Manifest <xref target="I-D.birkholz-rats-coswid-rim" format="default"/>).</t>
        </dd>
      </dl>
      <t>These information elements can be sent en bloc, but it is recommended
to retrieve them separately to save bandwidth, since these
elements have different update cycles. In most cases, retransmitting
all seven information elements would result in unnecessary redundancy.</t>
      <t>Furthermore, in some scenarios it might be feasible not to store all
elements on the Attester, but instead they could be retrieved
from another location or be pre-deployed to the Verifier.
It is also feasible to only store public keys on the Verifier and skip certificate provisioning completely in order to save bandwidth and computation time for certificate verification.</t>
      <section anchor="updatecycles" numbered="true" toc="default">
        <name>TUDA Information Elements Update Cycles</name>
        <t>An Attester can be in various states during its uptime cycles. For TUDA, a subset of these states (which imply associated information) are important to the Evidence Generation. The specific states defined are:</t>
        <ul spacing="normal">
          <li>persistent, even after a hard reboot: includes certificates
that are associated with the endpoint itself or with services it relies on.</li>
          <li>volatile to a degree: may change at the beginning of each boot cycle.
This includes the capability of a TPM to provide relative time which provides the basis for the synchronization token and implicit attestation -- and which can reset after an Attester is powered off.</li>
          <li>very volatile: can change during any time of an uptime cycle
(periods of time an Attester is powered on, starting with its boot sequence).
This includes the content of PCRs of a hardware RoT and thereby also the PCR-restricted signing keys used for attestation.</li>
        </ul>
        <t>Depending on this "lifetime of state", data has to be transported over the wire, or not. E.g. information that does not change due to a reboot typically has to be transported only once between the Attester and the Verifier.</t>
        <t>There are three kinds of events that require fresh Evidence to be generated:</t>
        <ul spacing="normal">
          <li>The Attester completes a boot-cycle</li>
          <li>A relevant PCR changes</li>
          <li>Too much time has passed since the Evidence Generation</li>
        </ul>
        <t>The third event listed above is variable per application use case and also depends on the precision of the clock included in the RoT.
For usage scenarios, in which the Attester would periodically
push information to be used in an audit-log, a time-frame of approximately one update per minute should be sufficient. For those usage scenarios, where Verifiers request (pull) fresh Evidence, an implementation could potentially use a TPM continuously to always present the most freshly created Evidence. This kind of utilization can result in a bottle-neck with respect to other purposes: if unavoidable, a periodic interval of once per ten seconds is recommended, which typically leaves about 80% of available TPM resource for other applications.</t>
        <!--

AIK-Token only once for the lifetime

Sync-Token only once per boot-cycle. Or when clock-drift gets too big

CertifyInfo whenever PCRs change, since new key gets created

MeasurementLog whenever PCRs have changed in order to validate new PCRs

Implicit Attestation for each time that an attestation is needed

-->

<t>The following diagram is based on the reference interaction model found in section 8.1. of <xref target="I-D.ietf-rats-reference-interaction-models" format="default"/> and is enriched with the IE update cycles defined in this section.</t>
        <figure anchor="SequenceExample">
          <name>Example sequence of events</name>
          <artwork name="" type="" align="left" alt=""><![CDATA[
.----------.                                                .----------.
| Attester |                                                | Verifier |
'----------'                                                '----------'
     |                                                            |
   boot                                                           |
     |                                                            |
valueGeneration(targetEnvironment)                                |
     | => claims                                                  |
     |                   .--------------------.                   |
     | <----------handle |                    |                   |
     |                   | Handle Distributor |                   |
     |                   |                    | handle----------> |
     |                   '--------------------'                   |
syncTokenGeneration                                               |
     | => syncToken                                               |
     |                                                            |
restrictedKeyGeneration                                           |
restrictedKeyCertify                                              |
     |                                                            |
evidenceGeneration(handle, authSecIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | pushAKCert ----------------------------------------------> |
     | pushSyncToken -------------------------------------------> |
     | pushCertifyInfo -----------------------------------------> |
     | pushEventLog --------------------------------------------> |
     | pushEvidenceon ------------------------------------------> |
     |                                                            |
     |                  evidenceAppraisal(evidence, eventLog, refClaims)
     |                                       attestationResult <= |
     ~                                                            ~
  pcr-change                                                      |
     |                                                            |
restrictedKeyGeneration                                           |
restrictedKeyCertify                                              |
     |                                                            |
evidenceGeneration(handle, authSecIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | pushCertifyInfo -----------------------------------------> |
     | pushEventLog --------------------------------------------> |
     | pushEvidenceon ------------------------------------------> |
     |                                                            |
     |                  evidenceAppraisal(evidence, eventLog, refClaims)
     |                                       attestationResult <= |
     |                                                            |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="sync-base-protocol" numbered="true" toc="default">
      <name>Sync Base Protocol</name>
      <t>The uni-directional approach of TUDA requires evidence on how the TPM time represented in ticks (relative time since boot of the TPM) relates to the standard time provided by the TSA.
The Sync Base Protocol (SBP) creates evidence that binds the TPM tick time to the TSA timestamp. The binding information is used by and conveyed via the Sync Token (TUDA IE). There are three actions required to create the content of a Sync Token:</t>
      <ul spacing="normal">
        <li>At a given point in time (called "left"), a signed tickstamp counter value is acquired from the hardware RoT. The hash of counter and signature is used as a nonce in the request directed at the TSA.</li>
        <li>The corresponding response includes a data-structure incorporating the trusted timestamp token and its signature created by the TSA.</li>
        <li>At the point-in-time the response arrives (called "right"), a signed tickstamp counter value is acquired from the hardware RoT again, using a hash of the signed TSA timestamp as a nonce.</li>
      </ul>
      <t>The three time-related values --- the relative timestamps provided by the hardware RoT ("left" and "right") and the TSA timestamp --- and their corresponding signatures are aggregated in order to create a corresponding Sync Token to be used as a TUDA Information Element that can be conveyed as evidence to a Verifier.</t>
      <t>The drift of a clock incorporated in the hardware RoT that drives the increments of the tick counter constitutes one of the triggers that can initiate a TUDA Information Element Update Cycle in respect to the freshness of the available Sync Token.</t>
      <!-- The following functions illustrate the worst case freshness-window assuming the maximum drift of TPM tick counters that is considered acceptable in respect to the standard time - 15 percent - as defined by the TPM specification: -->

</section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>This memo includes requests to IANA, including registrations for media
type definitions.</t>
      <t>TBD</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>There are Security Considerations. TBD</t>
    </section>
    <section anchor="contributors" numbered="true" toc="default">
      <name>Contributors</name>
      <t>TBD</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3161" target="https://www.rfc-editor.org/info/rfc3161">
          <front>
            <title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
            <author fullname="C. Adams" initials="C." surname="Adams">
              <organization/>
            </author>
            <author fullname="P. Cain" initials="P." surname="Cain">
              <organization/>
            </author>
            <author fullname="D. Pinkas" initials="D." surname="Pinkas">
              <organization/>
            </author>
            <author fullname="R. Zuccherato" initials="R." surname="Zuccherato">
              <organization/>
            </author>
            <date month="August" year="2001"/>
            <abstract>
              <t>This document describes the format of a request sent to a Time Stamping Authority (TSA) and of the response that is returned.  It also establishes several security-relevant requirements for TSA operation, with regards to processing requests to generate responses.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3161"/>
          <seriesInfo name="DOI" value="10.17487/RFC3161"/>
        </reference>
        <reference anchor="RFC5247" target="https://www.rfc-editor.org/info/rfc5247">
          <front>
            <title>Extensible Authentication Protocol (EAP) Key Management Framework</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba">
              <organization/>
            </author>
            <author fullname="D. Simon" initials="D." surname="Simon">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <date month="August" year="2008"/>
            <abstract>
              <t>The Extensible Authentication Protocol (EAP), defined in RFC 3748, enables extensible network access authentication.  This document specifies the EAP key hierarchy and provides a framework for the transport and usage of keying material and parameters generated by EAP authentication algorithms, known as "methods".  It also provides a detailed system-level security analysis, describing the conditions under which the key management guidelines described in RFC 4962 can be satisfied.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5247"/>
          <seriesInfo name="DOI" value="10.17487/RFC5247"/>
        </reference>
        <reference anchor="RFC6690" target="https://www.rfc-editor.org/info/rfc6690">
          <front>
            <title>Constrained RESTful Environments (CoRE) Link Format</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <date month="August" year="2012"/>
            <abstract>
              <t>This specification defines Web Linking using a link format for use by constrained web servers to describe hosted resources, their attributes, and other relationships between links.  Based on the HTTP Link Header field defined in RFC 5988, the Constrained RESTful Environments (CoRE) Link Format is carried as a payload and is assigned an Internet media type.  "RESTful" refers to the Representational State Transfer (REST) architecture.  A well-known URI is defined as a default entry point for requesting the links hosted by a server.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6690"/>
          <seriesInfo name="DOI" value="10.17487/RFC6690"/>
        </reference>
        <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman">
              <organization/>
            </author>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049.  It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC7230" target="https://www.rfc-editor.org/info/rfc7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7252" target="https://www.rfc-editor.org/info/rfc7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby">
              <organization/>
            </author>
            <author fullname="K. Hartke" initials="K." surname="Hartke">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks.  The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s.  The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types.  CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC8820" target="https://www.rfc-editor.org/info/rfc8820">
          <front>
            <title>URI Design and Ownership</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham">
              <organization/>
            </author>
            <date month="June" year="2020"/>
            <abstract>
              <t>Section 1.1.1 of RFC 3986 defines URI syntax as "a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme."  In other words, the structure of a URI is defined by its scheme. While it is common for schemes to further delegate their substructure to the URI's owner, publishing independent standards that mandate particular forms of substructure in URIs is often problematic.</t>
              <t>This document provides guidance on the specification of URI substructure in standards.</t>
              <t>This document obsoletes RFC 7320 and updates RFC 3986.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="190"/>
          <seriesInfo name="RFC" value="8820"/>
          <seriesInfo name="DOI" value="10.17487/RFC8820"/>
        </reference>
        <reference anchor="RFC7540" target="https://www.rfc-editor.org/info/rfc7540">
          <front>
            <title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
            <author fullname="M. Belshe" initials="M." surname="Belshe">
              <organization/>
            </author>
            <author fullname="R. Peon" initials="R." surname="Peon">
              <organization/>
            </author>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t>
              <t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7540"/>
          <seriesInfo name="DOI" value="10.17487/RFC7540"/>
        </reference>
        <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <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="RFC8610" target="https://www.rfc-editor.org/info/rfc8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz">
              <organization/>
            </author>
            <author fullname="C. Vigano" initials="C." surname="Vigano">
              <organization/>
            </author>
            <author fullname="C. Bormann" initials="C." surname="Bormann">
              <organization/>
            </author>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049).  Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <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>
        <name>Informative References</name>
        <reference anchor="RFC1213" target="https://www.rfc-editor.org/info/rfc1213">
          <front>
            <title>Management Information Base for Network Management of TCP/IP-based internets: MIB-II</title>
            <author fullname="K. McCloghrie" initials="K." surname="McCloghrie">
              <organization/>
            </author>
            <author fullname="M. Rose" initials="M." surname="Rose">
              <organization/>
            </author>
            <date month="March" year="1991"/>
            <abstract>
              <t>This memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="17"/>
          <seriesInfo name="RFC" value="1213"/>
          <seriesInfo name="DOI" value="10.17487/RFC1213"/>
        </reference>
        <reference anchor="RFC2790" target="https://www.rfc-editor.org/info/rfc2790">
          <front>
            <title>Host Resources MIB</title>
            <author fullname="S. Waldbusser" initials="S." surname="Waldbusser">
              <organization/>
            </author>
            <author fullname="P. Grillo" initials="P." surname="Grillo">
              <organization/>
            </author>
            <date month="March" year="2000"/>
            <abstract>
              <t>This memo obsoletes RFC 1514, the "Host Resources MIB".  This memo extends that specification by clarifying changes based on implementation and deployment experience and documenting the Host Resources MIB in SMIv2 format while remaining semantically identical to the existing SMIv1-based MIB.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2790"/>
          <seriesInfo name="DOI" value="10.17487/RFC2790"/>
        </reference>
        <reference anchor="RFC4949" target="https://www.rfc-editor.org/info/rfc4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey">
              <organization/>
            </author>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5209" target="https://www.rfc-editor.org/info/rfc5209">
          <front>
            <title>Network Endpoint Assessment (NEA): Overview and Requirements</title>
            <author fullname="P. Sangster" initials="P." surname="Sangster">
              <organization/>
            </author>
            <author fullname="H. Khosravi" initials="H." surname="Khosravi">
              <organization/>
            </author>
            <author fullname="M. Mani" initials="M." surname="Mani">
              <organization/>
            </author>
            <author fullname="K. Narayan" initials="K." surname="Narayan">
              <organization/>
            </author>
            <author fullname="J. Tardo" initials="J." surname="Tardo">
              <organization/>
            </author>
            <date month="June" year="2008"/>
            <abstract>
              <t>This document defines the problem statement, scope, and protocol requirements between the components of the NEA (Network Endpoint Assessment) reference model.  NEA provides owners of networks (e.g., an enterprise offering remote access) a mechanism to evaluate the posture of a system.  This may take place during the request for network access and/or subsequently at any time while connected to the network.  The learned posture information can then be applied to a variety of compliance-oriented decisions.  The posture information is frequently useful for detecting systems that are lacking or have out-of-date security protection mechanisms such as: anti-virus and host-based firewall software.  In order to provide context for the requirements, a reference model and terminology are introduced.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5209"/>
          <seriesInfo name="DOI" value="10.17487/RFC5209"/>
        </reference>
        <reference anchor="RFC6933" target="https://www.rfc-editor.org/info/rfc6933">
          <front>
            <title>Entity MIB (Version 4)</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu">
              <organization/>
            </author>
            <author fullname="J. Quittek" initials="J." surname="Quittek">
              <organization/>
            </author>
            <author fullname="M. Chandramouli" initials="M." surname="Chandramouli">
              <organization/>
            </author>
            <date month="May" year="2013"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes managed objects used for managing multiple logical and physical entities managed by a single Simple Network Management Protocol (SNMP) agent.  This document specifies version 4 of the Entity MIB.  This memo obsoletes version 3 of the Entity MIB module published as RFC 4133.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6933"/>
          <seriesInfo name="DOI" value="10.17487/RFC6933"/>
        </reference>
        <referencegroup anchor="STD62" target="https://www.rfc-editor.org/info/std62">
          <!-- reference.RFC.3411.xml -->
<reference anchor="RFC3411" target="https://www.rfc-editor.org/info/rfc3411">
            <front>
              <title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
              <author fullname="D. Harrington" initials="D." surname="Harrington">
                <organization/>
              </author>
              <author fullname="R. Presuhn" initials="R." surname="Presuhn">
                <organization/>
              </author>
              <author fullname="B. Wijnen" initials="B." surname="Wijnen">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks.  The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time.  The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data.  This document obsoletes RFC 2571.  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3411"/>
            <seriesInfo name="DOI" value="10.17487/RFC3411"/>
          </reference>
          <!-- reference.RFC.3412.xml -->
<reference anchor="RFC3412" target="https://www.rfc-editor.org/info/rfc3412">
            <front>
              <title>Message Processing and Dispatching for the Simple Network Management Protocol (SNMP)</title>
              <author fullname="J. Case" initials="J." surname="Case">
                <organization/>
              </author>
              <author fullname="D. Harrington" initials="D." surname="Harrington">
                <organization/>
              </author>
              <author fullname="R. Presuhn" initials="R." surname="Presuhn">
                <organization/>
              </author>
              <author fullname="B. Wijnen" initials="B." surname="Wijnen">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document describes the Message Processing and Dispatching for Simple Network Management Protocol (SNMP) messages within the SNMP architecture.  It defines the procedures for dispatching potentially multiple versions of SNMP messages to the proper SNMP Message Processing Models, and for dispatching PDUs to SNMP applications.  This document also describes one Message Processing Model - the SNMPv3 Message Processing Model.  This document obsoletes RFC 2572. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3412"/>
            <seriesInfo name="DOI" value="10.17487/RFC3412"/>
          </reference>
          <!-- reference.RFC.3413.xml -->
<reference anchor="RFC3413" target="https://www.rfc-editor.org/info/rfc3413">
            <front>
              <title>Simple Network Management Protocol (SNMP) Applications</title>
              <author fullname="D. Levi" initials="D." surname="Levi">
                <organization/>
              </author>
              <author fullname="P. Meyer" initials="P." surname="Meyer">
                <organization/>
              </author>
              <author fullname="B. Stewart" initials="B." surname="Stewart">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document describes five types of Simple Network Management Protocol (SNMP) applications which make use of an SNMP engine as described in STD 62, RFC 3411.  The types of application described are Command Generators, Command Responders, Notification Originators, Notification Receivers, and Proxy Forwarders. This document also defines Management Information Base (MIB) modules for specifying targets of management operations, for notification filtering, and for proxy forwarding.  This document obsoletes RFC 2573.  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3413"/>
            <seriesInfo name="DOI" value="10.17487/RFC3413"/>
          </reference>
          <!-- reference.RFC.3414.xml -->
<reference anchor="RFC3414" target="https://www.rfc-editor.org/info/rfc3414">
            <front>
              <title>User-based Security Model (USM) for version 3 of the Simple Network Management Protocol (SNMPv3)</title>
              <author fullname="U. Blumenthal" initials="U." surname="Blumenthal">
                <organization/>
              </author>
              <author fullname="B. Wijnen" initials="B." surname="Wijnen">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document describes the User-based Security Model (USM) for Simple Network Management Protocol (SNMP) version 3 for use in the SNMP architecture.  It defines the Elements of Procedure for providing SNMP message level security.  This document also includes a Management Information Base (MIB) for remotely monitoring/managing the configuration parameters for this Security Model.  This document obsoletes RFC 2574.  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3414"/>
            <seriesInfo name="DOI" value="10.17487/RFC3414"/>
          </reference>
          <!-- reference.RFC.3415.xml -->
<reference anchor="RFC3415" target="https://www.rfc-editor.org/info/rfc3415">
            <front>
              <title>View-based Access Control Model (VACM) for the Simple Network Management Protocol (SNMP)</title>
              <author fullname="B. Wijnen" initials="B." surname="Wijnen">
                <organization/>
              </author>
              <author fullname="R. Presuhn" initials="R." surname="Presuhn">
                <organization/>
              </author>
              <author fullname="K. McCloghrie" initials="K." surname="McCloghrie">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document describes the View-based Access Control Model (VACM) for use in the Simple Network Management Protocol (SNMP) architecture.  It defines the Elements of Procedure for controlling access to management information.  This document also includes a Management Information Base (MIB) for remotely managing the configuration parameters for the View- based Access Control Model.  This document obsoletes RFC 2575. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3415"/>
            <seriesInfo name="DOI" value="10.17487/RFC3415"/>
          </reference>
          <!-- reference.RFC.3416.xml -->
<reference anchor="RFC3416" target="https://www.rfc-editor.org/info/rfc3416">
            <front>
              <title>Version 2 of the Protocol Operations for the Simple Network Management Protocol (SNMP)</title>
              <author fullname="R. Presuhn" initials="R." role="editor" surname="Presuhn">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document defines version 2 of the protocol operations for the Simple Network Management Protocol (SNMP).  It defines the syntax and elements of procedure for sending, receiving, and processing SNMP PDUs. This document obsoletes RFC 1905.  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3416"/>
            <seriesInfo name="DOI" value="10.17487/RFC3416"/>
          </reference>
          <!-- reference.RFC.3417.xml -->
<reference anchor="RFC3417" target="https://www.rfc-editor.org/info/rfc3417">
            <front>
              <title>Transport Mappings for the Simple Network Management Protocol (SNMP)</title>
              <author fullname="R. Presuhn" initials="R." role="editor" surname="Presuhn">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document defines the transport of Simple Network Management Protocol (SNMP) messages over various protocols.  This document obsoletes RFC 1906.  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3417"/>
            <seriesInfo name="DOI" value="10.17487/RFC3417"/>
          </reference>
          <!-- reference.RFC.3418.xml -->
<reference anchor="RFC3418" target="https://www.rfc-editor.org/info/rfc3418">
            <front>
              <title>Management Information Base (MIB) for the Simple Network Management Protocol (SNMP)</title>
              <author fullname="R. Presuhn" initials="R." role="editor" surname="Presuhn">
                <organization/>
              </author>
              <date month="December" year="2002"/>
              <abstract>
                <t>This document defines managed objects which describe the behavior of a Simple Network Management Protocol (SNMP) entity.  This document obsoletes RFC 1907, Management Information Base for Version 2 of the Simple Network Management Protocol (SNMPv2).  [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3418"/>
            <seriesInfo name="DOI" value="10.17487/RFC3418"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-core-comi" target="https://www.ietf.org/archive/id/draft-ietf-core-comi-11.txt">
          <front>
            <title>CoAP Management Interface (CORECONF)</title>
            <author fullname="Michel Veillette">
              <organization>Trilliant Networks Inc.</organization>
            </author>
            <author fullname="Peter van der Stok">
              <organization>consultant</organization>
            </author>
            <author fullname="Alexander Pelov">
              <organization>Acklio</organization>
            </author>
            <author fullname="Andy Bierman">
              <organization>YumaWorks</organization>
            </author>
            <author fullname="Ivaylo Petrov">
              <organization>Acklio</organization>
            </author>
            <date day="17" month="January" year="2021"/>
            <abstract>
              <t>   This document describes a network management interface for
   constrained devices and networks, called CoAP Management Interface
   (CORECONF).  The Constrained Application Protocol (CoAP) is used to
   access datastore and data node resources specified in YANG, or SMIv2
   converted to YANG.  CORECONF uses the YANG to CBOR mapping and
   converts YANG identifier strings to numeric identifiers for payload
   size reduction.  CORECONF extends the set of YANG based protocols,
   NETCONF and RESTCONF, with the capability to manage constrained
   devices and networks.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-core-comi-11"/>
        </reference>
        <reference anchor="I-D.ietf-sacm-coswid" target="https://www.ietf.org/archive/id/draft-ietf-sacm-coswid-19.txt">
          <front>
            <title>Concise Software Identification Tags</title>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Jessica Fitzgerald-McKay">
              <organization>National Security Agency</organization>
            </author>
            <author fullname="Charles Schmidt">
              <organization>The MITRE Corporation</organization>
            </author>
            <author fullname="David Waltermire">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date day="20" month="October" year="2021"/>
            <abstract>
              <t>   ISO/IEC 19770-2:2015 Software Identification (SWID) tags provide an
   extensible XML-based structure to identify and describe individual
   software components, patches, and installation bundles.  SWID tag
   representations can be too large for devices with network and storage
   constraints.  This document defines a concise representation of SWID
   tags: Concise SWID (CoSWID) tags.  CoSWID supports a similar set of
   semantics and features as SWID tags, as well as new semantics that
   allow CoSWIDs to describe additional types of information, all in a
   more memory efficient format.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-sacm-coswid-19"/>
        </reference>
        <reference anchor="I-D.ietf-rats-reference-interaction-models" target="https://www.ietf.org/archive/id/draft-ietf-rats-reference-interaction-models-04.txt">
          <front>
            <title>Reference Interaction Models for Remote Attestation Procedures</title>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Michael Eckel">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Wei Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Eric Voit">
              <organization>Cisco Systems</organization>
            </author>
            <date day="26" month="July" year="2021"/>
            <abstract>
              <t>   This document describes interaction models for remote attestation
   procedures (RATS).  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-04"/>
        </reference>
        <reference anchor="I-D.ietf-rats-architecture" target="https://www.ietf.org/archive/id/draft-ietf-rats-architecture-14.txt">
          <front>
            <title>Remote Attestation Procedures Architecture</title>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Dave Thaler">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Michael Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Ned Smith">
              <organization>Intel Corporation</organization>
            </author>
            <author fullname="Wei Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="9" month="December" year="2021"/>
            <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.
   An attempt is made to provide for a model that is neutral toward
   processor architectures, the content of claims, and protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-rats-architecture-14"/>
        </reference>
        <reference anchor="I-D.fedorkow-rats-network-device-attestation" target="https://www.ietf.org/archive/id/draft-fedorkow-rats-network-device-attestation-05.txt">
          <front>
            <title>TPM-based Network Device Remote Integrity Verification</title>
            <author fullname="Guy Fedorkow">
              <organization>Juniper Networks, Inc.</organization>
            </author>
            <author fullname="Eric Voit">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Jessica Fitzgerald-McKay">
              <organization>National Security Agency</organization>
            </author>
            <date day="16" month="April" year="2020"/>
            <abstract>
              <t>   This document describes a workflow for remote attestation of
   integrity of network devices.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-fedorkow-rats-network-device-attestation-05"/>
        </reference>
        <reference anchor="I-D.birkholz-rats-coswid-rim" target="https://www.ietf.org/archive/id/draft-birkholz-rats-coswid-rim-02.txt">
          <front>
            <title>Reference Integrity Measurement Extension for Concise Software Identities</title>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Patrick Uiterwijk">
              <organization>Red Hat</organization>
            </author>
            <author fullname="David Waltermire">
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <author fullname="Shwetha Bhandari">
              <organization>Cisco Systems, Inc.</organization>
            </author>
            <author fullname="Jessica Fitzgerald-McKay">
              <organization>Department of Defense</organization>
            </author>
            <date day="13" month="January" year="2021"/>
            <abstract>
              <t>   This document specifies the CDDL and usage description for Reference
   Integrity Measurements (RIM) in Remote Attestation Procedures (RATS).
   The specification is based on Concise Software Identification
   (CoSWID) and TCG Reference Integrity Manifest Information Model -
   based on Host Integrity at Runtime and Start-up (HIRS).  Extension
   points defined in CoSWID used to augment CoSWID tags with new
   attributes that can express the TCG Reference Integrity Manifest
   extensions.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-coswid-rim-02"/>
        </reference>
        <reference anchor="I-D.birkholz-rats-uccs" target="https://www.ietf.org/archive/id/draft-birkholz-rats-uccs-03.txt">
          <front>
            <title>A CBOR Tag for Unprotected CWT Claims Sets</title>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Jeremy O'Donoghue">
              <organization>Qualcomm Technologies Inc.</organization>
            </author>
            <author fullname="Nancy Cam-Winget">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Carsten Bormann">
              <organization>Universitaet Bremen TZI</organization>
            </author>
            <date day="8" month="March" year="2021"/>
            <abstract>
              <t>   CBOR Web Token (CWT, RFC 8392) Claims Sets sometimes do not need the
   protection afforded by wrapping them into COSE, as is required for a
   true CWT.  This specification defines a CBOR tag for such unprotected
   CWT Claims Sets (UCCS) and discusses conditions for its proper use.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-uccs-03"/>
        </reference>
        <reference anchor="SCALE">
          <front>
            <title>Improving Scalability for Remote Attestation</title>
            <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
          <seriesInfo name="Master Thesis (Diplomarbeit)," value="Technische Universitaet Darmstadt, Germany"/>
        </reference>
        <reference anchor="Safford">
          <front>
            <title>Using IMA for Integrity Measurement and Attestation</title>
            <author initials="D." surname="Safford" fullname="David Safford">
              <organization/>
            </author>
            <author initials="M." surname="Zohar" fullname="Mimi Zohar">
              <organization/>
            </author>
            <author initials="R." surname="Sailer" fullname="Reiner Sailer">
              <organization/>
            </author>
            <date year="2009"/>
          </front>
          <seriesInfo name="Linux Plumbers Conference 2009" value=""/>
        </reference>
        <reference anchor="Steffens">
          <front>
            <title>The linux Integrity Measurement Architecture and TPM-based Network Endpoint Assessment</title>
            <author initials="A." surname="Steffen" fullname="Andreas Steffen">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
          <seriesInfo name="Linux Security Summit" value=""/>
        </reference>
        <reference anchor="PRIRA">
          <front>
            <title>Principles of Remote Attestation</title>
            <author initials="G." surname="Coker" fullname="George Coker">
              <organization/>
            </author>
            <author initials="J." surname="Guttman" fullname="Joshua Guttman">
              <organization/>
            </author>
            <author initials="P." surname="Loscocco" fullname="Peter Loscocco">
              <organization/>
            </author>
            <author initials="A." surname="Herzog" fullname="Amy Herzog">
              <organization/>
            </author>
            <author initials="J." surname="Millen" fullname="Jonathan Millen">
              <organization/>
            </author>
            <author initials="B." surname="O'Hanlon" fullname="Brian O'Hanlon">
              <organization/>
            </author>
            <author initials="J." surname="Ramsdell" fullname="John Ramsdell">
              <organization/>
            </author>
            <author initials="A." surname="Segall" fullname="Ariel Segall">
              <organization/>
            </author>
            <author initials="J." surname="Sheehy" fullname="Justin Sheehy">
              <organization/>
            </author>
            <author initials="B." surname="Sniffen" fullname="Brian Sniffen">
              <organization/>
            </author>
            <date year="2011" month="April" day="23"/>
          </front>
          <seriesInfo name="Springer" value="International Journal of Information Security, Vol. 10, pp. 63-81"/>
          <seriesInfo name="DOI" value="10.1007/s10207-011-0124-7"/>
        </reference>
        <reference anchor="SFKE2008">
          <front>
            <title>Improving the scalability of platform attestation</title>
            <author initials="F." surname="Stumpf" fullname="Frederic Stumpf">
              <organization/>
            </author>
            <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
              <organization/>
            </author>
            <author initials="S." surname="Katzenbeisser" fullname="Stefan Katzenbeisser">
              <organization/>
            </author>
            <author initials="C." surname="Eckert" fullname="Claudia Eckert">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
          <seriesInfo name="ACM" value="Proceedings of the 3rd ACM workshop on Scalable trusted computing - STC '08 "/>
          <seriesInfo name="page" value="1-10"/>
          <seriesInfo name="DOI" value="10.1145/1456455.1456457"/>
        </reference>
        <reference anchor="CEL">
          <front>
            <title>DRAFT Canonical Event Log Format Version: 1.0, Revision: .12</title>
            <author>
              <organization>TCG TNC Working Group</organization>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="TPM12">
          <front>
            <title>Information technology -- Trusted Platform Module -- Part 1: Overview</title>
            <author>
              <organization/>
            </author>
            <date year="2009"/>
          </front>
          <seriesInfo name="ISO/IEC" value="11889-1"/>
        </reference>
        <reference anchor="TPM2">
          <front>
            <title>Trusted Platform Module Library Specification, Family 2.0, Level 00, Revision 01.16 ed.</title>
            <author>
              <organization>Trusted Computing Group</organization>
            </author>
            <date year="2014"/>
          </front>
        </reference>
        <reference anchor="PTS" target="https://www.trustedcomputinggroup.org/wp-content/uploads/IFM_PTS_v1_0_r28.pdf">
          <front>
            <title>TCG Attestation PTS Protocol Binding to TNC IF-M</title>
            <author>
              <organization>TCG TNC Working Group</organization>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="TCGGLOSS" target="https://www.trustedcomputinggroup.org/wp-content/uploads/TCG_Glossary_Board-Approved_12.13.2012.pdf">
          <front>
            <title>TCG Glossary</title>
            <author>
              <organization>TCG</organization>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="TCGRIM" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG_RIM_Model_v1-r13_2feb20.pdf">
          <front>
            <title>TCG Reference Integrity Manifest (RIM) Information Model</title>
            <author>
              <organization>TCG</organization>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="AIK-Enrollment" target="https://www.trustedcomputinggroup.org/wp-content/uploads/IWG_CMC_Profile_Cert_Enrollment_v1_r7.pdf">
          <front>
            <title>A CMC Profile for AIK Certificate Enrollment</title>
            <author>
              <organization>TCG Infrastructure Working Group</organization>
            </author>
            <date year="2011"/>
          </front>
        </reference>
        <reference anchor="AIK-Credential" target="https://www.trustedcomputinggroup.org/wp-content/uploads/IWG-Credential_Profiles_V1_R1_14.pdf">
          <front>
            <title>TCG Credential Profile</title>
            <author>
              <organization>TCG Infrastructure Working Group</organization>
            </author>
            <date year="2007"/>
          </front>
        </reference>
        <reference anchor="REST" target="http://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf">
          <front>
            <title>Architectural Styles and the Design of Network-based Software Architectures</title>
            <author initials="R." surname="Fielding" fullname="Roy Fielding">
              <organization>University of California, Irvine</organization>
            </author>
            <date year="2000"/>
          </front>
          <seriesInfo name="Ph.D." value="Dissertation, University of California, Irvine"/>
        </reference>
        <reference anchor="IEEE802.1AR">
          <front>
            <title>802.1AR-2009 - IEEE Standard for Local and metropolitan area networks - Secure Device Identity</title>
            <author>
              <organization>IEEE Computer Society</organization>
            </author>
            <date year="2009"/>
          </front>
          <seriesInfo name="IEEE" value="Std 802.1AR"/>
        </reference>
        <reference anchor="IEEE1609">
          <front>
            <title>1609.4-2016 - IEEE Standard for Wireless Access in Vehicular Environments (WAVE) -- Multi-Channel Operation</title>
            <author>
              <organization>IEEE Computer Society</organization>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="IEEE" value="Std 1609.4"/>
        </reference>
      </references>
    </references>
    <section anchor="rest" numbered="true" toc="default">
      <name>REST Realization</name>
      <t>Each of the seven data items is defined as a media type (<xref target="iana" format="default"/>).
Representations of resources for each of these media types can be
retrieved from URIs that are defined by the respective servers <xref target="RFC8820" format="default"/>.
As can be derived from the URI, the actual retrieval is via one of the HTTPs
(<xref target="RFC7230" format="default"/>, <xref target="RFC7540" format="default"/>) or CoAP <xref target="RFC7252" format="default"/>.  How a client obtains
these URIs is dependent on the application; e.g., CoRE Web links <xref target="RFC6690" format="default"/>
can be used to obtain the relevant URIs from the self-description of a
server, or they could be prescribed by a RESTCONF data model <xref target="RFC8040" format="default"/>.</t>
    </section>
    <section anchor="snmp" numbered="true" toc="default">
      <name>SNMP Realization</name>
      <t>SNMPv3 (RFC 3411, <xref target="STD62" format="default"/>) is widely available on computers and also constrained devices.
To transport the TUDA information elements, an SNMP MIB is defined below which
encodes each of the seven TUDA information elements into a table.  Each row in a
table contains a single read-only columnar SNMP object of datatype OCTET-STRING.
The values of a set of rows in each table can be concatenated to reconstitute a
CBOR-encoded TUDA information element.  The Verifier can retrieve the values for
each CBOR fragment by using SNMP GetNext requests to "walk" each table and can
decode each of the CBOR-encoded data items based on the corresponding CDDL <xref target="RFC8610" format="default"/>
definition.</t>
      <t>Design Principles:</t>
      <ol spacing="normal" type="1"><li>Over time, TUDA attestation values age and should no longer be used.  Every
table in the TUDA MIB has a primary index with the value of a separate
scalar cycle counter object that disambiguates the transition from one
attestation cycle to the next.</li>
        <li>Over time, the measurement log information (for example) may grow
large. Therefore, read-only cycle counter scalar objects in all TUDA MIB object
groups facilitate more efficient access with SNMP GetNext requests.</li>
        <li>Notifications are supported by an SNMP trap definition with all of the cycle
counters as bindings, to alert a Verifier that a new attestation cycle has
occurred (e.g., synchronization data, measurement log, etc. have been updated
by adding new rows and possibly deleting old rows).</li>
      </ol>
      <section anchor="structure-of-tuda-mib" numbered="true" toc="default">
        <name>Structure of TUDA MIB</name>
        <t>The following table summarizes the object groups, tables and their indexes, and conformance requirements for the TUDA MIB:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Group/Table</th>
              <th align="left">Cycle</th>
              <th align="left">Instance</th>
              <th align="left">Fragment</th>
              <th align="left">Required</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">General</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">x</td>
            </tr>
            <tr>
              <td align="left">AIKCert</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">TSACert</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">SyncToken</td>
              <td align="left">x</td>
              <td align="left"> </td>
              <td align="left">x</td>
              <td align="left">x</td>
            </tr>
            <tr>
              <td align="left">Restrict</td>
              <td align="left">x</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">x</td>
            </tr>
            <tr>
              <td align="left">Measure</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left"> </td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">VerifyToken</td>
              <td align="left">x</td>
              <td align="left"> </td>
              <td align="left"> </td>
              <td align="left">x</td>
            </tr>
            <tr>
              <td align="left">SWIDTag</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left">x</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
        <section anchor="cycle-index" numbered="true" toc="default">
          <name>Cycle Index</name>
          <t>A tudaV1&lt;Group&gt;CycleIndex is the:</t>
          <ol spacing="normal" type="1"><li>first index of a row (element instance or element fragment) in the
tudaV1&lt;Group&gt;Table;</li>
            <li>identifier of an update cycle on the table, when rows were added and/or
deleted from the table (bounded by tudaV1&lt;Group&gt;Cycles); and</li>
            <li>binding in the tudaV1TrapV2Cycles notification for directed polling.</li>
          </ol>
        </section>
        <section anchor="instance-index" numbered="true" toc="default">
          <name>Instance Index</name>
          <t>A tudaV1&lt;Group&gt;InstanceIndex is the:</t>
          <ol spacing="normal" type="1"><li>second index of a row (element instance or element fragment) in the
tudaV1&lt;Group&gt;Table; except for</li>
            <li>a row in the tudaV1SyncTokenTable (that has only one instance per cycle).</li>
          </ol>
        </section>
        <section anchor="fragment-index" numbered="true" toc="default">
          <name>Fragment Index</name>
          <t>A tudaV1&lt;Group&gt;FragmentIndex is the:</t>
          <ol spacing="normal" type="1"><li>last index of a row (always an element fragment) in the
tudaV1&lt;Group&gt;Table; and</li>
            <li>accomodation for SNMP transport mapping restrictions for large string
elements that require fragmentation.</li>
          </ol>
        </section>
      </section>
      <section anchor="relationship-to-host-resources-mib" numbered="true" toc="default">
        <name>Relationship to Host Resources MIB</name>
        <t>The General group in the TUDA MIB is analogous to the System group in the
Host Resources MIB <xref target="RFC2790" format="default"/> and provides context information for the TUDA
attestation process.</t>
        <t>The Verify Token group in the TUDA MIB is analogous to the Device group in
the Host MIB and represents the verifiable state of a TPM device and its
associated system.</t>
        <t>The SWID Tag group (containing a Concise SWID reference hash profile <xref target="I-D.ietf-sacm-coswid" format="default"/>) in the TUDA MIB is analogous to the Software Installed and
Software Running groups in the Host Resources MIB <xref target="RFC2790" format="default"/>.</t>
      </section>
      <section anchor="relationship-to-entity-mib" numbered="true" toc="default">
        <name>Relationship to Entity MIB</name>
        <t>The General group in the TUDA MIB is analogous to the Entity General group in
the Entity MIB v4 <xref target="RFC6933" format="default"/> and provides context information for the TUDA
attestation process.</t>
        <t>The SWID Tag group in the TUDA MIB is analogous to the Entity Logical group
in the Entity MIB v4 <xref target="RFC6933" format="default"/>.</t>
      </section>
      <section anchor="relationship-to-other-mibs" numbered="true" toc="default">
        <name>Relationship to Other MIBs</name>
        <t>The General group in the TUDA MIB is analogous to the System group in MIB-II
<xref target="RFC1213" format="default"/> and the System group in the SNMPv2 MIB (RFC 3418, <xref target="STD62" format="default"/>) and provides
context information for the TUDA attestation process.</t>
      </section>
      <section anchor="definition-of-tuda-mib" numbered="true" toc="default">
        <name>Definition of TUDA MIB</name>
        <sourcecode type="SMIv2" markers="true"><![CDATA[
TUDA-V1-ATTESTATION-MIB DEFINITIONS ::= BEGIN

IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, Integer32, Counter32,
    enterprises, NOTIFICATION-TYPE
        FROM SNMPv2-SMI                 -- RFC 2578
    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
        FROM SNMPv2-CONF                -- RFC 2580
    SnmpAdminString
        FROM SNMP-FRAMEWORK-MIB;        -- RFC 3411

tudaV1MIB MODULE-IDENTITY
    LAST-UPDATED    "202101130000Z" --  13 January 2021
    ORGANIZATION
        "Fraunhofer SIT"
    CONTACT-INFO
        "Andreas Fuchs
        Fraunhofer Institute for Secure Information Technology
        Email: andreas.fuchs@sit.fraunhofer.de

        Henk Birkholz
        Fraunhofer Institute for Secure Information Technology
        Email: henk.birkholz@sit.fraunhofer.de

        Ira E McDonald
        High North Inc
        Email: blueroofmusic@gmail.com

        Carsten Bormann
        Universitaet Bremen TZI
        Email: cabo@tzi.org"

    DESCRIPTION
        "The MIB module for monitoring of time-based unidirectional
        attestation information from a network endpoint system,
        based on the Trusted Computing Group TPM 1.2 definition.

        Copyright (C) High North Inc (2021)."

    REVISION "202101130000Z" -- 13 January 2021
    DESCRIPTION
        "Twelfth version, published as draft-birkholz-rats-tuda-04."

    REVISION "202007130000Z" -- 13 July 2020
    DESCRIPTION
        "Eleventh version, published as draft-birkholz-rats-tuda-03."

    REVISION "202003090000Z" -- 09 March 2020
    DESCRIPTION
        "Tenth version, published as draft-birkholz-rats-tuda-02."

    REVISION "201909110000Z" -- 11 September 2019
    DESCRIPTION
        "Ninth version, published as draft-birkholz-rats-tuda-01."

    REVISION "201903120000Z" -- 12 March 2019
    DESCRIPTION
        "Eighth version, published as draft-birkholz-rats-tuda-00."

    REVISION "201805030000Z" -- 03 May 2018
    DESCRIPTION
        "Seventh version, published as draft-birkholz-i2nsf-tuda-03."

    REVISION "201805020000Z" -- 02 May 2018
    DESCRIPTION
        "Sixth version, published as draft-birkholz-i2nsf-tuda-02."

    REVISION "201710300000Z" -- 30 October 2017
    DESCRIPTION
        "Fifth version, published as draft-birkholz-i2nsf-tuda-01."

    REVISION "201701090000Z" -- 09 January 2017
    DESCRIPTION
        "Fourth version, published as draft-birkholz-i2nsf-tuda-00."

    REVISION "201607080000Z" -- 08 July 2016
    DESCRIPTION
        "Third version, published as draft-birkholz-tuda-02."

    REVISION "201603210000Z" -- 21 March 2016
    DESCRIPTION
        "Second version, published as draft-birkholz-tuda-01."

    REVISION "201510180000Z" -- 18 October 2015
    DESCRIPTION
        "Initial version, published as draft-birkholz-tuda-00."

        ::= { enterprises fraunhofersit(21616) mibs(1) tudaV1MIB(1) }

tudaV1MIBNotifications      OBJECT IDENTIFIER ::= { tudaV1MIB 0 }
tudaV1MIBObjects            OBJECT IDENTIFIER ::= { tudaV1MIB 1 }
tudaV1MIBConformance        OBJECT IDENTIFIER ::= { tudaV1MIB 2 }

--
--  General
--
tudaV1General           OBJECT IDENTIFIER ::= { tudaV1MIBObjects 1 }

tudaV1GeneralCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of TUDA update cycles that have occurred, i.e.,
        sum of all the individual group cycle counters.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1General 1 }

tudaV1GeneralVersionInfo OBJECT-TYPE
    SYNTAX      SnmpAdminString (SIZE(0..255))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Version information for TUDA MIB, e.g., specific release
        version of TPM 1.2 base specification and release version
        of TPM 1.2 errata specification and manufacturer and model
        TPM module itself."
    DEFVAL      { "" }
    ::= { tudaV1General 2 }

--
--  AIK Cert
--
tudaV1AIKCert           OBJECT IDENTIFIER ::= { tudaV1MIBObjects 2 }

tudaV1AIKCertCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of AIK Certificate chain update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1AIKCert 1 }

tudaV1AIKCertTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1AIKCertEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of fragments of AIK Certificate data."
    ::= { tudaV1AIKCert 2 }

tudaV1AIKCertEntry OBJECT-TYPE
    SYNTAX      TudaV1AIKCertEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one fragment of AIK Certificate data."
    INDEX       { tudaV1AIKCertCycleIndex,
                  tudaV1AIKCertInstanceIndex,
                  tudaV1AIKCertFragmentIndex }
    ::= { tudaV1AIKCertTable 1 }

TudaV1AIKCertEntry ::=
    SEQUENCE {
        tudaV1AIKCertCycleIndex         Integer32,
        tudaV1AIKCertInstanceIndex      Integer32,
        tudaV1AIKCertFragmentIndex      Integer32,
        tudaV1AIKCertData               OCTET STRING
    }

tudaV1AIKCertCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "High-order index of this AIK Certificate fragment.
        Index of an AIK Certificate chain update cycle that has
        occurred (bounded by the value of tudaV1AIKCertCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1AIKCertEntry 1 }

tudaV1AIKCertInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Middle index of this AIK Certificate fragment.
        Ordinal of this AIK Certificate in this chain, where the AIK
        Certificate itself has an ordinal of '1' and higher ordinals
        go *up* the certificate chain to the Root CA.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1AIKCertEntry 2 }

tudaV1AIKCertFragmentIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Low-order index of this AIK Certificate fragment.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1AIKCertEntry 3 }

tudaV1AIKCertData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A fragment of CBOR encoded AIK Certificate data."
    DEFVAL      { "" }
    ::= { tudaV1AIKCertEntry 4 }

--
--  TSA Cert
--
tudaV1TSACert           OBJECT IDENTIFIER ::= { tudaV1MIBObjects 3 }

tudaV1TSACertCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of TSA Certificate chain update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1TSACert 1 }

tudaV1TSACertTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1TSACertEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of fragments of TSA Certificate data."
    ::= { tudaV1TSACert 2 }

tudaV1TSACertEntry OBJECT-TYPE
    SYNTAX      TudaV1TSACertEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one fragment of TSA Certificate data."
    INDEX       { tudaV1TSACertCycleIndex,
                  tudaV1TSACertInstanceIndex,
                  tudaV1TSACertFragmentIndex }
    ::= { tudaV1TSACertTable 1 }

TudaV1TSACertEntry ::=
    SEQUENCE {
        tudaV1TSACertCycleIndex         Integer32,
        tudaV1TSACertInstanceIndex      Integer32,
        tudaV1TSACertFragmentIndex      Integer32,
        tudaV1TSACertData               OCTET STRING
    }

tudaV1TSACertCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "High-order index of this TSA Certificate fragment.
        Index of a TSA Certificate chain update cycle that has
        occurred (bounded by the value of tudaV1TSACertCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1TSACertEntry 1 }

tudaV1TSACertInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Middle index of this TSA Certificate fragment.
        Ordinal of this TSA Certificate in this chain, where the TSA
        Certificate itself has an ordinal of '1' and higher ordinals
        go *up* the certificate chain to the Root CA.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1TSACertEntry 2 }

tudaV1TSACertFragmentIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Low-order index of this TSA Certificate fragment.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1TSACertEntry 3 }

tudaV1TSACertData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A fragment of CBOR encoded TSA Certificate data."
    DEFVAL      { "" }
    ::= { tudaV1TSACertEntry 4 }

--
--  Sync Token
--
tudaV1SyncToken         OBJECT IDENTIFIER ::= { tudaV1MIBObjects 4 }

tudaV1SyncTokenCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Sync Token update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1SyncToken 1 }

tudaV1SyncTokenInstances OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Sync Token instance entries that have
        been recorded (some entries MAY have been pruned).

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1SyncToken 2 }

tudaV1SyncTokenTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1SyncTokenEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of fragments of Sync Token data."
    ::= { tudaV1SyncToken 3 }

tudaV1SyncTokenEntry OBJECT-TYPE
    SYNTAX      TudaV1SyncTokenEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one fragment of Sync Token data."
    INDEX       { tudaV1SyncTokenCycleIndex,
                  tudaV1SyncTokenInstanceIndex,
                  tudaV1SyncTokenFragmentIndex }
    ::= { tudaV1SyncTokenTable 1 }

TudaV1SyncTokenEntry ::=
    SEQUENCE {
        tudaV1SyncTokenCycleIndex       Integer32,
        tudaV1SyncTokenInstanceIndex    Integer32,
        tudaV1SyncTokenFragmentIndex    Integer32,
        tudaV1SyncTokenData             OCTET STRING
    }

tudaV1SyncTokenCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "High-order index of this Sync Token fragment.
        Index of a Sync Token update cycle that has
        occurred (bounded by the value of tudaV1SyncTokenCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SyncTokenEntry 1 }

tudaV1SyncTokenInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Middle index of this Sync Token fragment.
        Ordinal of this instance of Sync Token data
        (NOT bounded by the value of tudaV1SyncTokenInstances).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SyncTokenEntry 2 }

tudaV1SyncTokenFragmentIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Low-order index of this Sync Token fragment.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SyncTokenEntry 3 }

tudaV1SyncTokenData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A fragment of CBOR encoded Sync Token data."
    DEFVAL      { "" }
    ::= { tudaV1SyncTokenEntry 4 }

--
--  Restriction Info
--
tudaV1Restrict          OBJECT IDENTIFIER ::= { tudaV1MIBObjects 5 }

tudaV1RestrictCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Restriction Info update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1Restrict 1 }

tudaV1RestrictTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1RestrictEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of instances of Restriction Info data."
    ::= { tudaV1Restrict 2 }

tudaV1RestrictEntry OBJECT-TYPE
    SYNTAX      TudaV1RestrictEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one instance of Restriction Info data."
    INDEX       { tudaV1RestrictCycleIndex }
    ::= { tudaV1RestrictTable 1 }

TudaV1RestrictEntry ::=
    SEQUENCE {
        tudaV1RestrictCycleIndex        Integer32,
        tudaV1RestrictData              OCTET STRING
    }

tudaV1RestrictCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Index of this Restriction Info entry.
        Index of a Restriction Info update cycle that has
        occurred (bounded by the value of tudaV1RestrictCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1RestrictEntry 1 }


tudaV1RestrictData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "An instance of CBOR encoded Restriction Info data."
    DEFVAL      { "" }
    ::= { tudaV1RestrictEntry 2 }

--
--  Measurement Log
--
tudaV1Measure           OBJECT IDENTIFIER ::= { tudaV1MIBObjects 6 }

tudaV1MeasureCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Measurement Log update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1Measure 1 }

tudaV1MeasureInstances OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Measurement Log instance entries that have
        been recorded (some entries MAY have been pruned).

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1Measure 2 }

tudaV1MeasureTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1MeasureEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of instances of Measurement Log data."
    ::= { tudaV1Measure 3 }

tudaV1MeasureEntry OBJECT-TYPE
    SYNTAX      TudaV1MeasureEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one instance of Measurement Log data."
    INDEX       { tudaV1MeasureCycleIndex,
                  tudaV1MeasureInstanceIndex }
    ::= { tudaV1MeasureTable 1 }

TudaV1MeasureEntry ::=
    SEQUENCE {
        tudaV1MeasureCycleIndex         Integer32,
        tudaV1MeasureInstanceIndex      Integer32,
        tudaV1MeasureData               OCTET STRING
    }

tudaV1MeasureCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "High-order index of this Measurement Log entry.
        Index of a Measurement Log update cycle that has
        occurred (bounded by the value of tudaV1MeasureCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1MeasureEntry 1 }

tudaV1MeasureInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Low-order index of this Measurement Log entry.
        Ordinal of this instance of Measurement Log data
        (NOT bounded by the value of tudaV1MeasureInstances).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1MeasureEntry 2 }

tudaV1MeasureData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A instance of CBOR encoded Measurement Log data."
    DEFVAL      { "" }
    ::= { tudaV1MeasureEntry 3 }

--
--  Verify Token
--
tudaV1VerifyToken       OBJECT IDENTIFIER ::= { tudaV1MIBObjects 7 }

tudaV1VerifyTokenCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of Verify Token update cycles that have
        occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1VerifyToken 1 }

tudaV1VerifyTokenTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1VerifyTokenEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of instances of Verify Token data."
    ::= { tudaV1VerifyToken 2 }

tudaV1VerifyTokenEntry OBJECT-TYPE
    SYNTAX      TudaV1VerifyTokenEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one instance of Verify Token data."
    INDEX       { tudaV1VerifyTokenCycleIndex }
    ::= { tudaV1VerifyTokenTable 1 }

TudaV1VerifyTokenEntry ::=
    SEQUENCE {
        tudaV1VerifyTokenCycleIndex     Integer32,
        tudaV1VerifyTokenData           OCTET STRING
    }

tudaV1VerifyTokenCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Index of this instance of Verify Token data.
        Index of a Verify Token update cycle that has
        occurred (bounded by the value of tudaV1VerifyTokenCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1VerifyTokenEntry 1 }

tudaV1VerifyTokenData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A instance of CBOR encoded Verify Token data."
    DEFVAL      { "" }
    ::= { tudaV1VerifyTokenEntry 2 }

--
--  SWID Tag
--
tudaV1SWIDTag           OBJECT IDENTIFIER ::= { tudaV1MIBObjects 8 }

tudaV1SWIDTagCycles OBJECT-TYPE
    SYNTAX      Counter32
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "Count of SWID Tag update cycles that have occurred.

        DEFVAL intentionally omitted - counter object."
    ::= { tudaV1SWIDTag 1 }

tudaV1SWIDTagTable OBJECT-TYPE
    SYNTAX      SEQUENCE OF TudaV1SWIDTagEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "A table of fragments of SWID Tag data."
    ::= { tudaV1SWIDTag 2 }

tudaV1SWIDTagEntry OBJECT-TYPE
    SYNTAX      TudaV1SWIDTagEntry
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "An entry for one fragment of SWID Tag data."
    INDEX       { tudaV1SWIDTagCycleIndex,
                  tudaV1SWIDTagInstanceIndex,
                  tudaV1SWIDTagFragmentIndex }
    ::= { tudaV1SWIDTagTable 1 }

TudaV1SWIDTagEntry ::=
    SEQUENCE {
        tudaV1SWIDTagCycleIndex         Integer32,
        tudaV1SWIDTagInstanceIndex      Integer32,
        tudaV1SWIDTagFragmentIndex      Integer32,
        tudaV1SWIDTagData               OCTET STRING
    }

tudaV1SWIDTagCycleIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "High-order index of this SWID Tag fragment.
        Index of an SWID Tag update cycle that has
        occurred (bounded by the value of tudaV1SWIDTagCycles).

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SWIDTagEntry 1 }

tudaV1SWIDTagInstanceIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Middle index of this SWID Tag fragment.
        Ordinal of this SWID Tag instance in this update cycle.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SWIDTagEntry 2 }

tudaV1SWIDTagFragmentIndex OBJECT-TYPE
    SYNTAX      Integer32 (1..2147483647)
    MAX-ACCESS  not-accessible
    STATUS      current
    DESCRIPTION
        "Low-order index of this SWID Tag fragment.

        DEFVAL intentionally omitted - index object."
    ::= { tudaV1SWIDTagEntry 3 }

tudaV1SWIDTagData OBJECT-TYPE
    SYNTAX      OCTET STRING (SIZE(0..1024))
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "A fragment of CBOR encoded SWID Tag data."
    DEFVAL      { "" }
    ::= { tudaV1SWIDTagEntry 4 }

--
--  Trap Cycles
--
tudaV1TrapV2Cycles NOTIFICATION-TYPE
    OBJECTS {
        tudaV1GeneralCycles,
        tudaV1AIKCertCycles,
        tudaV1TSACertCycles,
        tudaV1SyncTokenCycles,
        tudaV1SyncTokenInstances,
        tudaV1RestrictCycles,
        tudaV1MeasureCycles,
        tudaV1MeasureInstances,
        tudaV1VerifyTokenCycles,
        tudaV1SWIDTagCycles
    }
    STATUS  current
    DESCRIPTION
        "This trap is sent when the value of any cycle or instance
        counter changes (i.e., one or more tables are updated).

        Note:  The value of sysUpTime in IETF MIB-II (RFC 1213) is
        always included in SNMPv2 traps, per RFC 3416."
    ::= { tudaV1MIBNotifications 1 }

--
--  Conformance Information
--
tudaV1Compliances           OBJECT IDENTIFIER
    ::= { tudaV1MIBConformance 1 }

tudaV1ObjectGroups          OBJECT IDENTIFIER
    ::= { tudaV1MIBConformance 2 }

tudaV1NotificationGroups    OBJECT IDENTIFIER
    ::= { tudaV1MIBConformance 3 }

--
--  Compliance Statements
--
tudaV1BasicCompliance MODULE-COMPLIANCE
    STATUS  current
    DESCRIPTION
        "An implementation that complies with this module MUST
        implement all of the objects defined in the mandatory
        group tudaV1BasicGroup."
    MODULE  -- this module
    MANDATORY-GROUPS { tudaV1BasicGroup }

    GROUP   tudaV1OptionalGroup
    DESCRIPTION
        "The optional TUDA MIB objects.
        An implementation MAY implement this group."

    GROUP   tudaV1TrapGroup
    DESCRIPTION
        "The TUDA MIB traps.
        An implementation SHOULD implement this group."
    ::= { tudaV1Compliances 1 }

--
--  Compliance Groups
--
tudaV1BasicGroup OBJECT-GROUP
    OBJECTS {
        tudaV1GeneralCycles,
        tudaV1GeneralVersionInfo,
        tudaV1SyncTokenCycles,
        tudaV1SyncTokenInstances,
        tudaV1SyncTokenData,
        tudaV1RestrictCycles,
        tudaV1RestrictData,
        tudaV1VerifyTokenCycles,
        tudaV1VerifyTokenData
    }
    STATUS  current
    DESCRIPTION
        "The basic mandatory TUDA MIB objects."
    ::= { tudaV1ObjectGroups 1 }

tudaV1OptionalGroup OBJECT-GROUP
    OBJECTS {
        tudaV1AIKCertCycles,
        tudaV1AIKCertData,
        tudaV1TSACertCycles,
        tudaV1TSACertData,
        tudaV1MeasureCycles,
        tudaV1MeasureInstances,
        tudaV1MeasureData,
        tudaV1SWIDTagCycles,
        tudaV1SWIDTagData
    }
    STATUS  current
    DESCRIPTION
        "The optional TUDA MIB objects."
    ::= { tudaV1ObjectGroups 2 }

tudaV1TrapGroup NOTIFICATION-GROUP
    NOTIFICATIONS { tudaV1TrapV2Cycles }
    STATUS      current
    DESCRIPTION
        "The recommended TUDA MIB traps - notifications."
    ::= { tudaV1NotificationGroups 1 }

END
]]></sourcecode>
      </section>
    </section>
    <section anchor="yang" numbered="true" toc="default">
      <name>YANG Realization</name>
      <sourcecode type="YANG" markers="true"><![CDATA[
module TUDA-V1-ATTESTATION-MIB {

  namespace "urn:ietf:params:xml:ns:yang:smiv2:TUDA-V1-ATTESTATION-MIB";
  prefix "tuda-v1";

  import SNMP-FRAMEWORK-MIB { prefix "snmp-framework"; }
  import yang-types         { prefix "yang"; }

  organization      
   "Fraunhofer SIT";

  contact           
   "Andreas Fuchs
    Fraunhofer Institute for Secure Information Technology
    Email: andreas.fuchs@sit.fraunhofer.de
    
    Henk Birkholz
    Fraunhofer Institute for Secure Information Technology
    Email: henk.birkholz@sit.fraunhofer.de
    
    Ira E McDonald
    High North Inc
    Email: blueroofmusic@gmail.com
    
    Carsten Bormann
    Universitaet Bremen TZI
    Email: cabo@tzi.org";

  description       
   "The MIB module for monitoring of time-based unidirectional
    attestation information from a network endpoint system,
    based on the Trusted Computing Group TPM 1.2 definition.
    
    Copyright (C) High North Inc (2021).";

  revision "2021-01-13" {
    description
     "Twelfth version, published as draft-birkholz-rats-tuda-04.";
    reference
     "draft-birkholz-rats-tuda-04";
  }
  revision "2020-07-13" {
    description
     "Eleventh version, published as draft-birkholz-rats-tuda-03.";
    reference
     "draft-birkholz-rats-tuda-03";
  }
  revision "2020-03-09" {
    description
     "Tenth version, published as draft-birkholz-rats-tuda-02.";
    reference
     "draft-birkholz-rats-tuda-02";
  }
  revision "2019-09-11" {
    description
     "Ninth version, published as draft-birkholz-rats-tuda-01.";
    reference
     "draft-birkholz-rats-tuda-01";
  }
  revision "2019-03-12" {
    description
     "Eighth version, published as draft-birkholz-rats-tuda-00.";
    reference
     "draft-birkholz-rats-tuda-00";
  }
  revision "2018-05-03" {
    description
     "Seventh version, published as draft-birkholz-i2nsf-tuda-03.";
    reference
     "draft-birkholz-i2nsf-tuda-03";
  }
  revision "2018-05-02" {
    description
     "Sixth version, published as draft-birkholz-i2nsf-tuda-02.";
    reference
     "draft-birkholz-i2nsf-tuda-02";
  }
  revision "2017-10-30" {
    description
     "Fifth version, published as draft-birkholz-i2nsf-tuda-01.";
    reference
     "draft-birkholz-i2nsf-tuda-01";
  }
  revision "2017-01-09" {
    description     
     "Fourth version, published as draft-birkholz-i2nsf-tuda-00.";
    reference
     "draft-birkholz-i2nsf-tuda-00";
  }
  revision "2016-07-08" {
    description     
     "Third version, published as draft-birkholz-tuda-02.";
    reference
     "draft-birkholz-tuda-02";
  }
  revision "2016-03-21" {
    description     
     "Second version, published as draft-birkholz-tuda-01.";
    reference
     "draft-birkholz-tuda-01";
  }
  revision "2015-10-18" {
    description     
     "Initial version, published as draft-birkholz-tuda-00.";
    reference
     "draft-birkholz-tuda-00";
  }

  container tudaV1General {
  description
    "TBD";

    leaf tudaV1GeneralCycles {
      type yang:counter32;
      config false;
      description   
       "Count of TUDA update cycles that have occurred, i.e.,
        sum of all the individual group cycle counters.
        
        DEFVAL intentionally omitted - counter object.";
    }

    leaf tudaV1GeneralVersionInfo {
      type snmp-framework:SnmpAdminString {
        length "0..255";
      }
      config false;
      description   
       "Version information for TUDA MIB, e.g., specific release
        version of TPM 1.2 base specification and release version
        of TPM 1.2 errata specification and manufacturer and model
        TPM module itself.";
    }
  }

  container tudaV1AIKCert {
  description
    "TBD";

    leaf tudaV1AIKCertCycles {
      type yang:counter32;
      config false;
      description   
       "Count of AIK Certificate chain update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }

    /* XXX table comments here XXX */

    list tudaV1AIKCertEntry {

      key "tudaV1AIKCertCycleIndex tudaV1AIKCertInstanceIndex 
           tudaV1AIKCertFragmentIndex";
        config false;      
      description   
       "An entry for one fragment of AIK Certificate data.";


      leaf tudaV1AIKCertCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "High-order index of this AIK Certificate fragment.
          Index of an AIK Certificate chain update cycle that has
          occurred (bounded by the value of tudaV1AIKCertCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1AIKCertInstanceIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Middle index of this AIK Certificate fragment.
          Ordinal of this AIK Certificate in this chain, where the AIK
          Certificate itself has an ordinal of '1' and higher ordinals
          go *up* the certificate chain to the Root CA.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1AIKCertFragmentIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Low-order index of this AIK Certificate fragment.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1AIKCertData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A fragment of CBOR encoded AIK Certificate data.";
      }
    }
  }

  container tudaV1TSACert {
  description
    "TBD";

    leaf tudaV1TSACertCycles {
      type yang:counter32;
      config false;
      description   
       "Count of TSA Certificate chain update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }


    /* XXX table comments here XXX */

    list tudaV1TSACertEntry {

      key "tudaV1TSACertCycleIndex tudaV1TSACertInstanceIndex 
           tudaV1TSACertFragmentIndex";
      config false;
      description   
       "An entry for one fragment of TSA Certificate data.";


      leaf tudaV1TSACertCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "High-order index of this TSA Certificate fragment.
          Index of a TSA Certificate chain update cycle that has
          occurred (bounded by the value of tudaV1TSACertCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1TSACertInstanceIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Middle index of this TSA Certificate fragment.
          Ordinal of this TSA Certificate in this chain, where the TSA
          Certificate itself has an ordinal of '1' and higher ordinals
          go *up* the certificate chain to the Root CA.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1TSACertFragmentIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Low-order index of this TSA Certificate fragment.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1TSACertData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A fragment of CBOR encoded TSA Certificate data.";
      }
    }
  }

  container tudaV1SyncToken {
  description
    "TBD";

    leaf tudaV1SyncTokenCycles {
      type yang:counter32;
      config false;
      description   
       "Count of Sync Token update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }

    leaf tudaV1SyncTokenInstances {
      type yang:counter32;
      config false;
      description   
       "Count of Sync Token instance entries that have
        been recorded (some entries MAY have been pruned).
        
        DEFVAL intentionally omitted - counter object.";
    }

    list tudaV1SyncTokenEntry {

      key "tudaV1SyncTokenCycleIndex 
           tudaV1SyncTokenInstanceIndex 
           tudaV1SyncTokenFragmentIndex";
      config false;
      description   
       "An entry for one fragment of Sync Token data.";


      leaf tudaV1SyncTokenCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "High-order index of this Sync Token fragment.
          Index of a Sync Token update cycle that has
          occurred (bounded by the value of tudaV1SyncTokenCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SyncTokenInstanceIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Middle index of this Sync Token fragment.
          Ordinal of this instance of Sync Token data
          (NOT bounded by the value of tudaV1SyncTokenInstances).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SyncTokenFragmentIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Low-order index of this Sync Token fragment.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SyncTokenData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A fragment of CBOR encoded Sync Token data.";
      }
    }
  }

  container tudaV1Restrict {
  description
    "TBD";

    leaf tudaV1RestrictCycles {
      type yang:counter32;
      config false;
      description   
       "Count of Restriction Info update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }


    /* XXX table comments here XXX */

    list tudaV1RestrictEntry {

      key "tudaV1RestrictCycleIndex";
      config false;   
      description   
       "An entry for one instance of Restriction Info data.";


      leaf tudaV1RestrictCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Index of this Restriction Info entry.
          Index of a Restriction Info update cycle that has
          occurred (bounded by the value of tudaV1RestrictCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1RestrictData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "An instance of CBOR encoded Restriction Info data.";
      }
    }
  }

  container tudaV1Measure {
  description
    "TBD";

    leaf tudaV1MeasureCycles {
      type yang:counter32;
      config false;
      description   
       "Count of Measurement Log update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }

    leaf tudaV1MeasureInstances {
      type yang:counter32;
      config false;
      description   
       "Count of Measurement Log instance entries that have
        been recorded (some entries MAY have been pruned).
        
        DEFVAL intentionally omitted - counter object.";
    }

    list tudaV1MeasureEntry {

      key "tudaV1MeasureCycleIndex tudaV1MeasureInstanceIndex";
      config false;
      description   
       "An entry for one instance of Measurement Log data.";


      leaf tudaV1MeasureCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "High-order index of this Measurement Log entry.
          Index of a Measurement Log update cycle that has
          occurred (bounded by the value of tudaV1MeasureCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1MeasureInstanceIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Low-order index of this Measurement Log entry.
          Ordinal of this instance of Measurement Log data
          (NOT bounded by the value of tudaV1MeasureInstances).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1MeasureData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A instance of CBOR encoded Measurement Log data.";
      }
    }
  }

  container tudaV1VerifyToken {
  description
    "TBD";

    leaf tudaV1VerifyTokenCycles {
      type yang:counter32;
      config false;
      description   
       "Count of Verify Token update cycles that have 
        occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }


    /* XXX table comments here XXX */

    list tudaV1VerifyTokenEntry {

      key "tudaV1VerifyTokenCycleIndex";
      config false;
      description   
       "An entry for one instance of Verify Token data.";


      leaf tudaV1VerifyTokenCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Index of this instance of Verify Token data.
          Index of a Verify Token update cycle that has
          occurred (bounded by the value of tudaV1VerifyTokenCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1VerifyTokenData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A instanc-V1-ATTESTATION-MIB.yang
      }
    }
  }

  container tudaV1SWIDTag {
  description
    "see CoSWID and YANG SIWD module for now"

    leaf tudaV1SWIDTagCycles {
      type yang:counter32;
      config false;
      description   
       "Count of SWID Tag update cycles that have occurred.
        
        DEFVAL intentionally omitted - counter object.";
    }

    list tudaV1SWIDTagEntry {

      key "tudaV1SWIDTagCycleIndex tudaV1SWIDTagInstanceIndex 
           tudaV1SWIDTagFragmentIndex";
      config false;
      description   
       "An entry for one fragment of SWID Tag data.";


      leaf tudaV1SWIDTagCycleIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "High-order index of this SWID Tag fragment.
          Index of an SWID Tag update cycle that has
          occurred (bounded by the value of tudaV1SWIDTagCycles).
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SWIDTagInstanceIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Middle index of this SWID Tag fragment.
          Ordinal of this SWID Tag instance in this update cycle.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SWIDTagFragmentIndex {
        type int32 {
          range "1..2147483647";
        }
        config false;
        description 
         "Low-order index of this SWID Tag fragment.
          
          DEFVAL intentionally omitted - index object.";
      }

      leaf tudaV1SWIDTagData {
        type binary {
          length "0..1024";
        }
        config false;
        description 
         "A fragment of CBOR encoded SWID Tag data.";
      }
    }
  }

  notification tudaV1TrapV2Cycles {
    description     
     "This trap is sent when the value of any cycle or instance
      counter changes (i.e., one or more tables are updated).
      
      Note:  The value of sysUpTime in IETF MIB-II (RFC 1213) is
      always included in SNMPv2 traps, per RFC 3416.";

    container tudaV1TrapV2Cycles-tudaV1GeneralCycles {
      description
       "TPD"
      leaf tudaV1GeneralCycles {
        type yang:counter32;
        description 
         "Count of TUDA update cycles that have occurred, i.e.,
          sum of all the individual group cycle counters.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1AIKCertCycles {
      description
       "TPD"
      leaf tudaV1AIKCertCycles {
        type yang:counter32;
        description 
         "Count of AIK Certificate chain update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1TSACertCycles {
      description
       "TPD"
      leaf tudaV1TSACertCycles {
        type yang:counter32;
        description 
         "Count of TSA Certificate chain update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1SyncTokenCycles {
      description
       "TPD"
      leaf tudaV1SyncTokenCycles {
        type yang:counter32;
        description 
         "Count of Sync Token update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1SyncTokenInstances {
      description
       "TPD"
      leaf tudaV1SyncTokenInstances {
        type yang:counter32;
        description 
         "Count of Sync Token instance entries that have
          been recorded (some entries MAY have been pruned).
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1RestrictCycles {
      description
       "TPD"
      leaf tudaV1RestrictCycles {
        type yang:counter32;
        description 
         "Count of Restriction Info update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1MeasureCycles {
      description
       "TPD"
      leaf tudaV1MeasureCycles {
        type yang:counter32;
        description 
         "Count of Measurement Log update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1MeasureInstances {
      description
       "TPD"
      leaf tudaV1MeasureInstances {
        type yang:counter32;
        description 
         "Count of Measurement Log instance entries that have
          been recorded (some entries MAY have been pruned).
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1VerifyTokenCycles {
      description
       "TPD"
      leaf tudaV1VerifyTokenCycles {
        type yang:counter32;
        description 
         "Count of Verify Token update cycles that have 
          occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

    container tudaV1TrapV2Cycles-tudaV1SWIDTagCycles {
      description
       "TPD"
      leaf tudaV1SWIDTagCycles {
        type yang:counter32;
        description 
         "Count of SWID Tag update cycles that have occurred.
          
          DEFVAL intentionally omitted - counter object.";
      }
    }

  }
}
]]></sourcecode>
    </section>
    <section anchor="realization-with-tpm-functions" numbered="true" toc="default">
      <name>Realization with TPM functions</name>
      <section anchor="tpm-functions" numbered="true" toc="default">
        <name>TPM Functions</name>
        <t>The following TPM structures, resources and functions are used within this approach.
They are based upon the TPM specifications <xref target="TPM12" format="default"/> and <xref target="TPM2" format="default"/>.</t>
        <section anchor="tick-session-and-tick-stamp" numbered="true" toc="default">
          <name>Tick-Session and Tick-Stamp</name>
          <t>On every boot, the TPM initializes a new Tick-Session. Such a tick-session consists
of a nonce that is randomly created upon each boot to identify the current boot-cycle
-- the phase between boot-time of the device and shutdown or power-off --
and prevent replaying of old tick-session values. The TPM uses its internal entropy
source that guarantees virtually no collisions of the nonce values between two of such
boot cycles.</t>
          <t>It further includes an internal timer that is being initialize to Zero on each
reboot. From this point on, the TPM increments this timer continuously based upon its
internal secure clocking information until the device is powered down or set to sleep.
By its hardware design, the TPM will detect attacks on any of those properties.</t>
          <t>The TPM offers the function TPM_TickStampBlob, which allows the TPM to create a signature
over the current tick-session and two externally provided input values. These input values
are designed to serve as a nonce and as payload data to be included in a TickStampBlob:
TickstampBlob := sig(TPM-key, currentTicks || nonce || externalData).</t>
          <t>As a result,
one is able to proof that at a certain point in time (relative to the tick-session)
after the provisioning of a certain nonce, some certain externalData was known and
provided to the TPM. If an approach however requires no input values or only one
input value (such as the use in this document) the input values can be set to well-known
value. The convention used within TCG specifications and within this document is to
use twenty bytes of zero h'0000000000000000000000000000000000000000' as well-known
value.</t>
        </section>
        <section anchor="platform-configuration-registers-pcrs" numbered="true" toc="default">
          <name>Platform Configuration Registers (PCRs)</name>
          <t>The TPM is a secure cryptoprocessor that provides the ability to store measurements
and metrics about an endpoint's configuration and state in a secure, tamper-proof
environment. Each of these security relevant metrics can be stored in a volatile
Platform Configuration Register (PCR) inside the TPM. These measurements can be
conducted at any point in time, ranging from an initial BIOS boot-up sequence to
measurements taken after hundreds of hours of uptime.</t>
          <t>The initial measurement is triggered by the Platforms so-called pre-BIOS or ROM-code.
It will conduct a measurement of the first loadable pieces of code; i.e.\ the BIOS.
The BIOS will in turn measure its Option ROMs and the BootLoader, which measures the
OS-Kernel, which in turn measures its applications. This describes a so-called measurement
chain. This typically gets recorded in a so-called measurement log, such that the
values of the PCRs can be reconstructed from the individual measurements for validation.</t>
          <t>Via its PCRs, a TPM provides a Root of Trust that can, for example, support secure
boot or remote attestation. The attestation of an endpoint's identity or security
posture is based on the content of an TPM's PCRs (platform integrity measurements).</t>
        </section>
        <section anchor="pcr-restricted-keys" numbered="true" toc="default">
          <name>PCR restricted Keys</name>
          <t>Every key inside the TPM can be restricted in such a way that it can only be used
if a certain set of PCRs are in a predetermined state. For key creation the desired
state for PCRs are defined via the PCRInfo field inside the keyInfo parameter.
Whenever an operation using this key is performed, the TPM first checks whether
the PCRs are in the correct state. Otherwise the operation is denied by the TPM.</t>
        </section>
        <section anchor="certifyinfo" numbered="true" toc="default">
          <name>CertifyInfo</name>
          <t>The TPM offers a command to certify the properties of a key by means of a signature
using another key. This includes especially the keyInfo which in turn includes the PCRInfo information
used during key creation. This way, a third party can be assured about the fact that
a key is only usable if the PCRs are in a certain state.</t>
        </section>
      </section>
      <section anchor="tpm12" numbered="true" toc="default">
        <name>IE Generation Procedures for TPM 1.2</name>
        <section anchor="aik" numbered="true" toc="default">
          <name>AIK and AIK Certificate</name>
          <t>Attestations are based upon a cryptographic signature performed by the TPM using
a so-called Attestation Identity Key (AIK). An AIK has the properties that it cannot
be exported from a TPM and is used for attestations. Trust in the AIK is established
by an X.509 Certificate emitted by a Certificate Authority. The AIK certificate is
either provided directly or via a so-called PrivacyCA <xref target="AIK-Enrollment" format="default"/>.</t>
          <t>This element consists of the AIK certificate that includes the AIK's public key used
during verification as well as the certificate chain up to the Root CA for validation
of the AIK certificate itself.</t>
          <figure anchor="cert-token">
            <name>TUDA-Cert element in CDDL</name>
            <sourcecode type="CDDL"><![CDATA[
TUDA-Cert = [AIK-Cert, TSA-Cert]; maybe split into two for SNMP
AIK-Cert = Cert
TSA-Cert = Cert
]]></sourcecode>
          </figure>
          <t>The TSA-Cert is a standard certificate of the TSA.</t>
          <t>The AIK-Cert may be provisioned in a secure environment using standard means or
it may follow the PrivacyCA protocols. <xref target="make-cert-token" format="default"/> gives a rough sketch
of this protocol. See <xref target="AIK-Enrollment" format="default"/> for more information.</t>
          <t>The X.509 Certificate is built from the AIK public key and the
corresponding PKCS #7 certificate chain, as shown in
<xref target="make-cert-token" format="default"/>.</t>
          <t>Required TPM functions:</t>
          <figure anchor="make-cert-token">
            <name>Creating the TUDA-Cert element</name>
            <sourcecode type="pseudocode"><![CDATA[
| create_AIK_Cert(...) = {
|   AIK = TPM_MakeIdentity()
|   IdReq = CollateIdentityRequest(AIK,EK)
|   IdRes = Call(AIK-CA, IdReq)
|   AIK-Cert = TPM_ActivateIdentity(AIK, IdRes)
| }
|
| /* Alternative */
|
| create_AIK_Cert(...) = {
|   AIK = TPM_CreateWrapKey(Identity)
|   AIK-Cert = Call(AIK-CA, AIK.pubkey)
| }
]]></sourcecode>
          </figure>
        </section>
        <section anchor="synchronization-token" numbered="true" toc="default">
          <name>Synchronization Token</name>
          <t>The reference for Attestations are the Tick-Sessions of the TPM. In order to put Attestations
into relation with a Real Time Clock (RTC), it is necessary to provide a cryptographic
synchronization between the tick session and the RTC. To do so, a synchronization
protocol is run with a Time Stamp Authority (TSA) that consists of three steps:</t>
          <ul spacing="normal">
            <li>The TPM creates a TickStampBlob using the AIK</li>
            <li>This TickStampBlob is used as nonce to the Timestamp of the TSA</li>
            <li>Another TickStampBlob with the AIK is created using the TSA's Timestamp a nonce</li>
          </ul>
          <t>The first TickStampBlob is called "left" and the second "right" in a reference to
their position on a time-axis.</t>
          <t>These three elements, with the TSA's certificate factored out, form
the synchronization token</t>
          <figure anchor="sync-token">
            <name>TUDA-Sync element in CDDL</name>
            <sourcecode type="CDDL"><![CDATA[
TUDA-Synctoken = [
  left: TickStampBlob-Output,
  timestamp: TimeStampToken,
  right: TickStampBlob-Output,
]

TimeStampToken = bytes ; RFC 3161

TickStampBlob-Output = [
  currentTicks: TPM-CURRENT-TICKS,
  sig: bytes,
]

TPM-CURRENT-TICKS = [
  currentTicks: uint
  ? (
    tickRate: uint
    tickNonce: TPM-NONCE
  )
]
; Note that TickStampBlob-Output "right" can omit the values for
;   tickRate and tickNonce since they are the same as in "left"

TPM-NONCE = bytes .size 20
]]></sourcecode>
          </figure>
          <t>Required TPM functions:</t>
          <!-- TPM_TickStampBlob: -->
<!-- : explain various inputs and applications -->

<figure anchor="make-sync-token">
            <name>Creating the Sync-Token element</name>
            <sourcecode type="pseudocode"><![CDATA[
| dummyDigest = h'0000000000000000000000000000000000000000'
| dummyNonce = dummyDigest
|
| create_sync_token(AIKHandle, TSA) = {
|   ts_left = TPM_TickStampBlob(
|       keyHandle = AIK_Handle,      /*TPM_KEY_HANDLE*/
|       antiReplay = dummyNonce,     /*TPM_NONCE*/
|       digestToStamp = dummyDigest  /*TPM_DIGEST*/)
|
|   ts = TSA_Timestamp(TSA, nonce = hash(ts_left))
|
|   ts_right = TPM_TickStampBlob(
|       keyHandle = AIK_Handle,      /*TPM_KEY_HANDLE*/
|       antiReplay = dummyNonce,     /*TPM_NONCE*/
|       digestToStamp = hash(ts))    /*TPM_DIGEST*/
|
|   TUDA-SyncToken = [[ts_left.ticks, ts_left.sig], ts,
|                     [ts_right.ticks.currentTicks, ts_right.sig]]
|   /* Note: skip the nonce and tickRate field for ts_right.ticks */
| }

]]></sourcecode>
          </figure>
        </section>
        <section anchor="restrictioninfo" numbered="true" toc="default">
          <name>RestrictionInfo</name>
          <t>The attestation relies on the capability of the TPM to operate on restricted keys.
Whenever the PCR values for the machine to be attested change, a new restricted key
is created that can only be operated as long as the PCRs remain in their current state.</t>
          <t>In order to prove to the Verifier that this restricted temporary key actually has
these properties and also to provide the PCR value that it is restricted, the TPM
command TPM_CertifyInfo is used. It creates a signed certificate using the AIK about
the newly created restricted key.</t>
          <t>This token is formed from the list of:</t>
          <ul spacing="normal">
            <li>PCR list,</li>
            <li>the newly created restricted public key, and</li>
            <li>the certificate.</li>
          </ul>
          <figure anchor="key-token">
            <name>TUDA-Key element in CDDL</name>
            <sourcecode type="CDDL"><![CDATA[
TUDA-RestrictionInfo = [Composite,
                        restrictedKey_Pub: Pubkey,
                        CertifyInfo]

PCRSelection = bytes .size (2..4) ; used as bit string

Composite = [
  bitmask: PCRSelection,
  values: [*PCR-Hash],
]

Pubkey = bytes ; may be extended to COSE pubkeys

CertifyInfo = [
  TPM-CERTIFY-INFO,
  sig: bytes,
]

TPM-CERTIFY-INFO = [
  ; we don't encode TPM-STRUCT-VER:
  ; these are 4 bytes always equal to h'01010000'
  keyUsage: uint, ; 4byte? 2byte?
  keyFlags: bytes .size 4, ; 4byte
  authDataUsage: uint, ; 1byte (enum)
  algorithmParms: TPM-KEY-PARMS,
  pubkeyDigest: Hash,
  ; we don't encode TPM-NONCE data, which is 20 bytes, all zero
  parentPCRStatus: bool,
  ; no need to encode pcrinfosize
  pcrinfo: TPM-PCR-INFO,        ; we have exactly one
]

TPM-PCR-INFO = [
    pcrSelection: PCRSelection; /* TPM_PCR_SELECTION */
    digestAtRelease: PCR-Hash;  /* TPM_COMPOSITE_HASH */
    digestAtCreation: PCR-Hash; /* TPM_COMPOSITE_HASH */
]

TPM-KEY-PARMS = [
  ; algorithmID: uint, ; <= 4 bytes -- not encoded, constant for TPM1.2
  encScheme: uint, ; <= 2 bytes
  sigScheme: uint, ; <= 2 bytes
  parms: TPM-RSA-KEY-PARMS,
]

TPM-RSA-KEY-PARMS = [
  ; "size of the RSA key in bits":
  keyLength: uint
  ; "number of prime factors used by this RSA key":
  numPrimes: uint
  ; "This SHALL be the size of the exponent":
  exponentSize: null / uint / biguint
  ; "If the key is using the default exponent then the exponentSize
  ; MUST be 0" -> we represent this case as null
]

]]></sourcecode>
          </figure>
          <t>Required TPM functions:</t>
          <figure anchor="make-pubkey">
            <name>Creating the pubkey</name>
            <sourcecode type="pseudocode"><![CDATA[
| dummyDigest = h'0000000000000000000000000000000000000000'
| dummyNonce = dummyDigest
|
| create_Composite
|
| create_restrictedKey_Pub(pcrsel) = {
|   PCRInfo = {pcrSelection = pcrsel,
|              digestAtRelease = hash(currentValues(pcrSelection))
|              digestAtCreation = dummyDigest}
|   / * PCRInfo is a TPM_PCR_INFO and thus also a TPM_KEY */
|
|   wk = TPM_CreateWrapKey(keyInfo = PCRInfo)
|   wk.keyInfo.pubKey
| }
|
| create_TPM-Certify-Info = {
|   CertifyInfo = TPM_CertifyKey(
|       certHandle = AIK,          /* TPM_KEY_HANDLE */
|       keyHandle = wk,            /* TPM_KEY_HANDLE */
|       antiReply = dummyNonce)    /* TPM_NONCE */
|
|   CertifyInfo.strip()
|   /* Remove those values that are not needed */
| }
]]></sourcecode>
          </figure>
        </section>
        <section anchor="mlog" numbered="true" toc="default">
          <name>Measurement Log</name>
          <t>Similarly to regular attestations, the Verifier needs a way to reconstruct the PCRs'
values in order to estimate the trustworthiness of the device. As such, a list of
those elements that were extended into the PCRs is reported. Note though that for
certain environments, this step may be optional if a list of valid PCR configurations
exists and no measurement log is required.</t>
          <sourcecode type="CDDL"><![CDATA[
TUDA-Measurement-Log = [*PCR-Event]
PCR-Event = [
  type: PCR-Event-Type,
  pcr: uint,
  template-hash: PCR-Hash,
  filedata-hash: tagged-hash,
  pathname: text; called filename-hint in ima (non-ng)
]

PCR-Event-Type = &(
  bios: 0
  ima: 1
  ima-ng: 2
)

; might want to make use of COSE registry here
; however, that might never define a value for sha1
tagged-hash /= [sha1: 0, bytes .size 20]
tagged-hash /= [sha256: 1, bytes .size 32]
]]></sourcecode>
        </section>
        <section anchor="impa" numbered="true" toc="default">
          <name>Implicit Attestation</name>
          <t>The actual attestation is then based upon a TickStampBlob using the restricted
temporary key that was certified in the steps above. The TPM-Tickstamp is executed
and thereby provides evidence that at this point in time (with respect to the TPM
internal tick-session) a certain configuration existed (namely the PCR values associated
with the restricted key). Together with the synchronization token this tick-related
timing can then be related to the real-time clock.</t>
          <t>This element consists only of the TPM_TickStampBlock with no nonce.</t>
          <figure anchor="verify-token">
            <name>TUDA-Verify element in CDDL</name>
            <sourcecode type="CDDL"><![CDATA[
TUDA-Verifytoken = TickStampBlob-Output
]]></sourcecode>
          </figure>
          <t>Required TPM functions:</t>
          <figure anchor="make-verifytoken">
            <name>Creating the Verify Token</name>
            <sourcecode type="pseudocode"><![CDATA[
| imp_att = TPM_TickStampBlob(
|     keyHandle = restrictedKey_Handle,     /*TPM_KEY_HANDLE*/
|     antiReplay = dummyNonce,              /*TPM_NONCE*/
|     digestToStamp = dummyDigest)          /*TPM_DIGEST*/
|
| VerifyToken = imp_att
]]></sourcecode>
          </figure>
        </section>
        <section anchor="attestation-verification-approach" numbered="true" toc="default">
          <name>Attestation Verification Approach</name>
          <t>The seven TUDA information elements transport the essential content that is required to enable
verification of the attestation statement at the Verifier. The following listings illustrate
the verification algorithm to be used at the Verifier in
pseudocode. The pseudocode provided covers the entire verification
task.
If only a subset of TUDA elements changed (see <xref target="updatecycles" format="default"/>), only
the corresponding code listings need to be re-executed.</t>
          <figure anchor="verify-Certs">
            <name>Verification of Certificates</name>
            <sourcecode type="pseudocode"><![CDATA[
| TSA_pub = verifyCert(TSA-CA, Cert.TSA-Cert)
| AIK_pub = verifyCert(AIK-CA, Cert.AIK-Cert)
]]></sourcecode>
          </figure>
          <figure anchor="verify-sync">
            <name>Verification of Synchronization Token</name>
            <sourcecode type="pseudocode"><![CDATA[
| ts_left = Synctoken.left
| ts_right = Synctoken.right
|
| /* Reconstruct ts_right's omitted values; Alternatively assert == */
| ts_right.currentTicks.tickRate = ts_left.currentTicks.tickRate
| ts_right.currentTicks.tickNonce = ts_left.currentTicks.tickNonce
|
| ticks_left = ts_left.currentTicks
| ticks_right = ts_right.currentTicks
|
| /* Verify Signatures */
| verifySig(AIK_pub, dummyNonce || dummyDigest || ticks_left)
| verifySig(TSA_pub, hash(ts_left) || timestamp.time)
| verifySig(AIK_pub, dummyNonce || hash(timestamp) || ticks_right)
|
| delta_left = timestamp.time -
|     ticks_left.currentTicks * ticks_left.tickRate / 1000
|
| delta_right = timestamp.time -
|     ticks_right.currentTicks * ticks_right.tickRate / 1000
]]></sourcecode>
          </figure>
          <figure anchor="verify-restrictioninfo">
            <name>Verification of Restriction Info</name>
            <sourcecode type="pseudocode"><![CDATA[
| compositeHash = hash_init()
| for value in Composite.values:
|     hash_update(compositeHash, value)
| compositeHash = hash_finish(compositeHash)
|
| certInfo = reconstruct_static(TPM-CERTIFY-INFO)
|
| assert(Composite.bitmask == ExpectedPCRBitmask)
| assert(certInfo.pcrinfo.PCRSelection == Composite.bitmask)
| assert(certInfo.pcrinfo.digestAtRelease == compositeHash)
| assert(certInfo.pubkeyDigest == hash(restrictedKey_Pub))
|
| verifySig(AIK_pub, dummyNonce || certInfo)
]]></sourcecode>
          </figure>
          <figure anchor="verify-measurementlog">
            <name>Verification of Measurement Log</name>
            <sourcecode type="pseudocode"><![CDATA[
| for event in Measurement-Log:
|     if event.pcr not in ExpectedPCRBitmask:
|         continue
|     if event.type == BIOS:
|         assert_whitelist-bios(event.pcr, event.template-hash)
|     if event.type == ima:
|         assert(event.pcr == 10)
|         assert_whitelist(event.pathname, event.filedata-hash)
|         assert(event.template-hash ==
|                hash(event.pathname || event.filedata-hash))
|     if event.type == ima-ng:
|         assert(event.pcr == 10)
|         assert_whitelist-ng(event.pathname, event.filedata-hash)
|         assert(event.template-hash ==
|                hash(event.pathname || event.filedata-hash))
|
|     virtPCR[event.pcr] = hash_extend(virtPCR[event.pcr],
|                                      event.template-hash)
|
| for pcr in ExpectedPCRBitmask:
|     assert(virtPCR[pcr] == Composite.values[i++]
]]></sourcecode>
          </figure>
          <figure anchor="verify-attestation">
            <name>Verification of Attestation Token</name>
            <sourcecode type="pseudocode"><![CDATA[
| ts = Verifytoken
|
| /* Reconstruct ts's omitted values; Alternatively assert == */
| ts.currentTicks.tickRate = ts_left.currentTicks.tickRate
| ts.currentTicks.tickNonce = ts_left.currentTicks.tickNonce
|
| verifySig(restrictedKey_pub, dummyNonce || dummyDigest || ts)
|
| ticks = ts.currentTicks
|
| time_left = delta_right + ticks.currentTicks * ticks.tickRate / 1000
| time_right = delta_left + ticks.currentTicks * ticks.tickRate / 1000
|
| [time_left, time_right]
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="tpm2" numbered="true" toc="default">
        <name>IE Generation Procedures for TPM 2.0</name>
        <t>The pseudocode below includes general operations that are conducted as specific TPM commands:</t>
        <ul spacing="normal">
          <li>hash() : description TBD</li>
          <li>sig() : description TBD</li>
          <li>X.509-Certificate() : description TBD</li>
        </ul>
        <t>These represent the output structure of that command in the form of a byte string value.</t>
        <section anchor="aik2" numbered="true" toc="default">
          <name>AIK and AIK Certificate</name>
          <t>Attestations are based upon a cryptographic signature performed by the TPM using
a so-called Attestation Identity Key (AIK). An AIK has the properties that it cannot
be exported from a TPM and is used for attestations. Trust in the AIK is established
by an X.509 Certificate emitted by a Certificate Authority. The AIK certificate is
either provided directly or via a so-called PrivacyCA <xref target="AIK-Enrollment" format="default"/>.</t>
          <t>This element consists of the AIK certificate that includes the AIK's public key used
during verification as well as the certificate chain up to the Root CA for validation
of the AIK certificate itself.</t>
          <figure anchor="cert-token2">
            <name>TUDA-Cert element for TPM 2.0</name>
            <sourcecode type="pseudocode"><![CDATA[
TUDA-Cert = [AIK-Cert, TSA-Cert]; maybe split into two for SNMP
AIK-Certificate = X.509-Certificate(AIK-Key,Restricted-Flag)
TSA-Certificate = X.509-Certificate(TSA-Key, TSA-Flag)
]]></sourcecode>
          </figure>
        </section>
        <section anchor="synchronization-token-1" numbered="true" toc="default">
          <name>Synchronization Token</name>
          <t>The synchronization token uses a different TPM command, TPM2 GetTime() instead of TPM TickStampBlob().  The TPM2 GetTime() command contains the clock and time information of the TPM. The clock information is the equivalent of TUDA v1's tickSession information.</t>
          <figure anchor="sync-token2">
            <name>TUDA-Sync element for TPM 2.0</name>
            <sourcecode type="pseudocode"><![CDATA[
TUDA-SyncToken = [
  left_GetTime = sig(AIK-Key,
                     TimeInfo = [
                       time,
                       resetCount,
                       restartCount
                     ]
                    ),
  middle_TimeStamp = sig(TSA-Key,
                         hash(left_TickStampBlob),
                         UTC-localtime
                        ),
  right_TickStampBlob = sig(AIK-Key,
                            hash(middle_TimeStamp),
                            TimeInfo = [
                              time,
                              resetCount,
                              restartCount
                            ]
                           )
]
]]></sourcecode>
          </figure>
        </section>
        <section anchor="measurement-log" numbered="true" toc="default">
          <name>Measurement Log</name>
          <t>The creation procedure is identical to <xref target="mlog" format="default"/>.</t>
          <figure anchor="log-token2">
            <name>TUDA-Log element for TPM 2.0</name>
            <sourcecode type="pseudocode"><![CDATA[
Measurement-Log = [
  * [ EventName,
      PCR-Num,
      Event-Hash ]
]
]]></sourcecode>
          </figure>
        </section>
        <section anchor="explicit-time-based-attestation" numbered="true" toc="default">
          <name>Explicit time-based Attestation</name>
          <t>The TUDA attestation token consists of the result of TPM2_Quote() or a set of TPM2_PCR_READ followed by a TPM2_GetSessionAuditDigest. It proves that --- at a certain point-in-time with respect to the TPM's internal clock --- a certain configuration of PCRs was present, as denoted in the keys restriction information.</t>
          <figure anchor="attest-token2">
            <name>TUDA-Attest element for TPM 2.0</name>
            <sourcecode type="pseudocode"><![CDATA[
TUDA-AttestationToken = TUDA-AttestationToken_quote / TUDA-AttestationToken_audit

TUDA-AttestationToken_quote = sig(AIK-Key,
                                  TimeInfo = [
                                    time,
                                    resetCount,
                                    restartCount
                                  ],
                                  PCR-Selection = [ * PCR],
                                  PCR-Digest := PCRDigest
                                 )

TUDA-AttestationToken_audit = sig(AIK-key,
                                  TimeInfo = [
                                    time,
                                    resetCount,
                                    restartCount
                                  ],
                                  Session-Digest := PCRDigest
                                 )
]]></sourcecode>
          </figure>
        </section>
        <section anchor="sync-proof" numbered="true" toc="default">
          <name>Sync Proof</name>
          <t>In order to proof to the Verifier that the TPM's clock was not 'fast-forwarded' the result of a TPM2_GetTime() is sent after the TUDA-AttestationToken.</t>
          <figure anchor="prrof-token2">
            <name>TUDA-Proof element for TPM 2.0</name>
            <sourcecode type="pseudocode"><![CDATA[
TUDA-SyncProof = sig(AIK-Key,
                     TimeInfo = [
                       time,
                       resetCount,
                       restartCount
                     ]
                    ),
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements" toc="default">
      <name>Acknowledgements</name>
      <!--  LocalWords:  TPM AIK TUDA uptime PCR Verifier Attester CoRE RTC
 -->
<!--  LocalWords:  RESTCONF pseudocode disambiguates TSA PCRs RoT
 -->
<!--  LocalWords:  Attester's retransmitting Verifiers Timestamp
 -->
<!--  LocalWords:  TickStampBlob Attesters parallelization tickstamps
 -->
<!--  LocalWords:  trustable tickstamp cryptoprocessor BootLoader
 -->
<!--  LocalWords:  PCRInfo keyInfo
 -->

</section>
  </back>
  <!-- ##markdown-source:
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
i7LMlYy7vJy7xrhrC4ZWMu5Nyvvegm8X6vt+Y+JViVN3iW+vszdfUsb3X5tv
V5bwvWN8e50d/oawuYN8u4642uPV8m1TunMDzl0spfuNePfNJXK/ucJdtWhT
LeTbr7u+AIhe3ub1P74yiIysUij6ViWtVBXjLAslNXUgV7z4beWXUiG8StGl
am13TXipqn9YLbfcVFX0FsJKqazoN6bZNWh0lwSWG/Zjg9qhVqtbFg/9vXbj
TssXN2zINwXMHRQuKiifPVStXKErLm4gVhQqdn4j7rpuJc67aAxwC8tV8ddy
VcRqZuhvbIhfoxJlJVesqNP4Bx35tWoyVjPD9Yoy3oIlFqsyfmNS4xRj/CMo
zeZlF9ckOKoq2wb0xi2T+I3IzZrlD39PTaZU9fB3Wvo/lzLjlFuqIrXlum6V
4P16GsnNFfwqCXB5nndNKamuXlZNidcqNncLQlyoNveN6XBlnbk7JgnfuCub
FpXbTEMpV5X7ffbkjxPCN6wctyZjtEt1bcAcyxXfvhGXWKeS212UxUvVh6p4
RGUVra/ODCqqKFVyguqaXndCGl+9nGpWcHMBr1vwgYoKXt+Y7hTrdv2RtKci
6aqDR309UqOqJFWSmSwM/f2EyjmgR4zyygb9nw7sBJs4udoqG96dUlvfyua+
dgmtbyZwOgUrKm3npcI/zu832sorCqV8fUu5W66j2k5eWsddE0jLtVkqKdBN
1YpuQX4K5Yq+MempxJw7ZR5ftRG3rEr0+8D0bhu5V4H1GwLlLhq4iwTLHkhz
Ojuxuiqfm2dfn3Bzu7o1mjbfqmiN52zn7cvWSAcb1qwRjaIUJ2hBrb0qT6WU
CIaAPDnYKuNWdfuVEkItonxZXsvtM1s2OXXV8oRB2XXhXp0/sT7cq9t/Idxv
mW9RpRj+ETCtjmldH6bV7b8Ul28XA3tXYFoXbbQ+VOt6+EK4bhKfdOeAWbb+
3wKe5U6+HkjX8BZ8kb/gj4B+jYd7fcjXdPCFUN/cJX5X0Lnahbc+PKvbfyE4
N3b53TFofglpqO3iK8P0X5E61Jvc14d/fR9fuAGbmenvCkZX2w434HSV7b+U
yW1ua/zKsPvsfa4s9mXX+aJalJjIfb6MiTVk8MZ39MsL8wvqk+fJbJZcYUY8
PgRWsqTEcFAJ4X+SZYpkAE2+uiPWU7HGEQ6ijDTBYpEmwWjawU6v6R2prrRQ
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
U6In+b3/HwHBUhAswgEA

-->

</rfc>
