| 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 | |||
| 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 | April 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 (Semipermanent UEIDs) Claim | |||
| 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) Claim | |||
| 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]. | |||
| Layered attestation and composite devices, as described in [RFC9334], | Layered attestation and composite devices, as described in [RFC9334], | |||
| are supported by a submodule mechanism (see Section 4.2.18). | are supported by a submodule mechanism (see Section 4.2.18). | |||
| 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 that is used for defining attestation tokens for | |||
| cases, not a specific token definition. While EAT is based on and | specific use cases; it is not used for specific token definition. | |||
| compatible with CWT and JWT, it can also be described as: | While EAT is based on and 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, this document introduces the notion of an EAT profile that | |||
| the creation of narrowed definitions of EATs for specific use cases | facilitates the creation of narrowed definitions of EATs for specific | |||
| in follow-on documents. One basic profile for constrained devices is | use cases in subsequent documents. One basic profile for constrained | |||
| normatively defined. | devices 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 Remote Attestation Procedure. | |||
| The relying party uses the attestation results as needed for its use | The relying party uses the attestation results as needed for its use | |||
| case, perhaps allowing an entity to access a network, allowing a | case, perhaps allowing an entity to access a network, a financial | |||
| financial transaction or such. In some cases, the verifier and | transaction, or such. In some cases, the verifier and relying party | |||
| relying party are not distinct entities. | 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 463 ¶ | |||
| 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 encoding: base64 encoding using the URL- and filename-safe | |||
| i.e., using URL- and filename-safe character set [RFC4648] with | character set defined in Section 5 of [RFC4648], with all trailing | |||
| all trailing '=' characters omitted and without the inclusion of | '=' characters omitted and without the inclusion of any line | |||
| any line breaks, whitespace, or other additional characters. | breaks, whitespace, or other additional characters [RFC7515]. | |||
| 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]; | |||
| note that EAT does not capitalize RATS terms like "evidence" for | ||||
| easier readability: | ||||
| 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 performed by an entity that depends on the | |||
| about an attester, for purposes of reliably applying application | validity of information about an attester for purposes of reliably | |||
| specific actions. Compare /relying party/ in [RFC4949]. | applying application-specific actions. Compare: relying party | |||
| [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, | These terms typically assume comparison for equality, whereas | |||
| whereas here reference values might be more general and be used in | here, reference values might be more general and be used in any | |||
| any sort of comparison. | 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 $CBOR-Tagged-Token, $EAT- | |||
| $EAT-CBOR-Untagged-Token and $EAT-JSON-Token-Formats sockets (see | 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 = $CBOR-Tagged-Token / $EAT-CBOR-Untagged-Token | |||
| $EAT-CBOR-Tagged-Token /= CWT-Tagged-Message | $CBOR-Tagged-Token /= CWT-Tagged-Message | |||
| $EAT-CBOR-Tagged-Token /= BUNDLE-Tagged-Message | $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 provides a CDDL definition for most of the | |||
| defined in [RFC8392]. Similarly, this specification includes CDDL | elements defined in [RFC7519] and [RFC8392]. These definitions are | |||
| for most of what is defined in [RFC7519]. These definitions are in | 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 | In JSON, an EAT nonce is either a text string or an array of text | |||
| text strings. The array option supports multistage EAT verification | strings. In CBOR, an EAT nonce is either a byte string or an array | |||
| and consumption. | of byte strings. The array option supports multistage EAT | |||
| verification 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 669 ¶ | |||
| 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 | | |||
| | | | may be constructed by concatenating enough | | | | | be constructed by concatenating enough identifiers | | |||
| | | | identifiers to make up an equivalent number of | | | | | to make up an equivalent number of random bits and | | |||
| | | | random bits and then feeding the concatenation | | | | | then feeding the concatenation through a | | |||
| | | | through a cryptographic hash function. It may | | | | | cryptographic hash function. It may also be a | | |||
| | | | also be a cryptographic quality random number | | | | | cryptographic quality random number generated once | | |||
| | | | generated once at the beginning of the life of | | | | | at the beginning of the life of the entity and | | |||
| | | | the entity and stored. It MUST NOT be smaller | | | | | stored. It MUST NOT be smaller than 128 bits. | | |||
| | | | than 128 bits. See the length analysis in | | | | | See the length analysis in Appendix B. | | |||
| | | | Appendix B. | | +------+------+----------------------------------------------------+ | |||
| +------+------+-----------------------------------------------------+ | | 0x02 | IEEE | This makes use of the device identification scheme | | |||
| | 0x02 | IEEE | This makes use of the device identification | | | | EUI | operated by the IEEE. An Extended Unique | | |||
| | | EUI | scheme operated by the IEEE. An EUI is either | | | | | Identifier (EUI) can be an EUI-48, EUI-60, or | | |||
| | | | an EUI-48, EUI-60 or EUI-64 and made up of an | | | | | EUI-64 and consists of two parts. The first part | | |||
| | | | OUI, OUI-36 or a CID, different registered | | | | | is a registered company identifier, an | | |||
| | | | company identifiers, and some unique per-entity | | | | | Organizationally Unique Identifier (OUI), an OUI- | | |||
| | | | identifier. EUIs are often the same as or | | | | | 36, or a Company ID (CID). The second part | | |||
| | | | similar to MAC addresses. This type includes | | | | | ensures uniqueness within the registered company. | | |||
| | | | MAC-48, an obsolete name for EUI-48. (Note that | | | | | EUIs are often the same as or similar to MAC | | |||
| | | | while entities with multiple network interfaces | | | | | addresses. This type includes MAC-48, an obsolete | | |||
| | | | may have multiple MAC addresses, there is only | | | | | name for EUI-48. (Note that while entities with | | |||
| | | | one UEID for an entity; changeable MAC addresses | | | | | multiple network interfaces may have multiple MAC | | |||
| | | | that do not meet the permanence requirements in | | | | | addresses, there is only one UEID for an entity; | | |||
| | | | this document MUST NOT be used for the UEID or | | | | | changeable MAC addresses that do not meet the | | |||
| | | | SUEID) [IEEE.802-2001], [OUI.Guide]. | | | | | permanence requirements in this document MUST NOT | | |||
| +------+------+-----------------------------------------------------+ | | | | be used for the UEID or Semipermanent UEID | | |||
| | 0x03 | IMEI | This makes use of the International Mobile | | | | | (SUEID).) See [IEEE.802-2014] and [OUI.Guide]. | | |||
| | | | Equipment Identity (IMEI) scheme operated by the | | +------+------+----------------------------------------------------+ | |||
| | | | GSMA. This is a 14-digit identifier consisting | | | 0x03 | IMEI | This makes use of the International Mobile | | |||
| | | | of an 8-digit Type Allocation Code (TAC) and a | | | | | Equipment Identity (IMEI) scheme operated by the | | |||
| | | | 6-digit serial number allocated by the | | | | | Global System for Mobile Communications | | |||
| | | | manufacturer, which SHALL be encoded as byte | | | | | Association (GSMA). This is a 14-digit identifier | | |||
| | | | string of length 14 with each byte as the | | | | | consisting of an 8-digit Type Allocation Code | | |||
| | | | digit's value (not the ASCII encoding of the | | | | | (TAC) and a 6-digit serial number allocated by the | | |||
| | | | digit; the digit 3 encodes as 0x03, not 0x33). | | | | | manufacturer, which SHALL be encoded as a byte | | |||
| | | | The IMEI value encoded SHALL NOT include Luhn | | | | | string of length 14 with each byte as the digit's | | |||
| | | | checksum or SVN information. See | | | | | value (not the ASCII encoding of the digit; the | | |||
| | | | [ThreeGPP.IMEI]. | | | | | digit 3 encodes as 0x03, not 0x33). The IMEI | | |||
| +------+------+-----------------------------------------------------+ | | | | encoded value SHALL NOT include the Luhn checksum | | |||
| | | | or Software Version Number (SVN) information. See | | ||||
| | | | [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 (Semipermanent UEIDs) Claim | |||
| The "sueids" claim conveys one or more semi-permanent UEIDs (SUEIDs). | The "sueids" claim conveys one or more semipermanent 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 have already | |||
| these. A CID is also a 24-bit value from the same space as an MA-L, | obtained an OEM ID from the IEEE registry. A CID is also a 24-bit | |||
| but not for use as a MAC address. IEEE has published Guidelines for | value from the same space as an MA-L but is not for use as a MAC | |||
| Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup service | address. IEEE has published Guidelines for Use of EUI, OUI, and CID | |||
| [OUI.Lookup]. | [OUI.Guide] and 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-2014]. When this claim is encoded, the order | |||
| format. When this claim is encoded the order of bytes in the bstr | of bytes in the bstr is the same as the order in the "hexadecimal | |||
| are the same as the order in the Hexadecimal Representation. For | representation". For example, an MA-L like "AC-DE-48" would be | |||
| example, an MA-L like "AC-DE-48" would be encoded in 3 bytes with | encoded in 3 bytes with values 0xAC, 0xDE, and 0x48. | |||
| values 0xAC, 0xDE, 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-type | |||
| ) | ) | |||
| oemid-type => 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 975 ¶ | |||
| $$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 1064 ¶ | |||
| 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 1097 ¶ | |||
| 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 1137 ¶ | |||
| 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 'null'. | |||
| point not-a-number). Latitude and longitude MUST be provided. If | Latitude and longitude MUST be provided. If any other of these | |||
| any other of these values are unknown, they are omitted. | 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 satellite in the Global Navigation | |||
| or age data item can be used to quantify the cached period. The | Satellite System (GNSS). Either the timestamp or the age data item | |||
| timestamp data item is preferred as it a non-relative time. If the | can be used to quantify the cached period. The timestamp data item | |||
| entity has no clock or the clock is unset but has a means to measure | is preferred as it is a non-relative time. If the entity has no | |||
| the time interval between the acquisition of the location and the | clock or the clock is unset but has a means to measure the time | |||
| token creation the age may be reported instead. The age is in | interval between the acquisition of the location and the token | |||
| seconds. | creation, the 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, | |||
| ? altitude-accuracy => number, | ? altitude-accuracy => number, | |||
| ? heading => number, | ? heading => number / null, | |||
| ? speed => number, | ? speed => number, | |||
| ? timestamp => ~time-int, | ? timestamp => ~time-int, | |||
| ? age => uint | ? age => uint | |||
| } | } | |||
| latitude = JC< "latitude", 1 > | latitude = JC< "latitude", 1 > | |||
| longitude = JC< "longitude", 2 > | longitude = JC< "longitude", 2 > | |||
| altitude = JC< "altitude", 3 > | altitude = JC< "altitude", 3 > | |||
| accuracy = JC< "accuracy", 4 > | accuracy = JC< "accuracy", 4 > | |||
| altitude-accuracy = JC< "altitude-accuracy", 5 > | altitude-accuracy = JC< "altitude-accuracy", 5 > | |||
| skipping to change at page 26, line 38 ¶ | skipping to change at line 1188 ¶ | |||
| 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 1235 ¶ | |||
| 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) tag, 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 identifier [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 a CoAP Content-Format identifier. The second item is | |||
| item is MUST be the actual manifest. | 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 CoSWID [RFC9393]. When the CoSWID format is | |||
| MUST be an evidence CoSWID, not a payload CoSWID. | used, it 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 format is identified by a | |||
| is by CoAP Content Format, the same as the "manifests" claim in | CoAP Content-Format identifier, which is the same for the "manifests" | |||
| Section 4.2.15. | claim in 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 a success, a failure, not run, or absent. | |||
| 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 success: The comparison to reference values was | |||
| reference values. | successful. | |||
| 2 -- comparison fail: The comparison was completed and did not | 2 -- comparison failure: 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 19 ¶ | skipping to change at line 1437 ¶ | |||
| measurement-results-group = [ | measurement-results-group = [ | |||
| measurement-system: tstr, | measurement-system: tstr, | |||
| measurement-results: [ + individual-result ] | measurement-results: [ + individual-result ] | |||
| ] | ] | |||
| individual-result = [ | individual-result = [ | |||
| result-id: tstr / binary-data, | result-id: tstr / binary-data, | |||
| result: result-type, | result: result-type, | |||
| ] | ] | |||
| result-type = comparison-successful / | result-type = comparison-success / | |||
| comparison-fail / | comparison-fail / | |||
| comparison-not-run / | comparison-not-run / | |||
| measurement-absent | measurement-absent | |||
| comparison-successful = JC< "success", 1 > | comparison-success = 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) Claim | |||
| 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 $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 30 ¶ | skipping to change at line 1539 ¶ | |||
| Submodule = Claims-Set / JSON-Selector | Submodule = Claims-Set / JSON-Selector | |||
| The Detached-Submodule-Digest type is defined as follows: | The Detached-Submodule-Digest type is defined as follows: | |||
| Detached-Submodule-Digest = [ | Detached-Submodule-Digest = [ | |||
| hash-algorithm : text / int, | hash-algorithm : text / int, | |||
| digest : binary-data | digest : binary-data | |||
| ] | ] | |||
| 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 that are standardized in subsequent documents (e.g., | |||
| tokens are the only mechanism by which JSON can be embedded in CBOR | [UCCS]). Nested tokens are the only mechanism by which JSON can be | |||
| and vice versa. | embedded in CBOR and vice versa. | |||
| The addition of further types is accomplished by augmenting the $EAT- | The addition of further types is accomplished by augmenting the | |||
| 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 input to the | |||
| algorithm is directly the CBOR or JSON-encoded Claims-Set for the | digest algorithm is the CBOR or the JSON-encoded Claims-Set for the | |||
| submodule. There is no byte-string wrapping or base 64 encoding. | 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 | string identifier may be used. The hash algorithm identifier is | |||
| never from the JOSE Algorithm registry. | never from any other 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 1670 ¶ | |||
| 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, | |||
| detached-claims-sets: { | detached-claims-sets: { | |||
| + tstr => JC-NEST-SAFE<json-wrapped-claims-set, | + tstr => JC<json-wrapped-claims-set, | |||
| 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, 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 [RFC8392] 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. It may be an Unsecured JWT as described in Section 6 of | |||
| possible to implement no protection, sign only, MAC only, sign then | [RFC7519]. It is possible to implement no protection, sign only, MAC | |||
| encrypt and so on. All combinations allowed by COSE, JOSE, JWT, and | only, sign then encrypt, and so on. All combinations allowed by | |||
| CWT are allowed by EAT. | COSE, JOSE, JWT, and 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) and the | |||
| measurement and "measurements" (Section 4.2.16) claims are examples | "measurements" claim (Section 4.2.16) are examples of this, allowing | |||
| of this, allowing the use of CoSWID and other formats. A profile | the use of CoSWID and other formats. A profile should specify which | |||
| should specify which formats are allowed to be sent, with the | formats are allowed to be sent, with the assumption that the | |||
| assumption that the corresponding CoAP content types have been | corresponding CoAP content types have been registered. A profile | |||
| registered. A profile should require the receiver to accept all | should require the receiver to accept all formats that are allowed to | |||
| formats that are allowed to be sent. | 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. A profile might require | |||
| the receiver to accept all variations that are allowed to be sent. | 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 also | |||
| included here. | specified in this document. | |||
| 7.2. Encoding Data Types | 7.2. Encoding Data Types | |||
| This makes use of the types defined in [RFC8610] Appendix D, Standard | The following subsections use the types defined in "Standard Prelude" | |||
| Prelude. | (Appendix D 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 | |||
| See [EAT-GitHub] for additional information and stub files, when | ||||
| using the CDDL presented in this section to validate EAT protocol | ||||
| messages. | ||||
| 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 is used. Note that the | |||
| uses the CDDL ".feature" control operator defined in [RFC9165]. | JC<> 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 53, line 27 ¶ | skipping to change at line 2407 ¶ | |||
| measurement-results-group = [ | measurement-results-group = [ | |||
| measurement-system: tstr, | measurement-system: tstr, | |||
| measurement-results: [ + individual-result ] | measurement-results: [ + individual-result ] | |||
| ] | ] | |||
| individual-result = [ | individual-result = [ | |||
| result-id: tstr / binary-data, | result-id: tstr / binary-data, | |||
| result: result-type, | result: result-type, | |||
| ] | ] | |||
| result-type = comparison-successful / | result-type = comparison-success / | |||
| comparison-fail / | comparison-fail / | |||
| comparison-not-run / | comparison-not-run / | |||
| measurement-absent | measurement-absent | |||
| comparison-successful = JC< "success", 1 > | comparison-success = 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 > | |||
| Detached-Submodule-Digest = [ | Detached-Submodule-Digest = [ | |||
| hash-algorithm : text / int, | hash-algorithm : text / int, | |||
| digest : binary-data | digest : binary-data | |||
| ] | ] | |||
| 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, | |||
| detached-claims-sets: { | detached-claims-sets: { | |||
| + tstr => JC-NEST-SAFE<json-wrapped-claims-set, | + tstr => JC<json-wrapped-claims-set, | |||
| 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 | |||
| nonce-label = JC< "eat_nonce", 10 > | nonce-label = JC< "eat_nonce", 10 > | |||
| ueid-label = JC< "ueid", 256 > | ueid-label = JC< "ueid", 256 > | |||
| sueids-label = JC< "sueids", 257 > | sueids-label = JC< "sueids", 257 > | |||
| skipping to change at page 55, line 4 ¶ | skipping to change at line 2462 ¶ | |||
| boot-seed-label = JC< "bootseed", 268 > | boot-seed-label = JC< "bootseed", 268 > | |||
| dloas-label = JC< "dloas", 269 > | dloas-label = JC< "dloas", 269 > | |||
| sw-name-label = JC< "swname", 270 > | sw-name-label = JC< "swname", 270 > | |||
| sw-version-label = JC< "swversion", 271 > | sw-version-label = JC< "swversion", 271 > | |||
| manifests-label = JC< "manifests", 272 > | manifests-label = JC< "manifests", 272 > | |||
| measurements-label = JC< "measurements", 273 > | measurements-label = JC< "measurements", 273 > | |||
| measurement-results-label = JC< "measres" , 274 > | measurement-results-label = JC< "measres" , 274 > | |||
| intended-use-label = JC< "intuse", 275 > | intended-use-label = JC< "intuse", 275 > | |||
| 7.3.2. CBOR-Specific CDDL | 7.3.2. CBOR-Specific CDDL | |||
| EAT-CBOR-Token = $EAT-CBOR-Tagged-Token / $EAT-CBOR-Untagged-Token | ||||
| $EAT-CBOR-Tagged-Token /= CWT-Tagged-Message | EAT-CBOR-Token = $CBOR-Tagged-Token / $EAT-CBOR-Untagged-Token | |||
| $EAT-CBOR-Tagged-Token /= BUNDLE-Tagged-Message | ||||
| $CBOR-Tagged-Token /= CWT-Tagged-Message | ||||
| $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 | |||
| 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 $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 | |||
| 7.3.3. JSON-Specific CDDL | 7.3.3. JSON-Specific CDDL | |||
| skipping to change at page 56, line 15 ¶ | skipping to change at line 2520 ¶ | |||
| 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 states that a UEID is permanent and that | |||
| must not change, but it does not say what degree of attack to change | it must not change, but it does not describe any security | |||
| it must be defended. | requirements or a level of defense to prevent an attacker from | |||
| changing the UEID. | ||||
| 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. | |||
| * 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: RFC 9711 | ||||
| * Claim Description: Hardware Version Identifier | Claim Name: UEID | |||
| Claim Description: 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: Semipermanent 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: The 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: 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: The 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 ID | RFC 9711 | | |||
| +---------+-----------------------------+---------------+ | +---------+-----------------------------------+-----------+ | |||
| | sueid | Semi-permanent Universal | This document | | | sueid | Semipermanent Universal Entity ID | 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. Value: 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. Description: This is one or more text paragraphs that | |||
| identify the use in JSON-encoded tokens. | sufficiently define what the intended use means. It may also be | |||
| a reference to another document. | ||||
| Description: This is a text paragraph or more that sufficiently | 3. Reference: This field contains a reference to the defining | |||
| defines what the intended use means. It may also be a reference | specification. | |||
| 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, "Private Enterprise Numbers (PENs)", | |||
| <https://pen.iana.org/pen/PenApplication.page>. | <https://www.iana.org/assignments/enterprise-numbers/>. | |||
| [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, | |||
| <https://www.rfc-editor.org/info/rfc3986>. | <https://www.rfc-editor.org/info/rfc3986>. | |||
| [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 3148 ¶ | |||
| 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 | [W3C.GeoLoc] | |||
| GEODETIC SYSTEM 1984, NGA.STND.0036_1.0.0_WGS84", 8 July | Cáceres, M. and R. Grant, "Geolocation", W3C | |||
| 2014, <https://earth-info.nga.mil/php/ | Recommendation, September 2024, | |||
| download.php?file=coord-wgs84>. | <https://www.w3.org/TR/geolocation/>. | |||
| [WGS84] National Geospatial-Intelligence Agency (NGA), "Department | ||||
| of Defense World Geodetic System 1984: Its Definition and | ||||
| Relationships with Local Geodetic Systems", | ||||
| 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-13, 3 March 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-13>. | |||
| [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] | [EAT-GitHub] | |||
| Schaad, J., "CBOR Object Signing and Encryption (COSE): | "Entity Attestation Token IETF Draft Standard", commit | |||
| Header Parameters for Carrying and Referencing X.509 | 62c726b, January 2024, | |||
| Certificates", Work in Progress, Internet-Draft, draft- | <https://github.com/ietf-rats-wg/eat>. | |||
| 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-2014] | |||
| "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>. | ||||
| [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] | ||||
| Popescu, A., Ed., "Geolocation API Specification", W3C | ||||
| REC REC-geolocation-API-20131024, W3C REC-geolocation-API- | ||||
| 20131024, 24 October 2013, <https://www.w3.org/TR/2013/ | ||||
| REC-geolocation-API-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 3316 ¶ | |||
| / } / | / } / | |||
| 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 3344 ¶ | |||
| } | } | |||
| ], | ], | |||
| / 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 3391 ¶ | |||
| }, | }, | |||
| / 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). The entire encoded token is 47 bytes, 8 of / | |||
| / which are the nonce and 16 of which are the 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 79, line 17 ¶ | skipping to change at line 3453 ¶ | |||
| / with the following data / | / with the following data / | |||
| / SW Name: "Carbonite" / | / SW Name: "Carbonite" / | |||
| / SW Vers: "1.2" / | / SW Vers: "1.2" / | |||
| / SW Creator: / | / SW Creator: / | |||
| / "Industrial Automation" / | / "Industrial Automation" / | |||
| ], | ], | |||
| / exp / 4: 1634324274, / 2021-10-15T18:57:54Z / | / exp / 4: 1634324274, / 2021-10-15T18:57:54Z / | |||
| / iat / 6: 1634317080, / 2021-10-15T16:58:00Z / | / iat / 6: 1634317080, / 2021-10-15T16:58:00Z / | |||
| -80000 : "fingerprint", | -80000 : "fingerprint", | |||
| -80001 : { / The key -- A COSE_Key / | -80001 : { / The key -- A COSE_Key / | |||
| / kty / 1: 2, / EC2, eliptic curve with x & y / | / kty / 1: 2, / EC2, elliptic curve with x & y/ | |||
| / kid / 2: h'36675c206f96236c3f51f54637b94ced', | / kid / 2: h'36675c206f96236c3f51f54637b94ced', | |||
| / curve / -1: 2, / curve is P-256 / | / curve / -1: 2, / curve is P-256 / | |||
| / x-coord / -2: h'65eda5a12577c2bae829437fe338701a | / x-coord / -2: h'65eda5a12577c2bae829437fe338701a | |||
| 10aaa375e1bb5b5de108de439c08551d', | 10aaa375e1bb5b5de108de439c08551d', | |||
| / y-coord / -3: h'1e52ed75701163f7f9e40ddf9f341b3d | / y-coord / -3: h'1e52ed75701163f7f9e40ddf9f341b3d | |||
| c9ba860af7e0ca7ca7e9eecd0084d19c' | c9ba860af7e0ca7ca7e9eecd0084d19c' | |||
| }, | }, | |||
| / submods / 266 : { | / submods / 266 : { | |||
| "HLOS" : { / submod for high-level OS / | "HLOS" : { / submod for high-level OS / | |||
| skipping to change at page 80, line 8 ¶ | skipping to change at line 3490 ¶ | |||
| / 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 3513 ¶ | |||
| / 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 3539 ¶ | |||
| 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 3588 ¶ | |||
| { | { | |||
| / ...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 3629 ¶ | |||
| [ | [ | |||
| [ | [ | |||
| "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]. | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | ||||
| { | { | |||
| "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 3668 ¶ | |||
| 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 in Appendix A.1.3 of / | |||
| / visible is that of the COSE_Sign1. / | / RFC 9711. The main structure that is visible 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 example in Appendix A.1.1. | |||
| digests its Claims-Set and feeds that digest to the HW block. | The TEE 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 part of the detached EAT bundle. / | |||
| / 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, / | |||
| / h'8DEF652F47000710D9F466A4C666E209 / | / h'ab86f765643aabfd09c84eebe150b7f6 / | |||
| / DD74F927A1CEA352B03143E188838ABE' / | / 1bc24804cee75e90c5f99cb850fe808f' / | |||
| / ] / | / ] / | |||
| / } / | / } / | |||
| / } / | / } / | |||
| 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. / | |||
| / contains claims suitable for a TEE. / | / It contains claims for a simple TEE attestation. / | |||
| "TEE" : h'a40a48948f8860d13a463e190106f519010702 | "TEE" : h'a40a5048df7b172d70b5a18935d0460a73dd7119 | |||
| 190111818218795858a60064336132340c0101 | 0106f51901070219011081821901025858a60064 | |||
| 6b41636d6520544545204f530d65332e312e34 | 336132340c01016b41636d6520544545204f530d | |||
| 0282a2181f6b41636d6520544545204f531821 | 65332e312e340282a2181f6b41636d6520544545 | |||
| 01a2181f6b41636d6520544545204f53182102 | 204f53182101a2181f6b41636d6520544545204f | |||
| 06a111a118186e61636d655f7465655f332e65 | 5318210206a111a118186e61636d655f7465655f | |||
| 7865' | 332e657865' | |||
| } | } | |||
| ]) | ]) | |||
| / 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. It is also an example of a token from an attestation / | |||
| / attestation HW block. / | / hardware 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'ab86f765643aabfd09c8 | |||
| 2dd58d43dae178e55fe2 | 4eebe150b7f61bc24804 | |||
| b94291a9291082ffc263 | cee75e90c5f99cb850fe | |||
| 5a0b' | 808f' | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| 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]. | |||
| =============== NOTE: '\' line wrapping per RFC 8792 ================ | ||||
| [ | [ | |||
| [ | [ | |||
| "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 3813 ¶ | |||
| ] | ] | |||
| 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 3898 ¶ | |||
| 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. The design philosophy | |||
| construction is no longer needed, in particular because | underlying UEID assumes that this construction is no longer needed, | |||
| cryptographic-quality random number generators are readily available. | in particular because cryptographic-quality random number generators | |||
| It takes the view that hardware, software and/or manufacturing | are readily available. Therefore, hardware, software, and/or | |||
| process implement UEID in a simple and direct way. | manufacturing processes can 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 by embedding them in a | |||
| manufacturer of the device into a certificate. That certificate is | certificate and signing it. The certificate is created once during | |||
| created once during the manufacturing of the device and never changes | manufacturing and remains unchanged. | |||
| 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 13 ¶ | skipping to change at line 4079 ¶ | |||
| events. | events. | |||
| [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 | For EAT, permanence is not defined in terms of resistance to attacks. | |||
| attack. EAT's definition of permanence is in terms of operations and | Instead, it is defined in the context of operational functionality | |||
| device lifecycle. | and the 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. See also [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 35 ¶ | skipping to change at line 4129 ¶ | |||
| exp-claim-label = JC<"exp", 4> | exp-claim-label = JC<"exp", 4> | |||
| nbf-claim-label = JC<"nbf", 5> | nbf-claim-label = JC<"nbf", 5> | |||
| iat-claim-label = JC<"iat", 6> | iat-claim-label = JC<"iat", 6> | |||
| cti-claim-label = CBOR-ONLY<7> ; jti in JWT: different name and text | cti-claim-label = CBOR-ONLY<7> ; jti in JWT: different name and text | |||
| 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 | ; A JWT message is either a JSON Web Signature (JWS) or a JSON Web | |||
| ; problems. Perhaps this is the nesting problem described in RFC | ; Encryption (JWE) in compact serialization form with the payload | |||
| ; 8610. | ; as a Claims-Set. Compact serialization is the protected headers, | |||
| JC-NEST-SAFE<J,C> = J .feature "json" / C .feature "cbor" | ; payload, and signature that are each b64url-encoded and separated | |||
| ; by a ".". This CDDL simply matches the top-level syntax of a JWS | ||||
| ; A JWT message is either a JWS or JWE in compact serialization form | ; or JWE as it is not possible to do more in CDDL. | |||
| ; with the payload a Claims-Set. Compact serialization is the | ||||
| ; protected headers, payload and signature, each b64url encoded and | ||||
| ; separated by a ".". This CDDL simply matches top-level syntax of of | ||||
| ; a JWS or JWE since 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 the CDDL description | |||
| ; definition is common to CBOR and JSON. | ; of claims-set. That 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 RATS 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. | |||
| The boot and debug state claims in this document are an example of a | The boot and debug state claims in this document are an example of a | |||
| 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 cases. 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 | |||
| skipping to change at page 101, line 25 ¶ | skipping to change at line 4377 ¶ | |||
| Paul Crowley | Paul Crowley | |||
| Authors' Addresses | Authors' Addresses | |||
| Laurence Lundblade | Laurence Lundblade | |||
| Security Theory LLC | Security Theory LLC | |||
| Email: lgl@securitytheory.com | Email: lgl@securitytheory.com | |||
| Giridhar Mandyam | Giridhar Mandyam | |||
| Mediatek USA | ||||
| Email: giridhar.mandyam@gmail.com | Email: giridhar.mandyam@gmail.com | |||
| Jeremy O'Donoghue | Jeremy O'Donoghue | |||
| Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
| 279 Farnborough Road | 279 Farnborough Road | |||
| Farnborough | Farnborough | |||
| GU14 7LS | GU14 7LS | |||
| United Kingdom | United Kingdom | |||
| Phone: +44 1252 363189 | Phone: +44 1252 363189 | |||
| Email: jodonogh@qti.qualcomm.com | Email: jodonogh@qti.qualcomm.com | |||
| End of changes. 479 change blocks. | ||||
| 1556 lines changed or deleted | 1455 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||