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

<!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-01" 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="2017" month="October" day="30"/>

    <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 describes the attempt to determine and appraise properties, such as integrity and trustworthiness, of an endpoint — the attestee — 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 attestee. 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 root of trust containing an shielded secret that is unknown to the user in order to increase the confidence that a communication peer is a Trusted System <xref target="RFC4949"/>. In consequnce, 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 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 attestee, such that the claims can be used as evidence.</t>
  <t hangText='Conveyance:'>
  The transfer of evidence from the attestee 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
remote attestation 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 ensure 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 remote attestation is composed of. As a result, TUDA provides additional capabilities, such as:</t>

<t><list style="symbols">
  <t>remote attestation for attestees 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="attestation-and-verification" title="Attestation and Verification">

<t>TUDA is a family of protocols that packages results from specific attestation and verification 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 and represent the chain of measurements as a single measurement value,</t>
  <t>restricted signing keys that are can only be accessed if a specific signature about measurements can be provided as authentication, and</t>
  <t>a source of relative time (for example, a tick counter).</t>
</list></t>

<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 attestee 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 attestee) and the Time Stamp Tokens provided by the TSA (to both the attestee and the verifier) enable the attestation and verification of an appropriate freshness of the evidence conveyed by the attestee — without requiring a challenge/response interaction model that uses a nonce to ensure the freshness.</t>

<t>The verification activity can also use declarative guidance (representing desired or compliant endpoint characteristics in the form of RIM) to appraise the individual integrity measurements the conveyed evidence is based on. The acquisition or representation 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 attestee 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 attestee, 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 attestee (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 attestee 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. As a reference, this document includes pseudo-code that illustrates the production of TUDA IE using a TPM 1.2 and TPM 2.0 as well as the corresponding TPM commands specified in <xref target="TPM12"/> and <xref target="TPM2"/> as an example. 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 encourages the use of any appropriate hardware RoT or equivalent set of functions stored in a 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 attestee 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 would use a combination output of TPM_CertifyInfo and
TPM_TickStampBlob. The former provides a proof about the platform’s state by attesting that a certain key is bound to said 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. This approach is based on the concepts introduced in <xref target="SCALE"/> and <xref target="SFKE2008"/>.</t>

<t>The payload of information elements transmitted is based on different methods, because the time-frame, in which an attestation is considered to be fresh (and therefore trustworthy), is defined differently.</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 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 attestee,</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 attestee 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 TUDA attestations do 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 attestations 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 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 attestee 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='Attestee:'>
  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>
<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 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>
<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 Attestee’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 attestee. 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 Attestee, 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 attestee 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 Attestee 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 Attestee and the Verifier.</t>

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

<t><list style="symbols">
  <t>The Attestee 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[
Attestee                                                 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>

<date month='July' day='3' 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-13' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-terminology-13.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='July' day='18' 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-01' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-core-comi-01.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='July' day='3' year='2017' />

<abstract><t>This document defines a concise representation of ISO 19770-2:2015 Software Identifiers (SWID tags) that is interoperable with the XML schema definition of ISO 19770-2:2015 and augmented for application in Constrained-Node Networks.  Next to the inherent capability of SWID tags to express arbitrary context information, CoSWID 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-02' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-sacm-coswid-02.txt' />
</reference>


<reference anchor="SCALE" >
  <front>
    <title>Improving Scalability for Remote Attestation</title>
    <author initials="A." surname="Fuchs" fullname="Andreas Fuchs">
      <organization></organization>
    </author>
    <date year="2008"/>
  </front>
  <seriesInfo name="Master Thesis (Diplomarbeit)," value="Technische Universitaet Darmstadt, Germany"/>
</reference>
<reference anchor="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 instance of CBOR encoded Verify Token data.";
      }
    }
  }

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

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

<figure><artwork><![CDATA[
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><artwork><![CDATA[
SyncToken := {
   left_GetTime := sig(AIK-Key,
                       TimeInfo := {time,
                                    resetCount,
                                    restartCount}),
   middle_TimeStamp := sig(TSA-Key,
                            h(left_TickStampBlob),
                            UTC),
   right_TickStampBlob := sig(AIK-Key,
                              h(middle_TimeStamp),
                              TimeInfo := {time,
                                           resetCount,
                                           restartCount})
}
]]></artwork></figure>

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

<t>The restriction
to certain PCR values is defined as a policy state-
ment containing a TPM2 PolicyPCR element referencing the
according PCR selection and values. The digest of this policy
statement is registered in the public area of the key during key
creation. In order to provide proof of this PCR restriction, the
command TPM2 Certify() is used. The restriction information
accordingly consists of the PolicyPCR-information, KeyPublic-
information and the certificate of this key.</t>

<figure><artwork><![CDATA[
Restriction-Token := {
   pcr-restriction := {PCR-Selection,
                       PCR-Values},
   key-certificate := sig(AIK-Key,
                          Restricted-PubKey,
                          PolicyPCRdigest(pcr-restriction)
})
]]></artwork></figure>

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

<t>The creation procedure is identical to {mlog}.</t>

<figure><artwork><![CDATA[
Measurement-Log := List(EventName,
                        PCR-Num,
                        Event-Hash)
]]></artwork></figure>

</section>
<section anchor="implicit-attestation" title="Implicit Attestation">

<t>The attestation token consists of
the result of TPM2 GetTime(). It proofs 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><artwork><![CDATA[
TUDA-Verifytoken := sig(Restricted-Key,
                    TimeInfo := {time,
                                 resetCount,
                                 restartCount})
]]></artwork></figure>

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

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

</section>


  </back>

<!-- ##markdown-source:
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
l0JbmI81K6qfZrNOj6nGhjeadTVL3SP9M3K0TmXnaJPrrbmNkuITbDpXHn5W
U8FlE8VB5X26Z1ovdo6Wo/Y2nrNtlJ9Lj1LZYqnnr6367HvciiTbqr6nTkE1
z3M/NF+5x/HvpPg0bXs1hLo3ka4yrf4A4S5N170aut7JnFBjf3trokz8JmNC
Y/yoBuOtTYkvj+UmS2ITqnWGhC1Qbopclc5Uo9nh8IhjdTi03MLoqEBnIGo2
Omqh3G7MbXPYVfDukZ3SGH0qs8gGi2WThP8Eg8XRYp/VXnEYbJNCuHfb1RTW
uGm3NsWg6oTBrQJRZS365faqTsncM7uy2azcJHS3sSodSjxyjUq7t4VtUdoN
fhQxtrUov7Fpbc1zP6xKp5nH72RS2sTtNVDrTiaQNf63N4McyjbZQDbqew2o
b20L/TbobrKHGnGuM4bKZ6HRwqmwgWPlVCi1haVTvzQB2mi1WGNKlstGq6V+
qXukCt0Iy+bdrDVbGkXIJ9gsFTn5WXVhhWWapM4fRic2HrxtFGKFHKVIi+7V
41QTWY3rFCW2VYjPnGQOz3M/lKFpSnTTfezPXOmiaNmrIczdqlx47O9Q46IJ
2FjholDdq0F1++qWL47extqWOhxrK1ss1r6xTIWf3bqqhR+/uabFZiK3osWm
+Tb1LGVkDEQb6kxqkNpyzK1q4tWY28YTqijdI63cXM2i2e+GW5+1suxTSlls
Qf15CyRsVqyTgfc2ilBfxLJhg8rhA/OsUey69t3etS9G7Dop/MerRKmh95ch
16Mact03C7G5BqVObW1VgWKToHyjEnuTs0hwLlXaHXIbGvsxzcZVTeN052m6
6N/wrXNLp7nu8abvTQSuMcfeMIMTar0pVl59oOL1NKk6TXL84qPLKVtwCb2F
i9rKw7/YcJX7KLt9/2PdH5/et8QQF3OYN7Cp99i0qD8Rv7okVe+0Ur3W4VfV
BN7VGkdJLvf55Q5m1ewqe7ui15iCHBwNJ69UW03RwkaJ2FezDTAXc6iGwOpl
YvROOdVaE9HLOtSTWPVYfFobFS23zOq5DG53srK6CNrMjq3qopDDPsVPxRuq
Xdue3tF87Cu95i6xnzCpI+FtTIupbz/pozKNNAHEGBv1kjdgU+hlkIVT66lK
e85bczBWHeC7HkzDZTZsprSGzPR7LPBlc9ws6fDteFKMN2Pt9yjoFz/od7Oo
Vq1LfEtenmhPA3+4xZaFGxFTsxdjR909LQi0pD866E+OT//OTUfHhsLFNExb
fJgeMSf/eMXqix7afLoBF/Vw+fUVmWWLVGmIWe6CNAT8XGNWBxKK+a3AMVDQ
qdwIw/i747dvDhrBKHOmffgqR9cwHDN7hSWZ3nZn2E9STdUWaF9CAznVr7fV
T3YN0R20Tykydnf9Q2+AC6fF4aoyas1mO0LRFZf24bjNjm42J6zmGbc0Nazr
iJ/bSLDSdZvNg01+8qdsXbNwuWnP3HuuWno0dmO2Py9EpWNcljDAny2xwEqf
5VLG5t1TRj6BW2C/1aEWrRpVqhhyeHSgumvDb+M/e+pdG/xaSvcNZVdgO31U
bbnx61JXbqW6mppzX3sAVRwsZbYKQMbtrNN4P5T5+T6+rmmZ7X9YRvtxto+L
7GfL8GJvv2GmnW9holUKau+D2EH0/IsefOaRnsTXIlRbWAMd9AB8zZoPXsdS
Yp/fnW/Fx2Igru3zG/b0TzEQv6TH4fkknQfmxUL0gxQv96gmmKiHv13Vzo86
Lappu+7WFJqGbteY2tOLu22pP9PiNzSjLhZ3W1EzPE4DZHvWhgbUxWyl9tP0
WUPnaXtep+k07ZP9xj9rn+7ecpqWu2O3aRp710bTFnG2aTNN2KfyIqR+odTg
2e/t+o92d+DI4iwWZVgk3b6V9OMuHVpRvLdCzVT/ND38sQrWbs/ffV4Dltmu
O/WYfnQr4B7VA/fU3wX4nt0A3F36T98Ctr1G2B75e70bYLtTa+pbANerB+4J
MlvvJsLdrWf1LaDbVdBpiQ0uVerayQRg+SzsTF4e8AkSIpLBeZ3hrTAT/AZY
0m9TnRr8Vn2Fr3IL8UXCUSb1Zy4ptDVwt07Mxpa4ZSNmM878csvsISPzsYlC
dv9lh0yumt4vt1++NvBEMp7Ded/hVsw7mngfb0/YuzZdNqDcueeymeHuLZfN
FDUdl/UeNPC37nN7C/522yR/If6+VfvjgkFNzvvz8S79+/Br8be//U2/MJZs
8TwT1OsHP//6oaJSmOUulTgSfe0pMN7LKzZb69q5Op+7eSSDhdjUeNYcgBLN
HUo0UP4OrYS/9TRaDdzBsBfHlXgENuDRnvUhyGgMy4odJy1jofKxHinzqY1Q
MesdOtJaIN2xJa01wx170lozWL/eKjFUSMHG3XGZ63faoNt1nrXA+ZTWs9Y0
n9KTy5rmVk25fpvtddOiv9P23rrF7G9DG8qBlkhyBntKUrpY1rIsMPv56eS4
dRtZ15hpVOC6f+ctFLjb/vVLGai3aet6HxW407SsToFX21Q6n9+kwOta5+3c
geJ3aI1aq7ir6Nw3xd3YtK9Wcd+mxeYd9Hapx+YXFl61PHWf9PY2e/MprTT/
c+vt2jaa90xvb7PDX5A291BvNwlXe71GvV20z7uF5i63s/xCuvvmNpVfVGE3
IV3c2P/yeDdfwjfo3f4O/mcmUWGrlBov1VkrdQ3xqkZJQy+2DQ9+Wful0oyq
1nSpw+2+GS91Pcjq7ZabOvvdwViptPb7wjK7gY3uk8Fyw37con+fNeqODfx+
q9241/bFDRvyRQlzD42LGslnL9VoV5iuZ7cwK0pd876Qdt22G959DAa4zZ3q
9Gu1M1m9MhS3DsRv0Q2uVivW9Er7nY78Vn3R6pXhdo3R7qASy53RvrCocRqi
/R6S5vatz7YUOLoz0i3kjduq7AuJmy1bkP2Wnkyl89hvhPofy5lxWp7Uidpq
b6Va8n4+j+TmLlq1ArgK531zSuo7CNVL4q0aPt1BEJc6Pn1hOVzb6+meWcI3
7sptGzvdzkOpdnb6bfbk9zPCb9m9aUvFaLfLuYVyrHZd+kJaYptuSvfRFq90
AKnTEbWdbD67MqjpZFKrCer76twLa3wzOvWq4OYmOnfQAzVddL6w3Cn3zrlf
sqeWt+zFmlMLqm9JrdDJpBSDhC5YY36MbnqMRz8e2EXucXK5Uw3DO81vvlQE
fuumNl/M/HSukNdG0iutOJzPb4yc17Qu+Pxxc/cCfX3UvILHfTNPq90SauXR
Tf1D7iCMSg1EvrAgquWcexUs37QRd+wT8tvQ9H6HvDeR9QsS5T6Gu8sCy17I
aDr7qmPdDUuGvvn+zd06SRjZfKc2Ep6znXdvJKEmuGUXCeVfVKoGLar5m66t
VO5/ISFPDnaqvFU/fqOF0Mgon3bN5e4XXW5z6urtiYJlt6V7/XWK7eleP/4T
6X7H6xd1buLvQdP6CtftaVo//lN5+W4VsfeFpk21R9tTtWmGT6TrbaqV7h0x
q7mAO9CzOsnnI+kWuYNPyh78HtRvyHdvT/mGCT6R6rdPkN8Xdq5P6G1Pz/rx
n0jOWycA7xk1P0U0NE7xmWn6n1E6NAfgt6d/8xyfuAG3C9rfF46ujx3eQtPV
jv9UJXf7WONnpt1H72Nt+x278w51h8N73efrmFRDBk98RZ+8Kj5Bf/I8iaLk
Ei/I45egStZ0TxxcQvhPsk5RDGDI10zEfir2GcFFdJAmWK3SJJguujjpFT2j
OpysdDsSnN6+mg5bcg0f9vY+fqQV6C/4o4ugAqzh9L0/xnaq6hY7f5AHy5Xn
HcdCXsj0SpwlSd4x84fc8yH8BYEWsbx0ZumK8Xq6gC9y/DBTUwMjZmGWZx4l
KeIE5RLtJmCVwrrJEjZomkr0yxkbCXjSwnjfI5zhPp5zPFA1ZqIvfeIMj3rk
SbFa4OX9M5lfosSi77ENjO7MN5MXIayLaGaLdT5LLvFeilgllzL1k/Nz4fse
frlKAW1YIJWrKLhS/WSSaOaiRDGCrEvxAiQL7FaGl16I61KMuqEgTVZXHu8w
4ztfB4BvLuHZizDN18SZcQIEiiJqvpFpaJlIvIrBKb9MKCwBJPaIOHwyYDdH
OXBPmi8okkUBCLp3Y4BBQqSG5mcS0Sp2Eon8D5kmQlHeSyVO3xWvsCEOMR83
wsEeHwUjTFnfZPwEL4EyJ4zXyToDzCz2BNJ4BpqM2xdNo2T6niEpejvA2Qwj
e8NocdgjmEnvWSaJL7JIylXXe3lFhF8E6ewSDwXgHs4tQC/DKIIPczjs2Pkn
mL7PBPH7FRM7Aa6Bk7VCD5CIqfcUmEKmGc2jjyZ+/g4Zng7Jyyg5w+tQIbI8
nvHMLArgMUMDwyM4AZ54L7mgXSi42OEp5D7cYvmB6QQUBLguQo4mrda5zXWZ
dD7zCszhaSSOTEFSBpk5cDg7/LkKrqIkmFE4D587k07IKhAOdvse/pnpP8X+
C8SmBRj67+VVR+NBD4lff1VLwS8aB4xogtng9REQEHfrKO94lK2FDzCzDCCs
sJcUMyf+P136Qg+ceQ7FHx7jViojYJELqa+A2bRre8F5rmhLNMMP1dktJiTo
OoLsHP2ZDai4BAK9j5HLgFqeIb5aELDuihHlNbQsFgtgTdzUVP5zHQJ+eJrt
fRGUA0L9E0vP+gKsLRKUzDHrrIjFz5LpGo9VW0XIrLmmsDLsl2L/SxlFPkHr
0fcsjOAAXrDaczTIZPC6rBqQIWz9ohfGrckTD2ECsRPncI6vcn4b0S8oJBYP
drf8eYD4VcD0WPmcwG7isafuuOF8nfL5P5VzUBV47long9OsXRxH5BgjOtKr
VZ7AHmAz8ERJNrVfTNLgLIxCgB2PQo4h4GVhIWck6JcSnTpkwwRIHMSm39eD
TEXPNUykM3J1E1LDAAIGTgXoDmJfT8Yg0ZOYkgViiKzBkhw7zeDzCAs2mLkA
+W+W1huKAKrjd5Egl4NWu4E+RJ422vmAcsGeLBlsXNUiHvaRAsMDezPlJPyc
49WhDAueGG6CFmv1IF6OjsesTdcrQOWfa0nqO/GcRfIA7V4+hIs1trybEccs
QPvRL+sVLqOkq57bmoK4Lg3nc5L0KvmnaZDBmfWnIBEl6WefYIJtPz0+9DFN
0UUFSHJeYQmEtOdWSvU8TLNcoPgj0bMKpXrLFs7xLQWr/50exPnJzGLsaWYk
1DqN9bykc7hjKILBx4nGAqnewBIy1apBjSC+9I7H/vcgcGSkvy3Ny1YEyJfI
dI4UlCBhq/mMzK6CGhaWHsUt1dNggIdTUiFzCfMZJ48ZuG440GXeIduCTxMC
q2UYkw/Po2ZZnDBmUxamOWc7wQnoO+yBqXCYLJwRSsAFP4QBIYpzdlDrwAE3
5zfg670YmsUGe6otcwA6HeeRHwLs64uwrqhBJJ9HtogSFMXLBPVu0eSPJaPd
9Y+z09aBZxsTziiZF3xevVWS5bTVmdv2D40cxVYBmQQPGBHRWulDi7bOnA69
TYe2EX6DU9SGFFWCeb+XV+ArDMncxoIG91QXNDcDYBtZf4DKulJ2HZGIlc0Z
uw9eaGs/VBsAMQGK1gKxApwmNI3SJXWrJiEHZh8QAcEgCyZUSKNxAQ97LAhx
I8xMutn1BWyqYhQKk52HMprZyMCk9AU1F8Vlu96PCxmTBkXYQZwqKzBDUURq
ieiRYfYMCYtJJU0WPs7ThUTj43Ih0fz1DKMqFHm/UmwAqdE7xgcvw4xhKhal
QxaHhfhBicr7xekBAr5iHwZUHUfHP1EX1q+0IaKMSjZDEJMzYohYfVJYhoxw
ECdkw8OT6hwba16S9qYTbVPSlSHmaXsXLOvaI5NgtqZubfYOq9WAmfAw5tQQ
ETYJ2FfxXpAhE8+UsiRhiv1TkfO8QO8R8d46I+EaWjLDcJthRdoI8pdHQ8EJ
StqCE9ToMxKD1ORNtV27/ipfLcGLFbwbmARDepeTYddfBeF7cOD7xUnPyn5y
oGyHeRqsgHbFFhQcZm0/M6Jni0xrcjHSUgMOsGgBOO0udiNHuBbKtLOYwDqm
sM8eUFV+QAGmBShLQUQMSzIQYqSBJbZQFZBAVHyN64TIGpjepr6LHoAOG/a3
7pPd5w5ppAp/4PfOF/01eEAoqFhI4pR204Uw82RIPGmsYe6mGpGoxBNvE+ck
DS+C6dWgL66vYSp/GKfg2qLso6ADMZlUPdl1VECrl/LSTC6bo+EJkLTUZHJK
PEdCTrHzBQbgTEs+tju1fV1tI4Gt951OEiUV5TUApbr3qX7Lg4ODNx41RKZW
Py/ET4g0/t7BrCL99vO3YhlcoZUHKh0RwnXBy6M+vkeHJ54eAsPxH08P1H9T
8Ol6fzqbReIrhMXPKcgIjBfJFzvF8pqwgB4CtvNRiSo9HxvQOXZLh+NtY6WQ
hSeVgWZgAtDx+BufypgQbIdbVq+S2WZ+JeZSL+RZOArGQsFwCcybJ9MkAs6+
vl6CDekXCH78KObg7pHjmKznC5G9l/l04ekiHT22K8ZS1vCbagtMssdIQIVf
9YCgjl+HUV7YMrj1Fq8p+84jZZKBKJkhuiffD8biq2+qHNZB3ssW6EuGsVeD
HEByyk7jzA0j7ivmWmVyDT4ZmKberyqY8A5geodQt7rdbhsY5Bq+EgTpCwpN
HMIqWii12vTlaAbLIC8BYWAK/S2uDYIDhVZn+H3xaIaPwmFuEQv0Ozy+rdfR
nImL9QHeC2tKmosnwec/er/Cfx9+LfoRudjku3/9kD7dEp0BPfYjiGoQsC29
TgUYB174twvbBlvGQKjjI74q7YA+P7QGWxuqTbp9mPAQocrBxOsCOF1HfynO
z7xkOtkSw1V0D01rhUiNvONwAjXHwcgFWEWgWe3hHskKDnvogHNAMWhBRUkD
jJ+J1ulk0O6gXgEWjtGjybBejOMqKLHLKs/LSriY8KIKqggnIIUicjIA7ZCI
GfjSCRoIpRk8fRQpoLs2oBKUFEsq1IxogZRpK5Pe0QCpRE9YrvAA+CawypyS
lQNTxkLk5oE+2y9usEpr0SDTMWcVxwGw6ClL7sEMfWV8ueuol8AYZWvC1GZ9
GP0gsyZVATcV+ycb1Z0SZ2F1uRPJ83zH0DnjZs871B18hwVtwV3gcsNDIYas
s5C9mJgi7UvpBx9CFbkkqxZJqRgYvCuDAkNqiyo04ij2AFYdeVdLMqDLHJIz
t5d0Hp4JPkqg+DzMC53n+y6u/vE6B7bGErBcE2ifaEWP0CnCLwnjprE/A2LO
CFiPQ1LfckFd72nP8+rGKsDsKOU+cpU/eHt6Ojya+JPR4PsxAgBm4D5PyuuV
n6mdaQ0HFD78H6JFqSM8O6cBlhGqL/ijI+QGXvbo+GgwhC/asMa3VHLIB6EW
ds0G5NWB+VYURJJx7H1rLckspBcDbDjFotJEtKXgcOFJAKZirmMkCSJDz26G
2YC9XdfmQG6osTmoFqXG5mjUan/6b75fDaDvC9//M3+3jwZxhObZRZCGyTrj
8CfHVuyQCA2p0ZKz9XJ5dRDOgdEAp1sEKvVYJt8LeyJbXyEl3hElUN18B2Bh
HIIEmlZeefYOyasUmINpix7AH1BOPBgeQx2oZ6Kfh1/jyO+Hf3/3Xf/o4M0Q
VaYaF4D+O6W8lIbxiEPaxTjaUGvIjJCYJCyGHcz0kIPR6+F48vXDNqGKKCD0
4/47I9NQZneUEH2Brs2ipfBsF4Pe8UsN7iviCup2uxiiEVcoGK7WQuannxSW
XTxaIEn1nyAtfsa/OmY19+cnTQ0e2LXFRseQiqb5maYAK4kLkLP34cpKAOpj
TWecwyloZLjTk1El1DtgClOnemwdUwcR9RlTy9YhY8eqdyoiHnb4DGwSimqo
8Eqw0tH2wrRBZcuhFSlohIldAQ9kVtxHRQksyUYfLYPpIoylSlHx4jCYa7w7
KvXszupZ6lmHDE08TMFC1kCUYKzFREkwPLpEqcNuNWhYnZ7TcQrHSgOrypgS
VPUR6tQquSUWTLnEN9gEKqiH3eEpfoM3XzgzYAUHSMRFWWIbbg5pTPjAWcNE
wzwdhCK7uQhXaSsITM3cMqZUotC2BRyLigM9ZAwAoa30vEty7dMzm4W0fUs7
IEz3t5JzMukQFfy743HCvnHiwuvqUCLOLzvxVf+7xLJ4ePGlLGgpSbsA3f0p
1gT/4t3JGpTRCbkOzUMs0oKdACiN4fRwbtjVoq29bvdxG0wUbYOehchQGKvw
PAObsivgu2WQvd8X9oQIBJ+KffHT1/CN/x3IsJ/JQGEwLUNIOeqYzoxVznJw
PB4KdoUyWNLiCV6UjJzh6WT06u/+6OjVcZMdZD2iRn4rLiV4A/GDXN0TobnG
k9O3g4n/w/B0n55hHkcD5LECU92RAAMBaxIoldiD/yMNTMrhbRbMlf3UgRke
47D/IfboH37iVRTMs32H0o/No/BIAI4G5nJLM/Xwa9GS8XrZxqeiOXoji+VJ
kC6VTQiKxz/pnx6SPchkYz25L5DunUa82YbChLrJ6WRgRCky0mUHTJzirAGK
FdxjECxrRCNJIp44TuA88L6pqVfTFAMXiCIO5b8YVOQF2jHNlQQY1UbJDwEH
52KpN1A/rTaP5jJM5rLct6iJUILAh+/GwzfDAb7fCxVMoVL7+Sm/KIOGEk9+
K/Q4fB3n8Xg0GYIOH39XHjhQ4WZ7ZONABb3ZFsN7ZvNGB8UG/+mF4TKfXr2m
bzB1yM3MMe2qQsq97h7MA1+PpwtQfM4cezwHn4SN368Kzjkd923uUYA7nxrg
d4hllZ6ER1S+ByVAtrPPPP6G7ncZNwIGAdueYcnaOegGdKrZb1P+LYWrsX8T
z0azwIATfDKzZyFRPf6u/+YNigryCixgMBgdoxmA4/UfY3hgH2YDHn5IM8E/
Z+G8mHN0rvMRrGm0DpnJ82Ad5WYi/DB21hkzY39Lr1VFgHZ3hP9nZORUrkAy
S/3ezinWdaETD1AgcR3nBBau8U0wHl/jmtwm4valfQmjAuwPKwqpBWc1k1Hh
X+isDvxtH2P4m5+smKSlQ6stYWXi/ED6pWVP1W43TaGPr4vUR7ZgxddFxinj
XAZJEZI8HOFYZ2zi8JdwNoSxvS/f14b8dJrrhZ67rZ7uqm8w1AcPmnCjoiPp
LVZ4viYXjXS1oGUr4WoGbzQ1bD+lU9BCiavCSxGWz2G7N5fvOzYNN47T7o3r
3bStcaxjDLksNLrIMSsV7IWnT+WSDFSqa1NGNddWpZLkIqoZOAHKaXB9BlZ7
tf4Cf2V8hHLB+fVXyyjBF1GOw2UYBWlEIchUztfwh5PE6riWM4KT6UR2YhcW
GPv8gS5ECC07HOYLl5wngv9hWuwS36IHPkOWuTWfXdHPKF2OboMySD2mjw6S
MYWwyrCwoDhTo10Esro5W9fVkRvKStBIjMeYirIiJ0K44qXWXK60hWZefErJ
eQUOZ57IQnZKjzJPfqAIKR4gMBFK9RoMFYu0qk1sbZGPW/RCWZFDLBD72TO/
Kt2ENdusmOlTfwJ/d9jyUCoQHwKXBtMIPgqRQo3jV+dhJNEIUl/lwXwuZ/QH
zRLkC3zPKHwBFP5WR0BxEH7sL1QxEuypaIHz68fztscWtgUPgPr/tMheTkCz
7Xr4ktBgX/T4FxizL/a8tueBPUzBiEtU+7CNyNxUZYfXm9EsTqmMCjwzbGgD
j6s6vg5vJw9m/5SLG7Ayi7wwtCGyRdDzLPzEQ6AgfgggdUqhtJ/rHtx78hSA
dh99tPezrjPHtDi+dnoaOgkBOGPhchWotB67k+67LDPWsk66uylsXqgaz/VT
+SgEJlAszVvMKTqPnuGFNJXPvom5Uyr6g5yucUoV0k7l2VVR1yPxH1P8rR3m
UpknRatTKnfIrcpLz6pltuo+raICt2aPzg3eakHuUkUTVpghyLJkGqLj6Znw
uOvatjHlMaeikiKCXhsYF6r+GcCiZA1SFIQg0BkDELwjUqivNEogWiOuT6cy
6ObkOBWPmrCKE1ibvmfI0HdAhVEVAXwrRQfp68LMrjVFSfQ6g0pdb7lNuLdq
UgH3vgN+3RQitDWoawzZocLGSOHGOKGli6sBww1x0nZ5pBM3tLuJvdAoltTq
hbUNdbrVvjxkNKx98n+wixv6qviY5UCG1xX4Pr5dR19otjSIM6qTI+M7Q7sa
ay91EZu5iKH3kTxQrOHxnJIKxYO2vKHwGPED1wsapc7Sobj3gloO/gUtGkWg
qDEQR6Elt2ZDu3Uq5sdxE3dizKUXLMXLFH8XNSpTrLTnAB+im7pLgUjO4MSB
60KnKwDj4ExVxxEdDe042ohX46jCgO8j8aWLjx/bHRrumQozUxRAsBictVtP
MsDXErJbd0Aw6A52FvARcwzlxql+o98hm6+riznQ3MMAeuVpnQanp3WOvF3w
ozrh+GmmefGH0j5bdREZsWMV0iLNYbKAXfyAv9KZgOI7+kQXBJzaNp56+kFm
rmixiP7WrhvAXQLOxWz/C7ZcTQjcjq13Taz8hYnV136/cQLtuDXOQA8QMhR/
15Soe948o0lSu6wmjJIDY12TpkL7vGfwaUttecf2MH91fdVfbajazmjFXh03
g8MjVKani7+1t1mT59Dj2sW6hB6nhWYyygNDHmcN4SvBWwDrkATcSesbs68P
BYYLrckNXTfNXqW4mb7Io9jzl48L6v2m01JbGtJwbKba6UejWbni77Aanvw3
VYK2pmpJEx/oqhiwwoiGsCRqOdN1eGy7aRl8FTk6/vZ3vE1TeoMVecSW+/WO
xPy0VY4B8xg+jq0CShXCxgM6/IDGm5yBvfWSP20XI/RiXRXR7Lox9BeiMuWm
wZXoxgtRRrA61ort4gDi5ErkRWU2bzwHetqqjE2LnATC2sQ/5e4CDaxDpe8X
yvgquXaaN8ClpEeQPOTrw6PVzdBPU6SD7+vJ8gR0gRdog/cf7OeZlu8uF0Bf
1HA+emIts2hHD7fdxHbT5Oi7VeYuJsNHervtDavrZ5VvqVd3PNHq+FYNjLhW
NZlLnOGuQZfbalbZhCT6pZ+EJ0zwWVH9VEzVeLzDCmz1k8HkZy1rOIjSqj7Q
qaFy/U89I6mDgFTbyNsKfQ0Aw/aiIlR/Cv/1X3+uHFwryoJBloZzW4qANRpK
QBPLDau3gW5v/XyC3fNJFk8hD12JuYVVkrULm4kWq9pAqLu1vWDr938V1UIK
rcKrxgFPoy0Dywi53TQw0U8GoI41aZVjbK+ogV1sd86YCNtcgNjr7vIFiL2P
G68/qMSItvl1Wn//BVc72x+SlwC71jk1e+hjYrVtis83jsaHcDSVlvO4InK1
oVK2vqyQrs4H4ICfU6VjzmWfXM3QwT/2gEA51iK16L5jLoMZFoHjY24MoW2i
UvYQNZWn2mGoGwEUPeHymqVTIe6U506w4JsetZ8IlWcJDjOcVml1xLvo/e//
9//jWJAq9/Xc4nOiU1FjtP+Cm2Ygh71TIOtL1nqPmkoR8Fmy2nASusPZWLRg
/2BmLadeG1s/nwcpjwCfF8csqRXpO1OUaa6FK77YOO+iRcg6O9fePOQtVjjj
E3T63KHbUsusXgb+hrXvTGf1c1tyF8MsqnsfrQNWW51l2ZqeuoaGMVEr4km3
2/ieHnUFWCVROL3iGI7v6aAjjqKbaHyKTughnEVH/nQ9sgpdecF0Su9wndNa
mTHk8WjZTTLYUDcdVnl1r4ggUQSKrzYXAWdVCBSkMtDHEiPUxQU2r7jAVq7R
CjkehM071Jr2pctQtbKwy6b2dFoN5YyumioR17lNZ3DHMqbSbSZDOd8a0cGL
YieElG8LBlMBXrmUwxcgteCwtt53BQgYOLa/QZ/j4k4xUe0PPsVZ4I/0DCbU
p64G2PJ8WcrkhLKymx429GHGaJUQAJa3lUrJ1mKeN9dTV1pp4rbxTd4pFxhd
U1JSk6+cEAPU3qAXQfmlo2DTyUYqHa2XzQ9wjopdzs1pnGo5JQeGLQ7yVDoC
CyhY01kKjSr5iLMzk0gJTPaRsinAc5xbaEimkJIyCRVScJ0ik+K5mRR9ZxhT
Qqougy43AZ2TvDirVGXWcFL0BlRyEoq5LM5pZJu7iOFbCd+SyNU9n0R/it0r
wAOaq+YR11gQg/U4cvZiJyZ/ncrXgTOB7X4EkZDtU3UdWWiqUy5tB0ogE8pm
lqCu/6dDvGPjFZXw7lSnw/FkcHz0yg51z8IsWGIlDhV0YgtT3KTGKfRiD1DM
UkoA3Y3i3iRGy025d+Msjublp/4Ps8QmQdKFAQA=

-->

</rfc>

