draft-ietf-rats-eat-10.txt | draft-ietf-rats-eat-11.txt | |||
---|---|---|---|---|
RATS Working Group G. Mandyam | RATS Working Group L. Lundblade | |||
Internet-Draft Qualcomm Technologies Inc. | Internet-Draft Security Theory LLC | |||
Intended status: Standards Track L. Lundblade | Intended status: Standards Track G. Mandyam | |||
Expires: December 9, 2021 Security Theory LLC | Expires: April 26, 2022 J. O'Donoghue | |||
M. Ballesteros | ||||
J. O'Donoghue | ||||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
June 07, 2021 | October 23, 2021 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-10 | draft-ietf-rats-eat-11 | |||
Abstract | Abstract | |||
An Entity Attestation Token (EAT) provides a signed (attested) set of | An Entity Attestation Token (EAT) provides a signed (attested) set of | |||
claims that describe state and characteristics of an entity, | claims that describe state and characteristics of an entity, | |||
typically a device like a phone or an IoT device. These claims are | typically a device like a phone or an IoT device. These claims are | |||
used by a relying party to determine how much it wishes to trust the | used by a Relying Party to determine how much it wishes to trust the | |||
entity. | entity. | |||
An EAT is either a CWT or JWT with some attestation-oriented claims. | An EAT is either a CWT or JWT with some attestation-oriented claims. | |||
To a large degree, all this document does is extend CWT and JWT. | To a large degree, all this document does is extend CWT and JWT. | |||
Contributing | ||||
TBD | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on December 9, 2021. | This Internet-Draft will expire on April 26, 2022. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2021 IETF Trust and the persons identified as the | Copyright (c) 2021 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.1. CWT, JWT and UCCS . . . . . . . . . . . . . . . . . . . . 6 | 1.1. CWT, JWT, UCCS, UJCS and DEB . . . . . . . . . . . . . . 5 | |||
1.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 1.2. CDDL, CBOR and JSON . . . . . . . . . . . . . . . . . . . 6 | |||
1.3. Entity Overview . . . . . . . . . . . . . . . . . . . . . 6 | 1.3. Operating Model and RATS Architecture . . . . . . . . . . 7 | |||
1.4. Use as Evidence and Attestation Results . . . . . . . . . 7 | 1.3.1. Use as Attestation Evidence . . . . . . . . . . . . . 8 | |||
1.5. EAT Operating Models . . . . . . . . . . . . . . . . . . 7 | 1.3.2. Use as Attestation Results . . . . . . . . . . . . . 8 | |||
1.6. What is Not Standardized . . . . . . . . . . . . . . . . 9 | 1.4. Entity Overview . . . . . . . . . . . . . . . . . . . . . 9 | |||
1.6.1. Transmission Protocol . . . . . . . . . . . . . . . . 9 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
1.6.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 9 | ||||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 10 | ||||
3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 11 | 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 11 | |||
3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 11 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 11 | |||
3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 12 | 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 11 | |||
3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 12 | ||||
3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 12 | 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 12 | |||
3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 15 | 3.5. Semi-permanent UEIDs (SUEIDs) . . . . . . . . . . . . . . 14 | |||
3.5. Semi-permanent UEIDs (SUEIDs) . . . . . . . . . . . . . . 15 | 3.6. Hardware OEM Identification (oemid) . . . . . . . . . . . 15 | |||
3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 16 | 3.6.1. Random Number Based . . . . . . . . . . . . . . . . . 15 | |||
3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 16 | 3.6.2. IEEE Based . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.6.3. IANA Private Enterprise Number . . . . . . . . . . . 16 | ||||
3.7. Hardware Version Claims (hardware-version-claims) . . . . 16 | 3.7. Hardware Version Claims (hardware-version-claims) . . . . 16 | |||
3.8. Software Description and Version . . . . . . . . . . . . 17 | 3.8. Software Name Claim . . . . . . . . . . . . . . . . . . . 17 | |||
3.9. The Security Level Claim (security-level) . . . . . . . . 17 | 3.9. Software Version Claim . . . . . . . . . . . . . . . . . 17 | |||
3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 18 | 3.10. The Security Level Claim (security-level) . . . . . . . . 17 | |||
3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 19 | 3.11. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 19 | |||
3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 19 | 3.12. Debug Status Claim (debug-status) . . . . . . . . . . . . 19 | |||
3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 19 | 3.12.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 20 | |||
3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 20 | 3.12.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 20 | |||
3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 21 | 3.12.3. Disabled Since Boot . . . . . . . . . . . . . . . . 21 | |||
3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 21 | 3.12.4. Disabled Permanently . . . . . . . . . . . . . . . . 21 | |||
3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 21 | 3.12.5. Disabled Fully and Permanently . . . . . . . . . . . 21 | |||
3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 21 | 3.13. Including Keys . . . . . . . . . . . . . . . . . . . . . 21 | |||
3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 21 | 3.14. The Location Claim (location) . . . . . . . . . . . . . . 22 | |||
3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 22 | 3.15. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 23 | |||
3.13. The Location Claim (location) . . . . . . . . . . . . . . 22 | 3.16. The Boot Seed Claim (boot-seed) . . . . . . . . . . . . . 23 | |||
3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 23 | 3.17. The Intended Use Claim (intended-use) . . . . . . . . . . 24 | |||
3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 24 | 3.18. The Profile Claim (profile) . . . . . . . . . . . . . . . 25 | |||
3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 24 | 3.19. The DLOA (Digital Letter or Approval) Claim (dloas) . . . 26 | |||
3.15. The Boot Seed Claim (boot-seed) . . . . . . . . . . . . . 24 | 3.20. The Software Manifests Claim (manifests) . . . . . . . . 27 | |||
3.16. The Intended Use Claim (intended-use) . . . . . . . . . . 24 | 3.21. The Software Evidence Claim (swevidence) . . . . . . . . 28 | |||
3.16.1. intended-use CDDL . . . . . . . . . . . . . . . . . 25 | 3.22. The SW Measurement Results Claim (swresults) . . . . . . 29 | |||
3.17. The Profile Claim (profile) . . . . . . . . . . . . . . . 25 | 3.22.1. Scheme . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
3.18. The Software Manifests Claim (manifests) . . . . . . . . 26 | 3.22.2. Objective . . . . . . . . . . . . . . . . . . . . . 30 | |||
3.19. The Software Evidence Claim {swevidence} . . . . . . . . 27 | 3.22.3. Results . . . . . . . . . . . . . . . . . . . . . . 30 | |||
3.20. The Submodules Part of a Token (submods) . . . . . . . . 28 | 3.22.4. Objective Name . . . . . . . . . . . . . . . . . . . 31 | |||
3.20.1. Two Types of Submodules . . . . . . . . . . . . . . 28 | 3.23. Submodules (submods) . . . . . . . . . . . . . . . . . . 33 | |||
3.20.1.1. Non-token Submodules . . . . . . . . . . . . . . 29 | 3.23.1. Submodule Types . . . . . . . . . . . . . . . . . . 33 | |||
3.20.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 29 | 3.23.1.1. Submodule Claims-Set . . . . . . . . . . . . . . 33 | |||
3.20.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 30 | 3.23.1.2. Nested Token . . . . . . . . . . . . . . . . . . 34 | |||
3.20.2. No Inheritance . . . . . . . . . . . . . . . . . . . 30 | 3.23.1.3. Detached Submodule Digest . . . . . . . . . . . 36 | |||
3.20.3. Security Levels . . . . . . . . . . . . . . . . . . 31 | 3.23.2. No Inheritance . . . . . . . . . . . . . . . . . . . 37 | |||
3.20.4. Submodule Names . . . . . . . . . . . . . . . . . . 31 | 3.23.3. Security Levels . . . . . . . . . . . . . . . . . . 37 | |||
3.20.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 31 | 3.23.4. Submodule Names . . . . . . . . . . . . . . . . . . 37 | |||
4. Endorsements and Verification Keys . . . . . . . . . . . . . 32 | 3.23.5. CDDL for submods . . . . . . . . . . . . . . . . . . 38 | |||
4.1. Identification Methods . . . . . . . . . . . . . . . . . 33 | 4. Unprotected JWT Claims-Sets . . . . . . . . . . . . . . . . . 38 | |||
4.1.1. COSE/JWS Key ID . . . . . . . . . . . . . . . . . . . 33 | 5. Detached EAT Bundles . . . . . . . . . . . . . . . . . . . . 39 | |||
4.1.2. JWS and COSE X.509 Header Parameters . . . . . . . . 34 | 6. Endorsements and Verification Keys . . . . . . . . . . . . . 40 | |||
4.1.3. CBOR Certificate COSE Header Parameters . . . . . . . 34 | 6.1. Identification Methods . . . . . . . . . . . . . . . . . 41 | |||
4.1.4. Claim-Based Key Identification . . . . . . . . . . . 34 | 6.1.1. COSE/JWS Key ID . . . . . . . . . . . . . . . . . . . 41 | |||
4.2. Other Considerations . . . . . . . . . . . . . . . . . . 34 | 6.1.2. JWS and COSE X.509 Header Parameters . . . . . . . . 41 | |||
5. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 35 | 6.1.3. CBOR Certificate COSE Header Parameters . . . . . . . 42 | |||
5.1. Format of a Profile Document . . . . . . . . . . . . . . 35 | 6.1.4. Claim-Based Key Identification . . . . . . . . . . . 42 | |||
5.2. List of Profile Issues . . . . . . . . . . . . . . . . . 35 | 6.2. Other Considerations . . . . . . . . . . . . . . . . . . 42 | |||
5.2.1. Use of JSON, CBOR or both . . . . . . . . . . . . . . 35 | 7. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 42 | |||
5.2.2. CBOR Map and Array Encoding . . . . . . . . . . . . . 35 | 7.1. Format of a Profile Document . . . . . . . . . . . . . . 43 | |||
5.2.3. CBOR String Encoding . . . . . . . . . . . . . . . . 36 | 7.2. List of Profile Issues . . . . . . . . . . . . . . . . . 43 | |||
5.2.4. CBOR Preferred Serialization . . . . . . . . . . . . 36 | 7.2.1. Use of JSON, CBOR or both . . . . . . . . . . . . . . 43 | |||
5.2.5. COSE/JOSE Protection . . . . . . . . . . . . . . . . 36 | 7.2.2. CBOR Map and Array Encoding . . . . . . . . . . . . . 43 | |||
5.2.6. COSE/JOSE Algorithms . . . . . . . . . . . . . . . . 36 | 7.2.3. CBOR String Encoding . . . . . . . . . . . . . . . . 44 | |||
5.2.7. Verification Key Identification . . . . . . . . . . . 37 | 7.2.4. CBOR Preferred Serialization . . . . . . . . . . . . 44 | |||
5.2.8. Endorsement Identification . . . . . . . . . . . . . 37 | 7.2.5. COSE/JOSE Protection . . . . . . . . . . . . . . . . 44 | |||
5.2.9. Freshness . . . . . . . . . . . . . . . . . . . . . . 37 | 7.2.6. COSE/JOSE Algorithms . . . . . . . . . . . . . . . . 44 | |||
5.2.10. Required Claims . . . . . . . . . . . . . . . . . . . 37 | 7.2.7. DEB Support . . . . . . . . . . . . . . . . . . . . . 44 | |||
5.2.11. Prohibited Claims . . . . . . . . . . . . . . . . . . 37 | 7.2.8. Verification Key Identification . . . . . . . . . . . 45 | |||
5.2.12. Additional Claims . . . . . . . . . . . . . . . . . . 37 | 7.2.9. Endorsement Identification . . . . . . . . . . . . . 45 | |||
5.2.13. Refined Claim Definition . . . . . . . . . . . . . . 37 | 7.2.10. Freshness . . . . . . . . . . . . . . . . . . . . . . 45 | |||
5.2.14. CBOR Tags . . . . . . . . . . . . . . . . . . . . . . 38 | 7.2.11. Required Claims . . . . . . . . . . . . . . . . . . . 45 | |||
5.2.15. Manifests and Software Evidence Claims . . . . . . . 38 | 7.2.12. Prohibited Claims . . . . . . . . . . . . . . . . . . 45 | |||
6. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 38 | 7.2.13. Additional Claims . . . . . . . . . . . . . . . . . . 45 | |||
6.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 38 | 7.2.14. Refined Claim Definition . . . . . . . . . . . . . . 45 | |||
6.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 38 | 7.2.15. CBOR Tags . . . . . . . . . . . . . . . . . . . . . . 46 | |||
6.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 39 | 7.2.16. Manifests and Software Evidence Claims . . . . . . . 46 | |||
6.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 39 | 8. Encoding and Collected CDDL . . . . . . . . . . . . . . . . . 46 | |||
6.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 40 | 8.1. Claims-Set and CDDL for CWT and JWT . . . . . . . . . . . 46 | |||
6.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 41 | 8.2. Encoding Data Types . . . . . . . . . . . . . . . . . . . 47 | |||
6.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 41 | 8.2.1. Common Data Types . . . . . . . . . . . . . . . . . . 47 | |||
6.4.1.1. EAT Constrained Device Serialization . . . . . . 41 | 8.2.2. JSON Interoperability . . . . . . . . . . . . . . . . 47 | |||
6.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 42 | 8.2.3. Labels . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 8.3. CBOR Interoperability . . . . . . . . . . . . . . . . . . 48 | |||
7.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 47 | 8.3.1. EAT Constrained Device Serialization . . . . . . . . 48 | |||
7.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 48 | ||||
7.2.1. Interoperability and Relying Party Orientation . . . 48 | 8.4. Collected Common CDDL . . . . . . . . . . . . . . . . . . 49 | |||
7.2.2. Operating System and Technology Neutral . . . . . . . 48 | 8.5. Collected CDDL for CBOR . . . . . . . . . . . . . . . . . 55 | |||
7.2.3. Security Level Neutral . . . . . . . . . . . . . . . 49 | 8.6. Collected CDDL for JSON . . . . . . . . . . . . . . . . . 57 | |||
7.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 49 | 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 59 | |||
7.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 49 | 9.1. Reuse of CBOR and JSON Web Token (CWT and JWT) Claims | |||
7.3. Claims Registered by This Document . . . . . . . . . . . 49 | Registries . . . . . . . . . . . . . . . . . . . . . . . 59 | |||
7.3.1. Claims for Early Assignment . . . . . . . . . . . . . 50 | 9.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 59 | |||
7.3.2. To be Assigned Claims . . . . . . . . . . . . . . . . 53 | 9.2.1. Interoperability and Relying Party Orientation . . . 59 | |||
7.3.3. Version Schemes Registered by this Document . . . . . 53 | 9.2.2. Operating System and Technology Neutral . . . . . . . 59 | |||
8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 53 | 9.2.3. Security Level Neutral . . . . . . . . . . . . . . . 60 | |||
8.1. UEID and SUEID Privacy Considerations . . . . . . . . . . 53 | 9.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 60 | |||
8.2. Location Privacy Considerations . . . . . . . . . . . . . 54 | 9.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 60 | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 54 | 9.3. Claims Registered by This Document . . . . . . . . . . . 61 | |||
9.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 55 | 9.3.1. Claims for Early Assignment . . . . . . . . . . . . . 61 | |||
9.1.1. Transmission of Key Material . . . . . . . . . . . . 55 | 9.3.2. To be Assigned Claims . . . . . . . . . . . . . . . . 64 | |||
9.2. Transport Security . . . . . . . . . . . . . . . . . . . 55 | 9.3.3. Version Schemes Registered by this Document . . . . . 64 | |||
9.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 56 | 9.3.4. UEID URN Registered by this Document . . . . . . . . 64 | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 56 | 9.3.5. Tag for Detached EAT Bundle . . . . . . . . . . . . . 65 | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 56 | 10. Privacy Considerations . . . . . . . . . . . . . . . . . . . 65 | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 59 | 10.1. UEID and SUEID Privacy Considerations . . . . . . . . . 65 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 61 | 10.2. Location Privacy Considerations . . . . . . . . . . . . 66 | |||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 61 | 11. Security Considerations . . . . . . . . . . . . . . . . . . . 66 | |||
A.2. Example with Submodules, Nesting and Security Levels . . 61 | 11.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 66 | |||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 61 | 11.1.1. Transmission of Key Material . . . . . . . . . . . . 67 | |||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 62 | 11.2. Transport Security . . . . . . . . . . . . . . . . . . . 67 | |||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 64 | 11.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 67 | |||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 68 | ||||
12.1. Normative References . . . . . . . . . . . . . . . . . . 68 | ||||
12.2. Informative References . . . . . . . . . . . . . . . . . 70 | ||||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 73 | ||||
A.1. Simple TEE Attestation . . . . . . . . . . . . . . . . . 73 | ||||
A.2. EAT Produced by Attestation Hardware Block . . . . . . . 74 | ||||
A.3. Detached EAT Bundle . . . . . . . . . . . . . . . . . . . 75 | ||||
A.4. Key / Key Store Attestation . . . . . . . . . . . . . . . 76 | ||||
A.5. SW Measurements of an IoT Device . . . . . . . . . . . . 78 | ||||
A.6. Attestation Results in JSON format . . . . . . . . . . . 81 | ||||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 82 | ||||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 82 | ||||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 84 | ||||
Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity | Appendix C. EAT Relation to IEEE.802.1AR Secure Device Identity | |||
(DevID) . . . . . . . . . . . . . . . . . . . . . . 65 | (DevID) . . . . . . . . . . . . . . . . . . . . . . 85 | |||
C.1. DevID Used With EAT . . . . . . . . . . . . . . . . . . . 65 | C.1. DevID Used With EAT . . . . . . . . . . . . . . . . . . . 85 | |||
C.2. How EAT Provides an Equivalent Secure Device Identity . . 66 | C.2. How EAT Provides an Equivalent Secure Device Identity . . 86 | |||
C.3. An X.509 Format EAT . . . . . . . . . . . . . . . . . . . 66 | C.3. An X.509 Format EAT . . . . . . . . . . . . . . . . . . . 86 | |||
C.4. Device Identifier Permanence . . . . . . . . . . . . . . 67 | C.4. Device Identifier Permanence . . . . . . . . . . . . . . 87 | |||
Appendix D. Changes from Previous Drafts . . . . . . . . . . . . 67 | Appendix D. Changes from Previous Drafts . . . . . . . . . . . . 87 | |||
D.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 67 | D.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 87 | |||
D.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 67 | D.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 87 | |||
D.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 67 | D.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 87 | |||
D.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 68 | D.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 88 | |||
D.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 68 | D.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 88 | |||
D.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 68 | D.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 88 | |||
D.7. From draft-ietf-rats-05 . . . . . . . . . . . . . . . . . 69 | D.7. From draft-ietf-rats-eat-05 . . . . . . . . . . . . . . . 89 | |||
D.8. From draft-ietf-rats-06 . . . . . . . . . . . . . . . . . 69 | D.8. From draft-ietf-rats-eat-06 . . . . . . . . . . . . . . . 89 | |||
D.9. From draft-ietf-rats-07 . . . . . . . . . . . . . . . . . 69 | D.9. From draft-ietf-rats-eat-07 . . . . . . . . . . . . . . . 89 | |||
D.10. From draft-ietf-rats-08 . . . . . . . . . . . . . . . . . 69 | D.10. From draft-ietf-rats-eat-08 . . . . . . . . . . . . . . . 89 | |||
D.11. From draft-ietf-rats-09 . . . . . . . . . . . . . . . . . 69 | D.11. From draft-ietf-rats-eat-09 . . . . . . . . . . . . . . . 89 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 70 | D.12. From draft-ietf-rats-eat-10 . . . . . . . . . . . . . . . 90 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 91 | ||||
1. Introduction | 1. Introduction | |||
Remote device attestation is a fundamental service that allows a | Remote device attestation is a fundamental service that allows a | |||
remote device such as a mobile phone, an Internet-of-Things (IoT) | remote device such as a mobile phone, an Internet-of-Things (IoT) | |||
device, or other endpoint to prove itself to a relying party, a | device, or other endpoint to prove itself to a Relying Party, a | |||
server or a service. This allows the relying party to know some | server or a service. This allows the Relying Party to know some | |||
characteristics about the device and decide whether it trusts the | characteristics about the device and decide whether it trusts the | |||
device. | device. | |||
Remote attestation is a fundamental service that can underlie other | ||||
protocols and services that need to know about the trustworthiness of | ||||
the device before proceeding. One good example is biometric | ||||
authentication where the biometric matching is done on the device. | ||||
The relying party needs to know that the device is one that is known | ||||
to do biometric matching correctly. Another example is content | ||||
protection where the relying party wants to know the device will | ||||
protect the data. This generalizes on to corporate enterprises that | ||||
might want to know that a device is trustworthy before allowing | ||||
corporate data to be accessed by it. | ||||
The notion of attestation here is large and may include, but is not | The notion of attestation here is large and may include, but is not | |||
limited to the following: | limited to the following: | |||
o Proof of the make and model of the device hardware (HW) | o Proof of the make and model of the device hardware (HW) | |||
o Proof of the make and model of the device processor, particularly | o Proof of the make and model of the device processor, particularly | |||
for security-oriented chips | for security-oriented chips | |||
o Measurement of the software (SW) running on the device | o Measurement of the software (SW) running on the device | |||
o Configuration and state of the device | o Configuration and state of the device | |||
o Environmental characteristics of the device such as its GPS | o Environmental characteristics of the device such as its GPS | |||
location | location | |||
1.1. CWT, JWT and UCCS | This document uses the terminology and main operational model defined | |||
in [RATS.Architecture]. In particular it is a format that can be | ||||
used for Attestation Evidence or Attestation Results as defined in | ||||
the RATS architecture. | ||||
For flexibility and ease of imlpementation in a wide variety of | 1.1. CWT, JWT, UCCS, UJCS and DEB | |||
environments, EATs can be either CBOR [RFC8949] or JSON [ECMAScript] | ||||
format. This specification simultaneously describes both formats. | ||||
An EAT is either a CWT as defined in [RFC8392], a UCCS as defined in | An EAT is a set of claims about an entity/device based on one of the | |||
[UCCS.Draft], or a JWT as defined in [RFC7519]. This specification | following: | |||
extends those specifications with additional claims for attestation. | ||||
o CBOR Web Token (CWT), [RFC8392] | ||||
o Unprotected CWT Claims Sets (UCCS), [UCCS.Draft] | ||||
o JSON Web Token (JWT), [RFC7519] | ||||
All definitions, requirements, creation and validation procedures, | ||||
security considerations, IANA registrations and so on from these | ||||
carry over to EAT. | ||||
This specification extends those specifications by defining | ||||
additional claims for attestation. This specification also describes | ||||
the notion of a "profile" that can narrow the definition of an EAT, | ||||
ensure interoperability and fill in details for specific usage | ||||
scenarios. This specification also adds some considerations for | ||||
registration of future EAT-related claims. | ||||
The identification of a protocol element as an EAT, whether CBOR or | The identification of a protocol element as an EAT, whether CBOR or | |||
JSON format, follows the general conventions used by CWT, JWT and | JSON encoded, follows the general conventions used by CWT, JWT and | |||
UCCS. Largely this depends on the protocol carrying the EAT. In | UCCS. Largely this depends on the protocol carrying the EAT. In | |||
some cases it may be by content type (e.g., MIME type). In other | some cases it may be by content type (e.g., MIME type). In other | |||
cases it may be through use of CBOR tags. There is no fixed | cases it may be through use of CBOR tags. There is no fixed | |||
mechanism across all use cases. | mechanism across all use cases. | |||
1.2. CDDL | This specification adds two more top-level messages: | |||
This specification uses CDDL, [RFC8610], as the primary formalism to | ||||
define each claim. The implementor then interprets the CDDL to come | ||||
to either the CBOR [RFC8949] or JSON [ECMAScript] representation. In | ||||
the case of JSON, Appendix E of [RFC8610] is followed. Additional | ||||
rules are given in Section 6.3.2 of this document where Appendix E is | ||||
insufficient. (Note that this is not to define a general means to | ||||
translate between CBOR and JSON, but only to define enough such that | ||||
the claims defined in this document can be rendered unambiguously in | ||||
JSON). | ||||
The CWT specification was authored before CDDL was available and did | ||||
not use it. This specification includes a CDDL definition of most of | ||||
what is described in [RFC8392]. | ||||
1.3. Entity Overview | ||||
An "entity" can be any device or device subassembly ("submodule") | ||||
that can generate its own attestation in the form of an EAT. The | ||||
attestation should be cryptographically verifiable by the EAT | ||||
consumer. An EAT at the device-level can be composed of several | ||||
submodule EAT's. | ||||
Modern devices such as a mobile phone have many different execution | ||||
environments operating with different security levels. For example, | ||||
it is common for a mobile phone to have an "apps" environment that | ||||
runs an operating system (OS) that hosts a plethora of downloadable | ||||
apps. It may also have a TEE (Trusted Execution Environment) that is | ||||
distinct, isolated, and hosts security-oriented functionality like | ||||
biometric authentication. Additionally, it may have an eSE (embedded | ||||
Secure Element) - a high security chip with defenses against HW | ||||
attacks that is used to produce attestations. This device | ||||
attestation format allows the attested data to be tagged at a | ||||
security level from which it originates. In general, any discrete | ||||
execution environment that has an identifiable security level can be | ||||
considered an entity. | ||||
1.4. Use as Evidence and Attestation Results | ||||
Here, normative reference is made to [RATS-Architecture], | o Unprotected JWT Claims Set (UJCS), Section 4 | |||
particularly the definition of Evidence, the Verifier, Attestation | ||||
Results and the Relying Party. Per Figure 1 in [RATS-Architecture], | ||||
Evidence is a protocol message that goes from the Attester to the | ||||
Verifier and Attestation Results a message that goes from the | ||||
Verifier to the Relying Party. EAT is defined such that it can be | ||||
used to represent either Evidence, Attestation Results or both. No | ||||
claims defined here are considered exclusive to or are prohibited in | ||||
either use. It is useful to create EAT profiles as described in | ||||
Section 5 for either use. | ||||
It is useful to characterize the relationship of claims in Evidence | o Detached EAT Bundle (DEB), Section 5 | |||
to those in Attestation Results. | ||||
Many claims in Evidence simply will pass through the Verifier to the | A DEB is simple structure to hold a collection of detached claims- | |||
Relying Party without modification. They will be verified as | sets and the EAT that separately provides integrity and authenticity | |||
authentic from the device by the Verifier just through normal | protection for them. It can be either CBOR or JSON encoded. | |||
verification of the Attester's signature. They will be protected | ||||
from modification when they are conveyed to the Relying Party by | ||||
whatever means is used to protect Attestation Results. (The details | ||||
of that protection are out of scope of this document.) | ||||
Some claims in Evidence will be verified by the Verifier by | 1.2. CDDL, CBOR and JSON | |||
comparison to Reference Values. In this case the claims in Evidence | ||||
will not likely be conveyed to the Relying Party. Instead, some | ||||
claim indicating they were checked may be added to the Attestation | ||||
Results or it may be tacitly known that the Verifier always does this | ||||
check. | ||||
In some cases the Verifier may provide privacy-preserving | An EAT can be encoded in either CBOR or JSON. The definition of each | |||
functionality by stripping or modifying claims that do not posses | claim is such that it can be encoded either. Each token is either | |||
sufficient privacy-preserving characteristics. | entirely CBOR or JSON, with only an exception for nested tokens. | |||
1.5. EAT Operating Models | To implement composite attestation as described in the RATS | |||
architecture document, one token has to be nested inside another. It | ||||
is also possible to construct composite Attestation Results (see | ||||
below) which may be expressed as one token nested inside another. So | ||||
as to not force each end-end attestation system to be all JSON or all | ||||
CBOR, nesting of JSON-encoded tokens in CBOR-encoded tokens and vice | ||||
versa is accommodated by this specification. This is the only place | ||||
that CBOR and JSON can be mixed. | ||||
TODO: Rewrite (or eliminate) this section in light of the RATS | This specification formally uses CDDL, [RFC8610], to define each | |||
architecture draft. | claim. The implementor interprets the CDDL to come to either the | |||
CBOR [RFC8949] or JSON [ECMAScript] representation. In the case of | ||||
JSON, Appendix E of [RFC8610] is followed. Additional rules are | ||||
given in Section 8.2.2 where Appendix E is insufficient. | ||||
At least the following three participants exist in all EAT operating | The CWT and JWT specifications were authored before CDDL was | |||
models. Some operating models have additional participants. | available and did not use CDDL. This specification includes a CDDL | |||
definition of most of what is defined in [RFC8392]. Similarly, this | ||||
specification includes CDDL for most of what is defined in [RFC7519]. | ||||
The Entity. This is the phone, the IoT device, the sensor, the sub- | The UCCS specification does not include CDDL. This specification | |||
assembly or such that the attestation provides information about. | provides CDDL for it. | |||
The Manufacturer. The company that made the entity. This may be a | (TODO: The authors are open to modifications to this specification | |||
chip vendor, a circuit board module vendor or a vendor of finished | and the UCCS specification to include CDDL for UCCS and UJCS there | |||
consumer products. | instead of here.) | |||
The Relying Party. The server, service or company that makes use of | 1.3. Operating Model and RATS Architecture | |||
the information in the EAT about the entity. | ||||
In all operating models, the manufacturer provisions some secret | While it is not required that EAT be used with the RATS operational | |||
attestation key material (AKM) into the entity during manufacturing. | model described in Figure 1 in [RATS.Architecture], or even that it | |||
This might be during the manufacturer of a chip at a fabrication | be used for attestation, this document is authored with an | |||
facility (fab) or during final assembly of a consumer product or any | orientation around that model. | |||
time in between. This attestation key material is used for signing | ||||
EATs. | ||||
In all operating models, hardware and/or software on the entity | To summarize, an Attester on an entity/device generates Attestation | |||
create an EAT of the format described in this document. The EAT is | Evidence. Attestation Evidence is a Claims Set describing various | |||
always signed by the attestation key material provisioned by the | characteristics of the entity/device. Attestation Evidence also is | |||
manufacturer. | usually signed by a key that proves the entity/device and the | |||
evidence it produces are authentic. The Claims Set includes a nonce | ||||
or some other means to provide freshness. EAT is designed to carry | ||||
Attestation Evidence. The Attestation Evidence goes to a Verifier | ||||
where the signature is validated. Some of the Claims may also be | ||||
validated against Reference Values. The Verifier then produces | ||||
Attestation Results which is also usually a Claims Set. EAT is also | ||||
designed to carry Attestation Results. The Attestation Results go to | ||||
the Relying Party which is the ultimate consumer of the "Remote | ||||
Attestaton Procedures", RATS. The Relying Party uses the Attestation | ||||
Results as needed for the use case, perhaps allowing a device on the | ||||
network, allowing a financial transaction or such. | ||||
In all operating models, the relying party must end up knowing that | Note that sometimes the Verifier and Relying Party are not separate | |||
the signature on the EAT is valid and consistent with data from | and thus there is no need for a protocol to carry Attestation | |||
claims in the EAT. This can happen in many different ways. Here are | Results. | |||
some examples. | ||||
o The EAT is transmitted to the relying party. The relying party | 1.3.1. Use as Attestation Evidence | |||
gets corresponding key material (e.g. a root certificate) from the | ||||
manufacturer. The relying party performs the verification. | ||||
o The EAT is transmitted to the relying party. The relying party | Any claim defined in this document or in the IANA CWT or JWT registry | |||
transmits the EAT to a verification service offered by the | may be used in Attestation Evidence. | |||
manufacturer. The server returns the validated claims. | ||||
o The EAT is transmitted directly to a verification service, perhaps | Attestation Evidence nearly always has to be signed or otherwise have | |||
operated by the manufacturer or perhaps by another party. It | authenticity and integrity protection because the Attester is remote | |||
verifies the EAT and makes the validated claims available to the | relative to the Verifier. Usually, this is by using COSE/JOSE | |||
relying party. It may even modify the claims in some way and re- | signing where the signing key is an attestation key provisioned into | |||
sign the EAT (with a different signing key). | the entity/device by its manufacturer. The details of how this is | |||
achieved are beyond this specification, but see Section 6. If there | ||||
is already a suitable secure channel between the Attester and | ||||
Verifier, UCCS may be used. | ||||
All these operating models are supported and there is no preference | 1.3.2. Use as Attestation Results | |||
of one over the other. It is important to support this variety of | ||||
operating models to generally facilitate deployment and to allow for | ||||
some special scenarios. One special scenario has a validation | ||||
service that is monetized, most likely by the manufacturer. In | ||||
another, a privacy proxy service processes the EAT before it is | ||||
transmitted to the relying party. In yet another, symmetric key | ||||
material is used for signing. In this case the manufacturer should | ||||
perform the verification, because any release of the key material | ||||
would enable a participant other than the entity to create valid | ||||
signed EATs. | ||||
1.6. What is Not Standardized | Any claim defined in this document or in the IANA CWT or JWT registry | |||
may be used in Attestation Results. | ||||
The following is not standardized for EAT, just the same they are not | It is useful to characterize the relationship of claims in Evidence | |||
standardized for CWT or JWT. | to those in Attestation Results. | |||
1.6.1. Transmission Protocol | Many claims in Attestation Evidence simply will pass through the | |||
Verifier to the Relying Party without modification. They will be | ||||
verified as authentic from the device by the Verifier just through | ||||
normal verification of the Attester's signature. The UEID, | ||||
Section 3.4, and Location, Section 3.14, are examples of claims that | ||||
may be passed through. | ||||
EATs may be transmitted by any protocol the same as CWTs and JWTs. | Some claims in Attestation Evidence will be verified by the Verifier | |||
For example, they might be added in extension fields of other | by comparison to Reference Values. These claims will not likely be | |||
protocols, bundled into an HTTP header, or just transmitted as files. | conveyed to the Relying Party. Instead, some claim indicating they | |||
This flexibility is intentional to allow broader adoption. This | were checked may be added to the Attestation Results or it may be | |||
flexibility is possible because EAT's are self-secured with signing | tacitly known that the Verifier always does this check. For example, | |||
(and possibly additionally with encryption and anti-replay). The | the Verifier receives the Software Evidence claim, Section 3.21, | |||
transmission protocol is not required to fulfill any additional | compares it to Reference Values and conveys the results to the | |||
security requirements. | Relying Party in a Software Measurement Results Claim, Section 3.22. | |||
For certain devices, a direct connection may not exist between the | In some cases the Verifier may provide privacy-preserving | |||
EAT-producing device and the Relying Party. In such cases, the EAT | functionality by stripping or modifying claims that do not posses | |||
should be protected against malicious access. The use of COSE and | sufficient privacy-preserving characteristics. For example, the data | |||
JOSE allows for signing and encryption of the EAT. Therefore, even | in the Location claim, Section 3.14, may be modified to have a | |||
if the EAT is conveyed through intermediaries between the device and | precision of a few kilometers rather than a few meters. | |||
Relying Party, such intermediaries cannot easily modify the EAT | ||||
payload or alter the signature. | ||||
1.6.2. Signing Scheme | When the Verifier is remote from the Relying Party, the Attestation | |||
Results must be protected for integrity, authenticity and possibly | ||||
confidentiality. Often this will simply be HTTPS as per a normal web | ||||
service, but COSE or JOSE may also be used. The details of this | ||||
protection are beyond the scope of this document. | ||||
The term "signing scheme" is used to refer to the system that | 1.4. Entity Overview | |||
includes end-end process of establishing signing attestation key | ||||
material in the entity, signing the EAT, and verifying it. This | ||||
might involve key IDs and X.509 certificate chains or something | ||||
similar but different. The term "signing algorithm" refers just to | ||||
the algorithm ID in the COSE signing structure. No particular | ||||
signing algorithm or signing scheme is required by this standard. | ||||
There are three main implementation issues driving this. First, | An "entity" can be any device or device subassembly ("submodule") | |||
secure non-volatile storage space in the entity for the attestation | that can generate its own attestation in the form of an EAT. The | |||
key material may be highly limited, perhaps to only a few hundred | attestation should be cryptographically verifiable by the EAT | |||
bits, on some small IoT chips. Second, the factory cost of | consumer. An EAT at the device-level can be composed of several | |||
provisioning key material in each chip or device may be high, with | submodule EAT's. | |||
even millisecond delays adding to the cost of a chip. Third, | ||||
privacy-preserving signing schemes like ECDAA (Elliptic Curve Direct | ||||
Anonymous Attestation) are complex and not suitable for all use | ||||
cases. | ||||
Over time to faciliate interoperability, some signing schemes may be | Modern devices such as a mobile phone have many different execution | |||
defined in EAT profiles or other documents either in the IETF or | environments operating with different security levels. For example, | |||
outside. | it is common for a mobile phone to have an "apps" environment that | |||
runs an operating system (OS) that hosts a plethora of downloadable | ||||
apps. It may also have a TEE (Trusted Execution Environment) that is | ||||
distinct, isolated, and hosts security-oriented functionality like | ||||
biometric authentication. Additionally, it may have an eSE (embedded | ||||
Secure Element) - a high security chip with defenses against HW | ||||
attacks that is used to produce attestations. This device | ||||
attestation format allows the attested data to be tagged at a | ||||
security level from which it originates. In general, any discrete | ||||
execution environment that has an identifiable security level can be | ||||
considered an entity. | ||||
2. Terminology | 2. Terminology | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This document reuses terminology from JWT [RFC7519], COSE [RFC8152], | This document reuses terminology from JWT [RFC7519] and CWT | |||
and CWT [RFC8392]. | [RFC8392]. | |||
Claim Name. The human-readable name used to identify a claim. | Claim: A piece of information asserted about a subject. A claim is | |||
represented as pair with a value and either a name or key to | ||||
identify it. | ||||
Claim Key. The CBOR map key or JSON name used to identify a claim. | Claim Name: A unique text string that identifies the claim. It is | |||
used as the claim name for JSON encoding. | ||||
Claim Value. The value portion of the claim. A claim value can be | Claim Key: The CBOR map key used to identify a claim. | |||
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. | |||
CWT Claims Set. The CBOR map or JSON object that contains the claims | CWT/JWT Claims Set: The CBOR map or JSON object that contains the | |||
conveyed by the CWT or JWT. | claims conveyed by the CWT or JWT. | |||
Attestation Key Material (AKM). The key material used to sign the | This document reuses terminology from RATS Architecure | |||
EAT token. If it is done symmetrically with HMAC, then this is a | [RATS.Architecture] | |||
simple symmetric key. If it is done with ECC, such as an IEEE | ||||
DevID [IEEE.802.1AR], then this is the private part of the EC key | ||||
pair. If ECDAA is used, (e.g., as used by Enhanced Privacy ID, | ||||
i.e. EPID) then it is the key material needed for ECDAA. | ||||
3. The Claims | Attester: A role performed by an entity (typically a device) whose | |||
Evidence must be appraised in order to infer the extent to which | ||||
the Attester is considered trustworthy, such as when deciding | ||||
whether it is authorized to perform some operation. | ||||
This section describes new claims defined for attestation. It also | Verifier: A role that appraises the validity of Attestation Evidence | |||
mentions several claims defined by CWT and JWT that are particularly | about an Attester and produces Attestation Results to be used by a | |||
important for EAT. | Relying Party. | |||
Note also: * Any claim defined for CWT or JWT may be used in an EAT | Relying Party: A role that depends on the validity of information | |||
including those in the CWT [IANA.CWT.Claims] and JWT IANA | about an Attester, for purposes of reliably applying application | |||
[IANA.JWT.Claims] claims registries. | specific actions. Compare /relying party/ in [RFC4949]. | |||
o All claims are optional | Attestation Evidence: A Claims Set generated by an Attester to be | |||
o No claims are mandatory | appraised by a Verifier. Attestation Evidence may include | |||
configuration data, measurements, telemetry, or inferences. | ||||
o All claims that are not understood by implementations MUST be | Attestation Results: The output generated by a Verifier, typically | |||
ignored | including information about an Attester, where the Verifier | |||
vouches for the validity of the results | ||||
There are no default values or meanings assigned to absent claims | Reference Values: A set of values against which values of Claims can | |||
other than they are not reported. The reason for a claim's absence | be compared as part of applying an Appraisal Policy for | |||
may be the implementation not supporting the claim, an inability to | Attestation Evidence. Reference Values are sometimes referred to | |||
determine its value, or a preference to report in a different way | in other documents as known-good values, golden measurements, or | |||
such as a proprietary claim. | nominal values, although those terms typically assume comparison | |||
for equality, whereas here Reference Values might be more general | ||||
and be used in any sort of comparison. | ||||
CDDL along with text descriptions is used to define each claim | 3. The Claims | |||
indepdent of encoding. Each claim is defined as a CDDL group (the | ||||
group is a general aggregation and type definition feature of CDDL). | ||||
In the encoding section Section 6, the CDDL groups turn into CBOR map | ||||
entries and JSON name/value pairs. | ||||
Map labels are assigned both an integer and string value. CBOR | This section describes new claims defined for attestation that are to | |||
encoded tokens MUST use only integer labels. JSON encoded tokens | be added to the CWT [IANA.CWT.Claims] and JWT [IANA.JWT.Claims] IANA | |||
MUST use only string labels. | registries. | |||
TODO: add paragraph here about use for Attestation Evidence and for | This section also describes how several extant CWT and JWT claims | |||
Results. | apply in EAT. | |||
CDDL, along with a text description, is used to define each claim | ||||
independent of encoding. Each claim is defined as a CDDL group. In | ||||
Section 8 on encoding, the CDDL groups turn into CBOR map entries and | ||||
JSON name/value pairs. | ||||
Each claim described has a unique text string and integer that | ||||
identifies it. CBOR encoded tokens MUST use only the integer for | ||||
Claim Keys. JSON encoded tokens MUST use only the text string for | ||||
Claim Names. | ||||
3.1. Token ID Claim (cti and jti) | 3.1. Token ID Claim (cti and jti) | |||
CWT defines the "cti" claim. JWT defines the "jti" claim. These are | CWT defines the "cti" claim. JWT defines the "jti" claim. These are | |||
equivalent to each other in EAT and carry a unique token identifier | equivalent to each other in EAT and carry a unique token identifier | |||
as they do in JWT and CWT. They may be used to defend against re use | as they do in JWT and CWT. They may be used to defend against re use | |||
of the token but are distinct from the nonce that is used by the | of the token but are distinct from the nonce that is used by the | |||
relying party to guarantee freshness and defend against replay. | Relying Party to guarantee freshness and defend against replay. | |||
3.2. Timestamp claim (iat) | 3.2. Timestamp claim (iat) | |||
The "iat" claim defined in CWT and JWT is used to indicate the date- | The "iat" claim defined in CWT and JWT is used to indicate the date- | |||
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 | |||
skipping to change at page 12, line 12 ¶ | skipping to change at page 11, line 42 ¶ | |||
use of floating-point. No token may contain an iat claim in float- | use of floating-point. No token may contain an iat claim in float- | |||
point format. Any recipient of a token with a floating-point format | point format. Any recipient of a token with a floating-point format | |||
iat claim may consider it an error. A 64-bit integer representation | iat claim may consider it an error. A 64-bit integer representation | |||
of epoch time can represent a range of +/- 500 billion years, so the | of epoch time can represent a range of +/- 500 billion years, so the | |||
only point of a floating-point timestamp is to have precession | only point of a floating-point timestamp is to have precession | |||
greater than one second. This is not needed for EAT. | greater than one second. This is not needed for EAT. | |||
3.3. Nonce Claim (nonce) | 3.3. Nonce Claim (nonce) | |||
All EATs should have a nonce to prevent replay attacks. The nonce is | All EATs should have a nonce to prevent replay attacks. The nonce is | |||
generated by the relying party, the end consumer of the token. It is | generated by the Relying Party, the end consumer of the token. It is | |||
conveyed to the entity over whatever transport is in use before the | conveyed to the entity over whatever transport is in use before the | |||
token is generated and then included in the token as the nonce claim. | token is generated and then included in the token as the nonce claim. | |||
This documents the nonce claim for registration in the IANA CWT | This documents the nonce claim for registration in the IANA CWT | |||
claims registry. This is equivalent to the JWT nonce claim that is | claims registry. This is equivalent to the JWT nonce claim that is | |||
already registered. | already registered. | |||
The nonce must be at least 8 bytes (64 bits) as fewer are unlikely to | The nonce must be at least 8 bytes (64 bits) as fewer are unlikely to | |||
be secure. A maximum of 64 bytes is set to limit the memory a | be secure. A maximum of 64 bytes is set to limit the memory a | |||
constrained implementation uses. This size range is not set for the | constrained implementation uses. This size range is not set for the | |||
already-registered JWT nonce, but it should follow this size | already-registered JWT nonce, but it should follow this size | |||
recommendation when used in an EAT. | recommendation when used in an EAT. | |||
Multiple nonces are allowed to accommodate multistage verification | Multiple nonces are allowed to accommodate multistage verification | |||
and consumption. | and consumption. | |||
3.3.1. nonce CDDL | $$claims-set-claims //= | |||
(nonce-label => nonce-type / [ 2* nonce-type ]) | ||||
nonce-type = bstr .size (8..64) | nonce-type = bstr .size (8..64) | |||
nonce-claim = ( | ||||
nonce => nonce-type / [ 2* nonce-type ] | ||||
) | ||||
3.4. Universal Entity ID Claim (ueid) | 3.4. Universal Entity ID Claim (ueid) | |||
UEID's identify individual manufactured entities / devices such as a | UEID's identify individual manufactured entities / devices such as a | |||
mobile phone, a water meter, a Bluetooth speaker or a networked | mobile phone, a water meter, a Bluetooth speaker or a networked | |||
security camera. It may identify the entire device or a submodule or | security camera. It may identify the entire device or a submodule or | |||
subsystem. It does not identify types, models or classes of devices. | subsystem. It does not identify types, models or classes of devices. | |||
It is akin to a serial number, though it does not have to be | It is akin to a serial number, though it does not have to be | |||
sequential. | sequential. | |||
UEID's must be universally and globally unique across manufacturers | UEID's must be universally and globally unique across manufacturers | |||
and countries. UEIDs must also be unique across protocols and | and countries. UEIDs must also be unique across protocols and | |||
systems, as tokens are intended to be embedded in many different | systems, as tokens are intended to be embedded in many different | |||
protocols and systems. No two products anywhere, even in completely | protocols and systems. No two products anywhere, even in completely | |||
different industries made by two different manufacturers in two | different industries made by two different manufacturers in two | |||
different countries should have the same UEID (if they are not global | different countries should have the same UEID (if they are not global | |||
and universal in this way, then relying parties receiving them will | and universal in this way, then Relying Parties receiving them will | |||
have to track other characteristics of the device to keep devices | have to track other characteristics of the device to keep devices | |||
distinct between manufacturers). | distinct between manufacturers). | |||
There are privacy considerations for UEID's. See Section 8.1. | There are privacy considerations for UEID's. See Section 10.1. | |||
The UEID is permanent. It never change for a given device / entity. | The UEID is permanent. It never change for a given device / entity. | |||
UEIDs are variable length. All implementations MUST be able to | UEIDs are variable length. All implementations MUST be able to | |||
receive UEIDs that are 33 bytes long (1 type byte and 256 bits). The | receive UEIDs that are 33 bytes long (1 type byte and 256 bits). The | |||
recommended maximum sent is also 33 bytes. | recommended maximum sent is also 33 bytes. | |||
When the entity constructs the UEID, the first byte is a type and the | When the entity constructs the UEID, the first byte is a type and the | |||
following bytes the ID for that type. Several types are allowed to | following bytes the ID for that type. Several types are allowed to | |||
accommodate different industries and different manufacturing | accommodate different industries and different manufacturing | |||
skipping to change at page 14, line 43 ¶ | skipping to change at page 13, line 43 ¶ | |||
| | | of the digit; the digit 3 encodes as 0x03, not | | | | | of the digit; the digit 3 encodes as 0x03, not | | |||
| | | 0x33). The IMEI value encoded SHALL NOT include | | | | | 0x33). The IMEI value encoded SHALL NOT include | | |||
| | | Luhn checksum or SVN information. [ThreeGPP.IMEI] | | | | | Luhn checksum or SVN information. [ThreeGPP.IMEI] | | |||
+------+------+-----------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
Table 1: UEID Composition Types | Table 1: UEID Composition Types | |||
UEID's are not designed for direct use by humans (e.g., printing on | UEID's are not designed for direct use by humans (e.g., printing on | |||
the case of a device), so no textual representation is defined. | the case of a device), so no textual representation is defined. | |||
The consumer (the relying party) of a UEID MUST treat a UEID as a | The consumer (the Relying Party) of a UEID MUST treat a UEID as a | |||
completely opaque string of bytes and not make any use of its | completely opaque string of bytes and not make any use of its | |||
internal structure. For example, they should not use the OUI part of | internal structure. For example, they should not use the OUI part of | |||
a type 0x02 UEID to identify the manufacturer of the device. Instead | a type 0x02 UEID to identify the manufacturer of the device. Instead | |||
they should use the oemid claim that is defined elsewhere. The | they should use the oemid claim that is defined elsewhere. The | |||
reasons for this are: | reasons for this are: | |||
o UEIDs types may vary freely from one manufacturer to the next. | o UEIDs types may vary freely from one manufacturer to the next. | |||
o New types of UEIDs may be created. For example, a type 0x07 UEID | o New types of UEIDs may be created. For example, a type 0x07 UEID | |||
may be created based on some other manufacturer registration | may be created based on some other manufacturer registration | |||
scheme. | scheme. | |||
o Device manufacturers are allowed to change from one type of UEID | o Device manufacturers are allowed to change from one type of UEID | |||
to another anytime they want. For example, they may find they can | to another anytime they want. For example, they may find they can | |||
optimize their manufacturing by switching from type 0x01 to type | optimize their manufacturing by switching from type 0x01 to type | |||
0x02 or vice versa. The main requirement on the manufacturer is | 0x02 or vice versa. The main requirement on the manufacturer is | |||
that UEIDs be universally unique. | that UEIDs be universally unique. | |||
3.4.1. ueid CDDL | A Device Indentifier URN is registered for UEIDs. See Section 9.3.4. | |||
ueid-type = bstr .size (7..33) | $$claims-set-claims //= (ueid-label => ueid-type) | |||
ueid-claim = ( | ueid-type = bstr .size (7..33) | |||
ueid => ueid-type | ||||
) | ||||
3.5. Semi-permanent UEIDs (SUEIDs) | 3.5. Semi-permanent UEIDs (SUEIDs) | |||
An SEUID is of the same format as a UEID, but it may change to a | An SEUID is of the same format as a UEID, but it may change to a | |||
different value on device life-cycle events. Examples of these | different value on device life-cycle events. Examples of these | |||
events are change of ownership, factory reset and on-boarding into an | events are change of ownership, factory reset and on-boarding into an | |||
IoT device management system. A device may have both a UEID and | IoT device management system. A device may have both a UEID and | |||
SUEIDs, neither, one or the other. | SUEIDs, neither, one or the other. | |||
There may be multiple SUEIDs. Each one has a text string label the | There may be multiple SUEIDs. Each one has a text string label the | |||
purpose of which is to distinguish it from others in the token. The | purpose of which is to distinguish it from others in the token. The | |||
label may name the purpose, application or type of the SUEID. | label may name the purpose, application or type of the SUEID. | |||
Typically, there will be few SUEDs so there is no need for a formal | Typically, there will be few SUEDs so there is no need for a formal | |||
labeling mechanism like a registry. The EAT profile may describe how | labeling mechanism like a registry. The EAT profile may describe how | |||
SUEIDs should be labeled. If there is only one SUEID, the claim | SUEIDs should be labeled. If there is only one SUEID, the claim | |||
remains a map and there still must be a label. For example, the | remains a map and there still must be a label. For example, the | |||
label for the SUEID used by FIDO Onboarding Protocol could simply be | label for the SUEID used by FIDO Onboarding Protocol could simply be | |||
"FDO". | "FDO". | |||
There are privacy considerations for SUEID's. See Section 8.1. | There are privacy considerations for SUEID's. See Section 10.1. | |||
A Device Indentifier URN is registered for SUEIDs. See | ||||
Section 9.3.4. | ||||
$$claims-set-claims //= (sueids-label => sueids-type) | ||||
sueids-type = { | sueids-type = { | |||
+ tstr => ueid-type | + tstr => ueid-type | |||
} | } | |||
sueids-claim = ( | 3.6. Hardware OEM Identification (oemid) | |||
sueids => sueids-type | ||||
) | ||||
3.6. OEM Identification by IEEE (oemid) | This claim identifies the OEM of the hardware. Any of the three | |||
forms may be used at the convenience of the attester implementation. | ||||
The receiver of this claim MUST be able to handle all three forms. | ||||
3.6.1. Random Number Based | ||||
This format is always 16 bytes in size (128 bits). | ||||
The OEM may create their own ID by using a cryptographic-quality | ||||
random number generator. They would perform this only once in the | ||||
life of the company to generate the single ID for said company. They | ||||
would use that same ID in every device they make. This uniquely | ||||
identifies the OEM on a statistical basis and is large enough should | ||||
there be ten billion companies. | ||||
The OEM may also use a hash like SHA-256 and truncate the output to | ||||
128 bits. The input to the hash should be somethings that have at | ||||
least 96 bits of entropy, but preferably 128 bits of entropy. The | ||||
input to the hash may be something whose uniqueness is managed by a | ||||
central registry like a domain name. | ||||
This is to be base64url encoded in JSON. | ||||
3.6.2. IEEE Based | ||||
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 an IEEE 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. MA-M similarly is a 28-bit value | |||
uses as the first part of a MAC address, and MA-S, formerly known as | uses as the first part of a MAC address, and MA-S, formerly known as | |||
OUI-36, a 36-bit value. Many companies already have purchased one of | OUI-36, a 36-bit value. Many companies already have purchased one of | |||
these. A CID is also a 24-bit value from the same space as an MA-L, | these. A CID is also a 24-bit value from the same space as an MA-L, | |||
but not for use as a MAC address. IEEE has published Guidelines for | but not for use as a MAC address. IEEE has published Guidelines for | |||
Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup services | Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup services | |||
[OUI.Lookup] | [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 pick one and prefer that for all their devices. | should pick one and prefer that for all their devices. | |||
Commonly, these are expressed in Hexadecimal Representation | Commonly, these are expressed in Hexadecimal Representation | |||
[IEEE.802-2001] also called the Canonical format. When this claim is | [IEEE.802-2001] also called the Canonical format. When this claim is | |||
encoded the order of bytes in the bstr are the same as the order in | encoded the order of bytes in the bstr are the same as the order in | |||
the Hexadecimal Representation. For example, an MA-L like "AC-DE-48" | the Hexadecimal Representation. For example, an MA-L like "AC-DE-48" | |||
would be encoded in 3 bytes with values 0xAC, 0xDE, 0x48. For JSON | would be encoded in 3 bytes with values 0xAC, 0xDE, 0x48. For JSON | |||
encoded tokens, this is further base64url encoded. | encoded tokens, this is further base64url encoded. | |||
3.6.1. oemid CDDL | This format is always 3 bytes in size in CBOR. | |||
oemid-claim = ( | 3.6.3. IANA Private Enterprise Number | |||
oemid => bstr | ||||
IANA maintains a simple integer-based company registry called the | ||||
Private Enterprise Number (PEN) [PEN]. | ||||
PENs are often used to create an OID. That is not the case here. | ||||
They are used only as a simple integer. | ||||
In CBOR this is encoded as a major type 0 integer in CBOR and is | ||||
typically 3 bytes. It is encoded as a number in JSON. | ||||
oemid-pen = int | ||||
oemid-ieee = bstr .size 3 | ||||
oemid-random = bstr .size 16 | ||||
$$claims-set-claims //= ( | ||||
oemid-label => | ||||
oemid-random / oemid-ieee / oemid-pen | ||||
) | ) | |||
3.7. Hardware Version Claims (hardware-version-claims) | 3.7. Hardware Version Claims (hardware-version-claims) | |||
The hardware version can be claimed at three different levels, the | The hardware version can be claimed at three different levels, the | |||
chip, the circuit board and the final device assembly. An EAT can | chip, the circuit board and the final device assembly. An EAT can | |||
include any combination these claims. | include any combination these claims. | |||
The hardware version is a simple text string the format of which is | The hardware version is a simple text string the format of which is | |||
set by each manufacturer. The structure and sorting order of this | set by each manufacturer. The structure and sorting order of this | |||
text string can be specified using the version-scheme item from | text string can be specified using the version-scheme item from | |||
CoSWID [CoSWID]. | CoSWID [CoSWID]. | |||
The hardware version can also be given by a 13-digit [EAN-13]. A new | The hardware version can also be given by a 13-digit [EAN-13]. A new | |||
CoSWID version scheme is registered with IANA by this document in | CoSWID version scheme is registered with IANA by this document in | |||
Section 7.3.3. An EAN-13 is also known as an International Article | Section 9.3.3. An EAN-13 is also known as an International Article | |||
Number or most commonly as a bar code. | Number or most commonly as a bar code. | |||
chip-version-claim = ( | $$claims-set-claims //= ( | |||
chip-version => tstr | chip-version-label => hw-version-type | |||
) | ) | |||
chip-version-scheme-claim = ( | $$claims-set-claims //= ( | |||
chip-version-scheme => $version-scheme | board-version-label => hw-version-type | |||
) | ) | |||
board-version-claim = ( | $$claims-set-claims //= ( | |||
board-version => tstr | device-version-label => hw-version-type | |||
) | ) | |||
board-version-scheme-claim = ( | hw-version-type = [ | |||
board-version-scheme => $version-scheme | version: tstr, | |||
) | scheme: $version-scheme | |||
] | ||||
device-version-claim = ( | 3.8. Software Name Claim | |||
device-version => tstr | ||||
) | ||||
device-version-scheme-claim = ( | This is a simple free-form text claim for the name of the software. | |||
device-version-scheme => $version-scheme | A CoSWID manifest or other type of manifest can be used instead if | |||
) | this is too simple. | |||
hardware-version-claims = ( | $$claims-set-claims //= ( sw-name-label => tstr ) | |||
? chip-version-claim, | ||||
? board-version-claim, | ||||
? device-version-claim, | ||||
? chip-version-scheme-claim, | ||||
? board-version-scheme-claim, | ||||
? device-version-scheme-claim, | ||||
) | ||||
3.8. Software Description and Version | 3.9. Software Version Claim | |||
TODO: Add claims that reference CoSWID. | This makes use of the CoSWID version scheme data type to give a | |||
simple version for the software. A full CoSWID manifest or other | ||||
type of manifest can be instead if this is too simple. | ||||
3.9. The Security Level Claim (security-level) | $$claims-set-claims //= (sw-version-label => sw-version-type) | |||
sw-version-type = [ | ||||
version: tstr, | ||||
scheme: $version-scheme / As defined by CoSWID / | ||||
] | ||||
3.10. The Security Level Claim (security-level) | ||||
This claim characterizes the device/entity ability to defend against | This claim characterizes the device/entity ability to defend against | |||
attacks aimed at capturing the signing key, forging claims and at | attacks aimed at capturing the signing key, forging claims and at | |||
forging EATs. This is done by defining four security levels as | forging EATs. This is by defining four security levels as described | |||
described below. This is similar to the key protection types defined | below. | |||
by the Fast Identity Online (FIDO) Alliance [FIDO.Registry]. | ||||
These claims describe security environment and countermeasures | These claims describe security environment and countermeasures | |||
available on the end-entity / client device where the attestation key | available on the end-entity/client device where the attestation key | |||
reside and the claims originate. | resides and the claims originate. | |||
1 - Unrestricted There is some expectation that implementor will | 1 - Unrestricted: There is some expectation that implementor will | |||
protect the attestation signing keys at this level. Otherwise the | protect the attestation signing keys at this level. Otherwise, | |||
EAT provides no meaningful security assurances. | the EAT provides no meaningful security assurances. | |||
2- Restricted Entities at this level should not be general-purpose | 2 - Restricted: Entities at this level are not general-purpose | |||
operating environments that host features such as app download | operating environments that host features such as app download | |||
systems, web browsers and complex productivity applications. It | systems, web browsers and complex productivity applications. It | |||
is akin to the Secure Restricted level (see below) without the | is akin to the secure-restricted level (see below) without the | |||
security orientation. Examples include a Wi-Fi subsystem, an IoT | security orientation. Examples include a Wi-Fi subsystem, an IoT | |||
camera, or sensor device. | camera, or sensor device. Often these can be considered more | |||
secure than unrestricted just because they are much simpler and a | ||||
smaller attack surface, but this won't always be the case. Some | ||||
unrestricted devices may be implemented in a way that provides | ||||
poor protection of signing keys. | ||||
3 - Secure Restricted Entities at this level must meet the criteria | 3 - Secure-Restricted: Entities at this level must meet the criteria | |||
defined by FIDO Allowed Restricted Operating Environments | defined in section 4 of FIDO Allowed Restricted Operating | |||
[FIDO.AROE]. Examples include TEE's and schemes using | Environments [FIDO.AROE]. Examples include TEE's and schemes | |||
virtualization-based security. Like the FIDO security goal, | using virtualization-based security. Like the FIDO security goal, | |||
security at this level is aimed at defending well against large- | security at this level is aimed at defending well against large- | |||
scale network / remote attacks against the device. | scale network/remote attacks against the device. | |||
4 - Hardware Entities at this level must include substantial defense | 4 - Hardware: Entities at this level must include substantial | |||
against physical or electrical attacks against the device itself. | defense against physical or electrical attacks against the device | |||
It is assumed any potential attacker has captured the device and | itself. It is assumed any potential attacker has captured the | |||
can disassemble it. Example include TPMs and Secure Elements. | device and can disassemble it. Examples include TPMs and Secure | |||
Elements. | ||||
The entity should claim the highest security level it achieves and no | The entity should claim the highest security level it achieves and no | |||
higher. This set is not extensible so as to provide a common | higher. This set is not extensible so as to provide a common | |||
interoperable description of security level to the relying party. If | interoperable description of security level to the Relying Party. If | |||
a particular implementation considers this claim to be inadequate, it | a particular implementation considers this claim to be inadequate, it | |||
can define its own proprietary claim. It may consider including both | can define its own proprietary claim. It may consider including both | |||
this claim as a coarse indication of security and its own proprietary | this claim as a coarse indication of security and its own proprietary | |||
claim as a refined indication. | claim as a refined indication. | |||
This claim is not intended as a replacement for a proper end-device | This claim is not intended as a replacement for a proper end-device | |||
security certification schemes such as those based on FIPS 140 | security certification scheme such as those based on FIPS 140 | |||
[FIPS-140] or those based on Common Criteria [Common.Criteria]. The | [FIPS-140] or those based on Common Criteria [Common.Criteria]. The | |||
claim made here is solely a self-claim made by the Entity Originator. | claim made here is solely a self-claim made by the Attester. | |||
3.9.1. security-level CDDL | $$claims-set-claims //= ( | |||
security-level-cbor-type = &( | security-level-label => | |||
unrestricted: 1, | security-level-cbor-type / | |||
restricted: 2, | security-level-json-type | |||
secure-restricted: 3, | ) | |||
hardware: 4 | ||||
) | ||||
security-level-json-type = | security-level-cbor-type = &( | |||
"unrestricted" / | unrestricted: 1, | |||
"restricted" / | restricted: 2, | |||
"secure-restricted" / | secure-restricted: 3, | |||
"hardware" | hardware: 4 | |||
) | ||||
security-level-claim = ( | security-level-json-type = | |||
security-level => security-level-cbor-type / security-level-json-type | "unrestricted" / | |||
) | "restricted" / | |||
"secure-restricted" / | ||||
"hardware" | ||||
3.10. Secure Boot Claim (secure-boot) | 3.11. Secure Boot Claim (secure-boot) | |||
The value of true indicates secure boot is enabled. Secure boot is | The value of true indicates secure boot is enabled. Secure boot is | |||
considered enabled when base software, the firmware and operating | considered enabled when base software, the firmware and operating | |||
system, are under control of the entity manufacturer identified in | system, are under control of the entity manufacturer identified in | |||
the oemid claimd described in Section 3.6. This may because the | the OEMID claim described in Section 3.6. This may because the | |||
software is in ROM or because it is cryptographically authenticated | software is in ROM or because it is cryptographically authenticated | |||
or some combination of the two or other. | or some combination of the two or other. | |||
3.10.1. secure-boot CDDL | $$claims-set-claims //= (secure-boot-label => bool) | |||
secure-boot-claim = ( | ||||
secure-boot => bool | ||||
) | ||||
3.11. Debug Status Claim (debug-status) | 3.12. Debug Status Claim (debug-status) | |||
This applies to system-wide or submodule-wide debug facilities of the | This applies to system-wide or submodule-wide debug facilities of the | |||
target device / submodule like JTAG and diagnostic hardware built | target device / submodule 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 | |||
root, operating system or privileged software that allow system-wide | root, operating system or privileged software that allow system-wide | |||
memory inspection, tracing or modification of non-system software | memory inspection, tracing or modification of non-system software | |||
like user mode applications. | like user mode 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 | |||
skipping to change at page 20, line 13 ¶ | skipping to change at page 20, line 11 ¶ | |||
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-device public keys. | or by per-device public keys. | |||
As with all claims, the absence of the debug level claim means it is | As with all claims, the absence of the debug level claim means it is | |||
not reported. A conservative interpretation might assume the Not | not reported. A conservative interpretation might assume the Not | |||
Disabled state. It could however be that it is reported in a | Disabled state. It could however be that it is reported in a | |||
proprietary claim. | proprietary claim. | |||
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 to the relying party. If a particular | description of debug status to the Relying Party. If a particular | |||
implementation considers this claim to be inadequate, it can define | implementation considers this claim to be inadequate, it can define | |||
its own proprietary claim. It may consider including both this claim | its own 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. | as a refined indication. | |||
The higher levels of debug disabling requires that all debug | The higher levels of debug disabling requires that all debug | |||
disabling of the levels below it be in effect. Since the lowest | disabling of the levels below it be in effect. Since the lowest | |||
level requires that all of the target's debug be currently disabled, | level requires that all of the target's debug be currently disabled, | |||
all other levels require that too. | all other 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 verifier or relying party | describe its own debug state. The Verifier or Relying Party | |||
receiving an EAT cannot assume that debug is turned off in a | receiving an EAT cannot assume that debug is turned off in a | |||
submodule because there is a claim indicating it is turned off in a | submodule because there is a claim indicating it is turned off in a | |||
superior module. | superior module. | |||
An individual target device / submodule may have multiple debug | An individual target device / submodule may have multiple debug | |||
facilities. The use of plural in the description of the states | facilities. The use of plural in the description of the states | |||
refers to that, not to any aggregation or inheritance. | refers to that, not to any aggregation or inheritance. | |||
The architecture of some chips or devices may be such that a debug | The architecture of some chips or devices may be such that a debug | |||
facility operates for the whole chip or device. If the EAT for such | facility operates for the whole chip or device. If the EAT for such | |||
a chip includes submodules, then each submodule should independently | a chip includes submodules, then each submodule should independently | |||
report the status of the whole-chip or whole-device debug facility. | report the status of the whole-chip or whole-device debug facility. | |||
This is the only way the relying party can know the debug status of | This is the only way the Relying Party can know the debug status of | |||
the submodules since there is no inheritance. | the submodules since there is no inheritance. | |||
3.11.1. Enabled | 3.12.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. | |||
3.11.2. Disabled | 3.12.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, and it may also be | may be possible to enable them in the future, and it may also be | |||
possible that they were enabled in the past after the target device/ | possible that they were enabled in the past after the target device/ | |||
sub-system booted/started, but they are currently disabled. | sub-system booted/started, but they are currently disabled. | |||
3.11.3. Disabled Since Boot | 3.12.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 target device/sub-system booted/started. | have been so since the target device/sub-system booted/started. | |||
3.11.4. Disabled Permanently | 3.12.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 cannot enable them. Only | disabled such that no end user or developer cannot enable them. Only | |||
the manufacturer indicated in the OEMID claim can enable them. This | the manufacturer indicated in the OEMID claim can enable them. This | |||
also indicates that all debug facilities are currently disabled and | also indicates that all debug facilities are currently disabled and | |||
have been so since boot/start. | have been so since boot/start. | |||
3.11.5. Disabled Fully and Permanently | 3.12.5. Disabled Fully and Permanently | |||
This level indicates that all debug capabilities for the target | This level indicates that all debug capabilities for the target | |||
device/sub-module are permanently disabled. | device/sub-module are permanently disabled. | |||
3.11.6. debug-status CDDL | $$claims-set-claims //= ( | |||
debug-status-label => | ||||
debug-status-cbor-type / debug-status-json-type | ||||
) | ||||
debug-status-cbor-type = &( | debug-status-cbor-type = &( | |||
enabled: 0, | enabled: 0, | |||
disabled: 1, | disabled: 1, | |||
disabled-since-boot: 2, | disabled-since-boot: 2, | |||
disabled-permanently: 3, | disabled-permanently: 3, | |||
disabled-fully-and-permanently: 4 | disabled-fully-and-permanently: 4 | |||
) | ) | |||
debug-status-json-type = | debug-status-json-type = | |||
"enabled" / | "enabled" / | |||
"disabled" / | "disabled" / | |||
"disabled-since-boot" / | "disabled-since-boot" / | |||
"disabled-permanently" / | "disabled-permanently" / | |||
"disabled-fully-and-permanently" | "disabled-fully-and-permanently" | |||
debug-status-claim = ( | 3.13. Including Keys | |||
debug-status => debug-status-cbor-type / debug-status-json-type | ||||
) | ||||
3.12. Including Keys | ||||
An EAT may include a cryptographic key such as a public key. The | An EAT may include a cryptographic key such as a public key. The | |||
signing of the EAT binds the key to all the other claims in the | signing of the EAT binds the key to all the other claims in the | |||
token. | token. | |||
The purpose for inclusion of the key may vary by use case. For | The purpose for inclusion of the key may vary by use case. For | |||
example, the key may be included as part of an IoT device onboarding | example, the key may be included as part of an IoT device onboarding | |||
protocol. When the FIDO protocol includes a pubic key in its | protocol. When the FIDO protocol includes a pubic key in its | |||
attestation message, the key represents the binding of a user, device | attestation message, the key represents the binding of a user, device | |||
and relying party. This document describes how claims containing | and Relying Party. This document describes how claims containing | |||
keys should be defined for the various use cases. It does not define | keys should be defined for the various use cases. It does not define | |||
specific claims for specific use cases. | specific claims for specific use cases. | |||
Keys in CBOR format tokens SHOULD be the COSE_Key format [RFC8152] | Keys in CBOR format tokens SHOULD be the COSE_Key format [RFC8152] | |||
and keys in JSON format tokens SHOULD be the JSON Web Key format | and keys in JSON format tokens SHOULD be the JSON Web Key format | |||
[RFC7517]. These two formats support many common key types. Their | [RFC7517]. These two formats support many common key types. Their | |||
use avoids the need to decode other serialization formats. These two | use avoids the need to decode other serialization formats. These two | |||
formats can be extended to support further key types through their | formats can be extended to support further key types through their | |||
IANA registries. | IANA registries. | |||
skipping to change at page 22, line 40 ¶ | skipping to change at page 22, line 29 ¶ | |||
case. | case. | |||
When the actual confirmation claim is included in an EAT, this | When the actual confirmation claim is included in an EAT, this | |||
document associates no use case semantics other than proof of | document associates no use case semantics other than proof of | |||
posession. Different EAT use cases may choose to associate further | posession. Different EAT use cases may choose to associate further | |||
semantics. The key in the confirmation claim MUST be protected the | semantics. The key in the confirmation claim MUST be protected the | |||
same as the key used to sign the EAT. That is, the same, equivalent | same as the key used to sign the EAT. That is, the same, equivalent | |||
or better hardware defenses, access controls, key generation and such | or better hardware defenses, access controls, key generation and such | |||
must be used. | must be used. | |||
3.13. The Location Claim (location) | 3.14. The Location Claim (location) | |||
The location claim gives the location of the device entity from which | The location claim gives the location of the device entity from which | |||
the attestation originates. It is derived from the W3C Geolocation | the attestation originates. It is derived from the W3C Geolocation | |||
API [W3C.GeoLoc]. The latitude, longitude, altitude and accuracy | API [W3C.GeoLoc]. The latitude, longitude, altitude and accuracy | |||
must conform to [WGS84]. The altitude is in meters above the [WGS84] | must conform to [WGS84]. The altitude is in meters above the [WGS84] | |||
ellipsoid. The two accuracy values are positive numbers in meters. | ellipsoid. The two accuracy values are positive numbers in meters. | |||
The heading is in degrees relative to true north. If the device is | The heading is in degrees relative to true north. If the device is | |||
stationary, the heading is NaN (floating-point not-a-number). The | stationary, the heading is NaN (floating-point not-a-number). The | |||
speed is the horizontal component of the device velocity in meters | speed is the horizontal component of the device velocity in meters | |||
per second. | per second. | |||
skipping to change at page 23, line 23 ¶ | skipping to change at page 23, line 11 ¶ | |||
since the last contact with a GPS satellite. Either the timestamp or | since the last contact with a GPS satellite. Either the timestamp or | |||
age data item can be used to quantify the cached period. The | age data item can be used to quantify the cached period. The | |||
timestamp data item is preferred as it a non-relative time. | timestamp data item is preferred as it a non-relative time. | |||
The age data item can be used when the entity doesn't know what time | The age data item can be used when the entity doesn't know what time | |||
it is either because it doesn't have a clock or it isn't set. The | it is either because it doesn't have a clock or it isn't set. The | |||
entity must still have a "ticker" that can measure a time interval. | entity must still have a "ticker" that can measure a time interval. | |||
The age is the interval between acquisition of the location data and | The age is the interval between acquisition of the location data and | |||
token creation. | token creation. | |||
See location-related privacy considerations in Section 8.2 below. | See location-related privacy considerations in Section 10.2 below. | |||
3.13.1. location CDDL | $$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, | |||
? speed => number, | ? speed => number, | |||
? timestamp => ~time-int, | ? timestamp => ~time-int, | |||
skipping to change at page 23, line 49 ¶ | skipping to change at page 23, line 37 ¶ | |||
latitude = 1 / "latitude" | latitude = 1 / "latitude" | |||
longitude = 2 / "longitude" | longitude = 2 / "longitude" | |||
altitude = 3 / "altitude" | altitude = 3 / "altitude" | |||
accuracy = 4 / "accuracy" | accuracy = 4 / "accuracy" | |||
altitude-accuracy = 5 / "altitude-accuracy" | altitude-accuracy = 5 / "altitude-accuracy" | |||
heading = 6 / "heading" | heading = 6 / "heading" | |||
speed = 7 / "speed" | speed = 7 / "speed" | |||
timestamp = 8 / "timestamp" | timestamp = 8 / "timestamp" | |||
age = 9 / "age" | age = 9 / "age" | |||
location-claim = ( | 3.15. The Uptime Claim (uptime) | |||
location-label => location-type | ||||
) | ||||
3.14. The Uptime Claim (uptime) | ||||
The "uptime" claim contains a value that represents the number of | The "uptime" claim contains a value that represents the number of | |||
seconds that have elapsed since the entity or submod was last booted. | seconds that have elapsed since the entity or submod was last booted. | |||
3.14.1. uptime CDDL | $$claims-set-claims //= (uptime-label => uint) | |||
uptime-claim = ( | ||||
uptime => uint | ||||
) | ||||
3.15. The Boot Seed Claim (boot-seed) | 3.16. The Boot Seed Claim (boot-seed) | |||
The Boot Seed claim is a random value created at system boot time | The Boot Seed claim is a random value created at system boot time | |||
that will allow differentiation of reports from different boot | that will allow differentiation of reports from different boot | |||
sessions. This value is usually public and not protected. It is not | sessions. This value is usually public and not protected. It is not | |||
the same as a seed for a random number generator which must be kept | the same as a seed for a random number generator which must be kept | |||
secret. | secret. | |||
boot-seed-claim = ( | $$claims-set-claims //= (boot-seed-label => bytes) | |||
boot-seed => bytes | ||||
) | ||||
3.16. The Intended Use Claim (intended-use) | 3.17. The Intended Use Claim (intended-use) | |||
EAT's may be used in the context of several different applications. | EAT's may be used in the context of several different applications. | |||
The intended-use claim provides an indication to an EAT consumer | The intended-use claim provides an indication to an EAT consumer | |||
about the intended usage of the token. This claim can be used as a | about the intended usage of the token. This claim can be used as a | |||
way for an application using EAT to internally distinguish between | way for an application using EAT to internally distinguish between | |||
different ways it uses EAT. | different ways it uses EAT. | |||
1 - Generic Generic attestation describes an application where the | 1 - Generic Generic attestation describes an application where the | |||
EAT consumer requres the most up-to-date security assessment of | EAT consumer requres 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 | |||
skipping to change at page 25, line 15 ¶ | skipping to change at page 25, line 5 ¶ | |||
may be used as part of the certificate signing request (CSR). | may be 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) appication. | as part of an accompanying proof-of-possession (PoP) appication. | |||
More precisely, a PoP transaction is intended to provide to the | More precisely, a PoP transaction is intended to provide to the | |||
recipient cryptographically-verifiable proof that the sender has | recipient cryptographically-verifiable proof that the sender has | |||
posession of a key. This kind of attestation may be neceesary to | posession of a key. This kind of attestation may be neceesary to | |||
verify the security state of the entity storing the private key | verify the security state of the entity storing the private key | |||
used in a PoP application. | used in a PoP application. | |||
3.16.1. intended-use CDDL | $$claims-set-claims //= ( | |||
intended-use-label => | ||||
intended-use-cbor-type / intended-use-json-type | ||||
) | ||||
intended-use-cbor-type = &( | intended-use-cbor-type = &( | |||
generic: 1, | generic: 1, | |||
registration: 2, | registration: 2, | |||
provisioning: 3, | provisioning: 3, | |||
csr: 4, | csr: 4, | |||
pop: 5 | pop: 5 | |||
) | ) | |||
intended-use-json-type = | intended-use-json-type = | |||
"generic" / | "generic" / | |||
"registration" / | "registration" / | |||
"provisioning" / | "provisioning" / | |||
"csr" / | "csr" / | |||
"pop" | "pop" | |||
intended-use-claim = ( | 3.18. The Profile Claim (profile) | |||
intended-use => intended-use-cbor-type / intended-use-json-type | ||||
) | ||||
3.17. The Profile Claim (profile) | ||||
See Section 5 for the detailed description of a profile. | See Section 7 for the detailed description of a profile. | |||
A profile is identified by either a URL or an OID. Typically, the | A profile is identified by either a URL or an OID. Typically, the | |||
URI will reference a document describing the profile. An OID is just | URI will reference a document describing the profile. An OID is just | |||
a unique identifier for the profile. It may exist anywhere in the | a unique identifier for the profile. It may exist anywhere in the | |||
OID tree. There is no requirement that the named document be | OID tree. There is no requirement that the named document be | |||
publicly accessible. The primary purpose of the profile claim is to | publicly accessible. The primary purpose of the profile claim 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 encoded in CBOR according to [CBOR-OID] and the URI | The OID is encoded in CBOR according to [CBOR.OID] and the URI | |||
according to [RFC8949]. Both are unwrapped and thus not tags. The | according to [RFC8949]. Both are unwrapped and thus not tags. The | |||
OID is always absolute and never relative. If the claims CBOR type | OID is always absolute and never relative. If the claims CBOR type | |||
is a text string it is a URI and if a byte string it is an OID. | is a text string it is a URI and if a byte string it is an OID. | |||
Note that this named "eat_profile" for JWT and is distinct from the | Note that this named "eat_profile" for JWT and is distinct from the | |||
already registered "profile" claim in the JWT claims registry. | already registered "profile" claim in the JWT claims registry. | |||
oid = #6.4000(bstr) ; TODO: fill this in with correct CDDL from OID RFC | $$claims-set-claims //= (profile-label => ~uri / ~oid) | |||
profile-claim = ( | oid = #6.4000(bstr) ; TODO: Replace with CDDL from OID RFC | |||
profile => ~uri / ~oid | ||||
) | ||||
3.18. The Software Manifests Claim (manifests) | 3.19. The DLOA (Digital Letter or Approval) Claim (dloas) | |||
A DLOA (Digital Letter of Approval) [DLOA] is an XML document that | ||||
describes a certification that a device or entity has received. | ||||
Examples of certifications represented by a DLOA include those issued | ||||
by Global Platform and those based on Common Criteria. The DLOA is | ||||
unspecific to any particular certification type or those issued by | ||||
any particular organization. | ||||
This claim is typically issued by a Verifier, not an Attester. When | ||||
this claim is issued by a Verifier, it MUST be because the entity, | ||||
device or submodule has received the certification in the DLOA. | ||||
This claim can contain more than one DLOA. If multiple DLOAs are | ||||
present, it MUST be because the entity, device or submodule received | ||||
all of the certifications. | ||||
DLOA XML documents are always fetched from a registrar that stores | ||||
them. This claim contains several data items used to construct a URL | ||||
for fetching the DLOA from the particular registrar. | ||||
The first data item is a URI for the registrar. The second data item | ||||
is a platform label to indicate the particular platform that was | ||||
certified. For platform certifications only these two are needed. | ||||
A DLOA may equally apply to an application. In that case it has the | ||||
URI for the registrar, a platform label and additionally an | ||||
application label. | ||||
The method of combining the registrar URI, platform label and | ||||
possibly application label is specified in [DLOA]. | ||||
$$claims-set-claims //= ( | ||||
dloas-label => [ + dloa-type ] | ||||
) | ||||
dloa-type = [ | ||||
dloa_registrar: ~uri | ||||
dloa_platform_label: text | ||||
? dloa_application_label: text | ||||
] | ||||
3.20. The Software Manifests Claim (manifests) | ||||
This claim contains descriptions of software that is present on the | This claim contains descriptions of software that is present on the | |||
device. These manifests are installed on the device when the | device. These manifests are installed on the device 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 device, | process. Installation is anything that adds software to the device, | |||
possibly factory installation, the user installing elective | possibly factory installation, the user installing elective | |||
applications and so on. The defining characteristic is that they are | applications and so on. The defining characteristic is that they are | |||
created by the software manufacturer. The purpose of these claims in | created by the software manufacturer. The purpose of these claims in | |||
an EAT is to relay them without modification to the Verifier and/or | an EAT is to relay them without modification to the Verifier and/or | |||
the Relying Party. | the Relying Party. | |||
skipping to change at page 27, line 25 ¶ | skipping to change at page 28, line 17 ¶ | |||
text sets the encoding requirement. | text sets the encoding requirement. | |||
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 multiple formats. In some cases EAT submodules may be used | may be of multiple formats. In some cases EAT submodules may be used | |||
instead of the array structure in this claim for multiple manifests. | instead of the array structure in this claim for multiple manifests. | |||
When the [CoSWID] format is used, it MUST be a payload CoSWID, not an | When the [CoSWID] format is used, it MUST be a payload CoSWID, not an | |||
evidence CoSWID. | evidence CoSWID. | |||
manifests-claim = ( | $$claims-set-claims //= ( | |||
manifests => manifests-type | manifests-label => manifests-type | |||
) | ) | |||
manifests-type = [+ $manifest-formats] | manifests-type = [+ $$manifest-formats] | |||
; Must be a CoSWID payload type | ; Must be a CoSWID payload type | |||
$manifest-formats /= bytes .cbor concise-swid-tag | ; TODO: signed CoSWIDs | |||
coswid-that-is-a-cbor-tag-xx = tagged-coswid<concise-swid-tag> | ||||
$manifest-formats /= bytes .cbor SUIT_Envelope_Tagged | $$manifest-formats /= bytes .cbor coswid-that-is-a-cbor-tag-xx | |||
3.19. The Software Evidence Claim {swevidence} | ; TODO: make this work too | |||
;$$manifest-formats /= bytes .cbor SUIT_Envelope_Tagged | ||||
3.21. The Software Evidence Claim (swevidence) | ||||
This claim contains descriptions, lists, evidence or measurements of | This claim contains descriptions, lists, evidence or measurements of | |||
the software that exists on the device. The defining characteristic | the software that exists on the device. The defining characteristic | |||
of this claim is that its contents are created by processes on the | of this claim is that its contents are created by processes on the | |||
device that inventory, measure or otherwise characterize the software | device that inventory, measure or otherwise characterize the software | |||
on the device. The contents of this claim do not originate from the | on the device. The contents of this claim do not originate from the | |||
software manufacturer. | software manufacturer. | |||
In most cases the contents of this claim are signed as part of | In most cases the contents of this claim are signed as part of | |||
attestation signing, but independent signing in addition to the | attestation signing, but independent signing in addition to the | |||
skipping to change at page 28, line 11 ¶ | skipping to change at page 29, line 8 ¶ | |||
This claim uses the same mechanism for identification of the type of | This claim uses the same mechanism for identification of the type of | |||
the swevidence as is used for the type of the manifest in the | the swevidence as is used for the type of the manifest in the | |||
manifests claim. It also uses the same byte string based mechanism | manifests claim. It also uses the same byte string based mechanism | |||
for containing the claim and easing the hand off to a processing | for containing the claim and easing the hand off to a processing | |||
library. See the discussion above in the manifests claim. | library. See the discussion above in the manifests claim. | |||
When the [CoSWID] format is used, it MUST be evidence CoSWIDs, not | When the [CoSWID] format is used, it MUST be evidence CoSWIDs, not | |||
payload CoSWIDS. | payload CoSWIDS. | |||
swevidence-claim = ( | $$claims-set-claims //= ( | |||
swevidence => swevidence-type | swevidence-label => swevidence-type | |||
) | ) | |||
swevidence-type = [+ $swevidence-formats] | swevidence-type = [+ $$swevidence-formats] | |||
; Must be a CoSWID evidence type | ; Must be a CoSWID evidence type that is a CBOR tag | |||
$swevidence-formats /= bytes .cbor concise-swid-tag | ; TODO: fix the CDDL so a signed CoSWID is allowed too | |||
coswid-that-is-a-cbor-tag = tagged-coswid<concise-swid-tag> | ||||
$$swevidence-formats /= bytes .cbor coswid-that-is-a-cbor-tag | ||||
3.20. The Submodules Part of a Token (submods) | 3.22. The SW Measurement Results Claim (swresults) | |||
Some devices are complex, having many subsystems or submodules. A | This claims reports the outcome of the comparison of a measurement on | |||
mobile phone is a good example. It may have several connectivity | some software to the expected Reference Values. It may report a | |||
submodules for communications (e.g., Wi-Fi and cellular). It may | successful comparison, failed comparison or other. | |||
have subsystems for low-power audio and video playback. It may have | ||||
one or more security-oriented subsystems like a TEE or a Secure | ||||
Element. | ||||
The claims for each these can be grouped together in a submodule. | This claim may be generated by the Verifier and sent to the Relying | |||
Party. For example, it could be the results of the Verifier | ||||
comparing the contents of the swevidence claim to Reference Values. | ||||
The submods part of a token are in a single map/object with many | This claim can also be generated on the device if the device has the | |||
entries, one per submodule. There is only one submods map in a | ability for one subsystem to measure another subsystem. For example, | |||
token. It is identified by its specific label. It is a peer to | a TEE might have the ability to measure the software of the rich OS | |||
other claims, but it is not called a claim because it is a container | and may have the Reference Values for the rich OS. | |||
for a claim set rather than an individual claim. This submods part | ||||
of a token allows what might be called recursion. It allows claim | ||||
sets inside of claim sets inside of claims sets... | ||||
3.20.1. Two Types of Submodules | Within an attestation target or submodule, multiple results can be | |||
reported. For example, it may be desirable to report the results for | ||||
the kernel and each individual application separately. | ||||
Each entry in the submod map is one of two types: | For each software objective, the following can be reported. | |||
o A non-token submodule that is a map or object directly containing | 3.22.1. Scheme | |||
claims for the submodule. | ||||
o A nested EAT that is a fully formed, independently signed EAT | This is the free-form text name of the verification system or scheme | |||
token | that performed the verification. There is no official registry of | |||
schemes or systems. It may be the name of a commercial product or | ||||
such. | ||||
3.20.1.1. Non-token Submodules | 3.22.2. Objective | |||
This is simply a map or object containing claims about the submodule. | This roughly characterizes the coverage of the software measurement | |||
software. This corresponds to the attestation target or the | ||||
submodule. If all of the indicated target is not covered, the | ||||
measurement must indicate partial. | ||||
1 - all Indicates all the software has been verified, for example, | ||||
all the software in the attestation target or the submodule | ||||
2 - firmware Indicates all of and only the firmware | ||||
3 - kernel Refers to all of the most-privileged software, for | ||||
example the Linux kernel | ||||
4 - privileged Refers to all of the software used by the root, | ||||
system or administrative account | ||||
5 - system-libs Refers to all of the system libraries that are | ||||
broadly shared and used by applications and such | ||||
6 - partial Some other partial set of the software | ||||
3.22.3. Results | ||||
This describes the result of the measurement and also the comparison | ||||
to Reference Values. | ||||
1 - verificaton-not-run Indicates no attempt was made to run the | ||||
verification | ||||
2 - verification-indeterminite The verification was attempted, but | ||||
it did not produce a result; perhaps it ran out of memory, the | ||||
battery died or such | ||||
3 - verification-failed The verification ran to completion, the | ||||
comparison was completed and did not compare correctly to the | ||||
Reference Values | ||||
4 - fully-verified The verification ran to completion and all | ||||
measurements compared correctly to Reference Values | ||||
5 - partially-verified The verification ran to completion and some, | ||||
but not all measurements compared correctly to Reference Values | ||||
3.22.4. Objective Name | ||||
This is a free-form text string that describes the objective. For | ||||
example, "Linux kernel" or "Facebook App" | ||||
$$claims-set-claims //= (swresults-label => [ + swresult-type ]) | ||||
verification-result-cbor-type = &( | ||||
verification-not-run: 1, | ||||
verification-indeterminate: 2, | ||||
verification-failed: 3, | ||||
fully-verified: 4, | ||||
partially-verified: 5, | ||||
) | ||||
verification-result-json-type = | ||||
"verification-not-run" / | ||||
"verification-indeterminate" / | ||||
"verification-failed" / | ||||
"fully-verified" / | ||||
"partially-verified" | ||||
verification-objective-cbor-type = &( | ||||
all: 1, | ||||
firmware: 2, | ||||
kernel: 3, | ||||
privileged: 4, | ||||
system-libs: 5, | ||||
partial: 6, | ||||
) | ||||
verification-objective-json-type = | ||||
"all" / | ||||
"firmware" / | ||||
"kernel" / | ||||
"privileged" / | ||||
"system-libs" / | ||||
"partial" | ||||
swresult-type = [ | ||||
verification-system: tstr, | ||||
objective: verification-objective-cbor-type / | ||||
verification-objective-json-type, | ||||
result: verification-result-cbor-type / | ||||
verification-result-json-type, | ||||
? objective-name: tstr | ||||
] | ||||
3.23. Submodules (submods) | ||||
Some devices are complex, having many subsystems. A mobile phone is | ||||
a good example. It may have several connectivity subsystems for | ||||
communications (e.g., Wi-Fi and cellular). It may have subsystems | ||||
for low-power audio and video playback. It may have one or more | ||||
security-oriented subsystems like a TEE or a Secure Element. | ||||
The claims for a subsystem can be grouped together in a submodule or | ||||
submod. | ||||
The submods are in a single map/object, one entry per submodule. | ||||
There is only one submods map/object in a token. It is identified by | ||||
its specific label. It is a peer to other claims, but it is not | ||||
called a claim because it is a container for a claims set rather than | ||||
an individual claim. This submods part of a token allows what might | ||||
be called recursion. It allows claims sets inside of claims sets | ||||
inside of claims sets... | ||||
3.23.1. Submodule Types | ||||
The following sections define the three major types of submodules: | ||||
o A submodule Claims-Set | ||||
o A nested token, which can be any valid EAT token, CBOR or JSON | ||||
o The digest of a detached Claims-Set | ||||
These are distinguished primarily by their data type which may be a | ||||
map/object, string or array. | ||||
3.23.1.1. Submodule Claims-Set | ||||
This is simply a subordinate Claims-Set containing claims about the | ||||
submodule. | ||||
The submodule claims-set is produced by the same Attester as the | ||||
surrounding token. It is secured using the same mechanism as the | ||||
enclosing token (e.g., it is signed by the same attestation key). It | ||||
roughly corresponds to an Attester Target Environment as described in | ||||
the RATS architecture. | ||||
It may contain claims that are the same as its surrounding token or | It may contain claims that are the same as its surrounding token or | |||
superior submodules. For example, the top-level of the token may | superior submodules. For example, the top-level of the token may | |||
have a UEID, a submod may have a different UEID and a further | have a UEID, a submod may have a different UEID and a further | |||
subordinate submodule may also have a UEID. | subordinate submodule may also have a UEID. | |||
It is signed/encrypted along with the rest of the token and thus the | The encoding of a submodule Claims-Set is always the same as the | |||
claims are secured by the same Attester with the same signing key as | encoding as the token it is part of. | |||
the rest of the token. | ||||
If a token is in CBOR format (a CWT or a UCCS), all non-token | This data type for this type of submodule is a map/object as that is | |||
submodules must be CBOR format. If a token in in JSON format (a | the type of a Claims-Set. | |||
JWT), all non-token submodules must be in JSON format. | ||||
When decoding, this type of submodule is recognized from the other | 3.23.1.2. Nested Token | |||
type by being a data item of type map for CBOR or type object for | ||||
JSON. | ||||
3.20.1.2. Nested EATs | This type of submodule is a fully formed complete token. It is | |||
typically produced by a separate Attester. It is typically used by a | ||||
Composite Device as described in RATS Architecture | ||||
[RATS.Architecture] | ||||
This type of submodule is a fully formed secured EAT as defined in | In being a submodule of the surrounding token, it is | |||
this document except that it MUST NOT be a UCCS or an unsecured JWT. | cryptographically bound to the surrounding token. If it was conveyed | |||
A nested token that is one that is always secured using COSE or JOSE, | in parallel with the surrounding token, there would be no such | |||
usually by an independent Attester. When the surrounding EAT is a | binding and attackers could substitute a good attestation from | |||
CWT or secured JWT, the nested token becomes securely bound with the | another device for the attestation of an errant subsystem. | |||
other claims in the surrounding token. | ||||
It is allowed to have a CWT as a submodule in a JWT and vice versa, | A nested token does NOT need to use the same encoding as the | |||
but this SHOULD be avoided unless necessary. | enclosing token. This is to allow Composite Devices to be built | |||
without regards to the encoding supported by their Attesters. | ||||
3.20.1.2.1. Surrounding EAT is CBOR format | Thus a CBOR-encoded token like a CWT or UCCS can have a JWT as a | |||
nested token submodule and a JSON-encoded token can have a CWT or | ||||
UCCS as a nested token submodule. | ||||
They type of an EAT nested in a CWT is determined by whether the CBOR | The data type for this type of submodule is either a text or byte | |||
type is a text string or a byte string. If a text string, then it is | string. | |||
a JWT. If a byte string, then it is a CWT. | ||||
A CWT nested in a CBOR-format token is always wrapped by a byte | Mechanisms are defined for identifying the encoding and type of the | |||
string for easier handling with standard CBOR decoders and token | nested token. These mechanisms are different for CBOR and JSON | |||
processing APIs that will typically take a byte buffer as input. | encoding. The type of a CBOR-encoded nested token is identified | |||
using the CBOR tagging mechanism and thus is in common with | ||||
identification used when any CBOR-encoded token is part of a CBOR- | ||||
based protocol. A new simple type mechanism is defined for | ||||
indication of the type of a JSON-encoded token since there is no JSON | ||||
equivalent of tagging. | ||||
Nested CWTs may be either a CWT CBOR tag or a CWT Protocol Message. | 3.23.1.2.1. Surrounding EAT is CBOR-Encoded | |||
COSE layers in nested CWT EATs MUST be a COSE_Tagged_Message, never a | ||||
COSE_Untagged_Message. If a nested EAT has more than one level of | ||||
COSE, for example one that is both encrypted and signed, a | ||||
COSE_Tagged_message must be used at every level. | ||||
3.20.1.2.2. Surrounding EAT is JSON format | If the submodule is a byte string, then the nested token is CBOR- | |||
encoded. The byte string always wraps a token that is a tag. The | ||||
tag identifies whether the nested token is a CWT, a UCCS or a CBOR- | ||||
encoded DEB. | ||||
When a CWT is nested in a JWT, it must be as a 55799 tag in order to | If the submodule is a text string, then the nested token is JSON- | |||
distinguish it from a nested JWT. | encoded. The text string contains JSON. That JSON is the exactly | |||
the JSON described in the next section with one exception. The token | ||||
can't be CBOR-encoded. | ||||
When a nested EAT in a JWT is decoded, first remove the base64url | ; This specifies how one fully-formed token is nested inside a | |||
encoding. Next, check to see if it starts with the bytes 0xd9d9f7. | ; CBOR-format token. The fully-formed nested token is any valid | |||
If so, then it is a CWT as a JWT will never start with these four | ; token, CBOR or JSON (JWT, CWT, UCCS, DEB...) The mechanism for | |||
bytes. If not if it is a JWT. | ; identifying the type of the nested token is specific to the format | |||
; of the surrounding token, CBOR in this case. | ||||
; | ||||
; A primary reason this is encoding-specific is that JSON does not | ||||
; have an equivalent to CBOR tags. | ||||
; | ||||
; If the data type here is text, then the nested token is JSON | ||||
; format, one of a JWT, UJCS or JSON-encoded DEB. The means for | ||||
; distinguishing which is in the definition of JSON-encoded | ||||
; Nested-Token. If the data type is bstr, then the nested token | ||||
; is CBOR format. It is byte-string wrapped and identified by a | ||||
;CBOR tag. | ||||
Other than the 55799 tag requirement, tag usage for CWT's nested in a | Nested-Token = | |||
JSON format token follow the same rules as for CWTs nested in CBOR- | tstr / ; A JSON-encoded Nested-Token (see json-nested-token.cddl) | |||
format tokens. It may be a CWT CBOR tag or a CWT Protocol Message | bstr .cbor Tagged-CBOR-Token | |||
and COSE_Tagged_Message MUST be used at all COSE layers. | ||||
3.20.1.3. Unsecured JWTs and UCCS Tokens as Submodules | 3.23.1.2.2. Surrounding EAT is JSON-Encoded | |||
To incorporate a UCCS token as a submodule, it MUST be as a non-token | A nested token in a JSON-encoded token is an array of two items. The | |||
submodule. This can be accomplished inserting the content of the | first is a string that indicates the type of the second item as | |||
UCCS Tag into the submodule map. The content of a UCCS tag is | follows: | |||
exactly a map of claims as required for a non-token submodule. If | ||||
the UCCS is not a UCCS tag, then it can just be inserted into the | ||||
submodule map directly. | ||||
The definition of a nested EAT type of submodule is that it is one | "JWT" A JWT formatted according to [RFC7519] | |||
that is secured (signed) by an Attester. Since UCCS tokens are | ||||
unsecured, they do not fulfill this definition and must be non-token | ||||
submodules. | ||||
To incorporate an Unsecured JWT as a submodule, the null-security | "CBOR" Some base64url-encoded CBOR that is a tag that is either a | |||
JOSE wrapping should be removed. The resulting claims set should be | CWT, UCCS or CBOR-encoded DEB | |||
inserted as a non-token submodule. | ||||
To incorporate a UCCS token in a surrounding JSON token, the UCCS | "UJCS" A UJCS-Message. (A UJCS-Message is identical to a JSON- | |||
token claims should be translated from CBOR to JSON. To incorporate | encoded Claims-Set) | |||
an Unsecured JWT into a surrounding CBOR-format token, the null- | ||||
security JOSE should be removed and the claims translated from JSON | ||||
to CBOR. | ||||
3.20.2. No Inheritance | "DEB" A JSON-encoded Detached EAT Bundle. | |||
; This describes a nested token that occurs inside a JSON-encoded | ||||
; token. It uses an array that is made up of a type indicator and the | ||||
; actual token. This is a substitute for the CBOR tag mechanism that | ||||
; JSON does not have. | ||||
Nested-Token = [ | ||||
type : "JWT" / "CBOR" / "UJCS" / "DEB", | ||||
nested-token : JWT-Message / | ||||
B64URL-Tagged-CBOR-Token / | ||||
DEB-JSON-Message / | ||||
UJCS-Message | ||||
] | ||||
; This text is a Tagged-CBOR-Token (see cbor-token.cddl) that is | ||||
; base64url encoded. For example, it is a CWT that is a COSE_Sign1 | ||||
; that is a CBOR tag that has been base64url encoded. | ||||
B64URL-Tagged-CBOR-Token = tstr .regexp "[A-Za-z0-9_=-]+" | ||||
3.23.1.3. Detached Submodule Digest | ||||
This is type of submodule equivalent to a Claims-Set submodule, | ||||
except the Claims-Set is conveyed separately outside of the token. | ||||
This type of submodule consists of a digest made using a | ||||
cryptographic hash of a Claims-Set. The Claims-Set is not included | ||||
in the token. It is conveyed to the Verifier outside of the token. | ||||
The submodule containing the digest is called a detached digest. The | ||||
separately conveyed Claims-Set is called a detached claims set. | ||||
The input to the digest is exactly the byte-string wrapped encoded | ||||
form of the Claims-Set for the submodule. That Claims-Set can | ||||
include other submodules including nested tokens and detached | ||||
digests. | ||||
The primary use for this is to facilitate the implementation of a | ||||
small and secure attester, perhaps purely in hardware. This small, | ||||
secure attester implements COSE signing and only a few claims, | ||||
perhaps just UEID and hardware identification. It has inputs for | ||||
digests of submodules, perhaps 32-byte hardware registers. Software | ||||
running on the device constructs larger claim sets, perhaps very | ||||
large, encodes them and digests them. The digests are written into | ||||
the small secure attesters registers. The EAT produced by the small | ||||
secure attester only contains the UEID, hardware identification and | ||||
digests and is thus simple enough to be implemented in hardware. | ||||
Probably, every data item in it is of fixed length. | ||||
The integrity protection for the larger Claims Sets will not be as | ||||
secure as those originating in hardware block, but the key material | ||||
and hardware-based claims will be. It is possible for the hardware | ||||
to enforce hardware access control (memory protection) on the digest | ||||
registers so that some of the larger claims can be more secure. For | ||||
example, one register may be writable only by the TEE, so the | ||||
detached claims from the TEE will have TEE-level security. | ||||
The data type for this type of submodule is an array It contains two | ||||
data items, an algorithm identifier and a byte string containing the | ||||
digest. | ||||
A DEB, described in Section 5, may be used to convey detached claims | ||||
sets and the token with their detached digests. EAT, however, | ||||
doesn't require use of a DEB. Any other protocols may be used to | ||||
convey detached claims sets and the token with their detached | ||||
digests. Note that since detached Claims-Sets are usually signed, | ||||
protocols conveying them must make sure they are not modified in | ||||
transit. | ||||
3.23.2. No Inheritance | ||||
The subordinate modules do not inherit anything from the containing | The subordinate modules do not inherit anything from the containing | |||
token. The subordinate modules must explicitly include all of their | token. The subordinate modules must explicitly include all of their | |||
claims. This is the case even for claims like the nonce and age. | claims. This is the case even for claims like the nonce. | |||
This rule is in place for simplicity. It avoids complex inheritance | This rule is in place for simplicity. It avoids complex inheritance | |||
rules that might vary from one type of claim to another. | rules that might vary from one type of claim to another. | |||
3.20.3. Security Levels | 3.23.3. Security Levels | |||
The security level of the non-token subordinate modules should always | The security level of the non-token subordinate modules should always | |||
be less than or equal to that of the containing modules in the case | be less than or equal to that of the containing modules in the case | |||
of non-token submodules. It makes no sense for a module of lesser | of non-token submodules. It makes no sense for a module of lesser | |||
security to be signing claims of a module of higher security. An | security to be signing claims of a module of higher security. An | |||
example of this is a TEE signing claims made by the non-TEE parts | example of this is a TEE signing claims made by the non-TEE parts | |||
(e.g. the high-level OS) of the device. | (e.g. the high-level OS) of the device. | |||
The opposite may be true for the nested tokens. They usually have | The opposite may be true for the nested tokens. They usually have | |||
their own more secure key material. An example of this is an | their own more secure key material. An example of this is an | |||
embedded secure element. | embedded secure element. | |||
3.20.4. Submodule Names | 3.23.4. Submodule Names | |||
The label or name for each submodule in the submods map is a text | The label or name for each submodule in the submods map is a text | |||
string naming the submodule. No submodules may have the same name. | string naming the submodule. No submodules may have the same name. | |||
3.20.5. submods CDDL | 3.23.5. CDDL for submods | |||
; The part of a token that contains all the submodules. It is a peer | ||||
; with the claims in the token, but not a claim, only a map/object to | ||||
; hold all the submodules. | ||||
submods-part = ( | ; This is the part of a token that contains all the submodules. It | |||
submods => submods-type | ; is a peer with the claims in the token, but not a claim, only a | |||
) | ; map/object to hold all the submodules. | |||
submods-type = { + submod-type } | $$claims-set-claims //= (submods-label => { + text => Submodule }) | |||
; The type of a submodule which can either be a nested claim set or a | ; A submodule can be: | |||
; nested separately signed token. Nested tokens are wrapped in a bstr | ; - A simple Claims-Set (encoded in the same format as the token) | |||
; or a tstr. | ; - A digest of a detached Claims-Set (encoded in the same format as | |||
; the token) | ||||
; - A nested token which may be either CBOR or JSON format. Further, | ||||
; the mechanism for identifying and containing the nested token | ||||
; depends on the format of the surrounding token, particularly | ||||
; because JSON doesn't have any equivalent of a CBOR tag so a | ||||
; JSON-specific mechanism is invented. Also, there is the issue | ||||
; that binary data must be B64 encoded when carried in | ||||
; JSON. Nested-Token is defined in the format specific CDDL, not | ||||
; here. | ||||
submod-type = ( | ; Note that at nested token can either be a signed token like a CWT | |||
submod-name => eat-claim-set / nested-token | ; or JWT, an unsigned token like a UCCS or UJCS, or a DEB (detached | |||
) | ; EAT bundle). The specific encoding of these is format-specific | |||
; so it doesn't appear here. | ||||
; When this is a bstr, the contents are an eat-token in CWT or UCCS | Submodule = Claims-Set / Nested-Token / Detached-Submodule-Digest | |||
; format. When this is a tstr, the contents are an eat-token in JWT | ||||
; format. | ||||
nested-token = bstr / tstr; | ; This is for both JSON and CBOR. JSON uses text label for | |||
; algorithm from JOSE registry. CBOR uses integer label for | ||||
; algorithm from COSE registry. In JSON the digest is base64 | ||||
; encoded. | ||||
; Each submodule has a unique text string name. | Detached-Submodule-Digest = [ | |||
algorithm : int / text, | ||||
digest : bstr | ||||
] | ||||
submod-name = tstr | 4. Unprotected JWT Claims-Sets | |||
4. Endorsements and Verification Keys | This is simply the JSON equivalent of an Unprotected CWT Claims-Set | |||
[UCCS.Draft]. | ||||
It has no protection of its own so protections must be provided by | ||||
the protocol carrying it. These are extensively discussed in | ||||
[UCCS.Draft]. All the security discussion and security | ||||
considerations in [UCCS.Draft] apply to UJCS. | ||||
(Note: The EAT author is open to this definition being moved into the | ||||
UCCS draft, perhaps along with the related CDDL. It is place here | ||||
for now so that the current UCCS draft plus this document are | ||||
complete. UJCS is needed for the same use cases that a UCCS is | ||||
needed. Further, JSON will commonly be used to convey Attestation | ||||
Results since JSON is common for server to server communications. | ||||
Server to server communications will often have established security | ||||
(e.g., TLS) therefore the signing and encryption from JWS and JWE are | ||||
unnecssary and burdensome). | ||||
5. Detached EAT Bundles | ||||
A detached EAT bundle is a structure to convey a fully-formed and | ||||
signed token plus detached claims set that relate to that token. It | ||||
is a top-level EAT message like a CWT, JWT, UCCS and UJCS. It can be | ||||
used any place that CWT, JWT, UCCS or UJCS messages are used. It may | ||||
also be sent as a submodule. | ||||
A DEB has two main parts. | ||||
The first part is a full top-level token. This top-level token must | ||||
have at least one submodule that is a detached digest. This top- | ||||
level token may be either CBOR or JSON-encoded. It may be a CWT, | ||||
JWT, UCCS or UJCS, but not a DEB. The same mechanism for | ||||
distinguishing the type for nested token submodules is used here. | ||||
The second part is a map/object containing the detached Claims-Sets | ||||
corresponding to the detached digests in the full token. When the | ||||
DEB is CBOR-encoded, each Claims-Set is wrapped in a byte string. | ||||
When the DEB is JSON-encoded, each Claims-Set is base64url encoded. | ||||
All the detached Claims-Sets MUST be encoded in the same format as | ||||
the DEB. No mixing of encoding formats is allowed for the Claims- | ||||
Sets in a DEB. | ||||
For CBOR-encoded DEBs, tag TBD602 can be used to identify it. The | ||||
normal 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 distinguish it from the | ||||
other types of nested tokens. | ||||
The digests of the detached claims sets are associated with detached | ||||
claims-sets by label/name. It is up to the constructor of the | ||||
detached EAT bundle to ensure the names uniquely identify the | ||||
detached claims sets. Since the names are used only in the detached | ||||
EAT bundle, they can be very short, perhaps one byte. | ||||
; Top-level definition of a DEB for CBOR and JSON | ||||
Detached-EAT-Bundle = [ | ||||
main-token : Nested-Token, | ||||
detached-claims-sets: { | ||||
+ tstr => cbor-wrapped-claims-set / json-wrapped-claims-set | ||||
} | ||||
] | ||||
; text content is a base64url encoded JSON-format Claims-Set | ||||
json-wrapped-claims-set = tstr .regexp "[A-Za-z0-9_=-]+" | ||||
cbor-wrapped-claims-set = bstr .cbor Claims-Set | ||||
6. 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/ | |||
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 like Direct Anonymous | |||
Attestation (DAA). | Attestation (DAA). | |||
RATS Architecture [RATS.Architecture] describes what is called an | RATS Architecture [RATS.Architecture] describes what is called an | |||
Endorsement. This is an input to the Verifier that is usually the | Endorsement. This is an input to the Verifier that is usually the | |||
basis of the trust placed in an EAT and the Attester that generated | basis of the trust placed in an EAT and the Attester that generated | |||
it. It may contain the public key for verification of the signature | it. It may contain the public key for verification of the signature | |||
skipping to change at page 33, line 26 ¶ | skipping to change at page 41, line 15 ¶ | |||
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,...) of a | |||
particular end-end attestation system to reliably interoperate, its | particular end-end attestation system to reliably interoperate, its | |||
definition should specify how the verification key is identified. | 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. | |||
4.1. Identification Methods | 6.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. | |||
4.1.1. COSE/JWS Key ID | 6.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 | |||
[RFC8152] and [RFC7515] | [RFC8152] 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 | |||
KDF, an authority key identifier (AKI) for an X.509 certificate or | KDF, an authority key identifier (AKI) for an X.509 certificate or | |||
other. The profile document should specify what the key ID's | other. The profile document should specify what the key ID's | |||
semantics are. | semantics are. | |||
4.1.2. JWS and COSE X.509 Header Parameters | 6.1.2. JWS and COSE X.509 Header Parameters | |||
COSE X.509 [COSE.X509.Draft] and JSON Web Siganture [RFC7515] define | COSE X.509 [COSE.X509.Draft] and JSON Web Siganture [RFC7515] define | |||
several header parameters (x5t, x5u,...) for referencing or carrying | several header parameters (x5t, x5u,...) for referencing or carrying | |||
X.509 certificates any of which may be used. | X.509 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. It is up to the attestation system design and the | |||
Verifier to determine which. | Verifier to determine which. | |||
4.1.3. CBOR Certificate COSE Header Parameters | 6.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.Cert.Draft]. These are semantically compatible | |||
with X.509 and therefore can be used as an equivalent to X.509 as | with 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,...). | |||
4.1.4. Claim-Based Key Identification | 6.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 re-used as a key | |||
identifier. For example, the UEID uniquely identifies the device and | identifier. For example, the UEID uniquely identifies the device 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 | This has the advantage that key identification requires no additional | |||
bytes in the EAT and makes the EAT smaller. | bytes in the EAT and makes the EAT smaller. | |||
This has the disadvantage that the unverified EAT must be | This has the disadvantage 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. | |||
4.2. Other Considerations | 6.2. Other Considerations | |||
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 is | |||
itself verified or determined to be trustworthy. The key | itself verified or determined to be trustworthy. The key | |||
identification itself is never enough. This will always be by some | identification itself is never enough. This will always be by some | |||
out-of-band mechanism that is not described here. For example, the | out-of-band mechanism that is not described here. For example, the | |||
Verifier may be configured with a root certificate or a master key by | Verifier may be configured with a root certificate or a master key by | |||
the Verifier system administrator. | the Verifier 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 Values. | key usage constraints and an Endorsement might have Reference Values. | |||
When this is the case, the key identifier must be either a protected | When this is the case, the key identifier must be either a protected | |||
header or in the payload such that it is cryptographically bound to | header or in the payload such that it is cryptographically bound to | |||
the EAT. This is in line with the requirements in section 6 on Key | the EAT. This is in line with the requirements in section 6 on Key | |||
Identification in JSON Web Signature [RFC7515]. | Identification in JSON Web Signature [RFC7515]. | |||
5. Profiles | 7. Profiles | |||
This EAT specification does not gaurantee that implementations of it | This EAT specification does not gaurantee that implementations of it | |||
will interoperate. The variability in this specification is | will interoperate. The variability in this specification is | |||
necessary to accommodate the widely varying use cases. An EAT | necessary to accommodate the widely varying use cases. An EAT | |||
profile narrows the specification for a specific use case. An ideal | profile narrows the specification for a specific use case. An ideal | |||
EAT profile will gauarantee interoperability. | EAT profile will guarantee interoperability. | |||
The profile can be named in the token using the profile claim | The profile can be named in the token using the profile claim | |||
described in Section 3.17. | described in Section 3.18. | |||
5.1. Format of a Profile Document | A profile can apply to Attestation Evidence or to Attestation Results | |||
or both. | ||||
7.1. Format of a Profile Document | ||||
A profile document doesn't have to be in any particular format. It | A profile document doesn't 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. | |||
In some cases CDDL may be created that replaces CDDL in this or other | In some cases CDDL may be created that replaces CDDL in this or other | |||
document to express some profile requirements. For example, to | document to express some profile requirements. For example, to | |||
require the altitude data item in the location claim, CDDL can be | require the altitude data item in the location claim, CDDL can be | |||
written that replicates the location claim with the altitude no | written that replicates the location claim with the altitude no | |||
longer optional. | longer optional. | |||
5.2. List of Profile Issues | 7.2. List of Profile Issues | |||
The following is a list of EAT, CWT, UCCS, JWS, COSE, JOSE and CBOR | The following is a list of EAT, CWT, UCCS, JWS, UJCS, COSE, JOSE and | |||
options that a profile should address. | CBOR options that a profile should address. | |||
5.2.1. Use of JSON, CBOR or both | 7.2.1. Use of JSON, CBOR or both | |||
The profile should indicate whether the token format should be CBOR, | The profile should indicate whether the token format should be CBOR, | |||
JSON, both or even some other encoding. If some other encoding, a | JSON, both or even some other encoding. If some other encoding, a | |||
specification for how the CDDL described here is serialized in that | specification for how the CDDL described here is serialized in that | |||
encoding is necessary. | encoding is necessary. | |||
This should be addressed for the top-level token and for any nested | This should be addressed for the top-level token and for any nested | |||
tokens. For example, a profile might require all nested tokens to be | tokens. For example, a profile might require all nested tokens to be | |||
of the same encoding of the top level token. | of the same encoding of the top level token. | |||
5.2.2. CBOR Map and Array Encoding | 7.2.2. CBOR Map and Array Encoding | |||
The profile should indicate whether definite-length arrays/maps, | The profile should indicate whether definite-length arrays/maps, | |||
indefinite-length arrays/maps or both are allowed. A good default is | indefinite-length arrays/maps or both are allowed. A good default is | |||
to allow only definite-length arrays/maps. | to allow only definite-length arrays/maps. | |||
An alternate is to allow both definite and indefinite-length arrays/ | An alternate is to allow both definite and indefinite-length arrays/ | |||
maps. The decoder should accept either. Encoders that need to fit | maps. The decoder should accept either. Encoders that need to fit | |||
on very small hardware or be actually implement in hardware can use | on very small hardware or be actually implement in hardware can use | |||
indefinite-length encoding. | indefinite-length encoding. | |||
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. | |||
5.2.3. CBOR String Encoding | 7.2.3. CBOR String Encoding | |||
The profile should indicate whether definite-length strings, | The profile should indicate whether definite-length strings, | |||
indefinite-length strings or both are allowed. A good default is to | indefinite-length strings or both are allowed. A good default is to | |||
allow only definite-length strings. As with map and array encoding, | allow only definite-length strings. As with map and array encoding, | |||
allowing indefinite-length strings can be beneficial for some smaller | allowing indefinite-length strings can be beneficial for some smaller | |||
implementations. | implementations. | |||
5.2.4. CBOR Preferred Serialization | 7.2.4. CBOR Preferred Serialization | |||
The profile should indicate whether encoders must use preferred | The profile should indicate whether encoders must use preferred | |||
serialization. The profile should indicate whether decoders must | serialization. The profile should indicate whether decoders must | |||
accept non-preferred serialization. | accept non-preferred serialization. | |||
5.2.5. COSE/JOSE Protection | 7.2.5. 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. EAT/CWT has the option to have no protection using UCCS | messages. EAT/CWT has the option to have no protection using UCCS | |||
and JOSE has a NULL protection option. It is possible to implement | and JOSE has a NULL protection option. It is possible to implement | |||
no protection, sign only, MAC only, sign then encrypt and so on. All | no protection, sign only, MAC only, sign then encrypt and so on. All | |||
combinations allowed by COSE, JOSE, JWT, CWT and UCCS are allowed by | combinations allowed by COSE, JOSE, JWT, CWT, UCCS and UJCS are | |||
EAT. | allowed by EAT. | |||
The profile should list the protections that must be supported by all | The profile should list the protections that must be supported by all | |||
decoders implementing the profile. The encoders them must implement | decoders implementing the profile. The encoders them must implement | |||
a subset of what is listed for the decoders, perhaps only one. | a subset of what is listed for the decoders, perhaps only one. | |||
Implementations may choose to sign or MAC before encryption so that | Implementations may choose to sign or MAC before encryption so that | |||
the implementation layer doing the signing or MACing can be the | the implementation layer doing the signing or MACing can be the | |||
smallest. It is often easier to make smaller implementations more | smallest. It is often easier to make smaller implementations more | |||
secure, perhaps even implementing in solely in hardware. The key | secure, perhaps even implementing in solely in hardware. The key | |||
material for a signature or MAC is a private key, while for | material for a signature or MAC is a private key, while for | |||
encryption it is likely to be a public key. The key for encryption | encryption it is likely to be a public key. The key for encryption | |||
requires less protection. | requires less protection. | |||
5.2.6. COSE/JOSE Algorithms | 7.2.6. COSE/JOSE Algorithms | |||
The profile document should list the COSE algorithms that a Verifier | The profile document should list the COSE algorithms that a Verifier | |||
must implement. The Attester will select one of them. Since there | must implement. The Attester will select one of them. Since there | |||
is no negotiation, the Verifier should implement all algorithms | is no negotiation, the Verifier should implement all algorithms | |||
listed in the profile. | listed in the profile. If detached submodules are used, the COSE | |||
algorithms allowed for their digests should also be in the profile. | ||||
5.2.7. Verification Key Identification | 7.2.7. DEB Support | |||
Section Section 4 describes a number of methods for identifying a | A Detatched EAT Bundle Section 5 is a special case message that will | |||
not often be used. A profile may prohibit its use. | ||||
7.2.8. Verification Key Identification | ||||
Section Section 6 describes a number of methods for identifying a | ||||
verification key. The profile document should specify one of these | verification key. The profile document should specify one of these | |||
or one that is not described. The ones described in this document | or one that is not described. The ones described in this document | |||
are only roughly described. The profile document should go into the | are only roughly described. The profile document should go into the | |||
full detail. | full detail. | |||
5.2.8. Endorsement Identification | 7.2.9. 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, where as key identification is not. | optional, where as key identification is not. | |||
5.2.9. Freshness | 7.2.10. Freshness | |||
Just about every use case will require some means of knowing the EAT | Just about every use case will require some means of knowing the EAT | |||
is recent enough and not a replay of an old token. The profile | is recent enough and not a replay of an old token. The profile | |||
should describe how freshness is achieved. The section on Freshness | should describe how freshness is achieved. The section on Freshness | |||
in [RATS-Architecture] describes some of the possible solutions to | in [RATS.Architecture] describes some of the possible solutions to | |||
achieve this. | achieve this. | |||
5.2.10. Required Claims | 7.2.11. Required Claims | |||
The profile can list claims whose absence results in Verification | The profile can list claims whose absence results in Verification | |||
failure. | failure. | |||
5.2.11. Prohibited Claims | 7.2.12. Prohibited Claims | |||
The profile can list claims whose presence results in Verification | The profile can list claims whose presence results in Verification | |||
failure. | failure. | |||
5.2.12. Additional Claims | 7.2.13. Additional Claims | |||
The profile may describe entirely new claims. These claims can be | The profile may describe entirely new claims. These claims can be | |||
required or optional. | required or optional. | |||
5.2.13. Refined Claim Definition | 7.2.14. Refined Claim Definition | |||
The profile may lock down optional aspects of individual claims. For | The profile may lock down optional aspects of individual claims. For | |||
example, it may require altitude in the location claim, or it may | example, it may require altitude in the location claim, or it may | |||
require that HW Versions always be described using EAN-13. | require that HW Versions always be described using EAN-13. | |||
5.2.14. CBOR Tags | 7.2.15. 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. Similarly, the profile should specify whether the token should | not. Similarly, the profile should specify whether the token should | |||
be a UCCS tag or not. | be a UCCS tag or not. | |||
When COSE protection is used, the profile should specify whether COSE | When COSE protection is used, the profile should specify whether COSE | |||
tags are used or not. Note that RFC 8392 requires COSE tags be used | tags are used or not. Note that RFC 8392 requires COSE tags be used | |||
in a CWT tag. | in a CWT tag. | |||
Often a tag is unncessary because the surrounding or carrying | Often a tag is unncessary because the surrounding or carrying | |||
protocol identifies the object as an EAT. | protocol identifies the object as an EAT. | |||
5.2.15. Manifests and Software Evidence Claims | 7.2.16. Manifests and Software Evidence Claims | |||
The profile should specify which formats are allowed for the | The profile should specify which formats are allowed for the | |||
manifests and software evidence claims. The profile may also go on | manifests and software evidence claims. The profile may also go on | |||
to say which parts and options of these formats are used, allowed and | to say which parts and options of these formats are used, allowed and | |||
prohibited. | prohibited. | |||
6. Encoding | 8. Encoding and Collected CDDL | |||
This makes use of the types defined in CDDL Appendix D, Standard | ||||
Prelude. | ||||
Some of the CDDL included here is for claims that are defined in CWT | An EAT is fundamentally defined using CDDL. This document specifies | |||
[RFC8392] or JWT [RFC7519] or are in the IANA CWT or JWT registries. | how to encode the CDDL in CBOR or JSON. Since CBOR can express some | |||
CDDL was not in use when these claims where defined. | things that JSON can't (e.g., tags) or that are expressed differently | |||
(e.g., labels) there is some CDDL that is specific to the encoding | ||||
format. | ||||
6.1. Common CDDL Types | 8.1. Claims-Set and CDDL for CWT and JWT | |||
time-int is identical to the epoch-based time, but disallows | CDDL was not used to define CWT or JWT. It was not available at the | |||
floating-point representation. | time. | |||
Note that unless expliclity indicated, URIs are not the URI tag | This document defines CDDL for both CWT and JWT as well as UCCS. | |||
defined in [RFC8949]. They are just text strings that contain a URI. | This document does not change the encoding or semantics of anything | |||
in a CWT or JWT. | ||||
string-or-uri = tstr | A Claims-Set is the central data structure for EAT, CWT, JWT and | |||
UCCS. It holds all the claims and is the structure that is secured | ||||
by signing or other means. It is not possible to define EAT, CWT, | ||||
JWT or UCCS in CDDL without it. The CDDL definition of Claims-Set | ||||
here is applicable to EAT, CWT, JWT and UCCS. | ||||
time-int = #6.1(int) | This document specifies how to encode a Claims-Set in CBOR or JSON. | |||
6.2. CDDL for CWT-defined Claims | With the exception of nested tokens and some other externally defined | |||
structures (e.g., SWIDs) an entire Claims-Set must be in encoded in | ||||
either CBOR or JSON, never a mixture. | ||||
This section provides CDDL for the claims defined in CWT. It is non- | CDDL for the seven claims defined by [RFC8392] and [RFC7519] is | |||
normative as [RFC8392] is the authoritative definition of these | included here. | |||
claims. | ||||
Note that the subject, issue and audience claims may be a text string | 8.2. Encoding Data Types | |||
containing a URI per [RFC8392] and [RFC7519]. These are never the | ||||
URI tag defined in [RFC8949]. | ||||
$$eat-extension //= ( | This makes use of the types defined in [RFC8610] Appendix D, Standard | |||
? issuer => text, | Prelude. | |||
? subject => text, | ||||
? audience => text, | ||||
? expiration => time, | ||||
? not-before => time, | ||||
? issued-at => time, | ||||
? cwt-id => bytes, | ||||
) | ||||
issuer = 1 | 8.2.1. Common Data Types | |||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
6.3. JSON | time-int is identical to the epoch-based time, but disallows | |||
floating-point representation. | ||||
6.3.1. JSON Labels | Unless expliclity indicated, URIs are not the URI tag defined in | |||
; The following are Claim Keys (labels) assigned for JSON-encoded tokens. | [RFC8949]. They are just text strings that contain a URI. | |||
ueid /= "ueid" | string-or-uri = tstr | |||
sueids /= "sueids" | ||||
nonce /= "nonce" | ||||
oemid /= "oemid" | ||||
security-level /= "seclevel" | ||||
secure-boot /= "secboot" | ||||
debug-status /= "dbgstat" | ||||
location /= "location" | ||||
uptime /= "uptime" | ||||
profile /= "eat-profile" | ||||
intended-use /= "intuse" | ||||
boot-seed /= "bootseed" | ||||
submods /= "submods" | ||||
timestamp /= "timestamp" | ||||
manifests /= "manifests" | ||||
swevidence /= "swevidence" | ||||
latitude /= "lat" | time-int = #6.1(int) | |||
longitude /= "long" | ||||
altitude /= "alt" | ||||
accuracy /= "accry" | ||||
altitude-accuracy /= "alt-accry" | ||||
heading /= "heading" | ||||
speed /= "speed" | ||||
6.3.2. JSON Interoperability | 8.2.2. JSON Interoperability | |||
JSON should be encoded per RFC 8610 Appendix E. In addition, the | JSON should be encoded per [RFC8610] Appendix E. In addition, the | |||
following CDDL types are encoded in JSON as follows: | following CDDL types are encoded in JSON as follows: | |||
o bstr - must be base64url encoded | o bstr - must be base64url encoded | |||
o time - must be encoded as NumericDate as described section 2 of | o time - must be encoded as NumericDate as described section 2 of | |||
[RFC7519]. | [RFC7519]. | |||
o string-or-uri - must be encoded as StringOrURI as described | o string-or-uri - must be encoded as StringOrURI as described | |||
section 2 of [RFC7519]. | section 2 of [RFC7519]. | |||
o uri - must be a URI [RFC3986]. | o uri - must be a URI [RFC3986]. | |||
o oid - encoded as a string using the well established dotted- | o oid - encoded as a string using the well established dotted- | |||
decimal notation (e.g., the text "1.2.250.1"). | decimal notation (e.g., the text "1.2.250.1"). | |||
6.4. CBOR | 8.2.3. Labels | |||
6.4.1. CBOR Interoperability | Map labels, including Claims-Keys and Claim-Names, and enumerated- | |||
type values are always integers when encoding in CBOR and strings | ||||
when encoding in JSON. There is an exception to this for naming | ||||
submodules and detached claims sets in a DEB. These are strings in | ||||
CBOR. | ||||
The CDDL in most cases gives both the integer label and the string | ||||
label as it is not convenient to have conditional CDDL for such. | ||||
8.3. CBOR Interoperability | ||||
CBOR allows data items to be serialized in more than one form. If | CBOR allows data items to be serialized in more than one form. If | |||
the sender uses a form that the receiver can't decode, there will not | the sender uses a form that the receiver can't decode, there will not | |||
be interoperability. | be interoperability. | |||
This specification gives no blanket requirements to narrow CBOR | This specification gives no blanket requirements to narrow CBOR | |||
serialization for all uses of EAT. This allows individual uses to | serialization for all uses of EAT. This allows individual uses to | |||
tailor serialization to the environment. It also may result in EAT | tailor serialization to the environment. It also may result in EAT | |||
implementations that don't interoperate. | implementations that don't interoperate. | |||
One way to guarantee interoperability is to clearly specify CBOR | One way to guarantee interoperability is to clearly specify CBOR | |||
serialization in a profile document. See Section 5 for a list of | serialization in a profile document. See Section 7 for a list of | |||
serialization issues that should be addressed. | serialization issues that should be addressed. | |||
EAT will be commonly used where the device generating the attestation | EAT will be commonly used where the device generating the attestation | |||
is constrained and the receiver/verifier of the attestation is a | is constrained and the receiver/Verifier of the attestation is a | |||
capacious server. Following is a set of serialization requirements | capacious server. Following is a set of serialization requirements | |||
that work well for that use case and are guaranteed to interoperate. | that work well for that use case and are guaranteed to interoperate. | |||
Use of this serialization is recommended where possible, but not | Use of this serialization is recommended where possible, but not | |||
required. An EAT profile may just reference the following section | required. An EAT profile may just reference the following section | |||
rather than spell out serialization details. | rather than spell out serialization details. | |||
6.4.1.1. EAT Constrained Device Serialization | 8.3.1. EAT Constrained Device Serialization | |||
o Preferred serialization described in section 4.1 of [RFC8949] is | o Preferred serialization described in section 4.1 of [RFC8949] is | |||
not required. The EAT decoder must accept all forms of number | not required. The EAT decoder must accept all forms of number | |||
serialization. The EAT encoder may use any form it wishes. | serialization. The EAT encoder may use any form it wishes. | |||
o The EAT decoder must accept indefinite length arrays and maps as | o The EAT decoder must accept indefinite length arrays and maps as | |||
described in section 3.2.2 of [RFC8949]. The EAT encoder may use | described in section 3.2.2 of [RFC8949]. The EAT encoder may use | |||
indefinite length arrays and maps if it wishes. | indefinite length arrays and maps if it wishes. | |||
o The EAT decoder must accept indefinite length strings as described | o The EAT decoder must accept indefinite length strings as described | |||
skipping to change at page 42, line 5 ¶ | skipping to change at page 49, line 5 ¶ | |||
o Sorting of maps by key is not required. The EAT decoder must not | o Sorting of maps by key is not required. The EAT decoder must not | |||
rely on sorting. | rely on sorting. | |||
o Deterministic encoding described in Section 4.2 of [RFC8949] is | o Deterministic encoding described in Section 4.2 of [RFC8949] is | |||
not required. | not required. | |||
o Basic validity described in section 5.3.1 of [RFC8949] must be | o Basic validity described in section 5.3.1 of [RFC8949] must be | |||
followed. The EAT encoder must not send duplicate map keys/labels | followed. The EAT encoder must not send duplicate map keys/labels | |||
or invalid UTF-8 strings. | or invalid UTF-8 strings. | |||
6.5. Collected CDDL | 8.4. Collected Common CDDL | |||
; This is the top-level definition of the claims in EAT tokens. To | ; This is the fundamental definition of a Claims-Set for both CBOR | |||
; form an actual EAT Token, this claim set is enclosed in a COSE, JOSE | ; and JSON. It is a set of label-value pairs each of which is a | |||
; or UCCS message. | ; claim. | |||
; | ||||
; In CBOR the labels can be integers or strings with a strong | ||||
; preference for integers. For JSON, the labels are always strings. | ||||
; | ||||
; The values can be anything, with some consideration for types that | ||||
; can work in both CBOR and JSON. | ||||
eat-claim-set = { | Claims-Set = { | |||
? ueid-claim, | * $$claims-set-claims, | |||
? sueids-claim, | * Claim-Label .feature "extended-label" => any | |||
? nonce-claim, | } | |||
? oemid-claim, | ||||
? hardware-version-claims, | ||||
? security-level-claim, | ||||
? secure-boot-claim, | ||||
? debug-status-claim, | ||||
? location-claim, | ||||
? intended-use-claim, | ||||
? profile-claim, | ||||
? uptime-claim, | ||||
? manifests-claim, | ||||
? swevidence-claim, | ||||
? submods-part, | ||||
* $$eat-extension, | ||||
} | ||||
; This is the top-level definition of an EAT Token. It is a CWT, JWT | Claim-Label = int / text | |||
; or UCSS where the payload is an eat-claim-set. A JWT_Message is what | string-or-uri = tstr | |||
; is defined by JWT in RFC 7519. (RFC 7519 doesn't use CDDL so a there | ||||
; is no actual CDDL definition of JWT_Message). | ||||
eat-token = EAT_Tagged_Message / EAT_Untagged_Message / JWT_Message | time-int = #6.1(int) | |||
; This is CDDL for the 7 individual claims that are defined in CWT | ||||
; and JWT. This CDDL works for either CBOR format CWT or JSON format | ||||
; JWT The integer format CWT Claim Keys (the labels) are defined in | ||||
; cwt-labels.cddl. The string format JWT Claim Names (the labels) | ||||
; are defined in jwt-labels.cddl. | ||||
; This is CBOR-format EAT token in the CWT or UCCS format that is a | ; $$claims-set-claims is defined in claims-set.cddl | |||
; tag. COSE_Tagged_message is defined in RFC 8152. Tag 601 is | ||||
; proposed by the UCCS draft, but not yet assigned. | ||||
EAT_Tagged_Message = #6.61(COSE_Tagged_Message) / #6.601(eat-claim-set) | $$claims-set-claims //= (iss-label => text) | |||
$$claims-set-claims //= (sub-label => text) | ||||
$$claims-set-claims //= (aud-label => text) | ||||
$$claims-set-claims //= (exp-label => ~time) | ||||
$$claims-set-claims //= (nbf-label => ~time) | ||||
$$claims-set-claims //= (iat-label => ~time) | ||||
; This is a CBOR-format EAT token that is a CWT or UCSS that is not a | ; TODO: how does the bstr get handled in JSON validation with the | |||
; tag COSE_Tagged_message and COSE_Untagged_Message are defined in RFC | ; cddl tool? TODO: should this be a text for JSON? | |||
; 8152. | ; $$claims-set-claims //= (cti-label : bytes) | |||
$$claims-set-claims //= | ||||
(nonce-label => nonce-type / [ 2* nonce-type ]) | ||||
EAT_Untagged_Message = COSE_Tagged_Message / COSE_Untagged_Message / UCCS_Untagged_Message | nonce-type = bstr .size (8..64) | |||
; This is an "unwrapped" UCCS tag. Unwrapping a tag means to use the | ||||
; definition of its content without the preceding type 6 tag | ||||
; integer. Since a UCCS is nothing but a tag for an unsecured CWT | ||||
; claim set, unwrapping reduces to a bare eat-claim-set. | ||||
UCCS_Untagged_Message = eat-claim-set | $$claims-set-claims //= (ueid-label => ueid-type) | |||
string-or-uri = tstr | ueid-type = bstr .size (7..33) | |||
$$claims-set-claims //= (sueids-label => sueids-type) | ||||
sueids-type = { | ||||
+ tstr => ueid-type | ||||
} | ||||
time-int = #6.1(int) | oemid-pen = int | |||
$$eat-extension //= ( | ||||
? issuer => text, | ||||
? subject => text, | ||||
? audience => text, | ||||
? expiration => time, | ||||
? not-before => time, | ||||
? issued-at => time, | ||||
? cwt-id => bytes, | ||||
) | ||||
issuer = 1 | oemid-ieee = bstr .size 3 | |||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
debug-status-cbor-type = &( | oemid-random = bstr .size 16 | |||
enabled: 0, | ||||
disabled: 1, | ||||
disabled-since-boot: 2, | ||||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
debug-status-json-type = | $$claims-set-claims //= ( | |||
"enabled" / | oemid-label => | |||
"disabled" / | oemid-random / oemid-ieee / oemid-pen | |||
"disabled-since-boot" / | ) | |||
"disabled-permanently" / | $$claims-set-claims //= ( | |||
"disabled-fully-and-permanently" | chip-version-label => hw-version-type | |||
) | ||||
debug-status-claim = ( | $$claims-set-claims //= ( | |||
debug-status => debug-status-cbor-type / debug-status-json-type | board-version-label => hw-version-type | |||
) | ) | |||
location-type = { | ||||
latitude => number, | ||||
longitude => number, | ||||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number, | ||||
? timestamp => ~time-int, | ||||
? age => uint | ||||
} | ||||
latitude = 1 / "latitude" | $$claims-set-claims //= ( | |||
longitude = 2 / "longitude" | device-version-label => hw-version-type | |||
altitude = 3 / "altitude" | ) | |||
accuracy = 4 / "accuracy" | ||||
altitude-accuracy = 5 / "altitude-accuracy" | ||||
heading = 6 / "heading" | ||||
speed = 7 / "speed" | ||||
timestamp = 8 / "timestamp" | ||||
age = 9 / "age" | ||||
location-claim = ( | hw-version-type = [ | |||
location-label => location-type | version: tstr, | |||
) | scheme: $version-scheme | |||
nonce-type = bstr .size (8..64) | ] | |||
$$claims-set-claims //= ( sw-name-label => tstr ) | ||||
nonce-claim = ( | $$claims-set-claims //= ( | |||
nonce => nonce-type / [ 2* nonce-type ] | security-level-label => | |||
) | security-level-cbor-type / | |||
oemid-claim = ( | security-level-json-type | |||
oemid => bstr | ) | |||
) | ||||
chip-version-claim = ( | ||||
chip-version => tstr | ||||
) | ||||
chip-version-scheme-claim = ( | security-level-cbor-type = &( | |||
chip-version-scheme => $version-scheme | unrestricted: 1, | |||
) | restricted: 2, | |||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
board-version-claim = ( | security-level-json-type = | |||
board-version => tstr | "unrestricted" / | |||
) | "restricted" / | |||
"secure-restricted" / | ||||
"hardware" | ||||
$$claims-set-claims //= (secure-boot-label => bool) | ||||
$$claims-set-claims //= ( | ||||
debug-status-label => | ||||
debug-status-cbor-type / debug-status-json-type | ||||
) | ||||
board-version-scheme-claim = ( | debug-status-cbor-type = &( | |||
board-version-scheme => $version-scheme | enabled: 0, | |||
) | disabled: 1, | |||
disabled-since-boot: 2, | ||||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
device-version-claim = ( | debug-status-json-type = | |||
device-version => tstr | "enabled" / | |||
) | "disabled" / | |||
"disabled-since-boot" / | ||||
"disabled-permanently" / | ||||
"disabled-fully-and-permanently" | ||||
$$claims-set-claims //= (location-label => location-type) | ||||
device-version-scheme-claim = ( | location-type = { | |||
device-version-scheme => $version-scheme | latitude => number, | |||
) | longitude => number, | |||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number, | ||||
? timestamp => ~time-int, | ||||
? age => uint | ||||
} | ||||
hardware-version-claims = ( | latitude = 1 / "latitude" | |||
? chip-version-claim, | longitude = 2 / "longitude" | |||
? board-version-claim, | altitude = 3 / "altitude" | |||
? device-version-claim, | accuracy = 4 / "accuracy" | |||
? chip-version-scheme-claim, | altitude-accuracy = 5 / "altitude-accuracy" | |||
? board-version-scheme-claim, | heading = 6 / "heading" | |||
? device-version-scheme-claim, | speed = 7 / "speed" | |||
) | timestamp = 8 / "timestamp" | |||
age = 9 / "age" | ||||
secure-boot-claim = ( | $$claims-set-claims //= (uptime-label => uint) | |||
secure-boot => bool | $$claims-set-claims //= (boot-seed-label => bytes) | |||
) | $$claims-set-claims //= ( | |||
security-level-cbor-type = &( | intended-use-label => | |||
unrestricted: 1, | intended-use-cbor-type / intended-use-json-type | |||
restricted: 2, | ) | |||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
security-level-json-type = | intended-use-cbor-type = &( | |||
"unrestricted" / | generic: 1, | |||
"restricted" / | registration: 2, | |||
"secure-restricted" / | provisioning: 3, | |||
"hardware" | csr: 4, | |||
pop: 5 | ||||
) | ||||
security-level-claim = ( | intended-use-json-type = | |||
security-level => security-level-cbor-type / security-level-json-type | "generic" / | |||
) | "registration" / | |||
; The part of a token that contains all the submodules. It is a peer | "provisioning" / | |||
; with the claims in the token, but not a claim, only a map/object to | "csr" / | |||
; hold all the submodules. | "pop" | |||
submods-part = ( | $$claims-set-claims //= ( | |||
submods => submods-type | dloas-label => [ + dloa-type ] | |||
) | ) | |||
submods-type = { + submod-type } | dloa-type = [ | |||
dloa_registrar: ~uri | ||||
dloa_platform_label: text | ||||
? dloa_application_label: text | ||||
] | ||||
; The type of a submodule which can either be a nested claim set or a | $$claims-set-claims //= (profile-label => ~uri / ~oid) | |||
; nested separately signed token. Nested tokens are wrapped in a bstr | ||||
; or a tstr. | ||||
submod-type = ( | oid = #6.4000(bstr) ; TODO: Replace with CDDL from OID RFC | |||
submod-name => eat-claim-set / nested-token | ||||
) | ||||
; When this is a bstr, the contents are an eat-token in CWT or UCCS | $$claims-set-claims //= ( | |||
; format. When this is a tstr, the contents are an eat-token in JWT | manifests-label => manifests-type | |||
; format. | ) | |||
nested-token = bstr / tstr; | manifests-type = [+ $$manifest-formats] | |||
; Each submodule has a unique text string name. | ; Must be a CoSWID payload type | |||
; TODO: signed CoSWIDs | ||||
coswid-that-is-a-cbor-tag-xx = tagged-coswid<concise-swid-tag> | ||||
submod-name = tstr | $$manifest-formats /= bytes .cbor coswid-that-is-a-cbor-tag-xx | |||
; TODO: make this work too | ||||
;$$manifest-formats /= bytes .cbor SUIT_Envelope_Tagged | ||||
ueid-type = bstr .size (7..33) | $$claims-set-claims //= ( | |||
swevidence-label => swevidence-type | ||||
) | ||||
ueid-claim = ( | swevidence-type = [+ $$swevidence-formats] | |||
ueid => ueid-type | ||||
) | ||||
sueids-type = { | ||||
+ tstr => ueid-type | ||||
} | ||||
sueids-claim = ( | ; Must be a CoSWID evidence type that is a CBOR tag | |||
sueids => sueids-type | ; TODO: fix the CDDL so a signed CoSWID is allowed too | |||
) | coswid-that-is-a-cbor-tag = tagged-coswid<concise-swid-tag> | |||
intended-use-cbor-type = &( | $$swevidence-formats /= bytes .cbor coswid-that-is-a-cbor-tag | |||
generic: 1, | ||||
registration: 2, | ||||
provisioning: 3, | ||||
csr: 4, | ||||
pop: 5 | ||||
) | ||||
intended-use-json-type = | $$claims-set-claims //= (swresults-label => [ + swresult-type ]) | |||
"generic" / | ||||
"registration" / | ||||
"provisioning" / | ||||
"csr" / | ||||
"pop" | ||||
intended-use-claim = ( | verification-result-cbor-type = &( | |||
intended-use => intended-use-cbor-type / intended-use-json-type | verification-not-run: 1, | |||
) | verification-indeterminate: 2, | |||
oid = #6.4000(bstr) ; TODO: fill this in with correct CDDL from OID RFC | verification-failed: 3, | |||
fully-verified: 4, | ||||
partially-verified: 5, | ||||
) | ||||
uptime-claim = ( | verification-result-json-type = | |||
uptime => uint | "verification-not-run" / | |||
) | "verification-indeterminate" / | |||
"verification-failed" / | ||||
"fully-verified" / | ||||
"partially-verified" | ||||
manifests-claim = ( | verification-objective-cbor-type = &( | |||
manifests => manifests-type | all: 1, | |||
) | firmware: 2, | |||
kernel: 3, | ||||
privileged: 4, | ||||
system-libs: 5, | ||||
partial: 6, | ||||
) | ||||
manifests-type = [+ $manifest-formats] | verification-objective-json-type = | |||
"all" / | ||||
"firmware" / | ||||
"kernel" / | ||||
"privileged" / | ||||
"system-libs" / | ||||
"partial" | ||||
; Must be a CoSWID payload type | swresult-type = [ | |||
$manifest-formats /= bytes .cbor concise-swid-tag | verification-system: tstr, | |||
objective: verification-objective-cbor-type / | ||||
verification-objective-json-type, | ||||
result: verification-result-cbor-type / | ||||
verification-result-json-type, | ||||
? objective-name: tstr | ||||
] | ||||
; This is the part of a token that contains all the submodules. It | ||||
; is a peer with the claims in the token, but not a claim, only a | ||||
; map/object to hold all the submodules. | ||||
$manifest-formats /= bytes .cbor SUIT_Envelope_Tagged | $$claims-set-claims //= (submods-label => { + text => Submodule }) | |||
swevidence-claim = ( | ; A submodule can be: | |||
swevidence => swevidence-type | ; - A simple Claims-Set (encoded in the same format as the token) | |||
) | ; - A digest of a detached Claims-Set (encoded in the same format as | |||
; the token) | ||||
; - A nested token which may be either CBOR or JSON format. Further, | ||||
; the mechanism for identifying and containing the nested token | ||||
; depends on the format of the surrounding token, particularly | ||||
; because JSON doesn't have any equivalent of a CBOR tag so a | ||||
; JSON-specific mechanism is invented. Also, there is the issue | ||||
; that binary data must be B64 encoded when carried in | ||||
; JSON. Nested-Token is defined in the format specific CDDL, not | ||||
; here. | ||||
swevidence-type = [+ $swevidence-formats] | ; Note that at nested token can either be a signed token like a CWT | |||
; or JWT, an unsigned token like a UCCS or UJCS, or a DEB (detached | ||||
; EAT bundle). The specific encoding of these is format-specific | ||||
; so it doesn't appear here. | ||||
; Must be a CoSWID evidence type | Submodule = Claims-Set / Nested-Token / Detached-Submodule-Digest | |||
$swevidence-formats /= bytes .cbor concise-swid-tag | ||||
oid = #6.4000(bstr) ; TODO: fill this in with correct CDDL from OID RFC | ; This is for both JSON and CBOR. JSON uses text label for | |||
; algorithm from JOSE registry. CBOR uses integer label for | ||||
; algorithm from COSE registry. In JSON the digest is base64 | ||||
; encoded. | ||||
profile-claim = ( | Detached-Submodule-Digest = [ | |||
profile => ~uri / ~oid | algorithm : int / text, | |||
) | digest : bstr | |||
] | ||||
; Top-level definition of a DEB for CBOR and JSON | ||||
boot-seed-claim = ( | Detached-EAT-Bundle = [ | |||
boot-seed => bytes | main-token : Nested-Token, | |||
) | detached-claims-sets: { | |||
+ tstr => cbor-wrapped-claims-set / json-wrapped-claims-set | ||||
} | ||||
] | ||||
7. IANA Considerations | ; text content is a base64url encoded JSON-format Claims-Set | |||
7.1. Reuse of CBOR Web Token (CWT) Claims Registry | json-wrapped-claims-set = tstr .regexp "[A-Za-z0-9_=-]+" | |||
Claims defined for EAT are compatible with those of CWT so the CWT | cbor-wrapped-claims-set = bstr .cbor Claims-Set | |||
Claims Registry is re used. No new IANA registry is created. All | ||||
EAT claims should be registered in the CWT and JWT Claims Registries. | ||||
7.2. Claim Characteristics | 8.5. Collected CDDL for CBOR | |||
; The top-level definition of a CBOR-encoded token. | ||||
CBOR-Token = Tagged-CBOR-Token / Untagged-CBOR-Token | ||||
; All forms of a CBOR-encoded token that are a CBOR tag. | ||||
Tagged-CBOR-Token = CWT-Tagged-Message | ||||
Tagged-CBOR-Token /= UCCS-Tagged-Message | ||||
Tagged-CBOR-Token /= DEB-Tagged-Message | ||||
; All forms of a CBOR-encoded token that are not a CBOR tag. | ||||
Untagged-CBOR-Token = CWT-Untagged-Message | ||||
Untagged-CBOR-Token /= UCCS-Untagged-Message | ||||
Untagged-CBOR-Token /= DEB-Untagged-Message | ||||
; The payload of the COSE message is always a Claims-Set | ||||
CWT-Tagged-Message = COSE_Tagged_Message | ||||
CWT-Untagged-Message = COSE_Untagged_Message | ||||
UCCS-Message = UCCS-Tagged-Message / UCCS-Untagged-Message | ||||
UCCS-Tagged-Message = #6.601(UCCS-Untagged-Message) | ||||
UCCS-Untagged-Message = Claims-Set | ||||
DEB-Tagged-Message = #6.602(DEB-Untagged-Message) | ||||
DEB-Untagged-Message = Detached-EAT-Bundle | ||||
; This specifies how one fully-formed token is nested inside a | ||||
; CBOR-format token. The fully-formed nested token is any valid | ||||
; token, CBOR or JSON (JWT, CWT, UCCS, DEB...) The mechanism for | ||||
; identifying the type of the nested token is specific to the format | ||||
; of the surrounding token, CBOR in this case. | ||||
; | ||||
; A primary reason this is encoding-specific is that JSON does not | ||||
; have an equivalent to CBOR tags. | ||||
; | ||||
; If the data type here is text, then the nested token is JSON | ||||
; format, one of a JWT, UJCS or JSON-encoded DEB. The means for | ||||
; distinguishing which is in the definition of JSON-encoded | ||||
; Nested-Token. If the data type is bstr, then the nested token | ||||
; is CBOR format. It is byte-string wrapped and identified by a | ||||
;CBOR tag. | ||||
Nested-Token = | ||||
tstr / ; A JSON-encoded Nested-Token (see json-nested-token.cddl) | ||||
bstr .cbor Tagged-CBOR-Token | ||||
; This is the CDDL definition of the labels for a CBOR format web | ||||
; token, a CWT. The CDDL for the claims is in web-token-claims.cddl | ||||
iss-label = 1 | ||||
sub-label = 2 | ||||
aud-label = 3 | ||||
exp-label = 4 | ||||
nbf-label = 5 | ||||
iat-label = 6 | ||||
cti-label = 7; The following Claim Keys (labels) are pre-assigned by IANA. | ||||
; They are for CBOR-based tokens (CWT and UCCS). | ||||
; They are not expected to change in the final publication as an RFC. | ||||
nonce-label = 10 | ||||
ueid-label = 11 | ||||
oemid-label = 13 | ||||
security-level-label = 14 | ||||
secure-boot-label = 15 | ||||
debug-status-label = 16 | ||||
location-label = 17 | ||||
profile-label = 18 | ||||
submods-label = 20 | ||||
; These are not yet assigned in any way and may change. | ||||
; These are intentionally above 24 so as to not use up | ||||
; single-byte labels. | ||||
sueids-label = <TBD25> | ||||
chip-version-label = <TBD26> | ||||
board-version-label = <TBD27> | ||||
device-version-label = <TBD28> | ||||
sw-name-label = <TBD29> | ||||
sw-version-label = <TBD30> | ||||
uptime-label = <TBD31> | ||||
boot-seed-label = <TBD32> | ||||
intended-use-label = <TBD33> | ||||
dloas-label = <TBD34> | ||||
manifests-label = <TBD35> | ||||
swevidence-label = <TBD36> | ||||
swresults-label = <TBD37> | ||||
8.6. Collected CDDL for JSON | ||||
; A JWT message is either a JWS or JWE in compact serialization form | ||||
; 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 = text .regexp [A-Za-z0-9_=-]+\.[A-Za-z0-9_=-]+\.[A-Za-z0-9_=-]+ | ||||
; This defines the JSON equivalent of a UCCS message, a token with | ||||
; no integrity or authenticity protection. | ||||
UJCS-Message = Claims-Set | ||||
; This describes a nested token that occurs inside a JSON-encoded | ||||
; token. It uses an array that is made up of a type indicator and the | ||||
; actual token. This is a substitute for the CBOR tag mechanism that | ||||
; JSON does not have. | ||||
Nested-Token = [ | ||||
type : "JWT" / "CBOR" / "UJCS" / "DEB", | ||||
nested-token : JWT-Message / | ||||
B64URL-Tagged-CBOR-Token / | ||||
DEB-JSON-Message / | ||||
UJCS-Message | ||||
] | ||||
; This text is a Tagged-CBOR-Token (see cbor-token.cddl) that is | ||||
; base64url encoded. For example, it is a CWT that is a COSE_Sign1 | ||||
; that is a CBOR tag that has been base64url encoded. | ||||
B64URL-Tagged-CBOR-Token = tstr .regexp "[A-Za-z0-9_=-]+" | ||||
; This is the CDDL definition of the labels for a JSON format web | ||||
; token, a JWT. The CDDL for the claims is in web-token-claims.cddl | ||||
iss-label = "iss" | ||||
sub-label = "sub" | ||||
aud-label = "aud" | ||||
exp-label = "exp" | ||||
nbf-label = "nbf" | ||||
iat-label = "iat" | ||||
cti-label = "cti"; The following are claim names for JSON encoded tokens. | ||||
ueid-label /= "ueid" | ||||
sueids-label /= "sueids" | ||||
nonce-label /= "nonce" | ||||
oemid-label /= "oemid" | ||||
security-level-label /= "seclevel" | ||||
secure-boot-label /= "secboot" | ||||
debug-status-label /= "dbgstat" | ||||
location-label /= "location" | ||||
uptime-label /= "uptime" | ||||
profile-label /= "eat-profile" | ||||
intended-use-label /= "intuse" | ||||
boot-seed-label /= "bootseed" | ||||
submods-label /= "submods" | ||||
timestamp /= "timestamp" | ||||
manifests-label /= "manifests" | ||||
swevidence-label /= "swevidence" | ||||
dloas-label /= "dloas" | ||||
swresults-label /= "swresults" | ||||
sw-name-label /= "swname" | ||||
sw-version-label /= "swversion" | ||||
latitude /= "lat" | ||||
longitude /= "long" | ||||
altitude /= "alt" | ||||
accuracy /= "accry" | ||||
altitude-accuracy /= "alt-accry" | ||||
heading /= "heading" | ||||
speed /= "speed" | ||||
9. IANA Considerations | ||||
9.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 | ||||
the CWT and JWT Claims Registries, [IANA.CWT.Claims] and | ||||
[IANA.JWT.Claims], are re used. No new IANA registry is created. | ||||
All EAT claims defined in this document are placed in both | ||||
registries. All new EAT claims defined subsequently should be placed | ||||
in both registries. | ||||
9.2. Claim Characteristics | ||||
The following is design guidance for creating new EAT claims, | The following is design guidance for creating new EAT claims, | |||
particularly those to be registered with IANA. | particularly those to be registered with IANA. | |||
Much of this guidance is generic and could also be considered when | Much of this guidance is generic and could also be considered when | |||
designing new CWT or JWT claims. | designing new CWT or JWT claims. | |||
7.2.1. Interoperability and Relying Party Orientation | 9.2.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 the | |||
device from which they originate. It is a goal that there be | 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, encoding | |||
and serialization formats. | and serialization formats. | |||
This is a lofty goal and difficult to achieve broadly requiring | This is a lofty goal and difficult to achieve broadly requiring | |||
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. | |||
7.2.2. Operating System and Technology Neutral | 9.2.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. They should also be | |||
applicable to multiple small embedded operating systems from multiple | applicable to multiple small embedded operating systems from multiple | |||
vendors and everything in between. | vendors and everything in between. | |||
Claims should not be defined such that they are specific to a SW | Claims should not be defined such that they are specific to a SW | |||
environment or programming language. | 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. | |||
7.2.3. Security Level Neutral | 9.2.3. Security Level Neutral | |||
Many use cases will have EATs generated by some of the most secure | Many use cases will have EATs generated by some of the most secure | |||
hardware and software that exists. Secure Elements and smart cards | hardware and software that exists. Secure Elements and smart cards | |||
are examples of this. However, EAT is intended for use in low- | are examples of this. However, EAT is intended for use in low- | |||
security use cases the same as high-security use case. For example, | security use cases the same as high-security use case. For example, | |||
an app on a mobile device may generate EATs on its own. | an app on a mobile device may generate EATs on its own. | |||
Claims should be defined and registered on the basis of whether they | Claims should be defined and registered on the basis of whether they | |||
are useful and interoperable, not based on security level. In | are 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. | just used only in low-security environments. | |||
7.2.4. Reuse of Extant Data Formats | 9.2.4. Reuse of Extant Data Formats | |||
Where possible, claims should use already standardized data items, | Where possible, claims should use already standardized data items, | |||
identifiers and formats. This takes advantage of the expertise put | identifiers and formats. This takes advantage of the expertise put | |||
into creating those formats and improves interoperability. | 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 format for them so that EAT implementations do not require a | and JSON format for them so that EAT implementations do not require a | |||
plethora of encoders and decoders for serialization formats. | 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 CRLs can be | |||
carried as-is in a byte string. This retains interoperability with | carried as-is in a byte string. This retains interoperability with | |||
the extensive infrastructure for creating and processing X.509 | the extensive infrastructure for creating and processing X.509 | |||
certificates and CRLs. | certificates and CRLs. | |||
7.2.5. Proprietary Claims | 9.2.5. Proprietary Claims | |||
EAT allows the definition and use of proprietary claims. | EAT allows the definition and use of proprietary claims. | |||
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 obvious | |||
way to proceed, however for better interoperability, use of general | way to proceed, however for better interoperability, use of general | |||
standardized claims is preferred. | standardized claims is preferred. | |||
7.3. Claims Registered by This Document | 9.3. Claims Registered by This Document | |||
This specification adds the following values to the "JSON Web Token | This specification adds the following values to the "JSON Web Token | |||
Claims" registry established by [RFC7519] and the "CBOR Web Token | Claims" registry established by [RFC7519] and the "CBOR Web Token | |||
Claims Registry" established by [RFC8392]. Each entry below is an | Claims Registry" established by [RFC8392]. Each entry below is an | |||
addition to both registries (except for the nonce claim which is | addition to both registries (except for the nonce claim which is | |||
already registered for JWT, but not registered for CWT). | already registered for JWT, but not registered for CWT). | |||
The "Claim Description", "Change Controller" and "Specification | The "Claim Description", "Change Controller" and "Specification | |||
Documents" are common and equivalent for the JWT and CWT registries. | Documents" are common and equivalent for the JWT and CWT registries. | |||
The "Claim Key" and "Claim Value Types(s)" are for the CWT registry | 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 | 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" | JWT registry. The "JWT Claim Name" is equivalent to the "Claim Name" | |||
in the JWT registry. | in the JWT registry. | |||
7.3.1. Claims for Early Assignment | 9.3.1. Claims for Early Assignment | |||
RFC Editor: in the final publication this section should be combined | RFC Editor: in the final publication this section should be combined | |||
with the following section as it will no longer be necessary to | with the following section as it will no longer be necessary to | |||
distinguish claims with early assignment. Also, the following | distinguish claims with early assignment. Also, the following | |||
paragraph should be removed. | paragraph should be removed. | |||
The claims in this section have been (requested for / given) early | The claims in this section have been (requested for / given) early | |||
assignment according to [RFC7120]. They have been assigned values | assignment according to [RFC7120]. They have been assigned values | |||
and registered before final publication of this document. While | and registered before final publication of this document. While | |||
their semantics is not expected to change in final publication, it is | their semantics is not expected to change in final publication, it is | |||
skipping to change at page 53, line 4 ¶ | skipping to change at page 64, line 16 ¶ | |||
o Specification Document(s): *this document* | o Specification Document(s): *this document* | |||
o Claim Name: Submodules Section | o Claim Name: Submodules Section | |||
o Claim Description: The section containing submodules (not actually | o Claim Description: The section containing submodules (not actually | |||
a claim) | a claim) | |||
o JWT Claim Name: "submods" | o JWT Claim Name: "submods" | |||
o Claim Key: 20 | o Claim Key: 20 | |||
o Claim Value Type(s): map | o Claim Value Type(s): map | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): *this document* | o Specification Document(s): *this document* | |||
7.3.2. To be Assigned Claims | 9.3.2. To be Assigned Claims | |||
TODO: add the rest of the claims in here | TODO: add the rest of the claims in here | |||
7.3.3. Version Schemes Registered by this Document | 9.3.3. Version Schemes Registered by this Document | |||
IANA is requested to register a new value in the "Software Tag | IANA is requested to register a new value in the "Software Tag | |||
Version Scheme Values" established by [CoSWID]. | Version Scheme Values" established by [CoSWID]. | |||
The new value is a version scheme a 13-digit European Article Number | The new value is a version scheme a 13-digit European Article Number | |||
[EAN-13]. An EAN-13 is also known as an International Article Number | [EAN-13]. An EAN-13 is also known as an International Article Number | |||
or most commonly as a bar code. This version scheme is the ASCII | or most commonly as a bar code. This version scheme is the ASCII | |||
text representation of EAN-13 digits, the same ones often printed | text representation of EAN-13 digits, the same ones often printed | |||
with a bar code. This version scheme must comply with the EAN | with a bar code. This version scheme must comply with the EAN | |||
allocation and assignment rules. For example, this requires the | allocation and assignment rules. For example, this requires the | |||
manufacturer to obtain a manufacture code from GS1. | manufacturer to obtain a manufacture code from GS1. | |||
+-------+---------------------+---------------+ | +-------+---------------------+---------------+ | |||
| Index | Version Scheme Name | Specification | | | Index | Version Scheme Name | Specification | | |||
+-------+---------------------+---------------+ | +-------+---------------------+---------------+ | |||
| 5 | ean-13 | This document | | | 5 | ean-13 | This document | | |||
+-------+---------------------+---------------+ | +-------+---------------------+---------------+ | |||
8. Privacy Considerations | 9.3.4. UEID URN Registered by this Document | |||
IANA is requested to register the following new subtypes in the "DEV | ||||
URN Subtypes" registry under "Device Identification". See [RFC9039]. | ||||
+---------+-----------------------------------------+---------------+ | ||||
| Subtype | Description | Reference | | ||||
+---------+-----------------------------------------+---------------+ | ||||
| ueid | Universal Entity Identifier | This document | | ||||
| sueid | Semi-permanent Universal Entity | This document | | ||||
| | Identifier | | | ||||
+---------+-----------------------------------------+---------------+ | ||||
9.3.5. Tag for Detached EAT Bundle | ||||
In the registry [IANA.cbor-tags], IANA is requested to allocate the | ||||
following tag from the FCFS space, with the present document as the | ||||
specification reference. | ||||
+--------+------------+-------------------------------+ | ||||
| Tag | Data Items | Semantics | | ||||
+--------+------------+-------------------------------+ | ||||
| TBD602 | array | Detached EAT Bundle Section 5 | | ||||
+--------+------------+-------------------------------+ | ||||
10. Privacy Considerations | ||||
Certain EAT claims can be used to track the owner of an entity and | Certain EAT claims can be used to track the owner of an entity and | |||
therefore, implementations should consider providing privacy- | therefore, implementations should consider providing privacy- | |||
preserving options dependent on the intended usage of the EAT. | preserving options dependent on the intended usage of the EAT. | |||
Examples would include suppression of location claims for EAT's | Examples would include suppression of location claims for EAT's | |||
provided to unauthenticated consumers. | provided to unauthenticated consumers. | |||
8.1. UEID and SUEID Privacy Considerations | 10.1. UEID and SUEID Privacy Considerations | |||
A UEID is usually not privacy-preserving. Any set of relying parties | A UEID is usually not privacy-preserving. Any set of Relying Parties | |||
that receives tokens that happen to be from a single device will be | that receives tokens that happen to be from a single device will be | |||
able to know the tokens are all from the same device and be able to | able to know the tokens are all from the same device and be able to | |||
track the device. Thus, in many usage situations UEID violates | track the device. Thus, in many usage situations UEID violates | |||
governmental privacy regulation. In other usage situations a UEID | governmental privacy regulation. In other usage situations a UEID | |||
will not be allowed for certain products like browsers that give | will not be allowed for certain products like browsers that give | |||
privacy for the end user. It will often be the case that tokens will | privacy for the end user. It will often be the case that tokens will | |||
not have a UEID for these reasons. | 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 | |||
skipping to change at page 54, line 19 ¶ | skipping to change at page 66, line 9 ¶ | |||
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: | |||
o The device obtains explicit permission from the user of the device | o The device obtains explicit permission from the user of the device | |||
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. It may also | |||
be through a license agreement. For example, agreements for some | be through a license agreement. For example, agreements for some | |||
online banking and brokerage services might already cover use of a | online banking and brokerage services might already cover use of a | |||
UEID/SUEID. | UEID/SUEID. | |||
o The UEID/SUEID is used only in a particular context or particular | o The UEID/SUEID is used only in a particular context or particular | |||
use case. It is used only by one relying party. | use case. It is used only by one Relying Party. | |||
o The device authenticates the relying party and generates a derived | o The device 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 device, then the device generates a UEID just for that relying | the device, then the device generates a UEID just for that Relying | |||
party by hashing a proofed relying party ID with the main device | Party by hashing a proofed Relying Party ID with the main device | |||
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 device. Each UEID/SUEID is used in a | multiple UEIDs and SUEIDs per device. Each UEID/SUEID is used in a | |||
different context, use case or system on the device. However, from | different context, use case or system on the device. 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 | 10.2. Location Privacy Considerations | |||
Geographic location is most always considered personally identifiable | Geographic location is most always considered personally identifiable | |||
information. Implementers should consider laws and regulations | information. Implementers should consider laws and regulations | |||
governing the transmission of location data from end user devices to | governing the transmission of location data from end user devices to | |||
servers and services. Implementers should consider using location | servers and services. Implementers should consider using location | |||
management facilities offered by the operating system on the device | management facilities offered by the operating system on the device | |||
generating the attestation. For example, many mobile phones prompt | generating the attestation. For example, many mobile phones prompt | |||
the user for permission when before sending location data. | the user for permission when before sending location data. | |||
9. Security Considerations | 11. Security Considerations | |||
The security considerations provided in Section 8 of [RFC8392] and | The security considerations provided in Section 8 of [RFC8392] and | |||
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. In addition, implementors should consider the | respectively. In addition, implementors should consider the | |||
following. | following. | |||
9.1. Key Provisioning | 11.1. 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 | |||
can be used to derive the keys used for signing and/or encryption. | can be used to derive the keys used for signing and/or encryption. | |||
In some instances, the manufacturer of the entity may create the key | In some instances, the manufacturer of the entity may create the key | |||
material separately and provision the key material in the entity | material separately and provision the key material in the entity | |||
itself. The manfuacturer of any entity that is capable of producing | itself. The manfuacturer of any entity that is capable of producing | |||
an EAT should take care to ensure that any private key material be | an EAT should take care to ensure that any private key material be | |||
suitably protected prior to provisioning the key material in the | suitably protected prior to provisioning the key material in the | |||
entity itself. This can require creation of key material in an | entity itself. This can require creation of key material in an | |||
enclave (see [RFC4949] for definition of "enclave"), secure | enclave (see [RFC4949] for definition of "enclave"), secure | |||
transmission of the key material from the enclave to the entity using | transmission of the key material from the enclave to the entity using | |||
an appropriate protocol, and persistence of the private key material | an appropriate protocol, and persistence of the private key material | |||
in some form of secure storage to which (preferably) only the entity | in some form of secure storage to which (preferably) only the entity | |||
has access. | has access. | |||
9.1.1. Transmission of Key Material | 11.1.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 ("key wrapping") may be necessary. | |||
The transmission itself may be performed electronically, but can also | The transmission itself may be performed electronically, but can also | |||
be done by human courier. In the latter case, there should be | be done by human courier. In the latter case, there should be | |||
minimal to no exposure of the key material to the human (e.g. | minimal to no exposure of the key material to the human (e.g. | |||
encrypted portable memory). Moreover, the human should transport the | encrypted portable memory). Moreover, the human should transport the | |||
key material directly from the secure enclave where it was created to | key material directly from the secure enclave where it was created to | |||
a destination secure enclave where it can be provisioned. | a destination secure enclave where it can be provisioned. | |||
9.2. Transport Security | 11.2. Transport Security | |||
As stated in Section 8 of [RFC8392], "The security of the CWT relies | As stated in Section 8 of [RFC8392], "The security of the CWT relies | |||
upon on the protections offered by COSE". Similar considerations | upon on the protections offered by COSE". Similar considerations | |||
apply to EAT when sent as a CWT. However, EAT introduces the concept | apply to EAT when sent as a CWT. However, EAT introduces the concept | |||
of a nonce to protect against replay. Since an EAT may be created by | of a nonce to protect against replay. Since an EAT may be created by | |||
an entity that may not support the same type of transport security as | an entity that may not support the same type of transport security as | |||
the consumer of the EAT, intermediaries may be required to bridge | the consumer of the EAT, intermediaries may be required to bridge | |||
communications between the entity and consumer. As a result, it is | communications between the entity and consumer. As a result, it is | |||
RECOMMENDED that both the consumer create a nonce, and the entity | RECOMMENDED that both the consumer create a nonce, and the entity | |||
leverage the nonce along with COSE mechanisms for encryption and/or | leverage the nonce along with COSE mechanisms for encryption and/or | |||
signing to create the EAT. | signing to create the EAT. | |||
Similar considerations apply to the use of EAT as a JWT. Although | Similar considerations apply to the use of EAT as a JWT. Although | |||
the security of a JWT leverages the JSON Web Encryption (JWE) and | the security of a JWT leverages the JSON Web Encryption (JWE) and | |||
JSON Web Signature (JWS) specifications, it is still recommended to | JSON Web Signature (JWS) specifications, it is still recommended to | |||
make use of the EAT nonce. | make use of the EAT nonce. | |||
9.3. Multiple EAT Consumers | 11.3. 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 multiple consumers are required for verification of an EAT, it | When multiple consumers are required for verification of an EAT, it | |||
is important to minimize information exposure to each consumer. In | is 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 | |||
skipping to change at page 56, line 31 ¶ | skipping to change at page 68, line 17 ¶ | |||
subsets to any downstream consumer should leverage a secure protocol | subsets to any downstream consumer should leverage a secure protocol | |||
(e.g.one that uses transport-layer security, i.e. TLS), | (e.g.one that uses transport-layer security, i.e. 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 transport security between the receiving and | a nested EAT. Then transport security between the receiving and | |||
downstream consumers is not strictly required. Nevertheless, | downstream consumers is not strictly required. Nevertheless, | |||
downstream consumers of a nested EAT should provide a nonce unique to | downstream consumers of a nested EAT should provide a nonce unique to | |||
the EAT they are consuming. | the EAT they are consuming. | |||
10. References | 12. References | |||
10.1. Normative References | 12.1. Normative References | |||
[CBOR-OID] | [CBOR.OID] | |||
Bormann, C., "Concise Binary Object Representation (CBOR) | Bormann, C., "Concise Binary Object Representation (CBOR) | |||
Tags for Object Identifiers", draft-ietf-cbor-tags-oid-06 | Tags for Object Identifiers", draft-ietf-cbor-tags-oid-08 | |||
(work in progress), March 2021. | (work in progress), May 2021. | |||
[CBOR.Cert.Draft] | ||||
Raza, S., "CBOR Encoding of X.509 Certificates (CBOR | ||||
Certificates)", 2020, <https://tools.ietf.org/html/draft- | ||||
mattsson-cose-cbor-cert-compress-05>. | ||||
[COSE.X509.Draft] | [CoSWID] Birkholz, H., Fitzgerald-McKay, J., Schmidt, C., and D. | |||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | Waltermire, "Concise Software Identification Tags", draft- | |||
Header parameters for carrying and referencing X.509 | ietf-sacm-coswid-19 (work in progress), October 2021. | |||
certificates", 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-cose-x509-08>. | ||||
[CoSWID] "Concise Software Identification Tags", November 2020, | [DLOA] "Digital Letter of Approval", November 2015, | |||
<https://tools.ietf.org/html/draft-ietf-sacm-coswid-16>. | <https://globalplatform.org/wp-content/uploads/2015/12/ | |||
GPC_DigitalLetterOfApproval_v1.0.pdf>. | ||||
[EAN-13] GS1, "International Article Number - EAN/UPC barcodes", | [EAN-13] GS1, "International Article Number - EAN/UPC barcodes", | |||
2019, <https://www.gs1.org/standards/barcodes/ean-upc>. | 2019, <https://www.gs1.org/standards/barcodes/ean-upc>. | |||
[FIDO.AROE] | [FIDO.AROE] | |||
The FIDO Alliance, "FIDO Authenticator Allowed Restricted | The FIDO Alliance, "FIDO Authenticator Allowed Restricted | |||
Operating Environments List", November 2019, | Operating Environments List", November 2020, | |||
<https://fidoalliance.org/specs/fido-uaf-v1.0-fd-20191115/ | <https://fidoalliance.org/specs/fido-security- | |||
fido-allowed-AROE-v1.0-fd-20191115.html>. | requirements/fido-authenticator-allowed-restricted- | |||
operating-environments-list-v1.2-fd-20201102.html>. | ||||
[IANA.cbor-tags] | ||||
"IANA CBOR Tags Registry", n.d., | ||||
<https://www.iana.org/assignments/cbor-tags/cbor- | ||||
tags.xhtml>. | ||||
[IANA.CWT.Claims] | [IANA.CWT.Claims] | |||
IANA, "CBOR Web Token (CWT) Claims", | IANA, "CBOR Web Token (CWT) Claims", | |||
<http://www.iana.org/assignments/cwt>. | <http://www.iana.org/assignments/cwt>. | |||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token (JWT) Claims", | IANA, "JSON Web Token (JWT) Claims", | |||
<https://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[OpenIDConnectCore] | [OpenIDConnectCore] | |||
Sakimura, N., Bradley, J., Jones, M., Medeiros, B. D., and | Sakimura, N., Bradley, J., Jones, M., Medeiros, B. D., and | |||
C. Mortimore, "OpenID Connect Core 1.0 incorporating | C. Mortimore, "OpenID Connect Core 1.0 incorporating | |||
errata set 1", November 2014, | errata set 1", November 2014, | |||
<https://openid.net/specs/openid-connect-core-1_0.html>. | <https://openid.net/specs/openid-connect-core-1_0.html>. | |||
[RATS-Architecture] | [PEN] "Private Enterprise Number (PEN) Request", n.d., | |||
Birkholz, H., Thaler, D., Richardson, M., Smith, N., and | <https://pen.iana.org/pen/PenApplication.page>. | |||
W. Pan, "Remote Attestation Procedures Architecture", | ||||
draft-ietf-rats-architecture-12 (work in progress), April | ||||
2021. | ||||
[RATS.Architecture] | ||||
Birkholz, H., "Remote Attestation Procedures | ||||
Architecture", 2020, <https://tools.ietf.org/html/draft- | ||||
ietf-rats-architecture-08>. | ||||
[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>. | |||
skipping to change at page 59, line 13 ¶ | skipping to change at page 70, line 37 ¶ | |||
<https://www.rfc-editor.org/info/rfc8949>. | <https://www.rfc-editor.org/info/rfc8949>. | |||
[ThreeGPP.IMEI] | [ThreeGPP.IMEI] | |||
3GPP, "3rd Generation Partnership Project; Technical | 3GPP, "3rd Generation Partnership Project; Technical | |||
Specification Group Core Network and Terminals; Numbering, | Specification Group Core Network and Terminals; Numbering, | |||
addressing and identification", 2019, | addressing and identification", 2019, | |||
<https://portal.3gpp.org/desktopmodules/Specifications/ | <https://portal.3gpp.org/desktopmodules/Specifications/ | |||
SpecificationDetails.aspx?specificationId=729>. | SpecificationDetails.aspx?specificationId=729>. | |||
[UCCS.Draft] | [UCCS.Draft] | |||
Birkholz, H., "A CBOR Tag for Unprotected CWT Claims | Birkholz, H., O'Donoghue, J., Cam-Winget, N., and C. | |||
Sets", 2020, | Bormann, "A CBOR Tag for Unprotected CWT Claims Sets", | |||
<https://tools.ietf.org/html/draft-birkholz-rats-uccs-01>. | draft-ietf-rats-uccs-01 (work in progress), July 2021. | |||
[WGS84] National Imagery and Mapping Agency, "National Imagery and | [WGS84] National Geospatial-Intelligence Agency (NGA), "WORLD | |||
Mapping Agency Technical Report 8350.2, Third Edition", | GEODETIC SYSTEM 1984, NGA.STND.0036_1.0.0_WGS84", July | |||
2000, <http://earth- | 2014, <https://earth-info.nga.mil/php/ | |||
info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>. | download.php?file=coord-wgs84>. | |||
10.2. Informative References | 12.2. Informative References | |||
[BirthdayAttack] | [BirthdayAttack] | |||
"Birthday attack", | "Birthday attack", | |||
<https://en.wikipedia.org/wiki/Birthday_attack.>. | <https://en.wikipedia.org/wiki/Birthday_attack.>. | |||
[CBOR.Cert.Draft] | ||||
Mattsson, J. P., Selander, G., Raza, S., Hoeglund, J., and | ||||
M. Furuhed, "CBOR Encoded X.509 Certificates (C509 | ||||
Certificates)", draft-ietf-cose-cbor-encoded-cert-02 (work | ||||
in progress), July 2021. | ||||
[Common.Criteria] | [Common.Criteria] | |||
"Common Criteria for Information Technology Security | "Common Criteria for Information Technology Security | |||
Evaluation", April 2017, | Evaluation", April 2017, | |||
<https://www.commoncriteriaportal.org/cc/>. | <https://www.commoncriteriaportal.org/cc/>. | |||
[COSE.X509.Draft] | ||||
Schaad, J., "CBOR Object Signing and Encryption (COSE): | ||||
Header parameters for carrying and referencing X.509 | ||||
certificates", draft-ietf-cose-x509-08 (work in progress), | ||||
December 2020. | ||||
[ECMAScript] | [ECMAScript] | |||
"Ecma International, "ECMAScript Language Specification, | "Ecma International, "ECMAScript Language Specification, | |||
5.1 Edition", ECMA Standard 262", June 2011, | 5.1 Edition", ECMA Standard 262", June 2011, | |||
<http://www.ecma-international.org/ecma-262/5.1/ECMA- | <http://www.ecma-international.org/ecma-262/5.1/ECMA- | |||
262.pdf>. | 262.pdf>. | |||
[FIDO.Registry] | ||||
The FIDO Alliance, "FIDO Registry of Predefined Values", | ||||
December 2019, <https://fidoalliance.org/specs/common- | ||||
specs/fido-registry-v2.1-ps-20191217.html>. | ||||
[FIPS-140] | [FIPS-140] | |||
National Institue of Standards, "Security Requirements for | National Institue of Standards, "Security Requirements for | |||
Cryptographic Modules", May 2001, | Cryptographic Modules", May 2001, | |||
<https://csrc.nist.gov/publications/detail/fips/140/2/ | <https://csrc.nist.gov/publications/detail/fips/140/2/ | |||
final>. | final>. | |||
[IEEE.802-2001] | [IEEE.802-2001] | |||
"IEEE Standard For Local And Metropolitan Area Networks | "IEEE Standard For Local And Metropolitan Area Networks | |||
Overview And Architecture", 2007, | Overview And Architecture", 2007, | |||
<https://webstore.ansi.org/standards/ieee/ | <https://webstore.ansi.org/standards/ieee/ | |||
skipping to change at page 60, line 32 ¶ | skipping to change at page 72, line 17 ¶ | |||
Organizationally Unique Identifier (OUI), and Company ID | Organizationally Unique Identifier (OUI), and Company ID | |||
(CID)", August 2017, | (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 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>. | |||
[RATS.Architecture] | ||||
Birkholz, H., Thaler, D., Richardson, M., Smith, N., and | ||||
W. Pan, "Remote Attestation Procedures Architecture", | ||||
draft-ietf-rats-architecture-12 (work in progress), April | ||||
2021. | ||||
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
Unique IDentifier (UUID) URN Namespace", RFC 4122, | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
DOI 10.17487/RFC4122, July 2005, | DOI 10.17487/RFC4122, July 2005, | |||
<https://www.rfc-editor.org/info/rfc4122>. | <https://www.rfc-editor.org/info/rfc4122>. | |||
[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>. | |||
[RFC7120] Cotton, M., "Early IANA Allocation of Standards Track Code | [RFC7120] Cotton, M., "Early IANA Allocation of Standards Track Code | |||
Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | Points", BCP 100, RFC 7120, DOI 10.17487/RFC7120, January | |||
2014, <https://www.rfc-editor.org/info/rfc7120>. | 2014, <https://www.rfc-editor.org/info/rfc7120>. | |||
[RFC9039] Arkko, J., Jennings, C., and Z. Shelby, "Uniform Resource | ||||
Names for Device Identifiers", RFC 9039, | ||||
DOI 10.17487/RFC9039, June 2021, | ||||
<https://www.rfc-editor.org/info/rfc9039>. | ||||
[W3C.GeoLoc] | [W3C.GeoLoc] | |||
Worldwide Web Consortium, "Geolocation API Specification | Worldwide Web Consortium, "Geolocation API Specification | |||
2nd Edition", January 2018, <https://www.w3.org/TR/ | 2nd Edition", January 2018, <https://www.w3.org/TR/ | |||
geolocation-API/#coordinates_interface>. | geolocation-API/#coordinates_interface>. | |||
Appendix A. Examples | Appendix A. Examples | |||
A.1. Very Simple EAT | These examples are either UCCS, shown as CBOR diagnostic, or UJCS | |||
messages. Full CWT and JWT examples with signing and encryption are | ||||
not given. | ||||
This is shown in CBOR diagnostic form. Only the payload signed by | All UCCS examples can be the payload of a CWT. To do so, they must | |||
COSE is shown. | be converted from the UCCS message to a Claims-Set, which is achieve | |||
by "removing" the tag. | ||||
{ | UJCS messages can be directly used as the payload of a JWT. | |||
/ issuer / 1: "joe", | ||||
/ nonce / 10: h'948f8860d13a463e8e', | WARNING: These examples use tag and label numbers not yet assigned by | |||
IANA. | ||||
A.1. Simple TEE Attestation | ||||
This is a simple attestation of a TEE that includes a manifest that | ||||
is a payload CoSWID to describe the TEE's software. | ||||
/ This is a UCCS EAT that describes a simple TEE. / | ||||
601({ | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ security-level / 14: 3, / secure-restricted / | ||||
/ secure-boot / 15: true, | ||||
/ debug-status / 16: 2, / disabled-since-boot / | ||||
/ manfests / 35: [ | ||||
/ This is byte-string wrapped / | ||||
/ payload CoSWID. It gives the TEE / | ||||
/ software name, the version and / | ||||
/ the name of the file it is in. / | ||||
h' da53574944a60064336132340c01016b | ||||
41636d6520544545204f530d65332e31 | ||||
2e340282a2181f6b41636d6520544545 | ||||
204f53182101a2181f6b41636d652054 | ||||
4545204f5318210206a111a118186e61 | ||||
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 / | ||||
/ makes up the TEE. / | ||||
1398229316({ | ||||
/ Unique CoSWID ID / 0: "3a24", | ||||
/ tag-version / 12: 1, | ||||
/ software-name / 1: "Acme TEE OS", | ||||
/ software-version / 13: "3.1.4", | ||||
/ entity / 2: [ | ||||
{ | ||||
/ entity-name / 31: "Acme TEE OS", | ||||
/ role / 33: 1 / tag-creator / | ||||
}, | ||||
{ | ||||
/ entity-name / 31: "Acme TEE OS", | ||||
/ role / 33: 2 / software-creator / | ||||
} | ||||
], | ||||
/ payload / 6: { | ||||
/ ...file / 17: { | ||||
/ ...fs-name / 24: "acme_tee_3.exe" | ||||
} | ||||
} | ||||
}) | ||||
A.2. EAT Produced by Attestation Hardware Block | ||||
/ This is an example of a token produced by a HW block / | ||||
/ purpose-built for attestation. Only the nonce claim changes / | ||||
/ from one attestation to the next as the rest either come / | ||||
/ directly from the hardware or from one-time-programmable memory / | ||||
/ (e.g. a fuse). 47 bytes encoded in CBOR (8 byte nonce, 16 byte / | ||||
/ UEID). / | ||||
601({ | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | / UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ OEMID / 13: 64242, / Private Enterprise Number / | ||||
/ security-level / 14: 4, / hardware level security / | ||||
/ secure-boot / 15: true, | / secure-boot / 15: true, | |||
/ debug-disable / 16: 3, / permanent-disable / | / debug-status / 16: 3, / disabled-permanently / | |||
/ timestamp (iat) / 6: 1(1526542894) | / chip-version / 26: [ "3.1", 1 ] / Type is multipartnumeric / | |||
} | }) | |||
A.2. Example with Submodules, Nesting and Security Levels | A.3. Detached EAT Bundle | |||
{ | In this DEB main token is produced by a HW attestation block. The | |||
/ nonce / 10: h'948f8860d13a463e8e', | detached Claims-Set is produced by a TEE and is largely identical to | |||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | the Simple TEE examples above. The TEE digests its Claims-Set and | |||
/ secure-boot / 15: true, | feeds that digest to the HW block. | |||
/ debug-disable / 16: 3, / permanent-disable / | ||||
/ timestamp (iat) / 6: 1(1526542894), | ||||
/ security-level / 14: 3, / secure restricted OS / | ||||
/ submods / 20: { | ||||
/ first submod, an Android Application / | ||||
"Android App Foo" : { | ||||
/ security-level / 14: 1 / unrestricted / | ||||
}, | ||||
/ 2nd submod, A nested EAT from a secure element / | In a better example the attestation produced by the HW block would be | |||
"Secure Element Eat" : | a CWT and thus signed and secured by the HW block. Since the | |||
/ an embedded EAT, bytes of which are not shown / | signature covers the digest from the TEE that Claims-Set is also | |||
h'420123', | secured. | |||
/ 3rd submod, information about Linux Android / | The DEB itself can be assembled by untrusted SW. | |||
"Linux Android": { | ||||
/ security-level / 14: 1 / unrestricted / | / This is a detached EAT bundle (DEB) tag. / | |||
} | ||||
} | 602([ | |||
} | ||||
/ First part is a full EAT token with claims like nonce and / | ||||
/ UEID. Most importantly, it includes a submodule that is a / | ||||
/ detached digest which is the hash of the "TEE" claims set / | ||||
/ in the next section. / | ||||
/ / | ||||
/ This token here is in UCCS format (unsigned). In a more / | ||||
/ realistic example, it would be a signed CWT. / | ||||
h'd90259a80a48948f8860d13a463e0b500198f50a4ff6c058 | ||||
61c8860d13a638ea0d19faf20e040ff51003181a8263332e | ||||
310114a163544545822f5820e5cf95fd24fab71446742dd5 | ||||
8d43dae178e55fe2b94291a9291082ffc2635a0b', | ||||
{ | ||||
/ A CBOR-encoded byte-string wrapped EAT claims-set. It / | ||||
/ contains claims suitable for a TEE / | ||||
"TEE" : h'a50a48948f8860d13a463e0e030ff51002182381 | ||||
585dda53574944a60064336132340c01016b4163 | ||||
6d6520544545204f530d65332e312e340282a218 | ||||
1f6b41636d6520544545204f53182101a2181f6b | ||||
41636d6520544545204f5318210206a111a11818 | ||||
6e61636d655f7465655f332e657865' | ||||
} | ||||
]) | ||||
/ This example contains submodule that is a detached digest, / | ||||
/ which is the hash of a Claims-Set convey outside this token. / | ||||
/ Other than that is is the other example of a token from an / | ||||
/ attestation HW block / | ||||
601({ | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | ||||
/ OEMID / 13: 64242, / Private Enterprise Number / | ||||
/ security-level / 14: 4, / hardware level security / | ||||
/ secure-boot / 15: true, | ||||
/ debug-status / 16: 3, / disabled-permanently / | ||||
/ chip-version / 26: [ "3.1", 1 ], / multipartnumeric / | ||||
/ submods/ 20: { | ||||
"TEE": [ / detached digest submod / | ||||
-16, / SHA-256 / | ||||
h'e5cf95fd24fab7144674 | ||||
2dd58d43dae178e55fe2 | ||||
b94291a9291082ffc2635 | ||||
a0b' | ||||
] | ||||
} | ||||
}) | ||||
A.4. Key / Key Store Attestation | ||||
/ This is an attestation of a public key and the key store / | ||||
/ implementation that protects and manages it. The key store / | ||||
/ implementation is in a security-oriented execution / | ||||
/ environment separate from the high-level OS, for example a / | ||||
/ TEE. The key store is the Attester. / | ||||
/ / | ||||
/ There is some attestation of the high-level OS, just version / | ||||
/ and boot & debug status. It is a Claims-Set submodule because/ | ||||
/ it has lower security level than the key store. The key / | ||||
/ store's implementation has access to info about the HLOS, so / | ||||
/ it is able to include it. / | ||||
/ / | ||||
/ A key and an indication of the user authentication given to / | ||||
/ allow access to the key is given. The labels for these are / | ||||
/ in the private space since this is just a hypothetical / | ||||
/ example, not part of a standard protocol. / | ||||
/ / | ||||
/ This is similar to Android Key Attestation. / | ||||
601({ | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ security-level / 14: 3, / secure-restricted / | ||||
/ debug-status / 16: 2, / disabled-since-boot / | ||||
/ secure-boot / 15: true, | ||||
/ manifests / 35: [ | ||||
h'da53574944a600683762623334383766 | ||||
0c000169436172626f6e6974650d6331 | ||||
2e320e0102a2181f75496e6475737472 | ||||
69616c204175746f6d6174696f6e1821 | ||||
02' | ||||
/ Above is an encoded CoSWID / | ||||
/ with the following data / | ||||
/ SW Name: "Carbonite" / | ||||
/ SW Vers: "1.2" / | ||||
/ SW Creator: / | ||||
/ "Industrial Automation" / | ||||
], | ||||
/ expiration / 4: 1634324274, / 2021-10-15T18:57:54Z / | ||||
/ creation time / 6: 1634317080, / 2021-10-15T16:58:00Z / | ||||
-80000 : "fingerprint", | ||||
-80001 : { / The key -- A COSE_Key / | ||||
/ kty / 1: 2, / EC2, eliptic curve with x & y / | ||||
/ kid / 2: h'36675c206f96236c3f51f54637b94ced', | ||||
/ curve / -1: 2, / curve is P-256 / | ||||
/ x-coord / -2: h'65eda5a12577c2bae829437fe338701a | ||||
10aaa375e1bb5b5de108de439c08551d', | ||||
/ y-coord / -3: h'1e52ed75701163f7f9e40ddf9f341b3d | ||||
c9ba860af7e0ca7ca7e9eecd0084d19c' | ||||
}, | ||||
/ submods / 20 : { | ||||
"HLOS" : { / submod for high-level OS / | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ security-level / 14: 1, / unrestricted / | ||||
/ secure-boot / 15: true, | ||||
/ manifests / 35: [ | ||||
h'da53574944a600687337 | ||||
6537346b78380c000168 | ||||
44726f6964204f530d65 | ||||
52322e44320e0302a218 | ||||
1F75496E647573747269 | ||||
616c204175746f6d6174 | ||||
696f6e182102' | ||||
/ Above is an encoded CoSWID / | ||||
/ with the following data: / | ||||
/ SW Name: "Droid OS" / | ||||
/ SW Vers: "R2.D2" / | ||||
/ SW Creator: / | ||||
/ "Industrial Automation"/ | ||||
] | ||||
} | ||||
} | ||||
}) | ||||
A.5. SW Measurements of an IoT Device | ||||
This is a simple token that might be for and IoT device. It includes | ||||
CoSWID format measurments of the SW. The CoSWID is in byte-string | ||||
wrapped in the token and also shown in diagnostic form. | ||||
/ This EAT UCCS is for an IoT device with a TEE. The attestation / | ||||
/ 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 / | ||||
/ submodule contains claims for the IoT OS. The TEE also measures / | ||||
/ the IoT OS and puts the measurements in the submodule. / | ||||
601({ | ||||
/ nonce / 10: h'948f8860d13a463e', | ||||
/ security-level / 14: 3, / secure-restricted / | ||||
/ secure-boot / 15: true, | ||||
/ debug-status / 16: 2, / disabled-since-boot / | ||||
/ OEMID / 13: h'8945ad', / IEEE CID based / | ||||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | ||||
/ sumods / 20: { | ||||
"OS" : { | ||||
/ security-level / 14: 2, / restricted / | ||||
/ secure-boot / 15: true, | ||||
/ debug-status / 16: 2, / disabled-since-boot / | ||||
/ swevidence / 36: [ | ||||
/ This is a byte-string wrapped / | ||||
/ evidence CoSWID. It has / | ||||
/ hashes of the main files of / | ||||
/ the IoT OS. / | ||||
h'da53574944a600663463613234350c | ||||
17016d41636d6520522d496f542d4f | ||||
530d65332e312e3402a2181f724163 | ||||
6d6520426173652041747465737465 | ||||
7218210103a11183a318187161636d | ||||
655f725f696f745f6f732e65786514 | ||||
1a0044b349078201582005f6b327c1 | ||||
73b4192bd2c3ec248a292215eab456 | ||||
611bf7a783e25c1782479905a31818 | ||||
6d7265736f75726365732e72736314 | ||||
1a000c38b10782015820c142b9aba4 | ||||
280c4bb8c75f716a43c99526694caa | ||||
be529571f5569bb7dc542f98a31818 | ||||
6a636f6d6d6f6e2e6c6962141a0023 | ||||
3d3b0782015820a6a9dcdfb3884da5 | ||||
f884e4e1e8e8629958c2dbc7027414 | ||||
43a913e34de9333be6' | ||||
] | ||||
} | ||||
} | ||||
}) | ||||
/ An evidence CoSWID created for the "Acme R-IoT-OS" created by / | ||||
/ the "Acme Base Attester" (both fictious names). It provides / | ||||
/ measurements of the SW (other than the attester SW) on the / | ||||
/ device. / | ||||
1398229316({ | ||||
/ Unique CoSWID ID / 0: "4ca245", | ||||
/ tag-version / 12: 23, / Attester-maintained counter / | ||||
/ software-name / 1: "Acme R-IoT-OS", | ||||
/ software-version / 13: "3.1.4", | ||||
/ entity / 2: { | ||||
/ entity-name / 31: "Acme Base Attester", | ||||
/ role / 33: 1 / tag-creator / | ||||
}, | ||||
/ evidence / 3: { | ||||
/ ...file / 17: [ | ||||
{ | ||||
/ ...fs-name / 24: "acme_r_iot_os.exe", | ||||
/ ...size / 20: 4502345, | ||||
/ ...hash / 7: [ | ||||
1, / SHA-256 / | ||||
h'05f6b327c173b419 | ||||
2bd2c3ec248a2922 | ||||
15eab456611bf7a7 | ||||
83e25c1782479905' | ||||
] | ||||
}, | ||||
{ | ||||
/ ...fs-name / 24: "resources.rsc", | ||||
/ ...size / 20: 800945, | ||||
/ ...hash / 7: [ | ||||
1, / SHA-256 / | ||||
h'c142b9aba4280c4b | ||||
b8c75f716a43c995 | ||||
26694caabe529571 | ||||
f5569bb7dc542f98' | ||||
] | ||||
}, | ||||
{ | ||||
/ ...fs-name / 24: "common.lib", | ||||
/ ...size / 20: 2309435, | ||||
/ ...hash / 7: [ | ||||
1, / SHA-256 / | ||||
h'a6a9dcdfb3884da5 | ||||
f884e4e1e8e86299 | ||||
58c2dbc702741443 | ||||
a913e34de9333be6' | ||||
] | ||||
} | ||||
] | ||||
} | ||||
}) | ||||
A.6. Attestation Results in JSON format | ||||
This is a UJCS format token that might be the output of a Verifier | ||||
that evaluated the IoT Attestation example immediately above. | ||||
This particular Verifier knows enough about the TEE Attester to be | ||||
able to pass claims like security level directly through to the | ||||
Relying Party. The Verifier also knows the Reference Values for the | ||||
measured SW components and is able to check them. It informs the | ||||
Relying Party that they were correct in the swresults claim. | ||||
"Trustus Verifications" is the name of the services that verifies the | ||||
SW component measurements. | ||||
This UJCS is identical to JSON-encoded Claims-Set that could be a JWT | ||||
payload. | ||||
{ | ||||
"nonce" : "lI+IYNE6Rj4=", | ||||
"seclevel" : "secure-restricted", | ||||
"secboot" : true, | ||||
"dbgstat" : "disabled-since-boot", | ||||
"OEMID" : "iUWt", | ||||
"UEID" : "AZj1Ck/2wFhhyIYNE6Y4", | ||||
"submods" : { | ||||
"seclevel" : "restricted", | ||||
"secboot" : true, | ||||
"dbgstat" : "disabled-since-boot", | ||||
"swname" : "Acme R-IoT-OS", | ||||
"sw-version" : [ | ||||
"3.1.4" | ||||
], | ||||
"swresults" : [ | ||||
[ | ||||
"Trustus Verifications", | ||||
"all", | ||||
"fully-verified" | ||||
] | ||||
] | ||||
} | ||||
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 | |||
UEIDs given the total possible entity population and the number of | UEIDs given the total possible entity population and the number of | |||
entities in a particular entity management database. | 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 | |||
skipping to change at page 65, line 24 ¶ | skipping to change at page 85, line 24 ¶ | |||
[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 are used with an | is defined. The intent is that IDevIDs and LDevIDs are used with an | |||
open set of network protocols for authentication and such. In these | open set of network protocols for authentication and such. In these | |||
protocols the DevID secret is used to sign a nonce or similar to | protocols the DevID secret is used to sign a nonce or similar to | |||
proof the association of the DevID certificates with the device. | proof the association of the DevID certificates with the device. | |||
By contrast, EAT defines network protocol for proving trustworthiness | By contrast, EAT defines network protocol for proving trustworthiness | |||
to a relying party, the very thing that is not defined in | to a Relying Party, the very thing that is not defined in | |||
[IEEE.802.1AR]. Nor does not give details on how keys, data and such | [IEEE.802.1AR]. Nor does not give details on how keys, data and such | |||
are stored protected and accessed. EAT is intended to work with a | are stored protected and accessed. EAT is intended to work with a | |||
variety of different on-device implementations ranging from minimal | variety of different on-device implementations ranging from minimal | |||
protection of assets to the highest levels of asset protection. It | protection of assets to the highest levels of asset protection. It | |||
does not define any particular level of defense against attack, | does not define any particular level of defense against attack, | |||
instead providing a set of security considerations. | instead providing 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. | |||
skipping to change at page 69, line 12 ¶ | skipping to change at page 89, line 12 ¶ | |||
o Rename debug-disable to debug-status; clarify that it is not | o Rename debug-disable to debug-status; clarify that it is not | |||
extensible | extensible | |||
o Security level claim is not extensible | o Security level claim is not extensible | |||
o Improve specification of location claim and added a location | o Improve specification of location claim and added a location | |||
privacy section | privacy section | |||
o Add intended use claim | o Add intended use claim | |||
D.7. From draft-ietf-rats-05 | D.7. From draft-ietf-rats-eat-05 | |||
o CDDL format issues resolved | o CDDL format issues resolved | |||
o Corrected reference to Location Privacy section | o Corrected reference to Location Privacy section | |||
D.8. From draft-ietf-rats-06 | D.8. From draft-ietf-rats-eat-06 | |||
o Added boot-seed claim | o Added boot-seed claim | |||
o Rework CBOR interoperability section | o Rework CBOR interoperability section | |||
o Added profiles claim and section | o Added profiles claim and section | |||
D.9. From draft-ietf-rats-07 | D.9. From draft-ietf-rats-eat-07 | |||
o Filled in IANA and other sections for possible preassignment of | o Filled in IANA and other sections for possible preassignment of | |||
claim keys for well understood claims | Claim Keys for well understood claims | |||
D.10. From draft-ietf-rats-08 | D.10. From draft-ietf-rats-eat-08 | |||
o Change profile claim to be either a URL or an OID rather than a | o Change profile claim to be either a URL or an OID rather than a | |||
test string | test string | |||
D.11. From draft-ietf-rats-09 | D.11. From draft-ietf-rats-eat-09 | |||
o Add SUEIDs | o Add SUEIDs | |||
o Add appendix comparing IDevID to EAT | o Add appendix comparing IDevID to EAT | |||
o Added section on use for Evidence and Attestation Results | o Added section on use for Evidence and Attestation Results | |||
o Fill in the key ID and endorsements identificaiton section | o Fill in the key ID and endorsements identificaiton section | |||
o Remove origination claim as it is replaced by key IDs and | o Remove origination claim as it is replaced by key IDs and | |||
endorsements | endorsements | |||
o Added manifests and software evidence claims | o Added manifests and software evidence claims | |||
o Add string labels non-claim labels for use with JSON (e.g. labels | o Add string labels non-claim labels for use with JSON (e.g. labels | |||
for members of location claim) | for members of location claim) | |||
o EAN-13 HW versions are no longer a separate claim. Now they are | o EAN-13 HW versions are no longer a separate claim. Now they are | |||
folded in as a CoSWID version scheme. | folded in as a CoSWID version scheme. | |||
Authors' Addresses | D.12. From draft-ietf-rats-eat-10 | |||
Giridhar Mandyam | o Hardware version is made into an array of two rather than two | |||
Qualcomm Technologies Inc. | claims | |||
5775 Morehouse Drive | ||||
San Diego, California | ||||
USA | ||||
Phone: +1 858 651 7200 | o Corrections and wording improvements for security levels claim | |||
EMail: mandyam@qti.qualcomm.com | ||||
o Add swresults claim | ||||
o Add dloas claim - Digitial Letter of Approvals, a list of | ||||
certifications | ||||
o CDDL for each claim no longer in a separate sub section | ||||
o Consistent use of terminology from RATS architecture document | ||||
o Consistent use of terminology from CWT and JWT documents | ||||
o Remove operating model and procedures; refer to CWT, JWT and RATS | ||||
architecture instead | ||||
o Some reorganization of Section 1 | ||||
o Moved a few references, including RATS Architecture, to | ||||
informative. | ||||
o Add detached submodule digests and detached eat bundles (DEBs) | ||||
o New simpler and more universal scheme for identifying the encoding | ||||
of a nested token | ||||
o Made clear that CBOR and JSON are only mixed when nesting a token | ||||
in another token | ||||
o Clearly separate CDDL for JSON and CBOR-specific data items | ||||
o Define UJCS (unsigned JWTs) | ||||
o Add CDDL for a general Claims-Set used by UCCS, UJCS, CWT, JWT and | ||||
EAT | ||||
o Top level CDDL for CWT correctly refers to COSE | ||||
o OEM ID is specifically for HW, not for SW | ||||
o HW OEM ID can now be a PEN | ||||
o HW OEM ID can now be a 128-bit random number | ||||
o Expand the examples section | ||||
o Add software and version claims as easy / JSON alternative to | ||||
CoSWID | ||||
Authors' Addresses | ||||
Laurence Lundblade | Laurence Lundblade | |||
Security Theory LLC | Security Theory LLC | |||
EMail: lgl@island-resort.com | EMail: lgl@securitytheory.com | |||
Miguel Ballesteros | Giridhar Mandyam | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
5775 Morehouse Drive | 5775 Morehouse Drive | |||
San Diego, California | San Diego, California | |||
USA | USA | |||
Phone: +1 858 651 4299 | Phone: +1 858 651 7200 | |||
EMail: mballest@qti.qualcomm.com | EMail: mandyam@qti.qualcomm.com | |||
Jeremy O'Donoghue | Jeremy O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
279 Farnborough Road | 279 Farnborough Road | |||
Farnborough GU14 7LS | Farnborough 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. 357 change blocks. | ||||
1067 lines changed or deleted | 2006 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |