<?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.2.8 -->

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

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

<rfc ipr="trust200902" docName="draft-birkholz-i2nsf-tuda-02" category="info">

  <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="2018" month="May" day="03"/>

    <area></area>
    <workgroup></workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This memo documents the method and bindings used to conduct time-based uni-directional attestation between distinguishable endpoints over the network.</t>



    </abstract>


  </front>

  <middle>


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

<t>Remote attestation (RA) describes the attempt to determine and appraise properties, such as integrity and trustworthiness, of an endpoint — the Attestor — over a network to another endpoint — the Verifier — without direct access. Typically, this kind of appraisal is based on integrity measurements of software components right before they are loaded as software instances on the Attestor. In general, attestation procedures are utilizing a hardware root of trust (RoT). The TUDA protocol family uses hash values of all started software components that are stored (extended into) a Trust-Anchor (the RoT) implemented as a Hardware Security Module (e.g. a Trusted Platform Module or similar) and are reported via a signature over those measurements.</t>

<t>This draft introduces the concept of including the exchange of evidence — created via a hardware RoT containing a shielded secret that is inaccessible to the user — in order to increase the confidence in a communication peer that is supposed to be a Trusted System <xref target="RFC4949"/>. In consequence, this document introduces the term forward authenticity.</t>

<t><list style="hanging">
  <t hangText='Forward Authenticity (FA):'>
  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. FA is achieved by timely recording of assessments of the authenticity from entities (via “audit logs” during “audit sessions”) that are authorized for this purpose, in a time frame much shorter than that expected for the compromise of the long-term keys.</t>
</list></t>

<t>Forward Authenticity enables new level of guarantee and can be included in the basically every protocol, such as ssh, router advertisements, link layer neighbor discover, or even ICMP echo.</t>

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

<t>In essence, remote attestation (RA) is composed of three activities. The following definitions are derived from the definitions presented in <xref target="PRIRA"/> and <xref target="TCGGLOSS"/>.</t>

<t><list style="hanging">
  <t hangText='Attestation:'>
  The creation of one ore more claims about the properties of an Attestor, such that the claims can be used as evidence.</t>
  <t hangText='Conveyance:'>
  The transfer of evidence from the Attestor to the Verifier via an interconnect.</t>
  <t hangText='Verification:'>
  The appraisal of evidence by evaluating it against declarative guidance.</t>
</list></t>

<t>With TUDA, the claims that compose the evidence are signatures over trustworthy integrity measurements created by leveraging a hardware RoT. The evidence is appraised via corresponding signatures over reference integrity measurements (RIM, represented, for example via <xref target="I-D.ietf-sacm-coswid"/>).</t>

<t>Protocols that facilitate Trust-Anchor based signatures in order to provide
RATS are usually bi-directional challenge/response protocols, such as 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 recentness — the freshness (see fresh in <xref target="RFC4949"/>) — of the attestation information. The corresponding interaction model tightly couples the three activities of creating, transferring and appraising evidence.</t>

<t>The Time-Based Uni-directional Attestation family of protocols — TUDA — described in this document can decouple the three activities RATS are composed of. As a result, TUDA provides additional capabilities, such as:</t>

<t><list style="symbols">
  <t>remote attestation for Attestors that might not always be able to reach the Internet by enabling the verification of past states,</t>
  <t>secure audit logs by combining the evidence created via TUDA with integrity measurement logs that represent a detailed record of corresponding past states,</t>
  <t>an uni-directional interaction model that can traverse “diode-like” network security functions (NSF) or can be leveraged in RESTful architectures (e.g. CoAP <xref target="RFC7252"/>), analogously.</t>
</list></t>

</section>
<section anchor="evidence-creation" title="Evidence Creation">

<t>TUDA is a family of protocols that bundles results from specific attestation activities. The attestation activities of TUDA are based on a hardware Root of Trust that provides the following capabilities:</t>

<t><list style="symbols">
  <t>Platform Configuration Registers (PCR) that store measurements consecutively (corresponding terminology: “to extend a PCR”) and represent the chain of measurements as a single measurement value (“PCR value”),</t>
  <t>Restricted Signing Keys (RSK) that can only be accessed, if a specific signature about measurements can be provided as authentication, and</t>
  <t>a dedicated source of (relative) time, e.g. a tick counter.</t>
</list></t>

</section>
<section anchor="evidence-appraisal" title="Evidence Appraisal">

<t>To appraise the evidence created by an Attestor, the Verifier requires corresponding Reference Integrity Measurements (RIM). Typically, a set of RIM are bundled in a RIM-Manifest (RIMM). The scope of a manifest encompasses, e.g., a platform, a device, a computing context, or a virtualised function. In order to be comparable, the hashing algorithms used by the Attestor to create the integrity measurements have to match the hashing algorithms used to create the corresponding RIM that are used by the Verifier to appraise the integrity evidence.</t>

</section>
<section anchor="activities-and-actions" title="Activities and Actions">

<t>Depending on the platform (i.e. one or more computing contexts including a dedicated hardware RoT), a generic RA activity results in platform-specific actions that have to be conducted. In consequence, there are multiple specific operations and data models (defining the input and output of operations). Hence, specific actions are are not covered by this document. Instead, the requirements on operations and the information elements that are the input and output to these operations are illustrated using pseudo code in Appendix C and D.</t>

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

<t>Both the attestation and the verification activity of TUDA also require a trusted Time Stamp Authority (TSA) as an additional third party next to the Attestor and the Verifier.
The protocol uses a Time Stamp Authority based on <xref target="RFC3161"/>. The combination of the local source of time provided by the hardware RoT (located on the Attestor) and the Time Stamp Tokens provided by the TSA (to both the Attestor and the Verifier) enable the attestation and verification of an appropriate freshness of the evidence conveyed by the Attestor — without requiring a challenge/response interaction model that uses a nonce to ensure the freshness.</t>

<t>Typically, the verification activity requires declarative guidance (representing desired or compliant endpoint characteristics in the form of RIM, see above) to appraise the individual integrity measurements the conveyed evidence is composed on. The acquisition or representation (data models) of declarative guidance as well as the corresponding evaluation methods are out of the scope of this document.</t>

</section>
<section anchor="information-elements-and-conveyance" title="Information Elements and Conveyance">

<t>TUDA defines a set of information elements (IE) that are created and stored on the Attestor and are intended to be transferred to the Verifier in order to enable appraisal. Each TUDA IE:</t>

<t><list style="symbols">
  <t>is 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="I-D.greevenbosch-appsawg-cbor-cddl"/></t>
  <t>that requires a certain freshness is only created/updated when out-dated, which reduces the overall resources required from the Attestor, including the utilization of the hardware root of trust. The IE that have to be created are determined by their age or by specific state changes on the Attestor (e.g. state changes due to a reboot-cycle)</t>
  <t>is only 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 can be reused for multiple remote attestation procedures in the limits of its corresponding freshness-window, further reducing the load imposed on the Attestor and its corresponding hardware RoT.</t>
</list></t>

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

<t>The Time-Based Uni-directional Attestation family of protocols 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="hardware-dependencies" title="Hardware Dependencies">

<t>The binding of the attestation scheme used by TUDA to generate the TUDA IE is specific to the methods provided by the hardware RoT used (see above). In this document,expositional text and pseudo-code that is provided as a reference to instantiate the TUDA IE is based on TPM 1.2 and TPM 2.0 operations. The corresponding TPM commands are specified in <xref target="TPM12"/> and <xref target="TPM2"/>. The references to TPM commands and corresponding pseudo-code only serve as guidance to enable a better understanding of the attestation scheme and is intended to encourage the use of any appropriate hardware RoT or equivalent set of functions available to a CPU or Trusted Execution Environment <xref target="TEE"/>.</t>

</section>
<section anchor="requirements-notation" title="Requirements Notation">

<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 RFC
2119, BCP 14 <xref target="RFC2119"/>.</t>

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

<t>There are significant differences between conventional bi-directional attestation and TUDA regarding both the information elements conveyed between Attestor and Verifier and the time-frame, in which an attestation can be considered to be fresh (and therefore trustworthy).</t>

<t>In general, remote attestation using a bi-directional communication scheme includes sending a nonce-challenge within a signed attestation token. 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 the attestation response, 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 platform’s state by creating evidence that a certain key is bound to that state. The latter provides proof that the platform 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 trustworthy). In consequence, each TUDA IE that composes data in motion is based on different methods of creation.</t>

<t>The freshness properties of a challenge-response based protocol define the point-of-time of attestation 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 Attestor.</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 Attestor and the TSA. The time between the two tickstamps acquired via the hardware RoT define the scope of the maximum drift (“left” and “right” in respect to the timeline) to the TSA timestamp, and</t>
  <t>the drift of clocks included in the hardware 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 TSA and the hardware RoT. In consequence, TUDA evidence can even serve as proof of integrity in audit logs with precise point-in-time guarantees, in contrast to classical attestations.</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 CoMI.</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>

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

<t>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.</t>

<section anchor="universal-terms" title="Universal Terms">

<t><list style="hanging">
  <t hangText='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.</t>
  <t hangText='Claim:'>
  A piece of information asserted about a subject <xref target="RFC4949"/>. A claim is represented as a name/value pair consisting of a Claim Name and a Claim Value <xref target="RFC7519"/>.</t>
  <t>In the context of SACM, a claim is also specialized as an attribute/value pair that is intended to be related to a statement <xref target="I-D.ietf-sacm-terminology"/>.</t>
  <t hangText='Endpoint Attestation:'>
  the creation of evidence on the Attestor that provides proof of a set of the endpoints’s integrity measurements. This is done by digitally signing a set of PCRs using an AIK shielded by the hardware RoT.</t>
  <t hangText='Endpoint Characteristics:'>
  the context, composition, configuration, state, and behavior of an endpoint.</t>
  <t hangText='Evidence:'>
  a trustworthy set of claims about an endpoint’s characteristics.</t>
  <t hangText='Identity:'>
  a set of claims that is intended to be related to an entity.</t>
  <t hangText='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).</t>
  <t hangText='Reference Integrity Measurements:'>
  Signed measurements about the characteristics of an endpoint’s characteristics that are provided by a vendor and are intended to be used as declarative guidance <xref target="I-D.ietf-sacm-terminology"/> (e.g. a signed CoSWID).</t>
  <t hangText='Trustworthy:'>
  the qualities of an endpoint that guarantee a specific behavior and/or endpoint characteristics defined by declarative guidance.
Analogously, trustworthiness is the quality of being trustworthy with respect to declarative guidance.
Trustworthiness is not an absolute property but defined with respect to an entity, corresponding declarative guidance, and has a scope of confidence.</t>
  <t>Trustworthy Endpoint: an endpoint that guarantees trustworthy behavior and/or composition (with respect to certain declarative guidance and a scope of confidence).</t>
  <t>Trustworthy Statement: evidence that is trustworthy conveyed by an endpoint that is not necessarily trustworthy.</t>
</list></t>

</section>
<section anchor="roles" title="Roles">

<t><list style="hanging">
  <t hangText='Attestor:'>
  the endpoint that is the subject of the attestation to another endpoint.</t>
  <t hangText='Verifier:'>
  the endpoint that consumes the attestation of another endpoint to conduct a verification.</t>
  <t hangText='TSA:'>
  a Time Stamp Authority <xref target="RFC3161"/></t>
</list></t>

<section anchor="general-types" title="General Types">

<t><list style="hanging">
  <t hangText='Byte:'>
  the now customary synonym for octet</t>
  <t hangText='Cert:'>
  an X.509 certificate represented as a byte-string</t>
</list></t>

</section>
<section anchor="rot-specific-terms" title="RoT specific terms">

<t><list style="hanging">
  <t hangText='PCR:'>
  a Platform Configuration Register that is part of a hardware root of trust 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>
<section anchor="certificates" title="Certificates">

<t><list style="hanging">
  <t hangText='TSA-CA:'>
  the Certificate Authority that provides the certificate for the TSA represented as a Cert</t>
  <t hangText='AIK-CA:'>
  the Certificate Authority that provides the certificate for the attestation identity key of the TPM. This is the client platform credential for this protocol. It is a placeholder for a specific CA and AIK-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="time-based-uni-directional-attestation" title="Time-Based Uni-Directional Attestation">

<t>A Time-Based Uni-Directional Attestation (TUDA) consists of the
following seven information elements. They are used to gain assurance of the Attestor’s
platform configuration at a certain point in time:</t>

<t><list style="hanging">
  <t hangText='TSA Certificate:'>
  The certificate of the Time Stamp Authority that is used in a subsequent synchronization
protocol token. This certificate is signed by the TSA-CA.</t>
  <t hangText='AIK Certificate:'>
  A certificate about the Attestation Identity Key (AIK) used. This may or may not
also 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 for attestations are the relative timestanps provided by the hardware RoT. In
order to put attestations 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 Attestor. To do so, a synchronization
protocol is run with a Time Stamp Authority (TSA).</t>
  <t hangText='Restriction Info:'>
  The attestation relies on the capability of the hardware RoT 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 corresponding
signing capabilities of the hardware RoT are used. It creates a signed certificate using the AIK about
the newly created restricted key.</t>
  <t hangText='Measurement Log:'>
  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
(in the form of RIM available to the Verifier) exists and no measurement log is required.</t>
  <t hangText='Implicit Attestation:'>
  The actual attestation is then based upon a signed timestamp provided by the hardware RoT using the restricted
temporary key that was certified in the steps above. The signed timestamp provides evidence that at this point in time (with respect to the relative time of the hardware RoT)
a certain configuration existed (namely the PCR values associated
with the restricted key). Together 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 Attestor, a Verifier can request the
reference hashes (RIM, which are often referred to as golden measurements) of all started software components
to compare them with the entries in the 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 Attestor using the Concise SWID representation <xref target="I-D.ietf-sacm-coswid"/> and bundled into a CBOR array (a RIM Manifest). 
Ideally, the reference hashes include a signature created by the manufacturer of the software to prove their integrity.</t>
</list></t>

<t>These information elements could 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 Attestor endpoint, 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 the whole
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 endpoint can be in various states and have various information associated
 with it during its life cycle. For TUDA, a subset of the states 
(which can include associated information) that an endpoint and its hardware root of trust can be in, is
 important to the attestation process. States can be:</t>

<t><list style="symbols">
  <t>persistent, even after a hard reboot. This includes certificates
that are associated with the endpoint itself or with services it relies on.</t>
  <t>volatile to a degree, because they change at the beginning of each boot cycle.
This includes the capability of a hardware RoT to provide relative time which provides the basis for the
synchronization token and implicit attestation—and which can reset after an endpoint is powered off.</t>
  <t>very volatile, because they change during an uptime cycle
(the period of time an endpoint is powered on, starting with its boot).
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 Attestor and the Verifier.</t>

<t>There are three kinds of events that require a renewed attestation:</t>

<t><list style="symbols">
  <t>The Attestor completes a boot-cycle</t>
  <t>A relevant PCR changes</t>
  <t>Too much time has passed since the last attestation statement</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 hardware RoT.
For usage scenarios, in which the device would periodically
push information to be used in an audit-log, a time-frame of approximately one update
per minute should be sufficient in most cases. For those usage scenarios, where
Verifiers request (pull) a fresh attestation statement, an implementation could use the hardware RoT
continuously to always present the most freshly created results. To save some
utilization of the hardware RoT for other purposes, however, a time-frame of once per ten
seconds is recommended, which would typically leave about 80% of utilization 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

-->

<figure title="Example sequence of events" anchor="SequenceExample"><artwork><![CDATA[
Attestor                                                 Verifier
   |                                                         |
 Boot                                                        |
   |                                                         |
 Create Sync-Token                                           |
   |                                                         |
 Create Restricted Key                                       |
 Certify Restricted Key                                      |
   |                                                         |
   | AIK-Cert ---------------------------------------------> |
   | Sync-Token -------------------------------------------> |
   | Certify-Info -----------------------------------------> |
   | Measurement Log --------------------------------------> |
   | Attestation ------------------------------------------> |
   |                                           Verify Attestation
   |                                                         |
   |       <Time Passed>                                     |
   |                                                         |
   | Attestation ------------------------------------------> |
   |                                           Verify Attestation
   |                                                         |
   |       <Time Passed>                                     |
   |                                                         |
 PCR-Change                                                  |
   |                                                         |
 Create Restricted Key                                       |
 Certify Restricted Key                                      |
   |                                                         |
   | Certify-Info -----------------------------------------> |
   | Measurement Log --------------------------------------> |
   | Attestation ------------------------------------------> |
   |                                           Verify Attestation
   |                                                         |
 Boot                                                        |
   |                                                         |
 Create Sync-Token                                           |
   |                                                         |
 Create Restricted Key                                       |
 Certify Restricted Key                                      |
   |                                                         |
   | Sync-Token -------------------------------------------> |
   | Certify-Info -----------------------------------------> |
   | Measurement Log --------------------------------------> |
   | Attestation ------------------------------------------> |
   |                                           Verify Attestation
   |                                                         |
   |       <Time Passed>                                     |
   |                                                         |
   | Attestation ------------------------------------------> |
   |                                           Verify Attestation
   |                                                         |
]]></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: -->

<t>content TBD</t>

</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="change-log" title="Change Log">

<t>Changes from version 04 to I2NSF related document version 00:
* Refactored main document to be more technology agnostic
* Added first draft of procedures for TPM 2.0
* Improved content consistency and structure of all sections</t>

<t>Changes from version 03 to version 04:</t>

<t><list style="symbols">
  <t>Refactoring of Introduction, intend, scope and audience</t>
  <t>Added first draft of Sync Base Prootoll section illustrated background for interaction with TSA</t>
  <t>Added YANG module</t>
  <t>Added missing changelog entry</t>
</list></t>

<t>Changes from version 02 to version 03:</t>

<t><list style="symbols">
  <t>Moved base concept out of Introduction</t>
  <t>First refactoring of Introduction and Concept</t>
  <t>First restructuring of Appendices and improved references</t>
</list></t>

<t>Changes from version 01 to version 02:</t>

<t><list style="symbols">
  <t>Restructuring of Introduction, highlighting conceptual prerequisites</t>
  <t>Restructuring of Concept to better illustrate differences to hand-shake based attestation and deciding factors regarding freshness properties</t>
  <t>Subsection structure added to Terminology</t>
  <t>Clarification of descriptions of approach (these were the FIXMEs)</t>
  <t>Correction of RestrictionInfo structure: Added missing signature member</t>
</list></t>

<t>Changes from version 00 to version 01:</t>

<t>Major update to the SNMP MIB and added a table for the Concise SWID profile Reference Hashes that provides additional information to be compared with the measurement logs.</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>




    </references>

    <references title='Informative References'>





<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="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="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="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="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="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.greevenbosch-appsawg-cbor-cddl">
<front>
<title>Concise data definition language (CDDL): a notational convention to express CBOR data structures</title>

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

<author initials='C' surname='Vigano' fullname='Christoph Vigano'>
    <organization />
</author>

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

<date month='July' day='3' year='2017' />

<abstract><t>This document proposes a notational convention to express 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.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-greevenbosch-appsawg-cbor-cddl-11' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-greevenbosch-appsawg-cbor-cddl-11.txt' />
</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='10' year='2017' />

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



<reference anchor="I-D.ietf-core-comi">
<front>
<title>CoAP Management Interface</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>

<date month='December' day='1' year='2017' />

<abstract><t>This document describes a network management interface for constrained devices and networks, called CoAP Management Interface (CoMI).  The Constrained Application Protocol (CoAP) is used to access datastore and data node resources specified in YANG, or SMIv2 converted to YANG.  CoMI uses the YANG to CBOR mapping and converts YANG identifier strings to numeric identifiers for payload size reduction.  CoMI 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-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-comi-02.txt' />
</reference>



<reference anchor="I-D.ietf-sacm-coswid">
<front>
<title>Concise Software Identifiers</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='March' day='21' year='2018' />

<abstract><t>This document defines a concise representation of ISO/IEC 19770-2:2015 Software Identification (SWID) tags that are interoperable with the XML schema definition of ISO/IEC 19770-2:2015 and augmented for application in Constrained-Node Networks.  Next to the inherent capability of SWID tags to express arbitrary context information, Concise SWID (CoSWID) tags support the definition of additional semantics via well-defined data definitions incorporated by extension points.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-sacm-coswid-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-coswid-05.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="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="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., Trusted Computing Group</title>
    <author >
      <organization></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="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="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="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='BCP' value='190'/>
<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="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="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="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="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="IEEE802.1AR" >
  <front>
    <title>802.1AR-2009 - IEEE Standard for Local and metropolitan area networks - Secure Device Identity</title>
    <author >
      <organization>IEEE Computer Society</organization>
    </author>
    <date year="2009"/>
  </front>
  <seriesInfo name="IEEE" value="Std 802.1AR"/>
</reference>
<reference anchor="IEEE1609" >
  <front>
    <title>1609.4-2016 - IEEE Standard for Wireless Access in Vehicular Environments (WAVE) -- Multi-Channel Operation</title>
    <author >
      <organization>IEEE Computer Society</organization>
    </author>
    <date year="2016"/>
  </front>
  <seriesInfo name="IEEE" value="Std 1609.4"/>
</reference>


    </references>


<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="I-D.greevenbosch-appsawg-cbor-cddl"/>
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    "201710300000Z" -- 30 October 2017
    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 (2017)."

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

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

    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 (2017).";

  revision "2017-10-30" {
    description
     "Fifth version, published as draft-birkholz-tuda-04.";
    reference
     "draft-birkholz-tuda-04";
  }
  revision "2017-01-09" {
    description     
     "Fourth version, published as draft-birkholz-tuda-03.";
    reference
     "draft-birkholz-tuda-03";
  }
  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 Attestor CoRE RTC
 -->
<!--  LocalWords:  RESTCONF pseudocode disambiguates TSA PCRs
 -->
<!--  LocalWords:  Attestor's retransmitting Verifiers Timestamp
 -->
<!--  LocalWords:  TickStampBlob
 -->

</section>


  </back>

<!-- ##markdown-source:
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
/HuN8z/a6xXz7/XEIdamvxGAMZtGt4Cg1wDBk95uz8JA75lNCE82wTCi5JLo
NkDsFkDgD8rWa1scioLxwIFv7fWe9p62xTI8y1q9tjCCAv/46IgO16dIPyz5
BAuTV6PhqZquEDe7OIj581g5QK2fm4foOUMMLEfa1kPs8VJ8H/8ntEbGD7iV
7bvaclS9mJ6NJzWOsuAtbUXJ87+DEPybZixKZVGKRf9vfn8wGI7HovAjq16g
N70dcy9VZ2sT0Qz09zr54wJ2oQxRVJnXPtiOwALOFtPM1kudxcF5UuZrPKxn
Oq7tzOGVoNT90H/DuRrMzNGQxyocQLB+yavfVYqBjVa9DXU4/YHPAIXDNyK2
pDSJ1nj0j2Frt9vde/Kk3f7c2FZgVbRprRt3VNTT1MHEWCbIpWIIHZVXqVco
iygXxEmJUmYsddU9iiGsrjJNMXZU7eyUgaEHGPAsxsABlLTmOgx6g9Su0s+1
2NnBvWnauNJJ0zUf7aNme3tvedT2bLJQ49yPo1YqbonZQGHcdPasfVOH8POe
Io3hXg262Ne2+fwM/+vtECwbcfxKTOy+Q0xsqqIwTnKf41JYSuZOeOwrDypg
Uju7sjq0YmBo04rrCISg3rzi32qVMeeG8QXxuHDs3bTU0dHBUIFaXnLhR7dY
ePHjtHXcwDc3dz2oNYfeISlFbFVUYheFLk1Y18XcDYsxEBU2fkMf17e9XR93
Zdv1oc+Xuz+UwiA4hYF7NbAnnmcjCZr5RasHkqr3+JvHzx49ffxNjbz6DJSI
ZozPydzGEU61UcpUqCm0a9mnxnMeb8H2NNfLqkzPjZfYmQE1DL59Gxap1nQT
g2TyrOOSLlHdo407DGczSri45aYdY65jEDV20V+RpQ1UFUK47szoe8sWtntw
rSb1zcakGP9B7wFXzwIaQzHFb6z9nyfi6/WKP/I2rRCP8oGe4m2jQf+L7Xqd
pHDZwj3a9TfJ5W1P65fB2qMarBFj3Igsm08W2nhvd+/x51fH+45QpYQtnVO1
ScJuo+M6mHjsKrq6DLut6NrZCQoR2yq6Dp7VOPdD0S3Vm/99FV2N4V4Nuu6k
6Kq+v72iW0Zrk6KrV7xXs+KtFd0vv8pNiu6mpdYpujb536S5qrbbKrqq+Y2K
rkNSjqLroH4LRbeyGANRswJat6gt+9xK0VV9bqvoVpd0jyRno6JbpsKNiu4W
XO8T9FyHv39WPdehzjom+cfSc7fYs7KeW+7SqOdCw38VPdfZ9TpB8YfTczds
/JfBWp3+9YfRczcJ2G30XAcTJT23uI9sa7p2Oq1Cxbaa7mMb02ac+6HrWrfZ
fycFt0BsrxZPmn/fJ1SZpE2pSvzXYIvy9/HKTooE26I66rr5Yf/vVpL/Kl3H
cnYrqXgbtO7VovVOtoPp/dtbDxb2mwyHYsmPape8tfHwWyxzk/nQsNY6y8Fl
JzcZA5VDtXWHG+2HEmE5FkRpB7awIWqWpd436/b1i9uyT8WK2KJPxYrYaEPU
Leke6SWNVoRFjJsNiAZR8glWQ0lWfla7oUSTm2XPvdutWtth806VzYbi3kOF
4RSdWkfHE7HlJhlB/SX3qV6Y/eG0/fqt+lJIqxeHfxhlv0EcbqPnlxBR0vTL
nzi09X37FpzCxrb6/hMb3Xqc+6Hul1f8eyn9Bru9OlzdSTfVnX8T1dR8ybkW
qU0Kqln1Xt2qt1ZPf4OVlrVTW1hsXG6djuocgUYF0t18R390MbSF+lgzo/pp
Vut0n6pveKNaVzPVPZI/I0fqVHaONrlem9vIKT5Bp3P54WdVFVwyURRU3qd7
JvVi52g5Ym/jOdtG+Ln4KKUtlmr+2qLPvsetULKt6HvqJFTzOPdD8pVrHP9O
gk/jtleDqHvj6Srj6g/g7tJ43avB653UCdX3t9cmyshvUib0ih/VrHhrVeLL
r3KTJrFpqXWKhM1QbvJclc5Uo9rh0IijdTi43ELpqEBnIGpWOmqh3K7PbWPY
VfDukZ7S6H0qk8gGjWUTh/8EhcWRYp9VX3EIbJNAuHfb1eTWuGm3Nvmg6pjB
rRxRZSn65faqTsjcM72yWa3cxHS30SodTDxylUq7toWtUdoFfhQyttUov7Fx
bY1zP7RKp5jH76RS2sjtNWDrTiqQ1f+3V4MczDbpQPbS9xqWvrUu9Nssd5M+
1LjmOmWofBYaNZwKGThaTgVTW2g69VMToI1ai9WnpLls1Frqp7pHotD1sGze
zVq1pZGFfILOUuGTn1UWVkimiev8YWRi48HbRiBW0FHytOhaPU42kVW4TmFi
W4H4zAnm8Dj3QxiaokQ33cf+zJkuCpe9GsTcLcuF+/4OOS4agY0ZLmqpezVL
3T675Ysvb2NuS90aazNbLNK+MU2F226d1cLNb85psYnIzWixcb5NPkt5MQai
DXkmNYvass+tcuJVn9v6E6pLukdSuTmbRZPfDbc+a3nZp6Sy2Iz68yZI2KRY
xwPvrRehPollwwaV3QemrRHsOvfd3rUvhuw6LvzHy0SpwfeXQdejGnTdNw2x
OQelTmxtlYFio6B8oxJrkzNLcC5V2hVyGwr7Mc7GVUnjVOdpuujf8Na5pdOc
93jTe+OBa4yxN4zguFpv8pVXG1SsniZRp1GOLz66lLIFldBXuKisPPyLBVe5
jrJb9z/W9fHpe0sMcTGG+QKb+o5Ni+oT8adLUvVNK1VrHX5VReBdqXGU5HKf
P+5gZs2usrcr+owp8MHRcPJKldUULSyUiHU12wBzMYYqCKw+JkbflFOlNXF5
WYdqEqsai09rvaLlklk9l8DtSlZWFUGb2LFUXRSy26f4qVhDtXPbwzuSj22l
11wl9hMGdTi8vdJi6NsP+qiMI40AMcZCvWQN2Bh6GWTh1GpVKc95awrGrAP8
1oMpuMyKzZTmkJn+jgV+bI6LJR2+HU+K/qav/R0F/eEH/W0WVap1iV/JyxNt
aeAPl9iy1kbI1OTFq6PqnhYEmtMfHfQnx6d/56KjY4PhYhjGLTamJubkH69Y
fFGjzacb1qIalz9fkVm6SBWHGOUuUEPAz/XK6kBCNr8VOAYKOpUbYRh/d/z2
zUEjGGXKtA9f5egagmNir5Ak49uuDPtJoqlaAu1LSCAn+/W28snOIbqD9Cl5
xu4uf+gLcOG0OFxVQq3ZbIcpuuzSPhy32dHN6oRVPOOWqoZ1HfFzKwlWuG6z
erDJTv6UrWtmLjftmXvPVXOPxmrM9vOCVTrKZWkF+LPlKjDTZ7mUsfn2lOFP
YBbYX3WoXVaNKFUEOTw6UNW14bfxnz31rQ3+LKX7hbIr0J0+qrLc+LpUlVuJ
rqbi3NceQBUHS5mtAuBxO+s03g9lfr6Pn2taZvsfltF+nO3jJPvZMrzY228Y
aecFDLRKQex9EDu4PP+iB888kpP4WYRqCWvAg+6An1nzwepYSqzzu/NCfCw6
4tw+f2FP/xQd8SU1h/ZJOg/Mh4XoBzFerlFNMFENfzurnZs6Jappu+5WFJq6
bleY2tOTu2WpP9PkNxSjLiZ3S1EzPE4BZHvUhgLUxWil8tP0rKHytD2uU3Sa
9sn+4p+1T3cvOU3T3bHaNPW9a6FpCznblJmm1afyIqR6oVTg2e/t+o92d+DI
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
Dsmt/j/3shlE9pEBAA==

-->

</rfc>

