<?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.6.6 (Ruby 2.5.1) -->
<!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent">
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-rats-yang-tpm-charra-20" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 2.46.0 -->
  <front>
    <title abbrev="YANG-CHARRA for TPMs">A YANG Data Model for Challenge-Response-based Remote Attestation Procedures using TPMs</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-rats-yang-tpm-charra-20"/>
    <author initials="H." surname="Birkholz" fullname="Henk Birkholz">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</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="M." surname="Eckel" fullname="Michael Eckel">
      <organization abbrev="Fraunhofer SIT">Fraunhofer SIT</organization>
      <address>
        <postal>
          <street>Rheinstrasse 75</street>
          <city>Darmstadt</city>
          <code>64295</code>
          <country>Germany</country>
        </postal>
        <email>michael.eckel@sit.fraunhofer.de</email>
      </address>
    </author>
    <author initials="S." surname="Bhandari" fullname="Shwetha Bhandari">
      <organization abbrev="ThoughtSpot">ThoughtSpot</organization>
      <address>
        <email>shwetha.bhandari@thoughtspot.com</email>
      </address>
    </author>
    <author initials="E." surname="Voit" fullname="Eric Voit">
      <organization abbrev="Cisco">Cisco Systems</organization>
      <address>
        <email>evoit@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Sulzen" fullname="Bill Sulzen">
      <organization abbrev="Cisco">Cisco Systems</organization>
      <address>
        <email>bsulzen@cisco.com</email>
      </address>
    </author>
    <author initials="L." surname="Xia" fullname="Liang Xia (Frank)">
      <organization abbrev="Huawei">Huawei Technologies</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhuatai District</street>
          <city>Nanjing</city>
          <region>Jiangsu</region>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>Frank.Xialiang@huawei.com</email>
      </address>
    </author>
    <author initials="T." surname="Laffey" fullname="Tom Laffey">
      <organization abbrev="HPE">Hewlett Packard Enterprise</organization>
      <address>
        <email>tom.laffey@hpe.com</email>
      </address>
    </author>
    <author initials="G." surname="Fedorkow" fullname="Guy C. Fedorkow">
      <organization abbrev="Juniper">Juniper Networks</organization>
      <address>
        <postal>
          <street>10 Technology Park Drive</street>
          <city>Westford</city>
          <region>Massachusetts</region>
          <code>01886</code>
        </postal>
        <email>gfedorkow@juniper.net</email>
      </address>
    </author>
    <date year="2022" month="May" day="18"/>
    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document defines YANG RPCs and a few configuration nodes required to retrieve attestation evidence about integrity measurements from a device, following the operational context defined in TPM-based Network Device Remote Integrity Verification. Complementary measurement logs are also provided by the YANG RPCs, originating from one or more roots of trust for measurement (RTMs). The module defined requires at least one TPM 1.2 or TPM 2.0 as well as a corresponding TPM Software Stack (TSS), or equivalent hardware implementations that include the protected capabilities as provided by TPMs as well as a corresponding software stack, included in the device components of the composite device the YANG server is running on.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>This document is based on the general terminology defined in the <xref target="I-D.ietf-rats-architecture"/> and uses the operational context defined in <xref target="I-D.ietf-rats-tpm-based-network-device-attest"/> as well as the interaction model and information elements defined in <xref target="I-D.ietf-rats-reference-interaction-models"/>. The currently supported hardware security modules (HSMs) are the Trusted Platform Modules (TPMs) <xref target="TPM1.2"/> and <xref target="TPM2.0"/> as specified by the Trusted Computing Group (TCG). One TPM, or multiple TPMs in the case of a Composite Device, are required in order to use the YANG module defined in this document. Each TPM is used as a root of trust for storage (RTS) in order to store system security measurement Evidence.  And each TPM is used as a root of trust for reporting (RTR) in order to retrieve attestation Evidence.  This is done by using a YANG RPC to request a quote which exposes a rolling hash of the security measurements held internally within the TPM.</t>
      <t>Specific terms imported from <xref target="I-D.ietf-rats-architecture"/> and used in this document include: Attester, Composite Device, Evidence.</t>
      <t>Specific terms imported from <xref target="TPM2.0-Key"/> and used in this document include: Endorsement Key (EK), Initial Attestation Key (IAK), Attestation Identity Key (AIK), Local Attestation Key (LAK).</t>
      <section anchor="requirements-notation">
        <name>Requirements notation</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
"MAY", and "OPTIONAL" in this document are to be interpreted as
described in BCP&nbsp;14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="the-yang-module-for-basic-remote-attestation-procedures">
      <name>The YANG Module for Basic Remote Attestation Procedures</name>
      <t>One or more TPMs MUST be embedded in a Composite Device that provides attestation evidence via the YANG module defined in this document. The ietf-tpm-remote-attestation YANG module enables a composite device to take on the role of an Attester, in accordance with the Remote Attestation Procedures (RATS) architecture <xref target="I-D.ietf-rats-architecture"/>, and the corresponding challenge-response interaction model defined in the <xref target="I-D.ietf-rats-reference-interaction-models"/> document. A fresh nonce with an appropriate amount of entropy <xref target="NIST-915121"/> MUST be supplied by the YANG client in order to enable a proof-of-freshness with respect to the attestation Evidence provided by the Attester running the YANG datastore. Further, this nonce is used to prevent replay attacks. The method for communicating the relationship of each individual TPM to specific measured component within the Composite Device is out of the scope of this document.</t>
      <section anchor="yang-modules">
        <name>YANG Modules</name>
        <t>In this section the several YANG modules are defined.</t>
        <section anchor="ietf-tpm-remote-attestation">
          <name>'ietf-tpm-remote-attestation'</name>
          <t>This YANG module imports modules from <xref target="RFC6991"/> with prefix 'yang', <xref target="RFC8348"/> with prefix 'hw', <xref target="I-D.ietf-netconf-keystore"/> with prefix 'ks', and 'ietf-tcg-algs.yang' <xref target="ref-ietf-tcg-algs"/> with prefix 'taa'.  Additionally, references are made to <xref target="RFC8032"/>, <xref target="RFC8017"/>, <xref target="RFC6933"/>, <xref target="TPM1.2-Commands"/>, <xref target="TPM2.0-Arch"/>, <xref target="TPM2.0-Structures"/>, <xref target="TPM2.0-Key"/>, <xref target="TPM1.2-Structures"/>, <xref target="bios-log"/>, <xref target="BIOS-Log-Event-Type"/>, as well as <xref target="ima"/> and <xref target="netequip-boot-log"/>.</t>
          <section anchor="features">
            <name>Features</name>
            <t>This module supports the following features:</t>
            <ul spacing="normal">
              <li>'mtpm': Indicates that multiple TPMs on the device can support remote attestation. For example, this feature could be used in cases where multiple line cards are present, each with its own TPM.</li>
              <li>'bios': Indicates that the device supports the retrieval of BIOS/UEFI event logs. <xref target="bios-log"/></li>
              <li>'ima': Indicates that the device supports the retrieval of event logs from the Linux Integrity Measurement Architecture (IMA, see <xref target="ima"/>).</li>
              <li>'netequip_boot': Indicates that the device supports the retrieval of netequip boot event logs. See <xref target="ima"/> and <xref target="netequip-boot-log"/>.</li>
            </ul>
          </section>
          <section anchor="identities">
            <name>Identities</name>
            <t>This module supports the following types of attestation event logs: 'bios', 'ima', and 'netequip_boot'.</t>
          </section>
          <section anchor="remote-procedure-calls-rpcs">
            <name>Remote Procedure Calls (RPCs)</name>
            <t>In the following, RPCs for both TPM 1.2 and TPM 2.0 attestation procedures are defined.</t>
            <section anchor="tpm12-challenge-response-attestation">
              <name>'tpm12-challenge-response-attestation'</name>
              <t>This RPC allows a Verifier to request signed TPM PCRs (<em>TPM Quote</em> operation) from a TPM 1.2 compliant cryptoprocessor. Where the feature 'mtpm' is active, and one or more 'certificate-name' is not provided, all TPM 1.2 compliant cryptoprocessors will respond.  A YANG tree diagram of this RPC is as follows:</t>
              <sourcecode type="TREE">
+---x tpm12-challenge-response-attestation {taa:tpm12}?
  +---w input
  |  +---w tpm12-attestation-challenge
  |     +---w pcr-index*          pcr
  |     +---w nonce-value         binary
  |     +---w certificate-name*   certificate-name-ref
  |             {tpm:mtpm}?
  +--ro output
     +--ro tpm12-attestation-response* []
        +--ro certificate-name    certificate-name-ref
        +--ro up-time?            uint32
        +--ro TPM_QUOTE2?         binary
</sourcecode>
            </section>
            <section anchor="tpm20-challenge-response-attestation">
              <name>'tpm20-challenge-response-attestation'</name>
              <t>This RPC allows a Verifier to request signed TPM PCRs (<em>TPM Quote</em> operation) from a TPM 2.0 compliant cryptoprocessor. Where the feature 'mtpm' is active, and one or more 'certificate-name' is not provided, all TPM 2.0 compliant cryptoprocessors will respond. A YANG tree diagram of this RPC is as follows:</t>
              <sourcecode type="TREE">
+---x tpm20-challenge-response-attestation {taa:tpm20}?
   +---w input
   |  +---w tpm20-attestation-challenge
   |     +---w nonce-value            binary
   |     +---w tpm20-pcr-selection* []
   |     |  +---w tpm20-hash-algo?   identityref
   |     |  +---w pcr-index*         pcr
   |     +---w certificate-name*      certificate-name-ref
   |             {tpm:mtpm}?
   +--ro output
      +--ro tpm20-attestation-response* []
         +--ro certificate-name       certificate-name-ref
         +--ro TPMS_QUOTE_INFO        binary
         +--ro quote-signature?       binary
         +--ro up-time?               uint32
         +--ro unsigned-pcr-values* []
            +--ro tpm20-hash-algo?   identityref
            +--ro pcr-values* [pcr-index]
               +--ro pcr-index    pcr
               +--ro pcr-value?   binary
</sourcecode>
              <t>An example of an RPC challenge requesting PCRs 0-7 from a SHA-256 bank could look like the following:</t>
              <artwork><![CDATA[
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <tpm20-challenge-response-attestation>
      xmlns="urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation">
    <certificate-name>
      (identifier of a TPM signature key with which the Verifier is
      supposed to sign the attestation data)
    </certificate-name>
    <nonce>
      0xe041307208d9f78f5b1bbecd19e2d152ad49de2fc5a7d8dbf769f6b8ffdeab9
    </nonce>
    <tpm20-pcr-selection>
      <tpm20-hash-algo
          xmlns="urn:ietf:params:xml:ns:yang:ietf-tcg-algs">
        TPM_ALG_SHA256
      </tpm20-hash-algo>
      <pcr-index>0</pcr-index>
      <pcr-index>1</pcr-index>
      <pcr-index>2</pcr-index>
      <pcr-index>3</pcr-index>
      <pcr-index>4</pcr-index>
      <pcr-index>5</pcr-index>
      <pcr-index>6</pcr-index>
      <pcr-index>7</pcr-index>
    </tpm20-pcr-selection>
  </tpm20-challenge-response-attestation>
</rpc>
]]></artwork>
              <t>A successful response could be formatted as follows:</t>
              <artwork><![CDATA[
<rpc-reply message-id="101"
  xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <tpm20-attestation-response
    xmlns="urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation">
    <certificate-name
        xmlns="urn:ietf:params:xml:ns:yang:ietf-keystore">
        (instance of Certificate name in the Keystore)
    </certificate-name>
    <attestation-data>
       (raw attestation data, i.e. the TPM quote; this includes
       a composite digest of requested PCRs, the nonce,
       and TPM 2.0 time information.)
    </attestation-data>
    <quote-signature>
        (signature over attestation-data using the TPM key
        identified by sig-key-id)
    </quote-signature>
  </tpm20-attestation-response>
</rpc-reply>
]]></artwork>
            </section>
          </section>
          <section anchor="log-retrieval">
            <name>'log-retrieval'</name>
            <t>This RPC allows a Verifier to acquire the evidence which was extended into specific TPM PCRs. A YANG tree diagram of this RPC is as follows:</t>
            <sourcecode type="TREE">
    +---x log-retrieval
       +---w input
       |  +---w log-type        identityref
       |  +---w log-selector* []
       |     +---w name*                      string
       |     +---w (index-type)?
       |     |  +--:(last-entry)
       |     |  |  +---w last-entry-value?    binary
       |     |  +--:(index)
       |     |  |  +---w last-index-number?   uint64
       |     |  +--:(timestamp)
       |     |     +---w timestamp?           yang:date-and-time
       |     +---w log-entry-quantity?        uint16
       +--ro output
          +--ro system-event-logs
             +--ro node-data* []
                +--ro name?         string
                +--ro up-time?      uint32
                +--ro log-result
                   +--ro (attested_event_log_type)
                      +--:(bios) {bios}?
                      |  +--ro bios-event-logs
                      |     +--ro bios-event-entry* [event-number]
                      |        +--ro event-number    uint32
                      |        +--ro event-type?     uint32
                      |        +--ro pcr-index?      pcr
                      |        +--ro digest-list* []
                      |        |  +--ro hash-algo?   identityref
                      |        |  +--ro digest*      binary
                      |        +--ro event-size?     uint32
                      |        +--ro event-data*     binary
                      +--:(ima) {ima}?
                      |  +--ro ima-event-logs
                      |     +--ro ima-event-entry* [event-number]
                      |        +--ro event-number               uint64
                      |        +--ro ima-template?              string
                      |        +--ro filename-hint?             string
                      |        +--ro filedata-hash?             binary
                      |        +--ro filedata-hash-algorithm?   string
                      |        +--ro template-hash-algorithm?   string
                      |        +--ro template-hash?             binary
                      |        +--ro pcr-index?                 pcr
                      |        +--ro signature?                 binary
                      +--:(netequip_boot) {netequip_boot}?
                         +--ro boot-event-logs
                            +--ro boot-event-entry* [event-number]
                               +--ro event-number               uint64
                               +--ro ima-template?              string
                               +--ro filename-hint?             string
                               +--ro filedata-hash?             binary
                               +--ro filedata-hash-algorithm?   string
                               +--ro template-hash-algorithm?   string
                               +--ro template-hash?             binary
                               +--ro pcr-index?                 pcr
                               +--ro signature?                 binary
</sourcecode>
          </section>
          <section anchor="data-nodes">
            <name>Data Nodes</name>
            <t>This section provides a high level description of the data nodes containing the configuration and operational objects with the YANG model. For more details, please see the YANG model itself in <xref target="ref-ietf-tpm-remote-attestation"/>.</t>
            <dl>
              <dt>Container 'rats-support-structures':</dt>
              <dd>
                <t>This houses the set of information relating to remote attestation for a device.  This includes specific device TPM(s), the compute nodes (such as line cards) on which the TPM(s) reside, and the algorithms supported across the platform.</t>
              </dd>
              <dt>Container 'tpms':</dt>
              <dd>
                <t>Provides configuration and operational details for each supported TPM, including the tpm-firmware-version, PCRs which may be quoted, certificates which are associated with that TPM, and the current operational status. Of note are the certificates which are associated with that TPM. As a certificate is associated with a particular TPM attestation key, knowledge of the certificate allows a specific TPM to be identified.</t>
              </dd>
            </dl>
            <sourcecode type="TREE">
+--rw tpms
   +--rw tpm* [name]
      +--rw name                string
      +--ro hardware-based      boolean
      +--ro physical-index?     int32 {hw:entity-mib}?
      +--ro path?               string
      +--ro compute-node        compute-node-ref {tpm:mtpm}?
      +--ro manufacturer?       string
      +--rw firmware-version    identityref
      +--rw tpm12-hash-algo?    identityref {taa:tpm12}?
      +--rw tpm12-pcrs*         pcr
      +--rw tpm20-pcr-bank* [tpm20-hash-algo]  {taa:tpm20}?
      |  +--rw tpm20-hash-algo    identityref
      |  +--rw pcr-index*         tpm:pcr
      +--ro status              enumeration
      +--rw certificates
         +--rw certificate* [name]
            +--rw name            string
            +--rw keystore-ref?   leafref {ks:asymmetric-keys}?
            +--rw type?           enumeration
</sourcecode>
            <t>container 'attester-supported-algos' - Identifies which TCG hash algorithms are available for use on the Attesting platform. An operator will use this information to limit algorithms available for use by RPCs to just a desired set from the universe of all allowed hash algorithms by the TCG.</t>
            <sourcecode type="TREE">
     +--rw attester-supported-algos
        +--rw tpm12-asymmetric-signing*   identityref {taa:tpm12}?
        +--rw tpm12-hash*                 identityref {taa:tpm12}?
        +--rw tpm20-asymmetric-signing*   identityref {taa:tpm20}?
        +--rw tpm20-hash*                 identityref {taa:tpm20}?
</sourcecode>
            <t>container 'compute-nodes' - When there is more than one TPM supported, this container maintains the set of information related to the compute node associated with a specific TPM. This allows each specific TPM to identify to which 'compute-node' it belongs.</t>
            <sourcecode type="TREE">
     +--rw compute-nodes {tpm:mtpm}?
        +--ro compute-node* [node-id]
           +--ro node-id                string
           +--ro node-physical-index?   int32 {hw:entity-mib}?
           +--ro node-name?             string
           +--ro node-location?         string
</sourcecode>
          </section>
          <section anchor="yang-module">
            <name>YANG Module</name>
            <figure anchor="ref-ietf-tpm-remote-attestation">
              <sourcecode type="YANG">
&lt;CODE BEGINS&gt; file "ietf-tpm-remote-attestation@2022-05-13.yang"
module ietf-tpm-remote-attestation {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation";
  prefix tpm;

  import ietf-yang-types {
    prefix yang;
  }
  import ietf-hardware {
    prefix hw;
  }
  import ietf-keystore {
    prefix ks;
  }
  import ietf-tcg-algs {
    prefix taa;
  }

  organization
    "IETF RATS (Remote ATtestation procedureS) Working Group";
  contact
    "WG Web  : &lt;https://datatracker.ietf.org/wg/rats/&gt;
     WG List : &lt;mailto:rats@ietf.org&gt;
     Author  : Eric Voit &lt;evoit@cisco.com&gt;
     Author  : Henk Birkholz &lt;henk.birkholz@sit.fraunhofer.de&gt;
     Author  : Michael Eckel &lt;michael.eckel@sit.fraunhofer.de&gt;
     Author  : Shwetha Bhandari &lt;shwetha.bhandari@thoughtspot.com&gt;
     Author  : Bill Sulzen &lt;bsulzen@cisco.com&gt;
     Author  : Liang Xia (Frank) &lt;frank.xialiang@huawei.com&gt;
     Author  : Tom Laffey &lt;tom.laffey@hpe.com&gt;
     Author  : Guy Fedorkow &lt;gfedorkow@juniper.net&gt;";
  description
    "A YANG module to enable a TPM 1.2 and TPM 2.0 based
     remote attestation procedure using a challenge-response
     interaction model and the TPM 1.2 and TPM 2.0 Quote
     primitive operations.

     Copyright (c) 2022 IETF Trust and the persons identified
     as authors of the code. All rights reserved.
     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Revised BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
     itself for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision 2022-05-13 {
    description
      "Initial version";
    reference
      "RFC XXXX: A YANG Data Model for Challenge-Response-based Remote
       Attestation Procedures using TPMs";
  }

  /*****************/
  /*   Features    */
  /*****************/

  feature mtpm {
    description
      "The device supports the remote attestation of multiple
       TPM based cryptoprocessors.";
  }

  feature bios {
    description
      "The device supports the bios logs.";
    reference
      "bios-log:
       https://trustedcomputinggroup.org/wp-content/uploads/
       PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf
       Section 9.4.5.2";
  }

  feature ima {
    description
      "The device supports Integrity Measurement Architecture logs.
       Many variants of IMA logs exist in the deployment.  Each encodes
       the log entry contents as the specific measurements which get
       hashed into a PCRs as Evidence.  See the reference below for
       one example of such an encoding.";
    reference
      "ima-log:
       https://www.trustedcomputinggroup.org/wp-content/uploads/
       TCG_IWG_CEL_v1_r0p41_pub.pdf  Section 5.1.6";
  }

  feature netequip_boot {
    description
      "The device supports the netequip_boot logs.";
    reference
      "netequip-boot-log:
       RFC XXXX  Appendix B";
  }

  /*****************/
  /*   Typedefs    */
  /*****************/

  typedef pcr {
    type uint8 {
      range "0..31";
    }
    description
      "Valid index number for a PCR.  A {{TPM2.0}} compliant PCR index
       extends from 0-31.  At this time a typical TPM would have no
       more than 32 PCRS.";
  }

  typedef compute-node-ref {
    type leafref {
      path "/tpm:rats-support-structures/tpm:compute-nodes"
         + "/tpm:compute-node/tpm:node-id";
    }
    description
      "This type is used to reference a hardware node.  Note that an
       implementer might include an alternative leafref pointing to a
       different YANG module node specifying hardware structures.";
  }

  typedef certificate-name-ref {
    type leafref {
      path "/tpm:rats-support-structures/tpm:tpms/tpm:tpm"
         + "/tpm:certificates/tpm:certificate/tpm:name";
    }
    description
      "A type which allows identification of a TPM based certificate.";
  }

  /******************/
  /*   Identities   */
  /******************/

  identity attested_event_log_type {
    description
      "Base identity allowing categorization of the reasons why an
       attested measurement has been taken on an Attester.";
  }

  identity ima {
    base attested_event_log_type;
    description
      "An event type recorded in IMA.";
  }

  identity bios {
    base attested_event_log_type;
    description
      "An event type associated with BIOS/UEFI.";
  }

  identity netequip_boot {
    base attested_event_log_type;
    description
      "An event type associated with Network Equipment Boot.";
  }

  /*****************/
  /*   Groupings   */
  /*****************/

  grouping tpm20-hash-algo {
    description
      "The cryptographic algorithm used to hash the TPM2 PCRs.  This
       must be from the list of platform supported options.";
    leaf tpm20-hash-algo {
      type identityref {
        base taa:hash;
      }
      must '. = /tpm:rats-support-structures'
         + '/tpm:attester-supported-algos/tpm:tpm20-hash' {
        error-message "This platform does not support tpm20-hash-algo";
      }
      description
        "The hash scheme that is used to hash a TPM2.0 PCR. This
         must be one of those supported by a platform.
         Where this object does not appear, the default value of
         'taa:TPM_ALG_SHA256' will apply.";
    }
  }

  grouping tpm12-hash-algo {
    description
      "The cryptographic algorithm used to hash the TPM1.2 PCRs.";
    leaf tpm12-hash-algo {
      type identityref {
        base taa:hash;
      }
      must '. = /tpm:rats-support-structures'
         + '/tpm:attester-supported-algos/tpm:tpm12-hash' {
        error-message "This platform does not support tpm12-hash-algo";
      }
      description
        "The hash scheme that is used to hash a TPM1.2 PCR. This
         MUST be one of those supported by a platform.
         Where this object does not appear, the default value of
         'taa:TPM_ALG_SHA1' will apply.";
    }
  }

  grouping nonce {
    description
      "A random number intended to guarantee freshness and for use
       as part of a replay-detection mechanism.";
    leaf nonce-value {
      type binary;
      mandatory true;
      description
        "A cryptographically generated random number which should
         not be predictable prior to its issuance from a random
         number generation function. The random number MUST be
         derived from an entropy source external to the Attester.

         Note that a nonce sent into a TPM will typically be 160 or 256
         binary digits long.  (This is 20 or 32 bytes.) So if fewer
         binary digits are sent, this nonce object will be padded
         with leading zeros within Quotes returned from the TPM.
         Additionally if more bytes are sent, the nonce will be trimmed
         to the most significant binary digits.";
    }
  }

  grouping tpm12-pcr-selection {
    description
      "A Verifier can request one or more PCR values using its
       individually created Attestation Key Certificate (AC).
       The corresponding selection filter is represented in this
       grouping.";
    leaf-list pcr-index {
      type pcr;
      description
        "The numbers/indexes of the PCRs. In addition, any selection
         of PCRs MUST verify that the set of PCRs requested are a
         subset the set of PCRs exposed by in the leaf-list
         /tpm:rats-support-structures
         /tpm:tpms/tpm:tpm[name=current()]/tpm:tpm12-pcrs";
    }
  }

  grouping tpm20-pcr-selection {
    description
      "A Verifier can acquire one or more PCR values, which are hashed
       together in a TPM2B_DIGEST coming from the TPM2.  The selection
       list of desired PCRs and the Hash Algorithm is represented in
       this grouping.";
    list tpm20-pcr-selection {
      unique "tpm20-hash-algo";
      description
        "Specifies the list of PCRs and Hash Algorithms that can be
         returned within a TPM2B_DIGEST.";
      reference
        "TPM2.0-Structures:
         https://www.trustedcomputinggroup.org/wp-content/uploads/
         TPM-Rev-2.0-Part-2-Structures-01.38.pdf  Section 10.9.7";
      uses tpm20-hash-algo;
      leaf-list pcr-index {
        type pcr;
        description
          "The numbers of the PCRs that which are being tracked
           with a hash based on the tpm20-hash-algo.  In addition,
           any selection of PCRs MUST verify that the set of PCRs
           requested are a subset the set of PCR indexes selected
           are available for that specific TPM.";
      }
    }
  }

  grouping certificate-name-ref {
    description
      "Identifies a certificate in a keystore.";
    leaf certificate-name {
      type certificate-name-ref;
      mandatory true;
      description
        "Identifies a certificate in a keystore.";
    }
  }

  grouping tpm-name {
    description
      "A unique TPM on a device.";
    leaf name {
      type string;
      description
        "Unique system generated name for a TPM on a device.";
    }
  }

  grouping node-uptime {
    description
      "Uptime in seconds of the node.";
    leaf up-time {
      type uint32;
      description
        "Uptime in seconds of this node reporting its data";
    }
  }

  grouping tpm12-attestation {
    description
      "Contains an instance of TPM1.2 style signed cryptoprocessor
       measurements.  It is supplemented by unsigned Attester
       information.";
    uses node-uptime;
    leaf TPM_QUOTE2 {
      type binary;
      description
        "Result of a TPM1.2 Quote2 operation. This includes PCRs,
         signatures, locality, the provided nonce and other data which
         can be further parsed to appraise the Attester.";
      reference
        "TPM1.2-Commands:
         TPM1.2 commands rev116 July 2007, Section 16.5
         https://trustedcomputinggroup.org/wp-content/uploads
         /TPM-Main-Part-3-Commands_v1.2_rev116_01032011.pdf";
    }
  }

  grouping tpm20-attestation {
    description
      "Contains an instance of TPM2 style signed cryptoprocessor
       measurements.  It is supplemented by unsigned Attester
       information.";
    leaf TPMS_QUOTE_INFO {
      type binary;
      mandatory true;
      description
        "A hash of the latest PCR values (and the hash algorithm used)
         which have been returned from a Verifier for the selected PCRs
         and Hash Algorithms.";
      reference
        "TPM2.0-Structures:
         https://www.trustedcomputinggroup.org/wp-content/uploads/
         TPM-Rev-2.0-Part-2-Structures-01.38.pdf  Section 10.12.1";
    }
    leaf quote-signature {
      type binary;
      description
        "Quote signature returned by TPM Quote.  The signature was
         generated using the key associated with the
         certificate 'name'.";
      reference
        "TPM2.0-Structures:
         https://www.trustedcomputinggroup.org/wp-content/uploads/
         TPM-Rev-2.0-Part-2-Structures-01.38.pdf  Section 11.2.1";
    }
    uses node-uptime;
    list unsigned-pcr-values {
      description
        "PCR values in each PCR bank. This might appear redundant with
         the TPM2B_DIGEST, but that digest is calculated across multiple
         PCRs.  Having to verify across multiple PCRs does not
         necessarily make it easy for a Verifier to appraise just the
         minimum set of PCR information which has changed since the last
         received TPM2B_DIGEST.  Put another way, why should a Verifier
         reconstruct the proper value of all PCR Quotes when only a
         single PCR has changed?
         To help this happen, if the Attester does know specific PCR
         values, the Attester can provide these individual values via
         'unsigned-pcr-values'.   By comparing this information to
         what has previously been validated, it is possible for a
         Verifier to confirm the Attester's signature while eliminating

         significant processing.  Note that there should never be a
         result where an unsigned PCR value differs from what may be
         reconstructed from the within the PCR quote and the event logs.
         If there is a difference, a signed result which has been
         verified from retrieved logs is considered definitive.";
      uses tpm20-hash-algo;
      list pcr-values {
        key "pcr-index";
        description
          "List of one PCR bank.";
        leaf pcr-index {
          type pcr;
          description
            "PCR index number.";
        }
        leaf pcr-value {
          type binary;
          description
            "PCR value.";
          reference
            "TPM2.0-Structures:
             https://www.trustedcomputinggroup.org/wp-content/uploads/
             TPM-Rev-2.0-Part-2-Structures-01.38.pdf  Section 10.9.7";
        }
      }
    }
  }

  grouping log-identifier {
    description
      "Identifier for type of log to be retrieved.";
    leaf log-type {
      type identityref {
        base attested_event_log_type;
      }
      mandatory true;
      description
        "The corresponding measurement log type identity.";
    }
  }

  grouping boot-event-log {
    description
      "Defines a specific instance of an event log entry
       and corresponding to the information used to
       extend the PCR";
    leaf event-number {
      type uint32;
      description
        "Unique event number of this event which monotonically
         increases within a given event log.  The maximum event
         number should not be reached, nor is wrapping back to
         an earlier number supported.";
    }
    leaf event-type {
      type uint32;
      description
        "BIOS Log Event Type:
         https://trustedcomputinggroup.org/wp-content/uploads/
         TCG_PCClient_PFP_r1p05_v23_pub.pdf  Section 10.4.1";
    }
    leaf pcr-index {
      type pcr;
      description
        "Defines the PCR index that this event extended";
    }
    list digest-list {
      description
        "Hash of event data";
      leaf hash-algo {
        type identityref {
          base taa:hash;
        }
        description
          "The hash scheme that is used to compress the event data in
           each of the leaf-list digest items.";
      }
      leaf-list digest {
        type binary;
        description
          "The hash of the event data using the algorithm of the
           'hash-algo' against 'event data'.";
      }
    }
    leaf event-size {
      type uint32;
      description
        "Size of the event data";
    }
    leaf-list event-data {
      type binary;
      description
        "The event data.  This is a binary structure
         of size 'event-size'. For more on what 
         might be recorded within this object
         see [bios-log] Section 9 which details 
         viable events which might be recorded.";
    }
  }

  grouping bios-event-log {
    description
      "Measurement log created by the BIOS/UEFI.";
    list bios-event-entry {
      key "event-number";
      description
        "Ordered list of TCG described event log
         that extended the PCRs in the order they
         were logged";
      uses boot-event-log;
    }
  }

  grouping ima-event {
    description
      "Defines a hash log extend event for IMA measurements";
    reference
      "ima-log:
       https://www.trustedcomputinggroup.org/wp-content/uploads/
       TCG_IWG_CEL_v1_r0p41_pub.pdf  Section 4.3";
    leaf event-number {
      type uint64;
      description
        "Unique event number of this event which monotonically
         increases.  The maximum event number should not be
         reached, nor is wrapping back to an earlier number
         supported.";
    }
    leaf ima-template {
      type string;
      description
        "Name of the template used for event logs
         for e.g. ima, ima-ng, ima-sig";
    }
    leaf filename-hint {
      type string;
      description
        "File name (including the path) that was measured.";
    }
    leaf filedata-hash {
      type binary;
      description
        "Hash of filedata as updated based upon the
         filedata-hash-algorithm";
    }
    leaf filedata-hash-algorithm {
      type string;
      description
        "Algorithm used for filedata-hash";
    }
    leaf template-hash-algorithm {
      type string;
      description
        "Algorithm used for template-hash";
    }
    leaf template-hash {
      type binary;
      description
        "hash(filedata-hash, filename-hint)";
    }
    leaf pcr-index {
      type pcr;
      description
        "Defines the PCR index that this event extended";
    }
    leaf signature {
      type binary;
      description
        "Digital file signature which provides a
         fingerprint for the file being measured.";
    }
  }

  grouping ima-event-log {
    description
      "Measurement log created by IMA.";
    list ima-event-entry {
      key "event-number";
      description
        "Ordered list of ima event logs by event-number";
      uses ima-event;
    }
  }

  grouping network-equipment-boot-event-log {
    description
      "Measurement log created by Network Equipment Boot. The Network
       Equipment Boot format is identical to the IMA format. In
       contrast to the IMA log, the Network Equipment Boot log
       includes every measurable event from an Attester, including
       the boot stages of BIOS, Bootloader, etc. In essence, the scope
       of events represented in this format combines the scope of BIOS
       events and IMA events.";
    list boot-event-entry {
      key "event-number";
      description
        "Ordered list of Network Equipment Boot event logs
         by event-number, using the IMA event format.";
      uses ima-event;
    }
  }

  grouping event-logs {
    description
      "A selector for the log and its type.";
    choice attested_event_log_type {
      mandatory true;
      description
        "Event log type determines the event logs content.";
      case bios {
        if-feature "bios";
        description
          "BIOS/UEFI event logs";
        container bios-event-logs {
          description
            "BIOS/UEFI event logs";
          uses bios-event-log;
        }
      }
      case ima {
        if-feature "ima";
        description
          "IMA event logs.";
        container ima-event-logs {
          description
            "IMA event logs.";
          uses ima-event-log;
        }
      }
      case netequip_boot {
        if-feature "netequip_boot";
        description
          "Network Equipment Boot event logs";
        container boot-event-logs {
          description
            "Network equipment boot event logs.";
          uses network-equipment-boot-event-log;
        }
      }
    }
  }

  /**********************/
  /*   RPC operations   */
  /**********************/

  rpc tpm12-challenge-response-attestation {
    if-feature "taa:tpm12";
    description
      "This RPC accepts the input for TSS TPM 1.2 commands made to the
       attesting device.";
    input {
      container tpm12-attestation-challenge {
        description
          "This container includes every information element defined
           in the reference challenge-response interaction model for
           remote attestation. Corresponding values are based on
           TPM 1.2 structure definitions";
        uses tpm12-pcr-selection;
        uses nonce;
        leaf-list certificate-name {
          if-feature "tpm:mtpm";
          type certificate-name-ref;
          must "/tpm:rats-support-structures/tpm:tpms"
             + "/tpm:tpm[tpm:firmware-version='taa:tpm12']"
             + "/tpm:certificates/"
             + "/tpm:certificate[name=current()]" {
            error-message "Not an available TPM1.2 AIK certificate.";
          }
          description
            "When populated, the RPC will only get a Quote for the
             TPMs associated with these certificate(s).";
        }
      }
    }
    output {
      list tpm12-attestation-response {
        unique "certificate-name";
        description
          "The binary output of TPM 1.2 TPM_Quote/TPM_Quote2, including
           the PCR selection and other associated attestation evidence
           metadata";
        uses certificate-name-ref {
          description
            "Certificate associated with this tpm12-attestation.";
        }
        uses tpm12-attestation;
      }
    }
  }

  rpc tpm20-challenge-response-attestation {
    if-feature "taa:tpm20";
    description
      "This RPC accepts the input for TSS TPM 2.0 commands of the
       managed device. ComponentIndex from the hardware manager YANG
       module is used to refer to dedicated TPM in composite devices,
       e.g. smart NICs, is not covered.";
    input {
      container tpm20-attestation-challenge {
        description
          "This container includes every information element defined
           in the reference challenge-response interaction model for
           remote attestation. Corresponding values are based on
           TPM 2.0 structure definitions";
        uses nonce;
        uses tpm20-pcr-selection;
        leaf-list certificate-name {
          if-feature "tpm:mtpm";
          type certificate-name-ref;
          must "/tpm:rats-support-structures/tpm:tpms"
             + "/tpm:tpm[tpm:firmware-version='taa:tpm20']"
             + "/tpm:certificates/"
             + "/tpm:certificate[name=current()]" {
            error-message "Not an available TPM2.0 AIK certificate.";
          }
          description
            "When populated, the RPC will only get a Quote for the
             TPMs associated with the certificates.";
        }
      }
    }
    output {
      list tpm20-attestation-response {
        unique "certificate-name";
        description
          "The binary output of TPM2b_Quote from one TPM of the
           node which identified by node-id. An TPMS_ATTEST structure
           including a length, encapsulated in a signature";
        uses certificate-name-ref {
          description
            "Certificate associated with this tpm20-attestation.";
        }
        uses tpm20-attestation;
      }
    }
  }

  rpc log-retrieval {
    description
      "Logs Entries are either identified via indices or via providing
       the last line received. The number of lines returned can be
       limited. The type of log is a choice that can be augmented.";
    input {
      uses log-identifier;
      list log-selector {
        description
          "Only log entries which meet all the selection criteria 
           provided are to be returned by the RPC output.";
        leaf-list name {
          type string;
          description
            "Name of one or more unique TPMs on a device.  If this 
             object exists, a selection should pull only the objects 
             related to these TPM(s).  If it does not exist, all 
             qualifying TPMs that are 'hardware-based' equals true 
             on the device are selected. When this selection 
             criteria is provided, it will be considered as a logical 
             AND with any other selection criteria provided.";
        }
        choice index-type {
          description
            "Last log entry received, log index number, or timestamp.";
          case last-entry {
            description
              "The last entry of the log already retrieved.";
            leaf last-entry-value {
              type binary;
              description
                "Content of a log event which matches 1:1 with a
                 unique event record contained within the log.  Log
                 entries after this will be passed to the
                 requester.  Note: if log entry values are not unique,
                 this MUST return an error.";
            }
          }
          case index {
            description
              "Numeric index of the last log entry retrieved, or
               zero.";
            leaf last-index-number {
              type uint64;
              description
                "The last numeric index number of a log entry.
                 Zero means to start at the beginning of the log.
                 Entries after this will be passed to the
                 requester.";
            }
          }
          case timestamp {
            leaf timestamp {
              type yang:date-and-time;
              description
                "Timestamp from which to start the extraction.  The
                 next log entry after this timestamp is to
                 be sent.";
            }
            description
              "Timestamp from which to start the extraction.";
          }
        }
        leaf log-entry-quantity {
          type uint16;
          description
            "The number of log entries to be returned. If omitted, it
             means all of them.";
        }
      }
    }
    output {
      container system-event-logs {
        description
          "The requested data of the measurement event logs";
        list node-data {
          unique "name";
          description
            "Event logs of a node in a distributed system
             identified by the node name";
          uses tpm-name;
          uses node-uptime;
          container log-result {
            description
              "The requested entries of the corresponding log.";
            uses event-logs;
          }
        }
      }
    }
  }

  /**************************************/
  /*   Config &amp; Oper accessible nodes   */
  /**************************************/

  container rats-support-structures {
    description
      "The datastore definition enabling verifiers or relying
       parties to discover the information necessary to use the
       remote attestation RPCs appropriately.";
    container compute-nodes {
      if-feature "tpm:mtpm";
      description
        "Holds the set of device subsystems/components in this
         composite device that support TPM operations.";
      list compute-node {
        key "node-id";
        unique "node-name";
        config false;
        min-elements 2;
        description
          "A component within this composite device which
           supports TPM operations.";
        leaf node-id {
          type string;
          description
            "ID of the compute node, such as Board Serial Number.";
        }
        leaf node-physical-index {
          if-feature "hw:entity-mib";
          type int32 {
            range "1..2147483647";
          }
          config false;
          description
            "The entPhysicalIndex for the compute node.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
        }
        leaf node-name {
          type string;
          description
            "Name of the compute node.";
        }
        leaf node-location {
          type string;
          description
            "Location of the compute node, such as slot number.";
        }
      }
    }
    container tpms {
      description
        "Holds the set of TPMs within an Attester.";
      list tpm {
        key "name";
        unique "path";
        description
          "A list of TPMs in this composite device that RATS
           can be conducted with.";
        uses tpm-name;
        leaf hardware-based {
          type boolean;
          config false;
          mandatory true;
          description
            "System generated indication of whether this is a
             hardware based TPM.";
        }
        leaf physical-index {
          if-feature "hw:entity-mib";
          type int32 {
            range "1..2147483647";
          }
          config false;
          description
            "The entPhysicalIndex for the TPM.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
        }
        leaf path {
          type string;
          config false;
          description
            "Device path to a unique TPM on a device.  This can change
             across reboots.";
        }
        leaf compute-node {
          if-feature "tpm:mtpm";
          type compute-node-ref;
          config false;
          mandatory true;
          description
            "Indicates the compute node measured by this TPM.";
        }
        leaf manufacturer {
          type string;
          config false;
          description
            "TPM manufacturer name.";
        }
        leaf firmware-version {
          type identityref {
            base taa:cryptoprocessor;
          }
          mandatory true;
          description
            "Identifies the cryptoprocessor API set supported.  This
             is automatically configured by the device and should not
             be changed.";
        }
        uses tpm12-hash-algo {
                  if-feature "taa:tpm12";
          when "derived-from-or-self(firmware-version, 'taa:tpm12')";
          refine "tpm12-hash-algo" {
            description
              "The hash algorithm overwrites the default used for PCRs
               on this TPM1.2 compliant cryptoprocessor.";
          }
        }
        leaf-list tpm12-pcrs {
          if-feature "taa:tpm12";
                  when 
            "derived-from-or-self(../firmware-version, 'taa:tpm12')";
          type pcr;
          description
            "The PCRs which may be extracted from this TPM1.2
             compliant cryptoprocessor.";
        }
        list tpm20-pcr-bank {
          if-feature "taa:tpm20";
                  when 
            "derived-from-or-self(../firmware-version, 'taa:tpm20')";
          key "tpm20-hash-algo";
          description
            "Specifies the list of PCRs that may be extracted for
             a specific Hash Algorithm on this TPM2 compliant
             cryptoprocessor.  A bank is a set of PCRs which are
             extended using a particular hash algorithm.";
          reference
            "TPM2.0-Structures:
             https://www.trustedcomputinggroup.org/wp-content/uploads/
             TPM-Rev-2.0-Part-2-Structures-01.38.pdf  Section 10.9.7";
          leaf tpm20-hash-algo {
            type identityref {
              base taa:hash;
            }
            must '/tpm:rats-support-structures'
               + '/tpm:attester-supported-algos'
               + '/tpm:tpm20-hash' {
              error-message "This platform does not support tpm20-hash-algo";
            }
            description
              "The hash scheme actively being used to hash a
               one or more TPM2.0 PCRs.";
          }
          leaf-list pcr-index {
            type tpm:pcr;
            description
              "Defines what TPM2 PCRs are available to be extracted.";
          }
        }
        leaf status {
          type enumeration {
            enum operational {
              value 0;
              description
                "The TPM currently is running normally and
                 is ready to accept and process TPM quotes.";
              reference
                "TPM2.0-Arch:
                 https://trustedcomputinggroup.org/wp-content/uploads/
                 TCG_TPM2_r1p59_Part1_Architecture_pub.pdf
                 Section 12";
            }
            enum non-operational {
              value 1;
              description
                "TPM is in a state such as startup or shutdown which
                 precludes the processing of TPM quotes.";
            }
          }
          config false;
          mandatory true;
          description
            "TPM chip self-test status.";
        }
        container certificates {
          description
            "The TPM's certificates, including EK certificates
             and Attestation Key certificates.";
          list certificate {
            key "name";
            description
              "Three types of certificates can be accessed via
               this statement, including Initial Attestation
               Key Certificate, Local Attestation Key Certificate or
               Endorsement Key Certificate.";
            leaf name {
              type string;
              description
                "An arbitrary name uniquely identifying a certificate
                 associated within key within a TPM.";
            }
            leaf keystore-ref {
              if-feature "ks:asymmetric-keys";
              type leafref {
                path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key"
                   + "/ks:name";
              }
              description
                "A reference to a specific certificate of an
                 asymmetric key in the Keystore.";
            }
            leaf type {
              type enumeration {
                enum endorsement-certificate {
                  value 0;
                  description
                    "Endorsement Key (EK) Certificate type.";
                  reference
                    "TPM2.0-Key:
                     https://trustedcomputinggroup.org/wp-content/
                     uploads/TPM-2p0-Keys-for-Device-Identity-
                     and-Attestation_v1_r12_pub10082021.pdf
                     Section 3.11";
                }
                enum initial-attestation-certificate {
                  value 1;
                  description
                    "Initial Attestation key (IAK) Certificate type.";
                  reference
                    "TPM2.0-Key:
                     https://trustedcomputinggroup.org/wp-content/
                     uploads/TPM-2p0-Keys-for-Device-Identity-
                     and-Attestation_v1_r12_pub10082021.pdf
                     Section 3.2";
                }
                enum local-attestation-certificate {
                  value 2;
                  description
                    "Local Attestation Key (LAK) Certificate type.";
                  reference
                    "TPM2.0-Key:
                     https://trustedcomputinggroup.org/wp-content/
                     uploads/TPM-2p0-Keys-for-Device-Identity-
                     and-Attestation_v1_r12_pub10082021.pdf
                     Section 3.2";
                }
              }
              description
                "Function supported by this certificate from within the
                 TPM.";
            }
          }
        }
      }
    }
    container attester-supported-algos {
      description
        "Identifies which TPM algorithms are available for use on an
         attesting platform.";
      leaf-list tpm12-asymmetric-signing {
        if-feature "taa:tpm12";
                when "../../tpm:tpms"
           + "/tpm:tpm[tpm:firmware-version='taa:tpm12']";
        type identityref {
          base taa:asymmetric;
        }
        description
          "Platform Supported TPM12 asymmetric algorithms.";
      }
      leaf-list tpm12-hash {
        if-feature "taa:tpm12";
                when "../../tpm:tpms"
           + "/tpm:tpm[tpm:firmware-version='taa:tpm12']";
        type identityref {
          base taa:hash;
        }
        description
          "Platform supported TPM12 hash algorithms.";
      }
      leaf-list tpm20-asymmetric-signing {
        if-feature "taa:tpm20";
                when "../../tpm:tpms"
           + "/tpm:tpm[tpm:firmware-version='taa:tpm20']";
        type identityref {
          base taa:asymmetric;
        }
        description
          "Platform Supported TPM20 asymmetric algorithms.";
      }
      leaf-list tpm20-hash {
        if-feature "taa:tpm20";
                when "../../tpm:tpms"
           + "/tpm:tpm[tpm:firmware-version='taa:tpm20']";
        type identityref {
          base taa:hash;
        }
        description
          "Platform supported TPM20 hash algorithms.";
      }
    }
  }
}
&lt;CODE ENDS&gt;
</sourcecode>
            </figure>
          </section>
        </section>
        <section anchor="ietf-tcg-algs">
          <name>'ietf-tcg-algs'</name>
          <t>This document has encoded the TCG Algorithm definitions of <xref target="TCG-Algos"/>, revision 1.32. By including this full table as a separate YANG file within this document, it is possible for other YANG models to leverage the contents of this model.  Specific references to <xref target="RFC2104"/>, <xref target="RFC8017"/>, <xref target="ISO-IEC-9797-1"/>, <xref target="ISO-IEC-9797-2"/>, <xref target="ISO-IEC-10116"/>, <xref target="ISO-IEC-10118-3"/>, <xref target="ISO-IEC-14888-3"/>, <xref target="ISO-IEC-15946-1"/>, <xref target="ISO-IEC-18033-3"/>, <xref target="IEEE-Std-1363-2000"/>, <xref target="IEEE-Std-1363a-2004"/>, <xref target="NIST-PUB-FIPS-202"/>, <xref target="NIST-SP800-38C"/>, <xref target="NIST-SP800-38D"/>, <xref target="NIST-SP800-38F"/>, <xref target="NIST-SP800-56A"/>, <xref target="NIST-SP800-108"/>, <xref target="bios-log"/>, as well as <xref target="ima"/> and <xref target="netequip-boot-log"/> exist within the YANG Model.</t>
          <section anchor="features-1">
            <name>Features</name>
            <t>There are two types of features supported: 'TPM12' and 'TPM20'. Support for either of these features indicates that a cryptoprocessor supporting the corresponding type of TCG TPM API is present on an Attester. Most commonly, only one type of cryptoprocessor will be available on an Attester.</t>
          </section>
          <section anchor="identities-1">
            <name>Identities</name>
            <t>There are three types of identities in this model:</t>
            <ol spacing="normal" type="1">
              <li>Cryptographic functions supported by a TPM algorithm; these include: 'asymmetric', 'symmetric', 'hash', 'signing', 'anonymous_signing', 'encryption_mode', 'method', and 'object_type'. The definitions of each of these are in Table 2 of <xref target="TCG-Algos"/>.</li>
              <li>API specifications for TPM types: 'tpm12' and 'tpm20'</li>
              <li>Specific algorithm types: Each algorithm type defines what cryptographic functions may be supported, and on which type of API specification. It is not required that an implementation of a specific TPM will support all algorithm types. The contents of each specific algorithm mirrors what is in Table 3 of <xref target="TCG-Algos"/>.</li>
            </ol>
          </section>
          <section anchor="ref-ietf-tcg-algs">
            <name>YANG Module</name>
            <sourcecode type="YANG">
&lt;CODE BEGINS&gt; file "ietf-tcg-algs@2022-03-23.yang"
module ietf-tcg-algs {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-tcg-algs";
  prefix taa;

  organization
    "IETF RATS (Remote ATtestation procedureS) Working Group";
  contact
    "WG Web:   &lt;https://datatracker.ietf.org/wg/rats/&gt;
     WG List:  &lt;mailto:rats@ietf.org&gt;
     Author:   Eric Voit &lt;mailto:evoit@cisco.com&gt;";
  description
    "This module defines identities for asymmetric algorithms.

     Copyright (c) 2022 IETF Trust and the persons identified as
     authors of the code. All rights reserved.
     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Revised
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).
     
     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself 
     for full legal notices.
     
     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL',
     'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED',
     'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document
     are to be interpreted as described in BCP 14 (RFC 2119)
     (RFC 8174) when, and only when, they appear in all
     capitals, as shown here.";

  revision 2022-03-23 {
    description
      "Initial version";
    reference
      "RFC XXXX: A YANG Data Model for Challenge-Response-based Remote
       Attestation Procedures using TPMs";
  }

  /*****************/
  /*   Features    */
  /*****************/

  feature tpm12 {
    description
      "This feature indicates algorithm support for the TPM 1.2 API
       as per Section 4.8 of TPM1.2-Structures:
       TPM Main Part 2 TPM Structures
       https://trustedcomputinggroup.org/wp-content/uploads/TPM-
       Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf";
  }

  feature tpm20 {
    description
      "This feature indicates algorithm support for the TPM 2.0 API
       as per Section 11.4 of Trusted Platform Module Library
       Part 1: Architecture. See TPM2.0-Arch:
       https://trustedcomputinggroup.org/wp-content/uploads/
       TCG_TPM2_r1p59_Part1_Architecture_pub.pdf";
  }

  /*****************/
  /*  Identities   */
  /*****************/

  identity asymmetric {
    description
      "A TCG recognized asymmetric algorithm with a public and
       private key.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2,
       https://trustedcomputinggroup.org/resource/
       tcg-algorithm-registry/TCG-_Algorithm_Registry_r1p32_pub";
  }

  identity symmetric {
    description
      "A TCG recognized symmetric algorithm with only a private key.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity hash {
    description
      "A TCG recognized hash algorithm that compresses input data to
       a digest value or indicates a method that uses a hash.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity signing {
    description
      "A TCG recognized signing algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity anonymous_signing {
    description
      "A TCG recognized anonymous signing algorithm.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity encryption_mode {
    description
      "A TCG recognized encryption mode.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity method {
    description
      "A TCG recognized method such as a mask generation function.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity object_type {
    description
      "A TCG recognized object type.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 2";
  }

  identity cryptoprocessor {
    description
      "Base identity identifying a crytoprocessor.";
  }

  identity tpm12 {
    if-feature "tpm12";
    base cryptoprocessor;
    description
      "Supportable by a TPM1.2.";
    reference
      "TPM1.2-Structures:
       https://trustedcomputinggroup.org/wp-content/uploads/
       TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf
       TPM_ALGORITHM_ID values, Section 4.8";
  }

  identity tpm20 {
    if-feature "tpm20";
    base cryptoprocessor;
    description
      "Supportable by a TPM2.";
    reference
      "TPM2.0-Structures:
       https://trustedcomputinggroup.org/wp-content/uploads/
       TPM-Rev-2.0-Part-2-Structures-01.38.pdf";
  }

  identity TPM_ALG_RSA {
    if-feature "tpm12 or tpm20";
    base tpm12;
    base tpm20;
    base asymmetric;
    base object_type;
    description
      "RSA algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8017. ALG_ID: 0x0001";
  }

  identity TPM_ALG_TDES {
    if-feature "tpm12";
    base tpm12;
    base symmetric;
    description
      "Block cipher with various key sizes (Triple Data Encryption
       Algorithm, commonly called Triple Data Encryption Standard)
       Note: was banned in TPM1.2 v94";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 18033-3. ALG_ID: 0x0003";
  }

  identity TPM_ALG_SHA1 {
    if-feature "tpm12 or tpm20";
    base hash;
    base tpm12;
    base tpm20;
    description
      "SHA1 algorithm - Deprecated due to insufficient cryptographic
       protection.  However, it is still useful for hash algorithms
       where protection is not required.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10118-3. ALG_ID: 0x0004";
  }

  identity TPM_ALG_HMAC {
    if-feature "tpm12 or tpm20";
    base tpm12;
    base tpm20;
    base hash;
    base signing;
    description
      "Hash Message Authentication Code (HMAC) algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3,
       ISO/IEC 9797-2 and RFC2104. ALG_ID: 0x0005";
  }

  identity TPM_ALG_AES {
    if-feature "tpm12";
    base tpm12;
    base symmetric;
    description
      "The AES algorithm with various key sizes";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3,
       ISO/IEC 18033-3. ALG_ID: 0x0006";
  }

  identity TPM_ALG_MGF1 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    base method;
    description
      "hash-based mask-generation function";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3,
       IEEE Std 1363-2000 and IEEE Std 1363a-2004.
       ALG_ID: 0x0007";
  }

  identity TPM_ALG_KEYEDHASH {
    if-feature "tpm20";
    base tpm20;
    base hash;
    base object_type;
    description
      "An encryption or signing algorithm using a keyed hash.  These
       may use XOR for encryption or an HMAC for signing and may
       also refer to a data object that is neither signing nor
       encrypting.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3,
       ALG_ID: 0x0008";
  }

  identity TPM_ALG_XOR {
    if-feature "tpm12 or tpm20";
    base tpm12;
    base tpm20;
    base hash;
    base symmetric;
    description
      "The XOR encryption algorithm.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3.
       ALG_ID: 0x000A";
  }

  identity TPM_ALG_SHA256 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SHA 256 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10118-3. ALG_ID: 0x000B";
  }

  identity TPM_ALG_SHA384 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SHA 384 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10118-3. ALG_ID: 0x000C";
  }

  identity TPM_ALG_SHA512 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SHA 512 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10118-3. ALG_ID: 0x000D";
  }

  identity TPM_ALG_NULL {
    if-feature "tpm20";
    base tpm20;
    description
      "NULL algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3.
       ALG_ID: 0x0010";
  }

  identity TPM_ALG_SM3_256 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SM3 hash algorithm.";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10118-3:2018. ALG_ID: 0x0012";
  }

  identity TPM_ALG_SM4 {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    description
      "SM4 symmetric block cipher";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3.
       ALG_ID: 0x0013";
  }

  identity TPM_ALG_RSASSA {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "RFC 8017 Signature algorithm defined in section 8.2
       (RSASSAPKCS1-v1_5)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8017.  ALG_ID: 0x0014";
  }

  identity TPM_ALG_RSAES {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base encryption_mode;
    description
      "RFC 8017 Signature algorithm defined in section 7.2
       (RSAES-PKCS1-v1_5)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8017. ALG_ID: 0x0015";
  }

  identity TPM_ALG_RSAPSS {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "Padding algorithm defined in section 8.1 (RSASSA PSS)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8017. ALG_ID: 0x0016";
  }

  identity TPM_ALG_OAEP {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base encryption_mode;
    description
      "Padding algorithm defined in section 7.1 (RSASSA OAEP)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8017. ALG_ID: 0x0017";
  }

  identity TPM_ALG_ECDSA {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "Signature algorithm using elliptic curve cryptography (ECC)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 14888-3. ALG_ID: 0x0018";
  }

  identity TPM_ALG_ECDH {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base method;
    description
      "Secret sharing using ECC";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-56A. ALG_ID: 0x0019";
  }

  identity TPM_ALG_ECDAA {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    base anonymous_signing;
    description
      "Elliptic-curve based anonymous signing scheme";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       TCG TPM 2.0 library specification. ALG_ID: 0x001A";
  }

  identity TPM_ALG_SM2 {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    base encryption_mode;
    base method;
    description
      "SM2 - depending on context, either an elliptic-curve based,
       signature algorithm, an encryption scheme, or a key exchange
       protocol";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3.
       ALG_ID: 0x001B";
  }

  identity TPM_ALG_ECSCHNORR {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "Elliptic-curve based Schnorr signature";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3.
       ALG_ID: 0x001C";
  }

  identity TPM_ALG_ECMQV {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base method;
    description
      "Two-phase elliptic-curve key";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-56A. ALG_ID: 0x001D";
  }

  identity TPM_ALG_KDF1_SP800_56A {
    if-feature "tpm20";
    base tpm20;
    base hash;
    base method;
    description
      "Concatenation key derivation function";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-56A  (approved alternative1) section 5.8.1.
       ALG_ID: 0x0020";
  }

  identity TPM_ALG_KDF2 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    base method;
    description
      "Key derivation function";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       IEEE 1363a-2004 KDF2 section 13.2. ALG_ID: 0x0021";
  }

  identity TPM_ALG_KDF1_SP800_108 {
    base TPM_ALG_KDF2;
    description
      "A key derivation method";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-108 - Section 5.1 KDF. ALG_ID: 0x0022";
  }

  identity TPM_ALG_ECC {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base object_type;
    description
      "Prime field ECC";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 15946-1. ALG_ID: 0x0023";
  }

  identity TPM_ALG_SYMCIPHER {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base object_type;
    description
      "Object type for a symmetric block cipher";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       TCG TPM 2.0 library specification. ALG_ID: 0x0025";
  }

  identity TPM_ALG_CAMELLIA {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    description
      "The Camellia algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 18033-3. ALG_ID: 0x0026";
  }

  identity TPM_ALG_SHA3_256 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "ISO/IEC 10118-3 - the SHA 256 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST PUB FIPS 202. ALG_ID: 0x0027";
  }

  identity TPM_ALG_SHA3_384 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SHA 384 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST PUB FIPS 202. ALG_ID: 0x0028";
  }

  identity TPM_ALG_SHA3_512 {
    if-feature "tpm20";
    base tpm20;
    base hash;
    description
      "The SHA 512 algorithm";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST PUB FIPS 202. ALG_ID: 0x0029";
  }

  identity TPM_ALG_CMAC {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    description
      "block Cipher-based Message Authentication Code (CMAC)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 9797-1:2011 Algorithm 5. ALG_ID: 0x003F";
  }

  identity TPM_ALG_CTR {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base encryption_mode;
    description
      "Counter mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10116. ALG_ID: 0x0040";
  }

  identity TPM_ALG_OFB {
    base tpm20;
    base symmetric;
    base encryption_mode;
    description
      "Output Feedback mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10116. ALG_ID: 0x0041";
  }

  identity TPM_ALG_CBC {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base encryption_mode;
    description
      "Cipher Block Chaining mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10116. ALG_ID: 0x0042";
  }

  identity TPM_ALG_CFB {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base encryption_mode;
    description
      "Cipher Feedback mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10116. ALG_ID: 0x0043";
  }

  identity TPM_ALG_ECB {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base encryption_mode;
    description
      "Electronic Codebook mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       ISO/IEC 10116. ALG_ID: 0x0044";
  }

  identity TPM_ALG_CCM {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    base encryption_mode;
    description
      "Counter with Cipher Block Chaining-Message Authentication
       Code (CCM)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-38C. ALG_ID: 0x0050";
  }

  identity TPM_ALG_GCM {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    base encryption_mode;
    description
      "Galois/Counter Mode (GCM)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-38D. ALG_ID: 0x0051";
  }

  identity TPM_ALG_KW {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    base encryption_mode;
    description
      "AES Key Wrap (KW)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-38F. ALG_ID: 0x0052";
  }

  identity TPM_ALG_KWP {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    base encryption_mode;
    description
      "AES Key Wrap with Padding (KWP)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-38F. ALG_ID: 0x0053";
  }

  identity TPM_ALG_EAX {
    if-feature "tpm20";
    base tpm20;
    base symmetric;
    base signing;
    base encryption_mode;
    description
      "Authenticated-Encryption Mode";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       NIST SP800-38F. ALG_ID: 0x0054";
  }

  identity TPM_ALG_EDDSA {
    if-feature "tpm20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "Edwards-curve Digital Signature Algorithm (PureEdDSA)";
    reference
      "TCG-Algos:TCG Algorithm Registry Rev1.32  Table 3 and
       RFC 8032. ALG_ID: 0x0060";
  }
}
&lt;CODE ENDS&gt;
</sourcecode>
            <t>Note that not all cryptographic functions are required for use by <tt>ietf-tpm-remote-attestation.yang</tt>. However the full definition of Table 3 of <xref target="TCG-Algos"/> will allow use by additional YANG specifications.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document registers the following namespace URIs in the
<xref target="xml-registry"/> as per <xref target="RFC3688"/>:</t>
      <dl>
        <dt>URI:</dt>
        <dd>
          <t>urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation
</t>
          <dl>
            <dt>Registrant Contact:</dt>
            <dd>
              <t>The IESG.</t>
            </dd>
            <dt>XML:</dt>
            <dd>
              <t>N/A; the requested URI is an XML namespace.</t>
            </dd>
          </dl>
        </dd>
        <dt>URI:</dt>
        <dd>
          <t>urn:ietf:params:xml:ns:yang:ietf-tcg-algs
</t>
          <dl>
            <dt>Registrant Contact:</dt>
            <dd>
              <t>The IESG.</t>
            </dd>
            <dt>XML:</dt>
            <dd>
              <t>N/A; the requested URI is an XML namespace.</t>
            </dd>
          </dl>
        </dd>
      </dl>
      <t>This document registers the following YANG modules in the
registry <xref target="yang-parameters"/> as per Section 14 of <xref target="RFC6020"/>:</t>
      <dl>
        <dt>Name:</dt>
        <dd>
          <t>ietf-tpm-remote-attestation
</t>
          <dl>
            <dt>Namespace:</dt>
            <dd>
              <t>urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation</t>
            </dd>
            <dt>Prefix:</dt>
            <dd>
              <t>tpm</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>draft-ietf-rats-yang-tpm-charra (RFC form)</t>
            </dd>
          </dl>
        </dd>
        <dt>Name:</dt>
        <dd>
          <t>ietf-tcg-algs
</t>
          <dl>
            <dt>Namespace:</dt>
            <dd>
              <t>urn:ietf:params:xml:ns:yang:ietf-tcg-algs</t>
            </dd>
            <dt>Prefix:</dt>
            <dd>
              <t>taa</t>
            </dd>
            <dt>Reference:</dt>
            <dd>
              <t>draft-ietf-rats-yang-tpm-charra (RFC form)</t>
            </dd>
          </dl>
        </dd>
      </dl>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG module ietf-tpm-remote-attestation.yang specified in this document defines a schema for data that is designed to be accessed via network management protocols such as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer is the secure transport layer, and the mandatory-to-implement secure transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer is HTTPS, and the mandatory-to-implement secure transport is TLS <xref target="RFC8446"/>.</t>
      <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., <em>config true</em>, which is the default).  These data nodes may be considered sensitive or vulnerable in some network environments.  Write operations (e.g., <em>edit-config</em>) to these data nodes without proper protection can have a negative effect on network operations.  These are the subtrees and data nodes as well as their sensitivity/vulnerability:</t>
      <dl>
        <dt>Container '/rats-support-structures/attester-supported-algos':</dt>
        <dd>
          <t>'tpm12-asymmetric-signing', 'tpm12-hash', 'tpm20-asymmetric-signing', and 'tpm20-hash'. All could be populated with algorithms that are not supported by the underlying physical TPM installed by the equipment vendor.  A vendor should restrict the ability to configure unsupported algorithms.</t>
        </dd>
        <dt>Container: '/rats-support-structures/tpms':</dt>
        <dd>
          <t>'name': Although shown as 'rw', it is system generated. Therefore, it should not be possible for an operator to add or remove a TPM from the configuration.</t>
        </dd>
        <dt/>
        <dd>
          <t>'tpm20-pcr-bank': It is possible to configure PCRs for extraction which are not being extended by system software.  This could unnecessarily use TPM resources.</t>
        </dd>
        <dt/>
        <dd>
          <t>'certificates': It is possible to provision a certificate which does not correspond to an Attestation Identity Key (AIK) within the TPM 1.2, or an Attestation Key (AK) within the TPM 2.0 respectively. In such a case, calls to an RPC requesting this specific certificate could result in either no response or a response for an unexpected TPM.</t>
        </dd>
        <dt>RPC 'tpm12-challenge-response-attestation':</dt>
        <dd>
          <t>The receiver of the RPC response must verify that the certificate is for an active AIK, i.e., the certificate has been confirmed by a third party as being able to support Attestation on the targeted TPM 1.2.</t>
        </dd>
        <dt>RPC 'tpm20-challenge-response-attestation':</dt>
        <dd>
          <t>The receiver of the RPC response must verify that the certificate is for an active AK, i.e., the private key confirmation of the quote signature within the RPC response has been confirmed by a third party to belong to an entity legitimately able to perform Attestation on the targeted TPM 2.0.</t>
        </dd>
        <dt>RPC 'log-retrieval':</dt>
        <dd>
          <t>Requesting a large volume of logs from the attester could require significant system resources and create a denial of service.</t>
        </dd>
      </dl>
      <t>Information collected through the RPCs above could reveal that specific versions of software and configurations of endpoints that could identify vulnerabilities on those systems.  Therefore, RPCs should be protected by NACM <xref target="RFC8341"/> with a default setting of deny-all to limit the extraction of attestation data by only authorized Verifiers.</t>
      <t>For the YANG module ietf-tcg-algs.yang, please use care when selecting specific algorithms.  The introductory section of <xref target="TCG-Algos"/> highlights that some algorithms should be considered legacy, and recommends implementers and adopters diligently evaluate available information such as governmental, industrial, and academic research before selecting an algorithm for use.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2104" target="https://www.rfc-editor.org/info/rfc2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <seriesInfo name="DOI" value="10.17487/RFC2104"/>
            <seriesInfo name="RFC" value="2104"/>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="M. Bellare" initials="M." surname="Bellare">
              <organization/>
            </author>
            <author fullname="R. Canetti" initials="R." surname="Canetti">
              <organization/>
            </author>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key.  The cryptographic strength of HMAC depends on the properties of the underlying hash function.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6020" target="https://www.rfc-editor.org/info/rfc6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6020"/>
            <seriesInfo name="RFC" value="6020"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC3688" target="https://www.rfc-editor.org/info/rfc3688">
          <front>
            <title>The IETF XML Registry</title>
            <seriesInfo name="DOI" value="10.17487/RFC3688"/>
            <seriesInfo name="RFC" value="3688"/>
            <seriesInfo name="BCP" value="81"/>
            <author fullname="M. Mealling" initials="M." surname="Mealling">
              <organization/>
            </author>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6991" target="https://www.rfc-editor.org/info/rfc6991">
          <front>
            <title>Common YANG Data Types</title>
            <seriesInfo name="DOI" value="10.17487/RFC6991"/>
            <seriesInfo name="RFC" value="6991"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language.  This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8348" target="https://www.rfc-editor.org/info/rfc8348">
          <front>
            <title>A YANG Data Model for Hardware Management</title>
            <seriesInfo name="DOI" value="10.17487/RFC8348"/>
            <seriesInfo name="RFC" value="8348"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Dong" initials="J." surname="Dong">
              <organization/>
            </author>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document defines a YANG data model for the management of hardware on a single server.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6241" target="https://www.rfc-editor.org/info/rfc6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6241"/>
            <seriesInfo name="RFC" value="6241"/>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder">
              <organization/>
            </author>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices.  It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages.  The NETCONF protocol operations are realized as remote procedure calls (RPCs).  This document obsoletes RFC 4741.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8040" target="https://www.rfc-editor.org/info/rfc8040">
          <front>
            <title>RESTCONF Protocol</title>
            <seriesInfo name="DOI" value="10.17487/RFC8040"/>
            <seriesInfo name="RFC" value="8040"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <author fullname="K. Watsen" initials="K." surname="Watsen">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6242" target="https://www.rfc-editor.org/info/rfc6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6242"/>
            <seriesInfo name="RFC" value="6242"/>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman">
              <organization/>
            </author>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem.  This document obsoletes RFC 4742.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC6933" target="https://www.rfc-editor.org/info/rfc6933">
          <front>
            <title>Entity MIB (Version 4)</title>
            <seriesInfo name="DOI" value="10.17487/RFC6933"/>
            <seriesInfo name="RFC" value="6933"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="D. Romascanu" initials="D." surname="Romascanu">
              <organization/>
            </author>
            <author fullname="J. Quittek" initials="J." surname="Quittek">
              <organization/>
            </author>
            <author fullname="M. Chandramouli" initials="M." surname="Chandramouli">
              <organization/>
            </author>
            <date month="May" year="2013"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes managed objects used for managing multiple logical and physical entities managed by a single Simple Network Management Protocol (SNMP) agent.  This document specifies version 4 of the Entity MIB.  This memo obsoletes version 3 of the Entity MIB module published as RFC 4133.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <seriesInfo name="DOI" value="10.17487/RFC8446"/>
            <seriesInfo name="RFC" value="8446"/>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla">
              <organization/>
            </author>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8341" target="https://www.rfc-editor.org/info/rfc8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <seriesInfo name="DOI" value="10.17487/RFC8341"/>
            <seriesInfo name="RFC" value="8341"/>
            <seriesInfo name="STD" value="91"/>
            <author fullname="A. Bierman" initials="A." surname="Bierman">
              <organization/>
            </author>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund">
              <organization/>
            </author>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability.  There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.  This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8032" target="https://www.rfc-editor.org/info/rfc8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <seriesInfo name="DOI" value="10.17487/RFC8032"/>
            <seriesInfo name="RFC" value="8032"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson">
              <organization/>
            </author>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara">
              <organization/>
            </author>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA).  The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves.  An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <seriesInfo name="DOI" value="10.17487/RFC8017"/>
            <seriesInfo name="RFC" value="8017"/>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty">
              <organization/>
            </author>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski">
              <organization/>
            </author>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson">
              <organization/>
            </author>
            <author fullname="A. Rusch" initials="A." surname="Rusch">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series.  By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-netconf-keystore" target="https://www.ietf.org/archive/id/draft-ietf-netconf-keystore-24.txt">
          <front>
            <title>A YANG Data Model for a Keystore</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-netconf-keystore-24"/>
            <author fullname="Kent Watsen">
              <organization>Watsen Networks</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   This document defines a YANG module called "ietf-keystore" that
   enables centralized configuration of both symmetric and asymmetric
   keys.  The secret value for both key types may be encrypted or
   hidden.  Asymmetric keys may be associated with certificates.
   Notifications are sent when certificates are about to expire.

Editorial Note (To be removed by RFC Editor)

   This draft contains placeholder values that need to be replaced with
   finalized values at the time of publication.  This note summarizes
   all of the substitutions that are needed.  No other RFC Editor
   instructions are specified elsewhere in this document.

   Artwork in this document contains shorthand references to drafts in
   progress.  Please apply the following replacements:

   *  AAAA --&gt; the assigned RFC value for draft-ietf-netconf-crypto-
      types

   *  CCCC --&gt; the assigned RFC value for this draft

   Artwork in this document contains placeholder values for the date of
   publication of this draft.  Please apply the following replacement:

   *  2022-03-07 --&gt; the publication date of this draft

   The following Appendix section is to be removed prior to publication:

   *  Appendix A.  Change Log

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-rats-architecture" target="https://www.ietf.org/archive/id/draft-ietf-rats-architecture-15.txt">
          <front>
            <title>Remote Attestation Procedures Architecture</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-architecture-15"/>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Dave Thaler">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Michael Richardson">
              <organization>Sandelman Software Works</organization>
            </author>
            <author fullname="Ned Smith">
              <organization>Intel Corporation</organization>
            </author>
            <author fullname="Wei Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <date day="8" month="February" year="2022"/>
            <abstract>
              <t>   In network protocol exchanges it is often useful for one end of a
   communication to know whether the other end is in an intended
   operating state.  This document provides an architectural overview of
   the entities involved that make such tests possible through the
   process of generating, conveying, and evaluating evidentiary claims.
   An attempt is made to provide for a model that is neutral toward
   processor architectures, the content of claims, and protocols.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="I-D.ietf-rats-tpm-based-network-device-attest" target="https://www.ietf.org/archive/id/draft-ietf-rats-tpm-based-network-device-attest-14.txt">
          <front>
            <title>TPM-based Network Device Remote Integrity Verification</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-tpm-based-network-device-attest-14"/>
            <author fullname="Guy Fedorkow">
              <organization>Juniper Networks, Inc.</organization>
            </author>
            <author fullname="Eric Voit">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Jessica Fitzgerald-McKay">
              <organization>National Security Agency</organization>
            </author>
            <date day="22" month="March" year="2022"/>
            <abstract>
              <t>   This document describes a workflow for remote attestation of the
   integrity of firmware and software installed on network devices that
   contain Trusted Platform Modules [TPM1.2], [TPM2.0], as defined by
   the Trusted Computing Group (TCG)), or equivalent hardware
   implementations that include the protected capabilities, as provided
   by TPMs.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="TPM1.2" target="https://trustedcomputinggroup.org/resource/tpm-main-specification/">
          <front>
            <title>TPM 1.2 Main Specification</title>
            <author initials="" surname="TCG" fullname="Trusted Computing Group">
              <organization/>
            </author>
            <date year="2003" month="October" day="02"/>
          </front>
        </reference>
        <reference anchor="TPM1.2-Structures" target="https://trustedcomputinggroup.org/wp-content/uploads/TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf">
          <front>
            <title>TPM Main Part 2 TPM Structures</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TPM1.2-Commands" target="https://trustedcomputinggroup.org/wp-content/uploads/TPM-Main-Part-3-Commands_v1.2_rev116_01032011.pdf">
          <front>
            <title>TPM Main Part 3 Commands</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TPM2.0" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
          <front>
            <title>TPM 2.0 Library Specification</title>
            <author initials="" surname="TCG" fullname="Trusted Computing Group">
              <organization/>
            </author>
            <date year="2013" month="March" day="15"/>
          </front>
        </reference>
        <reference anchor="TPM2.0-Arch" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG_TPM2_r1p59_Part1_Architecture_pub.pdf">
          <front>
            <title>Trusted Platform Module Library - Part 1: Architecture</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TPM2.0-Structures" target="https://trustedcomputinggroup.org/wp-content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf">
          <front>
            <title>Trusted Platform Module Library - Part 2: Structures</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TPM2.0-Key" target="https://trustedcomputinggroup.org/wp-content/uploads/TPM-2p0-Keys-for-Device-Identity-and-Attestation_v1_r12_pub10082021.pdf">
          <front>
            <title>TPM 2.0 Keys for Device Identity and Attestation, Rev12</title>
            <author initials="" surname="TCG" fullname="Trusted Computing Group">
              <organization/>
            </author>
            <date year="2021" month="October" day="08"/>
          </front>
        </reference>
        <reference anchor="TCG-Algos" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG-_Algorithm_Registry_r1p32_pub.pdf">
          <front>
            <title>TCG Algorithm Registry</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BIOS-Log-Event-Type" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG_PCClient_PFP_r1p05_v23_pub.pdf">
          <front>
            <title>TCG PC Client Platform Firmware Profile Specification</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-9797-1" target="https://www.iso.org/standard/50375.html">
          <front>
            <title>Message Authentication Codes (MACs) - ISO/IEC 9797-1:2011</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-9797-2" target="https://www.iso.org/standard/51618.html">
          <front>
            <title>Message Authentication Codes (MACs) - ISO/IEC 9797-2:2011</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-10116" target="https://www.iso.org/standard/64575.html">
          <front>
            <title>ISO/IEC 10116:2017 - Information technology</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-10118-3" target="https://www.iso.org/standard/67116.html">
          <front>
            <title>Dedicated hash-functions - ISO/IEC 10118-3:2018</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-14888-3" target="https://www.iso.org/standard/76382.html">
          <front>
            <title>ISO/IEC 14888-3:2018 - Digital signatures with appendix</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-15946-1" target="https://www.iso.org/standard/65480.html">
          <front>
            <title>ISO/IEC 15946-1:2016 - Information technology</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ISO-IEC-18033-3" target="https://www.iso.org/standard/54531.html">
          <front>
            <title>ISO/IEC 18033-3:2010 - Encryption algorithms</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IEEE-Std-1363-2000" target="https://standards.ieee.org/standard/1363-2000.html">
          <front>
            <title>IEEE 1363-2000 - IEEE Standard Specifications for Public-Key Cryptography</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IEEE-Std-1363a-2004" target="https://ieeexplore.ieee.org/document/1335427">
          <front>
            <title>1363a-2004 - IEEE Standard Specifications for Public-Key Cryptography - Amendment 1: Additional Techniques</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-PUB-FIPS-202" target="https://csrc.nist.gov/publications/detail/fips/202/final">
          <front>
            <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-SP800-38C" target="https://csrc.nist.gov/publications/detail/sp/800-38c/final">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: the CCM Mode for Authentication and Confidentiality</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-SP800-38D" target="https://csrc.nist.gov/publications/detail/sp/800-38d/final">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-SP800-38F" target="https://csrc.nist.gov/publications/detail/sp/800-38f/final">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Methods for Key Wrapping</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-SP800-56A" target="https://csrc.nist.gov/publications/detail/sp/800-56a/rev-3/final">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-SP800-108" target="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-108.pdf">
          <front>
            <title>Recommendation for Key Derivation Using Pseudorandom Functions</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="bios-log" target="https://trustedcomputinggroup.org/wp-content/uploads/PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf">
          <front>
            <title>TCG PC Client Platform Firmware Profile Specification, Section 9.4.5.2</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="cel" target="https://trustedcomputinggroup.org/wp-content/uploads/TCG_IWG_CEL_v1_r0p41_pub.pdf">
          <front>
            <title>Canonical Event Log Format, Section 4.3</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="UEFI-Secure-Boot" target="https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf">
          <front>
            <title>Unified Extensible Firmware Interface (UEFI) Specification Version 2.9 (March 2021), Section 32.1 (Secure Boot)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <seriesInfo name="DOI" value="10.17487/RFC2119"/>
            <seriesInfo name="RFC" value="2119"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <seriesInfo name="DOI" value="10.17487/RFC8174"/>
            <seriesInfo name="RFC" value="8174"/>
            <seriesInfo name="BCP" value="14"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.ietf-rats-reference-interaction-models" target="https://www.ietf.org/archive/id/draft-ietf-rats-reference-interaction-models-05.txt">
          <front>
            <title>Reference Interaction Models for Remote Attestation Procedures</title>
            <seriesInfo name="Internet-Draft" value="draft-ietf-rats-reference-interaction-models-05"/>
            <author fullname="Henk Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Michael Eckel">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Wei Pan">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Eric Voit">
              <organization>Cisco Systems</organization>
            </author>
            <date day="26" month="January" year="2022"/>
            <abstract>
              <t>   This document describes interaction models for remote attestation
   procedures (RATS).  Three conveying mechanisms -- Challenge/Response,
   Uni-Directional, and Streaming Remote Attestation -- are illustrated
   and defined.  Analogously, a general overview about the information
   elements typically used by corresponding conveyance protocols are
   highlighted.

              </t>
            </abstract>
          </front>
        </reference>
        <reference anchor="IMA-Kernel-Source" target="https://github.com/torvalds/linux/blob/df0cc57e057f18e44dac8e6c18aba47ab53202f9/security/integrity/ima/">
          <front>
            <title>Linux Integrity Measurement Architecture (IMA): Kernel Sourcecode</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="NIST-915121" target="https://tsapps.nist.gov/publication/get_pdf.cfm?pub_id=915121">
          <front>
            <title>True Randomness Can't be Left to Chance: Why entropy is important for information security</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="yang-parameters" target="https://www.iana.org/assignments/yang-parameters/yang-parameters.xhtml">
          <front>
            <title>YANG Parameters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="xml-registry" target="https://www.iana.org/assignments/xml-registry/xml-registry.xhtml">
          <front>
            <title>IETF XML Registry</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <section anchor="ima">
      <name>Integrity Measurement Architecture (IMA)</name>
      <t>IMA extends the principles of Measured Boot <xref target="TPM2.0-Arch"/> and Secure Boot <xref target="UEFI-Secure-Boot"/> to the Linux operating system, applying it to operating system applications and files.
IMA has been part of the Linux integrity subsystem of the Linux kernel since 2009 (kernel version 2.6.30). The IMA mechanism represented by the YANG module in this specification is rooted in the kernel version 5.16 <xref target="IMA-Kernel-Source"/>.
IMA enables the protection of system integrity by collecting (commonly referred to as measuring) and storing measurements (called Claims in the context of IETF RATS) of files before execution so that these measurements can be used later, at system runtime, in remote attestation procedures.
IMA acts in support of the appraisal of Evidence (which includes measurement Claims) by leveraging reference integrity measurements stored in extended file attributes.</t>
      <t>In support of the appraisal of Evidence, IMA maintains an ordered list of measurements in kernel-space, the Stored Measurement Log (SML), for all files that have been measured before execution since the operating system was started.
Although IMA can be used without a TPM, it is typically used in conjunction with a TPM to anchor the integrity of the SML in a hardware-protected secure storage location, i.e., Platform Configuration Registers (PCRs) provided by TPMs.
IMA provides the SML in both binary and ASCII representations in the Linux security file system <em>securityfs</em> (<tt>/sys/kernel/security/ima/</tt>).</t>
      <t>IMA templates define the format of the SML, i.e., which fields are included in a log record.
Examples are file path, file hash, user ID, group ID, file signature, and extended file attributes.
IMA comes with a set of predefined template formats and also allows a custom format, i.e., a format consisting of template fields supported by IMA.
Template usage is typically determined by boot arguments passed to the kernel.
Alternatively, the format can also be hard-coded into custom kernels.
IMA templates and fields are extensible in the kernel source code. As a result, more template fields can be added in the future.</t>
      <t>IMA policies define which files are measured using the IMA policy language.
Built-in policies can be passed as boot arguments to the kernel.
Custom IMA policies can be defined once during runtime or be hard-coded into a custom kernel.
If no policy is defined, no measurements are taken and IMA is effectively disabled.</t>
      <t>A comprehensive description of the content fields ins in native Linux IMA TLV format can be found in Table 16 of the Canonical Event Log (CEL) specification <xref target="cel"/>. The CEL specification also illustrates the use of templates to enable extended or customized IMA TLV formats in Section 5.1.6.</t>
    </section>
    <section anchor="netequip-boot-log">
      <name>IMA for Network Equipment Boot Logs</name>
      <t>Network equipment can generally implement similar IMA-protected functions to generate measurements (Claims) about the boot process of a device and enable corresponding remote attestation.
Network Equipment Boot Logs combine the measurement and logging of boot components and operating system components (executables and files) into a single log file in a format identical to the IMA format.
Note that the format used for logging measurement of boot components in this scheme differs from the boot logging strategy described elsewhere in this document.</t>
      <t>During the boot process of the network device, i.e., from BIOS to the end of the operating system and user-space, all files executed can be measured and logged in the order of their execution.
When the Verifier initiates a remote attestation process (e.g., challenge-response remote attestation as defined in this document), the network equipment takes on the role of an Attester and can convey to the Verifier Claims that comprise the measurement log as well as the corresponding PCR values (Evidence) of a TPM.</t>
      <t>The verifier can appraise the integrity (compliance with the Reference Values) of each executed file by comparing its measured value with the Reference Value.
Based on the execution order, the Verifier can compute a PCR reference value (by replaying the log) and compare it to the Measurement Log Claims obtained in conjunction with the PCR Evidence to assess their trustworthiness with respect to an intended operational state.</t>
      <t>Network equipment usually executes multiple components in parallel.  This holds not only during the operating system loading phase, but also even during the BIOS boot phase.
With this measurement log mechanism, network equipment can take on the role of an Attester, proving to the Verifier the trustworthiness of its boot process.
Using the measurement log, Verifiers can precisely identify mismatching log entries to infer potentially tampered components.</t>
      <t>This mechanism also supports scenarios that modify files on the Attester that are subsequently executed during the boot phase (e.g., updating/patching) by simply updating the appropriate Reference Values in Reference Integrity Manifests that inform Verifiers about how an Attester is composed.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
