draft-ietf-rats-eat-06.txt | draft-ietf-rats-eat-07.txt | |||
---|---|---|---|---|
RATS Working Group G. Mandyam | RATS Working Group G. Mandyam | |||
Internet-Draft Qualcomm Technologies Inc. | Internet-Draft Qualcomm Technologies Inc. | |||
Intended status: Standards Track L. Lundblade | Intended status: Standards Track L. Lundblade | |||
Expires: 4 June 2021 Security Theory LLC | Expires: August 7, 2021 Security Theory LLC | |||
M. Ballesteros | M. Ballesteros | |||
J. O'Donoghue | J. O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
1 December 2020 | February 03, 2021 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-06 | draft-ietf-rats-eat-07 | |||
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. | |||
skipping to change at page 1, line 45 ¶ | skipping to change at page 1, line 45 ¶ | |||
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 4 June 2021. | This Internet-Draft will expire on August 7, 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 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 (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Simplified BSD License text | to this document. Code Components extracted from this document must | |||
as described in Section 4.e of the Trust Legal Provisions and are | include Simplified BSD License text as described in Section 4.e of | |||
provided without warranty as described in the Simplified BSD License. | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. CWT, JWT and UCCS . . . . . . . . . . . . . . . . . . . . 5 | 1.1. CWT, JWT and UCCS . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.3. Entity Overview . . . . . . . . . . . . . . . . . . . . . 5 | 1.3. Entity Overview . . . . . . . . . . . . . . . . . . . . . 6 | |||
1.4. EAT Operating Models . . . . . . . . . . . . . . . . . . 6 | 1.4. EAT Operating Models . . . . . . . . . . . . . . . . . . 6 | |||
1.5. What is Not Standardized . . . . . . . . . . . . . . . . 7 | 1.5. What is Not Standardized . . . . . . . . . . . . . . . . 7 | |||
1.5.1. Transmission Protocol . . . . . . . . . . . . . . . . 7 | 1.5.1. Transmission Protocol . . . . . . . . . . . . . . . . 8 | |||
1.5.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 8 | 1.5.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 8 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 10 | 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 10 | |||
3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 10 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 10 | |||
3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 10 | 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 10 | |||
3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 11 | 3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 11 | |||
3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 11 | 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 11 | |||
3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 13 | 3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3.5. Origination Claim (origination) . . . . . . . . . . . . . 13 | 3.5. Origination Claim (origination) . . . . . . . . . . . . . 13 | |||
3.5.1. origination CDDL . . . . . . . . . . . . . . . . . . 14 | 3.5.1. origination CDDL . . . . . . . . . . . . . . . . . . 14 | |||
3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 14 | 3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 14 | |||
3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 15 | 3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 14 | |||
3.7. Hardware Version Claims (hardware-version-claims) . . . . 15 | 3.7. Hardware Version Claims (hardware-version-claims) . . . . 14 | |||
3.8. Software Description and Version . . . . . . . . . . . . 16 | 3.8. Software Description and Version . . . . . . . . . . . . 16 | |||
3.9. The Security Level Claim (security-level) . . . . . . . . 17 | 3.9. The Security Level Claim (security-level) . . . . . . . . 16 | |||
3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 18 | 3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 17 | |||
3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 18 | 3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 17 | |||
3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 18 | 3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 17 | |||
3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 18 | 3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 18 | |||
3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 19 | 3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 19 | |||
3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 19 | 3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 19 | |||
3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 20 | 3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 19 | |||
3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 20 | 3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 19 | |||
3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 20 | 3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 19 | |||
3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 20 | 3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 19 | |||
3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 20 | 3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 20 | |||
3.13. The Location Claim (location) . . . . . . . . . . . . . . 21 | 3.13. The Location Claim (location) . . . . . . . . . . . . . . 21 | |||
3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 22 | 3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 21 | |||
3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 22 | 3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 22 | |||
3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 22 | 3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 22 | |||
3.14.2. The Boot Seed Claim (boot-seed) . . . . . . . . . . 22 | ||||
3.15. The Intended Use Claim (intended-use) . . . . . . . . . . 23 | 3.15. The Intended Use Claim (intended-use) . . . . . . . . . . 23 | |||
3.15.1. intended-use CDDL . . . . . . . . . . . . . . . . . 23 | 3.15.1. intended-use CDDL . . . . . . . . . . . . . . . . . 23 | |||
3.16. The Submodules Part of a Token (submods) . . . . . . . . 24 | 3.16. The Profile Claim (profile) . . . . . . . . . . . . . . . 24 | |||
3.16.1. Two Types of Submodules . . . . . . . . . . . . . . 24 | 3.17. The Submodules Part of a Token (submods) . . . . . . . . 24 | |||
3.16.1.1. Non-token Submodules . . . . . . . . . . . . . . 24 | 3.17.1. Two Types of Submodules . . . . . . . . . . . . . . 25 | |||
3.16.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 25 | 3.17.1.1. Non-token Submodules . . . . . . . . . . . . . . 25 | |||
3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 26 | 3.17.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 25 | |||
3.16.2. No Inheritance . . . . . . . . . . . . . . . . . . . 26 | 3.17.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 26 | |||
3.16.3. Security Levels . . . . . . . . . . . . . . . . . . 27 | 3.17.2. No Inheritance . . . . . . . . . . . . . . . . . . . 27 | |||
3.16.4. Submodule Names . . . . . . . . . . . . . . . . . . 27 | 3.17.3. Security Levels . . . . . . . . . . . . . . . . . . 27 | |||
3.16.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 27 | 3.17.4. Submodule Names . . . . . . . . . . . . . . . . . . 27 | |||
3.17.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 27 | ||||
4. Endorsements and Verification Keys . . . . . . . . . . . . . 28 | 4. Endorsements and Verification Keys . . . . . . . . . . . . . 28 | |||
5. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | 5. Profiles . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
5.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 29 | 5.1. List of Profile Issues . . . . . . . . . . . . . . . . . 29 | |||
5.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 29 | 5.1.1. Use of JSON, CBOR or both . . . . . . . . . . . . . . 29 | |||
5.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | 5.1.2. CBOR Map and Array Encoding . . . . . . . . . . . . . 29 | |||
5.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 29 | 5.1.3. CBOR String Encoding . . . . . . . . . . . . . . . . 29 | |||
5.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 30 | 5.1.4. COSE/JOSE Protection . . . . . . . . . . . . . . . . 29 | |||
5.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | 5.1.5. COSE/JOSE Algorithms . . . . . . . . . . . . . . . . 30 | |||
5.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 30 | 5.1.6. Verification Key Identification . . . . . . . . . . . 30 | |||
5.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 32 | 5.1.7. Endorsement Identification . . . . . . . . . . . . . 30 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | 5.1.8. Required Claims . . . . . . . . . . . . . . . . . . . 30 | |||
6.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 38 | 5.1.9. Prohibited Claims . . . . . . . . . . . . . . . . . . 30 | |||
6.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 38 | 5.1.10. Additional Claims . . . . . . . . . . . . . . . . . . 31 | |||
6.2.1. Interoperability and Relying Party Orientation . . . 38 | 5.1.11. Refined Claim Definition . . . . . . . . . . . . . . 31 | |||
6.2.2. Operating System and Technology Neutral . . . . . . . 39 | 5.1.12. CBOR Tags . . . . . . . . . . . . . . . . . . . . . . 31 | |||
6.2.3. Security Level Neutral . . . . . . . . . . . . . . . 39 | 6. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
6.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 39 | 6.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 31 | |||
6.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 40 | 6.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 31 | |||
6.3. Claims Registered by This Document . . . . . . . . . . . 40 | 6.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 40 | 6.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 32 | |||
7.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 41 | 6.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 33 | |||
7.2. Location Privacy Considerations . . . . . . . . . . . . . 41 | 6.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 33 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | 6.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 33 | |||
8.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 42 | 6.4.1.1. EAT Constrained Device Serialization . . . . . . 33 | |||
8.1.1. Transmission of Key Material . . . . . . . . . . . . 42 | 6.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 34 | |||
8.2. Transport Security . . . . . . . . . . . . . . . . . . . 42 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | |||
8.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 43 | 7.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 40 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 | 7.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 40 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 43 | 7.2.1. Interoperability and Relying Party Orientation . . . 40 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 45 | 7.2.2. Operating System and Technology Neutral . . . . . . . 41 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 47 | 7.2.3. Security Level Neutral . . . . . . . . . . . . . . . 41 | |||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 47 | 7.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 41 | |||
A.2. Example with Submodules, Nesting and Security Levels . . 47 | 7.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 42 | |||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 48 | 7.3. Claims Registered by This Document . . . . . . . . . . . 42 | |||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 48 | 8. Privacy Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 51 | 8.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 43 | |||
Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 51 | 8.2. Location Privacy Considerations . . . . . . . . . . . . . 43 | |||
C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 51 | 9. Security Considerations . . . . . . . . . . . . . . . . . . . 44 | |||
C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 52 | 9.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 44 | |||
C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 52 | 9.1.1. Transmission of Key Material . . . . . . . . . . . . 44 | |||
C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 52 | 9.2. Transport Security . . . . . . . . . . . . . . . . . . . 44 | |||
C.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 52 | 9.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 45 | |||
C.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 52 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
C.7. From draft-ietf-rats-eat-05 . . . . . . . . . . . . . . . 53 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 45 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 | 10.2. Informative References . . . . . . . . . . . . . . . . . 47 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 49 | ||||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 49 | ||||
A.2. Example with Submodules, Nesting and Security Levels . . 49 | ||||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 50 | ||||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 50 | ||||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 52 | ||||
Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 53 | ||||
C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 53 | ||||
C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 53 | ||||
C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 53 | ||||
C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 53 | ||||
C.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 54 | ||||
C.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 54 | ||||
C.7. From draft-ietf-rats-05 . . . . . . . . . . . . . . . . . 54 | ||||
C.8. From draft-ietf-rats-06 . . . . . . . . . . . . . . . . . 55 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 55 | ||||
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. | |||
skipping to change at page 4, line 42 ¶ | skipping to change at page 5, line 13 ¶ | |||
The relying party needs to know that the device is one that is known | The relying party needs to know that the device is one that is known | |||
to do biometric matching correctly. Another example is content | to do biometric matching correctly. Another example is content | |||
protection where the relying party wants to know the device will | protection where the relying party wants to know the device will | |||
protect the data. This generalizes on to corporate enterprises that | protect the data. This generalizes on to corporate enterprises that | |||
might want to know that a device is trustworthy before allowing | might want to know that a device is trustworthy before allowing | |||
corporate data to be accessed by it. | 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: | |||
* Proof of the make and model of the device hardware (HW) | o Proof of the make and model of the device hardware (HW) | |||
* 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 | |||
* Measurement of the software (SW) running on the device | o Measurement of the software (SW) running on the device | |||
* Configuration and state of the device | o Configuration and state of the device | |||
* Environmental characteristics of the device such as its GPS | ||||
o Environmental characteristics of the device such as its GPS | ||||
location | location | |||
TODO: mention use for Attestation Evidence and Results. | TODO: mention use for Attestation Evidence and Results. | |||
1.1. CWT, JWT and UCCS | 1.1. CWT, JWT and UCCS | |||
For flexibility and ease of imlpementation in a wide variety of | For flexibility and ease of imlpementation in a wide variety of | |||
environments, EATs can be either CBOR [RFC7049] or JSON [ECMAScript] | environments, EATs can be either CBOR [RFC8949] or JSON [ECMAScript] | |||
format. This specification simultaneously describes both formats. | 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 either a CWT as defined in [RFC8392], a UCCS as defined in | |||
[UCCS.Draft], or a JWT as defined in [RFC7519]. This specification | [UCCS.Draft], or a JWT as defined in [RFC7519]. This specification | |||
extends those specifications with additional claims for attestation. | extends those specifications with additional claims for attestation. | |||
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 format, 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 | 1.2. CDDL | |||
This specification uses CDDL, [RFC8610], as the primary formalism to | This specification uses CDDL, [RFC8610], as the primary formalism to | |||
define each claim. The implementor then interprets the CDDL to come | define each claim. The implementor then interprets the CDDL to come | |||
to either the CBOR [RFC7049] or JSON [ECMAScript] representation. In | to either the CBOR [RFC8949] or JSON [ECMAScript] representation. In | |||
the case of JSON, Appendix E of [RFC8610] is followed. Additional | the case of JSON, Appendix E of [RFC8610] is followed. Additional | |||
rules are given in Section 5.3.2 of this document where Appendix E is | 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 | insufficient. (Note that this is not to define a general means to | |||
translate between CBOR and JSON, but only to define enough such that | translate between CBOR and JSON, but only to define enough such that | |||
the claims defined in this document can be rendered unambiguously in | the claims defined in this document can be rendered unambiguously in | |||
JSON). | JSON). | |||
The CWT specification was authored before CDDL was available and did | The CWT specification was authored before CDDL was available and did | |||
not use it. This specification includes a CDDL definition of most of | not use it. This specification includes a CDDL definition of most of | |||
what is described in [RFC8392]. | what is described in [RFC8392]. | |||
1.3. Entity Overview | 1.3. Entity Overview | |||
skipping to change at page 7, line 5 ¶ | skipping to change at page 7, line 22 ¶ | |||
In all operating models, hardware and/or software on the entity | In all operating models, hardware and/or software on the entity | |||
create an EAT of the format described in this document. The EAT is | create an EAT of the format described in this document. The EAT is | |||
always signed by the attestation key material provisioned by the | always signed by the attestation key material provisioned by the | |||
manufacturer. | manufacturer. | |||
In all operating models, the relying party must end up knowing that | In all operating models, the relying party must end up knowing that | |||
the signature on the EAT is valid and consistent with data from | the signature on the EAT is valid and consistent with data from | |||
claims in the EAT. This can happen in many different ways. Here are | claims in the EAT. This can happen in many different ways. Here are | |||
some examples. | some examples. | |||
* The EAT is transmitted to the relying party. The relying party | o The EAT is transmitted to the relying party. The relying party | |||
gets corresponding key material (e.g. a root certificate) from the | gets corresponding key material (e.g. a root certificate) from the | |||
manufacturer. The relying party performs the verification. | manufacturer. The relying party performs the verification. | |||
* The EAT is transmitted to the relying party. The relying party | o The EAT is transmitted to the relying party. The relying party | |||
transmits the EAT to a verification service offered by the | transmits the EAT to a verification service offered by the | |||
manufacturer. The server returns the validated claims. | manufacturer. The server returns the validated claims. | |||
* The EAT is transmitted directly to a verification service, perhaps | o The EAT is transmitted directly to a verification service, perhaps | |||
operated by the manufacturer or perhaps by another party. It | operated by the manufacturer or perhaps by another party. It | |||
verifies the EAT and makes the validated claims available to the | verifies the EAT and makes the validated claims available to the | |||
relying party. It may even modify the claims in some way and re- | relying party. It may even modify the claims in some way and re- | |||
sign the EAT (with a different signing key). | sign the EAT (with a different signing key). | |||
All these operating models are supported and there is no preference | All these operating models are supported and there is no preference | |||
of one over the other. It is important to support this variety of | of one over the other. It is important to support this variety of | |||
operating models to generally facilitate deployment and to allow for | operating models to generally facilitate deployment and to allow for | |||
some special scenarios. One special scenario has a validation | some special scenarios. One special scenario has a validation | |||
service that is monetized, most likely by the manufacturer. In | service that is monetized, most likely by the manufacturer. In | |||
skipping to change at page 9, line 26 ¶ | skipping to change at page 9, line 37 ¶ | |||
3. The Claims | 3. The Claims | |||
This section describes new claims defined for attestation. It also | This section describes new claims defined for attestation. It also | |||
mentions several claims defined by CWT and JWT that are particularly | mentions several claims defined by CWT and JWT that are particularly | |||
important for EAT. | important for EAT. | |||
Note also: * Any claim defined for CWT or JWT may be used in an EAT | Note also: * Any claim defined for CWT or JWT may be used in an EAT | |||
including those in the CWT [IANA.CWT.Claims] and JWT IANA | including those in the CWT [IANA.CWT.Claims] and JWT IANA | |||
[IANA.JWT.Claims] claims registries. | [IANA.JWT.Claims] claims registries. | |||
* All claims are optional | o All claims are optional | |||
* No claims are mandatory | o No claims are mandatory | |||
* All claims that are not understood by implementations MUST be | o All claims that are not understood by implementations MUST be | |||
ignored | ignored | |||
There are no default values or meanings assigned to absent claims | There are no default values or meanings assigned to absent claims | |||
other than they are not reported. The reason for a claim's absence | other than they are not reported. The reason for a claim's absence | |||
may be the implementation not supporting the claim, an inability to | may be the implementation not supporting the claim, an inability to | |||
determine its value, or a preference to report in a different way | determine its value, or a preference to report in a different way | |||
such as a proprietary claim. | such as a proprietary claim. | |||
CDDL along with text descriptions is used to define each claim | CDDL along with text descriptions is used to define each claim | |||
indepdent of encoding. Each claim is defined as a CDDL group (the | indepdent of encoding. Each claim is defined as a CDDL group (the | |||
group is a general aggregation and type definition feature of CDDL). | group is a general aggregation and type definition feature of CDDL). | |||
In the encoding section Section 5, the CDDL groups turn into CBOR map | In the encoding section Section 6, the CDDL groups turn into CBOR map | |||
entries and JSON name/value pairs. | entries and JSON name/value pairs. | |||
TODO: add paragraph here about use for Attestation Evidence and for | TODO: add paragraph here about use for Attestation Evidence and for | |||
Results. | Results. | |||
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 | |||
skipping to change at page 11, line 32 ¶ | skipping to change at page 11, line 41 ¶ | |||
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 7.1. | There are privacy considerations for UEID's. See Section 8.1. | |||
The UEID should be permanent. It should never change for a given | The UEID should be permanent. It should never change for a given | |||
device / entity. In addition, it should not be reprogrammable. | device / entity. In addition, it should not be reprogrammable. | |||
UEID's are variable length. All implementations MUST be able to | UEID's are variable length. All implementations MUST be able to | |||
receive UEID's that are 33 bytes long (1 type byte and 256 bits). | receive UEID's that are 33 bytes long (1 type byte and 256 bits). | |||
The recommended maximum sent is also 33 bytes. | The 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 | |||
processes and to give options to avoid paying fees for certain types | processes and to give options to avoid paying fees for certain types | |||
of manufacturer registrations. | of manufacturer registrations. | |||
Creation of new types requires a Standards Action [RFC8126]. | Creation of new types requires a Standards Action [RFC8126]. | |||
+======+======+===================================================+ | +------+------+-----------------------------------------------------+ | |||
| Type | Type | Specification | | | Type | Type | Specification | | |||
| Byte | Name | | | | Byte | Name | | | |||
+======+======+===================================================+ | +------+------+-----------------------------------------------------+ | |||
| 0x01 | RAND | This is a 128, 192 or 256 bit random number | | | 0x01 | RAND | This is a 128, 192 or 256 bit random number | | |||
| | | generated once and stored in the device. This | | | | | generated once and stored in the device. This may | | |||
| | | may be constructed by concatenating enough | | | | | be constructed by concatenating enough identifiers | | |||
| | | identifiers to make up an equivalent number of | | | | | to make up an equivalent number of random bits and | | |||
| | | random bits and then feeding the concatenation | | | | | then feeding the concatenation through a | | |||
| | | through a cryptographic hash function. It may | | | | | cryptographic hash function. It may also be a | | |||
| | | also be a cryptographic quality random number | | | | | cryptographic quality random number generated once | | |||
| | | generated once at the beginning of the life of | | | | | at the beginning of the life of the device and | | |||
| | | the device and stored. It may not be smaller | | | | | stored. It may not be smaller than 128 bits. | | |||
| | | than 128 bits. | | | 0x02 | IEEE | This makes use of the IEEE company identification | | |||
+------+------+---------------------------------------------------+ | | | EUI | registry. An EUI is either an EUI-48, EUI-60 or | | |||
| 0x02 | IEEE | This makes use of the IEEE company identification | | | | | EUI-64 and made up of an OUI, OUI-36 or a CID, | | |||
| | EUI | registry. An EUI is either an EUI-48, EUI-60 or | | | | | different registered company identifiers, and some | | |||
| | | EUI-64 and made up of an OUI, OUI-36 or a CID, | | | | | unique per-device identifier. EUIs are often the | | |||
| | | different registered company identifiers, and | | | | | same as or similar to MAC addresses. This type | | |||
| | | some unique per-device identifier. EUIs are | | | | | includes MAC-48, an obsolete name for EUI-48. (Note | | |||
| | | often the same as or similar to MAC addresses. | | | | | that while devices with multiple network interfaces | | |||
| | | This type includes MAC-48, an obsolete name for | | | | | may have multiple MAC addresses, there is only one | | |||
| | | EUI-48. (Note that while devices with multiple | | | | | UEID for a device) [IEEE.802-2001], [OUI.Guide] | | |||
| | | network interfaces may have multiple MAC | | | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | |||
| | | addresses, there is only one UEID for a device) | | | | | 8-digit Type Allocation Code and a 6-digit serial | | |||
| | | [IEEE.802-2001], [OUI.Guide] | | | | | number allocated by the manufacturer, which SHALL | | |||
+------+------+---------------------------------------------------+ | | | | be encoded as byte string of length 14 with each | | |||
| 0x03 | IMEI | This is a 14-digit identifier consisting of an | | | | | byte as the digit's value (not the ASCII encoding | | |||
| | | 8-digit Type Allocation Code and a 6-digit serial | | | | | of the digit; the digit 3 encodes as 0x03, not | | |||
| | | number allocated by the manufacturer, which SHALL | | | | | 0x33). The IMEI value encoded SHALL NOT include | | |||
| | | be encoded as byte string of length 14 with each | | | | | Luhn checksum or SVN information. [ThreeGPP.IMEI] | | |||
| | | byte as the digit's value (not the ASCII encoding | | +------+------+-----------------------------------------------------+ | |||
| | | of the digit; the digit 3 encodes as 0x03, not | | ||||
| | | 0x33). The IMEI value encoded SHALL NOT include | | ||||
| | | 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: | |||
* UEIDs types may vary freely from one manufacturer to the next. | o UEIDs types may vary freely from one manufacturer to the next. | |||
* 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. | |||
* 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 | 3.4.1. ueid CDDL | |||
ueid-type = bstr .size (7..33) | ueid-type = bstr .size (7..33) | |||
ueid-claim = ( | ueid-claim = ( | |||
skipping to change at page 14, line 5 ¶ | skipping to change at page 13, line 36 ¶ | |||
3.5. Origination Claim (origination) | 3.5. Origination Claim (origination) | |||
TODO: this claim is likely to be dropped in favor of Endorsement | TODO: this claim is likely to be dropped in favor of Endorsement | |||
identifier and locators. | identifier and locators. | |||
This claim describes the parts of the device or entity that are | This claim describes the parts of the device or entity that are | |||
creating the EAT. Often it will be tied back to the device or chip | creating the EAT. Often it will be tied back to the device or chip | |||
manufacturer. The following table gives some examples: | manufacturer. The following table gives some examples: | |||
+===================+=========================================+ | +-------------------+-----------------------------------------------+ | |||
| Name | Description | | | Name | Description | | |||
+===================+=========================================+ | +-------------------+-----------------------------------------------+ | |||
| Acme-TEE | The EATs are generated in the TEE | | | Acme-TEE | The EATs are generated in the TEE authored | | |||
| | authored and configured by "Acme" | | | | and configured by "Acme" | | |||
+-------------------+-----------------------------------------+ | | Acme-TPM | The EATs are generated in a TPM manufactured | | |||
| Acme-TPM | The EATs are generated in a TPM | | | | by "Acme" | | |||
| | manufactured by "Acme" | | | Acme-Linux-Kernel | The EATs are generated in a Linux kernel | | |||
+-------------------+-----------------------------------------+ | | | configured and shipped by "Acme" | | |||
| Acme-Linux-Kernel | The EATs are generated in a Linux | | | Acme-TA | The EATs are generated in a Trusted | | |||
| | kernel configured and shipped by "Acme" | | | | Application (TA) authored by "Acme" | | |||
+-------------------+-----------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| Acme-TA | The EATs are generated in a Trusted | | ||||
| | Application (TA) authored by "Acme" | | ||||
+-------------------+-----------------------------------------+ | ||||
Table 2 | ||||
TODO: consider a more structure approach where the name and the URI | TODO: consider a more structure approach where the name and the URI | |||
and other are in separate fields. | and other are in separate fields. | |||
TODO: This needs refinement. It is somewhat parallel to issuer claim | TODO: This needs refinement. It is somewhat parallel to issuer claim | |||
in CWT in that it describes the authority that created the token. | in CWT in that it describes the authority that created the token. | |||
3.5.1. origination CDDL | 3.5.1. origination CDDL | |||
origination-claim = ( | origination-claim = ( | |||
skipping to change at page 17, line 11 ¶ | skipping to change at page 16, line 30 ¶ | |||
3.8. Software Description and Version | 3.8. Software Description and Version | |||
TODO: Add claims that reference CoSWID. | TODO: Add claims that reference CoSWID. | |||
3.9. The Security Level Claim (security-level) | 3.9. 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 done by defining four security levels as | |||
described below. This is similar to the key protection types defined | described below. This is similar to the key protection types defined | |||
by the Fast Identity Online (FIDO) Alliance [FIDO.Registry]). | 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. | reside 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 the | |||
EAT provides no meaningful security assurances. | EAT provides no meaningful security assurances. | |||
2- Restricted Entities at this level should not be general-purpose | 2- Restricted Entities at this level should not be general-purpose | |||
skipping to change at page 22, line 11 ¶ | skipping to change at page 21, line 35 ¶ | |||
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 Section 7.2 below. | See location-related privacy considerations in Section 8.2 below. | |||
3.13.1. location CDDL | 3.13.1. location CDDL | |||
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, | |||
? age => uint | ? age => uint | |||
skipping to change at page 23, line 5 ¶ | skipping to change at page 22, line 41 ¶ | |||
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 | 3.14.1. uptime CDDL | |||
uptime-claim = ( | uptime-claim = ( | |||
uptime => uint | uptime => uint | |||
) | ) | |||
3.14.2. The Boot Seed Claim (boot-seed) | ||||
The Boot Seed claim is a random value created at system boot time | ||||
that will allow differentiation of reports from different boot | ||||
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 | ||||
secret. | ||||
boot-seed-claim = ( | ||||
boot-seed => bytes | ||||
) | ||||
3.15. The Intended Use Claim (intended-use) | 3.15. 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 | |||
skipping to change at page 24, line 9 ¶ | skipping to change at page 24, line 9 ¶ | |||
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.15.1. intended-use CDDL | 3.15.1. intended-use CDDL | |||
intended-use-type = &( | intended-use-type = &( | |||
generic: 1, | generic: 1, | |||
registration: 2, | registration: 2, | |||
provisioning: 3, | provisioning: 3, | |||
csr: 4, | csr: 4, | |||
pop: 5 | pop: 5 | |||
) | ) | |||
intended-use-claim = ( | intended-use-claim = ( | |||
intended-use => intended-use-type | intended-use => intended-use-type | |||
) | ||||
3.16. The Profile Claim (profile) | ||||
The profile claim is a text string that simply gives the name of the | ||||
profile to which the token purports to adhere to. It may name an | ||||
IETF document, some other document or no particular document. There | ||||
is no requirement that the named document be publicly accessible. | ||||
See Section 5 for a detailed description of a profile. | ||||
Note that this named "eat-profile" for JWT and is distinct from the | ||||
already registered "profile" claim in the JWT claims registry. | ||||
profile-claim = ( | ||||
profile => tstr | ||||
) | ) | |||
3.16. The Submodules Part of a Token (submods) | 3.17. The Submodules Part of a Token (submods) | |||
Some devices are complex, having many subsystems or submodules. A | Some devices are complex, having many subsystems or submodules. A | |||
mobile phone is a good example. It may have several connectivity | mobile phone is a good example. It may have several connectivity | |||
submodules for communications (e.g., Wi-Fi and cellular). It may | submodules for communications (e.g., Wi-Fi and cellular). It may | |||
have subsystems for low-power audio and video playback. It may have | have subsystems for low-power audio and video playback. It may have | |||
one or more security-oriented subsystems like a TEE or a Secure | one or more security-oriented subsystems like a TEE or a Secure | |||
Element. | Element. | |||
The claims for each these can be grouped together in a submodule. | The claims for each these can be grouped together in a submodule. | |||
The submods part of a token are in a single map/object with many | The submods part of a token are in a single map/object with many | |||
entries, one per submodule. There is only one submods map in a | entries, one per submodule. There is only one submods map in a | |||
token. It is identified by its specific label. It is a peer to | 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 | other claims, but it is not called a claim because it is a container | |||
for a claim set rather than an individual claim. This submods part | for a claim set rather than an individual claim. This submods part | |||
of a token allows what might be called recursion. It allows claim | of a token allows what might be called recursion. It allows claim | |||
sets inside of claim sets inside of claims sets... | sets inside of claim sets inside of claims sets... | |||
3.16.1. Two Types of Submodules | 3.17.1. Two Types of Submodules | |||
Each entry in the submod map is one of two types: | Each entry in the submod map is one of two types: | |||
* A non-token submodule that is a map or object directly containing | o A non-token submodule that is a map or object directly containing | |||
claims for the submodule. | claims for the submodule. | |||
* A nested EAT that is a fully formed, independently signed EAT | o A nested EAT that is a fully formed, independently signed EAT | |||
token | token | |||
3.16.1.1. Non-token Submodules | 3.17.1.1. Non-token Submodules | |||
This is simply a map or object containing claims about the submodule. | This is simply a map or object containing claims about the submodule. | |||
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 | It is signed/encrypted along with the rest of the token and thus the | |||
claims are secured by the same Attester with the same signing key as | claims are secured by the same Attester with the same signing key as | |||
the rest of the token. | the rest of the token. | |||
If a token is in CBOR format (a CWT or a UCCS), all non-token | If a token is in CBOR format (a CWT or a UCCS), all non-token | |||
submodules must be CBOR format. If a token in in JSON format (a | submodules must be CBOR format. If a token in in JSON format (a | |||
JWT), all non-token submodules must be in JSON format. | JWT), all non-token submodules must be in JSON format. | |||
When decoding, this type of submodule is recognized from the other | When decoding, this type of submodule is recognized from the other | |||
type by being a data item of type map for CBOR or type object for | type by being a data item of type map for CBOR or type object for | |||
JSON. | JSON. | |||
3.16.1.2. Nested EATs | 3.17.1.2. Nested EATs | |||
This type of submodule is a fully formed secured EAT as defined in | This type of submodule is a fully formed secured EAT as defined in | |||
this document except that it MUST NOT be a UCCS or an unsecured JWT. | this document except that it MUST NOT be a UCCS or an unsecured JWT. | |||
A nested token that is one that is always secured using COSE or JOSE, | A nested token that is one that is always secured using COSE or JOSE, | |||
usually by an independent Attester. When the surrounding EAT is a | usually by an independent Attester. When the surrounding EAT is a | |||
CWT or secured JWT, the nested token becomes securely bound with the | CWT or secured JWT, the nested token becomes securely bound with the | |||
other claims in the surrounding token. | other claims in the surrounding token. | |||
It is allowed to have a CWT as a submodule in a JWT and vice versa, | It is allowed to have a CWT as a submodule in a JWT and vice versa, | |||
but this SHOULD be avoided unless necessary. | but this SHOULD be avoided unless necessary. | |||
3.16.1.2.1. Surrounding EAT is CBOR format | 3.17.1.2.1. Surrounding EAT is CBOR format | |||
They type of an EAT nested in a CWT is determined by whether the CBOR | They type of an EAT nested in a CWT is determined by whether the CBOR | |||
type is a text string or a byte string. If a text string, then it is | type is a text string or a byte string. If a text string, then it is | |||
a JWT. If a byte string, then it is a CWT. | 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 | A CWT nested in a CBOR-format token is always wrapped by a byte | |||
string for easier handling with standard CBOR decoders and token | string for easier handling with standard CBOR decoders and token | |||
processing APIs that will typically take a byte buffer as input. | processing APIs that will typically take a byte buffer as input. | |||
Nested CWTs may be either a CWT CBOR tag or a CWT Protocol Message. | Nested CWTs may be either a CWT CBOR tag or a CWT Protocol Message. | |||
COSE layers in nested CWT EATs MUST be a COSE_Tagged_Message, never a | 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_Untagged_Message. If a nested EAT has more than one level of | |||
COSE, for example one that is both encrypted and signed, a | COSE, for example one that is both encrypted and signed, a | |||
COSE_Tagged_message must be used at every level. | COSE_Tagged_message must be used at every level. | |||
3.16.1.2.2. Surrounding EAT is JSON format | 3.17.1.2.2. Surrounding EAT is JSON format | |||
When a CWT is nested in a JWT, it must be as a 55799 tag in order to | When a CWT is nested in a JWT, it must be as a 55799 tag in order to | |||
distinguish it from a nested JWT. | distinguish it from a nested JWT. | |||
When a nested EAT in a JWT is decoded, first remove the base64url | When a nested EAT in a JWT is decoded, first remove the base64url | |||
encoding. Next, check to see if it starts with the bytes 0xd9d9f7. | encoding. Next, check to see if it starts with the bytes 0xd9d9f7. | |||
If so, then it is a CWT as a JWT will never start with these four | If so, then it is a CWT as a JWT will never start with these four | |||
bytes. If not if it is a JWT. | bytes. If not if it is a JWT. | |||
Other than the 55799 tag requirement, tag usage for CWT's nested in a | Other than the 55799 tag requirement, tag usage for CWT's nested in a | |||
JSON format token follow the same rules as for CWTs nested in CBOR- | JSON format token follow the same rules as for CWTs nested in CBOR- | |||
format tokens. It may be a CWT CBOR tag or a CWT Protocol Message | format tokens. It may be a CWT CBOR tag or a CWT Protocol Message | |||
and COSE_Tagged_Message MUST be used at all COSE layers. | and COSE_Tagged_Message MUST be used at all COSE layers. | |||
3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules | 3.17.1.3. Unsecured JWTs and UCCS Tokens as Submodules | |||
To incorporate a UCCS token as a submodule, it MUST be as a non-token | To incorporate a UCCS token as a submodule, it MUST be as a non-token | |||
submodule. This can be accomplished inserting the content of the | submodule. This can be accomplished inserting the content of the | |||
UCCS Tag into the submodule map. The content of a UCCS tag is | UCCS Tag into the submodule map. The content of a UCCS tag is | |||
exactly a map of claims as required for a non-token submodule. If | 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 | the UCCS is not a UCCS tag, then it can just be inserted into the | |||
submodule map directly. | submodule map directly. | |||
The definition of a nested EAT type of submodule is that it is one | The definition of a nested EAT type of submodule is that it is one | |||
that is secured (signed) by an Attester. Since UCCS tokens are | that is secured (signed) by an Attester. Since UCCS tokens are | |||
skipping to change at page 26, line 44 ¶ | skipping to change at page 27, line 5 ¶ | |||
To incorporate an Unsecured JWT as a submodule, the null-security | To incorporate an Unsecured JWT as a submodule, the null-security | |||
JOSE wrapping should be removed. The resulting claims set should be | JOSE wrapping should be removed. The resulting claims set should be | |||
inserted as a non-token submodule. | inserted as a non-token submodule. | |||
To incorporate a UCCS token in a surrounding JSON token, the UCCS | To incorporate a UCCS token in a surrounding JSON token, the UCCS | |||
token claims should be translated from CBOR to JSON. To incorporate | token claims should be translated from CBOR to JSON. To incorporate | |||
an Unsecured JWT into a surrounding CBOR-format token, the null- | an Unsecured JWT into a surrounding CBOR-format token, the null- | |||
security JOSE should be removed and the claims translated from JSON | security JOSE should be removed and the claims translated from JSON | |||
to CBOR. | to CBOR. | |||
3.16.2. No Inheritance | 3.17.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 and age. | |||
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.16.3. Security Levels | 3.17.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.16.4. Submodule Names | 3.17.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.16.5. submods CDDL | 3.17.5. submods CDDL | |||
; The part of a token that contains all the submodules. It is a peer | ; 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 | ; with the claims in the token, but not a claim, only a map/object to | |||
; hold all the submodules. | ; hold all the submodules. | |||
submods-part = ( | submods-part = ( | |||
submods => submods-type | submods => submods-type | |||
) | ) | |||
submods-type = { + submod-type } | submods-type = { + submod-type } | |||
skipping to change at page 28, line 39 ¶ | skipping to change at page 28, line 39 ¶ | |||
submod-name = tstr | submod-name = tstr | |||
4. Endorsements and Verification Keys | 4. Endorsements and Verification Keys | |||
TODO: fill this section in. It will discuss key IDs, endorsement ID | TODO: fill this section in. It will discuss key IDs, endorsement ID | |||
and such that are needed as input needed to by the Verifier to verify | and such that are needed as input needed to by the Verifier to verify | |||
the signature. This will NOT discuss the contents of an Endorsement, | the signature. This will NOT discuss the contents of an Endorsement, | |||
just and ID/locator. | just and ID/locator. | |||
5. Encoding | 5. Profiles | |||
This EAT specification does not gaurantee that implementations of it | ||||
will interoperate. The variability in this specification is | ||||
necessary to accommodate the widely varying use cases. An EAT | ||||
profile narrows the specification for a specific use case. An ideal | ||||
EAT profile will gauarantee interoperability. | ||||
The profile can be named in the token using the profile claim | ||||
described in Section 3.16. | ||||
5.1. List of Profile Issues | ||||
The following is a list of EAT, CWT, UCCS, JWS, COSE, JOSE and CBOR | ||||
options that a profile should address. | ||||
5.1.1. Use of JSON, CBOR or both | ||||
The profile should indicate whether the token format should be CBOR, | ||||
JSON, both or even some other encoding. If some other encoding, a | ||||
specification for how the CDDL described here is serialized in that | ||||
encoding is necessary. | ||||
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 | ||||
of the same encoding of the top level token. | ||||
5.1.2. CBOR Map and Array Encoding | ||||
The profile should indicate whether definite-length arrays/maps, | ||||
indefinite-length arrays/maps or both are allowed. A good default is | ||||
to allow only definite-length arrays/maps. | ||||
An alternate is to allow both definite and indefinite-length arrays/ | ||||
maps. The decoder should accept either. Encoders that need to fit | ||||
on very small hardware or be actually implement in hardware can use | ||||
indefinite-length encoding. | ||||
This applies to individual EAT claims, CWT and COSE parts of the | ||||
implementation. | ||||
5.1.3. CBOR String Encoding | ||||
The profile should indicate whether definite-length strings, | ||||
indefinite-length strings or both are allowed. A good default is to | ||||
allow only definite-length strings. As with map and array encoding, | ||||
allowing indefinite-length strings can be beneficial for some smaller | ||||
implementations. | ||||
5.1.4. COSE/JOSE Protection | ||||
COSE and JOSE have several options for signed, MACed and encrypted | ||||
messages. EAT/CWT has the option to have no protection using UCCS | ||||
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 | ||||
combinations allowed by COSE, JOSE, JWT, CWT and UCCS are allowed by | ||||
EAT. | ||||
The profile should list the protections that must be supported by all | ||||
decoders implementing the profile. The encoders them must implement | ||||
a subset of what is listed for the decoders, perhaps only one. | ||||
Implementations may choose to sign or MAC before encryption so that | ||||
the implementation layer doing the signing or MACing can be the | ||||
smallest. It is often easier to make smaller implementations more | ||||
secure, perhaps even implementing in solely in hardware. The key | ||||
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 | ||||
requires less protection. | ||||
5.1.5. COSE/JOSE Algorithms | ||||
The profile document should list the COSE algorithms that a Verifier | ||||
must implement. The Attester will select one of them. Since there | ||||
is no negotiation, the Verifier should implement all algorithms | ||||
listed in the profile. | ||||
5.1.6. Verification Key Identification | ||||
Section Section 4 describes a number of methods for identifying a | ||||
verification key. The profile document should specify one of these | ||||
or one that is not described. The ones described in this document | ||||
are only roughly described. The profile document should go into the | ||||
full detail. | ||||
5.1.7. Endorsement Identification | ||||
Similar to, or perhaps the same as Verification Key Identification, | ||||
the profile may wish to specify how Endorsements are to be | ||||
identified. However note that Endorsement Identification is | ||||
optional, where as key identification is not. | ||||
5.1.8. Required Claims | ||||
The profile can list claims whose absence results in Verification | ||||
failure. | ||||
5.1.9. Prohibited Claims | ||||
The profile can list claims whose presence results in Verification | ||||
failure. | ||||
5.1.10. Additional Claims | ||||
The profile may describe entirely new claims. These claims can be | ||||
required or optional. | ||||
5.1.11. Refined Claim Definition | ||||
The profile may lock down optional aspects of individual claims. For | ||||
example, it may require altitude in the location claim, or it may | ||||
require that HW Versions always be described using EAN-13. | ||||
5.1.12. CBOR Tags | ||||
The profile should specify whether the token should be a CWT Tag or | ||||
not. Similarly, the profile should specify whether the token should | ||||
be a UCCS tag or not. | ||||
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 | ||||
in a CWT tag. | ||||
Often a tag is unncessary because the surrounding or carrying | ||||
protocol identifies the object as an EAT. | ||||
6. Encoding | ||||
This makes use of the types defined in CDDL Appendix D, Standard | This makes use of the types defined in CDDL Appendix D, Standard | |||
Prelude. | Prelude. | |||
Some of the CDDL included here is for claims that are defined in CWT | Some of the CDDL included here is for claims that are defined in CWT | |||
[RFC8392] or JWT [RFC7519] or are in the IANA CWT or JWT registries. | [RFC8392] or JWT [RFC7519] or are in the IANA CWT or JWT registries. | |||
CDDL was not in use when these claims where defined. | CDDL was not in use when these claims where defined. | |||
5.1. Common CDDL Types | 6.1. Common CDDL Types | |||
time-int is identical to the epoch-based time, but disallows | time-int is identical to the epoch-based time, but disallows | |||
floating-point representation. | floating-point representation. | |||
string-or-uri = tstr | string-or-uri = tstr | |||
time-int = #6.1(int) | time-int = #6.1(int) | |||
5.2. CDDL for CWT-defined Claims | 6.2. CDDL for CWT-defined Claims | |||
This section provides CDDL for the claims defined in CWT. It is non- | This section provides CDDL for the claims defined in CWT. It is non- | |||
normative as [RFC8392] is the authoritative definition of these | normative as [RFC8392] is the authoritative definition of these | |||
claims. | claims. | |||
$$eat-extension //= ( | $$eat-extension //= ( | |||
? issuer => text, | ? issuer => text, | |||
? subject => text, | ? subject => text, | |||
? audience => text, | ? audience => text, | |||
? expiration => time, | ? expiration => time, | |||
skipping to change at page 29, line 38 ¶ | skipping to change at page 32, line 23 ¶ | |||
) | ) | |||
issuer = 1 | issuer = 1 | |||
subject = 2 | subject = 2 | |||
audience = 3 | audience = 3 | |||
expiration = 4 | expiration = 4 | |||
not-before = 5 | not-before = 5 | |||
issued-at = 6 | issued-at = 6 | |||
cwt-id = 7 | cwt-id = 7 | |||
5.3. JSON | 6.3. JSON | |||
6.3.1. JSON Labels | ||||
5.3.1. JSON Labels | ||||
ueid /= "ueid" | ueid /= "ueid" | |||
nonce /= "nonce" | nonce /= "nonce" | |||
origination /= "origination" | origination /= "origination" | |||
oemid /= "oemid" | oemid /= "oemid" | |||
security-level /= "security-level" | security-level /= "security-level" | |||
secure-boot /= "secure-boot" | secure-boot /= "secure-boot" | |||
debug-status /= "debug-status" | debug-status /= "debug-status" | |||
location /= "location" | location /= "location" | |||
age /= "age" | age /= "age" | |||
uptime /= "uptime" | uptime /= "uptime" | |||
profile /= "eat-profile" | ||||
boot-seed /= "bootseed" | ||||
submods /= "submods" | submods /= "submods" | |||
timestamp /= "timestamp" | timestamp /= "timestamp" | |||
latitude /= "lat" | latitude /= "lat" | |||
longitude /= "long" | longitude /= "long" | |||
altitude /= "alt" | altitude /= "alt" | |||
accuracy /= "accry" | accuracy /= "accry" | |||
altitude-accuracy /= "alt-accry" | altitude-accuracy /= "alt-accry" | |||
heading /= "heading" | heading /= "heading" | |||
speed /= "speed" | speed /= "speed" | |||
5.3.2. JSON Interoperability | 6.3.2. JSON Interoperability | |||
JSON should be encoded per RFC 8610 Appendix E. In addition, the | JSON should be encoded per RFC 8610 Appendix E. In addition, the | |||
following CDDL types are encoded in JSON as follows: | following CDDL types are encoded in JSON as follows: | |||
* bstr - must be base64url encoded | o bstr - must be base64url encoded | |||
* 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]. | |||
* 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]. | |||
5.4. CBOR | 6.4. CBOR | |||
5.4.1. CBOR Interoperability | ||||
Variations in the CBOR serializations supported in CBOR encoding and | ||||
decoding are allowed and suggests that CBOR-based protocols specify | ||||
how this variation is handled. This section specifies what formats | ||||
MUST be supported in order to achieve interoperability. | ||||
The assumption is that the entity is likely to be a constrained | ||||
device and relying party is likely to be a very capable server. The | ||||
approach taken is that the entity generating the token can use | ||||
whatever encoding it wants, specifically encodings that are easier to | ||||
implement such as indefinite lengths. The relying party receiving | ||||
the token must support decoding all encodings. | ||||
These rules cover all types used in the claims in this document. | ||||
They also are recommendations for additional claims. | ||||
Canonical CBOR encoding, Preferred Serialization and | ||||
Deterministically Encoded CBOR are explicitly NOT required as they | ||||
would place an unnecessary burden on the entity implementation, | ||||
particularly if the entity implementation is implemented in hardware. | ||||
* Integer Encoding (major type 0, 1) - The entity may use any | ||||
integer encoding allowed by CBOR. The server MUST accept all | ||||
integer encodings allowed by CBOR. | ||||
* String Encoding (major type 2 and 3) - The entity can use any | ||||
string encoding allowed by CBOR including indefinite lengths. It | ||||
may also encode the lengths of strings in any way allowed by CBOR. | ||||
The server must accept all string encodings. | ||||
* Major type 2, bstr, SHOULD have tag 21 to indicate conversion to | ||||
base64url in case that conversion is performed. | ||||
* Map and Array Encoding (major type 4 and 5) - The entity can use | ||||
any array or map encoding allowed by CBOR including indefinite | ||||
lengths. Sorting of map keys is not required. Duplicate map keys | ||||
are not allowed. The server must accept all array and map | ||||
encodings. The server may reject maps with duplicate map keys. | ||||
* Date and Time - The entity should send dates as tag 1 encoded as | 6.4.1. CBOR Interoperability | |||
64-bit or 32-bit integers. The entity may not send floating-point | ||||
dates. The server must support tag 1 epoch-based dates encoded as | ||||
64-bit or 32-bit integers. The entity may send tag 0 dates, | ||||
however tag 1 is preferred. The server must support tag 0 UTC | ||||
dates. | ||||
* URIs - URIs should be encoded as text strings and marked with tag | CBOR allows data items to be serialized in more than one form. If | |||
32. | the sender uses a form that the receiver can't decode, there will not | |||
be interoperability. | ||||
* Floating Point - The entity may use any floating-point encoding. | This specification gives no blanket requirements to narrow CBOR | |||
The relying party must support decoding of all types of floating- | serialization for all uses of EAT. This allows individual uses to | |||
point. | tailor serialization to the environment. It also may result in EAT | |||
implementations that don't interoperate. | ||||
* Other types - Other types like bignums, regular expressions and | One way to guarantee interoperability is to clearly specify CBOR | |||
such, SHOULD NOT be used. The server MAY support them but is not | serialization in a profile document. See Section 5 for a list of | |||
required to so interoperability is not guaranteed. | serialization issues that should be addressed. | |||
5.5. Collected CDDL | EAT will be commonly used where the device generating the attestation | |||
is constrained and the receiver/verifier of the attestation is a | ||||
capacious server. Following is a set of serialization requirements | ||||
that work well for that use case and are guaranteed to interoperate. | ||||
Use of this serialization is recommended where possible, but not | ||||
required. An EAT profile may just reference the following section | ||||
rather than spell out serialization details. | ||||
; This is the top-level definition of the claims in EAT tokens. To | 6.4.1.1. EAT Constrained Device Serialization | |||
; form an actual EAT Token, this claim set is enclosed in a COSE, JOSE | ||||
; or UCCS message. | ||||
; TO-DO: Add intended-use claim | ||||
eat-claim-set = { | o Preferred serialization described in section 4.1 of [RFC8949] is | |||
? ueid-claim, | not required. The EAT decoder must accept all forms of number | |||
? nonce-claim, | serialization. The EAT encoder may use any form it wishes. | |||
? origination-claim, | ||||
? oemid-claim, | ||||
? hardware-version-claims, | ||||
? security-level-claim, | ||||
? secure-boot-claim, | ||||
? debug-status-claim, | ||||
? location-claim, | ||||
? uptime-claim, | ||||
? submods-part, | ||||
* $$eat-extension, | ||||
} | ||||
; This is the top-level definition of an EAT Token. It is a CWT, JWT | o The EAT decoder must accept indefinite length arrays and maps as | |||
; or UCSS where the payload is an eat-claim-set. A JWT_Message is what | described in section 3.2.2 of [RFC8949]. The EAT encoder may use | |||
; is defined by JWT in RFC 7519. (RFC 7519 doesn't use CDDL so a there | indefinite length arrays and maps if it wishes. | |||
; is no actual CDDL definition of JWT_Message). | ||||
eat-token = EAT_Tagged_Message / EAT_Untagged_Message / JWT_Message | o The EAT decoder must accept indefinite length strings as described | |||
in section 3.2.3 of [RFC8949]. The EAT encoder may use indefinite | ||||
length strings if it wishes. | ||||
; This is CBOR-format EAT token in the CWT or UCCS format that is a | o Sorting of maps by key is not required. The EAT decoder must not | |||
; tag. COSE_Tagged_message is defined in RFC 8152. Tag 601 is | rely on sorting. | |||
; proposed by the UCCS draft, but not yet assigned. | ||||
EAT_Tagged_Message = #6.61(COSE_Tagged_Message) / #6.601(eat-claim-set) | o Deterministic encoding described in Section 4.2 of [RFC8949] is | |||
not required. | ||||
; This is a CBOR-format EAT token that is a CWT or UCSS that is not a | o Basic validity described in section 5.3.1 of [RFC8949] must be | |||
; tag COSE_Tagged_message and COSE_Untagged_Message are defined in RFC | followed. The EAT encoder must not send duplicate map keys/labels | |||
; 8152. | or invalid UTF-8 strings. | |||
EAT_Untagged_Message = COSE_Tagged_Message / COSE_Untagged_Message / UCCS_Untagged_Message | 6.5. Collected CDDL | |||
; 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 | ; This is the top-level definition of the claims in EAT tokens. To | |||
; form an actual EAT Token, this claim set is enclosed in a COSE, JOSE | ||||
; or UCCS message. | ||||
; The following Claim Keys (labels) are temporary. They are not | eat-claim-set = { | |||
; assigned by IANA | ? ueid-claim, | |||
? nonce-claim, | ||||
? origination-claim, | ||||
? oemid-claim, | ||||
? hardware-version-claims, | ||||
? security-level-claim, | ||||
? secure-boot-claim, | ||||
? debug-status-claim, | ||||
? location-claim, | ||||
? profile-claim, | ||||
? uptime-claim, | ||||
? boot-seed-claim, | ||||
? submods-part, | ||||
* $$eat-extension, | ||||
} | ||||
nonce = 10 | ; This is the top-level definition of an EAT Token. It is a CWT, JWT | |||
ueid = 11 | ; or UCSS where the payload is an eat-claim-set. A JWT_Message is what | |||
origination = 12 | ; is defined by JWT in RFC 7519. (RFC 7519 doesn't use CDDL so a there | |||
oemid = 13 | ; is no actual CDDL definition of JWT_Message). | |||
security-level = 14 | ||||
secure-boot = 15 | ||||
debug-status = 16 | ||||
location = 17 | ||||
uptime = 19 | ||||
submods = 20 | ||||
chip-version = 21 | eat-token = EAT_Tagged_Message / EAT_Untagged_Message / JWT_Message | |||
board-version = 22 | ||||
device-version = 23 | ||||
chip-version-scheme = 24 | ||||
board-version-scheme = 25 | ||||
device-version-scheme = 26 | ||||
ean-chip-version = 27 | ||||
ean-board-version = 28 | ||||
ean-device-version = 29 | ||||
string-or-uri = tstr | ; This is CBOR-format EAT token in the CWT or UCCS format that is a | |||
; tag. COSE_Tagged_message is defined in RFC 8152. Tag 601 is | ||||
; proposed by the UCCS draft, but not yet assigned. | ||||
time-int = #6.1(int) | EAT_Tagged_Message = #6.61(COSE_Tagged_Message) / #6.601(eat-claim-set) | |||
$$eat-extension //= ( | ; This is a CBOR-format EAT token that is a CWT or UCSS that is not a | |||
? issuer => text, | ; tag COSE_Tagged_message and COSE_Untagged_Message are defined in RFC | |||
? subject => text, | ; 8152. | |||
? audience => text, | ||||
? expiration => time, | ||||
? not-before => time, | ||||
? issued-at => time, | ||||
? cwt-id => bytes, | ||||
) | ||||
issuer = 1 | EAT_Untagged_Message = COSE_Tagged_Message / | |||
subject = 2 | COSE_Untagged_Message / | |||
audience = 3 | UCCS_Untagged_Message | |||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
debug-status-type = &( | ; This is an "unwrapped" UCCS tag. Unwrapping a tag means to use the | |||
enabled: 0, | ; definition of its content without the preceding type 6 tag | |||
disabled: 1, | ; integer. Since a UCCS is nothing but a tag for an unsecured CWT | |||
disabled-since-boot: 2, | ; claim set, unwrapping reduces to a bare eat-claim-set. | |||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
debug-status-claim = ( | UCCS_Untagged_Message = eat-claim-set | |||
debug-status => debug-status-type | ||||
) | ||||
location-type = { | ; The following Claim Keys (labels) are temporary. They are not | |||
latitude => number, | ; assigned by IANA | |||
longitude => number, | ||||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number, | ||||
? timestamp => ~time-int, | ||||
? age => uint | ||||
} | ||||
latitude = 1 | nonce = 10 | |||
longitude = 2 | ueid = 11 | |||
altitude = 3 | origination = 12 | |||
accuracy = 4 | oemid = 13 | |||
altitude-accuracy = 5 | security-level = 14 | |||
heading = 6 | secure-boot = 15 | |||
speed = 7 | debug-status = 16 | |||
timestamp = 8 | location = 17 | |||
age = 9 | profile = 18 | |||
uptime = 19 | ||||
submods = 20 | ||||
boot-seed = 21 | ||||
location-claim = ( | chip-version = 21 | |||
location => location-type | board-version = 22 | |||
) | device-version = 23 | |||
chip-version-scheme = 24 | ||||
board-version-scheme = 25 | ||||
device-version-scheme = 26 | ||||
ean-chip-version = 27 | ||||
ean-board-version = 28 | ||||
ean-device-version = 29 | ||||
string-or-uri = tstr | ||||
time-int = #6.1(int) | ||||
$$eat-extension //= ( | ||||
? issuer => text, | ||||
? subject => text, | ||||
? audience => text, | ||||
? expiration => time, | ||||
? not-before => time, | ||||
? issued-at => time, | ||||
? cwt-id => bytes, | ||||
) | ||||
nonce-type = bstr .size (8..64) | issuer = 1 | |||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
nonce-claim = ( | debug-status-type = &( | |||
nonce => nonce-type / [ 2* nonce-type ] | enabled: 0, | |||
) | disabled: 1, | |||
disabled-since-boot: 2, | ||||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
oemid-claim = ( | debug-status-claim = ( | |||
oemid => bstr | debug-status => debug-status-type | |||
) | ) | |||
location-type = { | ||||
latitude => number, | ||||
longitude => number, | ||||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number, | ||||
? timestamp => ~time-int, | ||||
? age => uint | ||||
} | ||||
; copied from CoSWID | latitude = 1 | |||
; TODO: how to properly make reference to CoSWID and have tool validate | longitude = 2 | |||
altitude = 3 | ||||
accuracy = 4 | ||||
altitude-accuracy = 5 | ||||
heading = 6 | ||||
speed = 7 | ||||
timestamp = 8 | ||||
age = 9 | ||||
$version-scheme /= multipartnumeric | location-claim = ( | |||
$version-scheme /= multipartnumeric-suffix | location => location-type | |||
$version-scheme /= alphanumeric | ) | |||
$version-scheme /= decimal | nonce-type = bstr .size (8..64) | |||
$version-scheme /= semver | ||||
$version-scheme /= uint / text | ||||
multipartnumeric = 1 | ||||
multipartnumeric-suffix = 2 | ||||
alphanumeric = 3 | ||||
decimal = 4 | ||||
semver = 16384 | ||||
chip-version-claim = ( | nonce-claim = ( | |||
chip-version => tstr | nonce => nonce-type / [ 2* nonce-type ] | |||
) | ) | |||
oemid-claim = ( | ||||
oemid => bstr | ||||
) | ||||
; copied from CoSWID | ||||
; TODO: how to properly make reference to CoSWID and have tool validate | ||||
chip-version-scheme-claim = ( | $version-scheme /= multipartnumeric | |||
chip-version-scheme => $version-scheme | $version-scheme /= multipartnumeric-suffix | |||
) | $version-scheme /= alphanumeric | |||
$version-scheme /= decimal | ||||
$version-scheme /= semver | ||||
$version-scheme /= uint / text | ||||
multipartnumeric = 1 | ||||
multipartnumeric-suffix = 2 | ||||
alphanumeric = 3 | ||||
decimal = 4 | ||||
semver = 16384 | ||||
board-version-claim = ( | chip-version-claim = ( | |||
board-version => tstr | chip-version => tstr | |||
) | ) | |||
board-version-scheme-claim = ( | chip-version-scheme-claim = ( | |||
board-version-scheme => $version-scheme | chip-version-scheme => $version-scheme | |||
) | ) | |||
device-version-claim = ( | board-version-claim = ( | |||
device-version => tstr | board-version => tstr | |||
) | ) | |||
device-version-scheme-claim = ( | board-version-scheme-claim = ( | |||
device-version-scheme => $version-scheme | board-version-scheme => $version-scheme | |||
) | ) | |||
ean-type = text .regexp "[0-9]{13}" | ||||
ean-chip-version-claim = ( | device-version-claim = ( | |||
ean-chip-version => ean-type | device-version => tstr | |||
) | ||||
ean-board-version-claim = ( | ) | |||
ean-board-version => ean-type | ||||
) | ||||
ean-device-version-claim = ( | device-version-scheme-claim = ( | |||
ean-device-version => ean-type | device-version-scheme => $version-scheme | |||
) | ) | |||
hardware-version-claims = ( | ean-type = text .regexp "[0-9]{13}" | |||
? chip-version-claim, | ||||
? board-version-claim, | ||||
? device-version-claim, | ||||
? chip-version-scheme-claim, | ||||
? board-version-scheme-claim, | ||||
? device-version-scheme-claim, | ||||
? ean-chip-version-claim, | ||||
? ean-board-version-claim, | ||||
? ean-device-version-claim, | ||||
) | ||||
origination-claim = ( | ean-chip-version-claim = ( | |||
origination => string-or-uri | ean-chip-version => ean-type | |||
) | ) | |||
secure-boot-claim = ( | ean-board-version-claim = ( | |||
secure-boot => bool | ean-board-version => ean-type | |||
) | ) | |||
security-level-type = &( | ean-device-version-claim = ( | |||
unrestricted: 1, | ean-device-version => ean-type | |||
restricted: 2, | ) | |||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
security-level-claim = ( | hardware-version-claims = ( | |||
security-level => security-level-type | ? chip-version-claim, | |||
) | ? board-version-claim, | |||
? device-version-claim, | ||||
? chip-version-scheme-claim, | ||||
? board-version-scheme-claim, | ||||
? device-version-scheme-claim, | ||||
? ean-chip-version-claim, | ||||
? ean-board-version-claim, | ||||
? ean-device-version-claim, | ||||
) | ||||
; The part of a token that contains all the submodules. It is a peer | origination-claim = ( | |||
; with the claims in the token, but not a claim, only a map/object to | origination => string-or-uri | |||
; hold all the submodules. | ) | |||
secure-boot-claim = ( | ||||
secure-boot => bool | ||||
) | ||||
security-level-type = &( | ||||
unrestricted: 1, | ||||
restricted: 2, | ||||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
submods-part = ( | security-level-claim = ( | |||
submods => submods-type | security-level => security-level-type | |||
) | ||||
submods-type = { + submod-type } | ) | |||
; 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. | ||||
; The type of a submodule which can either be a nested claim set or a | submods-part = ( | |||
; nested separately signed token. Nested tokens are wrapped in a bstr | submods => submods-type | |||
; or a tstr. | ) | |||
submod-type = ( | submods-type = { + submod-type } | |||
submod-name => eat-claim-set / nested-token | ||||
) | ||||
; When this is a bstr, the contents are an eat-token in CWT or UCCS | ; The type of a submodule which can either be a nested claim set or a | |||
; format. When this is a tstr, the contents are an eat-token in JWT | ; nested separately signed token. Nested tokens are wrapped in a bstr | |||
; format. | ; or a tstr. | |||
nested-token = bstr / tstr; | submod-type = ( | |||
submod-name => eat-claim-set / nested-token | ||||
) | ||||
; Each submodule has a unique text string name. | ; When this is a bstr, the contents are an eat-token in CWT or UCCS | |||
; format. When this is a tstr, the contents are an eat-token in JWT | ||||
; format. | ||||
submod-name = tstr | nested-token = bstr / tstr; | |||
ueid-type = bstr .size (7..33) | ; Each submodule has a unique text string name. | |||
ueid-claim = ( | submod-name = tstr | |||
ueid => ueid-type | ||||
) | ||||
uptime-claim = ( | ueid-type = bstr .size (7..33) | |||
uptime => uint | ||||
) | ||||
ueid /= "ueid" | ueid-claim = ( | |||
nonce /= "nonce" | ueid => ueid-type | |||
origination /= "origination" | ) | |||
oemid /= "oemid" | uptime-claim = ( | |||
security-level /= "security-level" | uptime => uint | |||
secure-boot /= "secure-boot" | ) | |||
debug-status /= "debug-status" | profile-claim = ( | |||
location /= "location" | profile => tstr | |||
age /= "age" | ) | |||
uptime /= "uptime" | boot-seed-claim = ( | |||
submods /= "submods" | boot-seed => bytes | |||
timestamp /= "timestamp" | ) | |||
ueid /= "ueid" | ||||
nonce /= "nonce" | ||||
origination /= "origination" | ||||
oemid /= "oemid" | ||||
security-level /= "security-level" | ||||
secure-boot /= "secure-boot" | ||||
debug-status /= "debug-status" | ||||
location /= "location" | ||||
age /= "age" | ||||
uptime /= "uptime" | ||||
profile /= "eat-profile" | ||||
boot-seed /= "bootseed" | ||||
submods /= "submods" | ||||
timestamp /= "timestamp" | ||||
latitude /= "lat" | latitude /= "lat" | |||
longitude /= "long" | longitude /= "long" | |||
altitude /= "alt" | altitude /= "alt" | |||
accuracy /= "accry" | accuracy /= "accry" | |||
altitude-accuracy /= "alt-accry" | altitude-accuracy /= "alt-accry" | |||
heading /= "heading" | heading /= "heading" | |||
speed /= "speed" | speed /= "speed" | |||
6. IANA Considerations | 7. IANA Considerations | |||
6.1. Reuse of CBOR Web Token (CWT) Claims Registry | 7.1. Reuse of CBOR Web Token (CWT) Claims Registry | |||
Claims defined for EAT are compatible with those of CWT so the CWT | Claims defined for EAT are compatible with those of CWT so the CWT | |||
Claims Registry is re used. No new IANA registry is created. All | Claims Registry is re used. No new IANA registry is created. All | |||
EAT claims should be registered in the CWT and JWT Claims Registries. | EAT claims should be registered in the CWT and JWT Claims Registries. | |||
6.2. Claim Characteristics | 7.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. | |||
6.2.1. Interoperability and Relying Party Orientation | 7.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. | |||
6.2.2. Operating System and Technology Neutral | 7.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. | |||
6.2.3. Security Level Neutral | 7.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. | |||
6.2.4. Reuse of Extant Data Formats | 7.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. | |||
6.2.5. Proprietary Claims | 7.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. | |||
6.3. Claims Registered by This Document | 7.3. Claims Registered by This Document | |||
* Claim Name: UEID | o Claim Name: UEID | |||
* Claim Description: The Universal Entity ID | o Claim Description: The Universal Entity ID | |||
* JWT Claim Name: N/A | o JWT Claim Name: N/A | |||
* Claim Key: 8 | o Claim Key: 8 | |||
* Claim Value Type(s): byte string | o Claim Value Type(s): byte string | |||
* Change Controller: IESG | o Change Controller: IESG | |||
* Specification Document(s): *this document* | o Specification Document(s): *this document* | |||
TODO: add the rest of the claims in here | TODO: add the rest of the claims in here | |||
7. Privacy Considerations | 8. 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. | |||
7.1. UEID Privacy Considerations | 8.1. UEID 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 UEID will | governmental privacy regulation. In other usage situations UEID will | |||
not be allowed for certain products like browsers that give privacy | not be allowed for certain products like browsers that give privacy | |||
for the end user. It will often be the case that tokens will not | for the end user. It will often be the case that tokens will not | |||
have a UEID for these reasons. | have a UEID for these reasons. | |||
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 | |||
UEID's in tokens: | UEID's in tokens: | |||
* 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. This may be through a prompt. It may also be | to use the UEID. This may be through a prompt. It may also be | |||
through a license agreement. For example, agreements for some | 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. | UEID. | |||
* The UEID is used only in a particular context or particular use | o The UEID is used only in a particular context or particular use | |||
case. It is used only by one relying party. | case. It is used only by one relying party. | |||
* The device authenticates the relying party and generates a derived | o The device authenticates the relying party and generates a derived | |||
UEID just for that particular relying party. For example, the | UEID 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 | 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. | UEID. | |||
Note that some of these privacy preservation strategies result in | Note that some of these privacy preservation strategies result in | |||
multiple UEIDs per device. Each UEID is used in a different context, | multiple UEIDs per device. Each UEID is used in a different context, | |||
use case or system on the device. However, from the view of the | use case or system on the device. However, from the view of the | |||
relying party, there is just one UEID and it is still globally | relying party, there is just one UEID and it is still globally | |||
universal across manufacturers. | universal across manufacturers. | |||
7.2. Location Privacy Considerations | 8.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. | |||
8. Security Considerations | 9. Security Considerations | |||
The security considerations provided in Section 8 of [RFC8392] and | The security considerations provided in Section 8 of [RFC8392] and | |||
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. | |||
8.1. Key Provisioning | 9.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. | |||
8.1.1. Transmission of Key Material | 9.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. | |||
8.2. Transport Security | 9.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. | |||
8.3. Multiple EAT Consumers | 9.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 43, line 36 ¶ | skipping to change at page 45, line 36 ¶ | |||
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. | |||
9. References | 10. References | |||
9.1. Normative References | 10.1. Normative References | |||
[CoSWID] "Concise Software Identification Tags", November 2020, | [CoSWID] "Concise Software Identification Tags", November 2020, | |||
<https://tools.ietf.org/html/draft-ietf-sacm-coswid-16>. | <https://tools.ietf.org/html/draft-ietf-sacm-coswid-16>. | |||
[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 2019, | |||
skipping to change at page 44, line 18 ¶ | skipping to change at page 46, line 18 ¶ | |||
[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>. | |||
[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>. | |||
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | ||||
October 2013, <https://www.rfc-editor.org/info/rfc7049>. | ||||
[RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517, | [RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517, | |||
DOI 10.17487/RFC7517, May 2015, | DOI 10.17487/RFC7517, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7517>. | <https://www.rfc-editor.org/info/rfc7517>. | |||
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
[RFC7800] Jones, M., Bradley, J., and H. Tschofenig, "Proof-of- | [RFC7800] Jones, M., Bradley, J., and H. Tschofenig, "Proof-of- | |||
Possession Key Semantics for JSON Web Tokens (JWTs)", | Possession Key Semantics for JSON Web Tokens (JWTs)", | |||
skipping to change at page 45, line 16 ¶ | skipping to change at page 47, line 10 ¶ | |||
Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC8747] Jones, M., Seitz, L., Selander, G., Erdtman, S., and H. | [RFC8747] Jones, M., Seitz, L., Selander, G., Erdtman, S., and H. | |||
Tschofenig, "Proof-of-Possession Key Semantics for CBOR | Tschofenig, "Proof-of-Possession Key Semantics for CBOR | |||
Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March | Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March | |||
2020, <https://www.rfc-editor.org/info/rfc8747>. | 2020, <https://www.rfc-editor.org/info/rfc8747>. | |||
[RFC8949] Bormann, C. and P. Hoffman, "Concise Binary Object | ||||
Representation (CBOR)", STD 94, RFC 8949, | ||||
DOI 10.17487/RFC8949, December 2020, | ||||
<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>. | |||
[TIME_T] The Open Group Base Specifications, "Vol. 1: Base | ||||
Definitions, Issue 7", Section 4.15 'Seconds Since the | ||||
Epoch', IEEE Std 1003.1, 2013 Edition, 2013, | ||||
<http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ | ||||
V1_chap04.html#tag_04_15>. | ||||
[UCCS.Draft] | [UCCS.Draft] | |||
Birkholz, H., "A CBOR Tag for Unprotected CWT Claims | Birkholz, H., "A CBOR Tag for Unprotected CWT Claims | |||
Sets", 2020, | Sets", 2020, | |||
<https://tools.ietf.org/html/draft-birkholz-rats-uccs-01>. | <https://tools.ietf.org/html/draft-birkholz-rats-uccs-01>. | |||
[WGS84] National Imagery and Mapping Agency, "National Imagery and | [WGS84] National Imagery and Mapping Agency, "National Imagery and | |||
Mapping Agency Technical Report 8350.2, Third Edition", | Mapping Agency Technical Report 8350.2, Third Edition", | |||
2000, <http://earth- | 2000, <http://earth- | |||
info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>. | info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>. | |||
9.2. Informative References | 10.2. Informative References | |||
[ASN.1] International Telecommunication Union, "Information | ||||
Technology -- ASN.1 encoding rules: Specification of Basic | ||||
Encoding Rules (BER), Canonical Encoding Rules (CER) and | ||||
Distinguished Encoding Rules (DER)", ITU-T Recommendation | ||||
X.690, 1994. | ||||
[BirthdayAttack] | [BirthdayAttack] | |||
"Birthday attack", | "Birthday attack", | |||
<https://en.wikipedia.org/wiki/Birthday_attack.>. | <https://en.wikipedia.org/wiki/Birthday_attack.>. | |||
[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/>. | |||
skipping to change at page 46, line 21 ¶ | skipping to change at page 48, line 5 ¶ | |||
"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] | [FIDO.Registry] | |||
The FIDO Alliance, "FIDO Registry of Predefined Values", | The FIDO Alliance, "FIDO Registry of Predefined Values", | |||
December 2019, <https://fidoalliance.org/specs/common- | December 2019, <https://fidoalliance.org/specs/common- | |||
specs/fido-registry-v2.1-ps-20191217.html>. | specs/fido-registry-v2.1-ps-20191217.html>. | |||
[FIPS-140] National Institue of Standards, "Security Requirements for | [FIPS-140] | |||
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>. | |||
[IDevID] "IEEE Standard, "IEEE 802.1AR Secure Device Identifier"", | [IDevID] "IEEE Standard, "IEEE 802.1AR Secure Device Identifier"", | |||
December 2009, <http://standards.ieee.org/findstds/ | December 2009, <http://standards.ieee.org/findstds/ | |||
standard/802.1AR-2009.html>. | standard/802.1AR-2009.html>. | |||
[IEEE.802-2001] | [IEEE.802-2001] | |||
"IEEE Standard For Local And Metropolitan Area Networks | "IEEE Standard For Local And Metropolitan Area Networks | |||
skipping to change at page 47, line 19 ¶ | skipping to change at page 49, line 5 ¶ | |||
[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>. | |||
[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>. | |||
[Webauthn] Worldwide Web Consortium, "Web Authentication: A Web API | ||||
for accessing scoped credentials", 2016. | ||||
Appendix A. Examples | Appendix A. Examples | |||
A.1. Very Simple EAT | A.1. Very Simple EAT | |||
This is shown in CBOR diagnostic form. Only the payload signed by | This is shown in CBOR diagnostic form. Only the payload signed by | |||
COSE is shown. | COSE is shown. | |||
{ | { | |||
/ issuer / 1: "joe", | / issuer / 1: "joe", | |||
/ nonce / 10: h'948f8860d13a463e8e', | / nonce / 10: h'948f8860d13a463e8e', | |||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea4fe2fa', | / UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea', | |||
/ secure-boot / 15: true, | / secure-boot / 15: true, | |||
/ debug-disable / 16: 3, / permanent-disable / | / debug-disable / 16: 3, / permanent-disable / | |||
/ timestamp (iat) / 6: 1(1526542894), | / timestamp (iat) / 6: 1(1526542894), | |||
/ chip-version / 21: "1.4a", | / chip-version / 21: "1.4a", | |||
/ chip-version-scheme / 24: 2 / multipartnumeric+suffix / | / chip-version-scheme / 24: 2 / multipartnumeric+suffix / | |||
} | } | |||
A.2. Example with Submodules, Nesting and Security Levels | A.2. Example with Submodules, Nesting and Security Levels | |||
{ | ||||
/ nonce / 10: h'948f8860d13a463e8e', | ||||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea4fe2fa', | ||||
/ secure-boot / 15: true, | ||||
/ 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 / | { | |||
"Secure Element Eat" : | / nonce / 10: h'948f8860d13a463e8e', | |||
/ an embedded EAT, bytes of which are not shown / | / UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea' | |||
h'420123', | / secure-boot / 15: true, | |||
/ 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 / | ||||
}, | ||||
/ 3rd submod, information about Linux Android / | / 2nd submod, A nested EAT from a secure element / | |||
"Linux Android": { | "Secure Element Eat" : | |||
/ security-level / 14: 1 / unrestricted / | / an embedded EAT, bytes of which are not shown / | |||
} | h'420123', | |||
} | ||||
} | / 3rd submod, information about Linux Android / | |||
"Linux Android": { | ||||
/ security-level / 14: 1 / unrestricted / | ||||
} | ||||
} | ||||
} | ||||
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 | |||
skipping to change at page 49, line 10 ¶ | skipping to change at page 50, line 34 ¶ | |||
the limit of what is imaginable and should probably be accommodated. | the limit of what is imaginable and should probably be accommodated. | |||
The 100 quadrillion datadbase is highly speculative perhaps involving | The 100 quadrillion datadbase is highly speculative perhaps involving | |||
nanorobots for every person, livestock animal and domesticated bird. | nanorobots for every person, livestock animal and domesticated bird. | |||
It is included to round out the analysis. | It is included to round out the analysis. | |||
Note that the items counted here certainly do not have IP address and | Note that the items counted here certainly do not have IP address and | |||
are not individually connected to the network. They may be connected | are not individually connected to the network. They may be connected | |||
to internal buses, via serial links, Bluetooth and so on. This is | to internal buses, via serial links, Bluetooth and so on. This is | |||
not the same problem as sizing IP addresses. | not the same problem as sizing IP addresses. | |||
+=========+===========+============+==========+=================+ | +---------+------------+--------------+------------+----------------+ | |||
| People | Devices / | Subsystems | Database | Database Size | | | People | Devices / | Subsystems / | Database | Database Size | | |||
| | Person | / Device | Portion | | | | | Person | Device | Portion | | | |||
+=========+===========+============+==========+=================+ | +---------+------------+--------------+------------+----------------+ | |||
| 10 | 100 | 10 | 10% | trillion | | | 10 | 100 | 10 | 10% | trillion | | |||
| billion | | | | (10^12) | | | billion | | | | (10^12) | | |||
+---------+-----------+------------+----------+-----------------+ | | 10 | 100,000 | 10 | 10% | quadrillion | | |||
| 10 | 100,000 | 10 | 10% | quadrillion | | | billion | | | | (10^15) | | |||
| billion | | | | (10^15) | | | 100 | 1,000,000 | 10 | 10% | 100 | | |||
+---------+-----------+------------+----------+-----------------+ | | billion | | | | quadrillion | | |||
| 100 | 1,000,000 | 10 | 10% | 100 quadrillion | | | | | | | (10^17) | | |||
| billion | | | | (10^17) | | +---------+------------+--------------+------------+----------------+ | |||
+---------+-----------+------------+----------+-----------------+ | ||||
Table 3 | ||||
This is conceptually similar to the Birthday Problem where m is the | This is conceptually similar to the Birthday Problem where m is the | |||
number of possible birthdays, always 365, and k is the number of | number of possible birthdays, always 365, and k is the number of | |||
people. It is also conceptually similar to the Birthday Attack where | people. It is also conceptually similar to the Birthday Attack where | |||
collisions of the output of hash functions are considered. | collisions of the output of hash functions are considered. | |||
The proper formula for the collision calculation is | The proper formula for the collision calculation is | |||
p = 1 - e^{-k^2/(2n)} | p = 1 - e^{-k^2/(2n)} | |||
p Collision Probability | p Collision Probability | |||
n Total possible population | n Total possible population | |||
k Actual population | k Actual population | |||
However, for the very large values involved here, this formula | However, for the very large values involved here, this formula | |||
requires floating point precision higher than commonly available in | requires floating point precision higher than commonly available in | |||
calculators and SW so this simple approximation is used. See | calculators and SW so this simple approximation is used. See | |||
[BirthdayAttack]. | [BirthdayAttack]. | |||
skipping to change at page 50, line 5 ¶ | skipping to change at page 51, line 23 ¶ | |||
[BirthdayAttack]. | [BirthdayAttack]. | |||
p = k^2 / 2n | p = k^2 / 2n | |||
For this calculation: | For this calculation: | |||
p Collision Probability | p Collision Probability | |||
n Total population based on number of bits in UEID | n Total population based on number of bits in UEID | |||
k Population in a database | k Population in a database | |||
+=====================+==============+==============+==============+ | +----------------------+--------------+--------------+--------------+ | |||
| Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | |||
+=====================+==============+==============+==============+ | +----------------------+--------------+--------------+--------------+ | |||
| trillion (10^12) | 2 * 10^-15 | 8 * 10^-35 | 5 * 10^-55 | | | trillion (10^12) | 2 * 10^-15 | 8 * 10^-35 | 5 * 10^-55 | | |||
+---------------------+--------------+--------------+--------------+ | | quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | |||
| quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | | 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | |||
+---------------------+--------------+--------------+--------------+ | | (10^17) | | | | | |||
| 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | +----------------------+--------------+--------------+--------------+ | |||
| (10^17) | | | | | ||||
+---------------------+--------------+--------------+--------------+ | ||||
Table 4 | ||||
Next, to calculate the probability of a collision occurring in one | Next, to calculate the probability of a collision occurring in one | |||
year's operation of a database, it is assumed that the database size | year's operation of a database, it is assumed that the database size | |||
is in a steady state and that 10% of the database changes per year. | is in a steady state and that 10% of the database changes per year. | |||
For example, a trillion record database would have 100 billion states | For example, a trillion record database would have 100 billion states | |||
per year. Each of those states has the above calculated probability | per year. Each of those states has the above calculated probability | |||
of a collision. | of a collision. | |||
This assumption is a worst-case since it assumes that each state of | This assumption is a worst-case since it assumes that each state of | |||
the database is completely independent from the previous state. In | the database is completely independent from the previous state. In | |||
skipping to change at page 50, line 40 ¶ | skipping to change at page 52, line 11 ¶ | |||
The following tables gives the time interval until there is a | The following tables gives the time interval until there is a | |||
probability of a collision based on there being one tenth the number | probability of a collision based on there being one tenth the number | |||
of states per year as the number of records in the database. | of states per year as the number of records in the database. | |||
t = 1 / ((k / 10) * p) | t = 1 / ((k / 10) * p) | |||
t Time until a collision | t Time until a collision | |||
p Collision probability for UEID size | p Collision probability for UEID size | |||
k Database size | k Database size | |||
+=====================+==============+==============+==============+ | +---------------------+---------------+--------------+--------------+ | |||
| Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | |||
+=====================+==============+==============+==============+ | +---------------------+---------------+--------------+--------------+ | |||
| trillion (10^12) | 60,000 years | 10^24 years | 10^44 years | | | trillion (10^12) | 60,000 years | 10^24 years | 10^44 years | | |||
+---------------------+--------------+--------------+--------------+ | | quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 years | | |||
| quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 years | | | 100 quadrillion | 8 | 10^11 years | 10^31 years | | |||
+---------------------+--------------+--------------+--------------+ | | (10^17) | microseconds | | | | |||
| 100 quadrillion | 8 | 10^11 years | 10^31 years | | +---------------------+---------------+--------------+--------------+ | |||
| (10^17) | microseconds | | | | ||||
+---------------------+--------------+--------------+--------------+ | ||||
Table 5 | ||||
Clearly, 128 bits is enough for the near future thus the requirement | Clearly, 128 bits is enough for the near future thus the requirement | |||
that UEIDs be a minimum of 128 bits. | that UEIDs be a minimum of 128 bits. | |||
There is no requirement for 256 bits today as quadrillion-record | There is no requirement for 256 bits today as quadrillion-record | |||
databases are not expected in the near future and because this time- | databases are not expected in the near future and because this time- | |||
to-collision calculation is a very worst case. A future update of | to-collision calculation is a very worst case. A future update of | |||
the standard may increase the requirement to 256 bits, so there is a | the standard may increase the requirement to 256 bits, so there is a | |||
requirement that implementations be able to receive 256-bit UEIDs. | requirement that implementations be able to receive 256-bit UEIDs. | |||
skipping to change at page 51, line 51 ¶ | skipping to change at page 53, line 17 ¶ | |||
as they are implemented in commonly used CPU hardware. | as they are implemented in commonly used CPU hardware. | |||
Appendix C. Changes from Previous Drafts | Appendix C. Changes from Previous Drafts | |||
The following is a list of known changes from the previous drafts. | The following is a list of known changes from the previous drafts. | |||
This list is non-authoritative. It is meant to help reviewers see | This list is non-authoritative. It is meant to help reviewers see | |||
the significant differences. | the significant differences. | |||
C.1. From draft-rats-eat-01 | C.1. From draft-rats-eat-01 | |||
* Added UEID design rationale appendix | o Added UEID design rationale appendix | |||
C.2. From draft-mandyam-rats-eat-00 | C.2. From draft-mandyam-rats-eat-00 | |||
This is a fairly large change in the orientation of the document, but | This is a fairly large change in the orientation of the document, but | |||
no new claims have been added. | no new claims have been added. | |||
* Separate information and data model using CDDL. | o Separate information and data model using CDDL. | |||
* Say an EAT is a CWT or JWT | o Say an EAT is a CWT or JWT | |||
* Use a map to structure the boot_state and location claims | o Use a map to structure the boot_state and location claims | |||
C.3. From draft-ietf-rats-eat-01 | C.3. From draft-ietf-rats-eat-01 | |||
* Clarifications and corrections for OEMID claim | o Clarifications and corrections for OEMID claim | |||
* Minor spelling and other fixes | o Minor spelling and other fixes | |||
* Add the nonce claim, clarify jti claim | o Add the nonce claim, clarify jti claim | |||
C.4. From draft-ietf-rats-eat-02 | C.4. From draft-ietf-rats-eat-02 | |||
* Roll all EUIs back into one UEID type | o Roll all EUIs back into one UEID type | |||
* UEIDs can be one of three lengths, 128, 192 and 256. | o UEIDs can be one of three lengths, 128, 192 and 256. | |||
* Added appendix justifying UEID design and size. | o Added appendix justifying UEID design and size. | |||
* Submods part now includes nested eat tokens so they can be named | o Submods part now includes nested eat tokens so they can be named | |||
and there can be more tha one of them | and there can be more tha one of them | |||
* Lots of fixes to the CDDL | o Lots of fixes to the CDDL | |||
* Added security considerations | o Added security considerations | |||
C.5. From draft-ietf-rats-eat-03 | C.5. From draft-ietf-rats-eat-03 | |||
* Split boot_state into secure-boot and debug-disable claims | o Split boot_state into secure-boot and debug-disable claims | |||
* Debug disable is an enumerated type rather than Booleans | o Debug disable is an enumerated type rather than Booleans | |||
C.6. From draft-ietf-rats-eat-04 | C.6. From draft-ietf-rats-eat-04 | |||
* Change IMEI-based UEIDs to be encoded as a 14-byte string | o Change IMEI-based UEIDs to be encoded as a 14-byte string | |||
* CDDL cleaned up some more | o CDDL cleaned up some more | |||
* CDDL allows for JWTs and UCCSs | o CDDL allows for JWTs and UCCSs | |||
* CWT format submodules are byte string wrapped | ||||
* Allows for JWT nested in CWT and vice versa | o CWT format submodules are byte string wrapped | |||
* Allows UCCS (unsigned CWTs) and JWT unsecured tokens | o Allows for JWT nested in CWT and vice versa | |||
* Clarify tag usage when nesting tokens | o Allows UCCS (unsigned CWTs) and JWT unsecured tokens | |||
* Add section on key inclusion | o Clarify tag usage when nesting tokens | |||
* Add hardware version claims | o Add section on key inclusion | |||
* Collected CDDL is now filled in. Other CDDL corrections. | o Add hardware version claims | |||
* Rename debug-disable to debug-status; clarify that it is not | o Collected CDDL is now filled in. Other CDDL corrections. | |||
o Rename debug-disable to debug-status; clarify that it is not | ||||
extensible | extensible | |||
* Security level claim is not extensible | o Security level claim is not extensible | |||
* Improve specification of location claim and added a location | o Improve specification of location claim and added a location | |||
privacy section | privacy section | |||
* Add intended use claim | o Add intended use claim | |||
C.7. From draft-ietf-rats-eat-05 | C.7. From draft-ietf-rats-05 | |||
* CDDL format issues resolved | o CDDL format issues resolved | |||
* Corrected reference to Location Privacy section | o Corrected reference to Location Privacy section | |||
C.8. From draft-ietf-rats-06 | ||||
o Added boot-seed claim | ||||
o Rework CBOR interoperability section | ||||
o Added profiles claim and section | ||||
Authors' Addresses | Authors' Addresses | |||
Giridhar Mandyam | Giridhar Mandyam | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
5775 Morehouse Drive | 5775 Morehouse Drive | |||
San Diego, California | San Diego, California | |||
United States of America | USA | |||
Phone: +1 858 651 7200 | Phone: +1 858 651 7200 | |||
Email: mandyam@qti.qualcomm.com | EMail: mandyam@qti.qualcomm.com | |||
Laurence Lundblade | Laurence Lundblade | |||
Security Theory LLC | Security Theory LLC | |||
Email: lgl@island-resort.com | EMail: lgl@island-resort.com | |||
Miguel Ballesteros | Miguel Ballesteros | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
5775 Morehouse Drive | 5775 Morehouse Drive | |||
San Diego, California | San Diego, California | |||
United States of America | USA | |||
Phone: +1 858 651 4299 | Phone: +1 858 651 4299 | |||
Email: mballest@qti.qualcomm.com | EMail: mballest@qti.qualcomm.com | |||
Jeremy O'Donoghue | Jeremy O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
279 Farnborough Road | 279 Farnborough Road | |||
Farnborough | Farnborough GU14 7LS | |||
GU14 7LS | ||||
United Kingdom | United Kingdom | |||
Phone: +44 1252 363189 | Phone: +44 1252 363189 | |||
Email: jodonogh@qti.qualcomm.com | EMail: jodonogh@qti.qualcomm.com | |||
End of changes. 205 change blocks. | ||||
622 lines changed or deleted | 767 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/ |