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

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

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

<rfc ipr="trust200902" docName="draft-ietf-rats-yang-tpm-charra-04" category="std">

  <front>
    <title abbrev="YANG-CHARRA for TPMs">A YANG Data Model for Challenge-Response-based Remote Attestation Procedures using TPMs</title>

    <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="2020" month="December" day="16"/>

    <area>Security</area>
    <workgroup>RATS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document defines a YANG RPC and a minimal datastore required to retrieve attestation evidence about integrity measurements from a device following the operational context defined in <xref target="I-D.ietf-rats-tpm-based-network-device-attest"/>. Complementary measurement logs are also provided by the YANG RPC originating from one or more roots of trust of measurement. The module defined requires at least one TPM 1.2 or TPM 2.0 and corresponding Trusted Software Stack included in the device components of the composite device the YANG server is running on.</t>



    </abstract>


  </front>

  <middle>


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

<t>This document is based on the 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 (HWM) are the Trusted Platform Module (TPM) <xref target="TPM1.2"/> and <xref target="TPM2.0"/> specified by the Trusted Computing Group (TCG). One ore more TPMs embedded in the components of a composite device - sometimes also referred to as an aggregate device - are required in order to use the YANG module defined in this document. A TPM is used as a root of trust for reporting (RTR) in order to retrieve attestation evidence from a composite device (quote primitive operation). Additionally, it is used as a root of trust for storage (RTS) in order to retain shielded secrets and store system measurements using a folding hash function (extend primitive operation).</t>

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

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

</section>
</section>
<section anchor="the-yang-module-for-basic-remote-attestation-procedures" title="The YANG Module for Basic Remote Attestation Procedures">

<t>One or more TPMs MUST be embedded in the composite device that is providing attestation evidence via the YANG module defined in this document. The ietf-basic-remote-attestation YANG module enables a composite device to take on the role of Claimant and 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 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. The functions of this YANG module are restricted to 0-1 TPMs per hardware component.</t>

<section anchor="tree-diagram" title="Tree Diagram">

<figure><artwork type="TREE"><![CDATA[
module: ietf-tpm-remote-attestation
  +--rw rats-support-structures
     +--rw compute-nodes {tpm:TPMs}?
     |  +--ro compute-node* [node-id]
     |     +--ro node-id                string
     |     +--ro node-physical-index?   int32 {ietfhw:entity-mib}?
     |     +--ro node-name?             string
     |     +--ro node-location?         string
     +--rw tpms
     |  +--rw tpm* [tpm-name]
     |     +--rw tpm-name                string
     |     +--ro hardware-based?         boolean
     |     +--ro tpm-physical-index?     int32 {ietfhw:entity-mib}?
     |     +--ro tpm-path?               string
     |     +--ro compute-node            compute-node-ref {tpm:TPMs}?
     |     +--ro tpm-manufacturer?       string
     |     +--rw tpm-firmware-version    identityref
     |     +--rw TPM12-hash-algo?        identityref
     |     +--rw TPM12-pcrs*             pcr
     |     +--rw tpm20-pcr-bank* [TPM20-hash-algo]
     |     |  +--rw TPM20-hash-algo    identityref
     |     |  +--rw pcr-index*         tpm:pcr
     |     +--ro tpm-status              enumeration
     |     +--rw certificates
     |        +--rw certificate* [certificate-name]
     |           +--rw certificate-name            string
     |           +--rw certificate-keystore-ref?   leafref
     |           +--rw certificate-type?           enumeration
     +--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}?

  rpcs:
    +---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:TPMs}?
    |  +--ro output
    |     +--ro tpm12-attestation-response* []
    |        +--ro certificate-name    certificate-name-ref
    |        +--ro up-time?            uint32
    |        +--ro TPM_QUOTE2?         binary
    +---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*         tpm:pcr
    |  |     +---w certificate-name*      certificate-name-ref
    |  |             {tpm:TPMs}?
    |  +--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
    +---x log-retrieval
       +---w input
       |  +---w log-selector* []
       |  |  +---w tpm-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
       |  +---w log-type        identityref
       +--ro output
          +--ro system-event-logs
             +--ro node-data* []
                +--ro tpm-name?     string
                +--ro up-time?      uint32
                +--ro log-result
                   +--ro (attested_event_log_type)
                      +--:(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*     uint8
                      +--:(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)
                         +--ro boot-event-logs
                            +--ro boot-event-entry* [event-number]
                               +--ro event-number               uint64
                               +--ro filename-hint?             string
                               +--ro filedata-hash?             binary
                               +--ro filedata-hash-algorithm?   string
                               +--ro file-version?              string
                               +--ro file-type?                 string
                               +--ro pcr-index?                 pcr
]]></artwork></figure>

</section>
<section anchor="yang-modules" title="YANG Modules">

<section anchor="ietf-tpm-remote-attestation" title="ietf-tpm-remote-attestation">
<t>This YANG module imports modules from <xref target="RFC6991"/>, <xref target="RFC8348"/>, <xref target="I-D.ietf-netconf-keystore"/>, ietf-tcg-algs.yang.</t>

<section anchor="identities" title="Identities">

<t>This module supports the following types of attestation event logs: &lt;ima&gt;, &lt;bios&gt;, and &lt;netequip_boot&gt;.</t>

</section>
<section anchor="rpcs" title="RPCs">

<t>&lt;tpm12-challenge-response-attestation&gt; - Allows a Verifier to request a quote of PCRs from a TPM1.2 compliant cryptoprocessor.  When one or more &lt;certificate-name&gt; is not provided, all TPM1.2 compliant cryptoprocessors will respond.</t>

<t>&lt;tpm20-challenge-response-attestation&gt; - Allows a Verifier to request a quote of PCRs from a TPM2.0 compliant cryptoprocessor.  When one or more &lt;certificate-name&gt; is not provided, all TPM2.0 compliant cryptoprocessors will respond.</t>

<t>&lt;log-retrieval&gt; - Allows a Verifier to acquire the evidence which was extended into specific PCRs.</t>

</section>
<section anchor="data-nodes" title="Data Nodes">

<t>container &lt;rats-support-structures&gt; - This exists when there are more than one TPM for a particular Attester.  This allows each specific TPM to identify on which &lt;compute-node&gt; it belongs.</t>

<t>container &lt;tpms&gt; - 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 is the certificates which are associated with that TPM.  As a certificate is associated with a single Attestation key, knowledge of the certificate allows a specific TPM to be identified.</t>

<t>container &lt;attester-supported-algos&gt; - Identifies which TCG algorithms are available for use the Attesting platform.  This allows an operator to limit algorithms available for use by RPCs to just a desired set from the universe of all allowed by TCG.</t>

</section>
<section anchor="yang-module" title="YANG Module">
<figure><artwork type="YANG"><![CDATA[
<CODE BEGINS> file ietf-tpm-remote-attestation@2020-12-09.yang
module ietf-tpm-remote-attestation {
  namespace "urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation";
  prefix "tpm";

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

  organization
   "IETF RATS (Remote ATtestation procedureS) Working Group";

  contact
   "WG Web  : <http://datatracker.ietf.org/wg/rats/>
    WG List : <mailto:rats@ietf.org>
    Author  : Eric Voit <evoit@cisco.com>
    Author  : Henk Birkholz <henk.birkholz@sit.fraunhofer.de>
    Author  : Michael Eckel <michael.eckel@sit.fraunhofer.de>
    Author  : Shwetha Bhandari <shwetha.bhandari@thoughtspot.com>
    Author  : Bill Sulzen <bsulzen@cisco.com>
    Author  : Liang Xia (Frank) <frank.xialiang@huawei.com>
    Author  : Tom Laffey <tom.laffey@hpe.com>
    Author  : Guy Fedorkow <gfedorkow@juniper.net>";

  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) 2020 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 Simplified
     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).
     
     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 Simplified 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 "2020-12-15" {
    description
      "Initial version";
    reference
      "draft-ietf-rats-yang-tpm-charra";
  }

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

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


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

  typedef pcr {
    type uint8 {
      range "0..31";
    }
    description
      "Valid index number for a PCR.  At this point 0-31 is viable.";
  }  

  typedef compute-node-ref {
    type leafref {
      path "/tpm:rats-support-structures/tpm:compute-nodes" +
           "/tpm:compute-node/tpm:node-name";
    }
    description
      "This type is used to reference a hardware node.  It is quite 
      possible this leafref will eventually point to another YANG 
      module's node.";
  }

  typedef certificate-name-ref {
    type leafref {
      path "/tpm:rats-support-structures/tpm:tpms/tpm:tpm" +
           "/tpm:certificates/tpm:certificate/tpm:certificate-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 and
      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-asymmetric-signing-algo {
    description
      "The signature scheme that is used to sign the TPM2 Quote 
      information response.";
    leaf TPM20-asymmetric-signing-algo {
      must "/tpm:rats-support-structures/tpm:attester-supported-algos"
         + "/tpm:tpm20-asymmetric-signing" {
         error-message "Not a platform supported " + 
                       "TPM20-asymmetric-signing-algo";
      }
      type identityref {
        base taa:asymmetric;
      }
      description
        "The signature scheme that is used to sign the TPM2.0
         Quote information response. This must be one of those 
         supported by a platform.";   
    default taa:TPM_ALG_RSA; 
    }
  }

  grouping TPM12-asymmetric-signing-algo {
    description
      "The signature scheme that is used to sign the TPM12 Quote 
      information response.";
    leaf TPM12-asymmetric-signing-algo {
      must "/tpm:rats-support-structures/tpm:attester-supported-algos"
         + "/tpm:tpm12-asymmetric-signing" {
         error-message "Not a platform supported " + 
                       "TPM12-asymmetric-signing-algo";
      }   
      type identityref {
        base taa:asymmetric;
      }
      description
        "The signature scheme that is used to sign the TPM1.2
         Quote information response. This must be one of those 
         supported by a platform.";   
    default taa:TPM_ALG_RSA;          
    }
  }  

  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 {
      must "/tpm:rats-support-structures/tpm:attester-supported-algos"
         + "/tpm:tpm20-hash" {
         error-message "Not a platform supported TPM20-hash-algo";
      }
      type identityref {
        base taa:hash;
      }
      description
        "The hash scheme that is used to hash a TPM1.2 PCR. This 
        must be one of those supported by a platform.";            
    default taa:TPM_ALG_SHA256; 
    }
  }

  grouping TPM12-hash-algo {
    description
      "The cryptographic algorithm used to hash the TPM1.2 PCRs.";
    leaf TPM12-hash-algo {
      must "/tpm:rats-support-structures/tpm:attester-supported-algos"
         + "/tpm:tpm12-hash" {
         error-message "Not a platform supported TPM12-hash-algo";
      }
      type identityref {
        base taa:hash;
      }
      description
        "The hash scheme that is used to hash a TPM1.2 PCR. This 
        must be one of those supported by a platform.  This assumes
        that an algorithm other than SHA1 can be supported on some
        TPM1.2 cryptoprocessor variant."; 
      default taa:TPM_ALG_SHA1;         
    }
  } 

  grouping nonce {
    description
      "A nonce to show freshness and to allow the detection
      of replay attacks.";
    leaf nonce-value {
      type binary;
      mandatory true;
      description
        "This nonce SHOULD be generated via a registered
         cryptographic-strength algorithm. In consequence,
         the length of the nonce depends on the hash algorithm
         used. The algorithm used in this case is independent
         from the hash algorithm used to create the hash-value
         in the response of the attestor.";
    }
  }

  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.
       Requesting a PCR value that is not in scope of the AC used,
       detailed exposure via error msg should be avoided.";
    leaf-list pcr-index {
      /*  the following XPATH must be updated to ensure that only
            selectable PCRs are allowed in the RPC
      must "/tpm:rats-support-structures/tpm:tpms" +
           "/tpm:tpm[tpm-name = current()]" +
           "/tpm:tpm[TPM12-pcrs = current()]" {
        error-message "Acquiring this PCR index is not supported";
      }
      */
      type pcr;
      description
        "The numbers/indexes of the PCRs. At the moment this is limited
        to 32.";
    }
  }

  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
        "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 {
        /*  the following XPATH must be updated to ensure that only
            selectable PCRs are allowed in the RPC
        must "/tpm:rats-support-structures/tpm:tpms" +
             "/tpm:tpm[tpm-name = current()]" +
             "/tpm:tpm20-pcr-bank[pcr-index = current()]" {
          error-message "Acquiring this PCR index is not supported";
        }
        */
        type tpm:pcr;
        description
          "The numbers of the PCRs that which are being tracked
          with a hash based on the TPM20-hash-algo.";
      }
    }
  }
  
  grouping certificate-name-ref {
    description
      "Identifies a certificate in a keystore.";
    leaf certificate-name {
      type certificate-name-ref;
        description
          "Identifies a certificate in a keystore.";
      mandatory true;
    }
  }

  grouping tpm-name {
    description
      "A unique TPM on a device.";
    leaf tpm-name {
      type string;
      description
        "Unique system generated name for a TPM on a device.";
    }
  }
  
  grouping tpm-name-selector {
    description
      "One or more TPM on a device.";
    leaf-list tpm-name {
      type string;
      config false;
      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.";
    }
  }

  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 rev116 July 2007, Section 16.5";  
    }
  }

  grouping tpm20-attestation {
    description
      "Contains an instance of TPM2 style signed cryptoprocessor 
      measurements.  It is supplemented by unsigned Attester 
      information.";
    leaf TPMS_QUOTE_INFO {
      mandatory true;
      type binary;
      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
        "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.";
    } 
    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 the 
        what has previously been validated, it is possible for a 
        Verifier to confirm the Attester's signature while eliminating 
        significant processing.";  
      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.";
        }
      }
    }
  }  


  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 an event log corresponding to the event that extended 
      the PCR";
    leaf event-number {
      type uint32;
      description
        "Unique event number of this event";
    }
    leaf event-type {
        type uint32;
        description
          "log event type";
    }
    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";
      }
    }
    leaf event-size {
      type uint32;
      description
        "Size of the event data";
    }
    leaf-list event-data {
      type uint8;
      description
        "The event data size determined by event-size";
    }
  }

  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 an hash log extend event for IMA measurements";
    leaf event-number {
      type uint64;
      description
        "Unique number for this event for sequencing";
    }
    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 that was measured";
    }
    leaf filedata-hash {
      type binary;
      description
        "Hash of filedata";
    }
    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
        "The file signature";
    }
  }

  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 netequip-boot-event {
    description
      "Defines an hash log extend event for Network Equipment Boot.";
    leaf event-number {
      type uint64;
      description
        "Unique number for this event for sequencing";
    }
    leaf filename-hint {
      type string;
      description
        "File that was measured";
    }
    leaf filedata-hash {
      type binary;
      description
        "Hash of filedata";
    }
    leaf filedata-hash-algorithm {
      type string;
      description
        "Algorithm used for filedata-hash.";
      }
    leaf file-version {
      type string;
      description
        "File version information.";
    }
    leaf file-type {
      type string;
      description
        "Indicating at which boot stage the file is loaded,
         such as BIOS, BootLoader, etc.";
    }
    leaf pcr-index {
      type pcr;
      description
        "Defines the PCR index that this event extended";
    }
  }

  grouping network-equipment-boot-event-log {
    description
      "Measurement log created by Network Equipment Boot.";
    list boot-event-entry {
      key event-number;
      description
        "Ordered list of Network Equipment Boot event logs
         by event-number.";
      uses netequip-boot-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 {
        description
          "BIOS/UEFI event logs";
        container bios-event-logs {
          description
            "BIOS/UEFI event logs";
          uses bios-event-log;
        }
      }
      case ima {
        description
          "IMA event logs.";
        container ima-event-logs {
          description
            "IMA event logs.";
          uses ima-event-log;
        }
      }
      case 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:TPMs";
          must "/tpm:rats-support-structures/tpm:tpms" +
               "/tpm:tpm[tpm:tpm-firmware-version='taa:tpm12']" +
               "/tpm:certificates/" +
               "/tpm:certificate[certificate-name-ref=current()]" {
            error-message "Not an available TPM1.2 AIK certificate."; 
          }  
          type certificate-name-ref;
          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 to refer to dedicated TPM in composite devices,
       e.g. smart NICs, is still a TODO.";
    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:TPMs";
          must "/tpm:rats-support-structures/tpm:tpms" +
               "/tpm:tpm[tpm:tpm-firmware-version='taa:tpm20']" +
               "/tpm:certificates/" +
               "/tpm:certificate[certificate-name-ref=current()]" {
            error-message "Not an available TPM2.0 AIK certificate."; 
          } 
          type certificate-name-ref;
            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 in one TPM chip 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 {
      list log-selector {
        description
          "Selection of log entries to be reported.";    
        uses tpm-name-selector;
        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 an log event which matches 1:1 with a
                 unique event record contained within the log.  Log
                 entries subsequent to 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 subsequent to 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 subsequent to 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.";
        }
      }
      uses log-identifier;
    }

    output {
      container system-event-logs {
        description
          "The requested data of the measurement event logs";
        list node-data {
          unique "tpm-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 & 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:TPMs";
      description
        "Holds the set device subsystems/components in this composite
         device that support TPM operations.";
      list compute-node {
        key node-id;
        config false;
        min-elements 2;
        description
          "A component in this composite device that 
          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 ietfhw: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 tpm-name;
        unique "tpm-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;
          description
            "Answers the question: is this TPM is a hardware based 
            TPM?";
        }
        leaf tpm-physical-index {
          if-feature ietfhw:entity-mib;
          type int32 {
            range "1..2147483647";
          }
          config false;
          description
            "The entPhysicalIndex for the TPM.";
          reference
            "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex";
        } 
        leaf tpm-path {
          type string;
          config false;
          description
            "Path to a unique TPM on a device.  This can change agross 
            reboots.";
        }
        leaf compute-node {
          if-feature "tpm:TPMs";
          type compute-node-ref;
          config false;
          mandatory true;
          description
            "When there is more that one TPM, this indicates for which 
            compute node this TPM services.";
        }
        leaf tpm-manufacturer {
          type string;
          config false;
          description
            "TPM manufacturer name.";
        }
        leaf tpm-firmware-version {
          type identityref {
            base taa:cryptoprocessor;
          }       
          mandatory true;
          description
            "Identifies the cryptoprocessor API set supported.  This 
            cannot be configured.  However it is referenced via XPATH
            as part of configuration, so is shown as 'rw' 
            to eliminate YANG warnings related NMDA.";
        }
        uses TPM12-hash-algo {
          when "tpm-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 {
          when "../tpm-firmware-version = 'taa:tpm12'";
          type pcr;
          description
            "The PCRs which may be extracted from this TPM1.2 
            compliant cryptoprocessor.";
        }           
        list tpm20-pcr-bank {
          when "../tpm-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
            "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 {
            must "/tpm:rats-support-structures"
               + "/tpm:attester-supported-algos"
               + "/tpm:tpm20-hash" {
              error-message "Not a platform supported TPM20-hash-algo";
            }
            type identityref {
              base taa:hash;
            }
            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 tpm-status {
          type enumeration {
            enum operational {
              value 0;
              description
                "The TPM currently is currently running normally and
                is ready to accept and process TPM quotes.";
              reference
                "TPM-Rev-2.0-Part-1-Architecture-01.07-2014-03-13.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 AK certificates.";
          list certificate {
            key "certificate-name";          
            description
              "Three types of certificates can be accessed via
               this statement, including Initial Attestation
               Key Cert, Local Attestation Key Cert or
               Endorsement Key Cert.";
            leaf certificate-name {
              type string;
              description
                "An arbitrary name uniquely identifying a certificate
                 associated within key within a TPM.";
            }      
            leaf certificate-keystore-ref {
              type leafref {
                path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key"
                   + "/ks:certificates/ks:certificate/ks:name";
              }
              description
                "A reference to a specific certificate of an
                 asymmetric key in the Keystore.";
                 /* Note: It is also possible to import a grouping which 
                    allows local definition via an imported keystore 
                    schema. */
            }
            leaf certificate-type {
              type enumeration {
                enum endorsement-cert {
                  value 0;
                  description
                    "Endorsement Key (EK) Certificate type.";
                }
                enum initial-attestation-cert {
                  value 1;
                  description
                    "Initial Attestation key (IAK) Certificate type.";
                }
                enum local-attestation-cert {
                  value 2;
                  description
                    "Local Attestation Key (LAK) Certificate type.";
                }
              }
              description
                "Type of this certificate";
            }
          }
        }
      }
    }
    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: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: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: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:tpm-firmware-version='taa:tpm20']";
        type identityref {
          base taa:hash;
        }
        description
          "Platform supported TPM20 hash algorithms.";  
      }          
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
</section>
<section anchor="ietf-tcg-algs" title="ietf-tcg-algs">

<t>Cryptographic algorithm types were initially included within -v14 NETCONF’s iana-crypto-types.yang.  Unfortunately all this content including the algorithms needed here failed to make the -v15 used WGLC.   As a result 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.</t>

<section anchor="features" title="Features">

<t>There are two types of features supported &lt;TPM12&gt; and &lt;TPM20&gt;. Support for either of these features indicates that a cryptoprocessor supporting the corresponding type of TCG 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" title="Identities">

<t>There are three types of identities in this model.</t>

<t>The first are the cryptographic functions supportable by a TPM algorithm, these include: &lt;asymmetric&gt;, &lt;symmetric&gt;, &lt;hash&gt;, &lt;signing&gt;, &lt;anonymous_signing&gt;, &lt;encryption_mode&gt;, &lt;method&gt;, and &lt;object_type&gt;.  The definitions of each of these are in Table 2 of <xref target="TCG-Algos"/>.</t>

<t>The second are API specifications for tpms: &lt;tpm12&gt; and &lt;tpm2&gt;.</t>

<t>The third are 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"/>.</t>

</section>
<section anchor="yang-module-1" title="YANG Module">
<figure><artwork type="YANG"><![CDATA[
<CODE BEGINS> ietf-tcg-algs@2020-09-18.yang
module ietf-tcg-algs {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-tcg-algs";
  prefix taa;

  organization
    "IETF RATS Working Group";

  contact
    "WG Web:   <http://datatracker.ietf.org/wg/rats/>
     WG List:  <mailto:rats@ietf.org>
     Author:   Eric Voit <mailto:evoit@cisco.com>";

  description
    "This module defines a identities for asymmetric algorithms.
    
     Copyright (c) 2020 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 Simplified
     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 2020-09-18 {
    description
      "Initial version";
    reference
      "RFC XXXX: tbd";
  }

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

  feature TPM12 {
    description
      "This feature indicates algorithm support for the TPM 1.2 API
      as per TPM-main-1.2-Rev94-part-2, Section 4.8.";
  }

  feature TPM20 {
    description
      "This feature indicates algorithm support for the TPM 2.0 API 
      as per TPM-Rev-2.0-Part-1-Architecture-01.38 Section 11.4.";
  }


  /*****************/
  /*  Identities   */
  /*****************/
  
  /*  There needs to be collasping/verification of some of the identity  
      types between the various algorithm types listed below */

  identity asymmetric {
    description
      "A TCG recognized asymmetric algorithm with a public and 
      private key.";
    reference
      "http://trustedcomputinggroup.org/resource/tcg-algorithm-registry/
      TCG_Algorithm_Registry_r1p32_pub Table 2";
  }

  identity symmetric {
    description
      "A TCG recognized symmetric algorithm with only a private key.";
    reference
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 2";
  }

  identity signing {
    description
      "A TCG recognized signing algorithm";
    reference
      "TCG_Algorithm_Registry_r1p32_pub Table 2";
  }

  identity anonymous_signing {
    description
      "A TCG recognized anonymous signing algorithm.";
    reference
      "TCG_Algorithm_Registry_r1p32_pub Table 2";
  }

  identity encryption_mode {
    description
      "A TCG recognized encryption mode.";
    reference
      "TCG_Algorithm_Registry_r1p32_pub Table 2";
  }  

  identity method {
    description
      "A TCG recognized method such as a mask generation function.";
    reference
      "TCG_Algorithm_Registry_r1p32_pub Table 2";
  }
  
  identity object_type {
    description
      "A TCG recognized object type.";
    reference
      "TCG_Algorithm_Registry_r1p32_pub Table 2";
  }

  identity cryptoprocessor {
    description
      "Base identity identifying a crytoprocessor.";
  }
  
  identity tpm12 {
    if-feature "TPM12";
    base cryptoprocessor;
    description
      "Supportable by a TPM1.2.";
    reference
      "TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf
      TPM_ALGORITHM_ID values, page 18";
  }
  
  identity tpm20 {
    if-feature "TPM12";
    base cryptoprocessor;
    description
      "Supportable by a TPM2.";
    reference  
      "TPM-Rev-2.0-Part-2-Structures-01.38.pdf
      The TCG Algorithm Registry. Table 9";
  } 
  
  identity TPM_ALG_RSA {
    if-feature "TPM12 or TPM20";
    base tpm12;  
    base tpm20;
    base asymmetric;
    base object_type;
    description
      "RSA algorithm";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3, 
      ISO/IEC 9797-2 and RFC2014. ALG_ID: 0x0005";    

  }
      
  identity TPM_ALG_AES  {
    if-feature "TPM12";
    base tpm12;
    base symmetric;
    description
      "The AES algorithm with various key sizes";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and
      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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      TCG TPM 2.0 library specification. . 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_Algorithm_Registry_r1p32_pub Table 3 and
      TCG TPM 2.0 library specification. ALG_ID: 0x000A";

  }

  identity TPM_ALG_SHA256 {
    if-feature "TPM20";
    base tpm20;
    base hash;
    description
      "The SHA 256 algorithm";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      ISO/IEC 10118-3. ALG_ID: 0x000D";    

  }

  identity TPM_ALG_NULL {
    if-feature "TPM20";
    base tpm20;
    description
      "NULL algorithm";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and
      TCG TPM 2.0 library specification. ALG_ID: 0x0010";     

  }

  identity TPM_ALG_SM3_256 {
    if-feature "TPM20";
    base tpm20;
    base hash;
    description
      "The SM3 hash algorithm.";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and
      GM/T 0004-2012 - SM3_256. ALG_ID: 0x0012";    

  }

  identity TPM_ALG_SM4 {
    if-feature "TPM20";
    base tpm20;
    base symmetric;
    description
      "SM4 symmetric block cipher";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and
      GB/T 32907-2016. ALG_ID: 0x0013";    

  }

  identity TPM_ALG_RSASSA {
    if-feature "TPM20";
    base tpm20;
    base asymmetric;
    base signing;  
    description
      "Signature algorithm defined in section 8.2 (RSASSAPKCS1-v1_5)";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and RFC 8017.
      ALG_ID: 0x0014";    

  }

  identity TPM_ALG_RSAES {
    if-feature "TPM20";
    base tpm20;
    base asymmetric;
    base encryption_mode;
    description
      "Signature algorithm defined in section 7.2 (RSAES-PKCS1-v1_5)";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      NIST SP800-56A and RFC 7748. 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      A GM/T 0003.1–2012, GM/T 0003.2–2012, GM/T 0003.3–2012,
      GM/T 0003.5–2012 SM2. ALG_ID: 0x001B";    

  }

  identity TPM_ALG_ECSCHNORR {
    if-feature "TPM20";
    base tpm20;
    base asymmetric;
    base signing;
    description
      "Elliptic-curve based Schnorr signature";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub Table 3 and
      TCG TPM 2.0 library specification. ALG_ID: 0x001C";       

  }

  identity TPM_ALG_ECMQV {
    if-feature "TPM20";
    base tpm20;
    base asymmetric;
    base method;
    description
      "Two-phase elliptic-curve key";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      ISO/IEC 15946-1. ALG_ID: 0x0023";    

  }

  identity TPM_ALG_SYMCIPHER {
    if-feature "TPM20";
    base tpm20;
    description
      "Object type for a symmetric block cipher";
    reference  
      "TCG_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub 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_Algorithm_Registry_r1p32_pub Table 3 and
      RFC 8032. ALG_ID: 0x0060";    

  }

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

<t>Note that not all cryptographic functions are required for use by ietf-tpm-remote-attestation.yang.  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" title="IANA considerations">

<t>This document will include requests to IANA:</t>

<t>To be defined yet.  But keeping up with changes to ietf-tcg-algs.yang will be necessary.</t>

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

<t>The YANG module 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="RFC5246"/>.</t>

<t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default).  These data nodes may be considered sensitive or vulnerable in some network environments.  Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations.  These are the subtrees and data nodes and their sensitivity/vulnerability:</t>

<t>Container: &lt;/rats-support-structures/attester-supported-algos&gt;</t>

<t><list style="symbols">
  <t>&lt;tpm12-asymmetric-signing&gt;, &lt;tpm12-hash&gt;, &lt;tpm20-asymmetric-signing&gt;, and &lt;tpm20-hash&gt; all could be populated with algorithms which are not supported by the underlying physical TPM installed by the equipment vendor.</t>
</list></t>

<t>Container: &lt;/rats-support-structures/tpms&gt;</t>

<t><list style="symbols">
  <t>&lt;tpm-name&gt; - Although shown as ‘rw’, it is system generated</t>
  <t>&lt;tpm20-pcr-bank&gt; - It is possible to configure PCRs for extraction which are not being extended by system software.  This could unnecessarily use TPM resources.</t>
  <t>&lt;certificates&gt; - It is possible to provision a certificate which does not correspond to a Attestation Identity Key (AIK) within the TPM.</t>
</list></t>

<t>RPC: &lt;tpm12-challenge-response-attestation&gt; - Need to verify that the certificate is for an active AIK.</t>

<t>RPC: &lt;tpm20-challenge-response-attestation&gt; - Need to verify that the certificate is for an active AIK.</t>

<t>RPC: &lt;log-retrieval&gt; - Pulling lots of logs can chew up system resources.</t>

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

<t>Not yet.</t>

</section>
<section anchor="change-log" title="Change Log">

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

<t><list style="symbols">
  <t>TPM1.2 Quote1 eliminated</t>
  <t>YANG model simplifications so redundant info isn’t exposed</t>
</list></t>

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

<t><list style="symbols">
  <t>moved to tcg-algs</t>
  <t>cleaned up model to eliminate sources of errors</t>
  <t>removed key establishment RPC</t>
  <t>added lots of XPATH which must all be scrubbed still</t>
  <t>Descriptive text added on model contents.</t>
</list></t>

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

<t><list style="symbols">
  <t>Extracted Crypto-types into a separate YANG file</t>
  <t>Mades the algorithms explicit, not strings</t>
  <t>Hash Algo as key the selected TPM2 PCRs</t>
  <t>PCR numbers are their own type</t>
  <t>Eliminated nested keys for node-id plus tpm-name</t>
  <t>Eliminated TPM-Name of “ALL”</t>
  <t>Added TPM-Path</t>
</list></t>

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

<t><list style="symbols">
  <t>Addressed author’s comments</t>
  <t>Extended complementary details about attestation-certificates</t>
  <t>Relabeled chunk-size to log-entry-quantity</t>
  <t>Relabeled location with compute-node or tpm-name where appropriate</t>
  <t>Added a valid entity-mib physical-index to compute-node and tpm-name to map it back to hardware inventory</t>
  <t>Relabeled name  to tpm_name</t>
  <t>Removed event-string in last-entry</t>
</list></t>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC2119" target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author initials='S.' surname='Bradner' fullname='S. Bradner'><organization /></author>
<date year='1997' month='March' />
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference  anchor="RFC8174" target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author initials='B.' surname='Leiba' fullname='B. Leiba'><organization /></author>
<date year='2017' month='May' />
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference  anchor="RFC6991" target='https://www.rfc-editor.org/info/rfc6991'>
<front>
<title>Common YANG Data Types</title>
<author initials='J.' surname='Schoenwaelder' fullname='J. Schoenwaelder' role='editor'><organization /></author>
<date year='2013' month='July' />
<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>
<seriesInfo name='RFC' value='6991'/>
<seriesInfo name='DOI' value='10.17487/RFC6991'/>
</reference>



<reference  anchor="RFC8348" target='https://www.rfc-editor.org/info/rfc8348'>
<front>
<title>A YANG Data Model for Hardware Management</title>
<author initials='A.' surname='Bierman' fullname='A. Bierman'><organization /></author>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund'><organization /></author>
<author initials='J.' surname='Dong' fullname='J. Dong'><organization /></author>
<author initials='D.' surname='Romascanu' fullname='D. Romascanu'><organization /></author>
<date year='2018' month='March' />
<abstract><t>This document defines a YANG data model for the management of hardware on a single server.</t></abstract>
</front>
<seriesInfo name='RFC' value='8348'/>
<seriesInfo name='DOI' value='10.17487/RFC8348'/>
</reference>



<reference anchor="I-D.ietf-netconf-keystore">
<front>
<title>A YANG Data Model for a Keystore</title>

<author initials='K' surname='Watsen' fullname='Kent Watsen'>
    <organization />
</author>

<date month='August' day='20' year='2020' />

<abstract><t>This document defines a YANG 1.1 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" --> the assigned RFC value for draft-ietf-netconf-crypto- types  *  "CCCC" --> 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:  *  "2020-08-20" --> the publication date of this draft  The following Appendix section is to be removed prior to publication:  *  Appendix A.  Change Log</t></abstract>

</front>

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



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

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

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

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

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

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

<abstract><t>This document describes interaction models for remote attestation procedures (RATS).  Three conveying mechanisms - Challenge/Response, Uni-Directional, and Streaming Remote Attestation - are illustrated and defined.  Analogously, a general overview about the information elements typically used by corresponding conveyance protocols are highlighted.  Privacy preserving conveyance of Evidence via Direct Anonymous Attestation is elaborated on in the context of the Attester, Endorser, and Verifier role.</t></abstract>

</front>

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



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

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

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

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

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

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

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

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

</front>

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



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

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

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

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

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

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

</front>

<seriesInfo name='Internet-Draft' value='draft-ietf-rats-tpm-based-network-device-attest-06' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-ietf-rats-tpm-based-network-device-attest-06.txt' />
</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></organization>
    </author>
    <date year="2003" month="October" day="02"/>
  </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></organization>
    </author>
    <date year="2013" month="March" day="15"/>
  </front>
</reference>
<reference anchor="TCG-Algos" target="hhttp://trustedcomputinggroup.org/resource/tcg-algorithm-registry/">
  <front>
    <title>TCG_Algorithm_Registry_r1p32_pub</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>

    <references title='Informative References'>





<reference  anchor="RFC6241" target='https://www.rfc-editor.org/info/rfc6241'>
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author initials='R.' surname='Enns' fullname='R. Enns' role='editor'><organization /></author>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund' role='editor'><organization /></author>
<author initials='J.' surname='Schoenwaelder' fullname='J. Schoenwaelder' role='editor'><organization /></author>
<author initials='A.' surname='Bierman' fullname='A. Bierman' role='editor'><organization /></author>
<date year='2011' month='June' />
<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>
<seriesInfo name='RFC' value='6241'/>
<seriesInfo name='DOI' value='10.17487/RFC6241'/>
</reference>



<reference  anchor="RFC8040" target='https://www.rfc-editor.org/info/rfc8040'>
<front>
<title>RESTCONF Protocol</title>
<author initials='A.' surname='Bierman' fullname='A. Bierman'><organization /></author>
<author initials='M.' surname='Bjorklund' fullname='M. Bjorklund'><organization /></author>
<author initials='K.' surname='Watsen' fullname='K. Watsen'><organization /></author>
<date year='2017' month='January' />
<abstract><t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t></abstract>
</front>
<seriesInfo name='RFC' value='8040'/>
<seriesInfo name='DOI' value='10.17487/RFC8040'/>
</reference>



<reference  anchor="RFC6242" target='https://www.rfc-editor.org/info/rfc6242'>
<front>
<title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
<author initials='M.' surname='Wasserman' fullname='M. Wasserman'><organization /></author>
<date year='2011' month='June' />
<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>
<seriesInfo name='RFC' value='6242'/>
<seriesInfo name='DOI' value='10.17487/RFC6242'/>
</reference>



<reference  anchor="RFC5246" target='https://www.rfc-editor.org/info/rfc5246'>
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.2</title>
<author initials='T.' surname='Dierks' fullname='T. Dierks'><organization /></author>
<author initials='E.' surname='Rescorla' fullname='E. Rescorla'><organization /></author>
<date year='2008' month='August' />
<abstract><t>This document specifies Version 1.2 of the Transport Layer Security (TLS) protocol.  The TLS protocol provides communications security over the Internet.  The protocol allows client/server applications to communicate in a way that is designed to prevent eavesdropping, tampering, or message forgery.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='5246'/>
<seriesInfo name='DOI' value='10.17487/RFC5246'/>
</reference>




    </references>



  </back>

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

-->

</rfc>

