rfc9711.original | rfc9711.txt | |||
---|---|---|---|---|
RATS L. Lundblade | Internet Engineering Task Force (IETF) L. Lundblade | |||
Internet-Draft Security Theory LLC | Request for Comments: 9711 Security Theory LLC | |||
Intended status: Standards Track G. Mandyam | Category: Standards Track G. Mandyam | |||
Expires: 10 March 2025 Mediatek USA | ISSN: 2070-1721 Mediatek USA | |||
J. O'Donoghue | J. O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
C. Wallace | C. Wallace | |||
Red Hound Software, Inc. | Red Hound Software, Inc. | |||
6 September 2024 | January 2025 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-31 | ||||
Abstract | Abstract | |||
An Entity Attestation Token (EAT) provides an attested claims set | An Entity Attestation Token (EAT) provides an attested claims set | |||
that describes state and characteristics of an entity, a device like | that describes the state and characteristics of an entity, a device | |||
a smartphone, IoT device, network equipment or such. This claims set | such as a smartphone, an Internet of Things (IoT) device, network | |||
is used by a relying party, server or service to determine the type | equipment, or such. This claims set is used by a relying party, | |||
and degree of trust placed in the entity. | server, or service to determine the type and degree of trust placed | |||
in the entity. | ||||
An EAT is either a CBOR Web Token (CWT) or JSON Web Token (JWT) with | An EAT is either a CBOR Web Token (CWT) or a JSON Web Token (JWT) | |||
attestation-oriented claims. | with attestation-oriented claims. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 10 March 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9711. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 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 | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction | |||
1.1. Entity Overview . . . . . . . . . . . . . . . . . . . . . 7 | 1.1. Entity Overview | |||
1.2. EAT as a Framework . . . . . . . . . . . . . . . . . . . 8 | 1.2. EAT as a Framework | |||
1.3. Operating Model and RATS Architecture . . . . . . . . . . 9 | 1.3. Operating Model and RATS Architecture | |||
1.3.1. Relationship between Evidence and Attestation | 1.3.1. Relationship between Evidence and Attestation Results | |||
Results . . . . . . . . . . . . . . . . . . . . . . . 9 | 2. Terminology | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3. Top-Level Token Definition | |||
3. Top-Level Token Definition . . . . . . . . . . . . . . . . . 12 | 4. The Claims | |||
4. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 4.1. eat_nonce (EAT Nonce) Claim | |||
4.1. eat_nonce (EAT Nonce) Claim . . . . . . . . . . . . . . . 14 | 4.2. Claims Describing the Entity | |||
4.2. Claims Describing the Entity . . . . . . . . . . . . . . 14 | 4.2.1. ueid (Universal Entity ID) Claim | |||
4.2.1. ueid (Universal Entity ID) Claim . . . . . . . . . . 15 | 4.2.1.1. Rules for Creating UEIDs | |||
4.2.1.1. Rules for Creating UEIDs . . . . . . . . . . . . 15 | 4.2.1.2. Rules for Consuming UEIDs | |||
4.2.1.2. Rules for Consuming UEIDs . . . . . . . . . . . . 18 | 4.2.2. sueids (Semi-permanent UEIDs) Claim (SUEIDs) | |||
4.2.2. sueids (Semi-permanent UEIDs) Claim (SUEIDs) . . . . 18 | 4.2.3. oemid (Hardware OEM ID) Claim | |||
4.2.3. oemid (Hardware OEM Identification) Claim . . . . . . 19 | 4.2.3.1. Random Number-Based OEM ID | |||
4.2.3.1. Random Number Based OEM ID . . . . . . . . . . . 19 | 4.2.3.2. IEEE-Based OEM ID | |||
4.2.3.2. IEEE Based OEM ID . . . . . . . . . . . . . . . . 20 | 4.2.3.3. IANA Private Enterprise Number-Based OEM ID | |||
4.2.3.3. IANA Private Enterprise Number Based OEM ID . . . 20 | 4.2.4. hwmodel (Hardware Model) Claim | |||
4.2.4. hwmodel (Hardware Model) Claim . . . . . . . . . . . 21 | 4.2.5. hwversion (Hardware Version) Claim | |||
4.2.5. hwversion (Hardware Version) Claim . . . . . . . . . 22 | 4.2.6. swname (Software Name) Claim | |||
4.2.6. swname (Software Name) Claim . . . . . . . . . . . . 22 | 4.2.7. swversion (Software Version) Claim | |||
4.2.7. swversion (Software Version) Claim . . . . . . . . . 22 | 4.2.8. oemboot (OEM Authorized Boot) Claim | |||
4.2.8. oemboot (OEM Authorized Boot) Claim . . . . . . . . . 23 | 4.2.9. dbgstat (Debug Status) Claim | |||
4.2.9. dbgstat (Debug Status) Claim . . . . . . . . . . . . 23 | 4.2.9.1. Enabled | |||
4.2.9.1. Enabled . . . . . . . . . . . . . . . . . . . . . 24 | 4.2.9.2. Disabled | |||
4.2.9.2. Disabled . . . . . . . . . . . . . . . . . . . . 24 | 4.2.9.3. Disabled Since Boot | |||
4.2.9.3. Disabled Since Boot . . . . . . . . . . . . . . . 24 | 4.2.9.4. Disabled Permanently | |||
4.2.9.4. Disabled Permanently . . . . . . . . . . . . . . 24 | 4.2.9.5. Disabled Fully and Permanently | |||
4.2.9.5. Disabled Fully and Permanently . . . . . . . . . 25 | 4.2.10. location (Location) Claim | |||
4.2.10. location (Location) Claim . . . . . . . . . . . . . . 25 | 4.2.11. uptime (Uptime) Claim | |||
4.2.11. uptime (Uptime) Claim . . . . . . . . . . . . . . . . 26 | 4.2.12. bootcount (Boot Count) Claim | |||
4.2.12. bootcount (Boot Count) Claim . . . . . . . . . . . . 26 | 4.2.13. bootseed (Boot Seed) Claim | |||
4.2.13. bootseed (Boot Seed) Claim . . . . . . . . . . . . . 26 | 4.2.14. dloas (Digital Letters of Approval) Claim | |||
4.2.14. dloas (Digital Letters of Approval) Claim . . . . . . 27 | 4.2.15. manifests (Software Manifests) Claim | |||
4.2.15. manifests (Software Manifests) Claim . . . . . . . . 28 | 4.2.16. measurements (Measurements) Claim | |||
4.2.16. measurements (Measurements) Claim . . . . . . . . . . 29 | 4.2.17. measres (Software Measurement Results) Claim | |||
4.2.17. measres (Software Measurement Results) Claim . . . . 30 | 4.2.18. submods (Submodules) | |||
4.2.18. submods (Submodules) . . . . . . . . . . . . . . . . 32 | 4.2.18.1. Submodule Claims-Set | |||
4.2.18.1. Submodule Claims-Set . . . . . . . . . . . . . . 35 | 4.2.18.2. Detached Submodule Digest | |||
4.2.18.2. Detached Submodule Digest . . . . . . . . . . . 36 | 4.2.18.3. Nested Tokens | |||
4.2.18.3. Nested Tokens . . . . . . . . . . . . . . . . . 36 | 4.3. Claims Describing the Token | |||
4.3. Claims Describing the Token . . . . . . . . . . . . . . . 36 | 4.3.1. iat (Timestamp) Claim | |||
4.3.1. iat (Timestamp) Claim . . . . . . . . . . . . . . . . 37 | 4.3.2. eat_profile (EAT Profile) Claim | |||
4.3.2. eat_profile (EAT Profile) Claim . . . . . . . . . . . 37 | 4.3.3. intuse (Intended Use) Claim | |||
4.3.3. intuse (Intended Use) Claim . . . . . . . . . . . . . 38 | 5. Detached EAT Bundles | |||
5. Detached EAT Bundles . . . . . . . . . . . . . . . . . . . . 38 | 6. Profiles | |||
6. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 6.1. Format of a Profile Document | |||
6.1. Format of a Profile Document . . . . . . . . . . . . . . 40 | 6.2. Full and Partial Profiles | |||
6.2. Full and Partial Profiles . . . . . . . . . . . . . . . . 40 | 6.3. List of Profile Issues | |||
6.3. List of Profile Issues . . . . . . . . . . . . . . . . . 41 | 6.3.1. Use of JSON, CBOR, or Both | |||
6.3.1. Use of JSON, CBOR or both . . . . . . . . . . . . . . 41 | 6.3.2. CBOR Map and Array Encoding | |||
6.3.2. CBOR Map and Array Encoding . . . . . . . . . . . . . 41 | 6.3.3. CBOR String Encoding | |||
6.3.3. CBOR String Encoding . . . . . . . . . . . . . . . . 41 | 6.3.4. CBOR Preferred Serialization | |||
6.3.4. CBOR Preferred Serialization . . . . . . . . . . . . 42 | 6.3.5. CBOR Tags | |||
6.3.5. CBOR Tags . . . . . . . . . . . . . . . . . . . . . . 42 | 6.3.6. COSE/JOSE Protection | |||
6.3.6. COSE/JOSE Protection . . . . . . . . . . . . . . . . 42 | 6.3.7. COSE/JOSE Algorithms | |||
6.3.7. COSE/JOSE Algorithms . . . . . . . . . . . . . . . . 42 | 6.3.8. Detached EAT Bundle Support | |||
6.3.8. Detached EAT Bundle Support . . . . . . . . . . . . . 43 | 6.3.9. Key Identification | |||
6.3.9. Key Identification . . . . . . . . . . . . . . . . . 43 | 6.3.10. Endorsement Identification | |||
6.3.10. Endorsement Identification . . . . . . . . . . . . . 43 | 6.3.11. Freshness | |||
6.3.11. Freshness . . . . . . . . . . . . . . . . . . . . . . 44 | 6.3.12. Claims Requirements | |||
6.3.12. Claims Requirements . . . . . . . . . . . . . . . . . 44 | 6.4. The Constrained Device Standard Profile | |||
6.4. The Constrained Device Standard Profile . . . . . . . . . 45 | 7. Encoding and Collected CDDL | |||
7. Encoding and Collected CDDL . . . . . . . . . . . . . . . . . 47 | 7.1. Claims-Set and CDDL for CWT and JWT | |||
7.1. Claims-Set and CDDL for CWT and JWT . . . . . . . . . . . 47 | 7.2. Encoding Data Types | |||
7.2. Encoding Data Types . . . . . . . . . . . . . . . . . . . 48 | 7.2.1. Common Data Types | |||
7.2.1. Common Data Types . . . . . . . . . . . . . . . . . . 48 | 7.2.2. JSON Interoperability | |||
7.2.2. JSON Interoperability . . . . . . . . . . . . . . . . 48 | 7.2.3. Labels | |||
7.2.3. Labels . . . . . . . . . . . . . . . . . . . . . . . 49 | 7.2.4. CBOR Interoperability | |||
7.2.4. CBOR Interoperability . . . . . . . . . . . . . . . . 49 | 7.3. Collected CDDL | |||
7.3. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 49 | 7.3.1. Payload CDDL | |||
7.3.1. Payload CDDL . . . . . . . . . . . . . . . . . . . . 49 | 7.3.2. CBOR-Specific CDDL | |||
7.3.2. CBOR-Specific CDDL . . . . . . . . . . . . . . . . . 54 | 7.3.3. JSON-Specific CDDL | |||
7.3.3. JSON-Specific CDDL . . . . . . . . . . . . . . . . . 55 | 8. Privacy Considerations | |||
8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 56 | 8.1. UEID and SUEID Privacy Considerations | |||
8.1. UEID and SUEID Privacy Considerations . . . . . . . . . . 56 | 8.2. Location Privacy Considerations | |||
8.2. Location Privacy Considerations . . . . . . . . . . . . . 57 | 8.3. Boot Seed Privacy Considerations | |||
8.3. Boot Seed Privacy Considerations . . . . . . . . . . . . 57 | 8.4. Replay Protection and Privacy | |||
8.4. Replay Protection and Privacy . . . . . . . . . . . . . . 57 | 9. Security Considerations | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 57 | 9.1. Claim Trustworthiness | |||
9.1. Claim Trustworthiness . . . . . . . . . . . . . . . . . . 57 | 9.2. Key Provisioning | |||
9.2. Key Provisioning . . . . . . . . . . . . . . . . . . . . 58 | 9.2.1. Transmission of Key Material | |||
9.2.1. Transmission of Key Material . . . . . . . . . . . . 58 | 9.3. Freshness | |||
9.3. Freshness . . . . . . . . . . . . . . . . . . . . . . . . 59 | 9.4. Multiple EAT Consumers | |||
9.4. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 59 | 9.5. Detached EAT Bundle Digest Security Considerations | |||
9.5. Detached EAT Bundle Digest Security Considerations . . . 59 | 9.6. Verification Keys | |||
9.6. Verification Keys . . . . . . . . . . . . . . . . . . . . 60 | 10. IANA Considerations | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 60 | ||||
10.1. Reuse of CBOR and JSON Web Token (CWT and JWT) Claims | 10.1. Reuse of CBOR and JSON Web Token (CWT and JWT) Claims | |||
Registries . . . . . . . . . . . . . . . . . . . . . . . 60 | Registries | |||
10.2. CWT and JWT Claims Registered by This Document . . . . . 60 | 10.2. CWT and JWT Claims Registered by This Document | |||
10.3. UEID URN Registered by this Document . . . . . . . . . . 67 | 10.3. UEID URNs Registered by This Document | |||
10.4. CBOR Tag for Detached EAT Bundle Registered by this | 10.4. CBOR Tag for Detached EAT Bundle Registered by This | |||
Document . . . . . . . . . . . . . . . . . . . . . . . . 68 | Document | |||
10.5. Intended Use Registry . . . . . . . . . . . . . . . . . 68 | 10.5. Intended Use Registry | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 69 | 11. References | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 69 | 11.1. Normative References | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 72 | 11.2. Informative References | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 74 | Appendix A. Examples | |||
A.1. Claims Set Examples . . . . . . . . . . . . . . . . . . . 75 | A.1. Claims Set Examples | |||
A.1.1. Simple TEE Attestation . . . . . . . . . . . . . . . 75 | A.1.1. Simple TEE Attestation | |||
A.1.2. Submodules for Board and Device . . . . . . . . . . . 76 | A.1.2. Submodules for Board and Device | |||
A.1.3. EAT Produced by Attestation Hardware Block . . . . . 77 | A.1.3. EAT Produced by an Attestation Hardware Block | |||
A.1.4. Key / Key Store Attestation . . . . . . . . . . . . . 78 | A.1.4. Key / Key Store Attestation | |||
A.1.5. Software Measurements of an IoT Device . . . . . . . 80 | A.1.5. Software Measurements of an IoT Device | |||
A.1.6. Attestation Results in JSON . . . . . . . . . . . . . 83 | A.1.6. Attestation Results in JSON | |||
A.1.7. JSON-encoded Token with Submodules . . . . . . . . . 83 | A.1.7. JSON-Encoded Token with Submodules | |||
A.2. Signed Token Examples . . . . . . . . . . . . . . . . . . 84 | A.2. Signed Token Examples | |||
A.2.1. Basic CWT Example . . . . . . . . . . . . . . . . . . 84 | A.2.1. Basic CWT Example | |||
A.2.2. CBOR-encoded Detached EAT Bundle . . . . . . . . . . 85 | A.2.2. CBOR-Encoded Detached EAT Bundle | |||
A.2.3. JSON-encoded Detached EAT Bundle . . . . . . . . . . 87 | A.2.3. JSON-Encoded Detached EAT Bundle | |||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 88 | Appendix B. UEID Design Rationale | |||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 88 | B.1. Collision Probability | |||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 91 | B.2. No Use of UUID | |||
Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity | Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity | |||
(DevID) . . . . . . . . . . . . . . . . . . . . . . . . . 91 | (DevID) | |||
C.1. DevID Used With EAT . . . . . . . . . . . . . . . . . . . 92 | C.1. DevID Used with EAT | |||
C.2. How EAT Provides an Equivalent Secure Device Identity . . 92 | C.2. How EAT Provides an Equivalent Secure Device Identity | |||
C.3. An X.509 Format EAT . . . . . . . . . . . . . . . . . . . 93 | C.3. An X.509 Format EAT | |||
C.4. Device Identifier Permanence . . . . . . . . . . . . . . 93 | C.4. Device Identifier Permanence | |||
Appendix D. CDDL for CWT and JWT . . . . . . . . . . . . . . . . 94 | Appendix D. CDDL for CWT and JWT | |||
Appendix E. New Claim Design Considerations . . . . . . . . . . 96 | Appendix E. New Claim Design Considerations | |||
E.1. Interoperability and Relying Party Orientation . . . . . 96 | E.1. Interoperability and Relying Party Orientation | |||
E.2. Operating System and Technology Neutral . . . . . . . . . 96 | E.2. Operating System and Technology Neutral | |||
E.3. Security Level Neutral . . . . . . . . . . . . . . . . . 97 | E.3. Security Level Neutral | |||
E.4. Reuse of Extant Data Formats . . . . . . . . . . . . . . 97 | E.4. Reuse of Extant Data Formats | |||
E.5. Proprietary Claims . . . . . . . . . . . . . . . . . . . 97 | E.5. Proprietary Claims | |||
Appendix F. Endorsements and Verification Keys . . . . . . . . . 98 | Appendix F. Endorsements and Verification Keys | |||
F.1. Identification Methods . . . . . . . . . . . . . . . . . 99 | F.1. Identification Methods | |||
F.1.1. COSE/JWS Key ID . . . . . . . . . . . . . . . . . . . 99 | F.1.1. COSE/JWS Key ID | |||
F.1.2. JWS and COSE X.509 Header Parameters . . . . . . . . 99 | F.1.2. JWS and COSE X.509 Header Parameters | |||
F.1.3. CBOR Certificate COSE Header Parameters . . . . . . . 99 | F.1.3. CBOR Certificate COSE Header Parameters | |||
F.1.4. Claim-Based Key Identification . . . . . . . . . . . 100 | F.1.4. Claim-Based Key Identification | |||
Appendix G. Changes from Previous Drafts . . . . . . . . . . . . 100 | Contributors | |||
G.1. From draft-ietf-rats-eat-30 . . . . . . . . . . . . . . . 100 | Authors' Addresses | |||
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 100 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 101 | ||||
1. Introduction | 1. Introduction | |||
An Entity Attestation Token (EAT) is a message made up of claims | An Entity Attestation Token (EAT) is a message made up of claims | |||
about an entity. An entity may be a device, some hardware or some | about an entity. An entity may be a device, some hardware, or some | |||
software. The claims are ultimately used by a relying party who | software. The claims are ultimately used by a relying party who | |||
decides if and how it will interact with the entity. The relying | decides if and how it will interact with the entity. The relying | |||
party may choose to trust, not trust or partially trust the entity. | party may choose to trust, not trust, or partially trust the entity. | |||
For example, partial trust may be allowing a monetary transaction | For example, partial trust may be allowing a monetary transaction | |||
only up to a limit. | only up to a limit. | |||
The security model and goal for attestation are unique and are not | The security model and goal for attestation are unique and are not | |||
the same as for other security standards like those for server | the same as those for other security standards such as server | |||
authentication, user authentication and secured messaging. To give | authentication, user authentication, and secured messaging. To give | |||
an example of one aspect of the difference, consider the association | an example of one aspect of the difference, consider the association | |||
and life-cycle of key material. For authentication, keys are | and life cycle of key material. For authentication, keys are | |||
associated with a user or service and set up by actions performed by | associated with a user or service and are set up by actions performed | |||
a user or an operator of a service. For attestation, the keys are | by a user or an operator of a service. For attestation, the keys are | |||
associated with specific devices and are configured by device | associated with specific devices and are configured by device | |||
manufacturers. The reader is assumed to be familiar with the goals | manufacturers. Since the reader is assumed to be familiar with the | |||
and security model for attestation as described in RATS Architecture | goals and security model for attestation as described in "Remote | |||
[RFC9334] and are not repeated here. | ATtestation procedureS (RATS) Architecture" [RFC9334], they are not | |||
repeated here. | ||||
This document defines some common claims that are potentially of | This document defines some common claims that are potentially of | |||
broad use. EAT additionally allows proprietary claims and for | broad use. EAT additionally allows proprietary claims and for | |||
further claims to be standardized. Here are some examples: | further claims to be standardized. Here are some examples: | |||
* Make and model of manufactured consumer device | * Make and model of manufactured consumer device | |||
* Make and model of a chip or processor, particularly for a | * Make and model of a chip or processor, particularly for a | |||
security-oriented chip | security-oriented chip | |||
* Identification and measurement of the software running on a device | * Identification and measurement of the software running on a device | |||
* Configuration and state of a device | * Configuration and state of a device | |||
* Environmental characteristics of a device like its Global | * Environmental characteristics of a device such as its Global | |||
Positioning Sytem (GPS) location | Positioning System (GPS) location | |||
* Formal certifications received | * Formal certifications received | |||
EAT is constructed to support a wide range of use cases. | EAT is constructed to support a wide range of use cases. | |||
No single set of claims can accommodate all use cases so EAT is | No single set of claims can accommodate all use cases, so EAT is | |||
constructed as a framework for defining specific attestation tokens | constructed as a framework for defining specific attestation tokens | |||
for specific use cases. In particular, EAT provides a profile | for specific use cases. In particular, EAT provides a profile | |||
mechanism to be able to clearly specify the claims needed, the | mechanism to be able to clearly specify the claims needed, the | |||
cryptographic algorithms that should be used, and other | cryptographic algorithms that should be used, and other | |||
characteristics for a particular token and use case. Section 6 | characteristics for a particular token and use case. Section 6 | |||
describes profile contents and provides a profile that is suitable | describes profile contents and provides a profile that is suitable | |||
for constrained device use cases. | for constrained device use cases. | |||
The entity's EAT implementation generates the claims and typically | The entity's EAT implementation generates the claims and typically | |||
signs them with an attestation key. It is responsible for protecting | signs them with an attestation key. It is responsible for protecting | |||
the attestation key. Some EAT implementations will use components | the attestation key. Some EAT implementations will use components | |||
with very high resistance to attack like Trusted Platform Modules or | with very high resistance to attack such as Trusted Platform Modules | |||
Secure Elements. Others may rely solely on simple software defenses. | or Secure Elements. Others may rely solely on simple software | |||
defenses. | ||||
Nesting of tokens and claims sets is accommodated for composite | Nesting of tokens and claims sets is accommodated for composite | |||
devices that have multiple subsystems. | devices that have multiple subsystems. | |||
An EAT may be encoded in either JavaScript Object Notation (JSON) | An EAT may be encoded in either JavaScript Object Notation (JSON) | |||
[RFC8259] or Concise Binary Object Representation (CBOR) [RFC8949] as | [RFC8259] or Concise Binary Object Representation (CBOR) [RFC8949] as | |||
needed for each use case. EAT is built on CBOR Web Token (CWT) | needed for each use case. EAT is built on the CBOR Web Token (CWT) | |||
[RFC8392] and JSON Web Token (JWT) [RFC7519] and inherits all their | [RFC8392] and JSON Web Token (JWT) [RFC7519] and inherits all their | |||
characteristics and their security mechanisms. Like CWT and JWT, EAT | characteristics and their security mechanisms. Like CWT and JWT, EAT | |||
does not imply any message flow. | does not imply any message flow. | |||
Following is a very simple example. It is JSON format for easy | The following is a very simple example. It is presented in JSON | |||
reading, but could also be CBOR. Only the Claims-Set, the payload | format for easy reading, but it could also be CBOR. Only the Claims- | |||
for the JWT, is shown. | Set, the payload for the JWT, is shown. | |||
{ | { | |||
"eat_nonce": "MIDBNH28iioisjPy", | "eat_nonce": "MIDBNH28iioisjPy", | |||
"ueid": "AgAEizrK3Q", | "ueid": "AgAEizrK3Q", | |||
"oemid": 76543, | "oemid": 76543, | |||
"swname": "Acme IoT OS", | "swname": "Acme IoT OS", | |||
"swversion": "3.1.4" | "swversion": "3.1.4" | |||
} | } | |||
This example has a nonce for freshness. This nonce is the base64url | This example has a nonce for freshness. This nonce is the base64url | |||
encoding of a 12 byte random binary byte string. The ueid is | encoding of a 12-byte random binary byte string. The ueid (Universal | |||
effectively a serial number uniquely identifying the device. This | Entity ID) is effectively a serial number uniquely identifying the | |||
ueid is the base64url encoding of a 48-bit MAC address preceded by | device. This ueid is the base64url encoding of a 48-bit Media Access | |||
the type byte 0x02. The oemid identifies the manufacturer using a | Control (MAC) address preceded by the type byte 0x02. The oemid | |||
Private Enterprise Number [PEN]. The software is identified by a | (Hardware OEM ID) identifies the manufacturer using a Private | |||
Enterprise Number (PEN) [PEN]. The software is identified by a | ||||
simple string name and version. It could be identified by a full | simple string name and version. It could be identified by a full | |||
manifest, but this is a minimal example. | manifest, but this is a minimal example. | |||
1.1. Entity Overview | 1.1. Entity Overview | |||
This document uses the term "entity" to refer to the target of an | This document uses the term "entity" to refer to the target of an | |||
EAT. Most of the claims defined in this document are claims about an | EAT. Most of the claims defined in this document are claims about an | |||
entity. An entity is equivalent to a target environment in an | entity. An entity is equivalent to a target environment in an | |||
attester as defined in [RFC9334]. | attester as defined in [RFC9334]. | |||
skipping to change at page 7, line 24 ¶ | skipping to change at line 303 ¶ | |||
Submodules allow nesting of EATs and of claims-sets so that such | Submodules allow nesting of EATs and of claims-sets so that such | |||
hierarchies can be modeled. | hierarchies can be modeled. | |||
An entity is the same as a "system component", as defined in the | An entity is the same as a "system component", as defined in the | |||
Internet Security Glossary [RFC4949]. | Internet Security Glossary [RFC4949]. | |||
Note that [RFC4949] defines "entity" and "system entity" as synonyms, | Note that [RFC4949] defines "entity" and "system entity" as synonyms, | |||
and that they may be a person or organization in addition to being a | and that they may be a person or organization in addition to being a | |||
system component. In the EAT context, "entity" never refers to a | system component. In the EAT context, "entity" never refers to a | |||
person or organization. The hardware and software that implement a | person or organization. The hardware and software that implement a | |||
web site server or service may be an entity in the EAT sense, but the | website server or service may be an entity in the EAT sense, but the | |||
organization that operates, maintains or hosts the web site is not an | organization that operates, maintains, or hosts the website is not an | |||
entity. | entity. | |||
Some examples of entities: | Some examples of entities: | |||
* A Secure Element | * A Secure Element | |||
* A Trusted Execution Environment (TEE) | * A Trusted Execution Environment (TEE) | |||
* A network card in a router | * A network card in a router | |||
* A router, perhaps with each network card in the router a submodule | * A router, perhaps with each network card in the router being a | |||
submodule | ||||
* An Internet of Things (IoT) device | * An IoT device | |||
* An individual process | * An individual process | |||
* An app on a smartphone | * An app on a smartphone | |||
* A smartphone with many submodules for its many subsystems | * A smartphone with many submodules for its many subsystems | |||
* A subsystem in a smartphone like the modem or the camera | * A subsystem in a smartphone such as the modem or the camera | |||
An entity may have strong security defenses against hardware invasive | An entity may have strong security defenses against hardware-invasive | |||
attacks. It may also have low security, having no special security | attacks. It may also have low security, i.e., having no special | |||
defenses. There is no minimum security requirement to be an entity. | security defenses. There is no minimum security requirement to be an | |||
entity. | ||||
1.2. EAT as a Framework | 1.2. EAT as a Framework | |||
EAT is a framework for defining attestation tokens for specific use | EAT is a framework for defining attestation tokens for specific use | |||
cases, not a specific token definition. While EAT is based on and | cases, not a specific token definition. While EAT is based on and | |||
compatible with CWT and JWT, it can also be described as: | compatible with CWT and JWT, it can also be described as: | |||
* An identification and type system for claims in claims-sets | * An identification and type system for claims in claims-sets | |||
* Definitions of common attestation-oriented claims | * Definitions of common attestation-oriented claims | |||
* Claims defined in CDDL and serialized using CBOR or JSON | * Claims defined in Concise Data Definition Language (CDDL) and | |||
serialized using CBOR or JSON | ||||
* Security envelopes based on CBOR Object Signing and Encryption | * Security envelopes based on CBOR Object Signing and Encryption | |||
(COSE) and Javascript Object Signing and Encryption (JOSE) | (COSE) and JSON Object Signing and Encryption (JOSE) | |||
* Nesting of claims sets and tokens to represent complex and | * The nesting of claims sets and tokens to represent complex and | |||
compound devices | compound devices | |||
* A profile mechanism for specifying and identifying specific tokens | * A profile mechanism for specifying and identifying specific tokens | |||
for specific use cases | for specific use cases | |||
EAT uses the name/value pairs the same as CWT and JWT to identify | EAT uses name/value pairs to identify individual claims the same way | |||
individual claims. Section 4 defines common attestation-oriented | as CWT and JWT. Section 4 defines common attestation-oriented claims | |||
claims that are added to the CWT and JWT IANA registries. As with | that have been added to the "CBOR Web Token (CWT) Claims" and "JSON | |||
CWT and JWT, no claims are mandatory and claims not recognized should | Web Token Claims" IANA registries. As with CWT and JWT, no claims | |||
be ignored. | are mandatory and claims not recognized should be ignored. | |||
Unlike, but compatible with CWT and JWT, EAT defines claims using | Unlike (but compatible with) CWT and JWT, EAT defines claims using | |||
Concise Data Definition Language (CDDL) [RFC8610]. In most cases the | CDDL [RFC8610]. In most cases, the same CDDL definition is used for | |||
same CDDL definition is used for both the CBOR/CWT serialization and | both the CBOR/CWT serialization and the JSON/JWT serialization. | |||
the JSON/JWT serialization. | ||||
Like CWT and JWT, EAT uses COSE and JOSE to provide authenticity, | Like CWT and JWT, EAT uses COSE and JOSE to provide authenticity, | |||
integrity and optionally confidentiality. EAT places no new | integrity, and optionally confidentiality. EAT places no new | |||
restrictions on cryptographic algorithms, retaining all the | restrictions on cryptographic algorithms, retaining all the | |||
cryptographic flexibility of CWT, COSE, JWT and JOSE. | cryptographic flexibility of CWT, COSE, JWT, and JOSE. | |||
EAT defines a means for nesting tokens and claims sets to accommodate | EAT defines a means for nesting tokens and claims sets to accommodate | |||
composite devices that have multiple subsystems and multiple | composite devices that have multiple subsystems and multiple | |||
attesters. Tokens with security envelopes or bare claims sets may be | attesters. Tokens with security envelopes or bare claims sets may be | |||
embedded in an enclosing token. The nested token and the enclosing | embedded in an enclosing token. The nested token and the enclosing | |||
token do not have to use the same encoding (e.g., a CWT may be | token do not have to use the same encoding (e.g., a CWT may be | |||
enclosed in a JWT). | enclosed in a JWT). | |||
EAT adds the ability to detach claims sets and send them separately | EAT adds the ability to detach claims sets and send them separately | |||
from a security-enveloped EAT that contains a digest of the detached | from a security-enveloped EAT that contains a digest of the detached | |||
claims set. | claims set. | |||
This document registers no media or content types for the | This document registers no media or content types for the | |||
identification of the type of EAT, its serialization encoding or | identification of the EAT type, serialization encoding, or security | |||
security envelope. The definition and registration of EAT media | envelope. The definition and registration of EAT media types are | |||
types is addressed in [EAT.media-types]. | addressed in [EAT.media-types]. | |||
Finally, the notion of an EAT profile is introduced that facilitates | Finally, the notion of an EAT profile that facilitates the creation | |||
the creation of narrowed definitions of EATs for specific use cases | of narrowed definitions of EATs for specific use cases in follow-on | |||
in follow-on documents. One basic profile for constrained devices is | documents is introduced. One basic profile for constrained devices | |||
normatively defined. | is normatively defined. | |||
1.3. Operating Model and RATS Architecture | 1.3. Operating Model and RATS Architecture | |||
EAT follows the operational model described in Figure 1 in RATS | EAT follows the operational model described in Figure 1 of RATS | |||
Architecture [RFC9334]. To summarize, an attester generates evidence | Architecture (Section 3 of [RFC9334]). To summarize, an attester | |||
in the form of a claims set describing various characteristics of an | generates evidence in the form of a claims set describing various | |||
entity. Evidence is usually signed by a key that proves the attester | characteristics of an entity. Evidence is usually signed by a key | |||
and the evidence it produces are authentic. The claims set either | that proves the attester and the evidence it produces are authentic. | |||
includes a received nonce or uses some other means to assure | The claims set either includes a received nonce or uses some other | |||
freshness. | means to assure freshness. | |||
A verifier confirms an EAT is valid by verifying the signature and | A verifier confirms an EAT is valid by verifying the signature and | |||
may vet some claims using reference values. The verifier then | may vet some claims using reference values. The verifier then | |||
produces attestation results, which may also be represented as an | produces attestation results, which may also be represented as an | |||
EAT. The attestation results are provided to the relying party, | EAT. The attestation results are provided to the relying party, | |||
which is the ultimate consumer of the Remote Attestation Procedure. | which is the ultimate consumer of the RAT. The relying party uses | |||
The relying party uses the attestation results as needed for its use | the attestation results as needed for its use case, perhaps allowing | |||
case, perhaps allowing an entity to access a network, allowing a | an entity to access a network, a financial transaction, or such. In | |||
financial transaction or such. In some cases, the verifier and | some cases, the verifier and relying party are not distinct entities. | |||
relying party are not distinct entities. | ||||
1.3.1. Relationship between Evidence and Attestation Results | 1.3.1. Relationship between Evidence and Attestation Results | |||
Any claim defined in this document or in the IANA CWT or JWT registry | Any claim defined in this document or in the IANA "CBOR Web Token | |||
may be used in evidence or attestation results. The relationship of | (CWT) Claims" or "JSON Web Token Claims" registries may be used in | |||
claims in attestation results to evidence is fundamentally governed | evidence or attestation results. The relationship of claims in | |||
by the verifier and the verifier's policy. | attestation results to evidence is fundamentally governed by the | |||
verifier and the verifier's policy. | ||||
A common use case is for the verifier and its policy to perform | A common use case is for the verifier and its policy to perform | |||
checks, calculations and processing with evidence as the input to | checks, calculations, and processing with evidence as the input to | |||
produce a summary result in attestation results that indicates the | produce a summary result in attestation results that indicates the | |||
overall health and status of the entity. For example, measurements | overall health and status of the entity. For example, measurements | |||
in evidence may be compared to reference values the results of which | in evidence may be compared to reference values, the results of which | |||
are represented as a simple pass/fail in attestation results. | are represented as a simple pass/fail in attestation results. | |||
It is also possible that some claims in the Evidence will be | It is also possible that some claims in the evidence will be | |||
forwarded unmodified to the relying party in attestation results. | forwarded unmodified to the relying party in attestation results. | |||
This forwarding is subject to the verifier's implementation and | This forwarding is subject to the verifier's implementation and | |||
policy. The relying party should be aware of the verifier's policy | policy. The relying party should be aware of the verifier's policy | |||
to know what checks it has performed on claims it forwards. | to know what checks it has performed on claims it forwards. | |||
The verifier may modify claims it forwards, for example, to implement | The verifier may modify claims it forwards, for example, to implement | |||
a privacy preservation functionality. It is also possible the | a privacy preservation functionality. It is also possible the | |||
verifier will put claims in the attestation results that give details | verifier will put claims in the attestation results that give details | |||
about the entity that it has computed or looked up in a database. | about the entity that it has computed or looked up in a database. | |||
For example, the verifier may be able to put an "oemid" claim in the | For example, the verifier may be able to put an "oemid" claim in the | |||
attestation results by performing a look up based on a "ueid" claim | attestation results by performing a lookup based on a "ueid" claim | |||
(e.g., serial number) it received in evidence. | (e.g., serial number) it received in evidence. | |||
This specification does not establish any normative rules for the | This specification does not establish any normative rules for the | |||
verifier to follow, as these are a matter of local policy. It is up | verifier to follow, as these are a matter of local policy. It is up | |||
to each relying party to understand the processing rules of each | to each relying party to understand the processing rules of each | |||
verifier to know how to interpret claims in attestation results. | verifier to know how to interpret claims in attestation results. | |||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
skipping to change at page 10, line 41 ¶ | skipping to change at line 461 ¶ | |||
In this document, the structure of data is specified in CDDL | In this document, the structure of data is specified in CDDL | |||
[RFC8610] [RFC9165]. | [RFC8610] [RFC9165]. | |||
The examples in Appendix A use CBOR diagnostic notation defined in | The examples in Appendix A use CBOR diagnostic notation defined in | |||
Section 8 of [RFC8949] and Appendix G of [RFC8610]. | Section 8 of [RFC8949] and Appendix G of [RFC8610]. | |||
This document reuses terminology from JWT [RFC7519] and CWT | This document reuses terminology from JWT [RFC7519] and CWT | |||
[RFC8392]: | [RFC8392]: | |||
base64url-encoded: base64url-encoded is as described in [RFC7515], | base64url encoded: As described in [RFC7515], i.e., using a URL- and | |||
i.e., using URL- and filename-safe character set [RFC4648] with | filename-safe character set [RFC4648] with all trailing '=' | |||
all trailing '=' characters omitted and without the inclusion of | characters omitted and without the inclusion of any line breaks, | |||
any line breaks, whitespace, or other additional characters. | whitespace, or other additional characters. | |||
Claim: A piece of information asserted about a subject. A claim is | Claim: A piece of information asserted about a subject. A claim is | |||
represented as a value and either a name or key to identify it. | represented as a value and either a name or a key to identify it. | |||
Claim Name: A unique text string that identifies the claim. It is | Claim Name: A unique text string that identifies the claim. It is | |||
used as the claim name for JSON encoding. | used as the claim name for JSON encoding. | |||
Claim Key: The CBOR map key used to identify a claim. (The term | Claim Key: The CBOR map key used to identify a claim. (The term | |||
"Claim Key" comes from CWT. This document, like COSE, uses the | "Claim Key" comes from CWT. This document, like COSE [RFC9052], | |||
term "label" to refer to CBOR map keys to avoid confusion with | uses the term "label" to refer to CBOR map keys to avoid confusion | |||
cryptographic keys.) | with cryptographic keys.) | |||
Claim Value: The value portion of the claim. A claim value can be | Claim Value: The value portion of the claim. A claim value can be | |||
any CBOR data item or JSON value. | any CBOR data item or JSON value. | |||
Claims Set: The CBOR map or JSON object that contains the claims | Claims Set: The CBOR map or JSON object that contains the claims | |||
conveyed by the CWT or JWT. | conveyed by the CWT or JWT. | |||
This document reuses terminology from RATS Architecure [RFC9334]: | This document reuses terminology from RATS Architecture [RFC9334]: | |||
Attester: A role performed by an entity (typically a device) whose | Attester: A role performed by an entity (typically a device) whose | |||
evidence must be appraised in order to infer the extent to which | evidence must be appraised in order to infer the extent to which | |||
the attester is considered trustworthy, such as when deciding | the attester is considered trustworthy, such as when deciding | |||
whether it is authorized to perform some operation. | whether it is authorized to perform some operation. | |||
Verifier: A role that appraises the validity of evidence about an | Verifier: A role that appraises the validity of evidence about an | |||
attester and produces attestation results to be used by a relying | attester and produces attestation results to be used by a relying | |||
party. | party. | |||
Relying Party: A role that depends on the validity of information | Relying Party: A role that depends on the validity of information | |||
about an attester, for purposes of reliably applying application | about an attester for purposes of reliably applying application- | |||
specific actions. Compare /relying party/ in [RFC4949]. | specific actions. For comparison, see "relying party" in | |||
[RFC4949]. | ||||
Evidence: A set of claims generated by an attester to be appraised | Evidence: A set of claims generated by an attester to be appraised | |||
by a verifier. Evidence may include configuration data, | by a verifier. Evidence may include configuration data, | |||
measurements, telemetry, or inferences. | measurements, telemetry, or inferences. | |||
Attestation Results: The output generated by a verifier, typically | Attestation Results: The output generated by a verifier, typically | |||
including information about an attester, where the verifier | including information about an attester, where the verifier | |||
vouches for the validity of the results | vouches for the validity of the results. | |||
Reference Values: A set of values against which values of claims can | Reference Values: A set of values against which values of claims can | |||
be compared as part of applying an appraisal policy for evidence. | be compared as part of applying an appraisal policy for evidence. | |||
Reference Values are sometimes referred to in other documents as | Reference values are sometimes referred to in other documents as | |||
known-good values, golden measurements, or nominal values, | "known-good values", "golden measurements", or "nominal values", | |||
although those terms typically assume comparison for equality, | although those terms typically assume comparison for equality | |||
whereas here reference values might be more general and be used in | whereas reference values in this document might be more general | |||
any sort of comparison. | and used in any sort of comparison. | |||
Endorsement: A secure statement that an Endorser vouches for the | Endorsement: A secure statement that an endorser vouches for the | |||
integrity of an attester's various capabilities such as claims | integrity of an attester's various capabilities such as claims | |||
collection and evidence signing. | collection and evidence signing. | |||
This document reuses terminology from CDDL [RFC8610]: | This document reuses terminology from CDDL [RFC8610]: | |||
Group Socket: refers to the mechanism by which a CDDL definition is | Group Socket: The mechanism by which a CDDL definition is extended, | |||
extended, as described in [RFC8610] and [RFC9165] | as described in [RFC8610] and [RFC9165]. | |||
3. Top-Level Token Definition | 3. Top-Level Token Definition | |||
An "EAT" is an encoded (serialized) message the purpose of which is | An "EAT" is an encoded (serialized) message, the purpose of which is | |||
to transfer a Claims-Set between two parties. An EAT MUST contain a | to transfer a Claims-Set between two parties. An EAT MUST contain a | |||
Claims-Set. In this document an EAT is always a CWT or JWT. | Claims-Set. In this document, an EAT is always a CWT or JWT. | |||
An EAT MUST have authenticity and integrity protection. CWT and JWT | An EAT MUST have authenticity and integrity protection. CWT and JWT | |||
provide that in this document. | provide that in this document. | |||
Further documents may define other encodings and security mechanims | Further documents may define other encodings and security mechanisms | |||
for EAT. | for EAT. | |||
The identification of a protocol element as an EAT follows the | The identification of a protocol element as an EAT follows the | |||
general conventions used for CWTs and JWTs. Identification depends | general conventions used for CWTs and JWTs. Identification depends | |||
on the protocol carrying the EAT. In some cases it may be by media | on the protocol carrying the EAT. In some cases, it may be by media | |||
type (e.g., in a HTTP Content-Type field). In other cases it may be | type (e.g., in an HTTP Content-Type field). In other cases, it may | |||
through use of CBOR tags. There is no fixed mechanism across all use | be through use of CBOR tags. There is no fixed mechanism across all | |||
cases. | use cases. | |||
This document also defines another message, the detached EAT bundle | This document also defines another message, the detached EAT bundle | |||
(see Section 5), which holds a collection of detached claims sets and | (see Section 5), which holds a collection of detached claims sets and | |||
an EAT that provides integrity and authenticity protection for them. | an EAT that provides integrity and authenticity protection for them. | |||
Detached EAT bundles can be either CBOR or JSON encoded. | Detached EAT bundles can be either CBOR or JSON encoded. | |||
The following CDDL defines the top-level $EAT-CBOR-Tagged-Token, | The following CDDL defines the top-level $EAT-CBOR-Tagged-Token, | |||
$EAT-CBOR-Untagged-Token and $EAT-JSON-Token-Formats sockets (see | $EAT-CBOR-Untagged-Token, and $EAT-JSON-Token-Formats sockets (see | |||
Section 3.9 of [RFC8610]), enabling future token formats to be | Section 3.9 of [RFC8610]), enabling future token formats to be | |||
defined. Any new format that plugs into one or more of these sockets | defined. Any new format that plugs into one or more of these sockets | |||
MUST be defined by an IETF standards action. Of particular use may | MUST be defined by an IETF Standards Action [RFC8126]. Of particular | |||
be a token type that provides no direct authenticity or integrity | use may be a token type that provides no direct authenticity or | |||
protection for use with transports mechanisms that do provide the | integrity protection for use with transport mechanisms that do | |||
necessary security services [UCCS]. | provide the necessary security services [UCCS]. | |||
Nesting of EATs is allowed and defined in Section 4.2.18.3. This | Nesting of EATs is allowed and defined in Section 4.2.18.3. This | |||
includes the nesting of an EAT that is a different format than the | includes the nesting of an EAT that is in a different format than the | |||
enclosing EAT, i.e., the nested EAT may be encoded using CBOR and the | enclosing EAT, i.e., the nested EAT may be encoded using CBOR and the | |||
enclosing EAT encoded using JSON or vice versa. The definition of | enclosing EAT encoded using JSON or vice versa. The definition of | |||
Nested-Token references the CDDL defined in this section. When new | Nested-Token references the CDDL defined in this section. When new | |||
token formats are defined, the means for identification in a nested | token formats are defined, the means for identification in a nested | |||
token MUST also be defined. | token MUST also be defined. | |||
The top-level CDDL type for CBOR-encoded EATs is EAT-CBOR-Token and | The top-level CDDL type for CBOR-encoded EATs is EAT-CBOR-Token and | |||
for JSON is EAT-JSON-Token (while CDDL and CDDL tools provide enough | for JSON-encoded EATs is EAT-JSON-Token (while CDDL and CDDL tools | |||
support for shared definitions of most items in this document, they | provide enough support for shared definitions of most items in this | |||
do not provide enough support for this sharing at the top level). | document, they do not provide enough support for this sharing at the | |||
top level). | ||||
EAT-CBOR-Token = $EAT-CBOR-Tagged-Token / $EAT-CBOR-Untagged-Token | EAT-CBOR-Token = $EAT-CBOR-Tagged-Token / $EAT-CBOR-Untagged-Token | |||
$EAT-CBOR-Tagged-Token /= CWT-Tagged-Message | $EAT-CBOR-Tagged-Token /= CWT-Tagged-Message | |||
$EAT-CBOR-Tagged-Token /= BUNDLE-Tagged-Message | $EAT-CBOR-Tagged-Token /= BUNDLE-Tagged-Message | |||
$EAT-CBOR-Untagged-Token /= CWT-Untagged-Message | $EAT-CBOR-Untagged-Token /= CWT-Untagged-Message | |||
$EAT-CBOR-Untagged-Token /= BUNDLE-Untagged-Message | $EAT-CBOR-Untagged-Token /= BUNDLE-Untagged-Message | |||
EAT-JSON-Token = $EAT-JSON-Token-Formats | EAT-JSON-Token = $EAT-JSON-Token-Formats | |||
$EAT-JSON-Token-Formats /= JWT-Message | $EAT-JSON-Token-Formats /= JWT-Message | |||
$EAT-JSON-Token-Formats /= BUNDLE-Untagged-Message | $EAT-JSON-Token-Formats /= BUNDLE-Untagged-Message | |||
4. The Claims | 4. The Claims | |||
This section describes new claims defined for attestation that are to | This section describes new claims defined for attestation that have | |||
be added to the CWT [IANA.CWT.Claims] and JWT [IANA.JWT.Claims] IANA | been added to the IANA "CBOR Web Token (CWT) Claims" | |||
[IANA.CWT.Claims] and "JSON Web Token Claims" [IANA.JWT.Claims] | ||||
registries. | registries. | |||
All definitions, requirements, creation and validation procedures, | All definitions, requirements, creation and validation procedures, | |||
security considerations, IANA registrations and so on from CWT and | security considerations, IANA registrations, and so on from CWT and | |||
JWT carry over to EAT. | JWT carry over to EAT. | |||
This section also describes how several extant CWT and JWT claims | This section also describes how several extant CWT and JWT claims | |||
apply in EAT. | apply in EAT. | |||
The set of claims that an EAT must contain to be considered valid is | The set of claims that an EAT must contain to be considered valid is | |||
context dependent and is outside the scope of this specification. | context dependent and is outside the scope of this specification. | |||
Specific applications of EATs will require implementations to | Specific applications of EATs will require implementations to | |||
understand and process some claims in particular ways. However, in | understand and process some claims in particular ways. However, in | |||
the absence of such requirements, all claims that are not understood | the absence of such requirements, all claims that are not understood | |||
by implementations MUST be ignored. | by implementations MUST be ignored. | |||
CDDL, along with a text description, is used to define each claim | CDDL, along with a text description, is used to define each claim | |||
independent of encoding. Each claim is defined as a CDDL group. In | independent of encoding. Each claim is defined as a CDDL group. In | |||
Section 7 on encoding, the CDDL groups turn into CBOR map entries and | "Encoding and Collected CDDL" (Section 7), the CDDL groups turn into | |||
JSON name/value pairs. | CBOR map entries and JSON name/value pairs. | |||
Each claim defined in this document is added to the $$Claims-Set- | Each claim defined in this document is added to the $$Claims-Set- | |||
Claims group socket. Claims defined by other specifications MUST | Claims group socket. Claims defined by other specifications MUST | |||
also be added to the $$Claims-Set-Claims group socket. | also be added to the $$Claims-Set-Claims group socket. | |||
All claims in an EAT MUST use the same encoding except where | All claims in an EAT MUST use the same encoding except where | |||
otherwise explicitly stated (e.g., in a CBOR-encoded token, all | otherwise explicitly stated (e.g., in a CBOR-encoded token, all | |||
claims must be CBOR-encoded). | claims must be encoded with CBOR). | |||
This specification includes a CDDL definition of most of what is | This specification includes a CDDL definition of most of what is | |||
defined in [RFC8392]. Similarly, this specification includes CDDL | defined in [RFC8392]. Similarly, this specification includes CDDL | |||
for most of what is defined in [RFC7519]. These definitions are in | for most of what is defined in [RFC7519]. These definitions are in | |||
Appendix D and are not normative. | Appendix D and are not normative. | |||
Each claim described has a unique text string and integer that | Each claim described has a unique text string and integer that | |||
identifies it. CBOR-encoded tokens MUST use only the integer for | identifies it. CBOR-encoded tokens MUST only use the integer for | |||
claim keys. JSON-encoded tokens MUST use only the text string for | claim keys. JSON-encoded tokens MUST only use the text string for | |||
claim names. | claim names. | |||
4.1. eat_nonce (EAT Nonce) Claim | 4.1. eat_nonce (EAT Nonce) Claim | |||
An EAT nonce is either a byte or text string or an array of byte or | An EAT nonce is either a byte, a text string, or an array of bytes or | |||
text strings. The array option supports multistage EAT verification | text strings. The array option supports multistage EAT verification | |||
and consumption. | and consumption. | |||
A claim named "nonce" was defined and registered with IANA for JWT, | A claim named "nonce" was defined for JWT and registered with IANA in | |||
but MUST NOT be used because it does not support multiple nonces. No | the "JSON Web Token Claims" registry, but it MUST NOT be used because | |||
previous "nonce" claim was defined for CWT. To distinguish from the | it does not support multiple nonces. No previous "nonce" claim was | |||
previously defined JWT "nonce" claim, this claim is named "eat_nonce" | defined for CWT. To distinguish from the previously defined JWT | |||
in JSON-encoded EATs. The CWT nonce defined here is intended for | "nonce" claim, this claim is named "eat_nonce" in JSON-encoded EATs. | |||
general purpose use and retains the "Nonce" claim name instead of an | The CWT nonce defined here is intended for general purpose use and | |||
EAT-specific name. | retains the "Nonce" claim name instead of an EAT-specific name. | |||
An EAT nonce MUST have at least 64 bits of entropy. A maximum EAT | An EAT nonce MUST have at least 64 bits of entropy. A maximum EAT | |||
nonce size is set to limit the memory required for an implementation. | nonce size is set to limit the memory required for an implementation. | |||
All receivers MUST be able to accommodate the maximum size. | All receivers MUST be able to accommodate the maximum size. | |||
In CBOR, an EAT nonce is a byte string between 8 and 64 bytes in | In CBOR, an EAT nonce is a byte string between 8 and 64 bytes in | |||
length. In JSON, an EAT nonce is a text string between 8 and 88 | length. In JSON, an EAT nonce is a text string between 8 and 88 | |||
bytes in length. | bytes in length. | |||
$$Claims-Set-Claims //= | $$Claims-Set-Claims //= | |||
skipping to change at page 15, line 8 ¶ | skipping to change at line 665 ¶ | |||
4.2. Claims Describing the Entity | 4.2. Claims Describing the Entity | |||
The claims in this section describe the entity itself. They describe | The claims in this section describe the entity itself. They describe | |||
the entity whether they occur in evidence or occur in attestation | the entity whether they occur in evidence or occur in attestation | |||
results. See Section 1.3.1 for discussion on how attestation results | results. See Section 1.3.1 for discussion on how attestation results | |||
relate to evidence. | relate to evidence. | |||
4.2.1. ueid (Universal Entity ID) Claim | 4.2.1. ueid (Universal Entity ID) Claim | |||
The "ueid" claim conveys a UEID, which identifies an individual | The "ueid" claim conveys a UEID, which identifies an individual | |||
manufactured entity like a mobile phone, a water meter, a Bluetooth | manufactured entity such as a mobile phone, water meter, Bluetooth | |||
speaker or a networked security camera. It may identify the entire | speaker, or networked security camera. It may identify the entire | |||
entity or a submodule. It does not identify types, models or classes | entity or a submodule. It does not identify types, models, or | |||
of entities. It is akin to a serial number, though it does not have | classes of entities. It is akin to a serial number, though it does | |||
to be sequential. | not have to be sequential. | |||
UEIDs MUST be universally and globally unique across manufacturers | UEIDs MUST be universally and globally unique across manufacturers | |||
and countries, as described in Section 4.2.1.1. UEIDs MUST also be | and countries, as described in Section 4.2.1.1. UEIDs MUST also be | |||
unique across protocols and systems, as tokens are intended to be | unique across protocols and systems, as tokens are intended to be | |||
embedded in many different protocols and systems. No two products | embedded in many different protocols and systems. No two products | |||
anywhere, even in completely different industries made by two | anywhere, even in completely different industries made by two | |||
different manufacturers in two different countries should have the | different manufacturers in two different countries, should have the | |||
same UEID (if they are not global and universal in this way, then | same UEID (if they are not global and universal in this way, then | |||
relying parties receiving them will have to track other | relying parties receiving them will have to track other | |||
characteristics of the entity to keep entities distinct between | characteristics of the entity to keep entities distinct between | |||
manufacturers). | manufacturers). | |||
UEIDs are not designed for direct use by humans (e.g., printing on | UEIDs are not designed for direct use by humans (e.g., printing on | |||
the case of a device), so no such representation is defined. | the case of a device), so no such representation is defined. | |||
There are privacy considerations for UEIDs. See Section 8.1. | There are privacy considerations for UEIDs. See Section 8.1. | |||
A Device Identifier URN is registered for UEIDs. See Section 10.3. | A Device Identifier (DevID) URN is registered for UEIDs. See | |||
Section 10.3. | ||||
$$Claims-Set-Claims //= (ueid-label => ueid-type) | $$Claims-Set-Claims //= (ueid-label => ueid-type) | |||
ueid-type = JC<base64-url-text .size (10..44) , bstr .size (7..33)> | ueid-type = JC<base64-url-text .size (10..44) , bstr .size (7..33)> | |||
4.2.1.1. Rules for Creating UEIDs | 4.2.1.1. Rules for Creating UEIDs | |||
These rules are solely for the creation of UEIDs. The EAT consumer | These rules are solely for the creation of UEIDs. The EAT consumer | |||
need not have any awareness of them. | need not have any awareness of them. | |||
A UEID is constructed of a single type byte followed by the unique | A UEID is constructed of a single type byte followed by the unique | |||
bytes for that type. The type byte assures global uniqueness of a | bytes for that type. The type byte assures global uniqueness of a | |||
UEID even if the unique bytes for different types are accidentally | UEID even if the unique bytes for different types are accidentally | |||
the same. | the same. | |||
UEIDS are variable length to accommodate the types defined here and | UEIDS are of variable length to accommodate the types defined here as | |||
future-defined types. | well as future-defined types. | |||
UEIDs SHOULD NOT be longer than 33 bytes. If they are longer, there | UEIDs SHOULD NOT be longer than 33 bytes. If they are longer, there | |||
is no guarantee that a receiver will be able to accept them. See | is no guarantee that a receiver will be able to accept them. See | |||
Appendix B. | Appendix B. | |||
A UEID is permanent. It MUST NOT change for a given entity. | A UEID is permanent. It MUST NOT change for a given entity. | |||
The different types of UEIDs 1) accommodate different manufacturing | The different types of UEIDs 1) accommodate different manufacturing | |||
processes, 2) accommodate small UEIDs, 3) provide an option that does | processes, 2) accommodate small UEIDs, and 3) provide an option that | |||
not require registration fees and central administration. | does not require registration fees and central administration. | |||
In the unlikely event that a new UEID type is needed, it MUST be | In the unlikely event that a new UEID type is needed, it MUST be | |||
defined in a standards-track update to this document. | defined in an update to this document on the Standards Track. | |||
A manufacturer of entities MAY use different types for different | A manufacturer of entities MAY use different types for different | |||
products. They MAY also change from one type to another for a given | products. They MAY also change from one type to another for a given | |||
product or use one type for some items of a given product and another | product or use one type for some items of a given product and another | |||
type for other. | type for others. | |||
+======+======+=====================================================+ | +======+======+=====================================================+ | |||
| Type | Type | Specification | | | Type | Type | Specification | | |||
| Byte | Name | | | | Byte | Name | | | |||
+======+======+=====================================================+ | +======+======+=====================================================+ | |||
| 0x01 | RAND | This is a 128, 192 or 256-bit random number | | | 0x01 | RAND | This is a 128-, 192-, or 256-bit random number | | |||
| | | generated once and stored in the entity. This | | | | | generated once and stored in the entity. This | | |||
| | | may be constructed by concatenating enough | | | | | may be constructed by concatenating enough | | |||
| | | identifiers to make up an equivalent number of | | | | | identifiers to make up an equivalent number of | | |||
| | | random bits and then feeding the concatenation | | | | | random bits and then feeding the concatenation | | |||
| | | through a cryptographic hash function. It may | | | | | through a cryptographic hash function. It may | | |||
| | | also be a cryptographic quality random number | | | | | also be a cryptographic quality random number | | |||
| | | generated once at the beginning of the life of | | | | | generated once at the beginning of the life of | | |||
| | | the entity and stored. It MUST NOT be smaller | | | | | the entity and stored. It MUST NOT be smaller | | |||
| | | than 128 bits. See the length analysis in | | | | | than 128 bits. See the length analysis in | | |||
| | | Appendix B. | | | | | Appendix B. | | |||
+------+------+-----------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
| 0x02 | IEEE | This makes use of the device identification | | | 0x02 | IEEE | This makes use of the device identification | | |||
| | EUI | scheme operated by the IEEE. An EUI is either | | | | EUI | scheme operated by the IEEE. An Extended Unique | | |||
| | | an EUI-48, EUI-60 or EUI-64 and made up of an | | | | | Identifier (EUI) is either an EUI-48, EUI-60, or | | |||
| | | OUI, OUI-36 or a CID, different registered | | | | | EUI-64 that is made up of an Organizationally | | |||
| | | company identifiers, and some unique per-entity | | | | | Unique Identifier (OUI), an OUI-36, or a Company | | |||
| | | identifier. EUIs are often the same as or | | | | | ID (CID), which are different registered company | | |||
| | | identifiers and some unique per-entity | | ||||
| | | identifiers. EUIs are often the same as or | | ||||
| | | similar to MAC addresses. This type includes | | | | | similar to MAC addresses. This type includes | | |||
| | | MAC-48, an obsolete name for EUI-48. (Note that | | | | | MAC-48, an obsolete name for EUI-48. (Note that | | |||
| | | while entities with multiple network interfaces | | | | | while entities with multiple network interfaces | | |||
| | | may have multiple MAC addresses, there is only | | | | | may have multiple MAC addresses, there is only | | |||
| | | one UEID for an entity; changeable MAC addresses | | | | | one UEID for an entity; changeable MAC addresses | | |||
| | | that do not meet the permanence requirements in | | | | | that do not meet the permanence requirements in | | |||
| | | this document MUST NOT be used for the UEID or | | | | | this document MUST NOT be used for the UEID or | | |||
| | | SUEID) [IEEE.802-2001], [OUI.Guide]. | | | | | Semi-permanent UEID (SUEID).) See | | |||
| | | [IEEE.802-2001] and [OUI.Guide]. | | ||||
+------+------+-----------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
| 0x03 | IMEI | This makes use of the International Mobile | | | 0x03 | IMEI | This makes use of the International Mobile | | |||
| | | Equipment Identity (IMEI) scheme operated by the | | | | | Equipment Identity (IMEI) scheme operated by the | | |||
| | | GSMA. This is a 14-digit identifier consisting | | | | | Global System for Mobile Communications | | |||
| | | of an 8-digit Type Allocation Code (TAC) and a | | | | | Association (GSMA). This is a 14-digit | | |||
| | | 6-digit serial number allocated by the | | | | | identifier consisting of an 8-digit Type | | |||
| | | manufacturer, which SHALL be encoded as byte | | | | | Allocation Code (TAC) and a 6-digit serial | | |||
| | | string of length 14 with each byte as the | | | | | number allocated by the manufacturer, which | | |||
| | | digit's value (not the ASCII encoding of the | | | | | SHALL be encoded as a byte string of length 14 | | |||
| | | digit; the digit 3 encodes as 0x03, not 0x33). | | | | | with each byte as the digit's value (not the | | |||
| | | The IMEI value encoded SHALL NOT include Luhn | | | | | ASCII encoding of the digit; the digit 3 encodes | | |||
| | | checksum or SVN information. See | | | | | as 0x03, not 0x33). The IMEI encoded value | | |||
| | | SHALL NOT include the Luhn checksum or Software | | ||||
| | | Version Number (SVN) information. See | | ||||
| | | [ThreeGPP.IMEI]. | | | | | [ThreeGPP.IMEI]. | | |||
+------+------+-----------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
Table 1: UEID Composition Types | Table 1: UEID Composition Types | |||
4.2.1.2. Rules for Consuming UEIDs | 4.2.1.2. Rules for Consuming UEIDs | |||
For the consumer, a UEID is solely a globally unique opaque | For the consumer, a UEID is solely a globally unique opaque | |||
identifier. The consumer does not and should not have any awareness | identifier. The consumer does not and should not have any awareness | |||
of the rules and structure used to achieve global uniqueness. | of the rules and structure used to achieve global uniqueness. | |||
All implementations MUST be able to receive UEIDs up to 33 bytes | All implementations MUST be able to receive UEIDs up to 33 bytes | |||
long. 33 bytes is the longest defined in this document and gives | long. 33 bytes is the longest defined in this document and gives | |||
necessary entropy for probabilistic uniqueness. | necessary entropy for probabilistic uniqueness. | |||
The consumer of a UEID MUST treat it as a completely opaque string of | The consumer of a UEID MUST treat it as a completely opaque string of | |||
bytes and MUST NOT make any use of its internal structure. The | bytes and MUST NOT make any use of its internal structure. The | |||
reasons for this are: | reasons for this are: | |||
* UEIDs types vary freely from one manufacturer to the next. | * UEID types vary freely from one manufacturer to the next. | |||
* New types of UEIDs may be defined. | * New types of UEIDs may be defined. | |||
* The manufacturer of an entity is allowed to change from one type | * The manufacturer of an entity is allowed to change from one type | |||
of UEID to another anytime they want. | of UEID to another anytime they want. | |||
For example, when the consumer receives a type 0x02 UEID, they should | For example, when the consumer receives a type 0x02 UEID, they should | |||
not use the OUI part to identify the manufacturer of the device | not use the OUI part to identify the manufacturer of the device | |||
because there is no guarantee all UEIDs will be type 0x02. Different | because there is no guarantee all UEIDs will be type 0x02. Different | |||
manufacturers may use different types. A manufacturer may make some | manufacturers may use different types. A manufacturer may make some | |||
of their product with one type and others with a different type or | of their product with one type and others with a different type or | |||
even change to a different type for newer versions of their product. | even change to a different type for newer versions of their product. | |||
Instead, the consumer should use the "oemid" claim. | Instead, the consumer should use the "oemid" claim. | |||
4.2.2. sueids (Semi-permanent UEIDs) Claim (SUEIDs) | 4.2.2. sueids (Semi-permanent UEIDs) Claim (SUEIDs) | |||
The "sueids" claim conveys one or more semi-permanent UEIDs (SUEIDs). | The "sueids" claim conveys one or more semi-permanent UEIDs (SUEIDs). | |||
An SUEID has the same format, characteristics and requirements as a | An SUEID has the same format, characteristics, and requirements as a | |||
UEID, but MAY change to a different value on entity life-cycle | UEID but MAY change to a different value on entity life-cycle events. | |||
events. An entity MAY have both a UEID and SUEIDs, neither, one or | An entity MAY have both a UEID and SUEIDs, neither, or one or the | |||
the other. | other. | |||
Examples of life-cycle events are change of ownership, factory reset | Examples of life-cycle events are change of ownership, factory reset, | |||
and on-boarding into an IoT device management system. It is beyond | and onboarding into an IoT device management system. It is beyond | |||
the scope of this document to specify particular types of SUEIDs and | the scope of this document to specify particular types of SUEIDs and | |||
the life-cycle events that trigger their change. An EAT profile MAY | the life-cycle events that trigger their change. An EAT profile MAY | |||
provide this specification. | provide this specification. | |||
There MAY be multiple SUEIDs. Each has a text string label the | There MAY be multiple SUEIDs. Each has a text string label, the | |||
purpose of which is to distinguish it from others. The label MAY | purpose of which is to distinguish it from others. The label MAY | |||
name the purpose, application or type of the SUEID. For example, the | name the purpose, application, or type of the SUEID. For example, | |||
label for the SUEID used by XYZ Onboarding Protocol could thus be | the label for the SUEID used by the XYZ Onboarding Protocol could | |||
"XYZ". It is beyond the scope of this document to specify any SUEID | thus be "XYZ". It is beyond the scope of this document to specify | |||
labeling schemes. They are use case specific and MAY be specified in | any SUEID labeling schemes. They are use case specific and MAY be | |||
an EAT profile. | specified in an EAT profile. | |||
If there is only one SUEID, the claim remains a map and there still | If there is only one SUEID, the claim remains a map and there still | |||
MUST be a label. | MUST be a label. | |||
An SUEID provides functionality similar to an IEEE LDevID | An SUEID provides functionality similar to an IEEE Local Device | |||
[IEEE.802.1AR]. | Identifier (LDevID) [IEEE.802.1AR]. | |||
There are privacy considerations for SUEIDs. See Section 8.1. | There are privacy considerations for SUEIDs; see Section 8.1. | |||
A Device Identifier URN is registered for SUEIDs. See Section 10.3. | A DevID URN is registered for SUEIDs; see Section 10.3. | |||
$$Claims-Set-Claims //= (sueids-label => sueids-type) | $$Claims-Set-Claims //= (sueids-label => sueids-type) | |||
sueids-type = { | sueids-type = { | |||
+ tstr => ueid-type | + tstr => ueid-type | |||
} | } | |||
4.2.3. oemid (Hardware OEM Identification) Claim | 4.2.3. oemid (Hardware OEM ID) Claim | |||
The "oemid" claim identifies the Original Equipment Manufacturer | The "oemid" claim identifies the Original Equipment Manufacturer | |||
(OEM) of the hardware. Any of the three forms described below MAY be | (OEM) of the hardware. Any of the three forms described below MAY be | |||
used at the convenience of the claim sender. The receiver of this | used at the convenience of the claim sender. The receiver of this | |||
claim MUST be able to handle all three forms. | claim MUST be able to handle all three forms. | |||
Note that the "hwmodel" claim in Section 4.2.4, the "oemboot" claim | Note that the "hwmodel" claim in Section 4.2.4, the "oemboot" claim | |||
in Section 4.2.8 and "dbgstat" claim in Section 4.2.9 depend on this | in Section 4.2.8, and the "dbgstat" claim in Section 4.2.9 depend on | |||
claim. | this claim. | |||
Sometimes one manufacturer will acquire or merge with another. | Sometimes one manufacturer will acquire or merge with another. | |||
Depending on the situation and use case newly manfactured devices may | Depending on the situation and use case, newly manufactured devices | |||
continue to use the old OEM ID or switch to a new one. This is left | may continue to use the old OEM ID or switch to a new one. This is | |||
to the discretion of the manufacturers, but they should consider how | left to the discretion of the manufacturers, but they should consider | |||
it affects the above-mentioned claims and the attestation eco-system | how it affects the above-mentioned claims and the attestation | |||
for their devices. The considerations are the same for all three | ecosystem for their devices. The considerations are the same for all | |||
forms of this claim. | three forms of this claim. | |||
4.2.3.1. Random Number Based OEM ID | 4.2.3.1. Random Number-Based OEM ID | |||
The random number based OEM ID MUST be 16 bytes (128 bits) long. | The random number-based OEM ID MUST be 16 bytes (128 bits) long. | |||
The OEM may create their own ID by using a cryptographic-quality | The OEM may create their own ID by using a cryptographic-quality | |||
random number generator. They would perform this only once in the | random number generator. They would perform this only once in the | |||
life of the company to generate the single ID for said company. They | life of the company to generate the single ID for said company. They | |||
would use that same ID in every entity they make. This uniquely | would use that same ID in every entity they make. This uniquely | |||
identifies the OEM on a statistical basis and is large enough should | identifies the OEM on a statistical basis and is large enough should | |||
there be ten billion companies. | there be ten billion companies. | |||
In JSON-encoded tokens this MUST be base64url-encoded. | In JSON-encoded tokens, this MUST be base64url encoded. | |||
4.2.3.2. IEEE Based OEM ID | 4.2.3.2. IEEE-Based OEM ID | |||
The IEEE operates a global registry for MAC addresses and company | The IEEE operates a global registry for MAC addresses and company | |||
IDs. This claim uses that database to identify OEMs. The contents | IDs. This claim uses that database to identify OEMs. The contents | |||
of the claim may be either an IEEE MA-L, MA-M, MA-S or an IEEE CID | of the claim may be either an IEEE MA-L, MA-M, MA-S, or CID | |||
[IEEE-RA]. An MA-L, formerly known as an OUI, is a 24-bit value used | [IEEE-RA]. An MA-L (formerly known as an OUI) is a 24-bit value used | |||
as the first half of a MAC address. MA-M similarly is a 28-bit value | as the first half of a MAC address. Similarly, MA-M is a 28-bit | |||
uses as the first part of a MAC address, and MA-S, formerly known as | value used as the first part of a MAC address, and MA-S (formerly | |||
OUI-36, a 36-bit value. Many companies already have purchased one of | known as OUI-36) is a 36-bit value. Many companies already have | |||
these. A CID is also a 24-bit value from the same space as an MA-L, | purchased one of these. A CID is also a 24-bit value from the same | |||
but not for use as a MAC address. IEEE has published Guidelines for | space as an MA-L but is not for use as a MAC address. IEEE has | |||
Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup service | published Guidelines for Use of EUI, OUI, and CID [OUI.Guide] and | |||
[OUI.Lookup]. | provides a lookup service [OUI.Lookup]. | |||
Companies that have more than one of these IDs or MAC address blocks | Companies that have more than one of these IDs or MAC address blocks | |||
SHOULD select one and prefer that for all their entities. | SHOULD select one as preferred and use that for all their entities. | |||
Commonly, these are expressed in Hexadecimal Representation as | Commonly, these are expressed in hexadecimal representation as | |||
described in [IEEE.802-2001]. It is also called the Canonical | described in [IEEE.802-2001]. It is also called the canonical | |||
format. When this claim is encoded the order of bytes in the bstr | format. When this claim is encoded, the order of bytes in the bstr | |||
are the same as the order in the Hexadecimal Representation. For | is the same as the order in the hexadecimal representation. For | |||
example, an MA-L like "AC-DE-48" would be encoded in 3 bytes with | example, an MA-L like "AC-DE-48" would be encoded in 3 bytes with | |||
values 0xAC, 0xDE, 0x48. | values 0xAC, 0xDE, and 0x48. | |||
This format is always 3 bytes in size in CBOR. | This format is always 3 bytes in size in CBOR. | |||
In JSON-encoded tokens, this MUST be base64url-encoded and always 4 | In JSON-encoded tokens, this MUST be base64url encoded and always 4 | |||
bytes. | bytes. | |||
4.2.3.3. IANA Private Enterprise Number Based OEM ID | 4.2.3.3. IANA Private Enterprise Number-Based OEM ID | |||
IANA maintains a registry for Private Enterprise Numbers (PEN) [PEN]. | IANA maintains a registry for Private Enterprise Numbers [PEN]. A | |||
A PEN is an integer that identifies an enterprise and may be used to | PEN is an integer that identifies an enterprise, and it may be used | |||
construct an object identifier (OID) relative to the following OID | to construct an object identifier (OID) relative to the following OID | |||
arc that is managed by IANA: iso(1) identified-organization(3) dod(6) | arc that is managed by IANA: iso(1) identified-organization(3) dod(6) | |||
internet(1) private(4) enterprise(1). | internet(1) private(4) enterprise(1). | |||
For EAT purposes, only the integer value assigned by IANA as the PEN | For EAT purposes, only the integer value assigned by IANA as the PEN | |||
is relevant, not the full OID value. | is relevant, not the full OID value. | |||
In CBOR this value MUST be encoded as a major type 0 integer and is | In CBOR, this value MUST be encoded as a major type 0 integer and is | |||
typically 3 bytes. In JSON, this value MUST be encoded as a number. | typically 3 bytes. In JSON, this value MUST be encoded as a number. | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
oemid-label => oemid-pen / oemid-ieee / oemid-random | oemid-label => oemid-pen / oemid-ieee / oemid-random | |||
) | ) | |||
oemid-pen = int | oemid-pen = int | |||
oemid-ieee = JC<oemid-ieee-json, oemid-ieee-cbor> | oemid-ieee = JC<oemid-ieee-json, oemid-ieee-cbor> | |||
oemid-ieee-cbor = bstr .size 3 | oemid-ieee-cbor = bstr .size 3 | |||
oemid-ieee-json = base64-url-text .size 4 | oemid-ieee-json = base64-url-text .size 4 | |||
oemid-random = JC<oemid-random-json, oemid-random-cbor> | oemid-random = JC<oemid-random-json, oemid-random-cbor> | |||
oemid-random-cbor = bstr .size 16 | oemid-random-cbor = bstr .size 16 | |||
oemid-random-json = base64-url-text .size 24 | oemid-random-json = base64-url-text .size 24 | |||
4.2.4. hwmodel (Hardware Model) Claim | 4.2.4. hwmodel (Hardware Model) Claim | |||
The "hwmodel" claim differentiates hardware models, products and | The "hwmodel" claim differentiates hardware models, products, and | |||
variants manufactured by a particular OEM, the one identified by OEM | variants manufactured by a particular OEM, namely the one identified | |||
ID in Section 4.2.3. It MUST be unique within a given OEM ID. The | by the OEM ID in Section 4.2.3. It MUST be unique within a given OEM | |||
concatenation of the OEM ID and "hwmodel" give a global identifier of | ID. The concatenation of the OEM ID and "hwmodel" gives a global | |||
a particular product. The "hwmodel" claim MUST only be present if an | identifier of a particular product. The "hwmodel" claim MUST only be | |||
"oemid" claim described in Section 4.2.3 is present. | present if an "oemid" claim described in Section 4.2.3 is present. | |||
The granularity of the model identification is for each OEM to | The granularity of the model identification is for each OEM to | |||
decide. It may be very granular, perhaps including some version | decide. It may be very granular, perhaps including some version | |||
information. It may be very general, perhaps only indicating top- | information. It may be very general, perhaps only indicating top- | |||
level products. | level products. | |||
The "hwmodel" claim is for use in protocols and not for human | The "hwmodel" claim is for use in protocols and not for human | |||
consumption. The format and encoding of this claim should not be | consumption. The format and encoding of this claim should not be | |||
human-readable to discourage use other than in protocols. If this | human readable to discourage use other than in protocols. If this | |||
claim is to be derived from an already-in-use human-readable | claim is to be derived from an already-in-use human-readable | |||
identifier, it can be run through a hash function. | identifier, it can be run through a hash function. | |||
There is no minimum length so that an OEM with a very small number of | There is no minimum length so that an OEM with a very small number of | |||
models can use a one-byte encoding. The maximum length is 32 bytes. | models can use a one-byte encoding. The maximum length is 32 bytes. | |||
All receivers of this claim MUST be able to receive this maximum | All receivers of this claim MUST be able to receive this maximum | |||
size. | size. | |||
The receiver of this claim MUST treat it as a completely opaque | The receiver of this claim MUST treat it as a completely opaque | |||
string of bytes, even if there is some apparent naming or structure. | string of bytes, even if there is some apparent naming or structure. | |||
skipping to change at page 22, line 14 ¶ | skipping to change at line 972 ¶ | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
hardware-model-label => hardware-model-type | hardware-model-label => hardware-model-type | |||
) | ) | |||
hardware-model-type = JC<base64-url-text .size (4..44), | hardware-model-type = JC<base64-url-text .size (4..44), | |||
bytes .size (1..32)> | bytes .size (1..32)> | |||
4.2.5. hwversion (Hardware Version) Claim | 4.2.5. hwversion (Hardware Version) Claim | |||
The "hwversion" claim is a text string the format of which is set by | The "hwversion" claim is a text string, of which the format is set by | |||
each manufacturer. The structure and sorting order of this text | each manufacturer. The structure and sorting order of this text | |||
string can be specified using the version-scheme item from CoSWID | string can be specified using the version-scheme item from Concise | |||
[RFC9393]. It is useful to know how to sort versions so the newer | Software Identification (CoSWID) [RFC9393]. It is useful to know how | |||
can be distinguished from the older. A "hwversion" claim MUST only | to sort versions so the newer ones can be distinguished from the | |||
be present if a "hwmodel" claim described in Section 4.2.4 is | older ones. A "hwversion" claim MUST only be present if a "hwmodel" | |||
present. | claim, as described in Section 4.2.4, is present. | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
hardware-version-label => hardware-version-type | hardware-version-label => hardware-version-type | |||
) | ) | |||
hardware-version-type = [ | hardware-version-type = [ | |||
version: tstr, | version: tstr, | |||
? scheme: $version-scheme | ? scheme: $version-scheme | |||
] | ] | |||
4.2.6. swname (Software Name) Claim | 4.2.6. swname (Software Name) Claim | |||
The "swname" claim contains a very simple free-form text value for | The "swname" claim contains a very simple free-form text value for | |||
naming the software used by the entity. Intentionally, no general | naming the software used by the entity. Intentionally, no general | |||
rules or structure are set. This will make it unsuitable for use | rules or structure are set. This will make it unsuitable for use | |||
cases that wish precise naming. | cases that wish precise naming. | |||
If precise and rigourous naming of the software for the entity is | If precise and rigorous naming of the software for the entity is | |||
needed, the "manifests" claim described in Section 4.2.15 may be used | needed, the "manifests" claim, as described in Section 4.2.15, may be | |||
instead. | used instead. | |||
$$Claims-Set-Claims //= ( sw-name-label => tstr ) | $$Claims-Set-Claims //= ( sw-name-label => tstr ) | |||
4.2.7. swversion (Software Version) Claim | 4.2.7. swversion (Software Version) Claim | |||
The "swversion" claim makes use of the CoSWID version-scheme defined | The "swversion" claim makes use of the CoSWID version-scheme defined | |||
in [RFC9393] to give a simple version for the software. A | in [RFC9393] to give a simple version for the software. A | |||
"swversion" claim MUST only be present if a "swname" claim described | "swversion" claim MUST only be present if a "swname" claim, as | |||
in Section 4.2.6 is present. | described in Section 4.2.6, is present. | |||
The "manifests" claim Section 4.2.15 may be instead if this is too | The "manifests" claim (Section 4.2.15) may be used instead if this is | |||
simple. | too simple. | |||
$$Claims-Set-Claims //= (sw-version-label => sw-version-type) | $$Claims-Set-Claims //= (sw-version-label => sw-version-type) | |||
sw-version-type = [ | sw-version-type = [ | |||
version: tstr | version: tstr | |||
? scheme: $version-scheme | ? scheme: $version-scheme | |||
] | ] | |||
4.2.8. oemboot (OEM Authorized Boot) Claim | 4.2.8. oemboot (OEM Authorized Boot) Claim | |||
An "oemboot" claim with value of true indicates the entity booted | An "oemboot" claim with a value of "true" indicates that the entity | |||
with software authorized by the manufacturer of the entity as | booted with software authorized by the manufacturer of the entity as | |||
indicated by the "oemid" claim described in Section 4.2.3. It | indicated by the "oemid" claim described in Section 4.2.3. It | |||
indicates the firmware and operating system are fully under control | indicates that the firmware and operating system are fully under | |||
of the OEM and may not be replaced by the end user or even the | control of the OEM and may not be replaced by the end user or even | |||
enterprise that owns the device. The means of control may be by | the enterprise that owns the device. The means of control may be by | |||
cryptographic authentication of the software, by the software being | cryptographic authentication of the software, the software being in | |||
in Read-Only Memory (ROM), a combination of the two or other. If | Read-Only Memory (ROM), a combination of the two, or other. If this | |||
this claim is present the "oemid" claim MUST be present. | claim is present, the "oemid" claim MUST be present. | |||
$$Claims-Set-Claims //= (oem-boot-label => bool) | $$Claims-Set-Claims //= (oem-boot-label => bool) | |||
4.2.9. dbgstat (Debug Status) Claim | 4.2.9. dbgstat (Debug Status) Claim | |||
The "dbgstat" claim applies to entity-wide or submodule-wide debug | The "dbgstat" claim applies to entity-wide or submodule-wide debug | |||
facilities of the entity like [JTAG] and diagnostic hardware built | facilities of the entity like [JTAG] and diagnostic hardware built | |||
into chips. It applies to any software debug facilities related to | into chips. It applies to any software debug facilities related to | |||
privileged software that allows system-wide memory inspection, | privileged software that allows system-wide memory inspection, | |||
tracing or modification of non-system software like user mode | tracing, or modification of non-system software like user-mode | |||
applications. | applications. | |||
This characterization assumes that debug facilities can be enabled | This characterization assumes that debug facilities can be enabled | |||
and disabled in a dynamic way or be disabled in some permanent way, | and disabled in a dynamic way or be disabled in some permanent way, | |||
such that no enabling is possible. An example of dynamic enabling is | such that no enabling is possible. An example of dynamic enabling is | |||
one where some authentication is required to enable debugging. An | one where some authentication is required to enable debugging. An | |||
example of permanent disabling is blowing a hardware fuse in a chip. | example of permanent disabling is blowing a hardware fuse in a chip. | |||
The specific type of the mechanism is not taken into account. For | The specific type of the mechanism is not taken into account. For | |||
example, it does not matter if authentication is by a global password | example, it does not matter if authentication is by a global password | |||
or by per-entity public keys. | or by per-entity public keys. | |||
skipping to change at page 24, line 5 ¶ | skipping to change at line 1061 ¶ | |||
As with all claims, the absence of the "dbgstat" claim means it is | As with all claims, the absence of the "dbgstat" claim means it is | |||
not reported. | not reported. | |||
This claim is not extensible so as to provide a common interoperable | This claim is not extensible so as to provide a common interoperable | |||
description of debug status. If a particular implementation | description of debug status. If a particular implementation | |||
considers this claim to be inadequate, it can define its own | considers this claim to be inadequate, it can define its own | |||
proprietary claim. It may consider including both this claim as a | proprietary claim. It may consider including both this claim as a | |||
coarse indication of debug status and its own proprietary claim as a | coarse indication of debug status and its own proprietary claim as a | |||
refined indication. | refined indication. | |||
The higher levels of debug disabling requires that all debug | The higher levels of debug disabling require that all debug disabling | |||
disabling of the levels below it be in effect. Since the lowest | of the levels below it be in effect. Since the lowest level requires | |||
level requires that all of the target's debug be currently disabled, | that all of the target's debug be currently disabled, all other | |||
all other levels require that too. | levels require that too. | |||
There is no inheritance of claims from a submodule to a superior | There is no inheritance of claims from a submodule to a superior | |||
module or vice versa. There is no assumption, requirement or | module or vice versa. There is no assumption, requirement, or | |||
guarantee that the target of a superior module encompasses the | guarantee that the target of a superior module encompasses the | |||
targets of submodules. Thus, every submodule must explicitly | targets of submodules. Thus, every submodule must explicitly | |||
describe its own debug state. The receiver of an EAT MUST NOT assume | describe its own debug state. The receiver of an EAT MUST NOT assume | |||
that debug is turned off in a submodule because there is a claim | that debug is turned off in a submodule because there is a claim | |||
indicating it is turned off in a superior module. | indicating it is turned off in a superior module. | |||
An entity may have multiple debug facilities. The use of plural in | An entity may have multiple debug facilities. The use of plural in | |||
the description of the states refers to that, not to any aggregation | the description of the states refers to that, not to any aggregation | |||
or inheritance. | or inheritance. | |||
skipping to change at page 24, line 38 ¶ | skipping to change at line 1094 ¶ | |||
4.2.9.1. Enabled | 4.2.9.1. Enabled | |||
If any debug facility, even manufacturer hardware diagnostics, is | If any debug facility, even manufacturer hardware diagnostics, is | |||
currently enabled, then this level must be indicated. | currently enabled, then this level must be indicated. | |||
4.2.9.2. Disabled | 4.2.9.2. Disabled | |||
This level indicates all debug facilities are currently disabled. It | This level indicates all debug facilities are currently disabled. It | |||
may be possible to enable them in the future. It may also be that | may be possible to enable them in the future. It may also be that | |||
they were enabled in the past, but they are currently disabled. | they were enabled in the past but are currently disabled. | |||
4.2.9.3. Disabled Since Boot | 4.2.9.3. Disabled Since Boot | |||
This level indicates all debug facilities are currently disabled and | This level indicates all debug facilities are currently disabled and | |||
have been so since the entity booted/started. | have been so since the entity booted/started. | |||
4.2.9.4. Disabled Permanently | 4.2.9.4. Disabled Permanently | |||
This level indicates all non-manufacturer facilities are permanently | This level indicates all non-manufacturer facilities are permanently | |||
disabled such that no end user or developer can enable them. Only | disabled such that no end user or developer can enable them. Only | |||
skipping to change at page 25, line 29 ¶ | skipping to change at line 1134 ¶ | |||
disabled = JC< "disabled", 1 > | disabled = JC< "disabled", 1 > | |||
disabled-since-boot = JC< "disabled-since-boot", 2 > | disabled-since-boot = JC< "disabled-since-boot", 2 > | |||
disabled-permanently = JC< "disabled-permanently", 3 > | disabled-permanently = JC< "disabled-permanently", 3 > | |||
disabled-fully-and-permanently = | disabled-fully-and-permanently = | |||
JC< "disabled-fully-and-permanently", 4 > | JC< "disabled-fully-and-permanently", 4 > | |||
4.2.10. location (Location) Claim | 4.2.10. location (Location) Claim | |||
The "location" claim gives the geographic position of the entity from | The "location" claim gives the geographic position of the entity from | |||
which the attestation originates. Latitude, longitude, altitude, | which the attestation originates. Latitude, longitude, altitude, | |||
accuracy, altitude-accuracy, heading and speed MUST be as defined in | accuracy, altitude-accuracy, heading, and speed MUST be as defined in | |||
the W3C Geolocation API [W3C.GeoLoc] (which, in turn, is based on | the W3C Geolocation API [W3C.GeoLoc] (which, in turn, is based on | |||
[WGS84]). If the entity is stationary, the heading is NaN (floating- | [WGS84]). If the entity is stationary, the heading is Not a Number | |||
point not-a-number). Latitude and longitude MUST be provided. If | (NaN) (i.e., a floating-point NaN). Latitude and longitude MUST be | |||
any other of these values are unknown, they are omitted. | provided. If any other of these values are unknown, they are | |||
omitted. | ||||
The location may have been cached for a period of time before token | The location may have been cached for a period of time before token | |||
creation. For example, it might have been minutes or hours or more | creation. For example, it might have been minutes, hours, or more | |||
since the last contact with a GNSS satellite. Either the timestamp | since the last contact with a Global Navigation Satellite System | |||
or age data item can be used to quantify the cached period. The | (GNSS) satellite. Either the timestamp or the age data item can be | |||
timestamp data item is preferred as it a non-relative time. If the | used to quantify the cached period. The timestamp data item is | |||
entity has no clock or the clock is unset but has a means to measure | preferred as it is a non-relative time. If the entity has no clock | |||
the time interval between the acquisition of the location and the | or the clock is unset but has a means to measure the time interval | |||
token creation the age may be reported instead. The age is in | between the acquisition of the location and the token creation, the | |||
seconds. | age may be reported instead. The age is in seconds. | |||
See location-related privacy considerations in Section 8.2. | See location-related privacy considerations in Section 8.2. | |||
$$Claims-Set-Claims //= (location-label => location-type) | $$Claims-Set-Claims //= (location-label => location-type) | |||
location-type = { | location-type = { | |||
latitude => number, | latitude => number, | |||
longitude => number, | longitude => number, | |||
? altitude => number, | ? altitude => number, | |||
? accuracy => number, | ? accuracy => number, | |||
skipping to change at page 26, line 38 ¶ | skipping to change at line 1186 ¶ | |||
4.2.11. uptime (Uptime) Claim | 4.2.11. uptime (Uptime) Claim | |||
The "uptime" claim contains the number of seconds that have elapsed | The "uptime" claim contains the number of seconds that have elapsed | |||
since the entity or submodule was last booted. | since the entity or submodule was last booted. | |||
$$Claims-Set-Claims //= (uptime-label => uint) | $$Claims-Set-Claims //= (uptime-label => uint) | |||
4.2.12. bootcount (Boot Count) Claim | 4.2.12. bootcount (Boot Count) Claim | |||
The "bootcount" claim contains a count of the number times the entity | The "bootcount" claim contains a count of the number of times the | |||
or submodule has been booted. Support for this claim requires a | entity or submodule has been booted. Support for this claim requires | |||
persistent storage on the device. | a persistent storage on the device. | |||
$$Claims-Set-Claims //= (boot-count-label => uint) | $$Claims-Set-Claims //= (boot-count-label => uint) | |||
4.2.13. bootseed (Boot Seed) Claim | 4.2.13. bootseed (Boot Seed) Claim | |||
The "bootseed" claim contains a value created at system boot time | The "bootseed" claim contains a value created at system boot time | |||
that allows differentiation of attestation reports from different | that allows differentiation of attestation reports from different | |||
boot sessions of a particular entity (e.g., a certain UEID). | boot sessions of a particular entity (e.g., a certain UEID). | |||
This value is usually public. It is not a secret and MUST NOT be | This value is usually public. It is not a secret and MUST NOT be | |||
used for any purpose that a secret seed is needed, such as seeding a | used for any purpose where a secret seed is needed, such as seeding a | |||
random number generator. | random number generator. | |||
There are privacy considerations for this claim. See Section 8.3. | There are privacy considerations for this claim; see Section 8.3. | |||
$$Claims-Set-Claims //= (boot-seed-label => binary-data) | $$Claims-Set-Claims //= (boot-seed-label => binary-data) | |||
4.2.14. dloas (Digital Letters of Approval) Claim | 4.2.14. dloas (Digital Letters of Approval) Claim | |||
The "dloas" claim conveys one or more Digital Letters of Approval | The "dloas" claim conveys one or more Digital Letters of Approval | |||
(DLOAs). A DLOA [DLOA] is a document that describes a certification | (DLOAs). A DLOA [DLOA] is a document that describes a certification | |||
that an entity has received. Examples of certifications represented | that an entity has received. Examples of certifications represented | |||
by a DLOA include those issued by Global Platform [GP-Example] and | by a DLOA include those issued by GlobalPlatform [GP-Example] and | |||
those based on Common Criteria [CC-Example]. The DLOA is unspecific | those based on Common Criteria [CC-Example]. The DLOA is unspecific | |||
to any particular certification type or those issued by any | to any particular certification type or those issued by any | |||
particular organization. | particular organization. | |||
This claim is typically issued by a verifier, not an attester. | This claim is typically issued by a verifier, not an attester. | |||
Verifiers MUST NOT issue this claim unless the entity has received | Verifiers MUST NOT issue this claim unless the entity has received | |||
the certification indicated by the DLOA. | the certification indicated by the DLOA. | |||
This claim MAY contain more than one DLOA. If multiple DLOAs are | This claim MAY contain more than one DLOA. If multiple DLOAs are | |||
present, verifiers MUST NOT issue this claim unless the entity has | present, verifiers MUST NOT issue this claim unless the entity has | |||
skipping to change at page 27, line 36 ¶ | skipping to change at line 1233 ¶ | |||
DLOA documents are always fetched from a registrar that stores them. | DLOA documents are always fetched from a registrar that stores them. | |||
This claim contains several data items used to construct a Uniform | This claim contains several data items used to construct a Uniform | |||
Resource Locator (URL) for fetching the DLOA from the particular | Resource Locator (URL) for fetching the DLOA from the particular | |||
registrar. | registrar. | |||
This claim MUST be encoded as an array with either two or three | This claim MUST be encoded as an array with either two or three | |||
elements. The first element MUST be the URL for the registrar. The | elements. The first element MUST be the URL for the registrar. The | |||
second element MUST be a platform label indicating which platform was | second element MUST be a platform label indicating which platform was | |||
certified. If the DLOA applies to an application, then the third | certified. If the DLOA applies to an application, then the third | |||
element is added which MUST be an application label. The method of | element is added, which MUST be an application label. The method of | |||
constructing the registrar URL, platform label and possibly | constructing the registrar URL, platform label, and possibly | |||
application label is specified in [DLOA]. | application label is specified in [DLOA]. | |||
The retriever of a DLOA MUST follow the recommendation in [DLOA] and | The retriever of a DLOA MUST follow the recommendation in [DLOA] and | |||
use TLS or some other means to be sure the DLOA registrar they are | use Transport Layer Security (TLS) or some other means to be sure the | |||
accessing is authentic. The platform and application labels in the | DLOA registrar they are accessing is authentic. The platform and | |||
claim indicate the correct DLOA for the entity. | application labels in the claim indicate the correct DLOA for the | |||
entity. | ||||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
dloas-label => [ + dloa-type ] | dloas-label => [ + dloa-type ] | |||
) | ) | |||
dloa-type = [ | dloa-type = [ | |||
dloa_registrar: general-uri | dloa_registrar: general-uri | |||
dloa_platform_label: text | dloa_platform_label: text | |||
? dloa_application_label: text | ? dloa_application_label: text | |||
] | ] | |||
4.2.15. manifests (Software Manifests) Claim | 4.2.15. manifests (Software Manifests) Claim | |||
The "manifests" claim contains descriptions of software present on | The "manifests" claim contains descriptions of software present on | |||
the entity. These manifests are installed on the entity when the | the entity. These manifests are installed on the entity when the | |||
software is installed or are created as part of the installation | software is installed or are created as part of the installation | |||
process. Installation is anything that adds software to the entity, | process. Installation is anything that adds software to the entity, | |||
possibly factory installation, the user installing elective | possibly factory installation, the user installing elective | |||
applications and so on. The defining characteristic of a manifest is | applications, and so on. The defining characteristic of a manifest | |||
that it is created by the software manufacturer. The purpose of this | is that it is created by the software manufacturer. The purpose of | |||
claim is to relay unmodified manifests to the verifier and possibly | this claim is to relay unmodified manifests to the verifier and | |||
to the relying party. | possibly to the relying party. | |||
Some manifests are signed by their software manufacturer | Some manifests are signed by their software manufacturer | |||
independently, and some are not either because they do not support | independently, and some are not because either they do not support | |||
signing or the manufacturer chose not to sign them. For example, a | signing or the manufacturer chose not to sign them. For example, a | |||
CoSWID might be signed independently before it is included in an EAT. | CoSWID might be signed independently before it is included in an EAT. | |||
When signed manifests are put into an EAT, the manufacturer's | When signed manifests are put into an EAT, the manufacturer's | |||
signature SHOULD be included even though an EAT's signature will also | signature SHOULD be included even though an EAT's signature will also | |||
cover the manifest. This allows the receiver to directly verify the | cover the manifest. This allows the receiver to directly verify the | |||
manufacturer-originated manifest. | manufacturer-originated manifest. | |||
This claim allows multiple manifest formats. For example, the | This claim allows multiple manifest formats. For example, the | |||
manifest may be a CBOR-encoded CoSWID, an XML-encoded SWID or other. | manifest may be a CBOR-encoded CoSWID, an XML-encoded Software | |||
Identification of the type of manifest is always by a Constrained | Identification (SWID), or other. Identification of the type of | |||
Application Protocol (CoAP) Content-Format integer [RFC7252]. If | manifest is always by a Constrained Application Protocol (CoAP) | |||
there is no CoAP identifier registered for a manifest format, one | Content-Format integer [RFC7252]. If there is no CoAP identifier | |||
MUST be registered. | registered for a manifest format, one MUST be registered. | |||
This claim MUST be an array of one or more manifests. Each manifest | This claim MUST be an array of one or more manifests. Each manifest | |||
in the claim MUST be an array of two. The first item in the array of | in the claim MUST be an array of two. The first item in the array of | |||
two MUST be an integer CoAP Content-Format identifier. The second | two MUST be an integer CoAP Content-Format identifier. The second | |||
item is MUST be the actual manifest. | item is MUST be the actual manifest. | |||
In JSON-encoded tokens the manifest, whatever encoding it is, MUST be | In JSON-encoded tokens, the manifest, whatever encoding it is, MUST | |||
placed in a text string. When a non-text encoded manifest like a | be placed in a text string. When a non-text encoded manifest such as | |||
CBOR-encoded CoSWID is put in a JSON-encoded token, the manifest MUST | a CBOR-encoded CoSWID is put in a JSON-encoded token, the manifest | |||
be base-64 encoded. | MUST be base64 encoded. | |||
This claim allows for multiple manifests in one token since multiple | This claim allows for multiple manifests in one token since multiple | |||
software packages are likely to be present. The multiple manifests | software packages are likely to be present. The multiple manifests | |||
MAY be of different encodings. In some cases EAT submodules may be | MAY be of different encodings. In some cases, EAT submodules may be | |||
used instead of the array structure in this claim for multiple | used instead of the array structure in this claim for multiple | |||
manifests. | manifests. | |||
A CoSWID manifest MUST be a payload CoSWID, not an evidence CoSWID. | A CoSWID manifest MUST be a payload CoSWID, not an evidence CoSWID. | |||
These are defined in [RFC9393]. | These are defined in [RFC9393]. | |||
This claim is extensible for use of manifest formats beyond those | This claim is extensible for use of manifest formats beyond those | |||
mentioned in this document. No particular manifest format is | mentioned in this document. No particular manifest format is | |||
preferred. For manifest interoperability, an EAT profile as defined | preferred. For manifest interoperability, an EAT profile, as defined | |||
in Section 6, should be used to specify which manifest format(s) are | in Section 6, should be used to specify which manifest format(s) is | |||
allowed. | allowed. | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
manifests-label => manifests-type | manifests-label => manifests-type | |||
) | ) | |||
manifests-type = [+ manifest-format] | manifests-type = [+ manifest-format] | |||
manifest-format = [ | manifest-format = [ | |||
content-type: coap-content-format, | content-type: coap-content-format, | |||
content-format: JC< $manifest-body-json, | content-format: JC< $manifest-body-json, | |||
$manifest-body-cbor > | $manifest-body-cbor > | |||
] | ] | |||
$manifest-body-cbor /= bytes .cbor untagged-coswid | $manifest-body-cbor /= bytes .cbor untagged-coswid | |||
$manifest-body-json /= base64-url-text | $manifest-body-json /= base64-url-text | |||
4.2.16. measurements (Measurements) Claim | 4.2.16. measurements (Measurements) Claim | |||
The "measurements" claim contains descriptions, lists, evidence or | The "measurements" claim contains descriptions, lists, evidence, or | |||
measurements of the software that exists on the entity or any other | measurements of the software that exists on the entity or on any | |||
measurable subsystem of the entity (e.g. hash of sections of a file | other measurable subsystem of the entity (e.g., hash of sections of a | |||
system or non-volatile memory). The defining characteristic of this | file system or non-volatile memory). The defining characteristic of | |||
claim is that its contents are created by processes on the entity | this claim is that its contents are created by processes on the | |||
that inventory, measure or otherwise characterize the software on the | entity that inventory, measure, or otherwise characterize the | |||
entity. The contents of this claim do not originate from the | software on the entity. The contents of this claim do not originate | |||
manufacturer of the measurable subsystem (e.g. developer of a | from the manufacturer of the measurable subsystem (e.g., developer of | |||
software library). | a software library). | |||
This claim can be a [RFC9393]. When the CoSWID format is used, it | This claim can be a [RFC9393]. When the CoSWID format is used, it | |||
MUST be an evidence CoSWID, not a payload CoSWID. | MUST be an evidence CoSWID, not a payload CoSWID. | |||
Formats other than CoSWID MAY be used. The identification of format | Formats other than CoSWID MAY be used. The identification of format | |||
is by CoAP Content Format, the same as the "manifests" claim in | is by CoAP Content-Format, the same as the "manifests" claim in | |||
Section 4.2.15. | Section 4.2.15. | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
measurements-label => measurements-type | measurements-label => measurements-type | |||
) | ) | |||
measurements-type = [+ measurements-format] | measurements-type = [+ measurements-format] | |||
measurements-format = [ | measurements-format = [ | |||
content-type: coap-content-format, | content-type: coap-content-format, | |||
content-format: JC< $measurements-body-json, | content-format: JC< $measurements-body-json, | |||
$measurements-body-cbor > | $measurements-body-cbor > | |||
] | ] | |||
$measurements-body-cbor /= bytes .cbor untagged-coswid | $measurements-body-cbor /= bytes .cbor untagged-coswid | |||
$measurements-body-json /= base64-url-text | $measurements-body-json /= base64-url-text | |||
4.2.17. measres (Software Measurement Results) Claim | 4.2.17. measres (Software Measurement Results) Claim | |||
The "measres" claim is a general-purpose structure for reporting | The "measres" claim is a general-purpose structure for reporting the | |||
comparison of measurements to expected reference values. This claim | comparison of measurements to expected reference values. This claim | |||
provides a simple standard way to report the result of a comparison | provides a simple standard way to report the result of a comparison | |||
as success, failure, fail to run, and absence. | as success, failure, fail to run, and absence. | |||
It is the nature of measurement systems that they are specific to the | It is the nature of measurement systems to be specific to the | |||
operating system, software and hardware of the entity that is being | operating system, software, and hardware of the entity that is being | |||
measured. It is not possible to standardize what is measured and how | measured. It is not possible to standardize what is measured and how | |||
it is measured across platforms, OS's, software and hardware. The | it is measured across platforms, OSes, software, and hardware. The | |||
recipient must obtain the information about what was measured and | recipient must obtain the information about what was measured and | |||
what it indicates for the characterization of the security of the | what it indicates for the characterization of the security of the | |||
entity from the provider of the measurement system. What this claim | entity from the provider of the measurement system. What this claim | |||
provides is a standard way to report basic success or failure of the | provides is a standard way to report basic success or failure of the | |||
measurement. In some use cases it is valuable to know if | measurement. In some use cases, it is valuable to know if | |||
measurements succeeded or failed in a general way even if the details | measurements succeeded or failed in a general way even if the details | |||
of what was measured is not characterized. | of what was measured are not characterized. | |||
This claim MAY be generated by the verifier and sent to the relying | This claim MAY be generated by the verifier and sent to the relying | |||
party. For example, it could be the results of the verifier | party. For example, it could be the results of the verifier | |||
comparing the contents of the "measurements" claim, Section 4.2.16, | comparing the contents of the "measurements" claim (Section 4.2.16) | |||
to reference values. | to reference values. | |||
This claim MAY also be generated on the entity if the entity has the | This claim MAY also be generated on the entity if the entity has the | |||
ability for one subsystem to measure and evaluate another subsystem. | ability for one subsystem to measure and evaluate another subsystem. | |||
For example, a TEE might have the ability to measure the software of | For example, a TEE might have the ability to measure the software of | |||
the rich OS and may have the reference values for the rich OS. | the rich OS and may have the reference values for the rich OS. | |||
Within an entity, attestation target or submodule, multiple results | Within an entity, attestation target, or submodule, multiple results | |||
can be reported. For example, it may be desirable to report the | can be reported. For example, it may be desirable to report the | |||
results for measurements of the file system, chip configuration, | results for measurements of the file system, chip configuration, | |||
installed software, running software and so on. | installed software, running software, and so on. | |||
Note that this claim is not for reporting the overall result of a | Note that this claim is not for reporting the overall result of a | |||
verifier. It is solely for reporting the result of comparison to | verifier. It is solely for reporting the result of comparison to | |||
reference values. | reference values. | |||
An individual measurement result (individual-result) is an array | An individual measurement result (individual-result) is an array | |||
consisting of two elements, an identifier of the measurement (result- | consisting of two elements, an identifier of the measurement (result- | |||
id) and an enumerated type of the result (result). Different | id), and an enumerated type of the result (result). Different | |||
measurement systems will measure different things and perhaps measure | measurement systems will measure different things and perhaps measure | |||
the same thing in different ways. It is up to each measurement | the same thing in different ways. It is up to each measurement | |||
system to define identifiers (result-id) for the measurements it | system to define identifiers (result-id) for the measurements it | |||
reports. | reports. | |||
Each individual measurement result is part of a group that may | Each individual measurement result is part of a group that may | |||
contain many individual results. Each group has a text string that | contain many individual results. Each group has a text string that | |||
names it, typically the name of the measurement scheme or system. | names it, typically the name of the measurement scheme or system. | |||
The claim itself consists of one or more groups. | The claim itself consists of one or more groups. | |||
The values for the results enumerated type are as follows: | The values for the results enumerated type are as follows: | |||
1 -- comparison successful: Indicates successful comparison to | 1 -- comparison successful: The comparison to reference values was | |||
reference values. | successful. | |||
2 -- comparison fail: The comparison was completed and did not | 2 -- comparison fail: The comparison was completed but did not | |||
compare correctly to the reference values. | compare correctly to the reference values. | |||
3 -- comparison not run: The comparison was not run. This includes | 3 -- comparison not run: The comparison was not run. This includes | |||
error conditions such as running out of memory. | error conditions such as running out of memory. | |||
4 -- measurement absent: The particular measurement was not | 4 -- measurement absent: The particular measurement was not | |||
available for comparison. | available for comparison. | |||
$$Claims-Set-Claims //= ( | $$Claims-Set-Claims //= ( | |||
measurement-results-label => | measurement-results-label => | |||
skipping to change at page 32, line 34 ¶ | skipping to change at line 1450 ¶ | |||
comparison-successful = JC< "success", 1 > | comparison-successful = JC< "success", 1 > | |||
comparison-fail = JC< "fail", 2 > | comparison-fail = JC< "fail", 2 > | |||
comparison-not-run = JC< "not-run", 3 > | comparison-not-run = JC< "not-run", 3 > | |||
measurement-absent = JC< "absent", 4 > | measurement-absent = JC< "absent", 4 > | |||
4.2.18. submods (Submodules) | 4.2.18. submods (Submodules) | |||
Some devices are complex and have many subsystems. A mobile phone is | Some devices are complex and have many subsystems. A mobile phone is | |||
a good example. It may have subsystems for communications (e.g., Wi- | a good example. It may have subsystems for communications (e.g., Wi- | |||
Fi and cellular), low-power audio and video playback, and multiple | Fi and cellular), low-power audio and video playback, and multiple | |||
security-oriented subsystems like a TEE and a Secure Element. The | security-oriented subsystems such as a TEE and a Secure Element. The | |||
claims for a subsystem can be grouped together in a submodule. | claims for a subsystem can be grouped together in a submodule. | |||
Submodules may be used in either evidence or attestation results. | Submodules may be used in either evidence or attestation results. | |||
Because system architecture will vary greatly from use case to use | Because system architecture will vary greatly from use case to use | |||
case, there are no set requirements for what a submodule represents | case, there are no set requirements for what a submodule represents | |||
either in evidence or in attestation results. Profiles, Section 6, | either in evidence or in attestation results. Profiles (Section 6) | |||
may wish to impose requirements. An attester that outputs evidence | may wish to impose requirements. An attester that outputs evidence | |||
with submodules should document the semantics it associates with | with submodules should document the semantics it associates with | |||
particular submodules for the verifier. Likewise, a verifier that | particular submodules for the verifier. Likewise, a verifier that | |||
outputs attestation results with submodules should document the | outputs attestation results with submodules should document the | |||
semantics it associates with the submodules for the relying party. | semantics it associates with the submodules for the relying party. | |||
A submodule claim is a map that holds some number of submodules. | A submodule claim is a map that holds some number of submodules. | |||
Each submodule is named by its label in the submodule claim map. The | Each submodule is named by its label in the submodule claim map. The | |||
value of each entry in a submodule may be a Claims-Set, nested token | value of each entry in a submodule may be a Claims-Set, nested token, | |||
or Detached-Submodule-Digest. This allows for the submodule to serve | or Detached-Submodule-Digest. This allows for the submodule to serve | |||
as its own attester or not and allows for claims for each submodule | as its own attester or not and allows for claims for each submodule | |||
to be represented directly or indirectly, i.e., detached. | to be represented directly or indirectly, i.e., detached. | |||
A submodule may include a submodule, allowing for arbitrary levels of | A submodule may include a submodule, allowing for arbitrary levels of | |||
nesting. However, submodules do not inherit anything from the | nesting. However, submodules do not inherit anything from the | |||
containing token and must explicitly include all claims. Submodules | containing token and must explicitly include all claims. Submodules | |||
may contain claims that are present in any surrounding token or | may contain claims that are present in any surrounding token or | |||
submodule. For example, the top-level of the token may have a UEID, | submodule. For example, the top level of the token may have a UEID, | |||
a submodule may have a different UEID and a further subordinate | a submodule may have a different UEID, and a further subordinate | |||
submodule may also have a UEID. | submodule may also have a UEID. | |||
The following sub-sections define the three types for representing | The following subsections define the three types for representing | |||
submodules: | submodules: | |||
* A submodule Claims-Set | * A submodule Claims-Set | |||
* The digest of a detached Claims-Set | * The digest of a detached Claims-Set | |||
* A nested token, which can be any EAT | * A nested token, which can be any EAT | |||
The Submodule type definition and Nested-Token type definition vary | The Submodule type and Nested-Token type definitions vary with the | |||
with the type of encoding. The definitions for CBOR-encoded EATs are | type of encoding. The definitions for CBOR-encoded EATs are as | |||
as follows: | follows: | |||
Nested-Token = CBOR-Nested-Token | Nested-Token = CBOR-Nested-Token | |||
CBOR-Nested-Token = | CBOR-Nested-Token = | |||
JSON-Token-Inside-CBOR-Token / | JSON-Token-Inside-CBOR-Token / | |||
CBOR-Token-Inside-CBOR-Token | CBOR-Token-Inside-CBOR-Token | |||
CBOR-Token-Inside-CBOR-Token = bstr .cbor $EAT-CBOR-Tagged-Token | CBOR-Token-Inside-CBOR-Token = bstr .cbor $EAT-CBOR-Tagged-Token | |||
JSON-Token-Inside-CBOR-Token = tstr | JSON-Token-Inside-CBOR-Token = tstr | |||
$$Claims-Set-Claims //= (submods-label => { + text => Submodule }) | $$Claims-Set-Claims //= (submods-label => { + text => Submodule }) | |||
Submodule = Claims-Set / CBOR-Nested-Token / | Submodule = Claims-Set / CBOR-Nested-Token / | |||
Detached-Submodule-Digest | Detached-Submodule-Digest | |||
The Submodule and Nested-Token definitions for JSON-encoded EATs is | The Submodule and Nested-Token definitions for JSON-encoded EATs are | |||
as below. This difference in definitions versus CBOR is necessary | as below. The definitions are necessarily different than CBOR | |||
because JSON has no tag mechanism and no byte string type to help | because JSON has no tag mechanism and no byte-string type to help | |||
indicate the nested token is CBOR. | indicate that the nested token is CBOR. | |||
Nested-Token = JSON-Selector | Nested-Token = JSON-Selector | |||
JSON-Selector = $JSON-Selector | JSON-Selector = $JSON-Selector | |||
$JSON-Selector /= [type: "JWT", nested-token: JWT-Message] | $JSON-Selector /= [type: "JWT", nested-token: JWT-Message] | |||
$JSON-Selector /= [type: "CBOR", nested-token: | $JSON-Selector /= [type: "CBOR", nested-token: | |||
CBOR-Token-Inside-JSON-Token] | CBOR-Token-Inside-JSON-Token] | |||
$JSON-Selector /= [type: "BUNDLE", nested-token: Detached-EAT-Bundle] | $JSON-Selector /= [type: "BUNDLE", nested-token: Detached-EAT-Bundle] | |||
$JSON-Selector /= [type: "DIGEST", nested-token: | $JSON-Selector /= [type: "DIGEST", nested-token: | |||
skipping to change at page 34, line 38 ¶ | skipping to change at line 1545 ¶ | |||
Nested tokens can be one of three types as defined in this document | Nested tokens can be one of three types as defined in this document | |||
or types standardized in follow-on documents (e.g., [UCCS]). Nested | or types standardized in follow-on documents (e.g., [UCCS]). Nested | |||
tokens are the only mechanism by which JSON can be embedded in CBOR | tokens are the only mechanism by which JSON can be embedded in CBOR | |||
and vice versa. | and vice versa. | |||
The addition of further types is accomplished by augmenting the $EAT- | The addition of further types is accomplished by augmenting the $EAT- | |||
CBOR-Tagged-Token socket or the $JSON-Selector socket. | CBOR-Tagged-Token socket or the $JSON-Selector socket. | |||
When decoding a JSON-encoded EAT, the type of submodule is determined | When decoding a JSON-encoded EAT, the type of submodule is determined | |||
as follows. A JSON object indicates the submodule is a Claims-Set. | as follows. A JSON object indicates that the submodule is a Claims- | |||
In all other cases, it is a JSON-Selector, which is an array of two | Set. In all other cases, it is a JSON-Selector, which is an array of | |||
elements that indicates whether the submodule is a nested token or a | two elements that indicates whether the submodule is a nested token | |||
Detached-Submodule-Digest.The first element in the array indicates | or a Detached-Submodule-Digest. The first element in the array | |||
the type present in the second element. If the value is "JWT", | indicates the type present in the second element. If the value is | |||
"CBOR", "BUNDLE" or a future-standardized token types, e.g., [UCCS], | "JWT", "CBOR", "BUNDLE", or future-standardized token types, e.g., | |||
the submodule is a nested token of the indicated type, i.e., JWT- | see [UCCS], the submodule is a nested token of the indicated type, | |||
Message, CBOR-Token-Inside-JSON-Token, Detached-EAT-Bundle, or a | i.e., JWT-Message, CBOR-Token-Inside-JSON-Token, Detached-EAT-Bundle, | |||
future type. If the value is "DIGEST", the submodule is a Detached- | or a future type. If the value is "DIGEST", the submodule is a | |||
Submodule-Digest. Any other value indicates a standardized extension | Detached-Submodule-Digest. Any other value indicates a standardized | |||
to this specification. | extension to this specification. | |||
When decoding a CBOR-encoded EAT, the CBOR item type indicates the | When decoding a CBOR-encoded EAT, the CBOR item type indicates the | |||
type of the submodule as follows. A map indicates a CBOR-encoded | type of the submodule as follows. A map indicates a CBOR-encoded | |||
submodule Claims-Set. An array indicates a CBOR-encoded Detached- | submodule Claims-Set. An array indicates a CBOR-encoded Detached- | |||
Submodule-Digest. A byte string indicates a CBOR-encoded CBOR- | Submodule-Digest. A byte string indicates a CBOR-encoded CBOR- | |||
Nested-Token. A text string indicates a JSON-encoded JSON-Selector. | Nested-Token. A text string indicates a JSON-encoded JSON-Selector. | |||
Where JSON-Selector is used in a CBOR-encoded EAT, the "DIGEST" type | Where JSON-Selector is used in a CBOR-encoded EAT, the "DIGEST" type | |||
and corresponding Detached-Submodule-Digest type MUST NOT be used. | and corresponding Detached-Submodule-Digest type MUST NOT be used. | |||
The type of a CBOR-encoded nested token is always determined by the | The type of a CBOR-encoded nested token is always determined by the | |||
CBOR tag encountered after the byte string wrapping is removed in a | CBOR tag encountered after the byte string wrapping is removed in a | |||
CBOR-encoded enclosing token or after the base64 wrapping is removed | CBOR-encoded enclosing token or after the base64 wrapping is removed | |||
in JSON-encoded enclosing token. | in a JSON-encoded enclosing token. | |||
The type of a JSON-encoded nested token is always determined by the | The type of JSON-encoded nested token is always determined by the | |||
string name in JSON-Selector and is always "JWT", "BUNDLE" or a new | string name in JSON-Selector and is always "JWT", "BUNDLE", or a new | |||
name standardized outside this document for a further type (e.g., | name standardized outside this document for a further type (e.g., | |||
"UCCS"). This string name may also be "CBOR" to indicate the nested | "UCCS"). This string name may also be "CBOR" to indicate the nested | |||
token is CBOR-encoded. | token is CBOR encoded. | |||
"JWT": The second array item MUST be a JWT formatted according to | "JWT": The second array item MUST be a JWT formatted according to | |||
[RFC7519] | [RFC7519]. | |||
"CBOR": The second array item MUST be some base64url-encoded CBOR | "CBOR": The second array item MUST be some base64url-encoded CBOR | |||
that is a tag, typically a CWT or CBOR-encoded detached EAT bundle | that is a tag, typically a CWT or CBOR-encoded detached EAT | |||
bundle. | ||||
"BUNDLE": The second array item MUST be a JSON-encoded Detached EAT | "BUNDLE": The second array item MUST be a JSON-encoded Detached EAT | |||
Bundle as defined in this document. | Bundle as defined in this document. | |||
"DIGEST": The second array item MUST be a JSON-encoded Detached- | "DIGEST": The second array item MUST be a JSON-encoded Detached- | |||
Submodule-Digest as defined in this document. | Submodule-Digest as defined in this document. | |||
As noted elsewhere, additional EAT types may be defined by a | As noted elsewhere, additional EAT types may be defined by a | |||
standards action. New type specifications MUST address the | Standards Action. New type specifications MUST address the | |||
integration of the new type into the Submodule claim type for | integration of the new type into the Submodule claim type for | |||
submodules. | submodules. | |||
4.2.18.1. Submodule Claims-Set | 4.2.18.1. Submodule Claims-Set | |||
The Claims-Set type provides a means of representing claims from a | The Claims-Set type provides a means of representing claims from a | |||
submodule that does not have its own attesting environment, i.e., it | submodule that does not have its own attesting environment, i.e., it | |||
has no keys distinct from the attester producing the surrounding | has no keys distinct from the attester producing the surrounding | |||
token. Claims are represented as a Claims-Set. Submodule claims | token. Claims are represented as a Claims-Set. Submodule claims | |||
represented in this way are secured by the same mechanism as the | represented in this way are secured by the same mechanism as the | |||
enclosing token (e.g., it is signed by the same attestation key). | enclosing token (e.g., it is signed by the same attestation key). | |||
The encoding of a submodule Claims-Set MUST be the same as the | The encoding of a submodule Claims-Set MUST be the same as the | |||
encoding as the surrounding EAT, e.g., all submodule Claims-Sets in a | encoding of the surrounding EAT, e.g., all submodule Claims-Sets in a | |||
CBOR-encoded token must be CBOR-encoded. | CBOR-encoded token must be CBOR encoded. | |||
4.2.18.2. Detached Submodule Digest | 4.2.18.2. Detached Submodule Digest | |||
The Detached-Submodule-Digest type is similar to a submodule Claims- | The Detached-Submodule-Digest type is similar to a submodule Claims- | |||
Set, except a digest of the Claims-Set is included in the claim with | Set, except a digest of the Claims-Set is included in the claim with | |||
the Claims-Set contents conveyed separately. The separately-conveyed | the Claims-Set contents conveyed separately. The separately conveyed | |||
Claims-Set is called a detached claims set. The input to the digest | Claims-Set is called a "detached claims set". The direct input to | |||
algorithm is directly the CBOR or JSON-encoded Claims-Set for the | the digest algorithm is either the CBOR-encoded or the JSON-encoded | |||
submodule. There is no byte-string wrapping or base 64 encoding. | Claims-Set for the submodule. There is no byte string wrapping or | |||
base64 encoding. | ||||
The data type for this type of submodule is an array consisting of | The data type for this type of submodule is an array consisting of | |||
two data items: an algorithm identifier and a byte string containing | two data items: an algorithm identifier and a byte string containing | |||
the digest. The hash algorithm identifier is always from the COSE | the digest. The hash algorithm identifier is always from the "COSE | |||
Algorithm registry, [IANA.COSE.Algorithms]. Either the integer or | Algorithms" registry [IANA.COSE.Algorithms]. Either the integer or | |||
string identifier may be used. The hash algorithm identifier is | the string identifier may be used. The hash algorithm identifier is | |||
never from the JOSE Algorithm registry. | never from the JOSE Algorithm registry. | |||
A detached EAT bundle, described in Section 5, may be used to convey | A detached EAT bundle, as described in Section 5, may be used to | |||
convey detached claims sets and the EAT containing the corresponding | ||||
detached digests. However, EAT does not require the use of a | ||||
detached EAT bundle. Any other protocols may be used to convey | ||||
detached claims sets and the EAT containing the corresponding | detached claims sets and the EAT containing the corresponding | |||
detached digests. EAT, however, does not require use of a detached | detached digests. If detached Claims-Sets are modified in transit, | |||
EAT bundle. Any other protocols may be used to convey detached | then validation can fail. | |||
claims sets and the EAT containing the corresponding detached | ||||
digests. If detached Claims-Sets are modified in transit then | ||||
validation can fail. | ||||
4.2.18.3. Nested Tokens | 4.2.18.3. Nested Tokens | |||
The CBOR-Nested-Token and JSON-Selector types provide a means of | The CBOR-Nested-Token and JSON-Selector types provide a means of | |||
representing claims from a submodule that has its own attesting | representing claims from a submodule that has its own attesting | |||
environment, i.e., it has keys distinct from the attester producing | environment, i.e., it has keys distinct from the attester producing | |||
the surrounding token. Claims are represented in a signed EAT token. | the surrounding token. Claims are represented in a signed EAT token. | |||
Inclusion of a signed EAT as a claim cryptographically binds the EAT | Inclusion of a signed EAT as a claim cryptographically binds the EAT | |||
to the surrounding token. If it was conveyed in parallel with the | to the surrounding token. If it was conveyed in parallel with the | |||
skipping to change at page 37, line 18 ¶ | skipping to change at line 1669 ¶ | |||
of-creation of the token, the time at which the claims are collected | of-creation of the token, the time at which the claims are collected | |||
and the token is composed and signed. | and the token is composed and signed. | |||
The data for some claims may be held or cached for some period of | The data for some claims may be held or cached for some period of | |||
time before the token is created. This period may be long, even | time before the token is created. This period may be long, even | |||
days. Examples are measurements taken at boot or a geographic | days. Examples are measurements taken at boot or a geographic | |||
position fix taken the last time a satellite signal was received. | position fix taken the last time a satellite signal was received. | |||
There are individual timestamps associated with these claims to | There are individual timestamps associated with these claims to | |||
indicate their age is older than the "iat" timestamp. | indicate their age is older than the "iat" timestamp. | |||
CWT allows the use of floating-point for this claim. EAT disallows | CWT allows the use of floating-point for this claim, whereas EAT | |||
the use of floating-point. An EAT token MUST NOT contain an "iat" | disallows the use of floating-point. An EAT token MUST NOT contain | |||
claim in floating-point format. Any recipient of a token with a | an "iat" claim in floating-point format. Any recipient of a token | |||
floating-point format "iat" claim MUST consider it an error. | with a floating-point format "iat" claim MUST consider it an error. | |||
A 64-bit integer representation of the CBOR epoch-based time | A 64-bit integer representation of the CBOR epoch-based time | |||
[RFC8949] used by this claim can represent a range of +/- 500 billion | [RFC8949] used by this claim can represent a range of +/- 500 billion | |||
years, so the only point of a floating-point timestamp is to have | years, so the only point of a floating-point timestamp is to have | |||
precession greater than one second. This is not needed for EAT. | precession greater than one second. This is not needed for EAT. | |||
4.3.2. eat_profile (EAT Profile) Claim | 4.3.2. eat_profile (EAT Profile) Claim | |||
See Section 6 for the detailed description of an EAT profile. | See Section 6 for the detailed description of an EAT profile. | |||
The "eat_profile" claim identifies an EAT profile by either a Uniform | The "eat_profile" claim identifies an EAT profile by either a Uniform | |||
Resource Identifier (URI) or an Object Identifier (OID). Typically, | Resource Identifier (URI) or an OID. Typically, the URI will | |||
the URI will reference a document describing the profile. An OID is | reference a document describing the profile. An OID is just a unique | |||
just a unique identifier for the profile. It may exist anywhere in | identifier for the profile. It may exist anywhere in the OID tree. | |||
the OID tree. There is no requirement that the named document be | There is no requirement that the named document be publicly | |||
publicly accessible. The primary purpose of the "eat_profile" claim | accessible. The primary purpose of the "eat_profile" claim is to | |||
is to uniquely identify the profile even if it is a private profile. | uniquely identify the profile even if it is a private profile. | |||
The OID is always absolute and never relative. | The OID is always absolute and never relative. | |||
See Section 7.2.1 for OID and URI encoding. | See Section 7.2.1 for OID and URI encoding. | |||
$$Claims-Set-Claims //= (profile-label => general-uri / general-oid) | $$Claims-Set-Claims //= (profile-label => general-uri / general-oid) | |||
4.3.3. intuse (Intended Use) Claim | 4.3.3. intuse (Intended Use) Claim | |||
EATs may be employed in the context of several different | EATs may be employed in the context of several different | |||
applications. The "intuse" claim provides an indication to an EAT | applications. The "intuse" claim provides an indication to an EAT | |||
consumer about the intended usage of the token. This claim can be | consumer about the intended usage of the token. This claim can be | |||
used as a way for an application using EAT to internally distinguish | used as a way for an application using EAT to internally distinguish | |||
between different ways it utilizes EAT. The possible values are in | between different ways it utilizes EAT. The possible values are in | |||
the EAT Intended Use Registry defined in Section 10.5. | the "Entity Attestation Token (EAT) Intended Uses" registry defined | |||
in Section 10.5. | ||||
$$Claims-Set-Claims //= ( intended-use-label => intended-use-type ) | $$Claims-Set-Claims //= ( intended-use-label => intended-use-type ) | |||
intended-use-type = JC< text, int> | intended-use-type = JC< text, int> | |||
5. Detached EAT Bundles | 5. Detached EAT Bundles | |||
A detached EAT bundle is a message to convey an EAT plus detached | A detached EAT bundle is a message to convey an EAT plus detached | |||
claims sets secured by that EAT. It is a top-level message like a | claims sets secured by that EAT. It is a top-level message like a | |||
CWT or JWT. It can occur in any place that a CWT or JWT occurs, for | CWT or JWT. It can occur in any place that a CWT or JWT occurs, for | |||
example as a submodule nested token as defined in Section 4.2.18.3. | example, as a submodule nested token as defined in Section 4.2.18.3. | |||
A detached EAT bundle may be either CBOR or JSON-encoded. | A detached EAT bundle may be either CBOR or JSON encoded. | |||
A detached EAT bundle consists of two parts. | A detached EAT bundle consists of two parts. | |||
The first part is an encoded EAT as follows: | The first part is an encoded EAT that: | |||
* MUST have at least one submodule that is a detached submodule | * MUST have at least one submodule that is a detached submodule | |||
digest as defined in Section 4.2.18.2 | digest as defined in Section 4.2.18.2 | |||
* MAY be either CBOR or JSON-encoded and does not have to the the | * MAY be either CBOR or JSON encoded and does not have to be the | |||
same as the encoding of the bundle | same as the encoding of the bundle | |||
* MAY be a CWT, or JWT or some future-defined token type, but MUST | * MAY be a CWT, JWT, or some future-defined token type, but it MUST | |||
NOT be a detached EAT bundle | NOT be a detached EAT bundle | |||
* MUST be authenticity and integrity protected | * MUST be authenticity and integrity protected | |||
The same mechanism for distinguishing the type for nested token | The same mechanism for distinguishing the type for nested token | |||
submodules is employed here. | submodules is employed here. | |||
The second part is a map/object as follows: | The second part is a map/object that: | |||
* MUST be a Claims-Set | * MUST be a Claims-Set | |||
* MUST use the same encoding as the bundle | * MUST use the same encoding as the bundle | |||
* MUST be wrapped in a byte string when the encoding is CBOR and be | * MUST be wrapped in a byte string when the encoding is CBOR and be | |||
base64url-encoded when the encoding is JSON | base64url encoded when the encoding is JSON | |||
For CBOR-encoded detached EAT bundles, tag 602 can be used to | For a CBOR-encoded detached EAT bundle, tag 602 can be used to | |||
identify it. The standard rules apply for use or non-use of a tag. | identify it. The standard rules apply for use or non-use of a tag. | |||
When it is sent as a submodule, it is always sent as a tag to | When it is sent as a submodule, it is always sent as a tag to | |||
distinguish it from the other types of nested tokens. | distinguish it from the other types of nested tokens. | |||
The digests of the detached claims sets are associated with detached | The digests of the detached claims sets are associated with detached | |||
Claims-Sets by label/name. It is up to the constructor of the | Claims-Sets by label/name. It is up to the constructor of the | |||
detached EAT bundle to ensure the names uniquely identify the | detached EAT bundle to ensure that the names uniquely identify the | |||
detached claims sets. Since the names are used only in the detached | detached claims sets. Since the names are used only in the detached | |||
EAT bundle, they can be very short, perhaps one byte. | EAT bundle, they can be very short, perhaps one byte. | |||
BUNDLE-Messages = BUNDLE-Tagged-Message / BUNDLE-Untagged-Message | BUNDLE-Messages = BUNDLE-Tagged-Message / BUNDLE-Untagged-Message | |||
BUNDLE-Tagged-Message = #6.602(BUNDLE-Untagged-Message) | BUNDLE-Tagged-Message = #6.602(BUNDLE-Untagged-Message) | |||
BUNDLE-Untagged-Message = Detached-EAT-Bundle | BUNDLE-Untagged-Message = Detached-EAT-Bundle | |||
Detached-EAT-Bundle = [ | Detached-EAT-Bundle = [ | |||
main-token : Nested-Token, | main-token : Nested-Token, | |||
skipping to change at page 39, line 35 ¶ | skipping to change at line 1777 ¶ | |||
cbor-wrapped-claims-set> | cbor-wrapped-claims-set> | |||
} | } | |||
] | ] | |||
json-wrapped-claims-set = base64-url-text | json-wrapped-claims-set = base64-url-text | |||
cbor-wrapped-claims-set = bstr .cbor Claims-Set | cbor-wrapped-claims-set = bstr .cbor Claims-Set | |||
6. Profiles | 6. Profiles | |||
EAT makes normative use of CBOR, JSON, COSE, JOSE, CWT and JWT. Most | EAT makes normative use of CBOR, JSON, COSE, JOSE, CWT, and JWT. | |||
of these have implementation options to accommodate a range of use | Most of these have implementation options to accommodate a range of | |||
cases. | use cases. | |||
For example, COSE does not require a particular set of cryptographic | For example, COSE does not require a particular set of cryptographic | |||
algorithms so as to accommodate different usage scenarios and | algorithms so as to accommodate different usage scenarios and | |||
evolution of algorithms over time. Section 10 of [RFC9052] describes | evolution of algorithms over time. Section 10 of [RFC9052] describes | |||
the profiling considerations for COSE. | the profiling considerations for COSE. | |||
The use of encryption is optional for both CWT and JWT. Section 8 of | The use of encryption is optional for both CWT and JWT. Section 8 of | |||
[RFC7519] describes implementation requirement and recommendations | [RFC7519] describes implementation requirements and recommendations | |||
for JWT. | for JWT. | |||
Similarly, CBOR provides indefinite length encoding, which is not | Similarly, CBOR provides indefinite-length encoding, which is not | |||
commonly used, but valuable for very constrained devices. For EAT | commonly used but is valuable for very constrained devices. For EAT | |||
itself, in a particular use case some claims will be used and others | itself, in a particular use case some claims will be used and others | |||
will not. Section 4 of [RFC8949] describes serialization | will not. Section 4 of [RFC8949] describes serialization | |||
considerations for CBOR. | considerations for CBOR. | |||
For example a mobile phone use case may require the device make and | For example, a mobile phone use case may require the device make and | |||
model, and prohibit UEID and location for privacy reasons. The | model and may prohibit UEID and location for privacy reasons. The | |||
general EAT standard retains all this flexibility because it too is | general EAT standard retains all this flexibility because it too is | |||
aimed to accommodate a broad range of use cases. | aimed to accommodate a broad range of use cases. | |||
It is necessary to explicitly narrow these implementation options to | It is necessary to explicitly narrow these implementation options to | |||
guarantee interoperability. EAT chooses one general and explicit | guarantee interoperability. EAT chooses one general and explicit | |||
mechanism, the profile, to indicate the choices made for these | mechanism, the profile, to indicate the choices made for these | |||
implementation options for all aspects of the token. | implementation options for all aspects of the token. | |||
Below is a list of the various issues that should be addressed by a | Below is a list of the various issues that should be addressed by a | |||
profile. | profile. | |||
The "eat_profile" claim in Section 4.3.2 provides a unique identifier | The "eat_profile" claim in Section 4.3.2 provides a unique identifier | |||
for the profile a particular token uses. | for the profile a particular token uses. | |||
A profile can apply to evidence or to attestation results or both. | A profile can apply to evidence results, attestation results, or | |||
both. | ||||
6.1. Format of a Profile Document | 6.1. Format of a Profile Document | |||
A profile document does not have to be in any particular format. It | A profile document does not have to be in any particular format. It | |||
may be simple text, something more formal or a combination. | may be simple text, something more formal, or a combination of both. | |||
A profile may define, and possibly register, one or more new claims | A profile may define, and possibly register, one or more new claims | |||
if needed. A profile may also reuse one or more already defined | if needed. A profile may also reuse one or more already defined | |||
claims, either as-is or with values constrained to a subset or | claims either as is or with values constrained to a subset or | |||
subrange. | subrange. | |||
6.2. Full and Partial Profiles | 6.2. Full and Partial Profiles | |||
For a "full" profile, the receiver will be able to decode and verify | For a "full" profile, the receiver will be able to decode and verify | |||
every possible EAT sent when a sender and receiver both adhere to it. | every possible EAT sent when a sender and receiver both adhere to it. | |||
For a "partial" profile, there are still some protocol options left | For a "partial" profile, there are still some protocol options left | |||
undecided. | undecided. | |||
For example, a profile that allows the use of signing algorithms by | For example, a profile that allows the use of signing algorithms by | |||
the sender that the receiver is not required to support is a partial | the sender that the receiver is not required to support is a partial | |||
profile. The sender might choose a signing algorithm that some | profile. The sender might choose a signing algorithm that some | |||
receivers do not support. | receivers do not support. | |||
Full profiles MUST be complete such that a complying receiver can | Full profiles MUST be complete such that a complying receiver can | |||
decode, verify and check for freshness every EAT created by a | decode, verify, and check for freshness for every EAT created by a | |||
complying sender. Full profiles do not need to require the receiver | complying sender. Full profiles do not need to require the receiver | |||
fully handle every claim in an EAT from a complying sender. Profile | to fully handle every claim in an EAT from a complying sender. | |||
specifications may assume the receiver has access to the necessary | Profile specifications may assume the receiver has access to the | |||
verification keys or may go into specific detail on the means to | necessary verification keys or may go into specific detail on the | |||
access verification keys. | means to access verification keys. | |||
The "eat_profile" claim MUST NOT be used to identify partial | The "eat_profile" claim MUST NOT be used to identify partial | |||
profiles. | profiles. | |||
While fewer profiles are preferrable, sometimes several may be needed | While fewer profiles are preferable, sometimes several may be needed | |||
for a use case. One approach to handling variation in devices might | for a use case. One approach to handling variation in devices might | |||
be to define several full profiles that are variants of each other. | be to define several full profiles that are variants of each other. | |||
It is relatively easy and inexpensive to define profiles as they do | It is relatively easy and inexpensive to define profiles as they do | |||
not have to be standards track and do not have to be registered | not have to be published on the Standards Track and do not have to be | |||
anywhere. For example, flexibility for post-quantum algorithms can | registered anywhere. For example, flexibility for post-quantum | |||
be handled as follows. First, define a full profile for a set of | algorithms can be handled as follows. First, define a full profile | |||
non-post-quantum algorithms for current use. Then, when post-quantum | for a set of non-post-quantum algorithms for current use. Then, when | |||
algorithms are settled, define another full profile derived from the | post-quantum algorithms are settled, define another full profile | |||
first. | derived from the first. | |||
6.3. List of Profile Issues | 6.3. List of Profile Issues | |||
The following is a list of EAT, CWT, JWT, COSE, JOSE and CBOR options | The following is a list of EAT, CWT, JWT, COSE, JOSE, and CBOR | |||
that a profile should address. | options that a profile should address. | |||
6.3.1. Use of JSON, CBOR or both | 6.3.1. Use of JSON, CBOR, or Both | |||
A profile should specify whether CBOR, JSON or both may be sent. A | A profile should specify whether CBOR, JSON, or both may be sent. A | |||
profile should specify that the receiver can accept all encodings | profile should specify that the receiver can accept all encodings | |||
that the sender is allowed to send. | that the sender is allowed to send. | |||
This should be specified for the top-level and all nested tokens. | This should be specified for the top level and all nested tokens. | |||
For example, a profile might require all nested tokens to be of the | For example, a profile might require all nested tokens to be of the | |||
same encoding of the top level token. | same encoding of the top-level token. | |||
6.3.2. CBOR Map and Array Encoding | 6.3.2. CBOR Map and Array Encoding | |||
A profile should specify whether definite-length arrays/maps, | A profile should specify whether definite-length arrays/maps, | |||
indefinite-length arrays/maps or both may be sent. A profile should | indefinite-length arrays/maps, or both may be sent. A profile should | |||
specify that the receiver be able to accept all length encodings that | specify that the receiver accepts all length encodings that the | |||
the sender is allowed to send. | sender is allowed to send. | |||
This applies to individual EAT claims, CWT and COSE parts of the | This applies to individual EAT claims, CWT, and COSE parts of the | |||
implementation. | implementation. | |||
For most use cases, specifying that only definite-length arrays/maps | For most use cases, specifying that only definite-length arrays/maps | |||
may be sent is suitable. | may be sent is suitable. | |||
6.3.3. CBOR String Encoding | 6.3.3. CBOR String Encoding | |||
A profile should specify whether definite-length strings, indefinite- | A profile should specify whether definite-length strings, indefinite- | |||
length strings or both may be sent. A profile should specify that | length strings, or both may be sent. A profile should specify that | |||
the receiver be able to accept all types of string encodings that the | the receiver accepts all types of string encodings that the sender is | |||
sender is allowed to send. | allowed to send. | |||
For most use cases, specifying that only definite-length strings may | For most use cases, specifying that only definite-length strings may | |||
be sent is suitable. | be sent is suitable. | |||
6.3.4. CBOR Preferred Serialization | 6.3.4. CBOR Preferred Serialization | |||
A profile should specify whether or not CBOR preferred serialization | A profile should specify whether or not CBOR preferred serialization | |||
must be sent or not. A profile should specify the receiver be able | must be sent or not. A profile should specify that the receiver | |||
to accept preferred and/or non-preferred serialization so it will be | accepts preferred and/or non-preferred serialization, so it will be | |||
able to accept anything sent by the sender. | able to accept anything sent by the sender. | |||
6.3.5. CBOR Tags | 6.3.5. CBOR Tags | |||
The profile should specify whether the token should be a CWT Tag or | The profile should specify whether the token should be a CWT tag or | |||
not. | not. | |||
When COSE protection is used, the profile should specify whether COSE | When COSE protection is used, the profile should specify whether COSE | |||
tags are used or not. Note that RFC 8392 requires COSE tags be used | tags are used or not. Note that RFC 8392 requires COSE tags be used | |||
in a CWT tag. | in a CWT tag. | |||
Often a tag is unnecessary because the surrounding or carrying | Often, a tag is unnecessary because the surrounding or carrying | |||
protocol identifies the object as an EAT. | protocol identifies the object as an EAT. | |||
6.3.6. COSE/JOSE Protection | 6.3.6. COSE/JOSE Protection | |||
COSE and JOSE have several options for signed, MACed and encrypted | COSE and JOSE have several options for signed, MACed, and encrypted | |||
messages. JWT may use the JOSE NULL protection option. It is | messages. JWT may use the JOSE NULL protection option. It is | |||
possible to implement no protection, sign only, MAC only, sign then | possible to implement no protection, sign only, MAC only, sign then | |||
encrypt and so on. All combinations allowed by COSE, JOSE, JWT, and | encrypt, and so on. All combinations allowed by COSE, JOSE, JWT, and | |||
CWT are allowed by EAT. | CWT are allowed by EAT. | |||
A profile should specify all signing, encryption and MAC message | A profile should specify all signing, encryption, and MAC message | |||
formats that may be sent. For example, a profile might allow only | formats that may be sent. For example, a profile might allow only | |||
COSE_Sign1 to be sent. For another example, a profile might allow | COSE_Sign1 to be sent. As another example, a profile might allow | |||
COSE_Sign and COSE_Encrypt to be sent to carry multiple signatures | COSE_Sign and COSE_Encrypt to be sent to carry multiple signatures | |||
for post quantum cryptography and to use encryption to provide | for post quantum cryptography and to use encryption to provide | |||
confidentiality. | confidentiality. | |||
A profile should specify the receiver accepts all message formats | A profile should specify that the receiver accepts all message | |||
that are allowed to be sent. | formats that are allowed to be sent. | |||
When both signing and encryption are allowed, a profile should | When both signing and encryption are allowed, a profile should | |||
specify which is applied first. | specify which is applied first. | |||
6.3.7. COSE/JOSE Algorithms | 6.3.7. COSE/JOSE Algorithms | |||
See the section on "Application Profiling Considerations" in | See "Application Profiling Considerations" (Section 10 of [RFC9052]) | |||
[RFC9052] for a discussion on selection of cryptographic algorithms | for a discussion on the selection of cryptographic algorithms and | |||
and related issues. | related issues. | |||
The profile MAY require the protocol or system using EAT to provide | The profile MAY require the protocol or system using EAT to provide | |||
an algorithm negotiation mechanism. | an algorithm negotiation mechanism. | |||
If not, the profile document should list a set of algorithms for each | If not, the profile document should list a set of algorithms for each | |||
COSE and JOSE message type allowed by the profile per Section 6.3.6. | COSE and JOSE message type allowed by the profile per Section 6.3.6. | |||
The verifier should implement all of them. The attester may | The verifier should implement all of them. The attester may | |||
implement any of them it wishes, possibly just one for each message | implement any of them it wishes, possibly just one for each message | |||
type. | type. | |||
If detached submodule digests are used the profile should address the | If detached submodule digests are used, the profile should address | |||
determination of the hash algorithm(s) for the digests. | the determination of the hash algorithm(s) for the digests. | |||
6.3.8. Detached EAT Bundle Support | 6.3.8. Detached EAT Bundle Support | |||
A profile should specify whether or not a detached EAT bundle | A profile should specify whether or not a detached EAT bundle | |||
(Section 5) can be sent. A profile should specify that a receiver be | (Section 5) can be sent. A profile should specify that a receiver | |||
able to accept a detached EAT bundle if the sender is allowed to send | accepts a detached EAT bundle if the sender is allowed to send it. | |||
it. | ||||
6.3.9. Key Identification | 6.3.9. Key Identification | |||
A profile should specify what must be sent to identify the | A profile should specify what must be sent to identify the | |||
verification, decryption or MAC key or keys. If multiple methods of | verification, decryption, or MAC key(s). If multiple methods of key | |||
key identification may be sent, a profile should require the receiver | identification may be sent, a profile should require the receiver to | |||
support them all. | support them all. | |||
Appendix F describes a number of methods for identifying verification | Appendix F describes a number of methods for identifying verification | |||
keys. When encryption is used, there are further considerations. In | keys. When encryption is used, there are further considerations. In | |||
some cases key identification may be very simple and in others | some cases, key identification may be very simple, and in other | |||
involve multiple components. For example, it may be simple through | cases, multiple components may be involved. For example, it may be | |||
use of COSE key ID or it may be complex through use of an X.509 | simple through the use of a COSE key ID, or it may be complex through | |||
certificate hierarchy. | the use of an X.509 certificate hierarchy. | |||
While not always possible, a profile should specify or make reference | While not always possible, a profile should specify, or make | |||
to, a full end-end specification for key identification. For | reference to, a full end-to-end specification for key identification. | |||
example, a profile should specify in full detail how COSE key IDs are | For example, a profile should specify in full detail how COSE key IDs | |||
to be created, their lifecycle and such rather than just specifying | are to be created, their life cycle, and such rather than just | |||
that a COSE key ID be used. For example, a profile should specify | specifying that a COSE key ID be used. For example, a profile should | |||
the full details of an X.509 hierarchy including extension | specify the full details of an X.509 hierarchy including extension | |||
processing, algorithms allowed and so on rather than just saying | processing, algorithms allowed, and so on rather than just saying | |||
X.509 certificates are used. | X.509 certificates are used. | |||
6.3.10. Endorsement Identification | 6.3.10. Endorsement Identification | |||
Similar to, or perhaps the same as verification key identification, | Similar to, or perhaps the same as, verification key identification, | |||
the profile may wish to specify how endorsements are to be | the profile may wish to specify how endorsements are to be | |||
identified. However note that endorsement identification is | identified. However, note that endorsement identification is | |||
optional, whereas key identification is not. | optional, whereas key identification is not. | |||
6.3.11. Freshness | 6.3.11. Freshness | |||
Security considerations, see Section 9.3, require a mechanism to | Security considerations (see Section 9.3) require a mechanism to | |||
provide freshness. This may be the EAT nonce claim in Section 4.1, | provide freshness. This may be the EAT nonce claim in Section 4.1 or | |||
or some claim or mechanism defined outside this document. The | some claim or mechanism defined outside this document. Several | |||
section on freshness in [RFC9334] describes several options. A | options are described in "Freshness" (Section 10 of [RFC9334]). A | |||
profile should specify which freshness mechanism or mechanisms can be | profile should specify which freshness mechanism or mechanisms can be | |||
used. | used. | |||
If the EAT nonce claim is used, a profile should specify whether | If the EAT nonce claim is used, a profile should specify whether | |||
multiple nonces may be sent. If a profile allows multiple nonces to | multiple nonces may be sent. If a profile allows multiple nonces to | |||
be sent, it should require the receiver to process multiple nonces. | be sent, it should require the receiver to process multiple nonces. | |||
6.3.12. Claims Requirements | 6.3.12. Claims Requirements | |||
A profile may define new claims that are not defined in this | A profile may define new claims that are not defined in this | |||
document. | document. | |||
This document requires an EAT receiver must accept tokens with claims | This document requires that an EAT receiver must accept tokens with | |||
it does not understand. A profile for a specific use case may | claims it does not understand. A profile for a specific use case may | |||
reverse this and allow a receiver to reject tokens with claims it | reverse this and allow a receiver to reject tokens with claims it | |||
does not understand. A profile for a specific use case may specify | does not understand. A profile for a specific use case may specify | |||
that specific claims are prohibited. | that specific claims are prohibited. | |||
A profile for a specific use case may modify this and specify that | A profile for a specific use case may modify this and specify that | |||
some claims are required. | some claims are required. | |||
A profile may constrain the definition of claims that are defined in | A profile may constrain the definition of claims that are defined in | |||
this document or elsewhere. For example, a profile may require the | this document or elsewhere. For example, a profile may require the | |||
EAT nonce be a certain length or the "location" claim always include | EAT nonce to be a certain length or the "location" claim to always | |||
the altitude. | include the altitude. | |||
Some claims are "pluggable" in that they allow different formats for | Some claims are "pluggable" in that they allow different formats for | |||
their content. The "manifests" claim (Section 4.2.15) along with the | their content. The "manifests" claim (Section 4.2.15) along with the | |||
measurement and "measurements" (Section 4.2.16) claims are examples | measurement and "measurements" (Section 4.2.16) claims are examples | |||
of this, allowing the use of CoSWID and other formats. A profile | of this, allowing the use of CoSWID and other formats. A profile | |||
should specify which formats are allowed to be sent, with the | should specify which formats are allowed to be sent, with the | |||
assumption that the corresponding CoAP content types have been | assumption that the corresponding CoAP content types have been | |||
registered. A profile should require the receiver to accept all | registered. A profile should require the receiver to accept all | |||
formats that are allowed to be sent. | formats that are allowed to be sent. | |||
Further, if there is variation within a format that is allowed, the | Further, if there is variation within a format that is allowed, the | |||
profile should specify which variations can be sent. For example, | profile should specify which variations can be sent. For example, | |||
there are variations in the CoSWID format. A profile that require | there are variations in the CoSWID format, such as a profile that | |||
the receiver to accept all variations that are allowed to be sent. | requires the receiver to accept all variations that are allowed to be | |||
sent. | ||||
6.4. The Constrained Device Standard Profile | 6.4. The Constrained Device Standard Profile | |||
It is anticipated that there will be many profiles defined for EAT | It is anticipated that there will be many profiles defined for EAT | |||
for many different use cases. This section gives a normative | for many different use cases. This section gives a normative | |||
definition of one profile that is good for many constrained device | definition of one profile that is good for many constrained device | |||
use cases. | use cases. | |||
The identifier for this profile is "urn:ietf:rfc:rfcTBD". | The identifier for this profile is "urn:ietf:rfc:rfc9711". | |||
// RFC Editor: please replace rfcTBD with this RFC number and remove | ||||
// this note. | ||||
+================+=============================================+ | +================+==================================================+ | |||
| Issue | Profile Definition | | | Issue | Profile Definition | | |||
+================+=============================================+ | +================+==================================================+ | |||
| CBOR/JSON | CBOR MUST be used | | | CBOR/JSON | CBOR MUST be used. | | |||
+----------------+---------------------------------------------+ | +----------------+--------------------------------------------------+ | |||
| CBOR Encoding | Definite length maps and arrays MUST be | | | CBOR Encoding | Definite-length maps and arrays MUST be | | |||
| | used | | | | used. | | |||
+----------------+---------------------------------------------+ | +----------------+--------------------------------------------------+ | |||
| CBOR Encoding | Definite length strings MUST be used | | | CBOR Encoding | Definite-length strings MUST be used. | | |||
+----------------+---------------------------------------------+ | +----------------+--------------------------------------------------+ | |||
| CBOR | Preferred serialization MUST be used | | | CBOR | Preferred serialization MUST be used. | | |||
| Serialization | | | | Serialization | | | |||
+----------------+---------------------------------------------+ | +----------------+--------------------------------------------------+ | |||
| COSE | COSE_Sign1 MUST be used | | | COSE | COSE_Sign1 MUST be used. | | |||
| Protection | | | | Protection | | | |||
+----------------+---------------------------------------------+ | +----------------+--------------------------------------------------+ | |||
| Algorithms | The receiver MUST accept ES256, ES384 and | | | Algorithms | The receiver MUST accept ES256, ES384, | | |||
| | ES512; the sender MUST send one of these | | | | and ES512; the sender MUST send one of | | |||
+----------------+---------------------------------------------+ | | | these. | | |||
| Detached EAT | Detached EAT bundles MUST NOT be sent with | | +----------------+--------------------------------------------------+ | |||
| Bundle Usage | this profile | | | Detached EAT | Detached EAT bundles MUST NOT be sent | | |||
+----------------+---------------------------------------------+ | | Bundle Usage | with this profile. | | |||
| Verification | Either the COSE kid or the UEID MUST be | | +----------------+--------------------------------------------------+ | |||
| Key | used to identify the verification key. If | | | Verification | Either the COSE key identifier (kid) or | | |||
| Identification | both are present, the kid takes precedence. | | | Key | the UEID MUST be used to identify the | | |||
| | (It is assumed the receiver has access to a | | | Identification | verification key. If both are present, | | |||
| | database of trusted verification keys which | | | | the kid takes precedence. (It is assumed | | |||
| | allows lookup of the verification key ID; | | | | the receiver has access to a database of | | |||
| | the key format and means of distribution | | | | trusted verification keys, which allows a | | |||
| | are beyond the scope of this profile) | | | | lookup of the verification key ID; the | | |||
+----------------+---------------------------------------------+ | | | key format and means of distribution are | | |||
| Endorsements | This profile contains no endorsement | | | | beyond the scope of this profile.) | | |||
| | identifier | | +----------------+--------------------------------------------------+ | |||
+----------------+---------------------------------------------+ | | Endorsements | This profile contains no endorsement | | |||
| Freshness | A new single unique nonce MUST be used for | | | | identifier. | | |||
| | every token request | | +----------------+--------------------------------------------------+ | |||
+----------------+---------------------------------------------+ | | Freshness | A new single unique nonce MUST be used | | |||
| Claims | No requirement is made on the presence or | | | | for every token request. | | |||
| | absence of claims other than requiring an | | +----------------+--------------------------------------------------+ | |||
| | EAT nonce. As per general EAT rules, the | | | Claims | No requirement is made for the presence | | |||
| | receiver MUST NOT error out on claims it | | | | or absence of claims other than requiring | | |||
| | does not understand. | | | | an EAT nonce. As per general EAT rules, | | |||
+----------------+---------------------------------------------+ | | | the receiver MUST NOT error out on claims | | |||
| | it does not understand. | | ||||
+----------------+--------------------------------------------------+ | ||||
Table 2: Constrained Device Profile Definition | Table 2: Constrained Device Profile Definition | |||
Any profile with different requirements than those above MUST have a | Any profile with different requirements than those above MUST have a | |||
different profile identifier. | different profile identifier. | |||
Note that many claims can be present for tokens conforming to this | Note that many claims can be present for tokens conforming to this | |||
profile, even claims not defined in this document. Note also that | profile, even claims not defined in this document. Note also that | |||
even slight deviation from the above requirements is considered a | even slight deviation from the above requirements is considered a | |||
different profile that MUST have a different identifier. For | different profile that MUST have a different identifier. For | |||
example, if a kid (key identifier) or UEID is not used for key | example, if a kid (key identifier) or UEID is not used for key | |||
identification, it is not in conformance with this profile. For | identification, it is not in conformance with this profile. As | |||
another example, requiring the presence of some claim is also not in | another example, requiring the presence of some claim is also not in | |||
conformance and requires another profile. | conformance and requires another profile. | |||
Derivations of this profile are encouraged. For example another | Derivations of this profile are encouraged. For example, another | |||
profile may be simply defined as The Constrained Device Standard | profile may be simply defined as "The Constrained Device Standard | |||
Profile plus the requirement for the presence of claim xxxx and claim | Profile" plus the requirement for the presence of claim xxxx and | |||
yyyy. | claim yyyy. | |||
7. Encoding and Collected CDDL | 7. Encoding and Collected CDDL | |||
An EAT is fundamentally defined using CDDL. This document specifies | An EAT is fundamentally defined using CDDL. This document specifies | |||
how to encode the CDDL in CBOR or JSON. Since CBOR can express some | how to encode the CDDL in CBOR or JSON. Since CBOR can express some | |||
things that JSON cannot (e.g., tags) or that are expressed | things that JSON cannot (e.g., tags) or that are expressed | |||
differently (e.g., labels) there is some CDDL that is specific to the | differently (e.g., labels), there is some CDDL that is specific to | |||
encoding. | the encoding. | |||
7.1. Claims-Set and CDDL for CWT and JWT | 7.1. Claims-Set and CDDL for CWT and JWT | |||
CDDL was not used to define CWT or JWT. It was not available at the | CDDL was not used to define CWT or JWT. It was not available at the | |||
time. | time. | |||
This document defines CDDL for both CWT and JWT. This document does | This document defines CDDL for both CWT and JWT. This document does | |||
not change the encoding or semantics of anything in a CWT or JWT. | not change the encoding or semantics of anything in a CWT or JWT. | |||
A Claims-Set is the central data structure for EAT, CWT and JWT. It | A Claims-Set is the central data structure for EAT, CWT, and JWT. It | |||
holds all the claims and is the structure that is secured by signing | holds all the claims and is the structure that is secured by signing | |||
or other means. It is not possible to define EAT, CWT, or JWT in | or other means. It is not possible to define EAT, CWT, or JWT in | |||
CDDL without it. The CDDL definition of Claims-Set here is | CDDL without it. The CDDL definition of Claims-Set here is | |||
applicable to EAT, CWT and JWT. | applicable to EAT, CWT, and JWT. | |||
This document specifies how to encode a Claims-Set in CBOR or JSON. | This document specifies how to encode a Claims-Set in CBOR or JSON. | |||
With the exception of nested tokens and some other externally defined | With the exception of nested tokens and some other externally defined | |||
structures (e.g., SWIDs) an entire Claims-Set must be encoded in | structures (e.g., SWIDs), an entire Claims-Set must be encoded in | |||
either CBOR or JSON, never a mixture. | either CBOR or JSON, never a mixture. | |||
CDDL for the seven claims defined by [RFC8392] and [RFC7519] is | CDDL for the seven claims defined by [RFC8392] and [RFC7519] is | |||
included here. | included here. | |||
7.2. Encoding Data Types | 7.2. Encoding Data Types | |||
This makes use of the types defined in [RFC8610] Appendix D, Standard | This makes use of the types defined in "Standard Prelude" (Appendix D | |||
Prelude. | of [RFC8610]). | |||
7.2.1. Common Data Types | 7.2.1. Common Data Types | |||
time-int is identical to the epoch-based time, but disallows | time-int is identical to the epoch-based time but disallows floating- | |||
floating-point representation. | point representation. | |||
For CBOR-encoded tokens, OIDs are specified using the CDDL type name | For CBOR-encoded tokens, OIDs are specified using the CDDL type name | |||
"oid" from [RFC9090]. They are encoded without the tag number. For | "oid" from [RFC9090]. They are encoded without the tag number. For | |||
JSON-encoded tokens, OIDs are a text string in the common form of | JSON-encoded tokens, OIDs are text strings in the common form of | |||
"nn.nn.nn...". | "nn.nn.nn...". | |||
Unless expliclity indicated, URIs are not the URI tag defined in | Unless explicitly indicated, URIs are not the URI tag defined in | |||
[RFC8949]. They are just text strings that contain a URI conforming | [RFC8949]. They are just text strings that contain a URI conforming | |||
to the format defined in [RFC3986]. | to the format defined in [RFC3986]. | |||
time-int = #6.1(int) | time-int = #6.1(int) | |||
binary-data = JC< base64-url-text, bstr> | binary-data = JC< base64-url-text, bstr> | |||
base64-url-text = tstr .regexp "[A-Za-z0-9_-]+" | base64-url-text = tstr .regexp "[A-Za-z0-9_-]+" | |||
general-oid = JC< json-oid, ~oid > | general-oid = JC< json-oid, ~oid > | |||
json-oid = tstr .regexp "([0-2])((\\.0)|(\\.[1-9][0-9]*))*" | json-oid = tstr .regexp "([0-2])((\\.0)|(\\.[1-9][0-9]*))*" | |||
general-uri = JC< text, ~uri > | general-uri = JC< text, ~uri > | |||
coap-content-format = uint .le 65535 | coap-content-format = uint .le 65535 | |||
7.2.2. JSON Interoperability | 7.2.2. JSON Interoperability | |||
JSON should be encoded per [RFC8610], Appendix E. In addition, the | JSON should be encoded per Appendix E of [RFC8610]. In addition, the | |||
following CDDL types are encoded in JSON as follows: | following CDDL types are encoded in JSON as follows: | |||
* bstr -- MUST be base64url-encoded | * bstr -- MUST be base64url encoded. | |||
* time -- MUST be encoded as NumericDate as described in Section 2 | * time -- MUST be encoded as NumericDate as described in Section 2 | |||
of [RFC7519]. | of [RFC7519]. | |||
* string-or-uri -- MUST be encoded as StringOrURI as described in | * string-or-uri -- MUST be encoded as StringOrURI as described in | |||
Section 2 of [RFC7519]. | Section 2 of [RFC7519]. | |||
* uri -- MUST be a URI [RFC3986]. | * uri -- MUST be a URI [RFC3986]. | |||
* oid -- MUST be encoded as a string using the well established | * oid -- MUST be encoded as a string using the well-established | |||
dotted-decimal notation (e.g., the text "1.2.250.1") [RFC4517]. | dotted-decimal notation (e.g., the text "1.2.250.1") [RFC4517]. | |||
The CDDL generic "JC<>" is used in most places where there is a | The CDDL generic "JC<>" is used in most places where there is a | |||
variance between CBOR and JSON. The first argument is the CDDL for | variance between CBOR and JSON. The first argument is the CDDL for | |||
JSON and the second is CDDL for CBOR. | JSON, and the second is CDDL for CBOR. | |||
7.2.3. Labels | 7.2.3. Labels | |||
Most map labels, Claims-Keys, Claim-Names and enumerated-type values | Most map labels, Claims-Keys, Claim-Names, and enumerated-type values | |||
are integers for CBOR-encoded tokens and strings for JSON-encoded | are integers for CBOR-encoded tokens and strings for JSON-encoded | |||
tokens. When this is the case the "JC<>" CDDL construct is used to | tokens. When this is the case, the JC<> CDDL construct is used to | |||
give both the integer and string values. | give both the integer and string values. | |||
7.2.4. CBOR Interoperability | 7.2.4. CBOR Interoperability | |||
CBOR allows data items to be serialized in more than one form to | CBOR allows data items to be serialized in more than one form to | |||
accommodate a variety of use cases. This is addressed in Section 6. | accommodate a variety of use cases. This is addressed in Section 6. | |||
7.3. Collected CDDL | 7.3. Collected CDDL | |||
7.3.1. Payload CDDL | 7.3.1. Payload CDDL | |||
This CDDL defines all the EAT Claims that are added to the main | The payload CDDL defines all the EAT claims that are added to the | |||
definition of a Claim-Set in Appendix D. Claims-Set is the payload | main definition of a Claims-Set in Appendix D. Claims-Set is the | |||
for CWT, JWT and potentially other token types. This is for both | payload for CWT, JWT, and potentially other token types. This is for | |||
CBOR and JSON. When there is variation between CBOR and JSON, the | both CBOR and JSON. When there is variation between CBOR and JSON, | |||
JC<> CDDL generic defined in Appendix D. Note that the JC<> generic | the JC<> CDDL generic defined in Appendix D. Note that the JC<> | |||
uses the CDDL ".feature" control operator defined in [RFC9165]. | generic uses the CDDL ".feature" control operator defined in | |||
[RFC9165]. | ||||
This CDDL uses, but does not define Submodule or nested tokens | This CDDL uses, but does not define, Submodule or nested tokens | |||
because the definition for these types varies between CBOR and JSON | because the definition for these types varies between CBOR and JSON | |||
and the JC<> generic cannot be used to define it. The submodule | and the JC<> generic cannot be used to define it. The submodule | |||
claim is the one place where a CBOR token can be nested inside a JSON | claim is the one place where a CBOR token can be nested inside a JSON | |||
token and vice versa. Encoding-specific definitions are provided in | token and vice versa. Encoding-specific definitions are provided in | |||
the following sections. | the following sections. | |||
time-int = #6.1(int) | time-int = #6.1(int) | |||
binary-data = JC< base64-url-text, bstr> | binary-data = JC< base64-url-text, bstr> | |||
skipping to change at page 56, line 15 ¶ | skipping to change at line 2517 ¶ | |||
8. Privacy Considerations | 8. Privacy Considerations | |||
Certain EAT claims can be used to track the owner of an entity; | Certain EAT claims can be used to track the owner of an entity; | |||
therefore, implementations should consider privacy-preserving options | therefore, implementations should consider privacy-preserving options | |||
dependent on the usage of the EAT. For example, the location claim | dependent on the usage of the EAT. For example, the location claim | |||
might be suppressed in EATs sent to unauthenticated consumers. | might be suppressed in EATs sent to unauthenticated consumers. | |||
8.1. UEID and SUEID Privacy Considerations | 8.1. UEID and SUEID Privacy Considerations | |||
A UEID is usually not privacy-preserving. Relying parties receiving | A UEID is usually not privacy-preserving. Relying parties receiving | |||
tokens from a particular entity will be able to know the tokens are | tokens from a particular entity will be able to know that the tokens | |||
from the same entity and be able to identify the entity issuing those | are from the same entity and identify the entity issuing those | |||
tokens. | tokens. | |||
Thus the use of the claim may violate privacy policies. In other | Thus, the use of the claim may violate privacy policies. In other | |||
usage situations a UEID will not be allowed for certain products like | usage situations, a UEID will not be allowed for certain products | |||
browsers that give privacy for the end user. It will often be the | such as browsers that give privacy for the end user. It will often | |||
case that tokens will not have a UEID for these reasons. | be the case that tokens will not have a UEID for these reasons. | |||
An SUEID is also usually not privacy-preserving. In some cases it | An SUEID is also usually not privacy-preserving. In some cases, it | |||
may have fewer privacy issues than a UEID depending on when and how | may have fewer privacy issues than a UEID depending on when and how | |||
and when it is generated. | it is generated. | |||
There are several strategies that can be used to still be able to put | There are several strategies that can be used to still be able to put | |||
UEIDs and SUEIDs in tokens: | UEIDs and SUEIDs in tokens: | |||
* The entity obtains explicit permission from the user of the entity | * The entity obtains explicit permission from the user of the entity | |||
to use the UEID/SUEID. This may be through a prompt. It may also | to use the UEID/SUEID; this may be through a prompt or through a | |||
be through a license agreement. For example, agreements for some | license agreement. For example, agreements for some online | |||
online banking and brokerage services might already cover use of a | banking and brokerage services might already cover use of a UEID/ | |||
UEID/SUEID. | SUEID. | |||
* The UEID/SUEID is used only in a particular context or particular | * The UEID/SUEID is used only in a particular context or use case. | |||
use case. It is used only by one relying party. | It is used only by one relying party. | |||
* The entity authenticates the relying party and generates a derived | * The entity authenticates the relying party and generates a derived | |||
UEID/SUEID just for that particular relying party. For example, | UEID/SUEID just for that particular relying party. For example, | |||
the relying party could prove their identity cryptographically to | the relying party could prove their identity cryptographically to | |||
the entity, then the entity generates a UEID just for that relying | the entity, then the entity generates a UEID just for that relying | |||
party by hashing a proofed relying party ID with the main entity | party by hashing a proofed relying party ID with the main entity | |||
UEID/SUEID. | UEID/SUEID. | |||
Note that some of these privacy preservation strategies result in | Note that some of these privacy preservation strategies result in | |||
multiple UEIDs and SUEIDs per entity. Each UEID/SUEID is used in a | multiple UEIDs and SUEIDs per entity. Each UEID/SUEID is used in a | |||
different context, use case or system on the entity. However, from | different context, use case, or system on the entity. However, from | |||
the view of the relying party, there is just one UEID and it is still | the view of the relying party, there is just one UEID and it is still | |||
globally universal across manufacturers. | globally universal across manufacturers. | |||
8.2. Location Privacy Considerations | 8.2. Location Privacy Considerations | |||
Geographic location is most always considered personally identifiable | Geographic location is almost always considered personally | |||
information. Implementers should consider laws and regulations | identifiable information. Implementors should consider laws and | |||
governing the transmission of location data from end user devices to | regulations governing the transmission of location data from end-user | |||
servers and services. Implementers should consider using location | devices to servers and services. Implementors should consider using | |||
management facilities offered by the operating system on the entity | location management facilities offered by the operating system on the | |||
generating the attestation. For example, many mobile phones prompt | entity generating the attestation. For example, many mobile phones | |||
the user for permission before sending location data. | prompt the user for permission before sending location data. | |||
8.3. Boot Seed Privacy Considerations | 8.3. Boot Seed Privacy Considerations | |||
The "bootseed" claim is effectively a stable entity identifier within | The "bootseed" claim is effectively a stable entity identifier within | |||
a given boot epoch. Therefore, it is not suitable for use in | a given boot epoch. Therefore, it is not suitable for use in | |||
attestation schemes that are privacy-preserving. | attestation schemes that are privacy-preserving. | |||
8.4. Replay Protection and Privacy | 8.4. Replay Protection and Privacy | |||
EAT defines the EAT nonce claim for replay protection and token | EAT defines the EAT nonce claim for replay protection and token | |||
freshness. The nonce claim is based on a value usually derived | freshness. The nonce claim is based on a value usually derived | |||
remotely (outside of the entity). This claim might be used to | remotely (outside of the entity). This claim might be used to | |||
extract and convey personally identifying information either | extract and convey personally identifying information either | |||
inadvertently or by intention. For instance, an implementor may | inadvertently or by intention. For instance, an implementor may | |||
choose a nonce equivalent to a username associated with the device | choose a nonce equivalent to a username associated with the device | |||
(e.g., account login). If the token is inspected by a 3rd-party then | (e.g., account login). If the token is inspected by a third party, | |||
this information could be used to identify the source of the token or | then this information could be used to identify the source of the | |||
an account associated with the token. To avoid the conveyance of | token or an account associated with the token. To avoid the | |||
privacy-related information in the nonce claim, it should be derived | conveyance of privacy-related information in the nonce claim, it | |||
using a salt that originates from a true and reliable random number | should be derived using a salt that originates from a true and | |||
generator or any other source of randomness that would still meet the | reliable random number generator or any other source of randomness | |||
target system requirements for replay protection and token freshness. | that would still meet the target system requirements for replay | |||
protection and token freshness. | ||||
9. Security Considerations | 9. Security Considerations | |||
The security considerations provided in Section 8 of [RFC8392] and | The security considerations provided in Section 8 of [RFC8392] and of | |||
Section 11 of [RFC7519] apply to EAT in its CWT and JWT form, | Section 11 of [RFC7519] apply to EAT in its CWT and JWT form, | |||
respectively. Moreover, Chapter 12 of [RFC9334] is also applicable | respectively. Moreover, Section 12 of [RFC9334] is also applicable | |||
to implementations of EAT. In addition, implementors should consider | to implementations of EAT. In addition, implementors should consider | |||
the following. | the information in the following subsections. | |||
9.1. Claim Trustworthiness | 9.1. Claim Trustworthiness | |||
This specification defines semantics for each claim. It does not | This specification defines semantics for each claim. It does not | |||
require any particular level of security in the implementation of the | require any particular level of security in the implementation of the | |||
claims or even the attester itself. Such specification is far beyond | claims or even for the attester itself. Such specification is far | |||
the scope of this document which is about a message format not the | beyond the scope of this document, which is about a message format | |||
security level of an implementation. | not the security level of an implementation. | |||
The receiver of an EAT comes to know the trustworthiness of the | The receiver of an EAT knows the trustworthiness of the claims in it | |||
claims in it by understanding the implementation made by the attester | by understanding the implementation made by the attester vendor and/ | |||
vendor and/or understanding the checks and processing performed by | or understanding the checks and processing performed by the verifier. | |||
the verifier. | ||||
For example, this document says that a UEID is permanent and that it | For example, this document says that a UEID is permanent and that it | |||
must not change, but it does not say what degree of attack to change | must not change, but it does not say what degree of attack to change | |||
it must be defended. | it must be defended. | |||
The degree of security will vary from use case to use case. In some | The degree of security will vary from use case to use case. In some | |||
cases the receiver may only need to know something of the | cases, the receiver may only need to know something of the | |||
implementation such as that it was implemented in a TEE. In other | implementation such as that it was implemented in a TEE. In other | |||
cases the receiver may require the attester be certified by a | cases, the receiver may require the attester to be certified by a | |||
particular certification program. Or perhaps the receiver is content | particular certification program. Or perhaps the receiver is content | |||
with very little security. | with very little security. | |||
9.2. Key Provisioning | 9.2. Key Provisioning | |||
Private key material can be used to sign and/or encrypt the EAT, or | Private key material can be used to sign and/or encrypt the EAT or to | |||
can be used to derive the keys used for signing and/or encryption. | derive the keys used for signing and/or encryption. In some | |||
In some instances, the manufacturer of the entity may create the key | instances, the manufacturer of the entity may create the key material | |||
material separately and provision the key material in the entity | separately and provision the key material in the entity itself. The | |||
itself. The manufacturer of any entity that is capable of producing | manufacturer of any entity that is capable of producing an EAT should | |||
an EAT should take care to ensure that any private key material be | take care to ensure that any private key material be suitably | |||
suitably protected prior to provisioning the key material in the | protected prior to provisioning the key material in the entity | |||
entity itself. This can require creation of key material in an | itself. This can require creation of key material in an enclave (see | |||
enclave (see [RFC4949] for definition of "enclave"), secure | [RFC4949] for definition of "enclave"), secure transmission of the | |||
transmission of the key material from the enclave to the entity using | key material from the enclave to the entity using an appropriate | |||
an appropriate protocol, and persistence of the private key material | protocol, and persistence of the private key material in some form of | |||
in some form of secure storage to which (preferably) only the entity | secure storage to which (preferably) only the entity has access. | |||
has access. | ||||
9.2.1. Transmission of Key Material | 9.2.1. Transmission of Key Material | |||
Regarding transmission of key material from the enclave to the | Regarding transmission of key material from the enclave to the | |||
entity, the key material may pass through one or more intermediaries. | entity, the key material may pass through one or more intermediaries. | |||
Therefore some form of protection ("key wrapping") may be necessary. | Therefore, some form of protection (e.g., key wrapping) may be | |||
The transmission itself may be performed electronically, but can also | necessary. The transmission itself may be performed electronically, | |||
be done by human courier. In the latter case, there should be | but it can also be done by human courier. In the latter case, there | |||
minimal to no exposure of the key material to the human (e.g. | should be minimal to no exposure of the key material to the human | |||
encrypted portable memory). Moreover, the human should transport the | (e.g., encrypted portable memory). Moreover, the human should | |||
key material directly from the secure enclave where it was created to | transport the key material directly from the secure enclave where it | |||
a destination secure enclave where it can be provisioned. | was created to a destination secure enclave where it can be | |||
provisioned. | ||||
9.3. Freshness | 9.3. Freshness | |||
All EAT use MUST provide a freshness mechanism to prevent replay and | All EAT use MUST provide a freshness mechanism to prevent replay and | |||
related attacks. The extensive discussions on freshness in [RFC9334] | related attacks. The extensive discussions in [RFC9334] on | |||
including security considerations apply here. The EAT nonce claim, | freshness, as well as the security considerations, apply here. One | |||
in Section 4.1, is one option to provide freshness. | option to provide freshness is the EAT nonce claim (Section 4.1). | |||
9.4. Multiple EAT Consumers | 9.4. Multiple EAT Consumers | |||
In many cases, more than one EAT consumer may be required to fully | In many cases, more than one EAT consumer may be required to fully | |||
verify the entity attestation. Examples include individual consumers | verify the entity attestation. Examples include individual consumers | |||
for nested EATs, or consumers for individual claims with an EAT. | for nested EATs or consumers for individual claims with an EAT. When | |||
When multiple consumers are required for verification of an EAT, it | multiple consumers are required for verification of an EAT, it is | |||
is important to minimize information exposure to each consumer. In | important to minimize information exposure to each consumer. In | |||
addition, the communication between multiple consumers should be | addition, the communication between multiple consumers should be | |||
secure. | secure. | |||
For instance, consider the example of an encrypted and signed EAT | For instance, consider the example of an encrypted and signed EAT | |||
with multiple claims. A consumer may receive the EAT (denoted as the | with multiple claims. A consumer may receive the EAT (denoted as the | |||
"receiving consumer"), decrypt its payload, verify its signature, but | "receiving consumer"), decrypt its payload, and verify its signature | |||
then pass specific subsets of claims to other consumers for | but then pass specific subsets of claims to other consumers for | |||
evaluation ("downstream consumers"). Since any COSE encryption will | evaluation ("downstream consumers"). Since any COSE encryption will | |||
be removed by the receiving consumer, the communication of claim | be removed by the receiving consumer, the communication of claim | |||
subsets to any downstream consumer MUST leverage an equivalent | subsets to any downstream consumer MUST leverage an equivalent | |||
communication security protocol (e.g. Transport Layer Security). | communication security protocol (e.g., TLS). | |||
However, assume the EAT of the previous example is hierarchical and | However, assume the EAT of the previous example is hierarchical and | |||
each claim subset for a downstream consumer is created in the form of | each claim subset for a downstream consumer is created in the form of | |||
a nested EAT. Then the nested EAT is itself encrypted and | a nested EAT. Then, the nested EAT itself is encrypted and | |||
cryptographically verifiable (due to its COSE envelope) by a | cryptographically verifiable (due to its COSE envelope) by a | |||
downstream consumer (unlike the previous example where a claims set | downstream consumer (unlike the previous example where a claims set | |||
without a COSE envelope is sent to a downstream consumer). | without a COSE envelope is sent to a downstream consumer). | |||
Therefore, Transport Layer Security between the receiving and | Therefore, TLS between the receiving and downstream consumers is not | |||
downstream consumers is not strictly required. Nevertheless, | strictly required. Nevertheless, downstream consumers of a nested | |||
downstream consumers of a nested EAT should provide a nonce unique to | EAT should provide a nonce unique to the EAT they are consuming. | |||
the EAT they are consuming. | ||||
9.5. Detached EAT Bundle Digest Security Considerations | 9.5. Detached EAT Bundle Digest Security Considerations | |||
A detached EAT bundle is composed of a nested EAT and a claims set as | A detached EAT bundle is composed of a nested EAT and a claims set as | |||
per Section 5. Although the attached claims set is vulnerable to | per Section 5. Although the attached claims set is vulnerable to | |||
modification in transit, any modification can be detected by the | modification in transit, any modification can be detected by the | |||
receiver through the associated digest, which is a claim fully | receiver through the associated digest, which is a claim fully | |||
contained within an EAT. Moreover, the digest itself can only be | contained within an EAT. Moreover, the digest itself can only be | |||
derived using an appropriate COSE hash algorithm, implying that an | derived using an appropriate COSE hash algorithm, implying that an | |||
attacker cannot induce false detection of modified detached claims | attacker cannot induce false detection of modified detached claims | |||
because the algorithms in the COSE registry are assumed to be of | because the algorithms in the COSE registry are assumed to be of | |||
sufficient cryptographic strength. | sufficient cryptographic strength. | |||
9.6. Verification Keys | 9.6. Verification Keys | |||
In all cases there must be some way that the verification key is | In all cases, there must be some way that the verification key itself | |||
itself verified or determined to be trustworthy. The key | is verified or determined to be trustworthy. The key identification | |||
identification itself is never enough. This will always be by some | itself is never enough. This will always be by some out-of-band | |||
out-of-band mechanism that is not described here. For example, the | mechanism that is not described here. For example, the verifier may | |||
verifier may be configured with a root certificate or a master key by | be configured with a root certificate or a master key by the verifier | |||
the verifier system administrator. | system administrator. | |||
Often an X.509 certificate or an endorsement carries more than just | Often, an X.509 certificate or an endorsement carries more than just | |||
the verification key. For example, an X.509 certificate might have | the verification key. For example, an X.509 certificate might have | |||
key usage constraints, and an endorsement might have reference | key usage constraints, and an endorsement might have reference | |||
values. When this is the case, the key identifier must be either a | values. When this is the case, the key identifier must be either a | |||
protected header or in the payload, such that it is cryptographically | protected header or in the payload, such that it is cryptographically | |||
bound to the EAT. This is in line with the requirements in section 6 | bound to the EAT. This is in line with the requirements in "Key | |||
on Key Identification in JSON Web Signature [RFC7515]. | Identification" of JSON Web Signature (Section 6 of [RFC7515]). | |||
10. IANA Considerations | 10. IANA Considerations | |||
10.1. Reuse of CBOR and JSON Web Token (CWT and JWT) Claims Registries | 10.1. Reuse of CBOR and JSON Web Token (CWT and JWT) Claims Registries | |||
Claims defined for EAT are compatible with those of CWT and JWT so | Claims defined for EAT are compatible with those of CWT and JWT, so | |||
the CWT and JWT Claims Registries, [IANA.CWT.Claims] and | the CWT and JWT Claims registries, [IANA.CWT.Claims] and | |||
[IANA.JWT.Claims], are re-used. No new IANA registry is created. | [IANA.JWT.Claims], are reused. No new IANA registry is created. | |||
All EAT claims defined in this document are placed in both | All EAT claims defined in this document have been placed in both | |||
registries. All new EAT claims defined subsequently should be placed | registries. All new EAT claims defined subsequently should be placed | |||
in both registries. | in both registries. | |||
Appendix E describes some considerations when defining new claims. | Appendix E describes some considerations when defining new claims. | |||
10.2. CWT and JWT Claims Registered by This Document | 10.2. CWT and JWT Claims Registered by This Document | |||
This specification adds the following values to the "JSON Web Token | Per this specification, the following values have been added to the | |||
Claims" registry established by [RFC7519] and the "CBOR Web Token | "JSON Web Token Claims" registry established by [RFC7519] and the | |||
Claims Registry" established by [RFC8392]. Each entry below is an | "CBOR Web Token (CWT) Claims" registry established by [RFC8392]. | |||
addition to both registries. | Each entry below has been added to both registries. | |||
The "Claim Description", "Change Controller" and "Specification | ||||
Documents" are common and equivalent for the JWT and CWT registries. | ||||
The "Claim Key" and "Claim Value Types(s)" are for the CWT registry | ||||
only. The "Claim Name" is as defined for the CWT registry, not the | ||||
JWT registry. The "JWT Claim Name" is equivalent to the "Claim Name" | ||||
in the JWT registry. | ||||
IANA is requested to register the following claims. The "Claim Value | ||||
Type(s)" here all name CDDL definitions and are only for the CWT | ||||
registry. | ||||
// RFC editor: please see instructions in followg paragraph and | ||||
// remove for final publication | ||||
RFC Editor: Please make the following adjustments and remove this | ||||
paragraph. Replace "*this document*" with this RFC number. In the | ||||
following, the claims with "Claim Key: TBD" need to be assigned a | ||||
value in the Specification Required Range, preferably starting around | ||||
267. Those below already with a Claim Key number were given early | ||||
assignment. No change is requested for them except for Claim Key | ||||
262. Claim 262 should be renamed from "secboot" to "oemboot" in the | ||||
JWT registry and its description changed in both the CWT and JWT | ||||
registries. | ||||
* Claim Name: Nonce | ||||
* Claim Description: Nonce | ||||
* JWT Claim Name: "eat_nonce" | ||||
* Claim Key: 10 | ||||
* Claim Value Type(s): bstr or array | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: UEID | ||||
* Claim Description: The Universal Entity ID | ||||
* JWT Claim Name: "ueid" | ||||
* CWT Claim Key: 256 | ||||
* Claim Value Type(s): bstr | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: SUEIDs | ||||
* Claim Description: Semi-permanent UEIDs | ||||
* JWT Claim Name: "sueids" | ||||
* CWT Claim Key: 257 | ||||
* Claim Value Type(s): map | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Hardware OEM ID | ||||
* Claim Description: Hardware OEM ID | ||||
* JWT Claim Name: "oemid" | ||||
* Claim Key: 258 | ||||
* Claim Value Type(s): bstr or int | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Hardware Model | ||||
* Claim Description: Model identifier for hardware | ||||
* JWT Claim Name: "hwmodel" | ||||
* Claim Key: 259 | ||||
* Claim Value Type(s): bstr | ||||
* Change Controller: IETF | The "Claim Description", "Change Controller", and "Reference" fields | |||
are common and equivalent for the JWT and CWT registries. The "Claim | ||||
Key" and "Claim Value Type" fields are for the CWT registry only. | ||||
The "Claim Name" field is as defined for the CWT registry, not the | ||||
JWT registry. The "JWT Claim Name" field is equivalent to the "Claim | ||||
Name" field in the JWT registry. | ||||
* Specification Document(s): *this document* | IANA has registered the following claims. Here, the "Claim Value | |||
Type" fields name CDDL definitions and are only for the CWT registry. | ||||
* Claim Name: Hardware Version | Claim Name: Nonce | |||
Claim Description: Nonce | ||||
JWT Claim Name: "eat_nonce" | ||||
Claim Key: 10 | ||||
Claim Value Type: bstr or array | ||||
Change Controller: IETF | ||||
Reference: [OIDCC], RFC 9711 | ||||
* Claim Description: Hardware Version Identifier | Claim Name: UEID | |||
Claim Description: The Universal Entity ID | ||||
JWT Claim Name: "ueid" | ||||
CWT Claim Key: 256 | ||||
Claim Value Type: bstr | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* JWT Claim Name: "hwversion" | Claim Name: SUEIDs | |||
Claim Description: Semi-permanent UEIDs | ||||
JWT Claim Name: "sueids" | ||||
CWT Claim Key: 257 | ||||
Claim Value Type: map | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Key: 260 | Claim Name: Hardware OEM ID | |||
Claim Description: Hardware OEM ID | ||||
JWT Claim Name: "oemid" | ||||
Claim Key: 258 | ||||
Claim Value Type: bstr or int | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Value Type(s): array | Claim Name: Hardware Model | |||
* Change Controller: IETF | Claim Description: Model identifier for hardware | |||
JWT Claim Name: "hwmodel" | ||||
Claim Key: 259 | ||||
Claim Value Type: bstr | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Specification Document(s): *this document* | Claim Name: Hardware Version | |||
Claim Description: Hardware Version Identifier | ||||
JWT Claim Name: "hwversion" | ||||
Claim Key: 260 | ||||
Claim Value Type: array | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Name: OEM Authorized Boot | Claim Name: Uptime | |||
Claim Description: Uptime | ||||
JWT Claim Name: "uptime" | ||||
Claim Key: 261 | ||||
Claim Value Type: uint | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Description: Indicates whether the software booted was OEM | Claim Name: OEM Authorized Boot | |||
Claim Description: Indicates whether the software booted was OEM | ||||
authorized | authorized | |||
JWT Claim Name: "oemboot" | ||||
Claim Key: 262 | ||||
Claim Value Type: bool | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* JWT Claim Name: "oemboot" | Claim Name: Debug Status | |||
Claim Description: Indicates status of debug facilities | ||||
* Claim Key: 262 | JWT Claim Name: "dbgstat" | |||
Claim Key: 263 | ||||
* Claim Value Type(s): bool | Claim Value Type: uint | |||
Change Controller: IETF | ||||
* Change Controller: IETF | Reference: RFC 9711 | |||
* Specification Document(s): *this document* | ||||
* Claim Name: Debug Status | ||||
* Claim Description: Indicates status of debug facilities | ||||
* JWT Claim Name: "dbgstat" | ||||
* Claim Key: 263 | ||||
* Claim Value Type(s): uint | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Location | ||||
* Claim Description: The geographic location | ||||
* JWT Claim Name: "location" | ||||
* Claim Key: 264 | ||||
* Claim Value Type(s): map | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: EAT Profile | ||||
* Claim Description: Indicates the EAT profile followed | ||||
* JWT Claim Name: "eat_profile" | ||||
* Claim Key: 265 | ||||
* Claim Value Type(s): uri or oid | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Submodules Section | ||||
* Claim Description: The section containing submodules | ||||
* JWT Claim Name: "submods" | ||||
* Claim Key: 266 | ||||
* Claim Value Type(s): map | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Uptime | ||||
* Claim Description: Uptime | ||||
* JWT Claim Name: "uptime" | ||||
* Claim Key: 261 | ||||
* Claim Value Type(s): uint | Claim Name: Location | |||
Claim Description: The geographic location | ||||
JWT Claim Name: "location" | ||||
Claim Key: 264 | ||||
Claim Value Type: map | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Change Controller: IETF | Claim Name: EAT Profile | |||
Claim Description: Indicates the EAT profile followed | ||||
JWT Claim Name: "eat_profile" | ||||
Claim Key: 265 | ||||
Claim Value Type: uri or oid | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Specification Document(s): *this document* | Claim Name: Submodules Section | |||
* Claim Name: Boot Count | Claim Description: The section containing submodules | |||
JWT Claim Name: "submods" | ||||
Claim Key: 266 | ||||
Claim Value Type: map | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Description: The number times the entity or submodule has | Claim Name: Boot Count | |||
Claim Description: The number of times the entity or submodule has | ||||
been booted | been booted | |||
JWT Claim Name: "bootcount" | ||||
Claim Key: 267 | ||||
Claim Value Type: uint | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* JWT Claim Name: "bootcount" | Claim Name: Boot Seed | |||
Claim Description: Identifies a boot cycle | ||||
* Claim Key: 267 | JWT Claim Name: "bootseed" | |||
Claim Key: 268 | ||||
* Claim Value Type(s): uint | Claim Value Type: bstr | |||
Change Controller: IETF | ||||
* Change Controller: IETF | Reference: RFC 9711 | |||
* Specification Document(s): *this document* | ||||
* Claim Name: Boot Seed | ||||
* Claim Description: Identifies a boot cycle | ||||
* JWT Claim Name: "bootseed" | ||||
* Claim Key: 268 | ||||
* Claim Value Type(s): bstr | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: DLOAs | ||||
* Claim Description: Certifications received as Digital Letters of | Claim Name: DLOAs | |||
Claim Description: Certifications received as Digital Letters of | ||||
Approval | Approval | |||
JWT Claim Name: "dloas" | ||||
Claim Key: 269 | ||||
Claim Value Type: array | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* JWT Claim Name: "dloas" | Claim Name: Software Name | |||
Claim Description: The name of the software running in the entity | ||||
* Claim Key: 269 | JWT Claim Name: "swname" | |||
Claim Key: 270 | ||||
* Claim Value Type(s): array | Claim Value Type: tstr | |||
Change Controller: IETF | ||||
* Change Controller: IETF | Reference: RFC 9711 | |||
* Specification Document(s): *this document* | ||||
* Claim Name: Software Name | ||||
* Claim Description: The name of the software running in the entity | ||||
* JWT Claim Name: "swname" | ||||
* Claim Key: 270 | ||||
* Claim Value Type(s): tstr | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Software Version | ||||
* Claim Description: The version of software running in the entity | ||||
* JWT Claim Name: "swversion" | ||||
* Claim Key: 271 | ||||
* Claim Value Type(s): array | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Software Manifests | Claim Name: Software Version | |||
Claim Description: The version of software running in the entity | ||||
JWT Claim Name: "swversion" | ||||
Claim Key: 271 | ||||
Claim Value Type: array | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Claim Description: Manifests describing the software installed on | Claim Name: Software Manifests | |||
Claim Description: Manifests describing the software installed on | ||||
the entity | the entity | |||
JWT Claim Name: "manifests" | ||||
Claim Key: 272 | ||||
Claim Value Type: array | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* JWT Claim Name: "manifests" | Claim Name: Measurements | |||
Claim Description: Measurements of the software, memory | ||||
* Claim Key: 272 | configuration, and such on the entity | |||
JWT Claim Name: "measurements" | ||||
* Claim Value Type(s): array | Claim Key: 273 | |||
Claim Value Type: array | ||||
* Change Controller: IETF | Change Controller: IETF | |||
Reference: RFC 9711 | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Measurements | ||||
* Claim Description: Measurements of the software, memory | ||||
configuration and such on the entity | ||||
* JWT Claim Name: "measurements" | ||||
* Claim Key: 273 | ||||
* Claim Value Type(s): array | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Software Measurement Results | ||||
* Claim Description: The results of comparing software measurements | ||||
to reference values | ||||
* JWT Claim Name: "measres" | ||||
* Claim Key: 274 | ||||
* Claim Value Type(s): array | ||||
* Change Controller: IETF | ||||
* Specification Document(s): *this document* | ||||
* Claim Name: Intended Use | ||||
* Claim Description: Indicates intended use of the EAT | ||||
* JWT Claim Name: "intuse" | ||||
* Claim Key: 275 | ||||
* Claim Value Type(s): uint | ||||
* Change Controller: IETF | Claim Name: Software Measurement Results | |||
Claim Description: The results of comparing software measurements to | ||||
reference values | ||||
JWT Claim Name: "measres" | ||||
Claim Key: 274 | ||||
Claim Value Type: array | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
* Specification Document(s): *this document* | Claim Name: Intended Use | |||
Claim Description: Indicates intended use of the EAT | ||||
JWT Claim Name: "intuse" | ||||
Claim Key: 275 | ||||
Claim Value Type: uint | ||||
Change Controller: IETF | ||||
Reference: RFC 9711 | ||||
10.3. UEID URN Registered by this Document | 10.3. UEID URNs Registered by This Document | |||
IANA is requested to register the following new subtypes in the "DEV | IANA has registered the following new subtypes in the "DEV URN | |||
URN Subtypes" registry under "Device Identification". See [RFC9039]. | Subtypes" registry [IANA.DEV-URNs] under the "Device Identification" | |||
registry group; see [RFC9039]. | ||||
+=========+=============================+===============+ | +=========+============================================+===========+ | |||
| Subtype | Description | Reference | | | Subtype | Description | Reference | | |||
+=========+=============================+===============+ | +=========+============================================+===========+ | |||
| ueid | Universal Entity Identifier | This document | | | ueid | Universal Entity Identifier | RFC 9711 | | |||
+---------+-----------------------------+---------------+ | +---------+--------------------------------------------+-----------+ | |||
| sueid | Semi-permanent Universal | This document | | | sueid | Semi-permanent Universal Entity Identifier | RFC 9711 | | |||
| | Entity Identifier | | | +---------+--------------------------------------------+-----------+ | |||
+---------+-----------------------------+---------------+ | ||||
Table 3: UEID URN Registration | Table 3: UEID URN Registration | |||
ABNF for these two URNs is as follows where b64ueid is the base64url- | The ABNF [RFC5234] [RFC7405] for these two URNs is as follows, where | |||
encoded binary byte-string for the UEID or SUEID: | b64ueid is the base64url-encoded binary byte string for the UEID or | |||
SUEID: | ||||
body =/ ueidbody | body =/ ueidbody | |||
ueidbody = %s"ueid:" b64ueid | ueidbody = %s"ueid:" b64ueid | |||
10.4. CBOR Tag for Detached EAT Bundle Registered by this Document | 10.4. CBOR Tag for Detached EAT Bundle Registered by This Document | |||
In the registry [IANA.cbor-tags], IANA is requested to allocate the | In the "CBOR Tags" registry [IANA.cbor-tags], IANA has allocated the | |||
following tag from the Specification Required space, with the present | following tag from the Specification Required range, with the present | |||
document as the specification reference. | document as the reference. | |||
+=====+============+===============================+ | +=====+===========+=====================+=====================+ | |||
| Tag | Data Items | Semantics | | | Tag | Data Item | Semantics | Reference | | |||
+=====+============+===============================+ | +=====+===========+=====================+=====================+ | |||
| 602 | array | Detached EAT Bundle Section 5 | | | 602 | array | Detached EAT Bundle | RFC 9711, Section 5 | | |||
+-----+------------+-------------------------------+ | +-----+-----------+---------------------+---------------------+ | |||
Table 4: Detached EAT Bundle Tag Registration | Table 4: Detached EAT Bundle Tag Registration | |||
10.5. Intended Use Registry | 10.5. Intended Use Registry | |||
IANA is requested to create a new registry titled "Entity Attestation | IANA has created a new registry titled "Entity Attestation Token | |||
Token (EAT) Intended Uses" in a new registry group called "Remote | (EAT) Intended Uses" under the new "Remote Attestation Procedures | |||
Attestation Procedures (RATS)." The registry uses the "Expert | (RATS)" registry group. The registry uses the Expert Review | |||
Review" registration procedure [RFC8126]. | registration procedure [RFC8126]. | |||
Guidelines for experts: | Guidelines for designated experts: | |||
* Each intended use should be clearly described so a user of it can | * Each intended use should be clearly described so a user knows what | |||
know what it means. | it means. | |||
* Each intended use should be distinct from others that are | * Each intended use should be distinct from others that are | |||
registered. | registered. | |||
* Point squatting is discouraged. | * Point squatting is discouraged. | |||
The three columns for the registry are: | The three columns for the registry are: | |||
Integer: This is a unique integer used to identify the intended use | 1. Integer: This is a unique integer that is used to identify the | |||
in CBOR-encoded tokens. | intended use in CBOR-encoded tokens. | |||
Name: This is unique short descriptive string that is used to | 2. Name: This is unique short descriptive string that is used to | |||
identify the use in JSON-encoded tokens. | identify the use in JSON-encoded tokens. | |||
Description: This is a text paragraph or more that sufficiently | 3. Description: This is one or more text paragraphs that | |||
defines what the intended use means. It may also be a reference | sufficiently define what the intended use means. It may also be | |||
to another document. | a reference to another document. | |||
The following 5 values represent the initial content of the registry. | The following 5 values represent the initial content of the registry. | |||
Note that 0 will be marked as "reserved" for the CBOR value, and the | Note that 0 will be marked as "reserved" for the CBOR value, and the | |||
maximum CBOR value for assignment is 255. | maximum CBOR value for assignment is 255. | |||
1 -- Generic: Generic attestation describes an application where the | 1 -- Generic: Generic attestation describes an application where the | |||
EAT consumer requires the most up-to-date security assessment of | EAT consumer requires the most up-to-date security assessment of | |||
the attesting entity. It is expected that this is the most | the attesting entity. It is expected that this is the most | |||
commonly-used application of EAT. | commonly used application of EAT. | |||
2-- Registration: Entities that are registering for a new service | 2 -- Registration: Entities that are registering for a new service | |||
may be expected to provide an attestation as part of the | may be expected to provide an attestation as part of the | |||
registration process. This "intuse" setting indicates that the | registration process. This "intuse" setting indicates that the | |||
attestation is not intended for any use but registration. | attestation is not intended for any use but registration. | |||
3 -- Provisioning: Entities may be provisioned with different values | 3 -- Provisioning: Entities may be provisioned with different values | |||
or settings by an EAT consumer. Examples include key material or | or settings by an EAT consumer. Examples include key material or | |||
device management trees. The consumer may require an EAT to | device management trees. The consumer may require an EAT to | |||
assess entity security state of the entity prior to provisioning. | assess entity security state of the entity prior to provisioning. | |||
4 -- Certificate Issuance: Certification Authorities (CAs) may | 4 -- Certificate Issuance: Certification Authorities (CAs) may | |||
require attestation results (which in a background check model | require attestation results (which in a background check model | |||
might require receiving evidence to be passed to a verifier) to | might require receiving evidence to be passed to a verifier) to | |||
make decisions about the issuance of certificates. An EAT may be | make decisions about the issuance of certificates. An EAT may be | |||
used as part of the certificate signing request (CSR). | used as part of the certificate signing request (CSR). | |||
5 -- Proof-of-Possession: An EAT consumer may require an attestation | 5 -- Proof of Possession: An EAT consumer may require an attestation | |||
as part of an accompanying proof-of-possession (PoP) application. | as part of an accompanying proof-of-possession (PoP) application. | |||
More precisely, a PoP transaction is intended to provide to the | More precisely, a PoP transaction is intended to provide the | |||
recipient cryptographically-verifiable proof that the sender has | recipient with cryptographically verifiable proof that the sender | |||
possession of a key. This kind of attestation may be necessary to | has possession of a key. This kind of attestation may be | |||
verify the security state of the entity storing the private key | necessary to verify the security state of the entity storing the | |||
used in a PoP application. | private key used in a PoP application. | |||
11. References | 11. References | |||
11.1. Normative References | 11.1. Normative References | |||
[DLOA] "Digital Letter of Approval", November 2015, | [DLOA] GlobalPlatform, "GlobalPlatform Card: Digital Letter of | |||
<https://globalplatform.org/wp-content/uploads/2015/12/ | Approval", Public Release Version 1.0, Document Reference: | |||
GPC_SPE_095, November 2015, <https://globalplatform.org/ | ||||
wp-content/uploads/2015/12/ | ||||
GPC_DigitalLetterOfApproval_v1.0.pdf>. | GPC_DigitalLetterOfApproval_v1.0.pdf>. | |||
[IANA.cbor-tags] | [IANA.cbor-tags] | |||
IANA, "Concise Binary Object Representation (CBOR) Tags", | IANA, "CBOR Tags", | |||
<https://www.iana.org/assignments/cbor-tags>. | <https://www.iana.org/assignments/cbor-tags>. | |||
[IANA.COSE.Algorithms] | [IANA.COSE.Algorithms] | |||
IANA, "CBOR Object Signing and Encryption (COSE)", | IANA, "COSE Algorithms", | |||
<https://www.iana.org/assignments/cose>. | <https://www.iana.org/assignments/cose>. | |||
[IANA.CWT.Claims] | [IANA.CWT.Claims] | |||
IANA, "CBOR Web Token (CWT) Claims", | IANA, "CBOR Web Token (CWT) Claims", | |||
<https://www.iana.org/assignments/cwt>. | <https://www.iana.org/assignments/cwt>. | |||
[IANA.DEV-URNs] | ||||
IANA, "DEV URN Subtypes", | ||||
<https://www.iana.org/assignments/device-identification>. | ||||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token (JWT)", | IANA, "JSON Web Token Claims", | |||
<https://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[PEN] "Private Enterprise Number (PEN) Request", n.d., | [PEN] IANA, "Application for a Private Enterprise Number", | |||
<https://pen.iana.org/pen/PenApplication.page>. | <https://pen.iana.org/pen/PenApplication.page>. | |||
[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>. | |||
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | [RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform | |||
Resource Identifier (URI): Generic Syntax", STD 66, | Resource Identifier (URI): Generic Syntax", STD 66, | |||
RFC 3986, DOI 10.17487/RFC3986, January 2005, | RFC 3986, DOI 10.17487/RFC3986, January 2005, | |||
skipping to change at page 70, line 47 ¶ | skipping to change at line 3068 ¶ | |||
[RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol | [RFC4517] Legg, S., Ed., "Lightweight Directory Access Protocol | |||
(LDAP): Syntaxes and Matching Rules", RFC 4517, | (LDAP): Syntaxes and Matching Rules", RFC 4517, | |||
DOI 10.17487/RFC4517, June 2006, | DOI 10.17487/RFC4517, June 2006, | |||
<https://www.rfc-editor.org/info/rfc4517>. | <https://www.rfc-editor.org/info/rfc4517>. | |||
[RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data | |||
Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, | |||
<https://www.rfc-editor.org/info/rfc4648>. | <https://www.rfc-editor.org/info/rfc4648>. | |||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | ||||
Specifications: ABNF", STD 68, RFC 5234, | ||||
DOI 10.17487/RFC5234, January 2008, | ||||
<https://www.rfc-editor.org/info/rfc5234>. | ||||
[RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | [RFC7252] Shelby, Z., Hartke, K., and C. Bormann, "The Constrained | |||
Application Protocol (CoAP)", RFC 7252, | Application Protocol (CoAP)", RFC 7252, | |||
DOI 10.17487/RFC7252, June 2014, | DOI 10.17487/RFC7252, June 2014, | |||
<https://www.rfc-editor.org/info/rfc7252>. | <https://www.rfc-editor.org/info/rfc7252>. | |||
[RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", | ||||
RFC 7405, DOI 10.17487/RFC7405, December 2014, | ||||
<https://www.rfc-editor.org/info/rfc7405>. | ||||
[RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web | [RFC7515] Jones, M., Bradley, J., and N. Sakimura, "JSON Web | |||
Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May | |||
2015, <https://www.rfc-editor.org/info/rfc7515>. | 2015, <https://www.rfc-editor.org/info/rfc7515>. | |||
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
skipping to change at page 72, line 21 ¶ | skipping to change at line 3145 ¶ | |||
W. Pan, "Remote ATtestation procedureS (RATS) | W. Pan, "Remote ATtestation procedureS (RATS) | |||
Architecture", RFC 9334, DOI 10.17487/RFC9334, January | Architecture", RFC 9334, DOI 10.17487/RFC9334, January | |||
2023, <https://www.rfc-editor.org/info/rfc9334>. | 2023, <https://www.rfc-editor.org/info/rfc9334>. | |||
[RFC9393] Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D. | [RFC9393] Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D. | |||
Waltermire, "Concise Software Identification Tags", | Waltermire, "Concise Software Identification Tags", | |||
RFC 9393, DOI 10.17487/RFC9393, June 2023, | RFC 9393, DOI 10.17487/RFC9393, June 2023, | |||
<https://www.rfc-editor.org/info/rfc9393>. | <https://www.rfc-editor.org/info/rfc9393>. | |||
[ThreeGPP.IMEI] | [ThreeGPP.IMEI] | |||
3GPP, "3rd Generation Partnership Project; Technical | 3GPP, "Numbering, addressing and identification", 3GPP | |||
Specification Group Core Network and Terminals; Numbering, | TS 23.003, Version 19, September 2024, | |||
addressing and identification", 2019, | ||||
<https://portal.3gpp.org/desktopmodules/Specifications/ | <https://portal.3gpp.org/desktopmodules/Specifications/ | |||
SpecificationDetails.aspx?specificationId=729>. | SpecificationDetails.aspx?specificationId=729>. | |||
[WGS84] National Geospatial-Intelligence Agency (NGA), "WORLD | [WGS84] National Geospatial-Intelligence Agency (NGA), "Department | |||
GEODETIC SYSTEM 1984, NGA.STND.0036_1.0.0_WGS84", 8 July | of Defense World Geodetic System 1984: Its Definition and | |||
2014, <https://earth-info.nga.mil/php/ | Relationships with Local Geodetic Systems", | |||
download.php?file=coord-wgs84>. | NGA.STND.0036_1.0.0_WGS84, July 2014, | |||
<https://nsgreg.nga.mil/doc/view?i=4085>. | ||||
11.2. Informative References | 11.2. Informative References | |||
[BirthdayAttack] | [BirthdayAttack] | |||
"Birthday attack", | Wikipedia, "Birthday attack", October 2024, | |||
<https://en.wikipedia.org/wiki/Birthday_attack.>. | <https://en.wikipedia.org/w/ | |||
index.php?title=Birthday_attack&oldid=1249270346>. | ||||
[CBOR.Cert.Draft] | [CBOR.Certs] | |||
Mattsson, J. P., Selander, G., Raza, S., Höglund, J., and | Mattsson, J. P., Selander, G., Raza, S., Höglund, J., and | |||
M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | |||
Certificates)", Work in Progress, Internet-Draft, draft- | Certificates)", Work in Progress, Internet-Draft, draft- | |||
ietf-cose-cbor-encoded-cert-11, 8 July 2024, | ietf-cose-cbor-encoded-cert-12, 8 January 2025, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-cose- | <https://datatracker.ietf.org/doc/html/draft-ietf-cose- | |||
cbor-encoded-cert-11>. | cbor-encoded-cert-12>. | |||
[CC-Example] | [CC-Example] | |||
"Secure Sub-System in System-on-Chip (3S in SoC) | Eurosmart, "Secure Sub-System in System-on-Chip (3S in | |||
Protection Profile", | SoC) Protection Profile", Version 1.8, October 2023, | |||
<https://commoncriteriaportal.org/nfs/ccpfiles/files/ | <https://commoncriteriaportal.org/nfs/ccpfiles/files/ | |||
ppfiles/pp0117V2b_pdf.pdf>. | ppfiles/pp0117V2b_pdf.pdf>. | |||
[COSE.X509.Draft] | ||||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Header Parameters for Carrying and Referencing X.509 | ||||
Certificates", Work in Progress, Internet-Draft, draft- | ||||
ietf-cose-x509-09, 13 October 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-cose- | ||||
x509-09>. | ||||
[EAT.media-types] | [EAT.media-types] | |||
Lundblade, L., Birkholz, H., and T. Fossati, "EAT Media | Lundblade, L., Birkholz, H., and T. Fossati, "EAT Media | |||
Types", Work in Progress, Internet-Draft, draft-ietf-rats- | Types", Work in Progress, Internet-Draft, draft-ietf-rats- | |||
eat-media-type-09, 21 August 2024, | eat-media-type-12, 3 November 2024, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-rats- | <https://datatracker.ietf.org/doc/html/draft-ietf-rats- | |||
eat-media-type-09>. | eat-media-type-12>. | |||
[GP-Example] | [GP-Example] | |||
"GlobalPlatform Technology TEE Certification Process", | GlobalPlatform, "GlobalPlatform Technology: TEE | |||
Certification Process", Public Release Version 2.0, | ||||
Document Reference: GP_PRO_023, January 2021, | ||||
<https://globalplatform.org/wp-content/uploads/2021/01/ | <https://globalplatform.org/wp-content/uploads/2021/01/ | |||
GP_TEECertificationProcess_v2.0_PublicRelease.pdf>. | GP_TEECertificationProcess_v2.0_PublicRelease.pdf>. | |||
[IEEE-RA] "IEEE Registration Authority", | [IEEE-RA] IEEE, "IEEE Registration Authority", | |||
<https://standards.ieee.org/products-services/regauth/ | <https://standards.ieee.org/products-services/regauth/ | |||
index.html>. | index.html>. | |||
[IEEE.802-2001] | [IEEE.802-2001] | |||
"IEEE Standard for Local and Metropolitan Area Networks: | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
Overview and Architecture", IEEE standard, | Networks: Overview and Architecture", IEEE Std 802-2014, | |||
DOI 10.1109/ieeestd.2014.6847097, July 2014, | DOI 10.1109/IEEESTD.2014.6847097, June 2014, | |||
<https://doi.org/10.1109/ieeestd.2014.6847097>. | <https://ieeexplore.ieee.org/document/6847097>. | |||
[IEEE.802.1AR] | [IEEE.802.1AR] | |||
"IEEE Standard for Local and Metropolitan Area Networks - | IEEE, "IEEE Standard for Local and Metropolitan Area | |||
Secure Device Identity", IEEE standard, | Networks - Secure Device Identity", IEEE Std 802.1AR-2018, | |||
DOI 10.1109/ieeestd.2018.8423794, July 2018, | DOI 10.1109/IEEESTD.2018.8423794, August 2018, | |||
<https://doi.org/10.1109/ieeestd.2018.8423794>. | <https://ieeexplore.ieee.org/document/8423794>. | |||
[JTAG] "IEEE Standard for Reduced-Pin and Enhanced-Functionality | [JTAG] IEEE, "IEEE Standard for Reduced-Pin and Enhanced- | |||
Test Access Port and Boundary-Scan Architecture", February | Functionality Test Access Port and Boundary-Scan | |||
2010, <https://ieeexplore.ieee.org/document/5412866>. | Architecture", IEEE Std 1149.7-2009, | |||
DOI 10.1109/IEEESTD.2010.5412866, February 2010, | ||||
<https://ieeexplore.ieee.org/document/5412866>. | ||||
[OIDCC] Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and | ||||
C. Mortimore, "OpenID Connect Core 1.0 incorporating | ||||
errata set 2", December 2023, | ||||
<https://openid.net/specs/openid-connect-core-1_0.html>. | ||||
[OUI.Guide] | [OUI.Guide] | |||
"Guidelines for Use of Extended Unique Identifier (EUI), | IEEE, "Guidelines for Use of Extended Unique Identifier | |||
Organizationally Unique Identifier (OUI), and Company ID | (EUI), Organizationally Unique Identifier (OUI), and | |||
(CID)", August 2017, | Company ID (CID)", August 2017, | |||
<https://standards.ieee.org/content/dam/ieee- | <https://standards.ieee.org/content/dam/ieee- | |||
standards/standards/web/documents/tutorials/eui.pdf>. | standards/standards/web/documents/tutorials/eui.pdf>. | |||
[OUI.Lookup] | [OUI.Lookup] | |||
"IEEE Registration Authority Assignments", | IEEE, "IEEE Registration Authority: Assignments", | |||
<https://regauth.standards.ieee.org/standards-ra-web/pub/ | <https://regauth.standards.ieee.org/standards-ra-web/pub/ | |||
view.html#registries>. | view.html#registries>. | |||
[RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | |||
FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | |||
<https://www.rfc-editor.org/info/rfc4949>. | <https://www.rfc-editor.org/info/rfc4949>. | |||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC9039] Arkko, J., Jennings, C., and Z. Shelby, "Uniform Resource | [RFC9039] Arkko, J., Jennings, C., and Z. Shelby, "Uniform Resource | |||
Names for Device Identifiers", RFC 9039, | Names for Device Identifiers", RFC 9039, | |||
DOI 10.17487/RFC9039, June 2021, | DOI 10.17487/RFC9039, June 2021, | |||
<https://www.rfc-editor.org/info/rfc9039>. | <https://www.rfc-editor.org/info/rfc9039>. | |||
[RFC9360] Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Header Parameters for Carrying and Referencing X.509 | ||||
Certificates", RFC 9360, DOI 10.17487/RFC9360, February | ||||
2023, <https://www.rfc-editor.org/info/rfc9360>. | ||||
[RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique | [RFC9562] Davis, K., Peabody, B., and P. Leach, "Universally Unique | |||
IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May | IDentifiers (UUIDs)", RFC 9562, DOI 10.17487/RFC9562, May | |||
2024, <https://www.rfc-editor.org/info/rfc9562>. | 2024, <https://www.rfc-editor.org/info/rfc9562>. | |||
[UCCS] Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | [UCCS] Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | |||
Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | |||
Work in Progress, Internet-Draft, draft-ietf-rats-uccs-10, | Work in Progress, Internet-Draft, draft-ietf-rats-uccs-12, | |||
4 July 2024, <https://datatracker.ietf.org/doc/html/draft- | 3 November 2024, <https://datatracker.ietf.org/doc/html/ | |||
ietf-rats-uccs-10>. | draft-ietf-rats-uccs-12>. | |||
[W3C.GeoLoc] | [W3C.GeoLoc] | |||
Popescu, A., Ed., "Geolocation API Specification", W3C | Popescu, A., Ed., "Geolocation API Specification", W3C | |||
REC REC-geolocation-API-20131024, W3C REC-geolocation-API- | Recommendation, 24 October 2013, | |||
20131024, 24 October 2013, <https://www.w3.org/TR/2013/ | <https://www.w3.org/TR/2013/REC-geolocation-API- | |||
REC-geolocation-API-20131024/>. | 20131024/>. | |||
Appendix A. Examples | Appendix A. Examples | |||
Most examples are shown as just a Claims-Set that would be a payload | Most examples are shown as a Claims-Set that would be a payload for a | |||
for a CWT, JWT, detached EAT bundle or future token types. The | CWT, a JWT, a detached EAT bundle, or future token types. The | |||
signing is left off so the Claims-Set is easier to see. Some | signing is left off so the Claims-Set is easier to see. Some | |||
examples of signed tokens are also given. | examples of signed tokens are also given. | |||
// RFC Editor: When the IANA values are permanently assigned, please | ||||
// contact the authors so the examples can be regenerated. | ||||
// Regeneration is required because IANA-assigned values are inside | ||||
// hex and based-64 encoded data and some of these are signed. | ||||
A.1. Claims Set Examples | A.1. Claims Set Examples | |||
A.1.1. Simple TEE Attestation | A.1.1. Simple TEE Attestation | |||
This is a simple attestation of a TEE that includes a manifest that | This is a simple attestation of a TEE; it includes a manifest that is | |||
is a payload CoSWID to describe the TEE's software. | a payload CoSWID to describe the TEE's software. | |||
/ This is an EAT payload that describes a simple TEE. / | / This is an EAT payload that describes a simple TEE. / | |||
{ | { | |||
/ eat_nonce / 10: h'48df7b172d70b5a18935d0460a73dd71', | / eat_nonce / 10: h'48df7b172d70b5a18935d0460a73dd71', | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
/ dbgstat / 263: 2, / disabled-since-boot / | / dbgstat / 263: 2, / disabled-since-boot / | |||
/ manifests / 272: [ | / manifests / 272: [ | |||
[ | [ | |||
258, / CoAP Content ID for CoSWID / | 258, / CoAP Content ID for CoSWID / | |||
/ This is byte-string wrapped / | / This is a byte-string-wrapped / | |||
/ payload CoSWID. It gives the TEE / | / payload CoSWID. It gives the TEE / | |||
/ software name, the version and / | / software name, the version, and / | |||
/ the name of the file it is in. / | / the name of the file it is in. / | |||
/ {0: "3a24", / | / {0: "3a24", / | |||
/ 12: 1, / | / 12: 1, / | |||
/ 1: "Acme TEE OS", / | / 1: "Acme TEE OS", / | |||
/ 13: "3.1.4", / | / 13: "3.1.4", / | |||
/ 2: [{31: "Acme TEE OS", 33: 1}, / | / 2: [{31: "Acme TEE OS", 33: 1}, / | |||
/ {31: "Acme TEE OS", 33: 2}], / | / {31: "Acme TEE OS", 33: 2}], / | |||
/ 6: { / | / 6: { / | |||
/ 17: { / | / 17: { / | |||
/ 24: "acme_tee_3.exe" / | / 24: "acme_tee_3.exe" / | |||
skipping to change at page 76, line 4 ¶ | skipping to change at line 3314 ¶ | |||
/ } / | / } / | |||
h' a60064336132340c01016b | h' a60064336132340c01016b | |||
41636d6520544545204f530d65332e31 | 41636d6520544545204f530d65332e31 | |||
2e340282a2181f6b41636d6520544545 | 2e340282a2181f6b41636d6520544545 | |||
204f53182101a2181f6b41636d652054 | 204f53182101a2181f6b41636d652054 | |||
4545204f5318210206a111a118186e61 | 4545204f5318210206a111a118186e61 | |||
636d655f7465655f332e657865' | 636d655f7465655f332e657865' | |||
] | ] | |||
] | ] | |||
} | } | |||
/ A payload CoSWID created by the SW vendor. All this really does / | ||||
/ is name the TEE SW, its version and lists the one file that / | / This is a payload CoSWID created by the software (SW) vendor. All / | |||
/ makes up the TEE. / | / this does is name the TEE SW, name its version, and list the one / | |||
/ file that makes up the TEE. / | ||||
1398229316({ | 1398229316({ | |||
/ Unique CoSWID ID / 0: "3a24", | / Unique CoSWID ID / 0: "3a24", | |||
/ tag-version / 12: 1, | / tag-version / 12: 1, | |||
/ software-name / 1: "Acme TEE OS", | / software-name / 1: "Acme TEE OS", | |||
/ software-version / 13: "3.1.4", | / software-version / 13: "3.1.4", | |||
/ entity / 2: [ | / entity / 2: [ | |||
{ | { | |||
/ entity-name / 31: "Acme TEE OS", | / entity-name / 31: "Acme TEE OS", | |||
/ role / 33: 1 / tag-creator / | / role / 33: 1 / tag-creator / | |||
skipping to change at page 77, line 4 ¶ | skipping to change at line 3342 ¶ | |||
} | } | |||
], | ], | |||
/ payload / 6: { | / payload / 6: { | |||
/ ...file / 17: { | / ...file / 17: { | |||
/ ...fs-name / 24: "acme_tee_3.exe" | / ...fs-name / 24: "acme_tee_3.exe" | |||
} | } | |||
} | } | |||
}) | }) | |||
A.1.2. Submodules for Board and Device | A.1.2. Submodules for Board and Device | |||
/ This example shows use of submodules to give information / | / This example shows use of submodules to give information / | |||
/ about the chip, board and overall device. / | / about the chip, board, and overall device. / | |||
/ / | / / | |||
/ The main attestation is associated with the chip with the / | / The main attestation is associated with the chip / | |||
/ CPU and running the main OS. It is what has the keys and / | / containing the CPU and running the main OS. It is what / | |||
/ produces the token. / | / has the keys and produces the token. / | |||
/ / | / / | |||
/ The board is made by a different vendor than the chip. / | / The board is made by a different vendor than the chip; / | |||
/ Perhaps it is some generic IoT board. / | / perhaps it is some generic IoT board. / | |||
/ / | / / | |||
/ The device is some specific appliance that is made by a / | / The device is some specific appliance that is made by a / | |||
/ different vendor than either the chip or the board. / | / different vendor than either the chip or the board. / | |||
/ / | / / | |||
/ Here the board and device submodules aren't the typical / | / Here, the board and device submodules aren't the typical / | |||
/ target environments as described by the RATS architecture / | / target environments as described by RATS Architecture / | |||
/ document, but they are a valid use of submodules. / | / (RFC 9334), but they are a valid use of submodules. / | |||
{ | { | |||
/ eat_nonce / 10: h'e253cabedc9eec24ac4e25bcbeaf7765', | / eat_nonce / 10: h'e253cabedc9eec24ac4e25bcbeaf7765', | |||
/ ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | / ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ oemid / 258: h'894823', / IEEE OUI format OEM ID / | / oemid / 258: h'894823', / IEEE OUI format OEM ID / | |||
/ hwmodel / 259: h'549dcecc8b987c737b44e40f7c635ce8' | / hwmodel / 259: h'549dcecc8b987c737b44e40f7c635ce8' | |||
/ Hash of chip model name /, | / Hash of chip model name /, | |||
/ hwversion / 260: ["1.3.4", 1], / Multipartnumeric / | / hwversion / 260: ["1.3.4", 1], / Multipartnumeric / | |||
/ swname / 270: "Acme OS", | / swname / 270: "Acme OS", | |||
/ swversion / 271: ["3.5.5", 1], | / swversion / 271: ["3.5.5", 1], | |||
skipping to change at page 77, line 50 ¶ | skipping to change at line 3389 ¶ | |||
}, | }, | |||
/ A submodule to hold claims about the overall device / | / A submodule to hold claims about the overall device / | |||
"device" : { | "device" : { | |||
/ oemid / 258: 61234, / PEN Format OEM ID / | / oemid / 258: 61234, / PEN Format OEM ID / | |||
/ hwversion / 260: ["4.0", 1] / Multipartnumeric / | / hwversion / 260: ["4.0", 1] / Multipartnumeric / | |||
} | } | |||
} | } | |||
} | } | |||
A.1.3. EAT Produced by Attestation Hardware Block | A.1.3. EAT Produced by an Attestation Hardware Block | |||
/ This is an example of a token produced by a HW block / | ||||
/ purpose-built for attestation. Only the nonce claim changes / | / This is an example of a token produced by a hardware block / | |||
/ from one attestation to the next as the rest either come / | / purposely built for attestation. Only the nonce claim changes / | |||
/ directly from the hardware or from one-time-programmable memory / | / from one attestation to the next as the rest come from either / | |||
/ (e.g. a fuse). 47 bytes encoded in CBOR (8 byte nonce, 16 byte / | / the hardware directly or from one-time-programmable memory / | |||
/ UEID). / | / (e.g., a fuse). 47 bytes are encoded in CBOR (8-byte nonce, / | |||
/ 16-byte UEID). / | ||||
{ | { | |||
/ eat_nonce / 10: h'd79b964ddd5471c1393c8888', | / eat_nonce / 10: h'd79b964ddd5471c1393c8888', | |||
/ ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | / ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ oemid / 258: 64242, / Private Enterprise Number / | / oemid / 258: 64242, / Private Enterprise Number / | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
/ dbgstat / 263: 3, / disabled-permanently / | / dbgstat / 263: 3, / disabled-permanently / | |||
/ hwversion / 260: [ "3.1", 1 ] / Type is multipartnumeric / | / hwversion / 260: [ "3.1", 1 ] / Type is multipartnumeric / | |||
} | } | |||
A.1.4. Key / Key Store Attestation | A.1.4. Key / Key Store Attestation | |||
/ This is an attestation of a public key and the key store / | / This is an attestation of a public key and the key store / | |||
/ implementation that protects and manages it. The key store / | / implementation that protects and manages it. The key store / | |||
/ implementation is in a security-oriented execution / | / implementation is in a security-oriented execution / | |||
/ environment separate from the high-level OS (HLOS), for / | / environment separate from the high-level OS (HLOS), for / | |||
/ example a Trusted Execution Environment (TEE). The key store / | / example, a Trusted Execution Environment (TEE). The key / | |||
/ is the Attester. / | / store is the attester. / | |||
/ / | / / | |||
/ There is some attestation of the high-level OS, just version / | / There is some attestation of the HLOS, just version and / | |||
/ and boot & debug status. It is a Claims-Set submodule because/ | / boot and debug status. It is a Claims-Set submodule because / | |||
/ it has lower security level than the key store. The key / | / it has a lower security level than the key store. The key / | |||
/ store's implementation has access to info about the HLOS, so / | / store's implementation has access to info about the HLOS, so / | |||
/ it is able to include it. / | / it is able to include it. / | |||
/ / | / / | |||
/ A key and an indication of the user authentication given to / | / A key and an indication of the user authentication given to / | |||
/ allow access to the key is given. The labels for these are / | / allow access to the key is given. The labels for these are / | |||
/ in the private space since this is just a hypothetical / | / in the private space as this is a hypothetical example, / | |||
/ example, not part of a standard protocol. / | / not part of a standard protocol. / | |||
{ | { | |||
/ eat_nonce / 10: h'99b67438dba40743266f70bf75feb1026d5134 | / eat_nonce / 10: h'99b67438dba40743266f70bf75feb1026d5134 | |||
97a229bfe8', | 97a229bfe8', | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
/ dbgstat / 263: 2, / disabled-since-boot / | / dbgstat / 263: 2, / disabled-since-boot / | |||
/ manifests / 272: [ | / manifests / 272: [ | |||
[ 258, / CoAP Content ID. / | [ 258, / CoAP Content ID. / | |||
h'a600683762623334383766 | h'a600683762623334383766 | |||
0c000169436172626f6e6974650d6331 | 0c000169436172626f6e6974650d6331 | |||
skipping to change at page 80, line 8 ¶ | skipping to change at line 3488 ¶ | |||
/ SW Creator: / | / SW Creator: / | |||
/ "Industrial Automation"/ | / "Industrial Automation"/ | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
A.1.5. Software Measurements of an IoT Device | A.1.5. Software Measurements of an IoT Device | |||
This is a simple token that might be for an IoT device. It includes | This is a simple token that might be for an IoT device. It includes | |||
CoSWID format measurments of the SW. The CoSWID is in byte-string | CoSWID format measurements of the SW. The CoSWID is byte string | |||
wrapped in the token and also shown in diagnostic form. | wrapped in the token and is also shown in diagnostic form. | |||
/ This EAT payload is for an IoT device with a TEE. The attestation / | / This EAT payload is for an IoT device with a TEE. The attestation / | |||
/ is produced by the TEE. There is a submodule for the IoT OS (the / | / is produced by the TEE. There is a submodule for the IoT OS (the / | |||
/ main OS of the IoT device that is not as secure as the TEE). The / | / main OS of the IoT device that is not as secure as the TEE). The / | |||
/ submodule contains claims for the IoT OS. The TEE also measures / | / submodule contains claims for the IoT OS. The TEE also measures / | |||
/ the IoT OS and puts the measurements in the submodule. / | / the IoT OS and puts the measurements in the submodule. / | |||
{ | { | |||
/ eat_nonce / 10: h'5e19fba4483c7896', | / eat_nonce / 10: h'5e19fba4483c7896', | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
skipping to change at page 81, line 25 ¶ | skipping to change at line 3511 ¶ | |||
/ oemid / 258: h'8945ad', / IEEE CID based / | / oemid / 258: h'8945ad', / IEEE CID based / | |||
/ ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | / ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ submods / 266: { | / submods / 266: { | |||
"OS" : { | "OS" : { | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
/ dbgstat / 263: 2, / disabled-since-boot / | / dbgstat / 263: 2, / disabled-since-boot / | |||
/ measurements / 273: [ | / measurements / 273: [ | |||
[ | [ | |||
258, / CoAP Content ID / | 258, / CoAP Content ID / | |||
/ This is a byte-string wrapped / | / This is a byte-string-wrapped / | |||
/ evidence CoSWID. It has / | / evidence CoSWID. It has / | |||
/ hashes of the main files of / | / hashes of the main files of / | |||
/ the IoT OS. / | / the IoT OS. / | |||
h'a600663463613234350c | h'a600663463613234350c | |||
17016d41636d6520522d496f542d4f | 17016d41636d6520522d496f542d4f | |||
530d65332e312e3402a2181f724163 | 530d65332e312e3402a2181f724163 | |||
6d6520426173652041747465737465 | 6d6520426173652041747465737465 | |||
7218210103a11183a318187161636d | 7218210103a11183a318187161636d | |||
655f725f696f745f6f732e65786514 | 655f725f696f745f6f732e65786514 | |||
1a0044b349078201582005f6b327c1 | 1a0044b349078201582005f6b327c1 | |||
skipping to change at page 82, line 4 ¶ | skipping to change at line 3537 ¶ | |||
be529571f5569bb7dc542f98a31818 | be529571f5569bb7dc542f98a31818 | |||
6a636f6d6d6f6e2e6c6962141a0023 | 6a636f6d6d6f6e2e6c6962141a0023 | |||
3d3b0782015820a6a9dcdfb3884da5 | 3d3b0782015820a6a9dcdfb3884da5 | |||
f884e4e1e8e8629958c2dbc7027414 | f884e4e1e8e8629958c2dbc7027414 | |||
43a913e34de9333be6' | 43a913e34de9333be6' | |||
] | ] | |||
] | ] | |||
} | } | |||
} | } | |||
} | } | |||
/ An evidence CoSWID created for the "Acme R-IoT-OS" created by / | ||||
/ the "Acme Base Attester" (both fictious names). It provides / | / This is an evidence CoSWID created for the "Acme R-IoT-OS" / | |||
/ measurements of the SW (other than the attester SW) on the / | / that is created by the "Acme Base Attester" (both fictitious / | |||
/ device. / | / names). It provides measurements of the SW (other than the / | |||
/ attester SW) on the device. / | ||||
1398229316({ | 1398229316({ | |||
/ Unique CoSWID ID / 0: "4ca245", | / Unique CoSWID ID / 0: "4ca245", | |||
/ tag-version / 12: 23, / Attester-maintained counter / | / tag-version / 12: 23, / Attester-maintained counter / | |||
/ software-name / 1: "Acme R-IoT-OS", | / software-name / 1: "Acme R-IoT-OS", | |||
/ software-version / 13: "3.1.4", | / software-version / 13: "3.1.4", | |||
/ entity / 2: { | / entity / 2: { | |||
/ entity-name / 31: "Acme Base Attester", | / entity-name / 31: "Acme Base Attester", | |||
/ role / 33: 1 / tag-creator / | / role / 33: 1 / tag-creator / | |||
}, | }, | |||
skipping to change at page 83, line 4 ¶ | skipping to change at line 3586 ¶ | |||
{ | { | |||
/ ...fs-name / 24: "common.lib", | / ...fs-name / 24: "common.lib", | |||
/ ...size / 20: 2309435, | / ...size / 20: 2309435, | |||
/ ...hash / 7: [ | / ...hash / 7: [ | |||
1, / SHA-256 / | 1, / SHA-256 / | |||
h'a6a9dcdfb3884da5 | h'a6a9dcdfb3884da5 | |||
f884e4e1e8e86299 | f884e4e1e8e86299 | |||
58c2dbc702741443 | 58c2dbc702741443 | |||
a913e34de9333be6' | a913e34de9333be6' | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
}) | }) | |||
A.1.6. Attestation Results in JSON | A.1.6. Attestation Results in JSON | |||
This is a JSON-encoded payload that might be the output of a verifier | This is a JSON-encoded payload that might be the output of a verifier | |||
that evaluated the IoT Attestation example immediately above. | that evaluated the IoT Attestation example immediately above. | |||
This particular verifier knows enough about the TEE attester to be | This particular verifier knows enough about the TEE attester to be | |||
able to pass claims like debug status directly through to the relying | able to pass claims such as debug status directly through to the | |||
party. The verifier also knows the reference values for the measured | relying party. The verifier also knows the reference values for the | |||
software components and is able to check them. It informs the | measured software components and is able to check them. It informs | |||
relying party that they were correct in the "measres" claim. | the relying party that they were correct in the "measres" claim. | |||
"Trustus Verifications" is the name of the services that verifies the | "Trustus Verifications" is the name of the service that verifies the | |||
software component measurements. | software component measurements. | |||
{ | { | |||
"eat_nonce": "jkd8KL-8xQk", | "eat_nonce": "jkd8KL-8xQk", | |||
"oemboot": true, | "oemboot": true, | |||
"dbgstat": "disabled-since-boot", | "dbgstat": "disabled-since-boot", | |||
"oemid": "iUWt", | "oemid": "iUWt", | |||
"ueid": "AZj1Ck_2wFhhyIYNE6Y4", | "ueid": "AZj1Ck_2wFhhyIYNE6Y4", | |||
"swname": "Acme R-IoT-OS", | "swname": "Acme R-IoT-OS", | |||
"swversion": [ | "swversion": [ | |||
skipping to change at page 83, line 46 ¶ | skipping to change at line 3627 ¶ | |||
[ | [ | |||
[ | [ | |||
"all", | "all", | |||
"success" | "success" | |||
] | ] | |||
] | ] | |||
] | ] | |||
] | ] | |||
} | } | |||
A.1.7. JSON-encoded Token with Submodules | A.1.7. JSON-Encoded Token with Submodules | |||
This example has its lines wrapped per [RFC8792]. | The lines in this example are wrapped per [RFC8792]. | |||
{ | { | |||
"eat_nonce": "lI-IYNE6Rj6O", | "eat_nonce": "lI-IYNE6Rj6O", | |||
"ueid": "AJj1Ck_2wFhhyIYNE6Y46g==", | "ueid": "AJj1Ck_2wFhhyIYNE6Y46g==", | |||
"secboot": true, | "secboot": true, | |||
"dbgstat": "disabled-permanently", | "dbgstat": "disabled-permanently", | |||
"iat": 1526542894, | "iat": 1526542894, | |||
"submods": { | "submods": { | |||
"Android App Foo": { | "Android App Foo": { | |||
"swname": "Foo.app" | "swname": "Foo.app" | |||
skipping to change at page 84, line 38 ¶ | skipping to change at line 3664 ¶ | |||
GVyIiwiaWF0IjoxNjUxNzc0ODY4LCJleHAiOm51bGwsImF1ZCI6IiIsInN1YiI6IiJ9.\ | GVyIiwiaWF0IjoxNjUxNzc0ODY4LCJleHAiOm51bGwsImF1ZCI6IiIsInN1YiI6IiJ9.\ | |||
gjw4nFMhLpJUuPXvMPzK1GMjhyJq2vWXg1416XKszwQ" | gjw4nFMhLpJUuPXvMPzK1GMjhyJq2vWXg1416XKszwQ" | |||
] | ] | |||
} | } | |||
} | } | |||
A.2. Signed Token Examples | A.2. Signed Token Examples | |||
A.2.1. Basic CWT Example | A.2.1. Basic CWT Example | |||
This is a simple CWT-format token signed with the ECDSA algorithm. | This is a simple CWT-format token signed with the Elliptic Curve | |||
Digital Signature Algorithm (ECDSA). | ||||
/ This is a full CWT-format token. The payload is the / | / This is a full CWT-format token. The payload is the / | |||
/ attestation hardware block above. The main structure / | / attestation hardware block above. The visible main / | |||
/ visible is that of the COSE_Sign1. / | / structure is that of the COSE_Sign1. / | |||
61( 18( [ | 61( 18( [ | |||
h'A10126', / protected headers / | h'A10126', / protected headers / | |||
{}, / empty unprotected headers / | {}, / empty unprotected headers / | |||
h'A60A4CD79B964DDD5471C1393C88881901005001 | h'A60A4CD79B964DDD5471C1393C88881901005001 | |||
98F50A4FF6C05861C8860D13A638EA19010219FA | 98F50A4FF6C05861C8860D13A638EA19010219FA | |||
F2190106F5190107031901048263332E3101', / payload / | F2190106F5190107031901048263332E3101', / payload / | |||
h'9B9B2F5E470000F6A20C8A4157B5763FC45BE759 | h'9B9B2F5E470000F6A20C8A4157B5763FC45BE759 | |||
9A5334028517768C21AFFB845A56AB557E0C8973 | 9A5334028517768C21AFFB845A56AB557E0C8973 | |||
A07417391243A79C478562D285612E292C622162 | A07417391243A79C478562D285612E292C622162 | |||
AB233787' / signature / | AB233787' / signature / | |||
] ) ) | ] ) ) | |||
A.2.2. CBOR-encoded Detached EAT Bundle | A.2.2. CBOR-Encoded Detached EAT Bundle | |||
In this detached EAT bundle, the main token is produced by a HW | In this detached EAT bundle, the main token is produced by a hardware | |||
attestation block. The detached Claims-Set is produced by a TEE and | (HW) attestation block. The detached Claims-Set is produced by a TEE | |||
is largely identical to the Simple TEE examples above. The TEE | and is largely identical to the simple TEE examples above. The TEE | |||
digests its Claims-Set and feeds that digest to the HW block. | digests its Claims-Set and feeds that digest to the HW block. | |||
In a better example the attestation produced by the HW block would be | In a better example, the attestation produced by the HW block would | |||
a CWT and thus signed and secured by the HW block. Since the | be a CWT and thus signed and secured by the HW block. Since the | |||
signature covers the digest from the TEE that Claims-Set is also | signature covers the digest from the TEE, that Claims-Set is also | |||
secured. | secured. | |||
The detached EAT bundle itself can be assembled by untrusted | The detached EAT bundle itself can be assembled by untrusted | |||
software. | software. | |||
/ This is a detached EAT bundle tag. / | / This is a detached EAT bundle tag. / | |||
602([ | 602([ | |||
/ First part is a full EAT token with claims like nonce and / | / The first part is a full EAT token with claims like nonce / | |||
/ UEID. Most importantly, it includes a submodule that is a / | / and UEID. Most importantly, it includes a submodule that / | |||
/ detached digest which is the hash of the "TEE" claims set / | / is a detached digest, which is the hash of the "TEE" / | |||
/ in the next section. The COSE payload follows: / | / claims set in the next section. The COSE payload is as / | |||
/ follows: / | ||||
/ { / | / { / | |||
/ 10: h'948F8860D13A463E', / | / 10: h'948F8860D13A463E', / | |||
/ 256: h'0198F50A4FF6C05861C8860D13A638EA', / | / 256: h'0198F50A4FF6C05861C8860D13A638EA', / | |||
/ 258: 64242, / | / 258: 64242, / | |||
/ 262: true, / | / 262: true, / | |||
/ 263: 3, / | / 263: 3, / | |||
/ 260: ["3.1", 1], / | / 260: ["3.1", 1], / | |||
/ 266: { / | / 266: { / | |||
/ "TEE": [ / | / "TEE": [ / | |||
/ -16, / | / -16, / | |||
skipping to change at page 86, line 37 ¶ | skipping to change at line 3731 ¶ | |||
/ } / | / } / | |||
h'D83DD28443A10126A05866A80A48948F8860D13A463E1901 | h'D83DD28443A10126A05866A80A48948F8860D13A463E1901 | |||
00500198F50A4FF6C05861C8860D13A638EA19010219FAF2 | 00500198F50A4FF6C05861C8860D13A638EA19010219FAF2 | |||
19010504190106F5190107031901048263332E310119010A | 19010504190106F5190107031901048263332E310119010A | |||
A163544545822F58208DEF652F47000710D9F466A4C666E2 | A163544545822F58208DEF652F47000710D9F466A4C666E2 | |||
09DD74F927A1CEA352B03143E188838ABE5840F690CB0388 | 09DD74F927A1CEA352B03143E188838ABE5840F690CB0388 | |||
677FA624A3775FD7CBC4E8409EC9816BE32FA474733B0F98 | 677FA624A3775FD7CBC4E8409EC9816BE32FA474733B0F98 | |||
C27FBAEDBBC9963B9CB5ECC03C3E35B3AFC0B7B35B495DEA | C27FBAEDBBC9963B9CB5ECC03C3E35B3AFC0B7B35B495DEA | |||
C0997122EA867F07B8D5EB', | C0997122EA867F07B8D5EB', | |||
{ | { | |||
/ A CBOR-encoded byte-string wrapped EAT claims-set. It / | / A CBOR-encoded byte-string-wrapped EAT claims-set. It / | |||
/ contains claims suitable for a TEE. / | / contains claims suitable for a TEE. / | |||
"TEE" : h'a40a48948f8860d13a463e190106f519010702 | "TEE" : h'a40a48948f8860d13a463e190106f519010702 | |||
190111818218795858a60064336132340c0101 | 190111818218795858a60064336132340c0101 | |||
6b41636d6520544545204f530d65332e312e34 | 6b41636d6520544545204f530d65332e312e34 | |||
0282a2181f6b41636d6520544545204f531821 | 0282a2181f6b41636d6520544545204f531821 | |||
01a2181f6b41636d6520544545204f53182102 | 01a2181f6b41636d6520544545204f53182102 | |||
06a111a118186e61636d655f7465655f332e65 | 06a111a118186e61636d655f7465655f332e65 | |||
7865' | 7865' | |||
} | } | |||
]) | ]) | |||
/ This example contains submodule that is a detached digest, / | / This example contains a submodule that is a detached digest, / | |||
/ which is the hash of a Claims-Set convey outside this token. / | / which is the hash of a Claims-Set conveyed outside this / | |||
/ Other than that is is the other example of a token from an / | / token. Additionally, there is an example of a token from an / | |||
/ attestation HW block. / | / attestation HW block. / | |||
{ | { | |||
/ eat_nonce / 10: h'3515744961254b41a6cf9c02', | / eat_nonce / 10: h'3515744961254b41a6cf9c02', | |||
/ ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | / ueid / 256: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ oemid / 258: 64242, / Private Enterprise Number / | / oemid / 258: 64242, / Private Enterprise Number / | |||
/ oemboot / 262: true, | / oemboot / 262: true, | |||
/ dbgstat / 263: 3, / disabled-permanently / | / dbgstat / 263: 3, / disabled-permanently / | |||
/ hwversion / 260: [ "3.1", 1 ], / multipartnumeric / | / hwversion / 260: [ "3.1", 1 ], / multipartnumeric / | |||
/ submods/ 266: { | / submods/ 266: { | |||
"TEE": [ / detached digest submod / | "TEE": [ / detached digest submod / | |||
-16, / SHA-256 / | -16, / SHA-256 / | |||
h'e5cf95fd24fab7144674 | h'e5cf95fd24fab7144674 | |||
2dd58d43dae178e55fe2 | 2dd58d43dae178e55fe2 | |||
b94291a9291082ffc263 | b94291a9291082ffc263 | |||
5a0b' | 5a0b' | |||
] | ] | |||
} | } | |||
} | } | |||
A.2.3. JSON-encoded Detached EAT Bundle | A.2.3. JSON-Encoded Detached EAT Bundle | |||
In this bundle there are two detached Claims-Sets, "Audio Subsystem" | In this bundle, there are two detached Claims-Sets: "Audio Subsystem" | |||
and "Graphics Subsystem". The JWT at the start of the bundle has | and "Graphics Subsystem". The JWT at the start of the bundle has | |||
detached signature submodules with hashes that cover these two | detached signature submodules with hashes that cover these two | |||
Claims-Sets. The JWT itself is protected using HMAC with a key of | Claims-Sets. The JWT itself is protected using the Hashed Message | |||
"xxxxxx". | Authentication Code (HMAC) with a key of "xxxxxx". | |||
This example has its lines wrapped per [RFC8792]. | The lines in this example are wrapped per [RFC8792]. | |||
[ | [ | |||
[ | [ | |||
"JWT", | "JWT", | |||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlYXRfbm9uY2UiOiJ5dT\ | "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlYXRfbm9uY2UiOiJ5dT\ | |||
c2Tk44SXVWNmUiLCJzdWJtb2RzIjp7IkF1ZGlvIFN1YnN5c3RlbSI6WyJESUdFU1QiLF\ | c2Tk44SXVWNmUiLCJzdWJtb2RzIjp7IkF1ZGlvIFN1YnN5c3RlbSI6WyJESUdFU1QiLF\ | |||
siU0hBLTI1NiIsIkZSRW4yVlR3aTk5cWNNRVFzYmxtTVFnM2I1b2ZYUG5OM1BJYW5CME\ | siU0hBLTI1NiIsIkZSRW4yVlR3aTk5cWNNRVFzYmxtTVFnM2I1b2ZYUG5OM1BJYW5CME\ | |||
5RT3MiXV0sIkdyYXBoaWNzIFN1YnN5c3RlbSI6WyJESUdFU1QiLFsiU0hBLTI1NiIsIk\ | 5RT3MiXV0sIkdyYXBoaWNzIFN1YnN5c3RlbSI6WyJESUdFU1QiLFsiU0hBLTI1NiIsIk\ | |||
52M3NqUVU3Q1Z0RFRka0RTUlhWcFZDNUNMVFBCWmVQWWhTLUhoVlZWMXMiXV19fQ.FYs\ | 52M3NqUVU3Q1Z0RFRka0RTUlhWcFZDNUNMVFBCWmVQWWhTLUhoVlZWMXMiXV19fQ.FYs\ | |||
7R-TKhgAk85NyCOPQlbtGGjFM_3chnhBEOuM6qCo" | 7R-TKhgAk85NyCOPQlbtGGjFM_3chnhBEOuM6qCo" | |||
skipping to change at page 88, line 35 ¶ | skipping to change at line 3806 ¶ | |||
] | ] | |||
Appendix B. UEID Design Rationale | Appendix B. UEID Design Rationale | |||
B.1. Collision Probability | B.1. Collision Probability | |||
This calculation is to determine the probability of a collision of | This calculation is to determine the probability of a collision of | |||
type 0x01 UEIDs given the total possible entity population and the | type 0x01 UEIDs given the total possible entity population and the | |||
number of entities in a particular entity management database. | number of entities in a particular entity management database. | |||
Three different sized databases are considered. The number of | Three different-sized databases are considered. The number of | |||
devices per person roughly models non-personal devices such as | devices per person roughly models non-personal devices such as | |||
traffic lights, devices in stores they shop in, facilities they work | traffic lights, devices in stores they shop in, facilities they work | |||
in and so on, even considering individual light bulbs. A device may | in, and so on, even considering individual light bulbs. A device may | |||
have individually attested subsystems, for example parts of a car or | have individually attested subsystems, for example, parts of a car or | |||
a mobile phone. It is assumed that the largest database will have at | a mobile phone. It is assumed that the largest database will have at | |||
most 10% of the world's population of devices. Note that databases | most 10% of the world's population of devices. Note that databases | |||
that handle more than a trillion records exist today. | that handle more than a trillion records exist today. | |||
The trillion-record database size models an easy-to-imagine reality | The trillion-record database size models an easy-to-imagine reality | |||
over the next decades. The quadrillion-record database is roughly at | over the next decades. The quadrillion-record database is roughly at | |||
the limit of what is imaginable and should probably be accommodated. | the limit of what is imaginable and should probably be accommodated. | |||
The 100 quadrillion database is highly speculative perhaps involving | The 100 quadrillion database is highly speculative perhaps involving | |||
nanorobots for every person, livestock animal and domesticated bird. | nanorobots for every person, livestock animals, and domesticated | |||
It is included to round out the analysis. | birds. It is included to round out the analysis. | |||
Note that the items counted here certainly do not have IP address and | Note that the items counted here certainly do not have IP addresses | |||
are not individually connected to the network. They may be connected | and are not individually connected to the network. They may be | |||
to internal buses, via serial links, Bluetooth and so on. This is | connected to internal buses, via serial links, via Bluetooth, and so | |||
not the same problem as sizing IP addresses. | on. This is not the same problem as sizing IP addresses. | |||
+=========+===========+============+==========+=================+ | +=========+===========+=============+==========+=================+ | |||
| People | Devices / | Subsystems | Database | Database Size | | | People | Devices/ | Subsystems/ | Database | Database Size | | |||
| | Person | / Device | Portion | | | | | Person | Device | Portion | | | |||
+=========+===========+============+==========+=================+ | +=========+===========+=============+==========+=================+ | |||
| 10 | 100 | 10 | 10% | trillion | | | 10 | 100 | 10 | 10% | trillion | | |||
| billion | | | | (10^12) | | | billion | | | | (10^12) | | |||
+---------+-----------+------------+----------+-----------------+ | +---------+-----------+-------------+----------+-----------------+ | |||
| 10 | 100,000 | 10 | 10% | quadrillion | | | 10 | 100,000 | 10 | 10% | quadrillion | | |||
| billion | | | | (10^15) | | | billion | | | | (10^15) | | |||
+---------+-----------+------------+----------+-----------------+ | +---------+-----------+-------------+----------+-----------------+ | |||
| 100 | 1,000,000 | 10 | 10% | 100 quadrillion | | | 100 | 1,000,000 | 10 | 10% | 100 quadrillion | | |||
| billion | | | | (10^17) | | | billion | | | | (10^17) | | |||
+---------+-----------+------------+----------+-----------------+ | +---------+-----------+-------------+----------+-----------------+ | |||
Table 5: Entity Database Size Examples | Table 5: Entity Database Size Examples | |||
This is conceptually similar to the Birthday Problem where m is the | This is conceptually similar to the Birthday Problem where m is the | |||
number of possible birthdays, always 365, and k is the number of | number of possible birthdays (always 365) and k is the number of | |||
people. It is also conceptually similar to the Birthday Attack where | people. It is also conceptually similar to the Birthday Attack where | |||
collisions of the output of hash functions are considered. | collisions of the output of hash functions are considered. | |||
The proper formula for the collision calculation is | The proper formula for the collision calculation is: | |||
p = 1 - e^{-k^2/(2n)} | p = 1 - e^{-k^2/(2n)} | |||
p Collision Probability | For this calculation: | |||
n Total possible population | ||||
k Actual population | p: Collision probability | |||
n: Total possible population | ||||
k: Actual population | ||||
However, for the very large values involved here, this formula | However, for the very large values involved here, this formula | |||
requires floating point precision higher than commonly available in | requires floating-point precision higher than commonly available in | |||
calculators and software so this simple approximation is used. See | calculators and software, so this simple approximation is used. See | |||
[BirthdayAttack]. | [BirthdayAttack]. | |||
p = k^2 / 2n | p = k^2 / 2n | |||
For this calculation: | For this calculation: | |||
p Collision Probability | p: Collision probability | |||
n Total population based on number of bits in UEID | n: Total population based on number of bits in UEID | |||
k Population in a database | k: Population in a database | |||
+=====================+==============+==============+==============+ | +=====================+==============+==============+==============+ | |||
| Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | |||
+=====================+==============+==============+==============+ | +=====================+==============+==============+==============+ | |||
| trillion (10^12) | 2 * 10^-15 | 8 * 10^-35 | 5 * 10^-55 | | | trillion (10^12) | 2 * 10^-15 | 8 * 10^-35 | 5 * 10^-55 | | |||
+---------------------+--------------+--------------+--------------+ | +---------------------+--------------+--------------+--------------+ | |||
| quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | | quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | |||
+---------------------+--------------+--------------+--------------+ | +---------------------+--------------+--------------+--------------+ | |||
| 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | | 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | |||
| (10^17) | | | | | | (10^17) | | | | | |||
skipping to change at page 90, line 25 ¶ | skipping to change at line 3891 ¶ | |||
Table 6: UEID Size Options | Table 6: UEID Size Options | |||
Next, to calculate the probability of a collision occurring in one | Next, to calculate the probability of a collision occurring in one | |||
year's operation of a database, it is assumed that the database size | year's operation of a database, it is assumed that the database size | |||
is in a steady state and that 10% of the database changes per year. | is in a steady state and that 10% of the database changes per year. | |||
For example, a trillion record database would have 100 billion states | For example, a trillion record database would have 100 billion states | |||
per year. Each of those states has the above calculated probability | per year. Each of those states has the above calculated probability | |||
of a collision. | of a collision. | |||
This assumption is a worst-case since it assumes that each state of | This assumption is a worst-case scenario since it assumes that each | |||
the database is completely independent from the previous state. In | state of the database is completely independent from the previous | |||
reality this is unlikely as state changes will be the addition or | state. In reality, this is unlikely as state changes will be the | |||
deletion of a few records. | addition or deletion of a few records. | |||
The following tables gives the time interval until there is a | The following table gives the time interval until there is a | |||
probability of a collision based on there being one tenth the number | probability of a collision, which is based on there being one tenth | |||
of states per year as the number of records in the database. | of the number of states per year as the number of records in the | |||
database. | ||||
t = 1 / ((k / 10) * p) | t = 1 / ((k / 10) * p) | |||
t Time until a collision | For this calculation: | |||
p Collision probability for UEID size | ||||
k Database size | t: Time until a collision | |||
p: Collision probability for UEID size | ||||
k: Database size | ||||
+=====================+==============+==============+==============+ | +=====================+==============+==============+==============+ | |||
| Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | |||
+=====================+==============+==============+==============+ | +=====================+==============+==============+==============+ | |||
| trillion (10^12) | 60,000 years | 10^24 years | 10^44 years | | | trillion (10^12) | 60,000 years | 10^24 years | 10^44 years | | |||
+---------------------+--------------+--------------+--------------+ | +---------------------+--------------+--------------+--------------+ | |||
| quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 years | | | quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 years | | |||
+---------------------+--------------+--------------+--------------+ | +---------------------+--------------+--------------+--------------+ | |||
| 100 quadrillion | 8 | 10^11 years | 10^31 years | | | 100 quadrillion | 8 | 10^11 years | 10^31 years | | |||
| (10^17) | microseconds | | | | | (10^17) | microseconds | | | | |||
+---------------------+--------------+--------------+--------------+ | +---------------------+--------------+--------------+--------------+ | |||
Table 7: UEID Collision Probability | Table 7: UEID Collision Probability | |||
Clearly, 128 bits is enough for the near future thus the requirement | Clearly, 128 bits is enough for the near future, thus the requirement | |||
that type 0x01 UEIDs be a minimum of 128 bits. | that type 0x01 UEIDs be a minimum of 128 bits. | |||
There is no requirement for 256 bits today as quadrillion-record | There is no requirement for 256 bits today as quadrillion-record | |||
databases are not expected in the near future and because this time- | databases are not expected in the near future and because this time- | |||
to-collision calculation is a very worst case. A future update of | to-collision calculation is a very worst-case scenario. A future | |||
the standard may increase the requirement to 256 bits, so there is a | update of the standard may increase the requirement to 256 bits, so | |||
requirement that implementations be able to receive 256-bit UEIDs. | there is a requirement that implementations be able to receive | |||
256-bit UEIDs. | ||||
B.2. No Use of UUID | B.2. No Use of UUID | |||
A UEID is not a Universally Unique Identifier (UUID) [RFC9562] by | A UEID is not a Universally Unique Identifier (UUID) [RFC9562] by | |||
conscious choice for the following reasons. | conscious choice for the following reasons. | |||
UUIDs are limited to 128 bits which may not be enough for some future | UUIDs are limited to 128 bits, which may not be enough for some | |||
use cases. | future use cases. | |||
Today, cryptographic-quality random numbers are available from common | Today, cryptographic-quality random numbers are available from common | |||
computing platforms. In particular, hardware randomness sources were | computing platforms. In particular, hardware randomness sources were | |||
introduced in CPUs between 2010 and 2015. Operating systems and | introduced in CPUs between 2010 and 2015. Operating systems and | |||
cryptographic libraries make use of this hardware. Consequently, | cryptographic libraries make use of this hardware. Consequently, | |||
there is little need for protocols to construct random numbers from | there is little need for protocols to construct random numbers from | |||
multiple sources on their own. | multiple sources on their own. | |||
Version 4 UUIDs do allow for use of such cryptographic-quality random | Version 4 UUIDs do allow for the use of such cryptographic-quality | |||
numbers, but do so by mapping into the overall UUID structure of time | random numbers, but they do so by mapping into the overall UUID | |||
and clock values. This structure is of no value here yet adds | structure of time and clock values. This structure is of no value | |||
complexity. It also slightly reduces the number of actual bits with | here yet adds complexity. It also slightly reduces the number of | |||
entropy. | actual bits with entropy. | |||
The design of UUID accommodates the construction of a unique | The design of UUID accommodates the construction of a unique | |||
identifier by combination of several identifiers that separately do | identifier by the combination of several identifiers that separately | |||
not provide sufficient uniqueness. UEID takes the view that this | do not provide sufficient uniqueness. UEID takes the view that this | |||
construction is no longer needed, in particular because | construction is no longer needed, in particular because | |||
cryptographic-quality random number generators are readily available. | cryptographic-quality random number generators are readily available. | |||
It takes the view that hardware, software and/or manufacturing | It takes the view that hardware, software, and/or manufacturing | |||
process implement UEID in a simple and direct way. | processes implement UEID in a simple and direct way. | |||
Note also that that a type 2 UEID (EUI/MAC) is only 7 bytes compared | Note also that a type 2 UEID (EUI/MAC) is only 7 bytes whereas a UUID | |||
to 16 for a UUID. | is 16. | |||
Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity (DevID) | Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity (DevID) | |||
This section describes several distinct ways in which an IEEE IDevID | This section describes several distinct ways in which an IEEE Initial | |||
[IEEE.802.1AR] relates to EAT, particularly to UEID and SUEID. | Device Identifier (IDevID) [IEEE.802.1AR] relates to EAT, | |||
particularly to UEID and SUEID. | ||||
[IEEE.802.1AR] orients around the definition of an implementation | [IEEE.802.1AR] orients around the definition of an implementation | |||
called a "DevID Module." It describes how IDevIDs and LDevIDs are | called a "DevID Module". It describes how IDevIDs and LDevIDs are | |||
stored, protected and accessed using a DevID Module. A particular | stored, protected, and accessed using a DevID Module. A particular | |||
level of defense against attack that should be achieved to be a DevID | level of defense against attack that should be achieved to be a DevID | |||
is defined. The intent is that IDevIDs and LDevIDs can be used with | is defined here. The intent is that IDevIDs and LDevIDs can be used | |||
any network protocol or message format. In these protocols and | with any network protocol or message format. In these protocols and | |||
message formats the DevID secret is used to sign a nonce or similar | message formats, the DevID secret is used to sign a nonce or similar | |||
to prove the association of the DevID certificates with the device. | to prove the association of the DevID certificates with the device. | |||
By contrast, EAT standardizes a message format that is sent to a | By contrast, EAT standardizes a message format that is sent to a | |||
relying party, the very thing that is not defined in [IEEE.802.1AR]. | relying party, the very thing that is not defined in [IEEE.802.1AR]. | |||
Nor does EAT give details on how keys, data and such are stored, | Nor does EAT give details on how keys, data, and such are stored, | |||
protected and accessed. EAT is intended to work with a variety of | protected, and accessed. EAT is intended to work with a variety of | |||
different on-device implementations ranging from minimal protection | different on-device implementations ranging from minimal protection | |||
of assets to the highest levels of asset protection. It does not | of assets to the highest levels of asset protection. It does not | |||
define any particular level of defense against attack, instead | define any particular level of defense against attack; instead, it | |||
providing a set of security considerations. | provides a set of security considerations. | |||
EAT and DevID can be viewed as complimentary when used together or as | EAT and DevID can be viewed as complimentary when used together or as | |||
competing to provide a device identity service. | competing to provide a device identity service. | |||
C.1. DevID Used With EAT | C.1. DevID Used with EAT | |||
As just described, EAT standardizes a message format and | As described above, EAT standardizes a message format, but | |||
[IEEE.802.1AR] does not. Vice versa, EAT does not define a device | [IEEE.802.1AR] does not. Vice versa, EAT does not define a device | |||
implementation, but DevID does. | implementation, but DevID does. | |||
Hence, EAT can be the message format that a DevID is used with. The | Hence, EAT can be the message format that a DevID is used with. The | |||
DevID secret becomes the attestation key used to sign EATs. The | DevID secret becomes the attestation key used to sign EATs, and the | |||
DevID and its certificate chain become the endorsement sent to the | DevID and its certificate chain become the endorsement sent to the | |||
verifier. | verifier. | |||
In this case, the EAT and the DevID are likely to both provide a | In this case, the EAT and the DevID are likely to both provide a | |||
device identifier (e.g. a serial number). In the EAT it is the UEID | device identifier (e.g., a serial number). In the EAT, it is the | |||
(or SUEID). In the DevID (used as an endorsement), it is a device | UEID (or SUEID). In the DevID (used as an endorsement), it is a | |||
serial number included in the subject field of the DevID certificate. | device serial number included in the subject field of the DevID | |||
It is probably a good idea in this use for them to be the same serial | certificate. For this use, it is a good idea for the serial numbers | |||
number or for the UEID to be a hash of the DevID serial number. | to be the same or for the UEID to be a hash of the DevID serial | |||
number. | ||||
C.2. How EAT Provides an Equivalent Secure Device Identity | C.2. How EAT Provides an Equivalent Secure Device Identity | |||
The UEID, SUEID and other claims like OEM ID are equivalent to the | The UEID, SUEID, and other claims such as OEM ID are equivalent to | |||
secure device identity put into the subject field of a DevID | the secure device identity that is put into the subject field of a | |||
certificate. These EAT claims can represent all the same fields and | DevID certificate. These EAT claims can represent all the same | |||
values that can be put in a DevID certificate subject. EAT | fields and values that can be put in a DevID certificate subject. | |||
explicitly and carefully defines a variety of useful claims. | EAT explicitly and carefully defines a variety of useful claims. | |||
EAT secures the conveyance of these claims by having them signed on | EAT secures the conveyance of these claims by having them signed on | |||
the device by the attestation key when the EAT is generated. EAT | the device by the attestation key when the EAT is generated. EAT | |||
also signs the nonce that gives freshness at this time. Since these | also signs the nonce that gives freshness at this time. Since these | |||
claims are signed for every EAT generated, they can include things | claims are signed for every EAT generated, they can include things | |||
that vary over time like GPS location. | that vary over time such as GPS location. | |||
DevID secures the device identity fields by having them signed by the | DevID secures the device identity fields when they are signed by the | |||
manufacturer of the device into a certificate. That certificate is | manufacturer of the device into a certificate. That certificate is | |||
created once during the manufacturing of the device and never changes | created once during the manufacturing of the device and never | |||
so the fields cannot change. | changes, so the fields cannot change. | |||
So in one case the signing of the identity happens on the device and | So in one case, the signing of the identity happens on the device, | |||
the other in a manufacturing facility, but in both cases the signing | and in the other case, it happens in a manufacturing facility. | |||
of the nonce that proves the binding to the actual device happens on | However, in both cases, the signing of the nonce that proves the | |||
the device. | binding to the actual device happens on the device. | |||
While EAT does not specify how the signing keys, signature process | While EAT does not specify how the signing keys, signature process, | |||
and storage of the identity values should be secured against attack, | and storage of the identity values should be secured against attack, | |||
an EAT implementation may have equal defenses against attack. One | an EAT implementation may have equal defenses against attack. One | |||
reason EAT uses CBOR is because it is simple enough that a basic EAT | reason EAT uses CBOR is because it is simple enough that a basic EAT | |||
implementation can be constructed entirely in hardware. This allows | implementation can be constructed entirely in hardware. This allows | |||
EAT to be implemented with the strongest defenses possible. | EAT to be implemented with the strongest defenses possible. | |||
C.3. An X.509 Format EAT | C.3. An X.509 Format EAT | |||
It is possible to define a way to encode EAT claims in an X.509 | It is possible to define a way to encode EAT claims in an X.509 | |||
certificate. For example, the EAT claims might be mapped to X.509 v3 | certificate. For example, the EAT claims might be mapped to X.509 v3 | |||
extensions. It is even possible to stuff a whole CBOR-encoded | extensions. It is even possible to stuff a whole CBOR-encoded | |||
unsigned EAT token into a X.509 certificate. | unsigned EAT token into an X.509 certificate. | |||
If that X.509 certificate is an IDevID or LDevID, this becomes | If that X.509 certificate is an IDevID or LDevID, it becomes another | |||
another way to use EAT and DevID together. | way to use EAT and DevID together. | |||
Note that the DevID must still be used with an authentication | Note that the DevID must still be used with an authentication | |||
protocol that has a nonce or equivalent. The EAT here is not being | protocol that has a nonce or equivalent. The EAT here is not being | |||
used as the protocol to interact with the relying party. | used as the protocol to interact with the relying party. | |||
C.4. Device Identifier Permanence | C.4. Device Identifier Permanence | |||
In terms of permanence, an IDevID is similar to a UEID in that they | In terms of permanence, an IDevID is similar to a UEID in that they | |||
do not change over the life of the device. They cease to exist only | do not change over the life of the device. They cease to exist only | |||
when the device is destroyed. | when the device is destroyed. | |||
skipping to change at page 94, line 15 ¶ | skipping to change at line 4074 ¶ | |||
[IEEE.802.1AR] describes much of this permanence as resistant to | [IEEE.802.1AR] describes much of this permanence as resistant to | |||
attacks that seek to change the ID. IDevID permanence can be | attacks that seek to change the ID. IDevID permanence can be | |||
described this way because [IEEE.802.1AR] is oriented around the | described this way because [IEEE.802.1AR] is oriented around the | |||
definition of an implementation with a particular level of defense | definition of an implementation with a particular level of defense | |||
against attack. | against attack. | |||
EAT is not defined around a particular implementation and must work | EAT is not defined around a particular implementation and must work | |||
on a range of devices that have a range of defenses against attack. | on a range of devices that have a range of defenses against attack. | |||
EAT thus cannot be defined permanence in terms of defense against | EAT thus cannot be defined permanence in terms of defense against | |||
attack. EAT's definition of permanence is in terms of operations and | attack. EAT's definition of permanence is in terms of operations and | |||
device lifecycle. | device life cycle. | |||
Appendix D. CDDL for CWT and JWT | Appendix D. CDDL for CWT and JWT | |||
[RFC8392] was published before CDDL was available and thus is | [RFC8392] was published before CDDL was available and thus is | |||
specified in prose, not CDDL. Following is CDDL specifying CWT as it | specified in prose, not CDDL. In the following example, CDDL | |||
is needed to complete this specification. This CDDL also covers the | specifies CWT as it is needed to complete this specification. This | |||
Claims-Set for JWT. | CDDL also covers the Claims-Set for JWT. | |||
Note that Section 4.3.1 requires that the iat claim be the type | Note that Section 4.3.1 requires that the "iat" claim be the type | |||
~time-int (Section 7.2.1), not the type ~time when it is used in an | ~time-int (Section 7.2.1), not the type ~time when it is used in an | |||
EAT as floating-point values are not allowed for the "iat" claim in | EAT as floating-point values are not allowed for the "iat" claim in | |||
EAT. | EAT. | |||
The COSE-related types in this CDDL are defined in [RFC9052]. | The COSE-related types in this CDDL are defined in [RFC9052]. | |||
This however is NOT a normative or standard definition of CWT or JWT | This, however, is NOT a normative or standard definition of CWT or | |||
in CDDL. The prose in CWT and JWT remain the normative definition. | JWT in CDDL. The prose in CWT and JWT remains the normative | |||
definition. | ||||
; This is replicated from draft-ietf-rats-uccs | ; This is replicated from draft-ietf-rats-uccs. | |||
Claims-Set = { | Claims-Set = { | |||
* $$Claims-Set-Claims | * $$Claims-Set-Claims | |||
* Claim-Label .feature "extended-claims-label" => any | * Claim-Label .feature "extended-claims-label" => any | |||
} | } | |||
Claim-Label = int / text | Claim-Label = int / text | |||
string-or-uri = text | string-or-uri = text | |||
$$Claims-Set-Claims //= ( iss-claim-label => string-or-uri ) | $$Claims-Set-Claims //= ( iss-claim-label => string-or-uri ) | |||
$$Claims-Set-Claims //= ( sub-claim-label => string-or-uri ) | $$Claims-Set-Claims //= ( sub-claim-label => string-or-uri ) | |||
skipping to change at page 95, line 40 ¶ | skipping to change at line 4129 ¶ | |||
JSON-ONLY<J> = J .feature "json" | JSON-ONLY<J> = J .feature "json" | |||
CBOR-ONLY<C> = C .feature "cbor" | CBOR-ONLY<C> = C .feature "cbor" | |||
JC<J,C> = JSON-ONLY<J> / CBOR-ONLY<C> | JC<J,C> = JSON-ONLY<J> / CBOR-ONLY<C> | |||
; Same as JC<> but with unwound generic nesting as it seems to cause | ; Same as JC<> but with unwound generic nesting as it seems to cause | |||
; problems. Perhaps this is the nesting problem described in RFC | ; problems. Perhaps this is the nesting problem described in RFC | |||
; 8610. | ; 8610. | |||
JC-NEST-SAFE<J,C> = J .feature "json" / C .feature "cbor" | JC-NEST-SAFE<J,C> = J .feature "json" / C .feature "cbor" | |||
; A JWT message is either a JWS or JWE in compact serialization form | ; A JWT message is either a JSON Web Signature (JWS) or a JSON Web | |||
; with the payload a Claims-Set. Compact serialization is the | ; Encryption (JWE) in compact serialization form with the payload | |||
; protected headers, payload and signature, each b64url encoded and | ; as a Claims-Set. Compact serialization is the protected headers, | |||
; separated by a ".". This CDDL simply matches top-level syntax of of | ; payload, and signature that are each b64url-encoded and separated | |||
; a JWS or JWE since it is not possible to do more in CDDL. | ; by a ".". This CDDL simply matches the top-level syntax of a JWS | |||
; or JWE as it is not possible to do more in CDDL. | ||||
JWT-Message = | JWT-Message = | |||
text .regexp "[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+" | text .regexp "[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+" | |||
; Note that the payload of a JWT is defined in claims-set.cddl. That | ; Note that the payload of a JWT is defined in claims-set.cddl. That | |||
; definition is common to CBOR and JSON. | ; definition is common to CBOR and JSON. | |||
; This is some CDDL describing a CWT at the top level This is | ; This is some CDDL describing a CWT at the top level. This is | |||
; not normative. RFC 8392 is the normative definition of CWT. | ; not normative. RFC 8392 is the normative definition of CWT. | |||
CWT-Messages = CWT-Tagged-Message / CWT-Untagged-Message | CWT-Messages = CWT-Tagged-Message / CWT-Untagged-Message | |||
; The payload of the COSE_Message is always a Claims-Set | ; The payload of the COSE_Message is always a Claims-Set. | |||
; The contents of a CWT Tag must always be a COSE tag | ; The contents of a CWT tag must always be a COSE tag. | |||
CWT-Tagged-Message = #6.61(COSE_Tagged_Message) | CWT-Tagged-Message = #6.61(COSE_Tagged_Message) | |||
; An untagged CWT may be a COSE tag or not | ; An untagged CWT may be a COSE tag or not. | |||
CWT-Untagged-Message = COSE_Messages | CWT-Untagged-Message = COSE_Messages | |||
Appendix E. New Claim Design Considerations | Appendix E. New Claim Design Considerations | |||
The following are design considerations that may be helpful to take | The following are design considerations that may be helpful to take | |||
into account when creating new EAT claims. It is the product of | into account when creating new EAT claims. This is the product of | |||
discussion in the working group. | discussion in the RAT Working Group. | |||
EAT reuses the CWT and JWT claims registries. There is no registry | EAT reuses the CWT and JWT claims registries. There is no registry | |||
exclusively for EAT claims. This is not an update to the expert | exclusively for EAT claims. This is not an update to the expert | |||
review criteria for the JWT and CWT claims registries as that would | review criteria for the JWT and CWT claims registries as that would | |||
be an overreach for this document. | be an overreach for this document. | |||
E.1. Interoperability and Relying Party Orientation | E.1. Interoperability and Relying Party Orientation | |||
It is a broad goal that EATs can be processed by relying parties in a | It is a broad goal that EATs can be processed by relying parties in a | |||
general way regardless of the type, manufacturer or technology of the | general way regardless of the type, manufacturer, or technology of | |||
device from which they originate. It is a goal that there be | the device from which they originate. It is a goal that there be | |||
general-purpose verification implementations that can verify tokens | general-purpose verification implementations that can verify tokens | |||
for large numbers of use cases with special cases and configurations | for large numbers of use cases with special cases and configurations | |||
for different device types. This is a goal of interoperability of | for different device types. This is a goal of interoperability of | |||
the semantics of claims themselves, not just of the signing, encoding | the semantics of claims themselves, not just of the signing, | |||
and serialization formats. | encoding, and serialization formats. | |||
This is a lofty goal and difficult to achieve broadly requiring | This is a lofty goal and difficult to achieve broadly as it requires | |||
careful definition of claims in a technology-neutral way. Sometimes | careful definition of claims in a technology-neutral way. Sometimes | |||
it will be difficult to design a claim that can represent the | it will be difficult to design a claim that can represent the | |||
semantics of data from very different device types. However, the | semantics of data from very different device types. However, the | |||
goal remains even when difficult. | goal remains even when difficult. | |||
E.2. Operating System and Technology Neutral | E.2. Operating System and Technology Neutral | |||
Claims should be defined such that they are not specific to an | Claims should be defined such that they are not specific to an | |||
operating system. They should be applicable to multiple large high- | operating system. They should be applicable to multiple large high- | |||
level operating systems from different vendors. They should also be | level operating systems from different vendors as well as to multiple | |||
applicable to multiple small embedded operating systems from multiple | small embedded operating systems from multiple vendors and everything | |||
vendors and everything in between. | in between. | |||
Claims should not be defined such that they are specific to a | Claims should not be defined such that they are specific to a | |||
software environment or programming language. | software environment or programming language. | |||
Claims should not be defined such that they are specific to a chip or | Claims should not be defined such that they are specific to a chip or | |||
particular hardware. For example, they should not just be the | particular hardware. For example, they should not just be the | |||
contents of some HW status register as it is unlikely that the same | contents of some HW status register as it is unlikely that the same | |||
HW status register with the same bits exists on a chip of a different | HW status register with the same bits exists on a chip of a different | |||
manufacturer. | manufacturer. | |||
skipping to change at page 97, line 25 ¶ | skipping to change at line 4211 ¶ | |||
claim that has been defined in this neutral way. | claim that has been defined in this neutral way. | |||
E.3. Security Level Neutral | E.3. Security Level Neutral | |||
Many use cases will have EATs generated by some of the most secure | Many use cases will have EATs generated by some of the most secure | |||
hardware and software that exists. Secure Elements and smart cards | hardware and software that exists. Secure Elements and smart cards | |||
are examples of this. However, EAT is intended for use in low- | are examples of this. However, EAT is intended for use in low- | |||
security use cases the same as high-security use case. For example, | security use cases the same as high-security use case. For example, | |||
an app on a mobile device may generate EATs on its own. | an app on a mobile device may generate EATs on its own. | |||
Claims should be defined and registered on the basis of whether they | Claims should be defined and registered based on whether they are | |||
are useful and interoperable, not based on security level. In | useful and interoperable, not based on security level. In | |||
particular, there should be no exclusion of claims because they are | particular, there should be no exclusion of claims because they are | |||
just used only in low-security environments. | only used in low-security environments. | |||
E.4. Reuse of Extant Data Formats | E.4. Reuse of Extant Data Formats | |||
Where possible, claims should use already standardized data items, | Where possible, claims should use data items, identifiers, and | |||
identifiers and formats. This takes advantage of the expertise put | formats that are already standardized. This takes advantage of the | |||
into creating those formats and improves interoperability. | expertise put into creating those formats and improves | |||
interoperability. | ||||
Often extant claims will not be defined in an encoding or | Often, extant claims will not be defined in an encoding or | |||
serialization format used by EAT. It is preferred to define a CBOR | serialization format used by EAT. It is preferred to define a CBOR | |||
and JSON encoding for them so that EAT implementations do not require | and JSON encoding for them so that EAT implementations do not require | |||
a plethora of encoders and decoders for serialization formats. | a plethora of encoders and decoders for serialization formats. | |||
In some cases, it may be better to use the encoding and serialization | In some cases, it may be better to use the encoding and serialization | |||
as is. For example, signed X.509 certificates and CRLs can be | as is. For example, signed X.509 certificates and Certificate | |||
carried as-is in a byte string. This retains interoperability with | Revocation Lists (CRLs) can be carried as is in a byte string. This | |||
the extensive infrastructure for creating and processing X.509 | retains interoperability with the extensive infrastructure for | |||
certificates and CRLs. | creating and processing X.509 certificates and CRLs. | |||
E.5. Proprietary Claims | E.5. Proprietary Claims | |||
It is not always possible or convenient to achieve the above goals, | It is not always possible or convenient to achieve the above goals, | |||
so the definition and use of proprietary claims is an option. | so the definition and use of proprietary claims is an option. | |||
For example, a device manufacturer may generate a token with | For example, a device manufacturer may generate a token with | |||
proprietary claims intended only for verification by a service | proprietary claims intended only for verification by a service | |||
offered by that device manufacturer. This is a supported use case. | offered by that device manufacturer. This is a supported use case. | |||
In many cases proprietary claims will be the easiest and most obvious | In many cases, proprietary claims will be the easiest and most | |||
way to proceed, however for better interoperability, use of general | obvious way to proceed; however, for better interoperability, use of | |||
standardized claims is preferred. | general standardized claims is preferred. | |||
Appendix F. Endorsements and Verification Keys | Appendix F. Endorsements and Verification Keys | |||
The verifier must possess the correct key when it performs the | The verifier must possess the correct key when it performs the | |||
cryptographic part of an EAT verification (e.g., verifying the COSE/ | cryptographic part of an EAT verification (e.g., verifying the COSE/ | |||
JOSE signature). This section describes several ways to identify the | JOSE signature). This section describes several ways to identify the | |||
verification key. There is not one standard method. | verification key. There is not one standard method. | |||
The verification key itself may be a public key, a symmetric key or | The verification key itself may be a public key, a symmetric key, or | |||
something complicated in the case of a scheme like Direct Anonymous | something complicated in the case of a scheme such as Direct | |||
Attestation (DAA). | Anonymous Attestation (DAA). | |||
RATS Architecture [RFC9334] describes what is called an endorsement. | RATS Architecture [RFC9334] describes what is called an endorsement. | |||
This is an input to the verifier that is usually the basis of the | This is an input to the verifier that is usually the basis of the | |||
trust placed in an EAT and the attester that generated it. It may | trust placed in an EAT and the attester that generated it. It may | |||
contain the public key for verification of the signature on the EAT. | contain the public key for verification of the signature on the EAT, | |||
It may contain implied claims, those that are passed on to the | and it may contain implied claims, i.e., those that are passed on to | |||
relying party in attestation results. | the relying party in attestation results. | |||
There is not yet any standard format(s) for an endorsement. One | There is not yet any standard format(s) for an endorsement. One | |||
format that may be used for an endorsement is an X.509 certificate. | format that may be used for an endorsement is an X.509 certificate. | |||
Endorsement data like reference values and implied claims can be | Endorsement data such as reference values and implied claims can be | |||
carried in X.509 v3 extensions. In this use, the public key in the | carried in X.509 v3 extensions. In this use, the public key in the | |||
X.509 certificate becomes the verification key, so identification of | X.509 certificate becomes the verification key, so identification of | |||
the endorsement is also identification of the verification key. | the endorsement is also identification of the verification key. | |||
The verification key identification and establishment of trust in the | The verification key identification and establishment of trust in the | |||
EAT and the attester may also be by some other means than an | EAT and the attester may also be by some other means than an | |||
endorsement. | endorsement. | |||
For the components (attester, verifier, relying party,...) of a | For the components (attester, verifier, relying party, etc.) of a | |||
particular end-to-end attestation system to reliably interoperate, | particular end-to-end attestation system to reliably interoperate, | |||
its definition should specify how the verification key is identified. | its definition should specify how the verification key is identified. | |||
Usually, this will be in the profile document for a particular | Usually, this will be in the profile document for a particular | |||
attestation system. | attestation system. | |||
See also security consideration in Section 9.6. | See also the security considerations in Section 9.6. | |||
F.1. Identification Methods | F.1. Identification Methods | |||
Following is a list of possible methods of key identification. A | Following is a list of possible methods of key identification. A | |||
specific attestation system may employ any one of these or one not | specific attestation system may employ any one of these or one not | |||
listed here. | listed here. | |||
The following assumes endorsements are X.509 certificates or | The following assumes endorsements are X.509 certificates or | |||
equivalent and thus does not mention or define any identifier for | equivalent and thus does not mention or define any identifier for | |||
endorsements in other formats. If such an endorsement format is | endorsements in other formats. If such an endorsement format is | |||
created, new identifiers for them will also need to be created. | created, new identifiers for them will also need to be created. | |||
F.1.1. COSE/JWS Key ID | F.1.1. COSE/JWS Key ID | |||
The COSE standard header parameter for Key ID (kid) may be used. See | The COSE standard header parameter for Key ID (kid) may be used; see | |||
[RFC9052] and [RFC7515] | [RFC9052] and [RFC7515]. | |||
COSE leaves the semantics of the key ID open-ended. It could be a | COSE leaves the semantics of the key ID open-ended. It could be a | |||
record locator in a database, a hash of a public key, an input to a | record locator in a database, a hash of a public key, an input to a | |||
Key Derivation Function (KDF), an Authority Key Identifier (AKI) for | Key Derivation Function (KDF), an Authority Key Identifier (AKI) for | |||
an X.509 certificate or other. The profile document should specify | an X.509 certificate, or other. The profile document should specify | |||
what the key ID's semantics are. | what the key ID's semantics are. | |||
F.1.2. JWS and COSE X.509 Header Parameters | F.1.2. JWS and COSE X.509 Header Parameters | |||
COSE X.509 [COSE.X509.Draft] and JSON Web Signature [RFC7515] define | COSE X.509 [RFC9360] and JSON Web Signature [RFC7515] define several | |||
several header parameters (x5t, x5u,...) for referencing or carrying | header parameters (x5t, x5u,...) for referencing or carrying X.509 | |||
X.509 certificates any of which may be used. | certificates, any of which may be used. | |||
The X.509 certificate may be an endorsement and thus carrying | The X.509 certificate may be an endorsement and thus carrying | |||
additional input to the verifier. It may be just an X.509 | additional input to the verifier. It may be just an X.509 | |||
certificate, not an endorsement. The same header parameters are used | certificate, not an endorsement. The same header parameters are used | |||
in both cases. It is up to the attestation system design and the | in both cases, and it is up to the attestation system design and the | |||
verifier to determine which. | verifier to determine which. | |||
F.1.3. CBOR Certificate COSE Header Parameters | F.1.3. CBOR Certificate COSE Header Parameters | |||
Compressed X.509 and CBOR Native certificates are defined by CBOR | Compressed X.509 and CBOR Native certificates are defined by CBOR | |||
Certificates [CBOR.Cert.Draft]. These are semantically compatible | Certificates [CBOR.Certs]. These are semantically compatible with | |||
with X.509 and therefore can be used as an equivalent to X.509 as | X.509 and therefore can be used as an equivalent to X.509 as | |||
described above. | described above. | |||
These are identified by their own header parameters (c5t, c5u,...). | These are identified by their own header parameters (c5t, c5u, etc.). | |||
F.1.4. Claim-Based Key Identification | F.1.4. Claim-Based Key Identification | |||
For some attestation systems, a claim may be re-used as a key | For some attestation systems, a claim may be reused as a key | |||
identifier. For example, the UEID uniquely identifies the entity and | identifier. For example, the UEID uniquely identifies the entity and | |||
therefore can work well as a key identifier or endorsement | therefore can work well as a key identifier or endorsement | |||
identifier. | identifier. | |||
This has the advantage that key identification requires no additional | An advantage of this is that key identification requires no | |||
bytes in the EAT and makes the EAT smaller. | additional bytes in the EAT and makes the EAT smaller. | |||
This has the disadvantage that the unverified EAT must be | A disadvantage of this is that the unverified EAT must be | |||
substantially decoded to obtain the identifier since the identifier | substantially decoded to obtain the identifier since the identifier | |||
is in the COSE/JOSE payload, not in the headers. | is in the COSE/JOSE payload, not in the headers. | |||
Appendix G. Changes from Previous Drafts | ||||
// RFC editor: please remove this paragraph. | ||||
The following is a list of known changes since the immediately | ||||
previous drafts. This list is non-authoritative. It is meant to | ||||
help reviewers see the significant differences. A comprehensive | ||||
history is available via the IETF Datatracker's record for this | ||||
document. | ||||
G.1. From draft-ietf-rats-eat-30 | ||||
* Minor typo fixes | ||||
Contributors | Contributors | |||
Many thanks to the following contributors to draft versions of this | Many thanks to the following for their contributions to earlier draft | |||
document: | versions of this document: | |||
Henk Birkholz | Henk Birkholz | |||
Fraunhofer SIT | Fraunhofer SIT | |||
Email: henk.birkholz@sit.fraunhofer.de | Email: henk.birkholz@sit.fraunhofer.de | |||
Thomas Fossati | Thomas Fossati | |||
Arm Limited | Arm Limited | |||
Email: thomas.fossati@arm.com | Email: thomas.fossati@arm.com | |||
Miguel Ballesteros | Miguel Ballesteros | |||
End of changes. 448 change blocks. | ||||
1427 lines changed or deleted | 1326 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |