<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.14 (Ruby 3.1.2) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-birkholz-rats-tuda-07" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title abbrev="TUDA">Time-Based Uni-Directional Attestation</title>
    <seriesInfo name="Internet-Draft" value="draft-birkholz-rats-tuda-07"/>
    <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="July" day="10"/>
    <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">
      <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"/>.</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"/>. 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"/>, 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"/> or authentication mechanisms based on EAP <xref target="RFC5247"/>.</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"/> and <xref target="TPM2"/>). The Protected Capabilities <xref target="TCGGLOSS"/> 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"/>.</t>
      <section anchor="forward-authenticity">
        <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"/>).
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">
        <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"/>,</li>
          <li>be able to leverage existing management interfaces, such as SNMP
(RFC 3411, <xref target="STD62"/>). RESTCONF <xref target="RFC8040"/> or CoMI <xref target="I-D.ietf-core-comi"/> --- and corresponding bindings,</li>
          <li>support broadcast and multicast schemes (e.g. <xref target="IEEE1609"/>),</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">
        <name>Terminology</name>
        <t>This document uses the terms defined in the RATS Architecture <xref target="I-D.ietf-rats-architecture"/> and by the RATS Reference Interaction Models <xref target="I-D.ietf-rats-reference-interaction-models"/>.</t>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="remote-attestation-principles">
      <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"/> and <xref target="TCGGLOSS"/>.</t>
      <section anchor="authenticity-of-evidence">
        <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"/> (or a secure channel as illustrated in <xref target="I-D.birkholz-rats-uccs"/>).
As key material alone is typically not self-descriptive with respect to its intended use (its semantics), the Evidence created via TUDA <bcp14>MUST</bcp14> be accompanied by two kinds of certificates that are cryptographically associated with a trust anchor (TA) <xref target="RFC4949"/> 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"/>) 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 <bcp14>MUST</bcp14> be appraised by a Verifier in order to assess the trustworthiness of the corresponding Attester.
Assertions represented via Claims <bcp14>MUST NOT</bcp14> 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">
        <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"/>) 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"/>.
This concept is implemented, for example, in the Linux kernel where it is called the Linux Integrity Measurement Architecture (IMA) <xref target="Safford"/> 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"/> specification.
Open source solutions, for example, based on <xref target="RFC5209"/> use an IMA log to enable remote attestation <xref target="Steffens"/>.</t>
        <t>An Attester <bcp14>MUST</bcp14> 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">
        <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"/>, <xref target="TPM2"/>) 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"/>, <xref target="TPM2"/>) 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">
        <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 <bcp14>MUST</bcp14> be provided by a Root of Trust for Measurement (RTM) that is a system component of the Attester.
An RTM <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be considered invalid.
At least one RTM <bcp14>MUST</bcp14> be accessible to the first Attesting Environment in Attester conducting Layered Attestation (see section 4.3. in <xref target="I-D.ietf-rats-architecture"/>).
An RTM <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be provided by an appropriate root of trust for storage (RTS) that is a system component of the Attester.
An RTS <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be considered invalid.
An RTS <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be provided by roots of trust for reporting (RTR) that are system components of the Attester.
An RTR <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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"/> conducting a Layered Attestation procedure, Attesting Environments <bcp14>MAY</bcp14> not be TPMs.
At least one Attesting Environment <bcp14>MUST</bcp14> be a TPM.
At least one TPM <bcp14>MUST</bcp14> act as an RTR.
Attesting Environments that are not TPMs <bcp14>MUST NOT</bcp14> 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"/>.
An RTS and an RTR are often tightly coupled.
In TUDA, a Trusted Platform Module (TPM, see <xref target="TPM12"/> and <xref target="TPM2"/>) 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">
        <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"/>.</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 <bcp14>MUST</bcp14> constitute Evidence, measurements in event logs <bcp14>MAY</bcp14> be part of Evidence, but do not have to be <bcp14>MAY</bcp14> 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 <bcp14>MUST</bcp14> 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"/>).</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"/>.
During reply, the validity of each event log record <bcp14>MUST</bcp14> 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"/> or <xref target="TCGRIM"/>.
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"/>.
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">
      <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"/> or CAVES <xref target="PRIRA"/>, 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"/> 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"/> 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"/>).</li>
      </ul>
      <section anchor="attesting-environment-requirements">
        <name>Attesting Environment Requirements</name>
        <t>An Attesting Environment that generates Evidence in TUDA <bcp14>MUST</bcp14> 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">
        <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 <bcp14>MUST</bcp14> be generated by Time Stamp Authority based on <xref target="RFC3161"/> 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">
      <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>
          <bcp14>MUST</bcp14> be encoded in the Concise Binary Object Representation (CBOR <xref target="RFC8949"/>) 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"/>.</li>
        <li>that requires a certain freshness <bcp14>SHOULD</bcp14> 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>
          <bcp14>SHOULD</bcp14> 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 <bcp14>SHOULD</bcp14> 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">
      <name>TUDA Core Concept</name>
      <t>Traditional Challenge/Response Remote Attestation <xref target="I-D.ietf-rats-reference-interaction-models"/> 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"/>.</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"/> and <xref target="SFKE2008"/>.</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"/> contains guidance on how to utilize a REST architecture.</t>
      <t><xref target="snmp"/> contains guidance on how to create an SNMP binding and a corresponding TUDA-MIB.</t>
      <t><xref target="yang"/> contains a corresponding YANG module that supports both RESTCONF and CoREDONF.</t>
      <t><xref target="tpm12"/> contains a realization of TUDA using TPM 1.2 primitives.</t>
      <t><xref target="tpm2"/> 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">
        <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">
        <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"/> and <xref target="IEEE802.1AR"/>.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="the-tuda-protocol-family">
      <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"/> IDevID or LDevID, depending on their setting of the corresponding identity property (<xref target="AIK-Credential"/>, <xref target="AIK-Enrollment"/>; see <xref target="aik"/>).</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"/> and bundled into a collection (a RIM Manifest <xref target="I-D.birkholz-rats-coswid-rim"/>).</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">
        <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"/> and is enriched with the IE update cycles defined in this section.</t>
        <figure anchor="SequenceExample">
          <name>Example sequence of events</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="768" width="584" viewBox="0 0 584 768" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
                <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
                <path d="M 48,144 L 48,224" fill="none" stroke="black"/>
                <path d="M 48,256 L 48,272" fill="none" stroke="black"/>
                <path d="M 48,352 L 48,496" fill="none" stroke="black"/>
                <path d="M 48,624 L 48,752" fill="none" stroke="black"/>
                <path d="M 96,32 L 96,64" fill="none" stroke="black"/>
                <path d="M 208,160 L 208,224" fill="none" stroke="black"/>
                <path d="M 376,160 L 376,224" fill="none" stroke="black"/>
                <path d="M 488,32 L 488,64" fill="none" stroke="black"/>
                <path d="M 536,72 L 536,464" fill="none" stroke="black"/>
                <path d="M 536,528 L 536,704" fill="none" stroke="black"/>
                <path d="M 536,736 L 536,752" fill="none" stroke="black"/>
                <path d="M 576,32 L 576,64" fill="none" stroke="black"/>
                <path d="M 8,32 L 96,32" fill="none" stroke="black"/>
                <path d="M 488,32 L 576,32" fill="none" stroke="black"/>
                <path d="M 8,64 L 96,64" fill="none" stroke="black"/>
                <path d="M 488,64 L 576,64" fill="none" stroke="black"/>
                <path d="M 208,160 L 376,160" fill="none" stroke="black"/>
                <path d="M 64,176 L 144,176" fill="none" stroke="black"/>
                <path d="M 440,208 L 520,208" fill="none" stroke="black"/>
                <path d="M 208,224 L 376,224" fill="none" stroke="black"/>
                <path d="M 152,384 L 520,384" fill="none" stroke="black"/>
                <path d="M 176,400 L 520,400" fill="none" stroke="black"/>
                <path d="M 192,416 L 520,416" fill="none" stroke="black"/>
                <path d="M 168,432 L 520,432" fill="none" stroke="black"/>
                <path d="M 184,448 L 520,448" fill="none" stroke="black"/>
                <path d="M 192,656 L 520,656" fill="none" stroke="black"/>
                <path d="M 168,672 L 520,672" fill="none" stroke="black"/>
                <path d="M 184,688 L 520,688" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="528,688 516,682.4 516,693.6 " fill="black" transform="rotate(0,520,688)"/>
                <polygon class="arrowhead" points="528,672 516,666.4 516,677.6 " fill="black" transform="rotate(0,520,672)"/>
                <polygon class="arrowhead" points="528,656 516,650.4 516,661.6 " fill="black" transform="rotate(0,520,656)"/>
                <polygon class="arrowhead" points="528,448 516,442.4 516,453.6 " fill="black" transform="rotate(0,520,448)"/>
                <polygon class="arrowhead" points="528,432 516,426.4 516,437.6 " fill="black" transform="rotate(0,520,432)"/>
                <polygon class="arrowhead" points="528,416 516,410.4 516,421.6 " fill="black" transform="rotate(0,520,416)"/>
                <polygon class="arrowhead" points="528,400 516,394.4 516,405.6 " fill="black" transform="rotate(0,520,400)"/>
                <polygon class="arrowhead" points="528,384 516,378.4 516,389.6 " fill="black" transform="rotate(0,520,384)"/>
                <polygon class="arrowhead" points="528,208 516,202.4 516,213.6 " fill="black" transform="rotate(0,520,208)"/>
                <polygon class="arrowhead" points="72,176 60,170.4 60,181.6 " fill="black" transform="rotate(180,64,176)"/>
                <g class="text">
                  <text x="52" y="52">Attester</text>
                  <text x="532" y="52">Verifier</text>
                  <text x="48" y="84">|</text>
                  <text x="44" y="100">boot</text>
                  <text x="48" y="116">|</text>
                  <text x="140" y="132">valueGeneration(targetEnvironment)</text>
                  <text x="68" y="148">=&gt;</text>
                  <text x="108" y="148">claims</text>
                  <text x="172" y="180">handle</text>
                  <text x="244" y="196">Handle</text>
                  <text x="320" y="196">Distributor</text>
                  <text x="412" y="212">handle</text>
                  <text x="80" y="244">syncTokenGeneration</text>
                  <text x="68" y="260">=&gt;</text>
                  <text x="120" y="260">syncToken</text>
                  <text x="96" y="292">restrictedKeyGeneration</text>
                  <text x="84" y="308">restrictedKeyCertify</text>
                  <text x="48" y="324">|</text>
                  <text x="108" y="340">evidenceGeneration(handle,</text>
                  <text x="264" y="340">authSecIDs,</text>
                  <text x="380" y="340">collectedClaims)</text>
                  <text x="68" y="356">=&gt;</text>
                  <text x="116" y="356">evidence</text>
                  <text x="100" y="388">pushAKCert</text>
                  <text x="112" y="404">pushSyncToken</text>
                  <text x="120" y="420">pushCertifyInfo</text>
                  <text x="108" y="436">pushEventLog</text>
                  <text x="116" y="452">pushEvidenceon</text>
                  <text x="304" y="484">evidenceAppraisal(evidence,</text>
                  <text x="456" y="484">eventLog,</text>
                  <text x="540" y="484">refClaims)</text>
                  <text x="432" y="500">attestationResult</text>
                  <text x="516" y="500">&lt;=</text>
                  <text x="536" y="500">|</text>
                  <text x="48" y="516">~</text>
                  <text x="536" y="516">~</text>
                  <text x="60" y="532">pcr-change</text>
                  <text x="48" y="548">|</text>
                  <text x="96" y="564">restrictedKeyGeneration</text>
                  <text x="84" y="580">restrictedKeyCertify</text>
                  <text x="48" y="596">|</text>
                  <text x="108" y="612">evidenceGeneration(handle,</text>
                  <text x="264" y="612">authSecIDs,</text>
                  <text x="380" y="612">collectedClaims)</text>
                  <text x="68" y="628">=&gt;</text>
                  <text x="116" y="628">evidence</text>
                  <text x="120" y="660">pushCertifyInfo</text>
                  <text x="108" y="676">pushEventLog</text>
                  <text x="116" y="692">pushEvidenceon</text>
                  <text x="304" y="724">evidenceAppraisal(evidence,</text>
                  <text x="456" y="724">eventLog,</text>
                  <text x="540" y="724">refClaims)</text>
                  <text x="432" y="740">attestationResult</text>
                  <text x="516" y="740">&lt;=</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![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>
          </artset>
        </figure>
      </section>
    </section>
    <section anchor="sync-base-protocol">
      <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">
      <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">
      <name>Security Considerations</name>
      <t>There are Security Considerations. TBD</t>
    </section>
    <section anchor="contributors">
      <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="RFC9112" target="https://www.rfc-editor.org/info/rfc9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding">
              <organization/>
            </author>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham">
              <organization/>
            </author>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns. </t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </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="RFC9113" target="https://www.rfc-editor.org/info/rfc9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson">
              <organization/>
            </author>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield">
              <organization/>
            </author>
            <date month="June" year="2022"/>
            <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 latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </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 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"/>
              <author fullname="R. Presuhn" initials="R" surname="Presuhn"/>
              <author fullname="B. Wijnen" initials="B" surname="Wijnen"/>
              <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="DOI" value="10.17487/RFC3411"/>
            <seriesInfo name="RFC" value="3411"/>
          </reference>
          <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"/>
              <author fullname="D. Harrington" initials="D" surname="Harrington"/>
              <author fullname="R. Presuhn" initials="R" surname="Presuhn"/>
              <author fullname="B. Wijnen" initials="B" surname="Wijnen"/>
              <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="DOI" value="10.17487/RFC3412"/>
            <seriesInfo name="RFC" value="3412"/>
          </reference>
          <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"/>
              <author fullname="P. Meyer" initials="P" surname="Meyer"/>
              <author fullname="B. Stewart" initials="B" surname="Stewart"/>
              <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="DOI" value="10.17487/RFC3413"/>
            <seriesInfo name="RFC" value="3413"/>
          </reference>
          <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"/>
              <author fullname="B. Wijnen" initials="B" surname="Wijnen"/>
              <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="DOI" value="10.17487/RFC3414"/>
            <seriesInfo name="STD" value="62"/>
            <seriesInfo name="RFC" value="3414"/>
          </reference>
          <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"/>
              <author fullname="R. Presuhn" initials="R" surname="Presuhn"/>
              <author fullname="K. McCloghrie" initials="K" surname="McCloghrie"/>
              <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 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" surname="Presuhn"/>
              <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 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" surname="Presuhn"/>
              <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="DOI" value="10.17487/RFC3417"/>
            <seriesInfo name="RFC" value="3417"/>
          </reference>
          <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" surname="Presuhn"/>
              <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="DOI" value="10.17487/RFC3418"/>
            <seriesInfo name="RFC" value="3418"/>
          </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-21.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="7" month="March" year="2022"/>
            <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-21"/>
        </reference>
        <reference anchor="I-D.ietf-rats-reference-interaction-models" target="https://www.ietf.org/archive/id/draft-ietf-rats-reference-interaction-models-05.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="January" year="2022"/>
            <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-05"/>
        </reference>
        <reference anchor="I-D.ietf-rats-architecture" target="https://www.ietf.org/archive/id/draft-ietf-rats-architecture-18.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="14" month="June" year="2022"/>
            <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-18"/>
        </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">
      <name>REST Realization</name>
      <t>Each of the seven data items is defined as a media type (<xref target="iana"/>).
Representations of resources for each of these media types can be
retrieved from URIs that are defined by the respective servers <xref target="RFC8820"/>.
As can be derived from the URI, the actual retrieval is via one of the HTTPs
(<xref target="RFC9112"/>, <xref target="RFC9113"/>) or CoAP <xref target="RFC7252"/>.  How a client obtains
these URIs is dependent on the application; e.g., CoRE Web links <xref target="RFC6690"/>
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"/>.</t>
    </section>
    <section anchor="snmp">
      <name>SNMP Realization</name>
      <t>SNMPv3 (RFC 3411, <xref target="STD62"/>) 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"/>
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">
        <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>
          <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">
          <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">
          <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">
          <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">
        <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"/> 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"/>) in the TUDA MIB is analogous to the Software Installed and
Software Running groups in the Host Resources MIB <xref target="RFC2790"/>.</t>
      </section>
      <section anchor="relationship-to-entity-mib">
        <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"/> 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"/>.</t>
      </section>
      <section anchor="relationship-to-other-mibs">
        <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"/> and the System group in the SNMPv2 MIB (RFC 3418, <xref target="STD62"/>) and provides
context information for the TUDA attestation process.</t>
      </section>
      <section anchor="definition-of-tuda-mib">
        <name>Definition of TUDA MIB</name>
        <sourcecode type="mib" 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">
      <name>YANG Realization</name>
      <sourcecode type="yang" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

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">
      <name>Realization with TPM functions</name>
      <section anchor="tpm-functions">
        <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"/> and <xref target="TPM2"/>.</t>
        <section anchor="tick-session-and-tick-stamp">
          <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">
          <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">
          <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">
          <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">
        <name>IE Generation Procedures for TPM 1.2</name>
        <section anchor="aik">
          <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"/>.</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"/> gives a rough sketch
of this protocol. See <xref target="AIK-Enrollment"/> 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"/>.</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">
          <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">
          <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">
          <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">
          <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">
          <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"/>), 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">
        <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">
          <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"/>.</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">
          <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">
          <name>Measurement Log</name>
          <t>The creation procedure is identical to <xref target="mlog"/>.</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">
          <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">
          <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">
      <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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
UMnv/f+pQA0IucQBAA==

-->

</rfc>
