<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.3.8 -->

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-birkholz-rats-tuda-04" category="std">

  <front>
    <title abbrev="TUDA">Time-Based Uni-Directional Attestation</title>

    <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>Universitaet 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="2021" month="January" day="13"/>

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


  </front>

  <middle>


<section anchor="introduction" title="Introduction">

<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 focussed 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" title="Forward Authenticity">

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

<t><list style="hanging">
  <t hangText='Forward Authenticity:'>
  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>
  <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>
</list></t>

</section>
<section anchor="tuda-objectives" title="TUDA Objectives">

<t>Time-Based Uni-directional Attestation is designed to:</t>

<t><list style="symbols">
  <t>increase the confidence in authentication and authorization procedures,</t>
  <t>address the requirements of constrained-node networks,</t>
  <t>support interaction models that do not maintain connection-state over time, such as REST architectures <xref target="REST"/>,</t>
  <t>be able to leverage existing management interfaces, such as SNMP <xref target="RFC3411"/>. RESTCONF <xref target="RFC8040"/> or CoMI <xref target="I-D.ietf-core-comi"/> — and corresponding bindings,</t>
  <t>support broadcast and multicast schemes (e.g. <xref target="IEEE1609"/>),</t>
  <t>be able to cope with temporary loss of connectivity, and to</t>
  <t>provide trustworthy audit logs of past endpoint states.</t>
</list></t>

</section>
<section anchor="terminology" title="Terminology">

<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 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL
NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”,
“MAY”, and “OPTIONAL” in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
</section>
<section anchor="remote-attestation-principles" title="Remote Attestation Principles">

<t>Based on the RATS Architecture, the processing of TPM generated Evidence can be separated in three activities.</t>

<t><list style="hanging">
  <t hangText='Evidence Generation:'>
  The retrieval of signed digests from an RTR based on a sequence of collected Claims about software component integrity (measurements).</t>
  <t hangText='Evidence Conveyance:'>
  The transfer of Evidence from the Attester to the Verifier via the Internet.</t>
  <t hangText='Evidence Appraisal:'>
  The validation of Evidence signatures as well as the assessment of Claim values in Evidence by comparing them with Reference Values.</t>
</list></t>

<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" title="Authenticity of Evidence">

<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 MUST be accompanied by two kinds of certificates that are cryptographically associated with a trust anchor (TA) <xref target="RFC4949"/> via certification paths:</t>

<t><list style="symbols">
  <t>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</t>
  <t>an Endorsement Key (EK) Certificate (EK-Cert) that represents the Protection Capabilities of an Attesting Environment the AK is stored in.</t>
</list></t>

<t>If a Verifier decides to trust the TA of both an AK-Cert and an EK-Cert presented by an Attester – and thereby the included Claims about the trustworthiness of an Attester’s Target Environments – the Evidence generated by the Attester can be considered trustable and believable.
Ultimately, all trustable and believable Evidence MUST be appraised by a Verifier in order to assess the trustworthiness of the corresponding Attester.
Assertions represented via Claims MUST NOT be considered believable by themselves.</t>

<t>In this document, Evidence is generated via TPMs that come with an AK-Cert and a EK-Cert as a basis for believable Evidence generation.</t>

</section>
<section anchor="generating-evidence-about-software-component-integrity" title="Generating Evidence about Software Component Integrity">

<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 MUST generate such an event/measurement log.</t>

<!-- This section details the processed data items, the requirements for system components, and corresponding operations to enable the generation of Evidence for TUDA where TPMs take on the role of roots of trust for storage and roots of trust for reporting {{TCGGLOSS}}. -->

</section>
<section anchor="measurements-and-digests-generated-by-an-attester" title="Measurements and Digests Generated by an Attester">

<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 pseudo code in Appendix C and D.</t>

</section>
<section anchor="attesting-environments-and-roots-of-trust" title="Attesting Environments and Roots of Trust">

<t>The primitive operations used to generate an initial set of measurements at the beginning of an Attester’s boot sequence MUST be provided by a Root of Trust for Measurement (RTM) that is a system component of the Attester.
An RTM MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTM, measurements based on values generated by the RTM MUST be considered invalid.
At least one RTM MUST be accessible to the first Attesting Environment in Attester conducting Layered Attestation (see section 4.3. in <xref target="I-D.ietf-rats-architecture"/>).
An RTM MAY aggregate and retain measurements until the first RTS becomes available in a Layered Attestation procedure – instead of feeding measurements into an RTS, instantly.
The Protection Capabilities of an RTM to also act as a temporary RTS MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements.
System components supporting the use of a TPM typically include such an appropriate RTM.
In general, feeding measurements from an initial RTM into a TPM is automated and separated from Protected Capabilities that provide Claims collection from Target Environments that are regular execution environments.
A TPM providing the Protection Capabilities for an isolated and shielded location to feed measurements into (integrity and confidentiality) is an appropriate RTS for TUDA.</t>

<t>The primitive operations used to store and chain measurements via a rolling hash function MUST be provided by an appropriate root of trust for storage (RTS) that is a system component of the Attester.
An RTS MUST be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTS, Evidence generated based on digest values acquired from the RTS MUST be considered invalid.
An RTS MUST be accessible to all Attesting Environments that are chained in a Layered Attestation procedure.
A TPM providing the primitive operation for Extend is an appropriate RTM for TUDA.</t>

<t>The primitive operations used to generate Evidence based on digests MUST be provided by roots of trust for reporting (RTR) that are system components of the Attester.
An RTR MUST be be trusted via trust-relationships to TAs enabled by appropriate Endorsements (e.g.,EK-Certs).
If a Verifier cannot trust an RTR, Evidence generated by the RTR MUST be considered invalid.
A TPM providing the primitive operations for Quote is an appropriate RTR for TUDA.
In a Composite Device (see Section 3.5. in <xref target="I-D.ietf-rats-architecture"/> conducting a Layered Attestation procedure, Attesting Environments MAY not be TPMs.
At least one Attesting Environment MUST be a TPM.
At least one TPM MUST act as an RTR.
Attesting Environments that are not TPMs MUST NOT act as an RTR.</t>

<t>A concise definition of the terms RTM, RTS, and RTR can be found in the Trusted Computing Group (TCG) Glossary <xref target="TCGGLOSS"/>.
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" title="Indeterministic Measurements">

<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 MUST constitute Evidence, measurements in event logs MAY be part of Evidence, but do not have to be MAY be conveyed separately.
If the values in event logs or their sequence are tampered with before or during conveyance from an Attester to a Verifier, the corresponding Evidence Appraisal fails.
While this dependency reflects the intended behavior of RATS, integrity protected or tamper-evident can be beneficial or convenient in some usage scenarios.
Additionally, event logs my allow insights into the composition of an Attester and typically come with confidentiality requirements.</t>

<t>In order to compute reference values to compare digest Claims in Evidence with, a Verifier MUST be able to replay the rolling hash function of the Extend operation provided by a TPM (see Section 2.4.2. in <xref target="I-D.fedorkow-rats-network-device-attestation"/>).</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 MUST be appraised individually by the Verifier in order to infer if each started software component satisfies integrity requirements.
These appraisal procedures require Reference Integrity Measurements/Manifests (RIM) as are provided via <xref target="I-D.birkholz-rats-coswid-rim"/> 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" title="TUDA Principles and Requirements">

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

<t><list style="symbols">
  <t>remote attestation for Attesters that might not always be able to reach the Internet by enabling the appraisal of past states,</t>
  <t>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,</t>
  <t>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"/>).</t>
</list></t>

<section anchor="attesting-environment-requirements" title="Attesting Environment Requirements">

<t>An Attesting Environment that generates Evidence in TUDA MUST support three specific Protected Capabilities:</t>

<t><list style="symbols">
  <t>Platform Configuration Registers (PCR) that can extend measurements consecutively and represent the sequence of measurements as a single digest,</t>
  <t>Restricted Signing Keys (RSK) that can only be accessed, if a specific signature about a set of measurements can be provided as authentication, and</t>
  <t>a dedicated source of (relative) time, e.g. a tick counter (a tick being a specific time interval, for example 10 ms).</t>
</list></t>

<t>A TPM is capable of providing these Protected Capabilities for TUDA.</t>

</section>
<section anchor="handle-distributor-requirements-time-stamp-authority" title="Handle Distributor Requirements: Time Stamp Authority">

<t>Both Evidence generation and Evidence appraisal require a Handle Distributor that can take on the role of a trusted Time Stamp Authority (TSA) as an additional third party.
Time Stamp Tokens (TST) included in Handles MUST be generated by Time Stamp Authority based on <xref target="RFC3161"/> 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" title="Information Elements and Conveyance">

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

<t><list style="symbols">
  <t>MUST be encoded in the Concise Binary Object Representation (CBOR <xref target="RFC7049"/>) 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"/></t>
  <t>that requires a certain freshness SHOULD only be re-generated when out-dated (not fresh, but stale), which reduces the overall resources required from the Attester, including the usage of a TPM’s resources (re-generation of IE is determined by their age or by specific state changes on the Attester, e.g., due to a reboot-cycle)</t>
  <t>SHOULD only be transferred when required, which reduces the amount of data in motion necessary to conduct remote attestation significantly (only IE that have changed since their last conveyance have to be transferred)</t>
  <t>that requires a certain freshness SHOULD be reused for multiple remote attestation procedures in the limits of its corresponding freshness-window, further reducing the load imposed on the Attester and corresponding TPMs.</t>
</list></t>

</section>
<section anchor="tuda-core-concept" title="TUDA Core Concept">

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

<t><list style="symbols">
  <t>the time of transmission of the nonce, and</t>
  <t>the reception of the corresponding response.</t>
</list></t>

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

<t><list style="symbols">
  <t>the transmission of a TUDA time-synchronization token, and</t>
  <t>the typical round-trip time between the Verifier and the Attester.</t>
</list></t>

<t>The accuracy of this time-frame is defined by two factors:</t>

<t><list style="symbols">
  <t>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</t>
  <t>the drift of clocks included in the RoT.</t>
</list></t>

<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 {{I-D.ietf-sacm-terminology}} (e.g. a signed CoSWID as defined in {{I-D.birkholz-rats-coswid-rim}}).

Trustworthy:

: A qualities of an Attester that 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" title="TPM Specific Terms">

<t><list style="hanging">
  <t hangText='PCR:'>
  A Platform Configuration Register that is part of the TPM and is used to securely store and report measurements about security posture</t>
  <t hangText='PCR-Hash:'>
  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>
</list></t>

</section>
<section anchor="certificates" title="Certificates">

<t><list style="hanging">
  <t hangText='HD-CA:'>
  The Certificate Authority that provides the certificate for the TSA role of a Handle Distributor (HD)</t>
  <t hangText='AIK-CA:'>
  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>
</list></t>

</section>
</section>
<section anchor="the-tuda-protocol-family" title="The TUDA Protocol Family">

<t>Time-Based Uni-Directional Attestation consists of the following seven information elements:</t>

<t><list style="hanging">
  <t hangText='Handle Distributor Certificate:'>
  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>
  <t hangText='AK Certificate:'>
  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>
  <t hangText='Synchronization Token:'>
  The reference frame for Evidence is provided by the relative timestanps 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 timesamps are acquired from a Handle Distributor.</t>
  <t hangText='Restriction Info:'>
  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>
  <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>
  <t hangText='Measurement Log:'>
  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>
  <t hangText='Implicit Evidence:'>
  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>
  <t hangText='Concise SWID tags:'>
  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>
</list></t>

<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" title="TUDA Information Elements Update Cycles">

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

<t><list style="symbols">
  <t>persistent, even after a hard reboot: includes certificates
that are associated with the endpoint itself or with services it relies on.</t>
  <t>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.</t>
  <t>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.</t>
</list></t>

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

<t><list style="symbols">
  <t>The Attester completes a boot-cycle</t>
  <t>A relevant PCR changes</t>
  <t>Too much time has passed since the Evidence Generation</t>
</list></t>

<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 title="Example sequence of events" anchor="SequenceExample"><artwork><![CDATA[
.----------.                                                .----------.
| Attester |                                                | Verifier |
'----------'                                                '----------'
     |                                                            |
   boot                                                           |
     |                                                            |
valueGeneration(targetEnvironment)                                |
     | => claims                                                  |
     |                   .--------------------.                   |
     | <----------handle |                    |                   |
     |                   | Handle Distributor |                   |
     |                   |                    | handle----------> |
     |                   '--------------------'                   |
syncTokenGeneration                                               |
     | => syncToken                                               |
     |                                                            |
restrictedKeyGeneration                                           |
restrictedKeyCertify                                              |
     |                                                            |
evidenceGeneration(handle, authSecIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | pushAKCert ----------------------------------------------> |
     | pushSyncToken -------------------------------------------> |
     | pushCertifyInfo -----------------------------------------> |
     | pushEventLog --------------------------------------------> |
     | pushEvidenceon ------------------------------------------> |
     |                                                            |
     |                  evidenceAppraisal(evidence, eventLog, refClaims)
     |                                       attestationResult <= |
     ~                                                            ~
  pcr-change                                                      |
     |                                                            |
restrictedKeyGeneration                                           |
restrictedKeyCertify                                              |
     |                                                            |
evidenceGeneration(handle, authSecIDs, collectedClaims)           |
     | => evidence                                                |
     |                                                            |
     | pushCertifyInfo -----------------------------------------> |
     | pushEventLog --------------------------------------------> |
     | pushEvidenceon ------------------------------------------> |
     |                                                            |
     |                  evidenceAppraisal(evidence, eventLog, refClaims)
     |                                       attestationResult <= |
     |                                                            |
]]></artwork></figure>

</section>
</section>
<section anchor="sync-base-protocol" title="Sync Base Protocol">

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

<t><list style="symbols">
  <t>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.</t>
  <t>The corresponding response includes a data-structure incorporating the trusted timestamp token and its signature created by the TSA.</t>
  <t>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.</t>
</list></t>

<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" title="IANA Considerations">

<t>This memo includes requests to IANA, including registrations for media
type definitions.</t>

<t>TBD</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>There are Security Considerations. TBD</t>

</section>
<section anchor="contributors" title="Contributors">

<t>TBD</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<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 initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<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="RFC3161" target='https://www.rfc-editor.org/info/rfc3161'>
<front>
<title>Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)</title>
<author initials='C.' surname='Adams' fullname='C. Adams'><organization /></author>
<author initials='P.' surname='Cain' fullname='P. Cain'><organization /></author>
<author initials='D.' surname='Pinkas' fullname='D. Pinkas'><organization /></author>
<author initials='R.' surname='Zuccherato' fullname='R. Zuccherato'><organization /></author>
<date year='2001' month='August' />
<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="RFC3411" target='https://www.rfc-editor.org/info/rfc3411'>
<front>
<title>An Architecture for Describing Simple Network Management Protocol (SNMP) Management Frameworks</title>
<author initials='D.' surname='Harrington' fullname='D. Harrington'><organization /></author>
<author initials='R.' surname='Presuhn' fullname='R. Presuhn'><organization /></author>
<author initials='B.' surname='Wijnen' fullname='B. Wijnen'><organization /></author>
<date year='2002' month='December' />
<abstract><t>This document describes an architecture for describing Simple Network Management Protocol (SNMP) Management Frameworks.  The architecture is designed to be modular to allow the evolution of the SNMP protocol standards over time.  The major portions of the architecture are an SNMP engine containing a Message Processing Subsystem, a Security Subsystem and an Access Control Subsystem, and possibly multiple SNMP applications which provide specific functional processing of management data.  This document obsoletes RFC 2571.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='62'/>
<seriesInfo name='RFC' value='3411'/>
<seriesInfo name='DOI' value='10.17487/RFC3411'/>
</reference>



<reference  anchor="RFC5209" target='https://www.rfc-editor.org/info/rfc5209'>
<front>
<title>Network Endpoint Assessment (NEA): Overview and Requirements</title>
<author initials='P.' surname='Sangster' fullname='P. Sangster'><organization /></author>
<author initials='H.' surname='Khosravi' fullname='H. Khosravi'><organization /></author>
<author initials='M.' surname='Mani' fullname='M. Mani'><organization /></author>
<author initials='K.' surname='Narayan' fullname='K. Narayan'><organization /></author>
<author initials='J.' surname='Tardo' fullname='J. Tardo'><organization /></author>
<date year='2008' month='June' />
<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="RFC5247" target='https://www.rfc-editor.org/info/rfc5247'>
<front>
<title>Extensible Authentication Protocol (EAP) Key Management Framework</title>
<author initials='B.' surname='Aboba' fullname='B. Aboba'><organization /></author>
<author initials='D.' surname='Simon' fullname='D. Simon'><organization /></author>
<author initials='P.' surname='Eronen' fullname='P. Eronen'><organization /></author>
<date year='2008' month='August' />
<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 &quot;methods&quot;.  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 initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<date year='2012' month='August' />
<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.  &quot;RESTful&quot; 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="RFC7049" target='https://www.rfc-editor.org/info/rfc7049'>
<front>
<title>Concise Binary Object Representation (CBOR)</title>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<author initials='P.' surname='Hoffman' fullname='P. Hoffman'><organization /></author>
<date year='2013' month='October' />
<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></abstract>
</front>
<seriesInfo name='RFC' value='7049'/>
<seriesInfo name='DOI' value='10.17487/RFC7049'/>
</reference>



<reference  anchor="RFC7230" target='https://www.rfc-editor.org/info/rfc7230'>
<front>
<title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
<author initials='R.' surname='Fielding' fullname='R. Fielding' role='editor'><organization /></author>
<author initials='J.' surname='Reschke' fullname='J. Reschke' role='editor'><organization /></author>
<date year='2014' month='June' />
<abstract><t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the &quot;http&quot; and &quot;https&quot; Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t></abstract>
</front>
<seriesInfo name='RFC' value='7230'/>
<seriesInfo name='DOI' value='10.17487/RFC7230'/>
</reference>



<reference  anchor="RFC7252" target='https://www.rfc-editor.org/info/rfc7252'>
<front>
<title>The Constrained Application Protocol (CoAP)</title>
<author initials='Z.' surname='Shelby' fullname='Z. Shelby'><organization /></author>
<author initials='K.' surname='Hartke' fullname='K. Hartke'><organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<date year='2014' month='June' />
<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="RFC7320" target='https://www.rfc-editor.org/info/rfc7320'>
<front>
<title>URI Design and Ownership</title>
<author initials='M.' surname='Nottingham' fullname='M. Nottingham'><organization /></author>
<date year='2014' month='July' />
<abstract><t>Section 1.1.1 of RFC 3986 defines URI syntax as &quot;a federated and extensible naming system wherein each scheme's specification may further restrict the syntax and semantics of identifiers using that scheme.&quot;  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 URI substructure is inappropriate, because that essentially usurps ownership.  This document further describes this problematic practice and provides some acceptable alternatives for use in standards.</t></abstract>
</front>
<seriesInfo name='RFC' value='7320'/>
<seriesInfo name='DOI' value='10.17487/RFC7320'/>
</reference>



<reference  anchor="RFC7519" target='https://www.rfc-editor.org/info/rfc7519'>
<front>
<title>JSON Web Token (JWT)</title>
<author initials='M.' surname='Jones' fullname='M. Jones'><organization /></author>
<author initials='J.' surname='Bradley' fullname='J. Bradley'><organization /></author>
<author initials='N.' surname='Sakimura' fullname='N. Sakimura'><organization /></author>
<date year='2015' month='May' />
<abstract><t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.  The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t></abstract>
</front>
<seriesInfo name='RFC' value='7519'/>
<seriesInfo name='DOI' value='10.17487/RFC7519'/>
</reference>



<reference  anchor="RFC7540" target='https://www.rfc-editor.org/info/rfc7540'>
<front>
<title>Hypertext Transfer Protocol Version 2 (HTTP/2)</title>
<author initials='M.' surname='Belshe' fullname='M. Belshe'><organization /></author>
<author initials='R.' surname='Peon' fullname='R. Peon'><organization /></author>
<author initials='M.' surname='Thomson' fullname='M. Thomson' role='editor'><organization /></author>
<date year='2015' month='May' />
<abstract><t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2).  HTTP/2 enables a more efficient use of network resources and a reduced perception of latency by introducing header field compression and allowing multiple concurrent exchanges on the same connection.  It also introduces unsolicited push of representations from servers to clients.</t><t>This specification is an alternative to, but does not obsolete, the HTTP/1.1 message syntax.  HTTP's existing semantics remain unchanged.</t></abstract>
</front>
<seriesInfo name='RFC' value='7540'/>
<seriesInfo name='DOI' value='10.17487/RFC7540'/>
</reference>



<reference  anchor="RFC8040" target='https://www.rfc-editor.org/info/rfc8040'>
<front>
<title>RESTCONF Protocol</title>
<author initials='A.' surname='Bierman' fullname='A. Bierman'><organization /></author>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund'><organization /></author>
<author initials='K.' surname='Watsen' fullname='K. Watsen'><organization /></author>
<date year='2017' month='January' />
<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="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<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>



<reference  anchor="RFC8639" target='https://www.rfc-editor.org/info/rfc8639'>
<front>
<title>Subscription to YANG Notifications</title>
<author initials='E.' surname='Voit' fullname='E. Voit'><organization /></author>
<author initials='A.' surname='Clemm' fullname='A. Clemm'><organization /></author>
<author initials='A.' surname='Gonzalez Prieto' fullname='A. Gonzalez Prieto'><organization /></author>
<author initials='E.' surname='Nilsen-Nygaard' fullname='E. Nilsen-Nygaard'><organization /></author>
<author initials='A.' surname='Tripathy' fullname='A. Tripathy'><organization /></author>
<date year='2019' month='September' />
<abstract><t>This document defines a YANG data model and associated mechanisms enabling subscriber-specific subscriptions to a publisher's event streams.  Applying these elements allows a subscriber to request and receive a continuous, customized feed of publisher-generated information.</t></abstract>
</front>
<seriesInfo name='RFC' value='8639'/>
<seriesInfo name='DOI' value='10.17487/RFC8639'/>
</reference>



<reference  anchor="RFC8640" target='https://www.rfc-editor.org/info/rfc8640'>
<front>
<title>Dynamic Subscription to YANG Events and Datastores over NETCONF</title>
<author initials='E.' surname='Voit' fullname='E. Voit'><organization /></author>
<author initials='A.' surname='Clemm' fullname='A. Clemm'><organization /></author>
<author initials='A.' surname='Gonzalez Prieto' fullname='A. Gonzalez Prieto'><organization /></author>
<author initials='E.' surname='Nilsen-Nygaard' fullname='E. Nilsen-Nygaard'><organization /></author>
<author initials='A.' surname='Tripathy' fullname='A. Tripathy'><organization /></author>
<date year='2019' month='September' />
<abstract><t>This document provides a Network Configuration Protocol (NETCONF) binding to the dynamic subscription capability of both subscribed notifications and YANG-Push.</t></abstract>
</front>
<seriesInfo name='RFC' value='8640'/>
<seriesInfo name='DOI' value='10.17487/RFC8640'/>
</reference>



<reference  anchor="RFC8641" target='https://www.rfc-editor.org/info/rfc8641'>
<front>
<title>Subscription to YANG Notifications for Datastore Updates</title>
<author initials='A.' surname='Clemm' fullname='A. Clemm'><organization /></author>
<author initials='E.' surname='Voit' fullname='E. Voit'><organization /></author>
<date year='2019' month='September' />
<abstract><t>This document describes a mechanism that allows subscriber applications to request a continuous and customized stream of updates from a YANG datastore.  Providing such visibility into updates enables new capabilities based on the remote mirroring and monitoring of configuration and operational state.</t></abstract>
</front>
<seriesInfo name='RFC' value='8641'/>
<seriesInfo name='DOI' value='10.17487/RFC8641'/>
</reference>



<reference  anchor="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 initials='H.' surname='Birkholz' fullname='H. Birkholz'><organization /></author>
<author initials='C.' surname='Vigano' fullname='C. Vigano'><organization /></author>
<author initials='C.' surname='Bormann' fullname='C. Bormann'><organization /></author>
<date year='2019' month='June' />
<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>




    </references>

    <references title='Informative References'>





<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 initials='K.' surname='McCloghrie' fullname='K. McCloghrie'><organization /></author>
<author initials='M.' surname='Rose' fullname='M. Rose'><organization /></author>
<date year='1991' month='March' />
<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="RFC3418" target='https://www.rfc-editor.org/info/rfc3418'>
<front>
<title>Management Information Base (MIB) for the Simple Network Management Protocol (SNMP)</title>
<author initials='R.' surname='Presuhn' fullname='R. Presuhn' role='editor'><organization /></author>
<date year='2002' month='December' />
<abstract><t>This document defines managed objects which describe the behavior of a Simple Network Management Protocol (SNMP) entity.  This document obsoletes RFC 1907, Management Information Base for Version 2 of the Simple Network Management Protocol (SNMPv2).  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='STD' value='62'/>
<seriesInfo name='RFC' value='3418'/>
<seriesInfo name='DOI' value='10.17487/RFC3418'/>
</reference>



<reference  anchor="RFC2790" target='https://www.rfc-editor.org/info/rfc2790'>
<front>
<title>Host Resources MIB</title>
<author initials='S.' surname='Waldbusser' fullname='S. Waldbusser'><organization /></author>
<author initials='P.' surname='Grillo' fullname='P. Grillo'><organization /></author>
<date year='2000' month='March' />
<abstract><t>This memo obsoletes RFC 1514, the &quot;Host Resources MIB&quot;.  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 initials='R.' surname='Shirey' fullname='R. Shirey'><organization /></author>
<date year='2007' month='August' />
<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="RFC6933" target='https://www.rfc-editor.org/info/rfc6933'>
<front>
<title>Entity MIB (Version 4)</title>
<author initials='A.' surname='Bierman' fullname='A. Bierman'><organization /></author>
<author initials='D.' surname='Romascanu' fullname='D. Romascanu'><organization /></author>
<author initials='J.' surname='Quittek' fullname='J. Quittek'><organization /></author>
<author initials='M.' surname='Chandramouli' fullname='M. Chandramouli'><organization /></author>
<date year='2013' month='May' />
<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>


<reference anchor="STD62" >
  <front>
    <title>Internet Standard 62</title>
    <author >
      <organization></organization>
    </author>
    <date year="2002" month="December"/>
  </front>
  <seriesInfo name="STD" value="62"/>
  <seriesInfo name="RFCs" value="3411 to 3418"/>
</reference>




<reference anchor="I-D.ietf-sacm-terminology">
<front>
<title>Security Automation and Continuous Monitoring (SACM) Terminology</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='J' surname='Lu' fullname='Jarrett Lu'>
    <organization />
</author>

<author initials='J' surname='Strassner' fullname='John Strassner'>
    <organization />
</author>

<author initials='N' surname='Cam-Winget' fullname='Nancy Cam-Winget'>
    <organization />
</author>

<author initials='A' surname='Montville' fullname='Adam Montville'>
    <organization />
</author>

<date month='December' day='14' year='2018' />

<abstract><t>This memo documents terminology used in the documents produced by SACM (Security Automation and Continuous Monitoring).</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-sacm-terminology-16' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-terminology-16.txt' />
</reference>



<reference anchor="I-D.ietf-core-comi">
<front>
<title>CoAP Management Interface (CORECONF)</title>

<author initials='M' surname='Veillette' fullname='Michel Veillette'>
    <organization />
</author>

<author initials='P' surname='Stok' fullname='Peter van der Stok'>
    <organization />
</author>

<author initials='A' surname='Pelov' fullname='Alexander Pelov'>
    <organization />
</author>

<author initials='A' surname='Bierman' fullname='Andy Bierman'>
    <organization />
</author>

<author initials='I' surname='Petrov' fullname='Ivaylo Petrov'>
    <organization />
</author>

<date month='July' day='4' year='2020' />

<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-10' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-comi-10.txt' />
</reference>



<reference anchor="I-D.ietf-sacm-coswid">
<front>
<title>Concise Software Identification Tags</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='J' surname='Fitzgerald-McKay' fullname='Jessica Fitzgerald-McKay'>
    <organization />
</author>

<author initials='C' surname='Schmidt' fullname='Charles Schmidt'>
    <organization />
</author>

<author initials='D' surname='Waltermire' fullname='David Waltermire'>
    <organization />
</author>

<date month='November' day='2' year='2020' />

<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-16' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-coswid-16.txt' />
</reference>



<reference anchor="I-D.ietf-rats-reference-interaction-models">
<front>
<title>Reference Interaction Models for Remote Attestation Procedures</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='M' surname='Eckel' fullname='Michael Eckel'>
    <organization />
</author>

<author initials='C' surname='Newton' fullname='Christopher Newton'>
    <organization />
</author>

<author initials='L' surname='Chen' fullname='Liqun Chen'>
    <organization />
</author>

<date month='October' day='23' year='2020' />

<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.  Privacy preserving conveyance of Evidence via Direct Anonymous Attestation is elaborated on in the context of the Attester, Endorser, and Verifier role.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-rats-reference-interaction-models-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-rats-reference-interaction-models-01.txt' />
</reference>



<reference anchor="I-D.ietf-rats-architecture">
<front>
<title>Remote Attestation Procedures Architecture</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='D' surname='Thaler' fullname='Dave Thaler'>
    <organization />
</author>

<author initials='M' surname='Richardson' fullname='Michael Richardson'>
    <organization />
</author>

<author initials='N' surname='Smith' fullname='Ned Smith'>
    <organization />
</author>

<author initials='W' surname='Pan' fullname='Wei Pan'>
    <organization />
</author>

<date month='December' day='8' year='2020' />

<abstract><t>In network protocol exchanges it is often the case that one entity requires believable evidence about the operational state of a remote peer.  Such evidence is typically conveyed as claims about the peer's software and hardware platform, and is subsequently appraised in order to assess the peer's trustworthiness.  The process of generating and appraising this kind of evidence is known as remote attestation.  This document describes an architecture for remote attestation procedures that generate, convey, and appraise evidence about a peer's operational state.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-rats-architecture-08' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-rats-architecture-08.txt' />
</reference>



<reference anchor="I-D.fedorkow-rats-network-device-attestation">
<front>
<title>TPM-based Network Device Remote Integrity Verification</title>

<author initials='G' surname='Fedorkow' fullname='Guy Fedorkow'>
    <organization />
</author>

<author initials='E' surname='Voit' fullname='Eric Voit'>
    <organization />
</author>

<author initials='J' surname='Fitzgerald-McKay' fullname='Jessica Fitzgerald-McKay'>
    <organization />
</author>

<date month='April' day='16' 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' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-fedorkow-rats-network-device-attestation-05.txt' />
</reference>



<reference anchor="I-D.birkholz-rats-coswid-rim">
<front>
<title>Reference Integrity Measurement Extension for Concise Software Identities</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='P' surname='Uiterwijk' fullname='Patrick Uiterwijk'>
    <organization />
</author>

<author initials='N' surname='Smith' fullname='Ned Smith'>
    <organization />
</author>

<author initials='J' surname='Fitzgerald-McKay' fullname='Jessica Fitzgerald-McKay'>
    <organization />
</author>

<author initials='D' surname='Waltermire' fullname='David Waltermire'>
    <organization />
</author>

<author initials='S' surname='Bhandari' fullname='Shwetha Bhandari'>
    <organization />
</author>

<date month='July' day='13' year='2020' />

<abstract><t>Concise Software Identification (CoSWID) tags identify and describe individual software components, patches, and installation bundles. CoSWID is based on ISO/IEC 19770-2:2015 2:2015 that provides a complementary XML schema definition (XSD) for Software Identification (SWID) tags.  CoSWID supports the same features as the corresponding XML SWID tags.  The CoSWID specification also includes more structured extensibility features and reduces a few of ambiguities that are not explicitly resolved in the ISO XSD.  In this document, these extensibility features (extension points) are used to add attributes to the CoSWID specification.  The new attributes allow for the use of CoSWID as Reference Integrity Measurements (RIM).  There are four sets of RIM features defined in this specification. 1.) attributes that support RIM manifests for Measured Boot, 2.) attributes that support package manager managed structures, 3.) attributes that allow for OID to be used in the description of Reference Integrity Measurements, and 4.) attributes for object trees in support of Target Environments that are chained via Layered Attestation.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-birkholz-rats-coswid-rim-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-birkholz-rats-coswid-rim-01.txt' />
</reference>



<reference anchor="I-D.birkholz-rats-uccs">
<front>
<title>A CBOR Tag for Unprotected CWT Claims Sets</title>

<author initials='H' surname='Birkholz' fullname='Henk Birkholz'>
    <organization />
</author>

<author initials='J' surname='O&apos;Donoghue' fullname='Jeremy O&apos;Donoghue'>
    <organization />
</author>

<author initials='N' surname='Cam-Winget' fullname='Nancy Cam-Winget'>
    <organization />
</author>

<author initials='C' surname='Bormann' fullname='Carsten Bormann'>
    <organization />
</author>

<date month='December' day='2' year='2020' />

<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-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-birkholz-rats-uccs-02.txt' />
</reference>


<reference anchor="SCALE" >
  <front>
    <title>Improving Scalability for Remote Attestation</title>
    <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
      <organization></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></organization>
    </author>
    <author initials="M." surname="Zohar" fullname="Mimi Zohar">
      <organization></organization>
    </author>
    <author initials="R." surname="Sailer" fullname="Reiner Sailer">
      <organization></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></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></organization>
    </author>
    <author initials="J." surname="Guttman" fullname="Joshua Guttman">
      <organization></organization>
    </author>
    <author initials="P." surname="Loscocco" fullname="Peter Loscocco">
      <organization></organization>
    </author>
    <author initials="A." surname="Herzog" fullname="Amy Herzog">
      <organization></organization>
    </author>
    <author initials="J." surname="Millen" fullname="Jonathan Millen">
      <organization></organization>
    </author>
    <author initials="B." surname="O'Hanlon" fullname="Brian O'Hanlon">
      <organization></organization>
    </author>
    <author initials="J." surname="Ramsdell" fullname="John Ramsdell">
      <organization></organization>
    </author>
    <author initials="A." surname="Segall" fullname="Ariel Segall">
      <organization></organization>
    </author>
    <author initials="J." surname="Sheehy" fullname="Justin Sheehy">
      <organization></organization>
    </author>
    <author initials="B." surname="Sniffen" fullname="Brian Sniffen">
      <organization></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></organization>
    </author>
    <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
      <organization></organization>
    </author>
    <author initials="S." surname="Katzenbeisser" fullname="Stefan Katzenbeisser">
      <organization></organization>
    </author>
    <author initials="C." surname="Eckert" fullname="Claudia Eckert">
      <organization></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></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="TEE" >
  <front>
    <title>TEE System Architecture v1.1, GPD_SPE_009</title>
    <author >
      <organization>Global Platform</organization>
    </author>
    <date year="2017"/>
  </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="IEEE802.11P" >
  <front>
    <title>802.11P-2010 - IEEE Standard for Information technology-- Local and metropolitan area networks-- Specific requirements-- Part 11: Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications Amendment 6: Wireless Access in Vehicular Environments</title>
    <author >
      <organization>IEEE Computer Society</organization>
    </author>
    <date year="2010"/>
  </front>
  <seriesInfo name="IEEE" value="Std 802.11P"/>
</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>


<section anchor="rest" title="REST Realization">

<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="RFC7320"/>.
As can be derived from the URI, the actual retrieval is via one of the HTTPs
(<xref target="RFC7230"/>, <xref target="RFC7540"/>) 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" title="SNMP Realization">

<t>SNMPv3 <xref target="STD62"></xref> <xref target="RFC3411"/> 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>

<t><list style="numbers">
  <t>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.</t>
  <t>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.</t>
  <t>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).</t>
</list></t>

<section anchor="structure-of-tuda-mib" title="Structure of TUDA MIB">

<t>The following table summarizes the object groups, tables and their indexes, and conformance requirements for the TUDA MIB:</t>

<figure><artwork><![CDATA[
|-------------|-------|----------|----------|----------|
| Group/Table | Cycle | Instance | Fragment | Required |
|-------------|-------|----------|----------|----------|
| General     |       |          |          | x        |
| AIKCert     | x     | x        | x        |          |
| TSACert     | x     | x        | x        |          |
| SyncToken   | x     |          | x        | x        |
| Restrict    | x     |          |          | x        |
| Measure     | x     | x        |          |          |
| VerifyToken | x     |          |          | x        |
| SWIDTag     | x     | x        | x        |          |
|-------------|-------|----------|----------|----------|
]]></artwork></figure>

<section anchor="cycle-index" title="Cycle Index">

<t>A tudaV1&lt;Group&gt;CycleIndex is the:</t>

<t><list style="numbers">
  <t>first index of a row (element instance or element fragment) in the
tudaV1&lt;Group&gt;Table;</t>
  <t>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</t>
  <t>binding in the tudaV1TrapV2Cycles notification for directed polling.</t>
</list></t>

</section>
<section anchor="instance-index" title="Instance Index">

<t>A tudaV1&lt;Group&gt;InstanceIndex is the:</t>

<t><list style="numbers">
  <t>second index of a row (element instance or element fragment) in the
tudaV1&lt;Group&gt;Table; except for</t>
  <t>a row in the tudaV1SyncTokenTable (that has only one instance per cycle).</t>
</list></t>

</section>
<section anchor="fragment-index" title="Fragment Index">

<t>A tudaV1&lt;Group&gt;FragmentIndex is the:</t>

<t><list style="numbers">
  <t>last index of a row (always an element fragment) in the
tudaV1&lt;Group&gt;Table; and</t>
  <t>accomodation for SNMP transport mapping restrictions for large string
elements that require fragmentation.</t>
</list></t>

</section>
</section>
<section anchor="relationship-to-host-resources-mib" title="Relationship to Host Resources MIB">

<t>The General group in the TUDA MIB is analogous to the System group in the
Host Resources MIB <xref target="RFC2790"></xref> 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"></xref>.</t>

</section>
<section anchor="relationship-to-entity-mib" title="Relationship to Entity MIB">

<t>The General group in the TUDA MIB is analogous to the Entity General group in
the Entity MIB v4 <xref target="RFC6933"></xref> 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"></xref>.</t>

</section>
<section anchor="relationship-to-other-mibs" title="Relationship to Other MIBs">

<t>The General group in the TUDA MIB is analogous to the System group in MIB-II
<xref target="RFC1213"></xref> and the System group in the SNMPv2 MIB <xref target="RFC3418"></xref> and provides
context information for the TUDA attestation process.</t>

</section>
<section anchor="definition-of-tuda-mib" title="Definition of TUDA MIB">

<figure><artwork type="SMIv2"><![CDATA[
<CODE BEGINS>
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
<CODE ENDS>
]]></artwork></figure>

</section>
</section>
<section anchor="yang" title="YANG Realization">

<figure><artwork type="YANG"><![CDATA[
<CODE BEGINS>
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.";
      }
    }

  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="realization-with-tpm-functions" title="Realization with TPM functions">

<section anchor="tpm-functions" title="TPM Functions">

<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" title="Tick-Session and Tick-Stamp">

<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" title="Platform Configuration Registers (PCRs)">

<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" title="PCR restricted Keys">

<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" title="CertifyInfo">

<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" title="IE Generation Procedures for TPM 1.2">

<section anchor="aik" title="AIK and AIK Certificate">

<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 title="TUDA-Cert element in CDDL" anchor="cert-token"><artwork type="CDDL"><![CDATA[
TUDA-Cert = [AIK-Cert, TSA-Cert]; maybe split into two for SNMP
AIK-Cert = Cert
TSA-Cert = Cert
]]></artwork></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 title="Creating the TUDA-Cert element" anchor="make-cert-token"><artwork 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)
| }
]]></artwork></figure>

</section>
<section anchor="synchronization-token" title="Synchronization Token">

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

<t><list style="symbols">
  <t>The TPM creates a TickStampBlob using the AIK</t>
  <t>This TickstampBlob is used as nonce to the Timestamp of the TSA</t>
  <t>Another TickStampBlob with the AIK is created using the TSA’s Timestamp a nonce</t>
</list></t>

<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 title="TUDA-Sync element in CDDL" anchor="sync-token"><artwork 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
]]></artwork></figure>

<t>Required TPM functions:</t>

<!-- TPM_TickStampBlob: -->
<!-- : explain various inputs and applications -->

<figure title="Creating the Sync-Token element" anchor="make-sync-token"><artwork 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 */
| }

]]></artwork></figure>

</section>
<section anchor="restrictioninfo" title="RestrictionInfo">

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

<t><list style="symbols">
  <t>PCR list,</t>
  <t>the newly created restricted public key, and</t>
  <t>the certificate.</t>
</list></t>

<figure title="TUDA-Key element in CDDL" anchor="key-token"><artwork 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
]

]]></artwork></figure>

<t>Required TPM functions:</t>

<figure title="Creating the pubkey" anchor="make-pubkey"><artwork 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 */
| }
]]></artwork></figure>

</section>
<section anchor="mlog" title="Measurement Log">

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

<figure><artwork 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]
]]></artwork></figure>

</section>
<section anchor="impa" title="Implicit Attestation">

<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 title="TUDA-Verify element in CDDL" anchor="verify-token"><artwork type="CDDL"><![CDATA[
TUDA-Verifytoken = TickStampBlob-Output
]]></artwork></figure>

<t>Required TPM functions:</t>

<figure title="Creating the Verify Token" anchor="make-verifytoken"><artwork type="pseudocode"><![CDATA[
| imp_att = TPM_TickStampBlob(
|     keyHandle = restrictedKey_Handle,     /*TPM_KEY_HANDLE*/
|     antiReplay = dummyNonce,              /*TPM_NONCE*/
|     digestToStamp = dummyDigest)          /*TPM_DIGEST*/
|
| VerifyToken = imp_att
]]></artwork></figure>

</section>
<section anchor="attestation-verification-approach" title="Attestation Verification Approach">

<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 title="Verification of Certificates" anchor="verify-Certs"><artwork type="pseudocode"><![CDATA[
| TSA_pub = verifyCert(TSA-CA, Cert.TSA-Cert)
| AIK_pub = verifyCert(AIK-CA, Cert.AIK-Cert)
]]></artwork></figure>

<figure title="Verification of Synchronization Token" anchor="verify-sync"><artwork 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
]]></artwork></figure>

<figure title="Verification of Restriction Info" anchor="verify-restrictioninfo"><artwork 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)
]]></artwork></figure>

<figure title="Verification of Measurement Log" anchor="verify-measurementlog"><artwork 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++]
]]></artwork></figure>

<figure title="Verification of Attestation Token" anchor="verify-attestation"><artwork 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]
]]></artwork></figure>

</section>
</section>
<section anchor="tpm2" title="IE Generation Procedures for TPM 2.0">

<t>The pseudo code below includes general operations that are conducted as specific TPM commands:</t>

<t><list style="symbols">
  <t>hash() : description TBD</t>
  <t>sig() : description TBD</t>
  <t>X.509-Certificate() : description TBD</t>
</list></t>

<t>These represent the output structure of that command in the form of a byte string value.</t>

<section anchor="aik2" title="AIK and AIK Certificate">

<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 title="TUDA-Cert element for TPM 2.0" anchor="cert-token2"><artwork type="pseudo"><![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)
]]></artwork></figure>

</section>
<section anchor="synchronization-token-1" title="Synchronization Token">

<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 title="TUDA-Sync element for TPM 2.0" anchor="sync-token2"><artwork type="pseudo"><![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
                            ]
                           )
]
]]></artwork></figure>

</section>
<section anchor="measurement-log" title="Measurement Log">

<t>The creation procedure is identical to <xref target="mlog"/>.</t>

<figure title="TUDA-Log element for TPM 2.0" anchor="log-token2"><artwork type="pseudo"><![CDATA[
Measurement-Log = [
  * [ EventName,
      PCR-Num,
      Event-Hash ]
]
]]></artwork></figure>

</section>
<section anchor="explicit-time-based-attestation" title="Explicit time-based Attestation">

<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 title="TUDA-Attest element for TPM 2.0" anchor="attest-token2"><artwork type="pseudo"><![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
                                 )
]]></artwork></figure>

</section>
<section anchor="sync-proof" title="Sync Proof">

<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 title="TUDA-Proof element for TPM 2.0" anchor="prrof-token2"><artwork type="pseudo"><![CDATA[
TUDA-SyncProof = sig(AIK-Key,
                     TimeInfo = [
                       time,
                       resetCount,
                       restartCount
                     ]
                    ),
]]></artwork></figure>

</section>
</section>
</section>
<section numbered="no" anchor="acknowledgements" title="Acknowledgements">

<!--  LocalWords:  TPM AIK TUDA uptime PCR Verifier Attester CoRE RTC
 -->
<!--  LocalWords:  RESTCONF pseudocode disambiguates TSA PCRs
 -->
<!--  LocalWords:  Attester's retransmitting Verifiers Timestamp
 -->
<!--  LocalWords:  TickStampBlob
 -->

</section>


  </back>

<!-- ##markdown-source:
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
urMntsABAA==

-->

</rfc>

