draft-ietf-rats-yang-tpm-charra-01.txt   draft-ietf-rats-yang-tpm-charra-02.txt 
RATS Working Group H. Birkholz RATS Working Group H. Birkholz
Internet-Draft M. Eckel Internet-Draft M. Eckel
Intended status: Standards Track Fraunhofer SIT Intended status: Standards Track Fraunhofer SIT
Expires: September 12, 2020 S. Bhandari Expires: December 26, 2020 S. Bhandari
B. Sulzen B. Sulzen
E. Voit E. Voit
Cisco Cisco
L. Xia L. Xia
Huawei Huawei
T. Laffey T. Laffey
HPE HPE
G. Fedorkow G. Fedorkow
Juniper Juniper
March 11, 2020 June 24, 2020
A YANG Data Model for Challenge-Response-based Remote Attestation A YANG Data Model for Challenge-Response-based Remote Attestation
Procedures using TPMs Procedures using TPMs
draft-ietf-rats-yang-tpm-charra-01 draft-ietf-rats-yang-tpm-charra-02
Abstract Abstract
This document defines a YANG RPC and a minimal datastore tree This document defines a YANG RPC and a minimal datastore tree
required to retrieve attestation evidence about integrity required to retrieve attestation evidence about integrity
measurements from a composite device with one or more roots of trust measurements from a composite device with one or more roots of trust
for reporting. Complementary measurement logs are also provided by for reporting. Complementary measurement logs are also provided by
the YANG RPC originating from one or more roots of trust of 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 measurement. The module defined requires at least one TPM 1.2 or TPM
2.0 and corresponding Trusted Software Stack included in the device 2.0 and corresponding Trusted Software Stack included in the device
skipping to change at page 1, line 48 skipping to change at page 1, line 48
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on September 12, 2020. This Internet-Draft will expire on December 26, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2020 IETF Trust and the persons identified as the Copyright (c) 2020 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of (https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 26 skipping to change at page 2, line 26
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3 1.1. Requirements notation . . . . . . . . . . . . . . . . . . 3
2. The YANG Module for Basic Remote Attestation Procedures . . . 3 2. The YANG Module for Basic Remote Attestation Procedures . . . 3
2.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 3 2.1. Tree Diagram . . . . . . . . . . . . . . . . . . . . . . 3
2.2. YANG Module . . . . . . . . . . . . . . . . . . . . . . . 8 2.2. YANG Modules . . . . . . . . . . . . . . . . . . . . . . 7
3. IANA considerations . . . . . . . . . . . . . . . . . . . . . 32 2.2.1. ietf-tpm-remote-attestation . . . . . . . . . . . . . 7
4. Security Considerations . . . . . . . . . . . . . . . . . . . 32 2.3. ietf-asymmetric-algs . . . . . . . . . . . . . . . . . . 32
5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 32 3. IANA considerations . . . . . . . . . . . . . . . . . . . . . 42
6. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 32 4. Security Considerations . . . . . . . . . . . . . . . . . . . 42
7. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 5. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 42
7.1. Normative References . . . . . . . . . . . . . . . . . . 32 6. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.2. Informative References . . . . . . . . . . . . . . . . . 33 7. References . . . . . . . . . . . . . . . . . . . . . . . . . 43
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 33 7.1. Normative References . . . . . . . . . . . . . . . . . . 43
7.2. Informative References . . . . . . . . . . . . . . . . . 44
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 44
1. Introduction 1. Introduction
This document is based on the terminology defined in the This document is based on the terminology defined in the
[I-D.ietf-rats-architecture] and uses the interaction model and [I-D.ietf-rats-architecture] and uses the interaction model and
information elements defined in the information elements defined in the
[I-D.birkholz-rats-reference-interaction-model] document. The [I-D.birkholz-rats-reference-interaction-model] document. The
currently supported hardware security modules (HWM) - sometimes also currently supported hardware security modules (HWM) - sometimes also
referred to as an embedded secure element (eSE) - is the Trusted referred to as an embedded secure element (eSE) - is the Trusted
Platform Module (TPM) version 1.2 and 2.0 specified by the Trusted Platform Module (TPM) version 1.2 and 2.0 specified by the Trusted
skipping to change at page 3, line 33 skipping to change at page 3, line 34
interaction model defined in the interaction model defined in the
[I-D.birkholz-rats-reference-interaction-model] document. A fresh [I-D.birkholz-rats-reference-interaction-model] document. A fresh
nonce with an appropriate amount of entropy MUST be supplied by the 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 YANG client in order to enable a proof-of-freshness with respect to
the attestation evidence provided by the attester running the YANG the attestation evidence provided by the attester running the YANG
datastore. The functions of this YANG module are restricted to 0-1 datastore. The functions of this YANG module are restricted to 0-1
TPMs per hardware component. TPMs per hardware component.
2.1. Tree Diagram 2.1. Tree Diagram
module: ietf-tpm-remote-attestation module: ietf-tpm-remote-attestation
+--ro rats-support-structures +--rw rats-support-structures
+--ro supported-algos* uint16 +--rw supported-algos* identityref
+--ro compute-nodes* [node-id] +--ro compute-nodes* [node-id]
+--ro node-id string | +--ro node-id string
+--ro node-physical-index? int32 {ietfhw:entity-mib}? | +--ro node-physical-index? int32 {ietfhw:entity-mib}?
+--ro node-name? string | +--ro node-name? string
+--ro node-location? string | +--ro node-location? string
+--ro tpms* [tpm-name] +--rw tpms* [tpm-name]
+--ro tpm-name string +--rw tpm-name string
+--ro tpm-physical-index? int32 {ietfhw:entity-mib}? +--ro hardware-based? boolean
+--ro tpm-manufacturer? string +--ro tpm-physical-index? int32 {ietfhw:entity-mib}?
+--ro tpm-firmware-version? string +--ro tpm-path? string
+--ro tpm-specification-version? string +--ro compute-node compute-node-ref
+--ro tpm-status? string +--ro tpm-manufacturer? string
+--ro certificates* [] +--ro tpm-firmware-version? string
+--ro certificate +--ro tpm-specification-version identityref
+--ro certificate-name? string +--ro tpm-status? string
+--ro certificate-type? enumeration +--rw certificates
+--ro certificate-value? ietfct:end-entity-cert-cms +--rw certificate* [certificate-name]
+--ro lak-public-structure? binary +--rw certificate-name string
+--rw certificate-ref? leafref
+--rw certificate-type? enumeration
rpcs: rpcs:
+---x tpm12-challenge-response-attestation +---x tpm12-challenge-response-attestation {TPM12}?
| +---w input | +---w input
| | +---w tpm1-attestation-challenge | | +---w tpm1-attestation-challenge
| | +---w pcr-indices* uint8 | | +---w pcr-index* pcr
| | +---w nonce-value binary | | +---w nonce-value binary
| | +---w TPM_SIG_SCHEME-value uint8 | | +---w TPM12_Algo? identityref
| | +---w (key-identifier)? | | +---w (key-identifier)?
| | | +--:(public-key) | | | +--:(public-key)
| | | | +---w pub-key-id? binary | | | | +---w pub-key-id? binary
| | | +--:(TSS_UUID) | | | +--:(TSS_UUID)
| | | +---w TSS_UUID-value | | | +---w TSS_UUID-value
| | | +---w ulTimeLow? uint32 | | | +---w ulTimeLow? uint32
| | | +---w usTimeMid? uint16 | | | +---w usTimeMid? uint16
| | | +---w usTimeHigh? uint16 | | | +---w usTimeHigh? uint16
| | | +---w bClockSeqHigh? uint8 | | | +---w bClockSeqHigh? uint8
| | | +---w bClockSeqLow? uint8 | | | +---w bClockSeqLow? uint8
| | | +---w rgbNode* uint8 | | | +---w rgbNode* uint8
| | +---w add-version? boolean | | +---w add-version? boolean
| | +---w tpm-name? string | | +---w tpm-name* string
| | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? | +--ro output
| +--ro output | +--ro tpm12-attestation-response* []
| +--ro tpm12-attestation-response* [tpm-name] | +--ro certificate-name? string
| +--ro tpm-name string | +--ro up-time? uint32
| +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? | +--ro node-id? string
| +--ro up-time? uint32 | +--ro node-physical-index? int32
| +--ro node-id? string | | {ietfhw:entity-mib}?
| +--ro node-physical-index? int32 {ietfhw:entity-mib}? | +--ro fixed? binary
| +--ro fixed? binary | +--ro external-data? binary
| +--ro external-data? binary | +--ro signature-size? uint32
| +--ro signature-size? uint32 | +--ro signature? binary
| +--ro signature? binary | +--ro (tpm12-quote)
| +--ro (tpm12-quote) | +--:(tpm12-quote1)
| +--:(tpm12-quote1) | | +--ro version* []
| | +--ro version* [] | | | +--ro major? uint8
| | | +--ro major? uint8 | | | +--ro minor? uint8
| | | +--ro minor? uint8 | | | +--ro revMajor? uint8
| | | +--ro revMajor? uint8 | | | +--ro revMinor? uint8
| | | +--ro revMinor? uint8 | | +--ro digest-value? binary
| | +--ro digest-value? binary | | +--ro TPM_PCR_COMPOSITE* []
| | +--ro TPM_PCR_COMPOSITE* [] | | +--ro pcr-index* pcr
| | +--ro pcr-indices* uint8 | | +--ro value-size? uint32
| | +--ro value-size? uint32 | | +--ro tpm12-pcr-value* binary
| | +--ro tpm12-pcr-value* binary | +--:(tpm12-quote2)
| +--:(tpm12-quote2) | +--ro tag? uint8
| +--ro tag? uint8 | +--ro pcr-index* pcr
| +--ro pcr-indices* uint8 | +--ro locality-at-release? uint8
| +--ro locality-at-release? uint8 | +--ro digest-at-release? binary
| +--ro digest-at-release? binary +---x tpm20-challenge-response-attestation {TPM20}?
+---x tpm20-challenge-response-attestation | +---w input
| +---w input | | +---w tpm20-attestation-challenge
| | +---w tpm20-attestation-challenge | | +---w nonce-value binary
| | +---w nonce-value binary | | +---w challenge-objects* []
| | +---w challenge-objects* [node-id tpm-name] | | +---w pcr-list* [TPM2_Algo]
| | +---w node-id string | | | +---w TPM2_Algo identityref
| | +---w node-physical-index? int32 {ietfhw:entity-mib}? | | | +---w pcr-index* tpm:pcr
| | +---w tpm-name string | | +---w TPM2_Algo? identityref
| | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? | | +---w (key-identifier)?
| | +---w pcr-list* [] | | | +--:(public-key)
| | | +---w pcr | | | | +---w pub-key-id? binary
| | | +---w pcr-indices* uint8 | | | +--:(uuid)
| | | +---w (algo-registry-type) | | | +---w uuid-value? binary
| | | +--:(tcg) | | +---w tpm-name* string
| | | | +---w tcg-hash-algo-id? uint16 | +--ro output
| | | +--:(ietf) | +--ro tpm20-attestation-response* []
| | | +---w ietf-ni-hash-algo-id? uint8 | +--ro certificate-name? string
| | +---w (signature-identifier-type) | +--ro up-time? uint32
| | | +--:(TPM_ALG_ID) | +--ro node-id? string
| | | | +---w TPM_ALG_ID-value? uint16 | +--ro node-physical-index? int32
| | | +--:(COSE_Algorithm) | | {ietfhw:entity-mib}?
| | | +---w COSE_Algorithm-value? int32 | +--ro quote? binary
| | +---w (key-identifier)? | +--ro quote-signature? binary
| | +--:(public-key) | +--ro pcr-bank-values* []
| | | +---w pub-key-id? binary | | +--ro TPM2_Algo? identityref
| | +--:(uuid) | | +--ro pcr-values* [pcr-index]
| | +---w uuid-value? binary | | +--ro pcr-index pcr
| +--ro output | | +--ro pcr-value? binary
| +--ro tpm20-attestation-response* [node-id tpm-name] | +--ro pcr-digest-algo-in-quote
| +--ro tpm-name string | +--ro TPM2_Algo? identityref
| +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? +---x basic-trust-establishment
| +--ro up-time? uint32 | +---w input
| +--ro node-id string | | +---w nonce-value binary
| +--ro node-physical-index? int32 {ietfhw:entity-mib}? | | +---w TPM2_Algo? identityref
| +--ro quote? binary | | +---w tpm-name* string
| +--ro quote-signature? binary | | +---w certificate-name? string
| +--ro pcr-bank-values* [algo-registry-type] | +--ro output
| | +--ro (algo-registry-type) | +--ro attestation-certificates* []
| | | +--:(tcg) | +--ro attestation-certificate? ct:end-entity-cert-cms
| | | | +--ro tcg-hash-algo-id? uint16 | +--ro (key-identifier)?
| | | +--:(ietf) | +--:(public-key)
| | | +--ro ietf-ni-hash-algo-id? uint8 | | +--ro pub-key-id? binary
| | +--ro pcr-values* [pcr-index] | +--:(uuid)
| | +--ro pcr-index uint16 | +--ro uuid-value? binary
| | +--ro pcr-value? binary +---x log-retrieval
| +--ro pcr-digest-algo-in-quote +---w input
| +--ro (algo-registry-type) | +---w log-selector* []
| +--:(tcg) | | +---w tpm-name* string
| | +--ro tcg-hash-algo-id? uint16 | | +---w (index-type)?
| +--:(ietf) | | | +--:(last-entry)
| +--ro ietf-ni-hash-algo-id? uint8 | | | | +---w last-entry-value? binary
+---x basic-trust-establishment | | | +--:(index)
| +---w input | | | | +---w last-index-number? uint64
| | +---w nonce-value binary | | | +--:(timestamp)
| | +---w (signature-identifier-type) | | | +---w timestamp? yang:date-and-time
| | | +--:(TPM_ALG_ID) | | +---w log-entry-quantity? uint16
| | | | +---w TPM_ALG_ID-value? uint16 | +---w log-type identityref
| | | +--:(COSE_Algorithm) +--ro output
| | | +---w COSE_Algorithm-value? int32 +--ro system-event-logs
| | +---w tpm-name? string +--ro node-data* []
| | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? +--ro up-time? uint32
| | +---w certificate-name? string +--ro certificate-name? string
| +--ro output +--ro log-result
| +--ro attestation-certificates* [tpm-name] +--ro (attested-event-log-type)
| +--ro tpm-name string +--:(bios)
| +--ro tpm-physical-index? int32 {ietfhw:entity-mib}? | +--ro bios-event-logs
| +--ro up-time? uint32 | +--ro bios-event-entry* [event-number]
| +--ro node-id? string | +--ro event-number uint32
| +--ro node-physical-index? int32 {ietfhw:entity-mib}? | +--ro event-type? uint32
| +--ro certificate-name? string | +--ro pcr-index? pcr
| +--ro attestation-certificate? ietfct:end-entity-cert-cms | +--ro digest-list* []
| +--ro (key-identifier)? | | +--ro hash-algo? identityref
| +--:(public-key) | | +--ro digest* binary
| | +--ro pub-key-id? binary | +--ro event-size? uint32
| +--:(uuid) | +--ro event-data* uint8
| +--ro uuid-value? binary +--:(ima)
+---x log-retrieval +--ro ima-event-logs
+---w input +--ro ima-event-entry* [event-number]
| +---w log-selector* [node-id tpm-name] +--ro event-number uint64
| | +---w node-id string +--ro ima-template? string
| | +---w node-physical-index? int32 {ietfhw:entity-mib}? +--ro filename-hint? string
| | +---w tpm-name string +--ro filedata-hash? binary
| | +---w tpm-physical-index? int32 {ietfhw:entity-mib}? +--ro filedata-hash-algorithm? string
| | +---w (index-type)? +--ro template-hash-algorithm? string
| | | +--:(last-entry) +--ro template-hash? binary
| | | | +---w last-entry-value? binary +--ro pcr-index? pcr
| | | +--:(index) +--ro signature? binary
| | | | +---w last-index-number? uint64
| | | +--:(timestamp)
| | | +---w timestamp? yang:date-and-time
| | +---w log-entry-quantity? uint16
| | +---w pcr-list* []
| | +---w pcr
| | +---w pcr-indices* uint8
| | +---w (algo-registry-type)
| | +--:(tcg)
| | | +---w tcg-hash-algo-id? uint16
| | +--:(ietf)
| | +---w ietf-ni-hash-algo-id? uint8
| +---w log-type identityref
+--ro output
+--ro system-event-logs
+--ro node-data* [node-id tpm-name]
+--ro node-id string
+--ro node-physical-index? int32 {ietfhw:entity-mib}?
+--ro up-time? uint32
+--ro tpm-name string
+--ro tpm-physical-index? int32 {ietfhw:entity-mib}?
+--ro log-result
+--ro (log-type)
+--:(bios)
| +--ro bios-event-logs
| +--ro bios-event-entry* [event-number]
| +--ro event-number uint32
| +--ro event-type? uint32
| +--ro pcr-index? uint16
| +--ro digest-list* []
| | +--ro (algo-registry-type)
| | | +--:(tcg)
| | | | +--ro tcg-hash-algo-id? uint16
| | | +--:(ietf)
| | | +--ro ietf-ni-hash-algo-id? uint8
| | +--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? uint16
+--ro signature? binary
2.2. YANG Module 2.2. YANG Modules
This YANG module imports modules from [RFC6991], [RFC8348], and 2.2.1. ietf-tpm-remote-attestation
[I-D.ietf-netconf-crypto-types].
<CODE BEGINS> file ietf-tpm-remote-attestation@2019-01-07.yang This YANG module imports modules from [RFC6991], [RFC8348],
[I-D.ietf-netconf-crypto-types], ietf-asymmetric-algs.yang.
<CODE BEGINS> file ietf-tpm-remote-attestation@2020-06-23.yang
module ietf-tpm-remote-attestation { module ietf-tpm-remote-attestation {
namespace "urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation"; namespace "urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation";
prefix "yang-rats-charra"; prefix "tpm";
import ietf-yang-types { import ietf-yang-types {
prefix yang; prefix yang;
} }
import ietf-hardware { import ietf-hardware {
prefix ietfhw; prefix ietfhw;
} }
import ietf-crypto-types { import ietf-crypto-types {
prefix ietfct; prefix ct;
}
import ietf-keystore {
prefix ks;
}
import ietf-asymmetric-algs {
prefix aa;
} }
organization organization
"IETF RATS (Remote ATtestation procedureS) Working Group"; "IETF RATS (Remote ATtestation procedureS) Working Group";
contact contact
"WG Web : <http://datatracker.ietf.org/wg/rats/> "WG Web : <http://datatracker.ietf.org/wg/rats/>
WG List : <mailto:rats@ietf.org> WG List : <mailto:rats@ietf.org>
Author : Henk Birkholz <henk.birkholz@sit.fraunhofer.de> Author : Henk Birkholz <henk.birkholz@sit.fraunhofer.de>
Author : Michael Eckel <michael.eckel@sit.fraunhofer.de> Author : Michael Eckel <michael.eckel@sit.fraunhofer.de>
skipping to change at page 8, line 46 skipping to change at page 8, line 5
Author : Liang Xia (Frank) <frank.xialiang@huawei.com> Author : Liang Xia (Frank) <frank.xialiang@huawei.com>
Author : Tom Laffey <tom.laffey@hpe.com> Author : Tom Laffey <tom.laffey@hpe.com>
Author : Guy Fedorkow <gfedorkow@juniper.net>"; Author : Guy Fedorkow <gfedorkow@juniper.net>";
description description
"A YANG module to enable a TPM 1.2 and TPM 2.0 based "A YANG module to enable a TPM 1.2 and TPM 2.0 based
remote attestation procedure using a challenge-response remote attestation procedure using a challenge-response
interaction model and the TPM 1.2 and TPM 2.0 Quote interaction model and the TPM 1.2 and TPM 2.0 Quote
primitive operations. primitive operations.
Copyright (c) 2020 IETF Trust and the persons identified Copyright (c) 2020 IETF Trust and the persons identified as
as authors of the code. All rights reserved. authors of the code. All rights reserved.
Redistribution and use in source and binary forms, with Redistribution and use in source and binary forms, with or
or without modification, is permitted pursuant to, and without modification, is permitted pursuant to, and subject to
subject to the license terms contained in, the Simplified the license terms contained in, the Simplified BSD License set
BSD License set forth in Section 4.c of the IETF Trust's forth in Section 4.c of the IETF Trust's Legal Provisions
Legal Provisions Relating to IETF Documents 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). (https://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX This version of this YANG module is part of RFC XXXX
(https://www.rfc-editor.org/info/rfcXXXX); see the RFC (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
itself for full legal notices. for full legal notices.
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document 'MAY', and 'OPTIONAL' in this document are to be interpreted as
are to be interpreted as described in BCP 14 (RFC 2119) described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
(RFC 8174) when, and only when, they appear in all they appear in all capitals, as shown here.";
capitals, as shown here.";
revision "2020-03-09" { revision "2020-06-23" {
description description
"Initial version"; "Initial version";
reference reference
"draft-ietf-rats-yang-tpm-charra"; "draft-ietf-rats-yang-tpm-charra";
} }
/*****************/ /*****************/
/* Groupings */ /* Features */
/*****************/ /*****************/
grouping hash-algo { feature TPM12 {
description description
"A selector for the hashing algorithm"; "This feature indicates that an Attester includes cryptoprocessors
choice algo-registry-type { capable of supporting the TPM 1.2 API.";
mandatory true; }
description
"Unfortunately, both IETF and TCG have registries here.
Choose your weapon wisely.";
case tcg {
description
"You chose the east door, the tcg space opens up to
you.";
leaf tcg-hash-algo-id {
type uint16;
description
"This is an index referencing the TCG Algorithm
Registry based on TPM_ALG_ID.";
}
}
case ietf {
description
"You chose the west door, the ietf space opens up to
you.";
leaf ietf-ni-hash-algo-id { feature TPM20 {
type uint8; description
description "This feature indicates that an Attester includes cryptoprocessors
"This is an index referencing the Named Information capable of supporting the TPM 2 API.";
Hash Algorithm Registry.";
} }
}
/*****************/
/* Typedefs */
/*****************/
typedef pcr {
type uint8 {
range "0..31";
} }
description
"Valid index number for a PCR. At this point 0-31 is viable.";
} }
grouping hash { typedef compute-node-ref {
type leafref {
path "/tpm:rats-support-structures/tpm:compute-nodes/tpm:node-name";
}
description description
"The hash value including hash-algo identifier"; "This type is used to reference a hardware node. It is quite possible
list hash-digests { this leafref will eventually point to another YANG module's node.";
description }
"The list of hashes.";
container hash-digest { /******************/
description /* Identities */
"A hash value based on a hash algorithm registered by an /******************/
SDO.";
uses hash-algo; identity attested-event-log-type {
leaf hash-value { description
type binary; "Base identity allowing categorization of the reasons why and
description attested measurement has been taken on an Attester.";
"The binary representation of the hash value."; }
}
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 cryptoprocessor {
description
"Base identity identifying a crytoprocessor.";
}
identity tpm12 {
base cryptoprocessor;
description
"A cryptoprocessor capable of supporting the TPM 1.2 API.";
}
identity tpm20 {
base cryptoprocessor;
description
"A cryptoprocessor capable of supporting the TPM 2.0 API.";
}
/*****************/
/* Groupings */
/*****************/
grouping TPM2_Algo {
description
"The signature scheme that is used to sign the TPM2 Quote
information response.";
leaf TPM2_Algo {
type identityref {
base aa:tpm2-asymmetric-algorithm;
} }
description
"The signature scheme that is used to sign the TPM
Quote information response.";
} }
} }
grouping TPM12_Algo {
description
"The signature scheme that is used to sign the TPM2 Quote
information response.";
leaf TPM12_Algo {
type identityref {
base aa:tpm12-asymmetric-algorithm;
}
description
"The signature scheme that is used to sign the TPM1.2
Quote information response.";
}
}
grouping nonce { grouping nonce {
description description
"A nonce to show freshness and counter replays."; "A nonce to show freshness and counter replays.";
leaf nonce-value { leaf nonce-value {
type binary; type binary;
mandatory true; mandatory true;
description description
"This nonce SHOULD be generated via a registered "This nonce SHOULD be generated via a registered
cryptographic-strength algorithm. In consequence, cryptographic-strength algorithm. In consequence,
the length of the nonce depends on the hash algorithm the length of the nonce depends on the hash algorithm
skipping to change at page 11, line 10 skipping to change at page 11, line 28
} }
grouping tpm12-pcr-selection { grouping tpm12-pcr-selection {
description description
"A Verifier can request one or more PCR values using its "A Verifier can request one or more PCR values using its
individually created Attestation Key Certificate (AC). individually created Attestation Key Certificate (AC).
The corresponding selection filter is represented in this The corresponding selection filter is represented in this
grouping. grouping.
Requesting a PCR value that is not in scope of the AC used, Requesting a PCR value that is not in scope of the AC used,
detailed exposure via error msg should be avoided."; detailed exposure via error msg should be avoided.";
leaf-list pcr-indices { leaf-list pcr-index {
type uint8; type pcr;
description description
"The numbers/indexes of the PCRs. At the moment this is limited "The numbers/indexes of the PCRs. At the moment this is limited
to 32."; to 32.";
} }
} }
grouping tpm20-pcr-selection { grouping tpm20-pcr-selection {
description description
"A Verifier can request one or more PCR values uses its "A Verifier can acquire one or more PCR values, which are hashed
individually created AC. The corresponding selection filter is together in a TPM2B_DIGEST coming from the TPM2. The selection
represented in this grouping. Requesting a PCR value that is not list of desired PCRs and the Hash Algorithm is represented in this
in scope of the AC used, detailed exposure via error msg should grouping.";
be avoided.";
list pcr-list {
description
"For each PCR in this list an individual list of banks
(hash-algo) can be requested. It depends on the datastore, if
every bank in this grouping is included per PCR (crude), or if
each requested bank set is returned for each PCR individually
(elegant).";
container pcr {
description
"The composite of a PCR number and corresponding bank
numbers.";
leaf-list pcr-indices {
type uint8;
description
"The number of the PCR. At the moment this is limited
32";
}
uses hash-algo;
}
}
}
grouping pcr-selector {
description
"A Verifier can request the generation of an attestation
certificate (a signed public attestation key
(non-migratable, tpm-resident) wrt one or more PCR values.
The corresponding creation input is represented in this grouping.
Requesting a PCR value that is not supported results in an error,
detailed exposure via error msg should be avoided.";
list pcr-list { list pcr-list {
key "TPM2_Algo";
description description
"For each PCR in this list an individual hash-algo can be "Specifies the list of PCRs and Hash Algorithms used for the
requested."; latest returned TPM2B_DIGEST.";
container pcr { reference
description "https://www.trustedcomputinggroup.org/wp-content/uploads/
"The composite of a PCR number and corresponding bank TPM-Rev-2.0-Part-2-Structures-01.38.pdf Section 10.9.7";
numbers."; uses tpm:TPM2_Algo;
leaf-list pcr-index { leaf-list pcr-index {
type uint8; type tpm:pcr;
description
"The numbers of the PCRs that are associated with
the created key. At the moment the highest number is 32";
}
uses hash-algo;
}
}
}
grouping tpm12-signature-scheme {
description
"The signature scheme used to sign the evidence via a TPM 1.2.";
leaf TPM_SIG_SCHEME-value {
type uint8;
mandatory true;
description
"Selects the signature scheme that is used to sign the TPM
Quote information response. Allowed values can be found in
the table at the bottom of page 32 in the TPM 1.2 Structures
specification (Level 2 Revision 116, 1 March 2011).";
}
}
grouping tpm20-signature-scheme {
description
"The signature scheme used to sign the evidence.";
choice signature-identifier-type {
mandatory true;
description
"There are multiple ways to reference a signature type.
This used to select the signature algo to sign the quote
information response.";
case TPM_ALG_ID {
description
"This references the indices of table 9 in the TPM 2.0
structure specification.";
leaf TPM_ALG_ID-value {
type uint16;
description
"The TCG Algorithm Registry ID value.";
}
}
case COSE_Algorithm {
description description
"This references the IANA COSE Algorithms Registry indices. "The numbers of the PCRs that are associated with
Every index of this registry to be used must be mapable to a the created key.";
TPM_ALG_ID value.";
leaf COSE_Algorithm-value {
type int32;
description
"The IANA COSE Algorithms ID value.";
}
} }
} }
} }
grouping tpm12-attestation-key-identifier { grouping tpm12-attestation-key-identifier {
description description
"A selector for a suitable key identifier for a TPM 1.2."; "A selector for a suitable key identifier for a TPM 1.2.";
choice key-identifier { choice key-identifier {
description description
"Identifier for the attestation key to use for signing "Identifier for the attestation key to use for signing
skipping to change at page 15, line 18 skipping to change at page 14, line 4
description description
"Use a YANG agent generated (and maintained) attestation "Use a YANG agent generated (and maintained) attestation
key UUID."; key UUID.";
leaf uuid-value { leaf uuid-value {
type binary; type binary;
description description
"The UUID identifying the corresponding public key."; "The UUID identifying the corresponding public key.";
} }
} }
} }
} }
grouping tpm-identifier { grouping certificate-name {
description description
"In a system with multiple-TPMs get the data from a specific TPM "An arbitrary name for the identity certificate chain requested.";
identified by the name and physical-index."; leaf certificate-name {
type string;
description
"An arbitrary name for the identity certificate chain requested.";
}
}
grouping tpm-name {
description
"Path to a unique TPM on a device.";
leaf tpm-name { leaf tpm-name {
type string; type string;
description description
"Name value of a single TPM or 'All'"; "Unique system generated name for a TPM on a device.";
} }
leaf tpm-physical-index { }
if-feature ietfhw:entity-mib;
type int32 { grouping tpm-name-selector {
range "1..2147483647"; description
} "One or more TPM on a device.";
leaf-list tpm-name {
type string;
config false; config false;
description description
"The entPhysicalIndex for the TPM."; "Name of one or more unique TPMs on a device. If this object exists,
reference a selection should pull only the objects related to these TPM(s). If
"RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; it does not exist, all qualifying TPMs that are 'hardware-based'
equals true on the device are selected.";
} }
} }
grouping compute-node-identifier { grouping compute-node-identifier {
description description
"In a distributed system with multiple compute nodes "In a distributed system with multiple compute nodes
this is the node identified by name and physical-index."; this is the node identified by name and physical-index.";
leaf node-id { leaf node-id {
type string; type string;
description description
"ID of the compute node, such as Board Serial Number."; "ID of the compute node, such as Board Serial Number.";
} }
leaf node-physical-index { leaf node-physical-index {
skipping to change at page 16, line 27 skipping to change at page 15, line 27
information that is necessary is the release configuration."; information that is necessary is the release configuration.";
uses tpm12-pcr-selection; uses tpm12-pcr-selection;
leaf locality-at-release { leaf locality-at-release {
type uint8; type uint8;
description description
"This SHALL be the locality modifier required to release the "This SHALL be the locality modifier required to release the
information (TPM 1.2 type TPM_LOCALITY_SELECTION)"; information (TPM 1.2 type TPM_LOCALITY_SELECTION)";
} }
leaf digest-at-release { leaf digest-at-release {
type binary; type binary;
description description
"This SHALL be the digest of the PCR indices and PCR values "This SHALL be the digest of the PCR indices and PCR values
to verify when revealing auth data (TPM 1.2 type to verify when revealing auth data (TPM 1.2 type
TPM_COMPOSITE_HASH)."; TPM_COMPOSITE_HASH).";
} }
} }
grouping tpm12-version { grouping tpm12-version {
description description
"This structure provides information relative the version of "This structure provides information relative the version of
the TPM."; the TPM.";
list version { list version {
description description
"This indicates the version of the structure "This indicates the version of the structure
skipping to change at page 18, line 51 skipping to change at page 17, line 51
leaf-list tpm12-pcr-value { leaf-list tpm12-pcr-value {
type binary; type binary;
description description
"The list of TPM_PCRVALUEs from each PCR selected in sequence "The list of TPM_PCRVALUEs from each PCR selected in sequence
of tpm12-pcr-selection."; of tpm12-pcr-selection.";
} }
list version-info { list version-info {
description description
"An optional output parameter from a TPM 1.2 TPM_Quote2."; "An optional output parameter from a TPM 1.2 TPM_Quote2.";
leaf tag { leaf tag {
type uint16; type uint16; /* This should be converted into an ENUM */
description description
"The TPM 1.2 version and revision "The TPM 1.2 version and revision
(TPM 1.2 type TPM_STRUCTURE_TAG). (TPM 1.2 type TPM_STRUCTURE_TAG).
This MUST be TPM_CAP_VERSION_INFO (0x0030)"; This MUST be TPM_CAP_VERSION_INFO (0x0030)";
} }
uses tpm12-version; uses tpm12-version;
leaf spec-level { leaf spec-level {
type uint16; type uint16;
description description
"A number indicating the level of ordinals supported."; "A number indicating the level of ordinals supported.";
skipping to change at page 20, line 25 skipping to change at page 19, line 25
grouping node-uptime { grouping node-uptime {
description description
"Uptime in seconds of the node."; "Uptime in seconds of the node.";
leaf up-time { leaf up-time {
type uint32; type uint32;
description description
"Uptime in seconds of this node reporting its data"; "Uptime in seconds of this node reporting its data";
} }
} }
identity log-type { grouping tpm12-attestation {
description
"The type of logs available.";
}
identity bios {
base log-type;
description description
"Measurement log created by the BIOS/UEFI."; "Contains an instance of TPM1.2 style signed cryptoprocessor
measurements. It is supplemented by unsigned Attester information.";
uses certificate-name;
uses node-uptime;
uses compute-node-identifier;
uses tpm12-quote-info-common;
choice tpm12-quote {
mandatory true;
description
"Either a tpm12-quote-info or tpm12-quote-info2, depending
on whether TPM_Quote or TPM_Quote2 was used
(cf. input field add-verson).";
case tpm12-quote1 {
description
"BIOS/UEFI event logs";
uses tpm12-quote-info;
uses tpm12-pcr-composite;
}
case tpm12-quote2 {
description
"BIOS/UEFI event logs";
uses tpm12-quote-info2;
}
}
} }
grouping tpm20-attestation {
identity ima {
base log-type;
description description
"Measurement log created by IMA."; "Contains an instance of TPM2 style signed cryptoprocessor
measurements. It is supplemented by unsigned Attester information.";
uses certificate-name;
uses node-uptime;
uses compute-node-identifier;
leaf quote {
type binary;
description
"Quote data returned by TPM Quote, including PCR selection,
PCR digest and etc.";
}
leaf quote-signature {
type binary;
description
"Quote signature returned by TPM Quote.";
}
list pcr-bank-values {
/* This often should not be necessary for TPM2, as the information
if validated will need to be coming from the 'quote' leaf */
description
"PCR values in each PCR bank.";
uses TPM2_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.";
}
}
}
container pcr-digest-algo-in-quote {
uses TPM2_Algo;
description
"The hash algorithm for PCR value digest in Quote output.";
}
} }
grouping log-identifier { grouping log-identifier {
description description
"Identifier for type of log to be retrieved."; "Identifier for type of log to be retrieved.";
leaf log-type { leaf log-type {
type identityref { type identityref {
base log-type; base attested-event-log-type;
} }
mandatory true; mandatory true;
description description
"The corresponding measurement log type identity."; "The corresponding measurement log type identity.";
} }
} }
grouping boot-event-log { grouping boot-event-log {
description description
"Defines an event log corresponding to the event that extended the "Defines an event log corresponding to the event that extended the
PCR"; PCR";
leaf event-number { leaf event-number {
type uint32; type uint32;
description description
"Unique event number of this event"; "Unique event number of this event";
skipping to change at page 21, line 22 skipping to change at page 21, line 32
type uint32; type uint32;
description description
"Unique event number of this event"; "Unique event number of this event";
} }
leaf event-type { leaf event-type {
type uint32; type uint32;
description description
"log event type"; "log event type";
} }
leaf pcr-index { leaf pcr-index {
type uint16; type pcr;
description description
"Defines the PCR index that this event extended"; "Defines the PCR index that this event extended";
} }
list digest-list { list digest-list {
description "Hash of event data"; description
uses hash-algo; "Hash of event data";
leaf hash-algo {
type identityref {
base aa:asymmetric-algorithm-type;
}
description
"The hash scheme that is used to compress the event data in each of
the leaf-list digest items.";
}
leaf-list digest { leaf-list digest {
type binary; type binary;
description description
"The hash of the event data"; "The hash of the event data";
} }
} }
leaf event-size { leaf event-size {
type uint32; type uint32;
description description
"Size of the event data"; "Size of the event data";
} }
leaf-list event-data { leaf-list event-data {
type uint8; type uint8;
description description
"The event data size determined by event-size"; "The event data size determined by event-size";
skipping to change at page 22, line 38 skipping to change at page 23, line 9
type string; type string;
description description
"Algorithm used for template-hash"; "Algorithm used for template-hash";
} }
leaf template-hash { leaf template-hash {
type binary; type binary;
description description
"hash(filedata-hash, filename-hint)"; "hash(filedata-hash, filename-hint)";
} }
leaf pcr-index { leaf pcr-index {
type uint16; type pcr;
description description
"Defines the PCR index that this event extended"; "Defines the PCR index that this event extended";
} }
leaf signature { leaf signature {
type binary; type binary;
description description
"The file signature"; "The file signature";
} }
} }
skipping to change at page 23, line 28 skipping to change at page 23, line 47
"Ordered list of ima event logs by event-number"; "Ordered list of ima event logs by event-number";
uses ima-event; uses ima-event;
} }
description description
"Measurement log created by IMA."; "Measurement log created by IMA.";
} }
grouping event-logs { grouping event-logs {
description description
"A selector for the log and its type."; "A selector for the log and its type.";
choice log-type { choice attested-event-log-type {
mandatory true; mandatory true;
description description
"Event log type determines the event logs content."; "Event log type determines the event logs content.";
case bios { case bios {
description description
"BIOS/UEFI event logs"; "BIOS/UEFI event logs";
container bios-event-logs { container bios-event-logs {
description description
"This is an index referencing the TCG Algorithm "This is an index referencing the TCG Algorithm
Registry based on TPM_ALG_ID."; Registry based on TPM_ALG_ID.";
skipping to change at page 24, line 4 skipping to change at page 24, line 23
case ima { case ima {
description description
"IMA event logs"; "IMA event logs";
container ima-event-logs { container ima-event-logs {
description description
"This is an index referencing the TCG Algorithm "This is an index referencing the TCG Algorithm
Registry based on TPM_ALG_ID."; Registry based on TPM_ALG_ID.";
uses ima-event-log; uses ima-event-log;
} }
} }
} }
} }
/**********************/ /**********************/
/* RPC operations */ /* RPC operations */
/**********************/ /**********************/
rpc tpm12-challenge-response-attestation { rpc tpm12-challenge-response-attestation {
if-feature "TPM12";
description description
"This RPC accepts the input for TSS TPM 1.2 commands of the "This RPC accepts the input for TSS TPM 1.2 commands of the
managed device. ComponentIndex from the hardware manager YANG managed device. ComponentIndex from the hardware manager YANG
module to refer to dedicated TPM in composite devices, module to refer to dedicated TPM in composite devices,
e.g. smart NICs, is still a TODO."; e.g. smart NICs, is still a TODO.";
input { input {
container tpm1-attestation-challenge { container tpm1-attestation-challenge {
description description
"This container includes every information element defined "This container includes every information element defined
in the reference challenge-response interaction model for in the reference challenge-response interaction model for
remote attestation. Corresponding values are based on remote attestation. Corresponding values are based on
TPM 1.2 structure definitions"; TPM 1.2 structure definitions";
uses tpm12-pcr-selection; uses tpm12-pcr-selection;
uses nonce; uses nonce;
uses tpm12-signature-scheme; uses TPM12_Algo;
uses tpm12-attestation-key-identifier; uses tpm12-attestation-key-identifier;
leaf add-version { leaf add-version {
type boolean; type boolean;
description description
"Whether or not to include TPM_CAP_VERSION_INFO; if true, "Whether or not to include TPM_CAP_VERSION_INFO; if true,
then TPM_Quote2 must be used to create the response."; then TPM_Quote2 must be used to create the response.";
} }
uses tpm-identifier; uses tpm-name-selector;
/* if this scheme is desired, we should define XPATH to limit
selection to just 'tpm-name' that are '../tpm-specification-version'
equals 'TPM12' and where '../hardware-based' equals 'true' */
} }
} }
output { output {
list tpm12-attestation-response { list tpm12-attestation-response {
key tpm-name;
description description
"The binary output of TPM 1.2 TPM_Quote/TPM_Quote2, including "The binary output of TPM 1.2 TPM_Quote/TPM_Quote2, including
the PCR selection and other associated attestation evidence the PCR selection and other associated attestation evidence
metadata"; metadata";
uses tpm-identifier; uses tpm12-attestation;
uses node-uptime;
uses compute-node-identifier;
uses tpm12-quote-info-common;
choice tpm12-quote {
mandatory true;
description
"Either a tpm12-quote-info or tpm12-quote-info2, depending
on whether TPM_Quote or TPM_Quote2 was used
(cf. input field add-verson).";
case tpm12-quote1 {
description
"BIOS/UEFI event logs";
uses tpm12-quote-info;
uses tpm12-pcr-composite;
}
case tpm12-quote2 {
description
"BIOS/UEFI event logs";
uses tpm12-quote-info2;
}
}
} }
} }
} }
rpc tpm20-challenge-response-attestation { rpc tpm20-challenge-response-attestation {
if-feature "TPM20";
description description
"This RPC accepts the input for TSS TPM 2.0 commands of the "This RPC accepts the input for TSS TPM 2.0 commands of the
managed device. ComponentIndex from the hardware manager YANG managed device. ComponentIndex from the hardware manager YANG
module to refer to dedicated TPM in composite devices, module to refer to dedicated TPM in composite devices,
e.g. smart NICs, is still a TODO."; e.g. smart NICs, is still a TODO.";
input { input {
container tpm20-attestation-challenge { container tpm20-attestation-challenge {
description description
"This container includes every information element defined "This container includes every information element defined
in the reference challenge-response interaction model for in the reference challenge-response interaction model for
remote attestation. Corresponding values are based on remote attestation. Corresponding values are based on
TPM 2.0 structure definitions"; TPM 2.0 structure definitions";
uses nonce; uses nonce;
list challenge-objects { list challenge-objects {
key "node-id tpm-name";
description description
"Nodes to fetch attestation information, PCR selection "Nodes to fetch attestation information, PCR selection
and AK identifier."; and AK identifier.";
uses compute-node-identifier;
uses tpm-identifier;
uses tpm20-pcr-selection; uses tpm20-pcr-selection;
uses tpm20-signature-scheme; uses TPM2_Algo;
uses tpm20-attestation-key-identifier; uses tpm20-attestation-key-identifier;
uses tpm-name-selector;
/* if this scheme is desired, we should define XPATH to limit
selection to just 'tpm-name' that are '../tpm-specification-version'
equals 'TPM2' and where '../hardware-based' equals 'true' */
} }
} }
} }
output { output {
list tpm20-attestation-response { list tpm20-attestation-response {
key "node-id tpm-name"; unique "certificate-name"; /* should have XPATH making this mandatory
when there is more than one list entry */
description description
"The binary output of TPM2b_Quote in one TPM chip of the "The binary output of TPM2b_Quote in one TPM chip of the
node which identified by node-id. An TPMS_ATTEST structure node which identified by node-id. An TPMS_ATTEST structure
including a length, encapsulated in a signature"; including a length, encapsulated in a signature";
uses tpm-identifier; uses tpm20-attestation;
uses node-uptime;
uses compute-node-identifier;
leaf quote {
type binary;
description
"Quote data returned by TPM Quote, including PCR selection,
PCR digest and etc.";
}
leaf quote-signature {
type binary;
description
"Quote signature returned by TPM Quote.";
}
list pcr-bank-values {
key algo-registry-type;
description
"PCR values in each PCR bank.";
uses hash-algo;
list pcr-values {
key pcr-index;
description
"List of one PCR bank.";
leaf pcr-index {
type uint16;
description
"PCR index number.";
}
leaf pcr-value {
type binary;
description
"PCR value.";
}
}
}
container pcr-digest-algo-in-quote {
uses hash-algo;
description
"The hash algorithm for PCR value digest in
Quote output.";
}
} }
} }
} }
rpc basic-trust-establishment { rpc basic-trust-establishment {
description description
"This RPC creates a tpm-resident, non-migratable key to be used "This RPC creates a tpm-resident, non-migratable key to be used
in TPM_Quote commands, an attestation certificate."; in TPM_Quote commands, an attestation certificate.";
input { input {
uses nonce; uses nonce;
uses tpm20-signature-scheme; uses TPM2_Algo;
uses tpm-identifier; leaf-list tpm-name {
leaf certificate-name { when "not(../certificate-name)"; /* ensures both are not populated */
type string; type string;
description description
"An arbitrary name for the identity certificate chain "Path to a unique TPM on a device. If there are no elements in the
requested."; leaf-list, all TPMs which are 'hardware-based' should have keys
established.";
}
uses certificate-name {
description
"It is possible to request a new certificate using the old one as a
reference.";
} }
} }
output { output {
list attestation-certificates { list attestation-certificates {
key tpm-name;
description description
"Attestation Certificate data from a TPM identified by the TPM "Attestation Certificate data from a TPM identified by the TPM
name"; name";
uses tpm-identifier;
uses node-uptime;
uses compute-node-identifier;
leaf certificate-name {
type string;
description
"An arbitrary name for this identity certificate or
certificate chain.";
}
leaf attestation-certificate { leaf attestation-certificate {
type ietfct:end-entity-cert-cms; type ct:end-entity-cert-cms;
description description
"The binary signed certificate chain data for this identity "The binary signed certificate chain data for this identity
certificate."; certificate.";
} }
uses tpm20-attestation-key-identifier; uses tpm20-attestation-key-identifier;
} }
} }
} }
rpc log-retrieval { rpc log-retrieval {
description description
"Logs Entries are either identified via indices or via providing "Logs Entries are either identified via indices or via providing
the last line received. The number of lines returned can be the last line received. The number of lines returned can be
limited. The type of log is a choice that can be augmented."; limited. The type of log is a choice that can be augmented.";
input { input {
list log-selector { list log-selector {
key "node-id tpm-name";
description description
"Selection of log entries to be reported."; "Selection of log entries to be reported.";
uses compute-node-identifier; uses tpm-name-selector;
uses tpm-identifier;
choice index-type { choice index-type {
description description
"Last log entry received, log index number, or timestamp."; "Last log entry received, log index number, or timestamp.";
case last-entry { case last-entry {
description description
"The last entry of the log already retrieved."; "The last entry of the log already retrieved.";
leaf last-entry-value { leaf last-entry-value {
type binary; type binary;
description description
"Content of an log event which matches 1:1 with a "Content of an log event which matches 1:1 with a
skipping to change at page 29, line 6 skipping to change at page 28, line 13
description description
"Timestamp from which to start the extraction."; "Timestamp from which to start the extraction.";
} }
} }
leaf log-entry-quantity { leaf log-entry-quantity {
type uint16; type uint16;
description description
"The number of log entries to be returned. If omitted, it "The number of log entries to be returned. If omitted, it
means all of them."; means all of them.";
} }
uses tpm20-pcr-selection;
} }
uses log-identifier; uses log-identifier;
} }
output { output {
container system-event-logs { container system-event-logs {
description description
"The requested data of the measurement event logs"; "The requested data of the measurement event logs";
list node-data { list node-data {
key "node-id tpm-name"; unique "certificate-name";
description description
"Event logs of a node in a distributed system "Event logs of a node in a distributed system
identified by the node name"; identified by the node name";
uses compute-node-identifier;
uses node-uptime; uses node-uptime;
uses tpm-identifier; uses certificate-name;
container log-result { container log-result {
description description
"The requested entries of the corresponding log."; "The requested entries of the corresponding log.";
uses event-logs; uses event-logs;
} }
} }
} }
} }
} }
/*********************************/ /**************************************/
/* Protocol accessible nodes */ /* Config & Oper accessible nodes */
/*********************************/ /**************************************/
container rats-support-structures { container rats-support-structures {
config false;
description description
"The datastore definition enabling verifiers or relying "The datastore definition enabling verifiers or relying
parties to discover the information necessary to use the parties to discover the information necessary to use the
remote attestation RPCs appropriately."; remote attestation RPCs appropriately.";
leaf-list supported-algos { leaf-list supported-algos {
type uint16; config true;
type identityref {
base aa:asymmetric-algorithm-type;
}
description description
"Supported TPM_ALG_ID values for the TPM in question. "Supported algorithms values for an Attester.";
Will include ComponentIndex soon.";
} }
list compute-nodes { list compute-nodes {
config false;
key node-id; key node-id;
uses compute-node-identifier; uses compute-node-identifier;
description description
"A list names of hardware componnets in this composite "A list names of hardware components in this composite
device that RATS can be conducted with."; device that RATS can be conducted with.";
leaf node-name { leaf node-name {
type string; type string;
description description
"Name of the compute node."; "Name of the compute node.";
} }
leaf node-location { leaf node-location {
type string; type string;
description description
"Location of the compute node, such as slot number."; "Location of the compute node, such as slot number.";
} }
list tpms { }
key tpm-name; list tpms {
uses tpm-identifier; 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 {
config false;
type boolean;
description description
"A list of TPMs in this composite device that RATS "Answers the question: is this TPM is a hardware based TPM?";
can be conducted with."; }
leaf tpm-manufacturer { leaf tpm-physical-index {
type string; if-feature ietfhw:entity-mib;
description config false;
"TPM manufacturer name."; type int32 {
} range "1..2147483647";
leaf tpm-firmware-version {
type string;
description
"TPM firmware version.";
}
leaf tpm-specification-version {
type string;
description
"TPM1.2 or TPM2.0.";
} }
leaf tpm-status { description
type string; "The entPhysicalIndex for the TPM.";
description reference
"TPM chip self-test status, normal or abnormal."; "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 {
when "../../compute-nodes";
config false;
mandatory true;
type compute-node-ref;
description
"When there is more that one TPM, this indicates for which
compute node this TPM services.";
}
leaf tpm-manufacturer {
config false;
type string;
description
"TPM manufacturer name.";
}
leaf tpm-firmware-version {
config false;
type string;
description
"TPM firmware version.";
}
leaf tpm-specification-version {
type identityref {
base cryptoprocessor;
} }
list certificates { config false;
mandatory true;
description
"Identifies the cryptoprocessor API set supported";
}
leaf tpm-status {
type string;
config false;
description
"TPM chip self-test status, normal or abnormal.";
}
container certificates {
description
"The TPM's certificates, including EK certificates
and AK certificates.";
list certificate {
config true;
key "certificate-name";
description description
"The TPM's certificates, including EK certificates "Three types of certificates can be accessed via
and AK certificates."; this statement, including Initial Attestation
container certificate { Key Cert, Local Attestation Key Cert or
description Endorsement Key Cert.";
"Three types of certificates can be accessed via uses certificate-name;
this statement, including Initial Attestation leaf certificate-ref {
Key Cert, Local Attestation Key Cert or type leafref {
Endorsement Key Cert."; path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key"
leaf certificate-name { + "/ks:certificates/ks:certificate/ks:name";
type string;
description
"An arbitrary name for this identity certificate
or certificate chain.";
} }
leaf certificate-type { description
type enumeration { "A reference to a specific certificate of an
enum endorsement-cert { asymmetric key in the Keystore.";
value 0; /* Note: It is also possible to import a grouping which allows
description local definition via an imported keystore schema. */
"EK Cert type."; }
} leaf certificate-type {
enum initial-attestation-cert { type enumeration {
value 1; enum endorsement-cert {
description value 0;
"IAK Cert type."; description
} "Endorsement Key (EK) Certificate type.";
enum local-attestation-cert { }
value 2; enum initial-attestation-cert {
description value 1;
"LAK Cert type."; 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";
}
leaf certificate-value {
type ietfct:end-entity-cert-cms;
description
"The binary signed public endorsement key (EK),
attestation key(AK) and corresponding claims
(EK,AK Certificate). In a TPM 2.0 the EK,
AK Certificate resides in a well-defined NVRAM
location by the TPM vendor. Maybe certificate-value
defined as binary type is a simple way.";
}
leaf lak-public-structure {
type binary;
description
"Marshalled LAK public structure, used for LAK
Certificate verification";
} }
description
"Type of this certificate";
} }
} }
} }
} }
}
}
<CODE ENDS>
2.3. ietf-asymmetric-algs
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. Therefore a modified version of this draft is included here.
Perhaps someone will steward this list as a separate draft.
<CODE BEGINS> ietf-asymmetric-algs@2020-06-12.yang
module ietf-asymmetric-algs {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-asymmetric-algs";
prefix aa;
organization
"IETF NETCONF (Network Configuration) Working Group";
contact
"WG Web: <http://datatracker.ietf.org/wg/netconf/>
WG List: <mailto:netconf@ietf.org>
Author: Eric Voit <mailto:evoit@cisco.com>
Author: Kent Watsen <mailto:kent+ietf@watsen.net>
Author: Wang Haiguang <wang.haiguang.shieldlab@huawei.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-06-12 {
description
"Initial version";
reference
"RFC XXXX: tbd
initial draft: draft-voit-rats-trusted-path-routing
concepts from ietf-asymmetric-algs.yang which did not progress to
WGLC in NETCONF.";
}
/*****************/
/* Features */
/*****************/
feature TPM12 {
description
"This feature indicates support for the TPM 1.2 API.";
}
feature TPM20 {
description
"This feature indicates support for the TPM 2.0 API.";
}
feature iana {
description
"This feature indicates support for the IANA algorithms defined
in Registry xxxxx";
}
/*****************/
/* Identities */
/*****************/
/* There needs to be collasping/verification of some of the identity types
between the various algorithm types listed below */
identity asymmetric-algorithm-type {
description
"Base identity identityerating various asymmetric key algorithms.";
} }
identity iana-asymmetric-algorithm {
base asymmetric-algorithm-type;
description
"Base identity identityerating various asymmetric key algorithms.";
}
identity tpm12-asymmetric-algorithm {
base asymmetric-algorithm-type;
description
"Base identity identityerating various asymmetric key algorithms.";
reference
"TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf
TPM_ALGORITHM_ID values, page 18";
}
identity tpm2-asymmetric-algorithm {
base asymmetric-algorithm-type;
description
"Base identity identityerating various asymmetric key algorithms.";
reference
"TPM-Rev-2.0-Part-2-Structures-01.38.pdf
The TCG Algorithm Registry ID value. Table 9";
}
identity rsa {
base tpm12-asymmetric-algorithm;
base tpm2-asymmetric-algorithm;
description
"RFC 3447 - the RSA algorithm";
}
identity rsa1024 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 1024-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity rsa2048 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 2048-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity rsa3072 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 3072-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity rsa4096 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 4096-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity rsa7680 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 7680-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity rsa15360 {
if-feature "iana";
base iana-asymmetric-algorithm;
base rsa;
description
"The RSA algorithm using a 15360-bit key.";
reference
"RFC 8017: PKCS #1: RSA Cryptography Specifications Version 2.2.";
}
identity secp192r1 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a NIST P192 Curve.";
reference
"RFC 6090: Fundamental Elliptic Curve Cryptography Algorithms.
RFC 5480: Elliptic Curve Cryptography Subject Public Key
Information.";
}
identity secp224r1 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a NIST P224 Curve.";
reference
"RFC 6090: Fundamental Elliptic Curve Cryptography Algorithms.
RFC 5480: Elliptic Curve Cryptography Subject Public Key
Information.";
}
identity secp256r1 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a NIST P256 Curve.";
reference
"RFC 6090: Fundamental Elliptic Curve Cryptography Algorithms.
RFC 5480: Elliptic Curve Cryptography Subject Public Key
Information.";
}
identity secp384r1 {
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a NIST P384 Curve.";
reference
"RFC 6090: Fundamental Elliptic Curve Cryptography Algorithms.
RFC 5480: Elliptic Curve Cryptography Subject Public Key
Information.";
}
identity secp521r1 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a NIST P521 Curve.";
reference
"RFC 6090: Fundamental Elliptic Curve Cryptography Algorithms.
RFC 5480: Elliptic Curve Cryptography Subject Public Key
Information.";
}
identity x25519 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a x.25519 Curve.";
reference
"RFC 7748: Elliptic Curves for Security.";
}
identity x448 {
if-feature "iana";
base iana-asymmetric-algorithm;
description
"The asymmetric algorithm using a x.448 Curve.";
reference
"RFC 7748: Elliptic Curves for Security.";
}
identity SHA1 {
if-feature "TPM20 or TPM12";
base tpm12-asymmetric-algorithm;
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10118-3 - SHA1 algorithm";
}
identity HMAC {
if-feature "TPM20 or TPM12";
base tpm12-asymmetric-algorithm;
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 9797-2 - Hash Message Authentication Code (HMAC) algorithm
also RFC2014.
we need to verify if NMAC implementation isn't different in the two.";
}
identity AES {
if-feature "TPM20 or TPM12";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 18033-3 - the AES algorithm";
}
identity AES128 {
if-feature "TPM12";
base tpm12-asymmetric-algorithm;
base AES;
description
"ISO/IEC 18033-3 - the AES algorithm, key size 128";
}
identity AES192 {
if-feature "TPM12";
base tpm12-asymmetric-algorithm;
base AES;
description
"ISO/IEC 18033-3 - the AES algorithm, key size 192";
}
identity AES256 {
if-feature "TPM12";
base tpm12-asymmetric-algorithm;
base AES;
description
"ISO/IEC 18033-3 - the AES algorithm, key size 256";
}
identity MGF1 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"IEEE Std 1363a -2004 - hash-based mask-generation function";
}
identity KEYEDHASH {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"TPM2 KEYEDHASH - an encryption or signing algorithm using a keyed hash";
}
identity XOR {
if-feature "TPM20 or TPM12";
base tpm12-asymmetric-algorithm;
base tpm2-asymmetric-algorithm;
description
"TPM2 XOR";
}
identity SHA256 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10118-3 - the SHA 256 algorithm";
}
identity SHA384 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10118-3 - the SHA 384 algorithm";
}
identity SHA512 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10118-3 - the SHA 512 algorithm";
}
identity NULL {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"TPM2 NULL";
}
identity SM3_256 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"GM/T 0004-2012 - SM3_256";
}
identity SM4 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"GM/T 0004-2012 - SM4 symmetric block cipher";
}
identity RSASSA {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"RFC 3447 - defined in section 8.2 (RSASSAPKCS1-v1_5)";
}
identity RSAES {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"RFC 3447 - defined in section 7.2 (RSAES-PKCS1-v1_5)";
}
identity RSAPSS {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"RFC 3447 - defined in section 8.1 (RSASSA PSS)";
}
identity OAEP {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"RFC 3447 - defined in section 7.1 (RSASSA OAEP)";
}
identity ECDSA {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 14888-3 - elliptic curve cryptography (ECC)";
}
identity ECDH {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"NIST SP800-56A - secret sharing using ECC";
}
identity ECDAA {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"TPM2 - elliptic-curve based anonymous signing scheme";
}
identity SM2 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"A GM/T 0003.1-2012, GM/T 0003.2-2012, GM/T 0003.3-2012,
GM/T 0003.5-2012 SM2";
}
identity ECSCHNORR {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"TPM2 - elliptic-curve based Schnorr signature";
}
identity ECMQV {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"NIST SP800-56A - two-phase elliptic-curve key";
}
identity KDF1_SP800_56A {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"NIST SP800-56A - concatenation key derivation function,
(approved alternative1) section 5.8.1";
}
identity KDF2 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"IEEE 1363a-2004 - key derivation function KDF2 section 13.2";
}
identity KDF1_SP800_108 {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"NIST SP800-108 - Section 5.1 KDF in Counter Mode";
}
identity ECC {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 15946-1 - prime field ECC";
}
identity SYMCIPHER {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"TPM2 - object type for a symmetric block cipher";
}
identity CAMELLIA {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 18033-3 - the Camellia algorithm";
}
identity CTR {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10116 - Counter mode";
}
identity OFB {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10116 - Output Feedback mode";
}
identity CBC {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10116 - Cipher Block Chaining mode";
}
identity CFB {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10116 - Cipher Feedback mode";
}
identity ECB {
if-feature "TPM20";
base tpm2-asymmetric-algorithm;
description
"ISO/IEC 10116 - Electronic Codebook mode";
}
} }
<CODE ENDS> <CODE ENDS>
3. IANA considerations 3. IANA considerations
This document will include requests to IANA: This document will include requests to IANA:
To be defined yet. To be defined yet.
4. Security Considerations 4. Security Considerations
There are always some. There are always some.
5. Acknowledgements 5. Acknowledgements
Not yet. Not yet.
6. Change Log 6. Change Log
Changes from version 01 to version 02:
o Extracted Crypto-types into a separate YANG file
o Mades the algorithms explicit, not strings
o Hash Algo as key the selected TPM2 PCRs
o PCR numbers are their own type
o Eliminated nested keys for node-id plus tpm-name
o Eliminated TPM-Name of "ALL"
o Added TPM-Path
Changes from version 00 to version 01: Changes from version 00 to version 01:
o Addressed author's comments o Addressed author's comments
o Extended complementary details about attestation-certificates o Extended complementary details about attestation-certificates
o Relabeled chunk-size to log-entry-quantity o Relabeled chunk-size to log-entry-quantity
o Relabeled location with compute-node or tpm-name where appropriate o Relabeled location with compute-node or tpm-name where appropriate
skipping to change at page 33, line 6 skipping to change at page 44, line 6
7.1. Normative References 7.1. Normative References
[I-D.birkholz-rats-reference-interaction-model] [I-D.birkholz-rats-reference-interaction-model]
Birkholz, H. and M. Eckel, "Reference Interaction Models Birkholz, H. and M. Eckel, "Reference Interaction Models
for Remote Attestation Procedures", draft-birkholz-rats- for Remote Attestation Procedures", draft-birkholz-rats-
reference-interaction-model-02 (work in progress), January reference-interaction-model-02 (work in progress), January
2020. 2020.
[I-D.ietf-netconf-crypto-types] [I-D.ietf-netconf-crypto-types]
Watsen, K. and H. Wang, "Common YANG Data Types for Watsen, K., "Common YANG Data Types for Cryptography",
Cryptography", draft-ietf-netconf-crypto-types-14 (work in draft-ietf-netconf-crypto-types-15 (work in progress), May
progress), March 2020. 2020.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
RFC 6991, DOI 10.17487/RFC6991, July 2013, RFC 6991, DOI 10.17487/RFC6991, July 2013,
<https://www.rfc-editor.org/info/rfc6991>. <https://www.rfc-editor.org/info/rfc6991>.
skipping to change at page 33, line 33 skipping to change at page 44, line 33
[RFC8348] Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A [RFC8348] Bierman, A., Bjorklund, M., Dong, J., and D. Romascanu, "A
YANG Data Model for Hardware Management", RFC 8348, YANG Data Model for Hardware Management", RFC 8348,
DOI 10.17487/RFC8348, March 2018, DOI 10.17487/RFC8348, March 2018,
<https://www.rfc-editor.org/info/rfc8348>. <https://www.rfc-editor.org/info/rfc8348>.
7.2. Informative References 7.2. Informative References
[I-D.ietf-rats-architecture] [I-D.ietf-rats-architecture]
Birkholz, H., Thaler, D., Richardson, M., Smith, N., and Birkholz, H., Thaler, D., Richardson, M., Smith, N., and
W. Pan, "Remote Attestation Procedures Architecture", W. Pan, "Remote Attestation Procedures Architecture",
draft-ietf-rats-architecture-02 (work in progress), March draft-ietf-rats-architecture-04 (work in progress), May
2020. 2020.
Authors' Addresses Authors' Addresses
Henk Birkholz Henk Birkholz
Fraunhofer SIT Fraunhofer SIT
Rheinstrasse 75 Rheinstrasse 75
Darmstadt 64295 Darmstadt 64295
Germany Germany
 End of changes. 100 change blocks. 
605 lines changed or deleted 1124 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/