draft-ietf-rats-yang-tpm-charra-16.txt | draft-ietf-rats-yang-tpm-charra-17.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: 3 September 2022 S. Bhandari | Expires: 17 September 2022 S. Bhandari | |||
ThoughtSpot | ThoughtSpot | |||
E. Voit | E. Voit | |||
B. Sulzen | B. Sulzen | |||
Cisco | Cisco | |||
L. Xia | L. Xia | |||
Huawei | Huawei | |||
T. Laffey | T. Laffey | |||
HPE | HPE | |||
G. Fedorkow | G. Fedorkow | |||
Juniper | Juniper | |||
2 March 2022 | 16 March 2022 | |||
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-16 | draft-ietf-rats-yang-tpm-charra-17 | |||
Abstract | Abstract | |||
This document defines YANG RPCs and a small number of configuration | This document defines YANG RPCs and a few configuration nodes | |||
nodes required to retrieve attestation evidence about integrity | required to retrieve attestation evidence about integrity | |||
measurements from a device, following the operational context defined | measurements from a device, following the operational context defined | |||
in TPM-based Network Device Remote Integrity Verification. | in TPM-based Network Device Remote Integrity Verification. | |||
Complementary measurement logs are also provided by the YANG RPCs, | Complementary measurement logs are also provided by the YANG RPCs, | |||
originating from one or more roots of trust for measurement (RTMs). | originating from one or more roots of trust for measurement (RTMs). | |||
The module defined requires at least one TPM 1.2 or TPM 2.0 as well | The module defined requires at least one TPM 1.2 or TPM 2.0 as well | |||
as a corresponding TPM Software Stack (TSS), or equivalent hardware | as a corresponding TPM Software Stack (TSS), or equivalent hardware | |||
implementations that include the protected capabilities as provided | implementations that include the protected capabilities as provided | |||
by TPMs as well as a corresponding software stack, included in the | by TPMs as well as a corresponding software stack, included in the | |||
device components of the composite device the YANG server is running | device components of the composite device the YANG server is running | |||
on. | on. | |||
skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
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 3 September 2022. | This Internet-Draft will expire on 17 September 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
extracted from this document must include Revised BSD License text as | extracted from this document must include Simplified BSD License text | |||
described in Section 4.e of the Trust Legal Provisions and are | as described in Section 4.e of the Trust Legal Provisions and are | |||
provided without warranty as described in the Revised BSD License. | provided without warranty as 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. YANG Modules . . . . . . . . . . . . . . . . . . . . . . 3 | 2.1. YANG Modules . . . . . . . . . . . . . . . . . . . . . . 3 | |||
2.1.1. 'ietf-tpm-remote-attestation' . . . . . . . . . . . . 4 | 2.1.1. 'ietf-tpm-remote-attestation' . . . . . . . . . . . . 4 | |||
2.1.2. 'ietf-tcg-algs' . . . . . . . . . . . . . . . . . . . 32 | 2.1.2. 'ietf-tcg-algs' . . . . . . . . . . . . . . . . . . . 33 | |||
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 | 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 48 | |||
4. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | 4. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | |||
5. Change Log . . . . . . . . . . . . . . . . . . . . . . . . . 50 | 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 50 | |||
6. References . . . . . . . . . . . . . . . . . . . . . . . . . 51 | 5.1. Normative References . . . . . . . . . . . . . . . . . . 51 | |||
6.1. Normative References . . . . . . . . . . . . . . . . . . 51 | 5.2. Informative References . . . . . . . . . . . . . . . . . 55 | |||
6.2. Informative References . . . . . . . . . . . . . . . . . 57 | Appendix A. Integrity Measurement Architecture (IMA) . . . . . . 56 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 57 | Appendix B. IMA for Network Equipment Boot Logs . . . . . . . . 57 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 58 | ||||
1. Introduction | 1. Introduction | |||
This document is based on the general terminology defined in the | This document is based on the general terminology defined in the | |||
[I-D.ietf-rats-architecture] and uses the operational context defined | [I-D.ietf-rats-architecture] and uses the operational context defined | |||
in [I-D.ietf-rats-tpm-based-network-device-attest] as well as the | in [I-D.ietf-rats-tpm-based-network-device-attest] as well as the | |||
interaction model and information elements defined in | interaction model and information elements defined in | |||
[I-D.ietf-rats-reference-interaction-models]. The currently | [I-D.ietf-rats-reference-interaction-models]. The currently | |||
supported hardware security modules (HSMs) are the Trusted Platform | supported hardware security modules (HSMs) are the Trusted Platform | |||
Modules (TPMs) [TPM1.2] and [TPM2.0] as specified by the Trusted | Modules (TPMs) [TPM1.2] and [TPM2.0] as specified by the Trusted | |||
Computing Group (TCG). One or more TPMs embedded in the components | Computing Group (TCG). One TPM, or multiple TPMs in the case of a | |||
of a Composite Device are required in order to use the YANG module | Composite Device, are required in order to use the YANG module | |||
defined in this document. A TPM is used as a root of trust for | defined in this document. Each TPM is used as a root of trust for | |||
reporting (RTR) in order to retrieve attestation Evidence from a | storage (RTS) in order to store system security measurement Evidence. | |||
composite device (_TPM Quote_ primitive operation). Additionally, it | And each TPM is used as a root of trust for reporting (RTR) in order | |||
is used as a root of trust for storage (RTS) in order to retain | to retrieve attestation Evidence. This is done by using a YANG RPC | |||
shielded secrets and store system measurements using a folding hash | to request a quote which exposes a rolling hash the security | |||
function (_TPM PCR Extend_ primitive operation). | measurements held internally within the TPM. | |||
Specific terms imported from [I-D.ietf-rats-architecture] and used in | Specific terms imported from [I-D.ietf-rats-architecture] and used in | |||
this document include: Attester, Composite Device, Evidence. | this document include: Attester, Composite Device, Evidence. | |||
Specific terms imported from [TPM2.0-Key] and used in this document | Specific terms imported from [TPM2.0-Key] and used in this document | |||
include: Endorsement Key (EK), Initial Attestation Key (IAK), Local | include: Endorsement Key (EK), Initial Attestation Key (IAK), | |||
Attestation Key (LAK). | Attestation Identity Key (AIK), Local Attestation Key (LAK). | |||
1.1. Requirements notation | 1.1. Requirements notation | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. The YANG Module for Basic Remote Attestation Procedures | 2. The YANG Module for Basic Remote Attestation Procedures | |||
One or more TPMs MUST be embedded in a Composite Device that provides | One or more TPMs MUST be embedded in a Composite Device that provides | |||
attestation evidence via the YANG module defined in this document. | attestation evidence via the YANG module defined in this document. | |||
The ietf-basic-remote-attestation YANG module enables a composite | The ietf-tpm-remote-attestation YANG module enables a composite | |||
device to take on the role of an Attester, in accordance with the | device to take on the role of an Attester, in accordance with the | |||
Remote Attestation Procedures (RATS) architecture | Remote Attestation Procedures (RATS) architecture | |||
[I-D.ietf-rats-architecture], and the corresponding challenge- | [I-D.ietf-rats-architecture], and the corresponding challenge- | |||
response interaction model defined in the | response interaction model defined in the | |||
[I-D.ietf-rats-reference-interaction-models] document. A fresh nonce | [I-D.ietf-rats-reference-interaction-models] document. A fresh nonce | |||
with an appropriate amount of entropy [NIST-915121] MUST be supplied | with an appropriate amount of entropy [NIST-915121] MUST be supplied | |||
by the YANG client in order to enable a proof-of-freshness with | by the YANG client in order to enable a proof-of-freshness with | |||
respect to the attestation Evidence provided by the Attester running | respect to the attestation Evidence provided by the Attester running | |||
the YANG datastore. Further, this nonce is used to prevent replay | the YANG datastore. Further, this nonce is used to prevent replay | |||
attacks. The method for communicating the relationship of each | attacks. The method for communicating the relationship of each | |||
skipping to change at page 4, line 10 ¶ | skipping to change at page 4, line 10 ¶ | |||
2.1. YANG Modules | 2.1. YANG Modules | |||
In this section the several YANG modules are defined. | In this section the several YANG modules are defined. | |||
2.1.1. 'ietf-tpm-remote-attestation' | 2.1.1. 'ietf-tpm-remote-attestation' | |||
This YANG module imports modules from [RFC6991] with prefix 'yang', | This YANG module imports modules from [RFC6991] with prefix 'yang', | |||
[RFC8348] with prefix 'hw', [I-D.ietf-netconf-keystore] with prefix | [RFC8348] with prefix 'hw', [I-D.ietf-netconf-keystore] with prefix | |||
'ks', and 'ietf-tcg-algs.yang' Section 2.1.2.3 with prefix 'taa'. | 'ks', and 'ietf-tcg-algs.yang' Section 2.1.2.3 with prefix 'taa'. | |||
Additionally references are made to [RFC8032], [RFC8017], [RFC6933], | Additionally, references are made to [RFC8032], [RFC8017], [RFC6933], | |||
[TPM1.2-Commands], [TPM2.0-Arch], [TPM2.0-Structures], [TPM2.0-Key], | [TPM1.2-Commands], [TPM2.0-Arch], [TPM2.0-Structures], [TPM2.0-Key], | |||
[TPM1.2-Structures], [bios-log], [ima-log], [BIOS-Log-Event-Type] and | [TPM1.2-Structures], [bios-log], [ima-log], [BIOS-Log-Event-Type], as | |||
[netequip-boot-log]. | well as Appendix A and Appendix B. | |||
2.1.1.1. Features | 2.1.1.1. Features | |||
This module supports the following features: | This module supports the following features: | |||
* 'TPMs': Indicates that multiple TPMs on the device can support | * 'mtpm': Indicates that multiple TPMs on the device can support | |||
remote attestation. This feature is applicable in cases where | remote attestation. For example, this feature could be used in | |||
multiple line cards are present, each with its own TPM. | cases where multiple line cards are present, each with its own | |||
TPM. | ||||
* 'bios': Indicates that the device supports the retrieval of BIOS/ | * 'bios': Indicates that the device supports the retrieval of BIOS/ | |||
UEFI event logs. [bios-log] | UEFI event logs. [bios-log] | |||
* 'ima': Indicates that the device supports the retrieval of event | * 'ima': Indicates that the device supports the retrieval of event | |||
logs from the Linux Integrity Measurement Architecture (IMA). | logs from the Linux Integrity Measurement Architecture (IMA | |||
[ima-log] | [ima-log]). Also see Appendix A. | |||
* 'netequip_boot': Indicates that the device supports the retrieval | * 'netequip_boot': Indicates that the device supports the retrieval | |||
of netequip boot event logs. [netequip-boot-log] | of netequip boot event logs. See Appendix A and Appendix B. | |||
2.1.1.2. Identities | 2.1.1.2. Identities | |||
This module supports the following types of attestation event logs: | This module supports the following types of attestation event logs: | |||
'bios', 'ima', and 'netequip_boot'. | 'bios', 'ima', and 'netequip_boot'. | |||
2.1.1.3. Remote Procedure Calls (RPCs) | 2.1.1.3. Remote Procedure Calls (RPCs) | |||
In the following, RPCs for both TPM 1.2 and TPM 2.0 attestation | In the following, RPCs for both TPM 1.2 and TPM 2.0 attestation | |||
procedures are defined. | procedures are defined. | |||
2.1.1.3.1. 'tpm12-challenge-response-attestation' | 2.1.1.3.1. 'tpm12-challenge-response-attestation' | |||
This RPC allows a Verifier to request signed TPM PCRs (_TPM Quote_ | This RPC allows a Verifier to request signed TPM PCRs (_TPM Quote_ | |||
operation) from a TPM 1.2 compliant cryptoprocessor. Where the | operation) from a TPM 1.2 compliant cryptoprocessor. Where the | |||
feature 'TPMs' is active, and one or more 'certificate-name' is not | feature 'mtpm' is active, and one or more 'certificate-name' is not | |||
provided, all TPM 1.2 compliant cryptoprocessors will respond. A | provided, all TPM 1.2 compliant cryptoprocessors will respond. A | |||
YANG tree diagram of this RPC is as follows: | YANG tree diagram of this RPC is as follows: | |||
+---x tpm12-challenge-response-attestation {taa:TPM12}? | +---x tpm12-challenge-response-attestation {taa:tpm12}? | |||
+---w input | +---w input | |||
| +---w tpm12-attestation-challenge | | +---w tpm12-attestation-challenge | |||
| +---w pcr-index* pcr | | +---w pcr-index* pcr | |||
| +---w nonce-value binary | | +---w nonce-value binary | |||
| +---w certificate-name* certificate-name-ref {tpm:TPMs}? | | +---w certificate-name* certificate-name-ref | |||
+--ro output | | {tpm:mtpm}? | |||
+--ro tpm12-attestation-response* [] | +--ro output | |||
+--ro certificate-name certificate-name-ref | +--ro tpm12-attestation-response* [] | |||
+--ro up-time? uint32 | +--ro certificate-name certificate-name-ref | |||
+--ro TPM_QUOTE2? binary | +--ro up-time? uint32 | |||
+--ro TPM_QUOTE2? binary | ||||
2.1.1.3.2. 'tpm20-challenge-response-attestation' | 2.1.1.3.2. 'tpm20-challenge-response-attestation' | |||
This RPC allows a Verifier to request signed TPM PCRs (_TPM Quote_ | This RPC allows a Verifier to request signed TPM PCRs (_TPM Quote_ | |||
operation) from a TPM 2.0 compliant cryptoprocessor. Where the | operation) from a TPM 2.0 compliant cryptoprocessor. Where the | |||
feature 'TPMs' is active, and one or more 'certificate-name' is not | feature 'mtpm' is active, and one or more 'certificate-name' is not | |||
provided, all TPM 2.0 compliant cryptoprocessors will respond. A | provided, all TPM 2.0 compliant cryptoprocessors will respond. A | |||
YANG tree diagram of this RPC is as follows: | YANG tree diagram of this RPC is as follows: | |||
+---x tpm20-challenge-response-attestation {taa:TPM20}? | +---x tpm20-challenge-response-attestation {taa:tpm20}? | |||
+---w input | +---w input | |||
| +---w tpm20-attestation-challenge | | +---w tpm20-attestation-challenge | |||
| +---w nonce-value binary | | +---w nonce-value binary | |||
| +---w tpm20-pcr-selection* [] | | +---w tpm20-pcr-selection* [] | |||
| | +---w TPM20-hash-algo? identityref | | | +---w tpm20-hash-algo? identityref | |||
| | +---w pcr-index* tpm:pcr | | | +---w pcr-index* pcr | |||
| +---w certificate-name* certificate-name-ref {tpm:TPMs}? | | +---w certificate-name* certificate-name-ref | |||
| {tpm:mtpm}? | ||||
+--ro output | +--ro output | |||
+--ro tpm20-attestation-response* [] | +--ro tpm20-attestation-response* [] | |||
+--ro certificate-name certificate-name-ref | +--ro certificate-name certificate-name-ref | |||
+--ro TPMS_QUOTE_INFO binary | +--ro TPMS_QUOTE_INFO binary | |||
+--ro quote-signature? binary | +--ro quote-signature? binary | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro unsigned-pcr-values* [] | +--ro unsigned-pcr-values* [] | |||
+--ro TPM20-hash-algo? identityref | +--ro tpm20-hash-algo? identityref | |||
+--ro pcr-values* [pcr-index] | +--ro pcr-values* [pcr-index] | |||
+--ro pcr-index pcr | +--ro pcr-index pcr | |||
+--ro pcr-value? binary | +--ro pcr-value? binary | |||
An example of an RPC challenge requesting PCRs 0-7 from a SHA-256 | An example of an RPC challenge requesting PCRs 0-7 from a SHA-256 | |||
bank could look like the following: | bank could look like the following: | |||
<rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | <rpc message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> | |||
<tpm20-challenge-response-attestation> | <tpm20-challenge-response-attestation> | |||
xmlns="urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation"> | xmlns="urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation"> | |||
skipping to change at page 7, line 13 ¶ | skipping to change at page 7, line 13 ¶ | |||
</rpc-reply> | </rpc-reply> | |||
2.1.1.4. 'log-retrieval' | 2.1.1.4. 'log-retrieval' | |||
This RPC allows a Verifier to acquire the evidence which was extended | This RPC allows a Verifier to acquire the evidence which was extended | |||
into specific TPM PCRs. A YANG tree diagram of this RPC is as | into specific TPM PCRs. A YANG tree diagram of this RPC is as | |||
follows: | follows: | |||
+---x log-retrieval | +---x log-retrieval | |||
+---w input | +---w input | |||
| +---w log-selector* [] | ||||
| | +---w name* string | ||||
| | +---w (index-type)? | ||||
| | | +--:(last-entry) | ||||
| | | | +---w last-entry-value? binary | ||||
| | | +--:(index) | ||||
| | | | +---w last-index-number? uint64 | ||||
| | | +--:(timestamp) | ||||
| | | +---w timestamp? yang:date-and-time | ||||
| | +---w log-entry-quantity? uint16 | ||||
| +---w log-type identityref | | +---w log-type identityref | |||
| +---w log-selector* [] | ||||
| +---w name* string | ||||
| +---w (index-type)? | ||||
| | +--:(last-entry) | ||||
| | | +---w last-entry-value? binary | ||||
| | +--:(index) | ||||
| | | +---w last-index-number? uint64 | ||||
| | +--:(timestamp) | ||||
| | +---w timestamp? yang:date-and-time | ||||
| +---w log-entry-quantity? uint16 | ||||
+--ro output | +--ro output | |||
+--ro system-event-logs | +--ro system-event-logs | |||
+--ro node-data* [] | +--ro node-data* [] | |||
+--ro name? string | +--ro name? string | |||
+--ro up-time? uint32 | +--ro up-time? uint32 | |||
+--ro log-result | +--ro log-result | |||
+--ro (attested_event_log_type) | +--ro (attested_event_log_type) | |||
+--:(bios) {bios}? | +--:(bios) {bios}? | |||
| +--ro bios-event-logs | | +--ro bios-event-logs | |||
| +--ro bios-event-entry* [event-number] | | +--ro bios-event-entry* [event-number] | |||
| +--ro event-number uint32 | | +--ro event-number uint32 | |||
| +--ro event-type? uint32 | | +--ro event-type? uint32 | |||
| +--ro pcr-index? pcr | | +--ro pcr-index? pcr | |||
| +--ro digest-list* [] | | +--ro digest-list* [] | |||
| | +--ro hash-algo? identityref | | | +--ro hash-algo? identityref | |||
| | +--ro digest* binary | | | +--ro digest* binary | |||
| +--ro event-size? uint32 | | +--ro event-size? uint32 | |||
| +--ro event-data* uint8 | | +--ro event-data* binary | |||
+--:(ima) {ima}? | +--:(ima) {ima}? | |||
| +--ro ima-event-logs | | +--ro ima-event-logs | |||
| +--ro ima-event-entry* [event-number] | | +--ro ima-event-entry* [event-number] | |||
| +--ro event-number uint64 | | +--ro event-number uint64 | |||
| +--ro ima-template? string | | +--ro ima-template? string | |||
| +--ro filename-hint? string | | +--ro filename-hint? string | |||
| +--ro filedata-hash? binary | | +--ro filedata-hash? binary | |||
| +--ro filedata-hash-algorithm? string | | +--ro filedata-hash-algorithm? string | |||
| +--ro template-hash-algorithm? string | | +--ro template-hash-algorithm? string | |||
| +--ro template-hash? binary | | +--ro template-hash? binary | |||
skipping to change at page 8, line 26 ¶ | skipping to change at page 8, line 26 ¶ | |||
+--ro signature? binary | +--ro signature? binary | |||
2.1.1.5. Data Nodes | 2.1.1.5. Data Nodes | |||
This section provides a high level description of the data nodes | This section provides a high level description of the data nodes | |||
containing the configuration and operational objects with the YANG | containing the configuration and operational objects with the YANG | |||
model. For more details, please see the YANG model itself in | model. For more details, please see the YANG model itself in | |||
Figure 1. | Figure 1. | |||
Container 'rats-support-structures': This houses the set of | Container 'rats-support-structures': This houses the set of | |||
information relating to a device's TPM(s). | information relating to remote attestation for a device. This | |||
includes specific device TPM(s), the compute nodes (such as line | ||||
cards) on which the TPM(s) reside, and the algorithms supported | ||||
across the platform. | ||||
Container 'tpms': Provides configuration and operational details for | Container 'tpms': Provides configuration and operational details for | |||
each supported TPM, including the tpm-firmware-version, PCRs which | each supported TPM, including the tpm-firmware-version, PCRs which | |||
may be quoted, certificates which are associated with that TPM, | may be quoted, certificates which are associated with that TPM, | |||
and the current operational status. Of note are the certificates | and the current operational status. Of note are the certificates | |||
which are associated with that TPM. As a certificate is | which are associated with that TPM. As a certificate is | |||
associated with a particular TPM attestation key, knowledge of the | associated with a particular TPM attestation key, knowledge of the | |||
certificate allows a specific TPM to be identified. | certificate allows a specific TPM to be identified. | |||
+--rw tpms | +--rw tpms | |||
+--rw tpm* [name] | +--rw tpm* [name] | |||
+--rw name string | +--rw name string | |||
+--ro hardware-based? boolean | +--ro hardware-based boolean | |||
+--ro physical-index? int32 {hw:entity-mib}? | +--ro physical-index? int32 {hw:entity-mib}? | |||
+--ro path? string | +--ro path? string | |||
+--ro compute-node compute-node-ref {tpm:tpms}? | +--ro compute-node compute-node-ref {tpm:mtpm}? | |||
+--ro manufacturer? string | +--ro manufacturer? string | |||
+--rw firmware-version identityref | +--rw firmware-version identityref | |||
+--rw tpm12-hash-algo? identityref | +--rw tpm12-hash-algo? identityref | |||
+--rw tpm12-pcrs* pcr | +--rw tpm12-pcrs* pcr | |||
+--rw tpm20-pcr-bank* [tpm20-hash-algo] | +--rw tpm20-pcr-bank* [tpm20-hash-algo] | |||
| +--rw tpm20-hash-algo identityref | | +--rw tpm20-hash-algo identityref | |||
| +--rw pcr-index* tpm:pcr | | +--rw pcr-index* tpm:pcr | |||
+--ro status enumeration | +--ro status enumeration | |||
+--rw certificates | +--rw certificates | |||
+--rw certificate* [name] | +--rw certificate* [name] | |||
+--rw name string | +--rw name string | |||
+--rw keystore-ref? leafref | +--rw keystore-ref? leafref {ks:asymmetric-keys}? | |||
+--rw type? enumeration | +--rw type? enumeration | |||
container 'attester-supported-algos' - Identifies which TCG hash | container 'attester-supported-algos' - Identifies which TCG hash | |||
algorithms are available for use on the Attesting platform. This | algorithms are available for use on the Attesting platform. This | |||
allows an operator to limit algorithms available for use by RPCs to | allows an operator to limit algorithms available for use by RPCs to | |||
just a desired set from the universe of all allowed hash algorithms | just a desired set from the universe of all allowed hash algorithms | |||
by the TCG. | by the TCG. | |||
+--rw attester-supported-algos | +--rw attester-supported-algos | |||
+--rw tpm12-asymmetric-signing* identityref | +--rw tpm12-asymmetric-signing* identityref | |||
+--rw tpm12-hash* identityref | +--rw tpm12-hash* identityref | |||
+--rw tpm20-asymmetric-signing* identityref | +--rw tpm20-asymmetric-signing* identityref | |||
+--rw tpm20-hash* identityref | +--rw tpm20-hash* identityref | |||
container 'compute-nodes' - When there is more than one TPM | container 'compute-nodes' - When there is more than one TPM | |||
supported, this container maintains the set of information related to | supported, this container maintains the set of information related to | |||
the compute node associated with a specific TPM. This allows each | the compute node associated with a specific TPM. This allows each | |||
specific TPM to identify to which 'compute-node' it belongs. | specific TPM to identify to which 'compute-node' it belongs. | |||
+--rw compute-nodes {tpm:TPMs}? | +--rw compute-nodes {tpm:mtpm}? | |||
+--ro compute-node* [node-id] | +--ro compute-node* [node-id] | |||
+--ro node-id string | +--ro node-id string | |||
+--ro node-physical-index? int32 {hw:entity-mib}? | +--ro node-physical-index? int32 {hw:entity-mib}? | |||
+--ro node-name? string | +--ro node-name? string | |||
+--ro node-location? string | +--ro node-location? string | |||
2.1.1.6. YANG Module | 2.1.1.6. YANG Module | |||
<CODE BEGINS> file "ietf-tpm-remote-attestation@2022-02-16.yang" | <CODE BEGINS> file "ietf-tpm-remote-attestation@2022-03-15.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 tpm; | prefix tpm; | |||
import ietf-yang-types { | import ietf-yang-types { | |||
prefix yang; | prefix yang; | |||
} | } | |||
import ietf-hardware { | import ietf-hardware { | |||
prefix hw; | prefix hw; | |||
} | } | |||
skipping to change at page 11, line 12 ¶ | skipping to change at page 11, line 12 ¶ | |||
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 for full legal notices. | itself for full legal notices. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | |||
'MAY', and 'OPTIONAL' in this document are to be interpreted as | 'MAY', and 'OPTIONAL' in this document are to be interpreted as | |||
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | |||
they appear in all capitals, as shown here."; | they appear in all capitals, as shown here."; | |||
revision 2022-03-02 { | revision 2022-03-15 { | |||
description | description | |||
"Initial version"; | "Initial version"; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Challenge-Response-based Remote | "RFC XXXX: A YANG Data Model for Challenge-Response-based Remote | |||
Attestation Procedures using TPMs"; | Attestation Procedures using TPMs"; | |||
} | } | |||
/*****************/ | /*****************/ | |||
/* Features */ | /* Features */ | |||
/*****************/ | /*****************/ | |||
feature tpms { | feature mtpm { | |||
description | description | |||
"The device supports the remote attestation of multiple | "The device supports the remote attestation of multiple | |||
TPM based cryptoprocessors."; | TPM based cryptoprocessors."; | |||
} | } | |||
feature bios { | feature bios { | |||
description | description | |||
"The device supports the bios logs."; | "The device supports the bios logs."; | |||
reference | reference | |||
"bios-log: | "bios-log: | |||
https://trustedcomputinggroup.org/wp-content/uploads/ | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf | PC-ClientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf | |||
Section 9.4.5.2"; | Section 9.4.5.2"; | |||
} | } | |||
feature ima { | feature ima { | |||
description | description | |||
"The device supports Integrity Measurement Architecture logs. | "The device supports Integrity Measurement Architecture logs. | |||
Many variants of IMA logs exist in the deployment. Each encodes | Many variants of IMA logs exist in the deployment. Each encodes | |||
the log entry contents as the specific measurements which get | the log entry contents as the specific measurements which get | |||
hashed into a PCRs as Evidence. See the reference below for | hashed into a PCRs as Evidence. See the reference below for | |||
one example of such an encoding."; | one example of such an encoding."; | |||
reference | reference | |||
"ima-log: | "ima-log: | |||
https://www.trustedcomputinggroup.org/wp-content/uploads/ | https://www.trustedcomputinggroup.org/wp-content/uploads/ | |||
TCG_IWG_CEL_v1_r0p30_13feb2021.pdf Section 4.3"; | TCG_IWG_CEL_v1_r0p41_pub.pdf Section 4.3"; | |||
} | } | |||
feature netequip_boot { | feature netequip_boot { | |||
description | description | |||
"The device supports the netequip_boot logs."; | "The device supports the netequip_boot logs."; | |||
reference | reference | |||
"netequip-boot-log: | "netequip-boot-log: | |||
https://www.kernel.org/doc/Documentation/ABI/testing/ima_policy"; | https://www.kernel.org/doc/Documentation/ABI/testing/ima_policy"; | |||
} | } | |||
/*****************/ | /*****************/ | |||
/* Typedefs */ | /* Typedefs */ | |||
/*****************/ | /*****************/ | |||
typedef pcr { | typedef pcr { | |||
type uint8 { | type uint8 { | |||
range "0..31"; | range "0..31"; | |||
} | } | |||
description | description | |||
"Valid index number for a PCR. At this point 0-31 is viable."; | "Valid index number for a PCR. A {{TPM2.0}} compliant PCR index | |||
extends from 0-31. At this time a typical TPM would have no | ||||
more than 32 PCRS."; | ||||
} | } | |||
typedef compute-node-ref { | typedef compute-node-ref { | |||
type leafref { | type leafref { | |||
path "/tpm:rats-support-structures/tpm:compute-nodes" | path "/tpm:rats-support-structures/tpm:compute-nodes" | |||
+ "/tpm:compute-node/tpm:node-name"; | + "/tpm:compute-node/tpm:node-name"; | |||
} | } | |||
description | description | |||
"This type is used to reference a hardware node. It is quite | "This type is used to reference a hardware node. Note that an | |||
possible this leafref will eventually point to another YANG | implementer might include an alternative leafref pointing to a | |||
module's node."; | different YANG module node specifying hardware structures."; | |||
} | } | |||
typedef certificate-name-ref { | typedef certificate-name-ref { | |||
type leafref { | type leafref { | |||
path "/tpm:rats-support-structures/tpm:tpms/tpm:tpm" | path "/tpm:rats-support-structures/tpm:tpms/tpm:tpm" | |||
+ "/tpm:certificates/tpm:certificate/tpm:name"; | + "/tpm:certificates/tpm:certificate/tpm:name"; | |||
} | } | |||
description | description | |||
"A type which allows identification of a TPM based certificate."; | "A type which allows identification of a TPM based certificate."; | |||
} | } | |||
skipping to change at page 13, line 43 ¶ | skipping to change at page 13, line 44 ¶ | |||
leaf tpm20-hash-algo { | leaf tpm20-hash-algo { | |||
type identityref { | type identityref { | |||
base taa:hash; | base taa:hash; | |||
} | } | |||
must '/tpm:rats-support-structures/tpm:attester-supported-algos' | must '/tpm:rats-support-structures/tpm:attester-supported-algos' | |||
+ '/tpm:tpm20-hash' { | + '/tpm:tpm20-hash' { | |||
error-message "This platform does not support tpm20-hash-algo"; | error-message "This platform does not support tpm20-hash-algo"; | |||
} | } | |||
default "taa:TPM_ALG_SHA256"; | default "taa:TPM_ALG_SHA256"; | |||
description | description | |||
"The hash scheme that is used to hash a TPM1.2 PCR. This | "The hash scheme that is used to hash a TPM2.0 PCR. This | |||
must be one of those supported by a platform."; | must be one of those supported by a platform."; | |||
} | } | |||
} | } | |||
grouping tpm12-hash-algo { | grouping tpm12-hash-algo { | |||
description | description | |||
"The cryptographic algorithm used to hash the TPM1.2 PCRs."; | "The cryptographic algorithm used to hash the TPM1.2 PCRs."; | |||
leaf tpm12-hash-algo { | leaf tpm12-hash-algo { | |||
type identityref { | type identityref { | |||
base taa:hash; | base taa:hash; | |||
} | } | |||
must '/tpm:rats-support-structures/tpm:attester-supported-algos' | must '/tpm:rats-support-structures/tpm:attester-supported-algos' | |||
+ '/tpm:tpm12-hash' { | + '/tpm:tpm12-hash' { | |||
error-message "This platform does not support tpm12-hash-algo"; | error-message "This platform does not support tpm12-hash-algo"; | |||
} | } | |||
default "taa:TPM_ALG_SHA1"; | default "taa:TPM_ALG_SHA1"; | |||
description | description | |||
skipping to change at page 14, line 13 ¶ | skipping to change at page 14, line 16 ¶ | |||
type identityref { | type identityref { | |||
base taa:hash; | base taa:hash; | |||
} | } | |||
must '/tpm:rats-support-structures/tpm:attester-supported-algos' | must '/tpm:rats-support-structures/tpm:attester-supported-algos' | |||
+ '/tpm:tpm12-hash' { | + '/tpm:tpm12-hash' { | |||
error-message "This platform does not support tpm12-hash-algo"; | error-message "This platform does not support tpm12-hash-algo"; | |||
} | } | |||
default "taa:TPM_ALG_SHA1"; | default "taa:TPM_ALG_SHA1"; | |||
description | description | |||
"The hash scheme that is used to hash a TPM1.2 PCR. This | "The hash scheme that is used to hash a TPM1.2 PCR. This | |||
MUST be one of those supported by a platform. This assumes | MUST be one of those supported by a platform."; | |||
that an algorithm other than SHA1 can be supported on some | ||||
TPM1.2 cryptoprocessor variant."; | ||||
} | } | |||
} | } | |||
grouping nonce { | grouping nonce { | |||
description | description | |||
"A random number intended to be used once to show freshness | "A random number intended to guarantee freshness and for use | |||
and to allow the detection of replay attacks."; | as part of a replay-detection mechanism."; | |||
leaf nonce-value { | leaf nonce-value { | |||
type binary; | type binary; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"A cryptographically generated random number which should | "A cryptographically generated random number which should | |||
not be predictable prior to its issuance from a random | not be predictable prior to its issuance from a random | |||
number generation function. The random number MUST be | number generation function. The random number MUST be | |||
derived from an entropy source external to the Attester. | derived from an entropy source external to the Attester. | |||
Note that a nonce sent into a TPM will typically be 160 or 256 | Note that a nonce sent into a TPM will typically be 160 or 256 | |||
binary digits long. (This is 20 or 32 bytes.) So if fewer | binary digits long. (This is 20 or 32 bytes.) So if fewer | |||
binary are sent, this nonce object will be padded | binary digits are sent, this nonce object will be padded | |||
with leading zeros any in Quotes returned from the TPM. | with leading zeros within Quotes returned from the TPM. | |||
Additionally if more bytes are sent, the nonce will be trimmed | Additionally if more bytes are sent, the nonce will be trimmed | |||
to the most significant binary digits."; | to the most significant binary digits."; | |||
} | } | |||
} | } | |||
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, | ||||
detailed exposure via error msg should be avoided."; | ||||
leaf-list pcr-index { | leaf-list pcr-index { | |||
type pcr; | type pcr; | |||
description | description | |||
"The numbers/indexes of the PCRs. At the moment this is limited | "The numbers/indexes of the PCRs. In addition, any selection | |||
to 32. In addition, any selection of PCRs MUST verify that | of PCRs MUST verify that the set of PCRs requested are a | |||
the set of PCRs requested are a subset the set of PCRs | subset the set of PCRs exposed by in the leaf-list | |||
exposed by in the leaf-list /tpm:rats-support-structures | /tpm:rats-support-structures | |||
/tpm:tpms/tpm:tpm[name=current()]/tpm:tpm12-pcrs"; | /tpm:tpms/tpm:tpm[name=current()]/tpm:tpm12-pcrs"; | |||
} | } | |||
} | } | |||
grouping tpm20-pcr-selection { | grouping tpm20-pcr-selection { | |||
description | description | |||
"A Verifier can acquire one or more PCR values, which are hashed | "A Verifier can acquire one or more PCR values, which are hashed | |||
together in a TPM2B_DIGEST coming from the TPM2. The selection | together in a TPM2B_DIGEST coming from the TPM2. The selection | |||
list of desired PCRs and the Hash Algorithm is represented in | list of desired PCRs and the Hash Algorithm is represented in | |||
this grouping."; | this grouping."; | |||
skipping to change at page 16, line 21 ¶ | skipping to change at page 16, line 19 ¶ | |||
grouping tpm-name { | grouping tpm-name { | |||
description | description | |||
"A unique TPM on a device."; | "A unique TPM on a device."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"Unique system generated name for a TPM on a device."; | "Unique system generated name for a TPM on a device."; | |||
} | } | |||
} | } | |||
grouping tpm-name-selector { | ||||
description | ||||
"One or more TPM on a device."; | ||||
leaf-list 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 { | 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"; | |||
} | } | |||
} | } | |||
skipping to change at page 18, line 10 ¶ | skipping to change at page 17, line 42 ¶ | |||
"PCR values in each PCR bank. This might appear redundant with | "PCR values in each PCR bank. This might appear redundant with | |||
the TPM2B_DIGEST, but that digest is calculated across multiple | the TPM2B_DIGEST, but that digest is calculated across multiple | |||
PCRs. Having to verify across multiple PCRs does not | PCRs. Having to verify across multiple PCRs does not | |||
necessarily make it easy for a Verifier to appraise just the | necessarily make it easy for a Verifier to appraise just the | |||
minimum set of PCR information which has changed since the last | minimum set of PCR information which has changed since the last | |||
received TPM2B_DIGEST. Put another way, why should a Verifier | received TPM2B_DIGEST. Put another way, why should a Verifier | |||
reconstruct the proper value of all PCR Quotes when only a | reconstruct the proper value of all PCR Quotes when only a | |||
single PCR has changed? | single PCR has changed? | |||
To help this happen, if the Attester does know specific PCR | To help this happen, if the Attester does know specific PCR | |||
values, the Attester can provide these individual values via | values, the Attester can provide these individual values via | |||
'unsigned-pcr-values'. By comparing this information to the | 'unsigned-pcr-values'. By comparing this information to | |||
what has previously been validated, it is possible for a | what has previously been validated, it is possible for a | |||
Verifier to confirm the Attester's signature while eliminating | Verifier to confirm the Attester's signature while eliminating | |||
significant processing. There should never be a result where | ||||
an unsigned PCR value is actually that that within a quote. | significant processing. Note that there should never be a | |||
result where an unsigned PCR value differs from what may be | ||||
reconstructed from the within the PCR quote and the event logs. | ||||
If there is a difference, a signed result which has been | If there is a difference, a signed result which has been | |||
verified from retrieved logs is considered definitive."; | verified from retrieved logs is considered definitive."; | |||
uses tpm20-hash-algo; | uses tpm20-hash-algo; | |||
list pcr-values { | list pcr-values { | |||
key "pcr-index"; | key "pcr-index"; | |||
description | description | |||
"List of one PCR bank."; | "List of one PCR bank."; | |||
leaf pcr-index { | leaf pcr-index { | |||
type pcr; | type pcr; | |||
description | description | |||
skipping to change at page 19, line 4 ¶ | skipping to change at page 18, line 38 ¶ | |||
"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 attested_event_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 a specific instance of an event log entry | "Defines a specific instance of an event log entry | |||
and corresponding to the information used to | and corresponding to the information used to | |||
extend the PCR"; | extend the 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 which monotonically | |||
increases. The maximum event number should not be | ||||
reached, nor is wrapping back to an earlier number | ||||
supported."; | ||||
} | } | |||
leaf event-type { | leaf event-type { | |||
type uint32; | type uint32; | |||
description | description | |||
"BIOS Log Event Type: | "BIOS Log Event Type: | |||
https://trustedcomputinggroup.org/wp-content/uploads/ | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
TCG_PCClient_PFP_r1p05_v23_pub.pdf Section 10.4.1"; | TCG_PCClient_PFP_r1p05_v23_pub.pdf Section 10.4.1"; | |||
} | } | |||
leaf pcr-index { | leaf pcr-index { | |||
type pcr; | 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 | description | |||
"Hash of event data"; | "Hash of event data"; | |||
leaf hash-algo { | leaf hash-algo { | |||
skipping to change at page 19, line 50 ¶ | skipping to change at page 19, line 40 ¶ | |||
"The hash of the event data using the algorithm of the | "The hash of the event data using the algorithm of the | |||
'hash-algo' against 'event data'."; | 'hash-algo' against '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 binary; | |||
description | description | |||
"The event data size determined by event-size"; | "The event data size determined by event-size. For more | |||
see "; | ||||
} | } | |||
} | } | |||
grouping bios-event-log { | grouping bios-event-log { | |||
description | description | |||
"Measurement log created by the BIOS/UEFI."; | "Measurement log created by the BIOS/UEFI."; | |||
list bios-event-entry { | list bios-event-entry { | |||
key event-number; | key "event-number"; | |||
description | description | |||
"Ordered list of TCG described event log | "Ordered list of TCG described event log | |||
that extended the PCRs in the order they | that extended the PCRs in the order they | |||
were logged"; | were logged"; | |||
uses boot-event-log; | uses boot-event-log; | |||
} | } | |||
} | } | |||
grouping ima-event { | grouping ima-event { | |||
description | description | |||
"Defines an hash log extend event for IMA measurements"; | "Defines a hash log extend event for IMA measurements"; | |||
reference | reference | |||
"ima-log: | "ima-log: | |||
https://www.trustedcomputinggroup.org/wp-content/uploads/ | https://www.trustedcomputinggroup.org/wp-content/uploads/ | |||
TCG_IWG_CEL_v1_r0p30_13feb2021.pdf Section 4.3"; | TCG_IWG_CEL_v1_r0p41_pub.pdf Section 4.3"; | |||
leaf event-number { | leaf event-number { | |||
type uint64; | type uint64; | |||
description | description | |||
"Unique number for this event for sequencing"; | "Unique event number of this event which monotonically | |||
increases. The maximum event number should not be | ||||
reached, nor is wrapping back to an earlier number | ||||
supported."; | ||||
} | } | |||
leaf ima-template { | leaf ima-template { | |||
type string; | type string; | |||
description | description | |||
"Name of the template used for event logs | "Name of the template used for event logs | |||
for e.g. ima, ima-ng, ima-sig"; | for e.g. ima, ima-ng, ima-sig"; | |||
} | } | |||
leaf filename-hint { | leaf filename-hint { | |||
type string; | type string; | |||
description | description | |||
"File that was measured"; | "File that was measured"; | |||
} | } | |||
leaf filedata-hash { | leaf filedata-hash { | |||
type binary; | type binary; | |||
description | description | |||
"Hash of filedata"; | "Hash of filedata as updated based upon the | |||
filedata-hash-algorithm"; | ||||
} | } | |||
leaf filedata-hash-algorithm { | leaf filedata-hash-algorithm { | |||
type string; | type string; | |||
description | description | |||
"Algorithm used for filedata-hash"; | "Algorithm used for filedata-hash"; | |||
} | } | |||
leaf template-hash-algorithm { | leaf template-hash-algorithm { | |||
type string; | type string; | |||
description | description | |||
"Algorithm used for template-hash"; | "Algorithm used for template-hash"; | |||
skipping to change at page 21, line 22 ¶ | skipping to change at page 21, line 19 ¶ | |||
"hash(filedata-hash, filename-hint)"; | "hash(filedata-hash, filename-hint)"; | |||
} | } | |||
leaf pcr-index { | leaf pcr-index { | |||
type pcr; | 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"; | "Digital file signature which provides a | |||
fingerprint for the file being measured."; | ||||
} | } | |||
} | } | |||
grouping ima-event-log { | grouping ima-event-log { | |||
description | description | |||
"Measurement log created by IMA."; | "Measurement log created by IMA."; | |||
list ima-event-entry { | list ima-event-entry { | |||
key event-number; | key "event-number"; | |||
description | description | |||
"Ordered list of ima event logs by event-number"; | "Ordered list of ima event logs by event-number"; | |||
uses ima-event; | uses ima-event; | |||
} | } | |||
} | } | |||
grouping network-equipment-boot-event-log { | grouping network-equipment-boot-event-log { | |||
description | description | |||
"Measurement log created by Network Equipment Boot. The Network | "Measurement log created by Network Equipment Boot. The Network | |||
Equipment Boot format is identical to the IMA format. In | Equipment Boot format is identical to the IMA format. In | |||
contrast to the IMA log, the Network Equipment Boot log | contrast to the IMA log, the Network Equipment Boot log | |||
includes every measurable event from an Attester, including | includes every measurable event from an Attester, including | |||
the boot stages of BIOS, Bootloader, etc. In essence, the scope | the boot stages of BIOS, Bootloader, etc. In essence, the scope | |||
of events represented in this format combines the scope of BIOS | of events represented in this format combines the scope of BIOS | |||
events and IMA events."; | events and IMA events."; | |||
list boot-event-entry { | list boot-event-entry { | |||
key event-number; | key "event-number"; | |||
description | description | |||
"Ordered list of Network Equipment Boot event logs | "Ordered list of Network Equipment Boot event logs | |||
by event-number, using the IMA event format."; | by event-number, using the IMA event format."; | |||
uses ima-event; | uses ima-event; | |||
} | } | |||
} | } | |||
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 attested_event_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 { | |||
if-feature "bios"; | if-feature "bios"; | |||
skipping to change at page 23, line 16 ¶ | skipping to change at page 23, line 15 ¶ | |||
input { | input { | |||
container tpm12-attestation-challenge { | container tpm12-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; | |||
leaf-list certificate-name { | leaf-list certificate-name { | |||
if-feature "tpm:tpms"; | if-feature "tpm:mtpm"; | |||
type certificate-name-ref; | type certificate-name-ref; | |||
must "/tpm:rats-support-structures/tpm:tpms" | must "/tpm:rats-support-structures/tpm:tpms" | |||
+ "/tpm:tpm[tpm:firmware-version='taa:tpm12']" | + "/tpm:tpm[tpm:firmware-version='taa:tpm12']" | |||
+ "/tpm:certificates/" | + "/tpm:certificates/" | |||
+ "/tpm:certificate[name=current()]" { | + "/tpm:certificate[name=current()]" { | |||
error-message "Not an available TPM1.2 AIK certificate."; | error-message "Not an available TPM1.2 AIK certificate."; | |||
} | } | |||
description | description | |||
"When populated, the RPC will only get a Quote for the | "When populated, the RPC will only get a Quote for the | |||
TPMs associated with these certificate(s)."; | TPMs associated with these certificate(s)."; | |||
skipping to change at page 23, line 51 ¶ | skipping to change at page 23, line 50 ¶ | |||
uses tpm12-attestation; | uses tpm12-attestation; | |||
} | } | |||
} | } | |||
} | } | |||
rpc tpm20-challenge-response-attestation { | rpc tpm20-challenge-response-attestation { | |||
if-feature "taa:tpm20"; | if-feature "taa: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 is used to refer to dedicated TPM in composite devices, | |||
e.g. smart NICs, is still a TODO."; | e.g. smart NICs, is not covered."; | |||
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; | |||
uses tpm20-pcr-selection; | uses tpm20-pcr-selection; | |||
leaf-list certificate-name { | leaf-list certificate-name { | |||
if-feature "tpm:tpms"; | if-feature "tpm:mtpm"; | |||
type certificate-name-ref; | type certificate-name-ref; | |||
must "/tpm:rats-support-structures/tpm:tpms" | must "/tpm:rats-support-structures/tpm:tpms" | |||
+ "/tpm:tpm[tpm:firmware-version='taa:tpm20']" | + "/tpm:tpm[tpm:firmware-version='taa:tpm20']" | |||
+ "/tpm:certificates/" | + "/tpm:certificates/" | |||
+ "/tpm:certificate[name=current()]" { | + "/tpm:certificate[name=current()]" { | |||
error-message "Not an available TPM2.0 AIK certificate."; | error-message "Not an available TPM2.0 AIK certificate."; | |||
} | } | |||
description | description | |||
"When populated, the RPC will only get a Quote for the | "When populated, the RPC will only get a Quote for the | |||
TPMs associated with the certificates."; | TPMs associated with the certificates."; | |||
} | } | |||
} | } | |||
} | } | |||
output { | output { | |||
list tpm20-attestation-response { | list tpm20-attestation-response { | |||
unique "certificate-name"; | unique "certificate-name"; | |||
description | description | |||
"The binary output of TPM2b_Quote in one TPM chip of the | "The binary output of TPM2b_Quote from one TPM 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 certificate-name-ref { | uses certificate-name-ref { | |||
description | description | |||
"Certificate associated with this tpm20-attestation."; | "Certificate associated with this tpm20-attestation."; | |||
} | } | |||
uses tpm20-attestation; | uses tpm20-attestation; | |||
} | } | |||
} | } | |||
} | } | |||
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 { | |||
uses log-identifier; | ||||
list log-selector { | list log-selector { | |||
description | description | |||
"Selection of log entries to be reported."; | "Only log entries which meet all the selection criteria provided | |||
uses tpm-name-selector; | are to be returned by the RPC output."; | |||
leaf-list name { | ||||
type string; | ||||
description | ||||
"Name of one or more unique TPMs on a device. If this object | ||||
exists, a selection should pull only the objects related to | ||||
these TPM(s). If it does not exist, all qualifying TPMs that | ||||
are 'hardware-based' equals true on the device are selected."; | ||||
} | ||||
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 a log event which matches 1:1 with a | |||
unique event record contained within the log. Log | unique event record contained within the log. Log | |||
entries subsequent to this will be passed to the | entries after this will be passed to the | |||
requester. Note: if log entry values are not unique, | requester. Note: if log entry values are not unique, | |||
this MUST return an error."; | this MUST return an error."; | |||
} | } | |||
} | } | |||
case index { | case index { | |||
description | description | |||
"Numeric index of the last log entry retrieved, or | "Numeric index of the last log entry retrieved, or | |||
zero."; | zero."; | |||
leaf last-index-number { | leaf last-index-number { | |||
type uint64; | type uint64; | |||
description | description | |||
"The last numeric index number of a log entry. | "The last numeric index number of a log entry. | |||
Zero means to start at the beginning of the log. | Zero means to start at the beginning of the log. | |||
Entries subsequent to this will be passed to the | Entries after this will be passed to the | |||
requester."; | requester."; | |||
} | } | |||
} | } | |||
case timestamp { | case timestamp { | |||
leaf timestamp { | leaf timestamp { | |||
type yang:date-and-time; | type yang:date-and-time; | |||
description | description | |||
"Timestamp from which to start the extraction. The | "Timestamp from which to start the extraction. The | |||
next log entry subsequent to this timestamp is to | next log entry after this timestamp is to | |||
be sent."; | be sent."; | |||
} | } | |||
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 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 { | |||
unique "name"; | unique "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"; | |||
skipping to change at page 26, line 40 ¶ | skipping to change at page 26, line 47 ¶ | |||
/**************************************/ | /**************************************/ | |||
/* Config & Oper accessible nodes */ | /* Config & Oper accessible nodes */ | |||
/**************************************/ | /**************************************/ | |||
container rats-support-structures { | container rats-support-structures { | |||
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."; | |||
container compute-nodes { | container compute-nodes { | |||
if-feature "tpm:tpms"; | if-feature "tpm:mtpm"; | |||
description | description | |||
"Holds the set device subsystems/components in this composite | "Holds the set of device subsystems/components in this | |||
device that support TPM operations."; | composite device that support TPM operations."; | |||
list compute-node { | list compute-node { | |||
key "node-id"; | key "node-id"; | |||
unique "node-name"; | ||||
config false; | config false; | |||
min-elements 2; | min-elements 2; | |||
description | description | |||
"A component within this composite device which | "A component within this composite device which | |||
supports TPM operations."; | supports TPM operations."; | |||
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."; | |||
} | } | |||
skipping to change at page 27, line 44 ¶ | skipping to change at page 28, line 4 ¶ | |||
list tpm { | list tpm { | |||
key "name"; | key "name"; | |||
unique "path"; | unique "path"; | |||
description | description | |||
"A list of TPMs in this composite device that RATS | "A list of TPMs in this composite device that RATS | |||
can be conducted with."; | can be conducted with."; | |||
uses tpm-name; | uses tpm-name; | |||
leaf hardware-based { | leaf hardware-based { | |||
type boolean; | type boolean; | |||
config false; | config false; | |||
mandatory true; | ||||
description | description | |||
"Answers the question: is this TPM is a hardware based | "System generated indication of whether this is a | |||
TPM?"; | hardware based TPM."; | |||
} | } | |||
leaf physical-index { | leaf physical-index { | |||
if-feature "hw:entity-mib"; | if-feature "hw:entity-mib"; | |||
type int32 { | type int32 { | |||
range "1..2147483647"; | range "1..2147483647"; | |||
} | } | |||
config false; | config false; | |||
description | description | |||
"The entPhysicalIndex for the TPM."; | "The entPhysicalIndex for the TPM."; | |||
reference | reference | |||
"RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; | "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; | |||
} | } | |||
leaf path { | leaf path { | |||
type string; | type string; | |||
config false; | config false; | |||
skipping to change at page 28, line 16 ¶ | skipping to change at page 28, line 24 ¶ | |||
config false; | config false; | |||
description | description | |||
"The entPhysicalIndex for the TPM."; | "The entPhysicalIndex for the TPM."; | |||
reference | reference | |||
"RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; | "RFC 6933: Entity MIB (Version 4) - entPhysicalIndex"; | |||
} | } | |||
leaf path { | leaf path { | |||
type string; | type string; | |||
config false; | config false; | |||
description | description | |||
"Path to a unique TPM on a device. This can change across | "Device path to a unique TPM on a device. This can change | |||
reboots."; | across reboots."; | |||
} | } | |||
leaf compute-node { | leaf compute-node { | |||
if-feature "tpm:tpms"; | if-feature "tpm:mtpm"; | |||
type compute-node-ref; | type compute-node-ref; | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"Indicates the compute node measured by this TPM."; | "Indicates the compute node measured by this TPM."; | |||
} | } | |||
leaf manufacturer { | leaf manufacturer { | |||
type string; | type string; | |||
config false; | config false; | |||
description | description | |||
skipping to change at page 29, line 28 ¶ | skipping to change at page 29, line 37 ¶ | |||
"TPM2.0-Structures: | "TPM2.0-Structures: | |||
https://www.trustedcomputinggroup.org/wp-content/uploads/ | https://www.trustedcomputinggroup.org/wp-content/uploads/ | |||
TPM-Rev-2.0-Part-2-Structures-01.38.pdf Section 10.9.7"; | TPM-Rev-2.0-Part-2-Structures-01.38.pdf Section 10.9.7"; | |||
leaf tpm20-hash-algo { | leaf tpm20-hash-algo { | |||
type identityref { | type identityref { | |||
base taa:hash; | base taa:hash; | |||
} | } | |||
must '/tpm:rats-support-structures' | must '/tpm:rats-support-structures' | |||
+ '/tpm:attester-supported-algos' | + '/tpm:attester-supported-algos' | |||
+ '/tpm:tpm20-hash' { | + '/tpm:tpm20-hash' { | |||
error-message | error-message "This platform does not support tpm20-hash-algo"; | |||
"This platform does not support tpm20-hash-algo"; | ||||
} | } | |||
description | description | |||
"The hash scheme actively being used to hash a | "The hash scheme actively being used to hash a | |||
one or more TPM2.0 PCRs."; | one or more TPM2.0 PCRs."; | |||
} | } | |||
leaf-list pcr-index { | leaf-list pcr-index { | |||
type tpm:pcr; | type tpm:pcr; | |||
description | description | |||
"Defines what TPM2 PCRs are available to be extracted."; | "Defines what TPM2 PCRs are available to be extracted."; | |||
} | } | |||
} | } | |||
leaf status { | leaf status { | |||
type enumeration { | type enumeration { | |||
enum operational { | enum operational { | |||
value 0; | value 0; | |||
description | description | |||
"The TPM currently is currently running normally and | "The TPM currently is running normally and | |||
is ready to accept and process TPM quotes."; | is ready to accept and process TPM quotes."; | |||
reference | reference | |||
"TPM2.0-Arch: | "TPM2.0-Arch: | |||
TPM-Rev-2.0-Part-1-Architecture-01.07-2014-03-13.pdf | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
TCG_TPM2_r1p59_Part1_Architecture_pub.pdf | ||||
Section 12"; | Section 12"; | |||
} | } | |||
enum non-operational { | enum non-operational { | |||
value 1; | value 1; | |||
description | description | |||
"TPM is in a state such as startup or shutdown which | "TPM is in a state such as startup or shutdown which | |||
precludes the processing of TPM quotes."; | precludes the processing of TPM quotes."; | |||
} | } | |||
} | } | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
skipping to change at page 30, line 21 ¶ | skipping to change at page 30, line 29 ¶ | |||
} | } | |||
} | } | |||
config false; | config false; | |||
mandatory true; | mandatory true; | |||
description | description | |||
"TPM chip self-test status."; | "TPM chip self-test status."; | |||
} | } | |||
container certificates { | container certificates { | |||
description | description | |||
"The TPM's certificates, including EK certificates | "The TPM's certificates, including EK certificates | |||
and AK certificates."; | and Attestation Key certificates."; | |||
list certificate { | list certificate { | |||
key "name"; | key "name"; | |||
description | description | |||
"Three types of certificates can be accessed via | "Three types of certificates can be accessed via | |||
this statement, including Initial Attestation | this statement, including Initial Attestation | |||
Key Certificate, Local Attestation Key Certificate or | Key Certificate, Local Attestation Key Certificate or | |||
Endorsement Key Certificate."; | Endorsement Key Certificate."; | |||
leaf name { | leaf name { | |||
type string; | type string; | |||
description | description | |||
"An arbitrary name uniquely identifying a certificate | "An arbitrary name uniquely identifying a certificate | |||
associated within key within a TPM."; | associated within key within a TPM."; | |||
} | } | |||
leaf keystore-ref { | leaf keystore-ref { | |||
if-feature "ks:asymmetric-keys"; | ||||
type leafref { | type leafref { | |||
path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key" | path "/ks:keystore/ks:asymmetric-keys/ks:asymmetric-key" | |||
+ "/ks:certificates/ks:certificate/ks:name"; | + "/ks:name"; | |||
} | } | |||
description | description | |||
"A reference to a specific certificate of an | "A reference to a specific certificate of an | |||
asymmetric key in the Keystore."; | asymmetric key in the Keystore."; | |||
} | } | |||
leaf type { | leaf type { | |||
type enumeration { | type enumeration { | |||
enum endorsement-certificate { | enum endorsement-certificate { | |||
value 0; | value 0; | |||
description | description | |||
"Endorsement Key (EK) Certificate type."; | "Endorsement Key (EK) Certificate type."; | |||
reference | reference | |||
"TPM2.0-Key: | "TPM2.0-Key: | |||
https://trustedcomputinggroup.org/wp-content/ | https://trustedcomputinggroup.org/wp-content/ | |||
skipping to change at page 31, line 4 ¶ | skipping to change at page 31, line 15 ¶ | |||
} | } | |||
leaf type { | leaf type { | |||
type enumeration { | type enumeration { | |||
enum endorsement-certificate { | enum endorsement-certificate { | |||
value 0; | value 0; | |||
description | description | |||
"Endorsement Key (EK) Certificate type."; | "Endorsement Key (EK) Certificate type."; | |||
reference | reference | |||
"TPM2.0-Key: | "TPM2.0-Key: | |||
https://trustedcomputinggroup.org/wp-content/ | https://trustedcomputinggroup.org/wp-content/ | |||
uploads/TCG_IWG_DevID_v1r2_02dec2020.pdf | uploads/TPM-2p0-Keys-for-Device-Identity- | |||
and-Attestation_v1_r12_pub10082021.pdf | ||||
Section 3.11"; | Section 3.11"; | |||
} | } | |||
enum initial-attestation-certificate { | enum initial-attestation-certificate { | |||
value 1; | value 1; | |||
description | description | |||
"Initial Attestation key (IAK) Certificate type."; | "Initial Attestation key (IAK) Certificate type."; | |||
reference | reference | |||
"TPM2.0-Key: | "TPM2.0-Key: | |||
https://trustedcomputinggroup.org/wp-content/ | https://trustedcomputinggroup.org/wp-content/ | |||
uploads/TCG_IWG_DevID_v1r2_02dec2020.pdf | uploads/TPM-2p0-Keys-for-Device-Identity- | |||
and-Attestation_v1_r12_pub10082021.pdf | ||||
Section 3.2"; | Section 3.2"; | |||
} | } | |||
enum local-attestation-certificate { | enum local-attestation-certificate { | |||
value 2; | value 2; | |||
description | description | |||
"Local Attestation Key (LAK) Certificate type."; | "Local Attestation Key (LAK) Certificate type."; | |||
reference | reference | |||
"TPM2.0-Key: | "TPM2.0-Key: | |||
https://trustedcomputinggroup.org/wp-content/ | https://trustedcomputinggroup.org/wp-content/ | |||
uploads/TCG_IWG_DevID_v1r2_02dec2020.pdf | uploads/TPM-2p0-Keys-for-Device-Identity- | |||
and-Attestation_v1_r12_pub10082021.pdf | ||||
Section 3.2"; | Section 3.2"; | |||
} | } | |||
} | } | |||
description | description | |||
"Function supported by this certificate from within the | "Function supported by this certificate from within the | |||
TPM."; | TPM."; | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
skipping to change at page 32, line 42 ¶ | skipping to change at page 33, line 11 ¶ | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 1 | Figure 1 | |||
2.1.2. 'ietf-tcg-algs' | 2.1.2. 'ietf-tcg-algs' | |||
This document has encoded the TCG Algorithm definitions of | This document has encoded the TCG Algorithm definitions of | |||
[TCG-Algos], revision 1.32. By including this full table as a | [TCG-Algos], revision 1.32. By including this full table as a | |||
separate YANG file within this document, it is possible for other | separate YANG file within this document, it is possible for other | |||
YANG models to leverage the contents of this model. Specific | YANG models to leverage the contents of this model. Specific | |||
references to [RFC7748], [ISO-IEC-9797-1], [ISO-IEC-9797-2], | references to [RFC2104], [RFC8017], [ISO-IEC-9797-1], | |||
[ISO-IEC-10116], [ISO-IEC-10118-3], [ISO-IEC-14888-3], | [ISO-IEC-9797-2], [ISO-IEC-10116], [ISO-IEC-10118-3], | |||
[ISO-IEC-15946-1], [ISO-IEC-18033-3], [IEEE-Std-1363-2000], | [ISO-IEC-14888-3], [ISO-IEC-15946-1], [ISO-IEC-18033-3], | |||
[IEEE-Std-1363a-2004], [NIST-PUB-FIPS-202], [NIST-SP800-38C], | [IEEE-Std-1363-2000], [IEEE-Std-1363a-2004], [NIST-PUB-FIPS-202], | |||
[NIST-SP800-38D], [NIST-SP800-38F], [NIST-SP800-56A], | [NIST-SP800-38C], [NIST-SP800-38D], [NIST-SP800-38F], | |||
[NIST-SP800-108], [bios-log], [ima-log], and [netequip-boot-log] | [NIST-SP800-56A], [NIST-SP800-108], [bios-log], [ima-log], as well as | |||
exist within the YANG Model. | Appendix A and Appendix B exist within the YANG Model. | |||
2.1.2.1. Features | 2.1.2.1. Features | |||
There are two types of features supported: 'TPM12' and 'TPM20'. | There are two types of features supported: 'TPM12' and 'TPM20'. | |||
Support for either of these features indicates that a cryptoprocessor | Support for either of these features indicates that a cryptoprocessor | |||
supporting the corresponding type of TCG TPM API is present on an | supporting the corresponding type of TCG TPM API is present on an | |||
Attester. Most commonly, only one type of cryptoprocessor will be | Attester. Most commonly, only one type of cryptoprocessor will be | |||
available on an Attester. | available on an Attester. | |||
2.1.2.2. Identities | 2.1.2.2. Identities | |||
There are three types of identities in this model: | There are three types of identities in this model: | |||
1. Cryptographic functions supported by a TPM algorithm; these | 1. Cryptographic functions supported by a TPM algorithm; these | |||
include: 'asymmetric', 'symmetric', 'hash', 'signing', | include: 'asymmetric', 'symmetric', 'hash', 'signing', | |||
'anonymous_signing', 'encryption_mode', 'method', and | 'anonymous_signing', 'encryption_mode', 'method', and | |||
'object_type'. The definitions of each of these are in Table 2 | 'object_type'. The definitions of each of these are in Table 2 | |||
of [TCG-Algos]. | of [TCG-Algos]. | |||
2. API specifications for TPMs: 'tpm12' and 'tpm20' | 2. API specifications for TPM types: 'tpm12' and 'tpm20' | |||
3. Specific algorithm types: Each algorithm type defines what | 3. Specific algorithm types: Each algorithm type defines what | |||
cryptographic functions may be supported, and on which type of | cryptographic functions may be supported, and on which type of | |||
API specification. It is not required that an implementation of | API specification. It is not required that an implementation of | |||
a specific TPM will support all algorithm types. The contents of | a specific TPM will support all algorithm types. The contents of | |||
each specific algorithm mirrors what is in Table 3 of | each specific algorithm mirrors what is in Table 3 of | |||
[TCG-Algos]. | [TCG-Algos]. | |||
2.1.2.3. YANG Module | 2.1.2.3. YANG Module | |||
<CODE BEGINS> file "ietf-tcg-algs@2022-03-09.yang" | ||||
<CODE BEGINS> file "ietf-tcg-algs@2022-02-16.yang" | ||||
module ietf-tcg-algs { | module ietf-tcg-algs { | |||
yang-version 1.1; | yang-version 1.1; | |||
namespace "urn:ietf:params:xml:ns:yang:ietf-tcg-algs"; | namespace "urn:ietf:params:xml:ns:yang:ietf-tcg-algs"; | |||
prefix taa; | prefix taa; | |||
organization | organization | |||
"IETF RATS Working Group"; | "IETF RATS (Remote ATtestation procedureS) Working Group"; | |||
contact | contact | |||
"WG Web: <https://datatracker.ietf.org/wg/rats/> | "WG Web: <https://datatracker.ietf.org/wg/rats/> | |||
WG List: <mailto:rats@ietf.org> | WG List: <mailto:rats@ietf.org> | |||
Author: Eric Voit <mailto:evoit@cisco.com>"; | Author: Eric Voit <mailto:evoit@cisco.com>"; | |||
description | description | |||
"This module defines a identities for asymmetric algorithms. | "This module defines identities for asymmetric algorithms. | |||
Copyright (c) 2022 IETF Trust and the persons identified | Copyright (c) 2022 IETF Trust and the persons identified | |||
as authors of the code. All rights reserved. | as 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 without modification, is permitted pursuant to, and | or without modification, is permitted pursuant to, and | |||
subject to the license terms contained in, the Simplified | subject to the license terms contained in, the Simplified | |||
BSD License set forth in Section 4.c of the IETF Trust's | BSD License set forth in Section 4.c of the IETF Trust's | |||
Legal Provisions Relating to IETF Documents | 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 for full legal notices. | itself for full legal notices. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
skipping to change at page 34, line 21 ¶ | skipping to change at page 34, line 37 ¶ | |||
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 for full legal notices. | itself for full legal notices. | |||
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', | |||
'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', | |||
'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | 'NOT RECOMMENDED', 'MAY', and 'OPTIONAL' in this document | |||
are to be interpreted as described in BCP 14 (RFC 2119) | are to be interpreted as described in BCP 14 (RFC 2119) | |||
(RFC 8174) when, and only when, they appear in all | (RFC 8174) when, and only when, they appear in all | |||
capitals, as shown here."; | capitals, as shown here."; | |||
revision 2022-02-16 { | revision 2022-03-09 { | |||
description | description | |||
"Initial version"; | "Initial version"; | |||
reference | reference | |||
"RFC XXXX: A YANG Data Model for Challenge-Response-based Remote | "RFC XXXX: A YANG Data Model for Challenge-Response-based Remote | |||
Attestation Procedures using TPMs"; | Attestation Procedures using TPMs"; | |||
} | } | |||
/*****************/ | /*****************/ | |||
/* Features */ | /* Features */ | |||
/*****************/ | /*****************/ | |||
skipping to change at page 34, line 48 ¶ | skipping to change at page 35, line 16 ¶ | |||
https://trustedcomputinggroup.org/wp-content/uploads/TPM- | https://trustedcomputinggroup.org/wp-content/uploads/TPM- | |||
Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf"; | Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf"; | |||
} | } | |||
feature tpm20 { | feature tpm20 { | |||
description | description | |||
"This feature indicates algorithm support for the TPM 2.0 API | "This feature indicates algorithm support for the TPM 2.0 API | |||
as per Section 11.4 of Trusted Platform Module Library | as per Section 11.4 of Trusted Platform Module Library | |||
Part 1: Architecture. See TPM2.0-Arch: | Part 1: Architecture. See TPM2.0-Arch: | |||
https://trustedcomputinggroup.org/wp-content/uploads/ | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
TPM-Rev-2.0-Part-1-Architecture-01.07-2014-03-13.pdf"; | TCG_TPM2_r1p59_Part1_Architecture_pub.pdf"; | |||
} | } | |||
/*****************/ | /*****************/ | |||
/* Identities */ | /* Identities */ | |||
/*****************/ | /*****************/ | |||
identity asymmetric { | identity asymmetric { | |||
description | description | |||
"A TCG recognized asymmetric algorithm with a public and | "A TCG recognized asymmetric algorithm with a public and | |||
private key."; | private key."; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 2, | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 2, | |||
http://trustedcomputinggroup.org/resource/tcg-algorithm-registry/ | https://trustedcomputinggroup.org/resource/ | |||
TCG-_Algorithm_Registry_r1p32_pub"; | tcg-algorithm-registry/TCG-_Algorithm_Registry_r1p32_pub"; | |||
} | } | |||
identity symmetric { | identity symmetric { | |||
description | description | |||
"A TCG recognized symmetric algorithm with only a private key."; | "A TCG recognized symmetric algorithm with only a private key."; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 2"; | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 2"; | |||
} | } | |||
identity hash { | identity hash { | |||
skipping to change at page 36, line 32 ¶ | skipping to change at page 36, line 49 ¶ | |||
identity tpm12 { | identity tpm12 { | |||
if-feature "tpm12"; | if-feature "tpm12"; | |||
base cryptoprocessor; | base cryptoprocessor; | |||
description | description | |||
"Supportable by a TPM1.2."; | "Supportable by a TPM1.2."; | |||
reference | reference | |||
"TPM1.2-Structures: | "TPM1.2-Structures: | |||
https://trustedcomputinggroup.org/wp-content/uploads/ | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf | TPM-Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf | |||
TPM_ALGORITHM_ID values, page 18"; | TPM_ALGORITHM_ID values, Section 4.8"; | |||
} | } | |||
identity tpm20 { | identity tpm20 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base cryptoprocessor; | base cryptoprocessor; | |||
description | description | |||
"Supportable by a TPM2."; | "Supportable by a TPM2."; | |||
reference | reference | |||
"TPM2.0-Structures: | "TPM2.0-Structures: | |||
https://trustedcomputinggroup.org/wp-content/uploads/ | https://trustedcomputinggroup.org/wp-content/uploads/ | |||
TPM-Rev-2.0-Part-2-Structures-01.38.pdf | TPM-Rev-2.0-Part-2-Structures-01.38.pdf"; | |||
The TCG Algorithm Registry. Table 9"; | ||||
} | } | |||
identity TPM_ALG_RSA { | identity TPM_ALG_RSA { | |||
if-feature "tpm12 or tpm20"; | if-feature "tpm12 or tpm20"; | |||
base tpm12; | base tpm12; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base object_type; | base object_type; | |||
description | description | |||
"RSA algorithm"; | "RSA algorithm"; | |||
skipping to change at page 37, line 32 ¶ | skipping to change at page 37, line 48 ¶ | |||
ISO/IEC 18033-3. ALG_ID: 0x0003"; | ISO/IEC 18033-3. ALG_ID: 0x0003"; | |||
} | } | |||
identity TPM_ALG_SHA1 { | identity TPM_ALG_SHA1 { | |||
if-feature "tpm12 or tpm20"; | if-feature "tpm12 or tpm20"; | |||
base hash; | base hash; | |||
base tpm12; | base tpm12; | |||
base tpm20; | base tpm20; | |||
description | description | |||
"SHA1 algorithm - Deprecated due to insufficient cryptographic | "SHA1 algorithm - Deprecated due to insufficient cryptographic | |||
protection. However it is still useful for hash algorithms | protection. However, it is still useful for hash algorithms | |||
where protection is not required."; | where protection is not required."; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10118-3. ALG_ID: 0x0004"; | ISO/IEC 10118-3. ALG_ID: 0x0004"; | |||
} | } | |||
identity TPM_ALG_HMAC { | identity TPM_ALG_HMAC { | |||
if-feature "tpm12 or tpm20"; | if-feature "tpm12 or tpm20"; | |||
base tpm12; | base tpm12; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
base signing; | base signing; | |||
description | description | |||
"Hash Message Authentication Code (HMAC) algorithm"; | "Hash Message Authentication Code (HMAC) algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | |||
ISO/IEC 9797-2 and RFC2014. ALG_ID: 0x0005"; | ISO/IEC 9797-2 and RFC2104. ALG_ID: 0x0005"; | |||
} | } | |||
identity TPM_ALG_AES { | ||||
identity TPM_ALG_AES { | ||||
if-feature "tpm12"; | if-feature "tpm12"; | |||
base tpm12; | base tpm12; | |||
base symmetric; | base symmetric; | |||
description | description | |||
"The AES algorithm with various key sizes"; | "The AES algorithm with various key sizes"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | |||
ISO/IEC 18033-3. ALG_ID: 0x0006"; | ISO/IEC 18033-3. ALG_ID: 0x0006"; | |||
} | } | |||
skipping to change at page 38, line 41 ¶ | skipping to change at page 39, line 9 ¶ | |||
base hash; | base hash; | |||
base object_type; | base object_type; | |||
description | description | |||
"An encryption or signing algorithm using a keyed hash. These | "An encryption or signing algorithm using a keyed hash. These | |||
may use XOR for encryption or an HMAC for signing and may | may use XOR for encryption or an HMAC for signing and may | |||
also refer to a data object that is neither signing nor | also refer to a data object that is neither signing nor | |||
encrypting."; | encrypting."; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3, | |||
ALG_ID: 0x0008"; | ALG_ID: 0x0008"; | |||
} | } | |||
identity TPM_ALG_XOR { | identity TPM_ALG_XOR { | |||
if-feature "tpm12 or tpm20"; | if-feature "tpm12 or tpm20"; | |||
base tpm12; | base tpm12; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
base symmetric; | base symmetric; | |||
description | description | |||
"The XOR encryption algorithm."; | "The XOR encryption algorithm."; | |||
reference | reference | |||
skipping to change at page 39, line 19 ¶ | skipping to change at page 39, line 35 ¶ | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
description | description | |||
"The SHA 256 algorithm"; | "The SHA 256 algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10118-3. ALG_ID: 0x000B"; | ISO/IEC 10118-3. ALG_ID: 0x000B"; | |||
} | } | |||
identity TPM_ALG_SHA384 { | identity TPM_ALG_SHA384 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
description | description | |||
"The SHA 384 algorithm"; | "The SHA 384 algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10118-3. ALG_ID: 0x000C"; | ISO/IEC 10118-3. ALG_ID: 0x000C"; | |||
} | } | |||
identity TPM_ALG_SHA512 { | identity TPM_ALG_SHA512 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
description | description | |||
"The SHA 512 algorithm"; | "The SHA 512 algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10118-3. ALG_ID: 0x000D"; | ISO/IEC 10118-3. ALG_ID: 0x000D"; | |||
} | } | |||
identity TPM_ALG_NULL { | identity TPM_ALG_NULL { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
description | description | |||
"NULL algorithm"; | "NULL algorithm"; | |||
skipping to change at page 40, line 22 ¶ | skipping to change at page 40, line 39 ¶ | |||
} | } | |||
identity TPM_ALG_SM4 { | identity TPM_ALG_SM4 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
description | description | |||
"SM4 symmetric block cipher"; | "SM4 symmetric block cipher"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | |||
ALG_ID: 0x0013"; | ALG_ID: 0x0013"; | |||
} | } | |||
identity TPM_ALG_RSASSA { | identity TPM_ALG_RSASSA { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base signing; | base signing; | |||
description | description | |||
"Signature algorithm defined in section 8.2 (RSASSAPKCS1-v1_5)"; | "RFC 8017 Signature algorithm defined in section 8.2 | |||
(RSASSAPKCS1-v1_5)"; | ||||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
RFC 8017. ALG_ID: 0x0014"; | RFC 8017. ALG_ID: 0x0014"; | |||
} | } | |||
identity TPM_ALG_RSAES { | identity TPM_ALG_RSAES { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"Signature algorithm defined in section 7.2 (RSAES-PKCS1-v1_5)"; | "RFC 8017 Signature algorithm defined in section 7.2 | |||
(RSAES-PKCS1-v1_5)"; | ||||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
RFC 8017. ALG_ID: 0x0015"; | RFC 8017. ALG_ID: 0x0015"; | |||
} | } | |||
identity TPM_ALG_RSAPSS { | identity TPM_ALG_RSAPSS { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base signing; | base signing; | |||
description | description | |||
"Padding algorithm defined in section 8.1 (RSASSA PSS)"; | "Padding algorithm defined in section 8.1 (RSASSA PSS)"; | |||
reference | reference | |||
skipping to change at page 41, line 46 ¶ | skipping to change at page 42, line 16 ¶ | |||
identity TPM_ALG_ECDH { | identity TPM_ALG_ECDH { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base method; | base method; | |||
description | description | |||
"Secret sharing using ECC"; | "Secret sharing using ECC"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST SP800-56A and RFC 7748. ALG_ID: 0x0019"; | NIST SP800-56A. ALG_ID: 0x0019"; | |||
} | } | |||
identity TPM_ALG_ECDAA { | identity TPM_ALG_ECDAA { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base signing; | base signing; | |||
base anonymous_signing; | base anonymous_signing; | |||
description | description | |||
"Elliptic-curve based anonymous signing scheme"; | "Elliptic-curve based anonymous signing scheme"; | |||
skipping to change at page 42, line 27 ¶ | skipping to change at page 42, line 45 ¶ | |||
base asymmetric; | base asymmetric; | |||
base signing; | base signing; | |||
base encryption_mode; | base encryption_mode; | |||
base method; | base method; | |||
description | description | |||
"SM2 - depending on context, either an elliptic-curve based, | "SM2 - depending on context, either an elliptic-curve based, | |||
signature algorithm, an encryption scheme, or a key exchange | signature algorithm, an encryption scheme, or a key exchange | |||
protocol"; | protocol"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | |||
ALG_ID: 0x001B"; | ALG_ID: 0x001B"; | |||
} | } | |||
identity TPM_ALG_ECSCHNORR { | identity TPM_ALG_ECSCHNORR { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base signing; | base signing; | |||
description | description | |||
"Elliptic-curve based Schnorr signature"; | "Elliptic-curve based Schnorr signature"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3. | |||
ALG_ID: 0x001C"; | ALG_ID: 0x001C"; | |||
} | } | |||
identity TPM_ALG_ECMQV { | identity TPM_ALG_ECMQV { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base method; | base method; | |||
description | description | |||
"Two-phase elliptic-curve key"; | "Two-phase elliptic-curve key"; | |||
reference | reference | |||
skipping to change at page 43, line 20 ¶ | skipping to change at page 43, line 37 ¶ | |||
base hash; | base hash; | |||
base method; | base method; | |||
description | description | |||
"Concatenation key derivation function"; | "Concatenation key derivation function"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST SP800-56A (approved alternative1) section 5.8.1. | NIST SP800-56A (approved alternative1) section 5.8.1. | |||
ALG_ID: 0x0020"; | ALG_ID: 0x0020"; | |||
} | } | |||
identity TPM_ALG_KDF2 { | identity TPM_ALG_KDF2 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
base method; | base method; | |||
description | description | |||
"Key derivation function"; | "Key derivation function"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
IEEE 1363a-2004 KDF2 section 13.2. ALG_ID: 0x0021"; | IEEE 1363a-2004 KDF2 section 13.2. ALG_ID: 0x0021"; | |||
} | } | |||
skipping to change at page 44, line 4 ¶ | skipping to change at page 44, line 21 ¶ | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base asymmetric; | base asymmetric; | |||
base object_type; | base object_type; | |||
description | description | |||
"Prime field ECC"; | "Prime field ECC"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 15946-1. ALG_ID: 0x0023"; | ISO/IEC 15946-1. ALG_ID: 0x0023"; | |||
} | } | |||
identity TPM_ALG_SYMCIPHER { | identity TPM_ALG_SYMCIPHER { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | ||||
description | description | |||
"Object type for a symmetric block cipher"; | "Object type for a symmetric block cipher"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
TCG TPM 2.0 library specification. ALG_ID: 0x0025"; | TCG TPM 2.0 library specification. ALG_ID: 0x0025"; | |||
} | } | |||
identity TPM_ALG_CAMELLIA { | identity TPM_ALG_CAMELLIA { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
description | description | |||
"The Camellia algorithm"; | "The Camellia algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 18033-3. ALG_ID: 0x0026"; | ISO/IEC 18033-3. ALG_ID: 0x0026"; | |||
} | } | |||
identity TPM_ALG_SHA3_256 { | identity TPM_ALG_SHA3_256 { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base hash; | base hash; | |||
description | description | |||
"ISO/IEC 10118-3 - the SHA 256 algorithm"; | "ISO/IEC 10118-3 - the SHA 256 algorithm"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST PUB FIPS 202. ALG_ID: 0x0027"; | NIST PUB FIPS 202. ALG_ID: 0x0027"; | |||
} | } | |||
skipping to change at page 46, line 22 ¶ | skipping to change at page 46, line 39 ¶ | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"Cipher Feedback mode"; | "Cipher Feedback mode"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10116. ALG_ID: 0x0043"; | ISO/IEC 10116. ALG_ID: 0x0043"; | |||
} | } | |||
identity TPM_ALG_ECB { | identity TPM_ALG_ECB { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"Electronic Codebook mode"; | "Electronic Codebook mode"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
ISO/IEC 10116. ALG_ID: 0x0044"; | ISO/IEC 10116. ALG_ID: 0x0044"; | |||
} | } | |||
identity TPM_ALG_CCM { | identity TPM_ALG_CCM { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
base signing; | base signing; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"Counter with Cipher Block Chaining-Message Authentication | "Counter with Cipher Block Chaining-Message Authentication | |||
Code (CCM)"; | Code (CCM)"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST SP800-38C. ALG_ID: 0x0050"; | NIST SP800-38C. ALG_ID: 0x0050"; | |||
} | } | |||
identity TPM_ALG_GCM { | identity TPM_ALG_GCM { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
base signing; | base signing; | |||
skipping to change at page 47, line 38 ¶ | skipping to change at page 48, line 8 ¶ | |||
base symmetric; | base symmetric; | |||
base signing; | base signing; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"AES Key Wrap with Padding (KWP)"; | "AES Key Wrap with Padding (KWP)"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST SP800-38F. ALG_ID: 0x0053"; | NIST SP800-38F. ALG_ID: 0x0053"; | |||
} | } | |||
identity TPM_ALG_EAX { | identity TPM_ALG_EAX { | |||
if-feature "tpm20"; | if-feature "tpm20"; | |||
base tpm20; | base tpm20; | |||
base symmetric; | base symmetric; | |||
base signing; | base signing; | |||
base encryption_mode; | base encryption_mode; | |||
description | description | |||
"Authenticated-Encryption Mode"; | "Authenticated-Encryption Mode"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
NIST SP800-38F. ALG_ID: 0x0054"; | NIST SP800-38F. ALG_ID: 0x0054"; | |||
skipping to change at page 48, line 18 ¶ | skipping to change at page 48, line 36 ¶ | |||
description | description | |||
"Edwards-curve Digital Signature Algorithm (PureEdDSA)"; | "Edwards-curve Digital Signature Algorithm (PureEdDSA)"; | |||
reference | reference | |||
"TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | "TCG-Algos:TCG Algorithm Registry Rev1.32 Table 3 and | |||
RFC 8032. ALG_ID: 0x0060"; | RFC 8032. ALG_ID: 0x0060"; | |||
} | } | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Note that not all cryptographic functions are required for use by | Note that not all cryptographic functions are required for use by | |||
ietf-tpm-remote-attestation.yang. However the full definition of | "ietf-tpm-remote-attestation.yang". However the full definition of | |||
Table 3 of [TCG-Algos] will allow use by additional YANG | Table 3 of [TCG-Algos] will allow use by additional YANG | |||
specifications. | specifications. | |||
3. IANA Considerations | 3. IANA Considerations | |||
This document registers the following namespace URIs in the | This document registers the following namespace URIs in the | |||
[xml-registry] as per [RFC3688]: | [xml-registry] as per [RFC3688]: | |||
URI: urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation | URI: urn:ietf:params:xml:ns:yang:ietf-tpm-remote-attestation | |||
skipping to change at page 49, line 32 ¶ | skipping to change at page 49, line 50 ¶ | |||
default). These data nodes may be considered sensitive or vulnerable | default). These data nodes may be considered sensitive or vulnerable | |||
in some network environments. Write operations (e.g., _edit-config_) | in some network environments. Write operations (e.g., _edit-config_) | |||
to these data nodes without proper protection can have a negative | to these data nodes without proper protection can have a negative | |||
effect on network operations. These are the subtrees and data nodes | effect on network operations. These are the subtrees and data nodes | |||
as well as their sensitivity/vulnerability: | as well as their sensitivity/vulnerability: | |||
Container '/rats-support-structures/attester-supported-algos': 'tpm1 | Container '/rats-support-structures/attester-supported-algos': 'tpm1 | |||
2-asymmetric-signing', 'tpm12-hash', 'tpm20-asymmetric-signing', | 2-asymmetric-signing', 'tpm12-hash', 'tpm20-asymmetric-signing', | |||
and 'tpm20-hash'. All could be populated with algorithms that are | and 'tpm20-hash'. All could be populated with algorithms that are | |||
not supported by the underlying physical TPM installed by the | not supported by the underlying physical TPM installed by the | |||
equipment vendor. | equipment vendor. A vendor should restrict the ability to | |||
configure unsupported algorithms. | ||||
Container: '/rats-support-structures/tpms': 'name': Although shown | Container: '/rats-support-structures/tpms': 'name': Although shown | |||
as 'rw', it is system generated. Therefore it should not be | as 'rw', it is system generated. Therefore, it should not be | |||
possible for an operator to add or remove a TPM from the | possible for an operator to add or remove a TPM from the | |||
configuration. | configuration. | |||
'tpm20-pcr-bank': It is possible to configure PCRs for extraction | 'tpm20-pcr-bank': It is possible to configure PCRs for extraction | |||
which are not being extended by system software. This could | which are not being extended by system software. This could | |||
unnecessarily use TPM resources. | unnecessarily use TPM resources. | |||
'certificates': It is possible to provision a certificate which | 'certificates': It is possible to provision a certificate which | |||
does not correspond to an Attestation Identity Key (AIK) within | does not correspond to an Attestation Identity Key (AIK) within | |||
the TPM 1.2, or an Attestation Key (AK) within the TPM 2.0 | the TPM 1.2, or an Attestation Key (AK) within the TPM 2.0 | |||
respectively. | respectively. In such a case, calls to an RPC requesting this | |||
specific certificate could result in either no response or a | ||||
response for an unexpected TPM. | ||||
RPC 'tpm12-challenge-response-attestation': It must be verified that | RPC 'tpm12-challenge-response-attestation': The receiver of the RPC | |||
the certificate is for an active AIK, i.e., the certificate | response must verify that the certificate is for an active AIK, | |||
provided is able to support Attestation on the targeted TPM 1.2. | i.e., the certificate has been confirmed by a third party as being | |||
able to support Attestation on the targeted TPM 1.2. | ||||
RPC 'tpm20-challenge-response-attestation': It must be verified that | RPC 'tpm20-challenge-response-attestation': The receiver of the RPC | |||
the certificate is for an active AK, i.e., the quote signature | response must verify that the certificate is for an active AK, | |||
associated with RPC response has been generated by an entity | i.e., the private key confirmation of the quote signature within | |||
legitimately able to perform Attestation on the targeted TPM 2.0. | the RPC response has been confirmed by a third party to belong to | |||
an entity legitimately able to perform Attestation on the targeted | ||||
TPM 2.0. | ||||
RPC 'log-retrieval': Requesting a large volume of logs from the | RPC 'log-retrieval': Requesting a large volume of logs from the | |||
attester could require significant system resources and create a | attester could require significant system resources and create a | |||
denial of service. | denial of service. | |||
Information collected through the RPCs above could reveal that | Information collected through the RPCs above could reveal that | |||
specific versions of software and configurations of endpoints that | specific versions of software and configurations of endpoints that | |||
could identify vulnerabilities on those systems. Therefore RPCs | could identify vulnerabilities on those systems. Therefore, RPCs | |||
should be protected by NACM [RFC8341] with a default setting of deny- | should be protected by NACM [RFC8341] with a default setting of deny- | |||
all to limit the extraction of attestation data by only authorized | all to limit the extraction of attestation data by only authorized | |||
Verifiers. | Verifiers. | |||
For the YANG module ietf-tcg-algs.yang, please use care when | For the YANG module ietf-tcg-algs.yang, please use care when | |||
selecting specific algorithms. The introductory section of | selecting specific algorithms. The introductory section of | |||
[TCG-Algos] highlights that some algorithms should be considered | [TCG-Algos] highlights that some algorithms should be considered | |||
legacy, and recommends implementers and adopters diligently evaluate | legacy, and recommends implementers and adopters diligently evaluate | |||
available information such as governmental, industrial, and academic | available information such as governmental, industrial, and academic | |||
research before selecting an algorithm for use. | research before selecting an algorithm for use. | |||
5. Change Log | 5. References | |||
5.1. Normative References | ||||
Changes from version 08 to version 09: | ||||
* AD Review comments | ||||
Changes from version 08 to version 09: | ||||
* Minor formatting tweaks for shepherd. IANA registered. | ||||
Changes from version 05 to version 06: | ||||
* More YANG Dr comments covered | ||||
Changes from version 04 to version 05: | ||||
* YANG Dr comments covered | ||||
Changes from version 03 to version 04: | ||||
* TPM1.2 Quote1 eliminated | ||||
* YANG model simplifications so redundant info isn't exposed | ||||
Changes from version 02 to version 03: | ||||
* moved to tcg-algs | ||||
* cleaned up model to eliminate sources of errors | ||||
* removed key establishment RPC | ||||
* added lots of XPATH which must all be scrubbed still | ||||
* Descriptive text added on model contents. | ||||
Changes from version 01 to version 02: | ||||
* Extracted Crypto-types into a separate YANG file | ||||
* Mades the algorithms explicit, not strings | ||||
* Hash Algo as key the selected TPM2 PCRs | ||||
* PCR numbers are their own type | ||||
* Eliminated nested keys for node-id plus tpm-name | ||||
* Eliminated TPM-Name of "ALL" | ||||
* Added TPM-Path | ||||
Changes from version 00 to version 01: | ||||
* Addressed author's comments | ||||
* Extended complementary details about attestation-certificates | ||||
* Relabeled chunk-size to log-entry-quantity | ||||
* Relabeled location with compute-node or tpm-name where appropriate | ||||
* Added a valid entity-mib physical-index to compute-node and tpm- | ||||
name to map it back to hardware inventory | ||||
* Relabeled name to tpm_name | ||||
* Removed event-string in last-entry | ||||
6. References | ||||
6.1. Normative References | ||||
[bios-log] "TCG PC Client Platform Firmware Profile Specification, | [bios-log] "TCG PC Client Platform Firmware Profile Specification, | |||
Section 9.4.5.2", n.d., | Section 9.4.5.2", n.d., | |||
<https://trustedcomputinggroup.org/wp-content/uploads/PC-C | <https://trustedcomputinggroup.org/wp-content/uploads/PC-C | |||
lientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf | lientSpecific_Platform_Profile_for_TPM_2p0_Systems_v51.pdf | |||
>. | >. | |||
[BIOS-Log-Event-Type] | [BIOS-Log-Event-Type] | |||
"TCG PC Client Platform Firmware Profile Specification", | "TCG PC Client Platform Firmware Profile Specification", | |||
n.d., <https://trustedcomputinggroup.org/wp- | n.d., <https://trustedcomputinggroup.org/wp- | |||
content/uploads/TCG_PCClient_PFP_r1p05_v23_pub.pdf>. | content/uploads/TCG_PCClient_PFP_r1p05_v23_pub.pdf>. | |||
[I-D.ietf-netconf-keystore] | [I-D.ietf-netconf-keystore] | |||
Watsen, K., "A YANG Data Model for a Keystore", Work in | Watsen, K., "A YANG Data Model for a Keystore", Work in | |||
Progress, Internet-Draft, draft-ietf-netconf-keystore-23, | Progress, Internet-Draft, draft-ietf-netconf-keystore-24, | |||
14 December 2021, <https://www.ietf.org/archive/id/draft- | 7 March 2022, <https://www.ietf.org/archive/id/draft-ietf- | |||
ietf-netconf-keystore-23.txt>. | netconf-keystore-24.txt>. | |||
[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", Work | W. Pan, "Remote Attestation Procedures Architecture", Work | |||
in Progress, Internet-Draft, draft-ietf-rats-architecture- | in Progress, Internet-Draft, draft-ietf-rats-architecture- | |||
15, 8 February 2022, <https://www.ietf.org/archive/id/ | 15, 8 February 2022, <https://www.ietf.org/archive/id/ | |||
draft-ietf-rats-architecture-15.txt>. | draft-ietf-rats-architecture-15.txt>. | |||
[I-D.ietf-rats-tpm-based-network-device-attest] | [I-D.ietf-rats-tpm-based-network-device-attest] | |||
Fedorkow, G., Voit, E., and J. Fitzgerald-McKay, "TPM- | Fedorkow, G., Voit, E., and J. Fitzgerald-McKay, "TPM- | |||
skipping to change at page 53, line 35 ¶ | skipping to change at page 52, line 35 ¶ | |||
[ISO-IEC-9797-1] | [ISO-IEC-9797-1] | |||
"Message Authentication Codes (MACs) - ISO/IEC | "Message Authentication Codes (MACs) - ISO/IEC | |||
9797-1:2011", n.d., | 9797-1:2011", n.d., | |||
<https://www.iso.org/standard/50375.html>. | <https://www.iso.org/standard/50375.html>. | |||
[ISO-IEC-9797-2] | [ISO-IEC-9797-2] | |||
"Message Authentication Codes (MACs) - ISO/IEC | "Message Authentication Codes (MACs) - ISO/IEC | |||
9797-2:2011", n.d., | 9797-2:2011", n.d., | |||
<https://www.iso.org/standard/51618.html>. | <https://www.iso.org/standard/51618.html>. | |||
[netequip-boot-log] | ||||
"IMA Policy Kernel Documentation", n.d., | ||||
<https://www.kernel.org/doc/Documentation/ABI/testing/ | ||||
ima_policy>. | ||||
[NIST-PUB-FIPS-202] | [NIST-PUB-FIPS-202] | |||
"SHA-3 Standard: Permutation-Based Hash and Extendable- | "SHA-3 Standard: Permutation-Based Hash and Extendable- | |||
Output Functions", n.d., | Output Functions", n.d., | |||
<https://csrc.nist.gov/publications/detail/fips/202/ | <https://csrc.nist.gov/publications/detail/fips/202/ | |||
final>. | final>. | |||
[NIST-SP800-108] | [NIST-SP800-108] | |||
"Recommendation for Key Derivation Using Pseudorandom | "Recommendation for Key Derivation Using Pseudorandom | |||
Functions", n.d., | Functions", n.d., | |||
<https://nvlpubs.nist.gov/nistpubs/Legacy/SP/ | <https://nvlpubs.nist.gov/nistpubs/Legacy/SP/ | |||
skipping to change at page 54, line 29 ¶ | skipping to change at page 53, line 23 ¶ | |||
Methods for Key Wrapping", n.d., | Methods for Key Wrapping", n.d., | |||
<https://csrc.nist.gov/publications/detail/sp/800-38f/ | <https://csrc.nist.gov/publications/detail/sp/800-38f/ | |||
final>. | final>. | |||
[NIST-SP800-56A] | [NIST-SP800-56A] | |||
"Recommendation for Pair-Wise Key-Establishment Schemes | "Recommendation for Pair-Wise Key-Establishment Schemes | |||
Using Discrete Logarithm Cryptography", n.d., | Using Discrete Logarithm Cryptography", n.d., | |||
<https://csrc.nist.gov/publications/detail/sp/800-56a/rev- | <https://csrc.nist.gov/publications/detail/sp/800-56a/rev- | |||
3/final>. | 3/final>. | |||
[RFC2014] Weinrib, A. and J. Postel, "IRTF Research Group Guidelines | [RFC2104] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
and Procedures", BCP 8, RFC 2014, DOI 10.17487/RFC2014, | Hashing for Message Authentication", RFC 2104, | |||
October 1996, <https://www.rfc-editor.org/info/rfc2014>. | DOI 10.17487/RFC2104, February 1997, | |||
<https://www.rfc-editor.org/info/rfc2104>. | ||||
[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>. | |||
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
skipping to change at page 55, line 18 ¶ | skipping to change at page 54, line 14 ¶ | |||
[RFC6933] Bierman, A., Romascanu, D., Quittek, J., and M. | [RFC6933] Bierman, A., Romascanu, D., Quittek, J., and M. | |||
Chandramouli, "Entity MIB (Version 4)", RFC 6933, | Chandramouli, "Entity MIB (Version 4)", RFC 6933, | |||
DOI 10.17487/RFC6933, May 2013, | DOI 10.17487/RFC6933, May 2013, | |||
<https://www.rfc-editor.org/info/rfc6933>. | <https://www.rfc-editor.org/info/rfc6933>. | |||
[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>. | |||
[RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves | ||||
for Security", RFC 7748, DOI 10.17487/RFC7748, January | ||||
2016, <https://www.rfc-editor.org/info/rfc7748>. | ||||
[RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | [RFC8017] Moriarty, K., Ed., Kaliski, B., Jonsson, J., and A. Rusch, | |||
"PKCS #1: RSA Cryptography Specifications Version 2.2", | "PKCS #1: RSA Cryptography Specifications Version 2.2", | |||
RFC 8017, DOI 10.17487/RFC8017, November 2016, | RFC 8017, DOI 10.17487/RFC8017, November 2016, | |||
<https://www.rfc-editor.org/info/rfc8017>. | <https://www.rfc-editor.org/info/rfc8017>. | |||
[RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital | |||
Signature Algorithm (EdDSA)", RFC 8032, | Signature Algorithm (EdDSA)", RFC 8032, | |||
DOI 10.17487/RFC8032, January 2017, | DOI 10.17487/RFC8032, January 2017, | |||
<https://www.rfc-editor.org/info/rfc8032>. | <https://www.rfc-editor.org/info/rfc8032>. | |||
skipping to change at page 56, line 31 ¶ | skipping to change at page 55, line 26 ¶ | |||
<https://trustedcomputinggroup.org/wp-content/uploads/TPM- | <https://trustedcomputinggroup.org/wp-content/uploads/TPM- | |||
Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf>. | Main-Part-2-TPM-Structures_v1.2_rev116_01032011.pdf>. | |||
[TPM2.0] TCG, ., "TPM 2.0 Library Specification", 15 March 2013, | [TPM2.0] TCG, ., "TPM 2.0 Library Specification", 15 March 2013, | |||
<https://trustedcomputinggroup.org/resource/tpm-library- | <https://trustedcomputinggroup.org/resource/tpm-library- | |||
specification/>. | specification/>. | |||
[TPM2.0-Arch] | [TPM2.0-Arch] | |||
"Trusted Platform Module Library - Part 1: Architecture", | "Trusted Platform Module Library - Part 1: Architecture", | |||
n.d., <https://trustedcomputinggroup.org/wp- | n.d., <https://trustedcomputinggroup.org/wp- | |||
content/uploads/TPM-Rev-2.0-Part-1-Architecture- | content/uploads/ | |||
01.07-2014-03-13.pdf>. | TCG_TPM2_r1p59_Part1_Architecture_pub.pdf>. | |||
[TPM2.0-Key] | [TPM2.0-Key] | |||
TCG, ., "TPM 2.0 Keys for Device Identity and Attestation, | TCG, ., "TPM 2.0 Keys for Device Identity and Attestation, | |||
Rev10", 14 April 2021, <https://trustedcomputinggroup.org/ | Rev12", 8 October 2021, | |||
wp-content/uploads/TCG_IWG_DevID_v1r2_02dec2020.pdf>. | <https://trustedcomputinggroup.org/wp-content/uploads/TPM- | |||
2p0-Keys-for-Device-Identity-and- | ||||
Attestation_v1_r12_pub10082021.pdf>. | ||||
[TPM2.0-Structures] | [TPM2.0-Structures] | |||
"Trusted Platform Module Library - Part 2: Structures", | "Trusted Platform Module Library - Part 2: Structures", | |||
n.d., <https://trustedcomputinggroup.org/wp- | n.d., <https://trustedcomputinggroup.org/wp- | |||
content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf>. | content/uploads/TPM-Rev-2.0-Part-2-Structures-01.38.pdf>. | |||
[xml-registry] | [UEFI-Secure-Boot] | |||
"IETF XML Registry", n.d., | "Unified Extensible Firmware Interface (UEFI) | |||
<https://www.iana.org/assignments/xml-registry/xml- | Specification Version 2.9 (March 2021), Section 32.1 | |||
registry.xhtml>. | (Secure Boot)", n.d., | |||
<https://uefi.org/sites/default/files/resources/ | ||||
[yang-parameters] | UEFI_Spec_2_9_2021_03_18.pdf>. | |||
"YANG Parameters", n.d., | ||||
<https://www.iana.org/assignments/yang-parameters/yang- | ||||
parameters.xhtml>. | ||||
6.2. Informative References | 5.2. Informative References | |||
[I-D.ietf-rats-reference-interaction-models] | [I-D.ietf-rats-reference-interaction-models] | |||
Birkholz, H., Eckel, M., Pan, W., and E. Voit, "Reference | Birkholz, H., Eckel, M., Pan, W., and E. Voit, "Reference | |||
Interaction Models for Remote Attestation Procedures", | Interaction Models for Remote Attestation Procedures", | |||
Work in Progress, Internet-Draft, draft-ietf-rats- | Work in Progress, Internet-Draft, draft-ietf-rats- | |||
reference-interaction-models-05, 26 January 2022, | reference-interaction-models-05, 26 January 2022, | |||
<https://www.ietf.org/archive/id/draft-ietf-rats- | <https://www.ietf.org/archive/id/draft-ietf-rats- | |||
reference-interaction-models-05.txt>. | reference-interaction-models-05.txt>. | |||
[IMA-Kernel-Source] | ||||
"Linux Integrity Measurement Architecture (IMA): Kernel | ||||
Sourcecode", n.d., <https://github.com/torvalds/linux/blob | ||||
/df0cc57e057f18e44dac8e6c18aba47ab53202f9/security/ | ||||
integrity/ima/>. | ||||
[NIST-915121] | [NIST-915121] | |||
"True Randomness Can't be Left to Chance: Why entropy is | "True Randomness Can't be Left to Chance: Why entropy is | |||
important for information security", n.d., | important for information security", n.d., | |||
<https://tsapps.nist.gov/publication/ | <https://tsapps.nist.gov/publication/ | |||
get_pdf.cfm?pub_id=915121>. | get_pdf.cfm?pub_id=915121>. | |||
[xml-registry] | ||||
"IETF XML Registry", n.d., | ||||
<https://www.iana.org/assignments/xml-registry/xml- | ||||
registry.xhtml>. | ||||
[yang-parameters] | ||||
"YANG Parameters", n.d., | ||||
<https://www.iana.org/assignments/yang-parameters/yang- | ||||
parameters.xhtml>. | ||||
Appendix A. Integrity Measurement Architecture (IMA) | ||||
IMA extends the principles of Measured Boot [TPM2.0-Arch] and Secure | ||||
Boot [UEFI-Secure-Boot] to the Linux operating system, applying it to | ||||
operating system applications and files. IMA has been part of the | ||||
Linux integrity subsystem of the Linux kernel since 2009 (kernel | ||||
version 2.6.30). The IMA mechanism represented by the YANG module in | ||||
this specification is rooted in the kernel version 5.16 | ||||
[IMA-Kernel-Source]. IMA enables the protection of system integrity | ||||
by collecting (commonly referred to as measuring) and storing | ||||
measurements (called Claims in the context of IETF RATS) of files | ||||
before execution so that these measurements can be used later, at | ||||
system runtime, in remote attestation procedures. IMA acts in | ||||
support of the appraisal of Evidence (which includes measurement | ||||
Claims) by leveraging reference integrity measurements stored in | ||||
extended file attributes. | ||||
In support of the appraisal of Evidence, IMA maintains an ordered | ||||
list of measurements in kernel-space, the Stored Measurement Log | ||||
(SML), for all files that have been measured before execution since | ||||
the operating system was started. Although IMA can be used without a | ||||
TPM, it is typically used in conjunction with a TPM to anchor the | ||||
integrity of the SML in a hardware-protected secure storage location, | ||||
i.e., Platform Configuration Registers (PCRs) provided by TPMs. IMA | ||||
provides the SML in both binary and ASCII representations in the | ||||
Linux security file system _securityfs_ ("/sys/kernel/security/ | ||||
ima/"). | ||||
IMA templates define the format of the SML, i.e., which fields are | ||||
included in a log record. Examples are file path, file hash, user | ||||
ID, group ID, file signature, and extended file attributes. IMA | ||||
comes with a set of predefined template formats and also allows a | ||||
custom format, i.e., a format consisting of template fields supported | ||||
by IMA. Template usage is typically determined by boot arguments | ||||
passed to the kernel. Alternatively, the format can also be hard- | ||||
compiled into custom kernels. IMA templates and fields are | ||||
extensible in the kernel source code. As a result, more template | ||||
fields can be added in the future. | ||||
IMA policies define which files are measured using the IMA policy | ||||
language. Built-in policies can be passed as boot arguments to the | ||||
kernel. Custom IMA policies can be defined once during runtime or be | ||||
hard-compiled into a custom kernel. If no policy is defined, no | ||||
measurements are taken and IMA is effectively disabled. | ||||
Appendix B. IMA for Network Equipment Boot Logs | ||||
Network equipment can generally implement similar IMA-protected | ||||
functions to generate measurements (Claims) about the boot process of | ||||
a device and enable corresponding remote attestation. Network | ||||
Equipment Boot Logs combine the measurement and logging of boot | ||||
components and operating system components (executables and files) | ||||
into a single log file in identical IMA format. | ||||
During the boot process of the network device, i.e., from BIOS to the | ||||
end of the operating system and user-space, all files executed during | ||||
this process can be measured and logged in the order of their | ||||
execution. When the Verifier initiates a remote attestation process | ||||
(e.g., challenge-response remote attestation as defined in this | ||||
document), the network equipment takes on the role of an Attester and | ||||
can convey to the Verifier Claims that comprise the measurement log | ||||
as well as the corresponding PCR values (Evidence) of a TPM. | ||||
The verifier can appraise the integrity (compliance with the | ||||
Reference Values) of each executed file by comparing its measured | ||||
value with the Reference Value. Based on the execution order, the | ||||
Verifier can compute a PCR reference value (by replaying the log) and | ||||
compare it to the Measurement Log Claims obtained in conjunction with | ||||
the PCR Evidence to assess their trustworthiness with respect to an | ||||
intended operational state. | ||||
Not only during the operating system loading phase, even during the | ||||
BIOS boot phase, network equipment usually executes multiple | ||||
components. With this measurement log mechanism, network equipment | ||||
can take on the role of an Attester, proving to the Verifier the | ||||
trustworthiness of its boot process. Using the measurement log, | ||||
Verifiers can precisely identify mismatching log entries to infer | ||||
potentially tampered components. | ||||
This mechanism also supports scenarios that modify files on the | ||||
Attester and are executed during the boot phase (e.g., updating/ | ||||
patching) by simply updating the appropriate Reference Values in | ||||
Reference Integrity Manifests that inform Verifiers about how an | ||||
Attester is composed. | ||||
Authors' Addresses | Authors' Addresses | |||
Henk Birkholz | Henk Birkholz | |||
Fraunhofer SIT | Fraunhofer SIT | |||
Rheinstrasse 75 | Rheinstrasse 75 | |||
64295 Darmstadt | 64295 Darmstadt | |||
Germany | Germany | |||
Email: henk.birkholz@sit.fraunhofer.de | Email: henk.birkholz@sit.fraunhofer.de | |||
Michael Eckel | Michael Eckel | |||
Fraunhofer SIT | Fraunhofer SIT | |||
Rheinstrasse 75 | Rheinstrasse 75 | |||
64295 Darmstadt | 64295 Darmstadt | |||
Germany | Germany | |||
Email: michael.eckel@sit.fraunhofer.de | Email: michael.eckel@sit.fraunhofer.de | |||
Shwetha Bhandari | Shwetha Bhandari | |||
ThoughtSpot | ThoughtSpot | |||
Email: shwetha.bhandari@thoughtspot.com | ||||
Email: shwetha.bhandari@thoughtspot.com | ||||
Eric Voit | Eric Voit | |||
Cisco Systems | Cisco Systems | |||
Email: evoit@cisco.com | Email: evoit@cisco.com | |||
Bill Sulzen | Bill Sulzen | |||
Cisco Systems | Cisco Systems | |||
Email: bsulzen@cisco.com | Email: bsulzen@cisco.com | |||
Liang Xia (Frank) | Liang Xia (Frank) | |||
Huawei Technologies | Huawei Technologies | |||
101 Software Avenue, Yuhuatai District | 101 Software Avenue, Yuhuatai District | |||
Nanjing | Nanjing | |||
Jiangsu, 210012 | Jiangsu, 210012 | |||
China | China | |||
Email: Frank.Xialiang@huawei.com | Email: Frank.Xialiang@huawei.com | |||
Tom Laffey | Tom Laffey | |||
Hewlett Packard Enterprise | Hewlett Packard Enterprise | |||
Email: tom.laffey@hpe.com | Email: tom.laffey@hpe.com | |||
Guy C. Fedorkow | Guy C. Fedorkow | |||
Juniper Networks | Juniper Networks | |||
10 Technology Park Drive | 10 Technology Park Drive | |||
Westford | Westford | |||
Email: gfedorkow@juniper.net | Email: gfedorkow@juniper.net | |||
End of changes. 160 change blocks. | ||||
330 lines changed or deleted | 387 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |