draft-ietf-rats-eat-05.txt | draft-ietf-rats-eat-06.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: June 4, 2021 Security Theory LLC | Expires: 4 June 2021 Security Theory LLC | |||
M. Ballesteros | M. Ballesteros | |||
J. O'Donoghue | J. O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
December 01, 2020 | 1 December 2020 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-05 | draft-ietf-rats-eat-06 | |||
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 June 4, 2021. | This Internet-Draft will expire on 4 June 2021. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
(https://trustee.ietf.org/license-info) in effect on the date of | license-info) in effect on the date of publication of this document. | |||
publication of this document. Please review these documents | Please review these documents carefully, as they describe your rights | |||
carefully, as they describe your rights and restrictions with respect | and restrictions with respect to this document. Code Components | |||
to this document. Code Components extracted from this document must | extracted from this document must include Simplified BSD License text | |||
include Simplified BSD License text as described in Section 4.e of | as described in Section 4.e of the Trust Legal Provisions and are | |||
the Trust Legal Provisions and are provided without warranty as | provided without warranty as described in the Simplified BSD License. | |||
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 . . . . . . . . . . . . . . . . . . . . . 5 | |||
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 . . . . . . . . . . . . . . . . 7 | |||
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) . . . . . . . . . . . . . . 9 | 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 . . . . . . . . . . . . . . . . . . . . . 10 | 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 . . . . . . . . . . . . . . . . . . 13 | 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 . . . . . . . . . . . . . . . . . . . . . 14 | 3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.7. Hardware Version Claims (hardware-version-claims) . . . . 14 | 3.7. Hardware Version Claims (hardware-version-claims) . . . . 15 | |||
3.8. Software Description and Version . . . . . . . . . . . . 15 | 3.8. Software Description and Version . . . . . . . . . . . . 16 | |||
3.9. The Security Level Claim (security-level) . . . . . . . . 15 | 3.9. The Security Level Claim (security-level) . . . . . . . . 17 | |||
3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 16 | 3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 18 | |||
3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 16 | 3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 18 | |||
3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 16 | 3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 18 | |||
3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 16 | 3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 18 | |||
3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 17 | 3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 19 | |||
3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 17 | 3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 19 | |||
3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 18 | 3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 20 | |||
3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 18 | 3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 20 | |||
3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 18 | 3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 20 | |||
3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 18 | 3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 20 | |||
3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 18 | 3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 20 | |||
3.13. The Location Claim (location) . . . . . . . . . . . . . . 19 | 3.13. The Location Claim (location) . . . . . . . . . . . . . . 21 | |||
3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 19 | 3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 22 | |||
3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 20 | 3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 22 | |||
3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 20 | 3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 22 | |||
3.15. The Intended Use Claim (intended-use) . . . . . . . . . . 20 | 3.15. The Intended Use Claim (intended-use) . . . . . . . . . . 23 | |||
3.15.1. intended-use CDDL . . . . . . . . . . . . . . . . . 21 | 3.15.1. intended-use CDDL . . . . . . . . . . . . . . . . . 23 | |||
3.16. The Submodules Part of a Token (submods) . . . . . . . . 21 | 3.16. The Submodules Part of a Token (submods) . . . . . . . . 24 | |||
3.16.1. Two Types of Submodules . . . . . . . . . . . . . . 21 | 3.16.1. Two Types of Submodules . . . . . . . . . . . . . . 24 | |||
3.16.1.1. Non-token Submodules . . . . . . . . . . . . . . 21 | 3.16.1.1. Non-token Submodules . . . . . . . . . . . . . . 24 | |||
3.16.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 22 | 3.16.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 25 | |||
3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 23 | 3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 26 | |||
3.16.2. No Inheritance . . . . . . . . . . . . . . . . . . . 23 | 3.16.2. No Inheritance . . . . . . . . . . . . . . . . . . . 26 | |||
3.16.3. Security Levels . . . . . . . . . . . . . . . . . . 23 | 3.16.3. Security Levels . . . . . . . . . . . . . . . . . . 27 | |||
3.16.4. Submodule Names . . . . . . . . . . . . . . . . . . 24 | 3.16.4. Submodule Names . . . . . . . . . . . . . . . . . . 27 | |||
3.16.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 24 | 3.16.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 27 | |||
4. Endorsements and Verification Keys . . . . . . . . . . . . . 24 | 4. Endorsements and Verification Keys . . . . . . . . . . . . . 28 | |||
5. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 5. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 28 | |||
5.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 24 | 5.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 29 | |||
5.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 24 | 5.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 29 | |||
5.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 5.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
5.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 25 | 5.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 29 | |||
5.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 25 | 5.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 30 | |||
5.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | 5.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 30 | |||
5.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 25 | 5.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 30 | |||
5.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 26 | 5.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 32 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 38 | |||
6.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 26 | 6.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 38 | |||
6.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 27 | 6.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 38 | |||
6.2.1. Interoperability and Relying Party Orientation . . . 27 | 6.2.1. Interoperability and Relying Party Orientation . . . 38 | |||
6.2.2. Operating System and Technology Neutral . . . . . . . 27 | 6.2.2. Operating System and Technology Neutral . . . . . . . 39 | |||
6.2.3. Security Level Neutral . . . . . . . . . . . . . . . 28 | 6.2.3. Security Level Neutral . . . . . . . . . . . . . . . 39 | |||
6.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 28 | 6.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 39 | |||
6.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 28 | 6.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 40 | |||
6.3. Claims Registered by This Document . . . . . . . . . . . 28 | 6.3. Claims Registered by This Document . . . . . . . . . . . 40 | |||
7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 29 | 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 40 | |||
7.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 29 | 7.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 41 | |||
7.2. Location Privacy Considerations . . . . . . . . . . . . . 30 | 7.2. Location Privacy Considerations . . . . . . . . . . . . . 41 | |||
8. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 42 | |||
8.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 30 | 8.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 42 | |||
8.1.1. Transmission of Key Material . . . . . . . . . . . . 30 | 8.1.1. Transmission of Key Material . . . . . . . . . . . . 42 | |||
8.2. Transport Security . . . . . . . . . . . . . . . . . . . 31 | 8.2. Transport Security . . . . . . . . . . . . . . . . . . . 42 | |||
8.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 31 | 8.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 43 | |||
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 32 | 9.1. Normative References . . . . . . . . . . . . . . . . . . 43 | |||
9.2. Informative References . . . . . . . . . . . . . . . . . 34 | 9.2. Informative References . . . . . . . . . . . . . . . . . 45 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 47 | ||||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 36 | A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 47 | |||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 36 | A.2. Example with Submodules, Nesting and Security Levels . . 47 | |||
A.2. Example with Submodules, Nesting and Security Levels . . 36 | Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 48 | |||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 36 | B.1. Collision Probability . . . . . . . . . . . . . . . . . . 48 | |||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 36 | B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 51 | |||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 38 | Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 51 | |||
Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 39 | C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 51 | |||
C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 39 | C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 52 | |||
C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 39 | C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 52 | |||
C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 39 | C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 52 | |||
C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 40 | C.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 52 | |||
C.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 40 | C.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 52 | |||
C.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 40 | C.7. From draft-ietf-rats-eat-05 . . . . . . . . . . . . . . . 53 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53 | |||
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 43 ¶ | skipping to change at page 4, line 42 ¶ | |||
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: | |||
o Proof of the make and model of the device hardware (HW) | * Proof of the make and model of the device hardware (HW) | |||
o Proof of the make and model of the device processor, particularly | * Proof of the make and model of the device processor, particularly | |||
for security-oriented chips | for security-oriented chips | |||
o Measurement of the software (SW) running on the device | * Measurement of the software (SW) running on the device | |||
o Configuration and state of the device | * Configuration and state of the device | |||
o Environmental characteristics of the device such as its GPS | * 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 [RFC7049] or JSON [ECMAScript] | |||
format. This specification simultaneously describes both formats. | format. This specification simultaneously describes both formats. | |||
skipping to change at page 7, line 5 ¶ | skipping to change at page 7, line 5 ¶ | |||
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. | |||
o The EAT is transmitted to the relying party. The relying party | * 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. | |||
o The EAT is transmitted to the relying party. The relying party | * 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. | |||
o The EAT is transmitted directly to a verification service, perhaps | * 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 22 ¶ | skipping to change at page 9, line 26 ¶ | |||
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. | |||
o All claims are optional | * All claims are optional | |||
o No claims are mandatory | * No claims are mandatory | |||
o All claims that are not understood by implementations MUST be | * 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 | |||
skipping to change at page 10, line 48 ¶ | skipping to change at page 11, line 7 ¶ | |||
be secure. A maximum of 64 bytes is set to limit the memory a | be secure. A maximum of 64 bytes is set to limit the memory a | |||
constrained implementation uses. This size range is not set for the | constrained implementation uses. This size range is not set for the | |||
already-registered JWT nonce, but it should follow this size | already-registered JWT nonce, but it should follow this size | |||
recommendation when used in an EAT. | recommendation when used in an EAT. | |||
Multiple nonces are allowed to accommodate multistage verification | Multiple nonces are allowed to accommodate multistage verification | |||
and consumption. | and consumption. | |||
3.3.1. nonce CDDL | 3.3.1. nonce CDDL | |||
{::include cddl/nonce.cddl} | nonce-type = bstr .size (8..64) | |||
nonce-claim = ( | ||||
nonce => nonce-type / [ 2* nonce-type ] | ||||
) | ||||
3.4. Universal Entity ID Claim (ueid) | 3.4. Universal Entity ID Claim (ueid) | |||
UEID's identify individual manufactured entities / devices such as a | UEID's identify individual manufactured entities / devices such as a | |||
mobile phone, a water meter, a Bluetooth speaker or a networked | mobile phone, a water meter, a Bluetooth speaker or a networked | |||
security camera. It may identify the entire device or a submodule or | security camera. It may identify the entire device or a submodule or | |||
subsystem. It does not identify types, models or classes of devices. | subsystem. It does not identify types, models or classes of devices. | |||
It is akin to a serial number, though it does not have to be | It is akin to a serial number, though it does not have to be | |||
sequential. | sequential. | |||
skipping to change at page 12, line 5 ¶ | skipping to change at page 12, line 5 ¶ | |||
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 may | | | | | generated once and stored in the device. This | | |||
| | | be constructed by concatenating enough identifiers | | | | | may be constructed by concatenating enough | | |||
| | | to make up an equivalent number of random bits and | | | | | identifiers to make up an equivalent number of | | |||
| | | then feeding the concatenation through a | | | | | random bits and then feeding the concatenation | | |||
| | | cryptographic hash function. It may also be a | | | | | through a cryptographic hash function. It may | | |||
| | | cryptographic quality random number generated once | | | | | also be a cryptographic quality random number | | |||
| | | at the beginning of the life of the device and | | | | | generated once at the beginning of the life of | | |||
| | | stored. It may not be smaller than 128 bits. | | | | | the device and stored. It may not be smaller | | |||
| 0x02 | IEEE | This makes use of the IEEE company identification | | | | | than 128 bits. | | |||
| | EUI | registry. An EUI is either an EUI-48, EUI-60 or | | +------+------+---------------------------------------------------+ | |||
| | | EUI-64 and made up of an OUI, OUI-36 or a CID, | | | 0x02 | IEEE | This makes use of the IEEE company identification | | |||
| | | different registered company identifiers, and some | | | | EUI | registry. An EUI is either an EUI-48, EUI-60 or | | |||
| | | unique per-device identifier. EUIs are often the | | | | | EUI-64 and made up of an OUI, OUI-36 or a CID, | | |||
| | | same as or similar to MAC addresses. This type | | | | | different registered company identifiers, and | | |||
| | | includes MAC-48, an obsolete name for EUI-48. (Note | | | | | some unique per-device identifier. EUIs are | | |||
| | | that while devices with multiple network interfaces | | | | | often the same as or similar to MAC addresses. | | |||
| | | may have multiple MAC addresses, there is only one | | | | | This type includes MAC-48, an obsolete name for | | |||
| | | UEID for a device) [IEEE.802-2001], [OUI.Guide] | | | | | EUI-48. (Note that while devices with multiple | | |||
| 0x03 | IMEI | This is a 14-digit identifier consisting of an | | | | | network interfaces may have multiple MAC | | |||
| | | 8-digit Type Allocation Code and a 6-digit serial | | | | | addresses, there is only one UEID for a device) | | |||
| | | number allocated by the manufacturer, which SHALL | | | | | [IEEE.802-2001], [OUI.Guide] | | |||
| | | be encoded as byte string of length 14 with each | | +------+------+---------------------------------------------------+ | |||
| | | byte as the digit's value (not the ASCII encoding | | | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | |||
| | | of the digit; the digit 3 encodes as 0x03, not | | | | | 8-digit Type Allocation Code and a 6-digit serial | | |||
| | | 0x33). The IMEI value encoded SHALL NOT include | | | | | number allocated by the manufacturer, which SHALL | | |||
| | | Luhn checksum or SVN information. [ThreeGPP.IMEI] | | | | | be encoded as byte string of length 14 with each | | |||
+------+------+-----------------------------------------------------+ | | | | 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: | |||
o UEIDs types may vary freely from one manufacturer to the next. | * UEIDs types may vary freely from one manufacturer to the next. | |||
o New types of UEIDs may be created. For example, a type 0x07 UEID | * New types of UEIDs may be created. For example, a type 0x07 UEID | |||
may be created based on some other manufacturer registration | may be created based on some other manufacturer registration | |||
scheme. | scheme. | |||
o Device manufacturers are allowed to change from one type of UEID | * 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 | |||
{::include cddl/ueid.cddl} | ueid-type = bstr .size (7..33) | |||
ueid-claim = ( | ||||
ueid => ueid-type | ||||
) | ||||
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 authored | | | Acme-TEE | The EATs are generated in the TEE | | |||
| | and configured by "Acme" | | | | authored and configured by "Acme" | | |||
| Acme-TPM | The EATs are generated in a TPM manufactured | | +-------------------+-----------------------------------------+ | |||
| | by "Acme" | | | Acme-TPM | The EATs are generated in a TPM | | |||
| Acme-Linux-Kernel | The EATs are generated in a Linux kernel | | | | manufactured by "Acme" | | |||
| | configured and shipped by "Acme" | | +-------------------+-----------------------------------------+ | |||
| Acme-TA | The EATs are generated in a Trusted | | | Acme-Linux-Kernel | The EATs are generated in a Linux | | |||
| | Application (TA) authored by "Acme" | | | | kernel configured and shipped 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 | |||
{::include cddl/origination.cddl} | origination-claim = ( | |||
origination => string-or-uri | ||||
) | ||||
3.6. OEM Identification by IEEE (oemid) | 3.6. OEM Identification by IEEE (oemid) | |||
The IEEE operates a global registry for MAC addresses and company | The IEEE operates a global registry for MAC addresses and company | |||
IDs. This claim uses that database to identify OEMs. The contents | IDs. This claim uses that database to identify OEMs. The contents | |||
of the claim may be either an IEEE MA-L, MA-M, MA-S or an IEEE CID | of the claim may be either an IEEE MA-L, MA-M, MA-S or an IEEE CID | |||
[IEEE.RA]. An MA-L, formerly known as an OUI, is a 24-bit value used | [IEEE.RA]. An MA-L, formerly known as an OUI, is a 24-bit value used | |||
as the first half of a MAC address. MA-M similarly is a 28-bit value | as the first half of a MAC address. MA-M similarly is a 28-bit value | |||
uses as the first part of a MAC address, and MA-S, formerly known as | uses as the first part of a MAC address, and MA-S, formerly known as | |||
OUI-36, a 36-bit value. Many companies already have purchased one of | OUI-36, a 36-bit value. Many companies already have purchased one of | |||
skipping to change at page 14, line 31 ¶ | skipping to change at page 15, line 14 ¶ | |||
Commonly, these are expressed in Hexadecimal Representation | Commonly, these are expressed in Hexadecimal Representation | |||
[IEEE.802-2001] also called the Canonical format. When this claim is | [IEEE.802-2001] also called the Canonical format. When this claim is | |||
encoded the order of bytes in the bstr are the same as the order in | encoded the order of bytes in the bstr are the same as the order in | |||
the Hexadecimal Representation. For example, an MA-L like "AC-DE-48" | the Hexadecimal Representation. For example, an MA-L like "AC-DE-48" | |||
would be encoded in 3 bytes with values 0xAC, 0xDE, 0x48. For JSON | would be encoded in 3 bytes with values 0xAC, 0xDE, 0x48. For JSON | |||
encoded tokens, this is further base64url encoded. | encoded tokens, this is further base64url encoded. | |||
3.6.1. oemid CDDL | 3.6.1. oemid CDDL | |||
{::include cddl/oemid.cddl} | oemid-claim = ( | |||
oemid => bstr | ||||
) | ||||
3.7. Hardware Version Claims (hardware-version-claims) | 3.7. Hardware Version Claims (hardware-version-claims) | |||
The hardware version can be claimed at three different levels, the | The hardware version can be claimed at three different levels, the | |||
chip, the circuit board and the final device assembly. An EAT can | chip, the circuit board and the final device assembly. An EAT can | |||
include any combination these claims. | include any combination these claims. | |||
The hardware version is a simple text string the format of which is | The hardware version is a simple text string the format of which is | |||
set by each manufacturer. The structure and sorting order of this | set by each manufacturer. The structure and sorting order of this | |||
text string can be specified using the version-scheme item from | text string can be specified using the version-scheme item from | |||
skipping to change at page 15, line 8 ¶ | skipping to change at page 15, line 40 ¶ | |||
Number [EAN-13]. An EAN-13 is also known as an International Article | Number [EAN-13]. An EAN-13 is also known as an International Article | |||
Number or most commonly as a bar code. This claim is the ASCII text | Number or most commonly as a bar code. This claim is the ASCII text | |||
representation of actual digits often printed with a bar code. Use | representation of actual digits often printed with a bar code. Use | |||
of this claim must comply with the EAN allocation and assignment | of this claim must comply with the EAN allocation and assignment | |||
rules. For example, this requires the manufacturer to obtain a | rules. For example, this requires the manufacturer to obtain a | |||
manufacture code from GS1. | manufacture code from GS1. | |||
Both the simple version string and EAN-13 versions may be included | Both the simple version string and EAN-13 versions may be included | |||
for the same hardware. | for the same hardware. | |||
{::include cddl/hardware-version.cddl} | chip-version-claim = ( | |||
chip-version => tstr | ||||
) | ||||
chip-version-scheme-claim = ( | ||||
chip-version-scheme => $version-scheme | ||||
) | ||||
board-version-claim = ( | ||||
board-version => tstr | ||||
) | ||||
board-version-scheme-claim = ( | ||||
board-version-scheme => $version-scheme | ||||
) | ||||
device-version-claim = ( | ||||
device-version => tstr | ||||
) | ||||
device-version-scheme-claim = ( | ||||
device-version-scheme => $version-scheme | ||||
) | ||||
ean-type = text .regexp "[0-9]{13}" | ||||
ean-chip-version-claim = ( | ||||
ean-chip-version => ean-type | ||||
) | ||||
ean-board-version-claim = ( | ||||
ean-board-version => ean-type | ||||
) | ||||
ean-device-version-claim = ( | ||||
ean-device-version => ean-type | ||||
) | ||||
hardware-version-claims = ( | ||||
? 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, | ||||
) | ||||
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 | forging EATs. This is done by defining four security levels as | |||
defining four security levels as described below. This is similar to | described below. This is similar to the key protection types defined | |||
the key protection types defined by the Fast Identity Online (FIDO) | by the Fast Identity Online (FIDO) Alliance [FIDO.Registry]). | |||
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 16, line 16 ¶ | skipping to change at page 18, line 7 ¶ | |||
this claim as a coarse indication of security and its own proprietary | this claim as a coarse indication of security and its own proprietary | |||
claim as a refined indication. | claim as a refined indication. | |||
This claim is not intended as a replacement for a proper end-device | This claim is not intended as a replacement for a proper end-device | |||
security certification schemes such as those based on FIPS 140 | security certification schemes such as those based on FIPS 140 | |||
[FIPS-140] or those based on Common Criteria [Common.Criteria]. The | [FIPS-140] or those based on Common Criteria [Common.Criteria]. The | |||
claim made here is solely a self-claim made by the Entity Originator. | claim made here is solely a self-claim made by the Entity Originator. | |||
3.9.1. security-level CDDL | 3.9.1. security-level CDDL | |||
{::include cddl/security-level.cddl} | security-level-type = &( | |||
unrestricted: 1, | ||||
restricted: 2, | ||||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
security-level-claim = ( | ||||
security-level => security-level-type | ||||
) | ||||
3.10. Secure Boot Claim (secure-boot) | 3.10. Secure Boot Claim (secure-boot) | |||
The value of true indicates secure boot is enabled. Secure boot is | The value of true indicates secure boot is enabled. Secure boot is | |||
considered enabled when base software, the firmware and operating | considered enabled when base software, the firmware and operating | |||
system, are under control of the entity manufacturer identified in | system, are under control of the entity manufacturer identified in | |||
the oemid claimd described in Section 3.6. This may because the | the oemid claimd described in Section 3.6. This may because the | |||
software is in ROM or because it is cryptographically authenticated | software is in ROM or because it is cryptographically authenticated | |||
or some combination of the two or other. | or some combination of the two or other. | |||
3.10.1. secure-boot CDDL | 3.10.1. secure-boot CDDL | |||
{::include cddl/secure-boot.cddl} | secure-boot-claim = ( | |||
secure-boot => bool | ||||
) | ||||
3.11. Debug Status Claim (debug-status) | 3.11. Debug Status Claim (debug-status) | |||
This applies to system-wide or submodule-wide debug facilities of the | This applies to system-wide or submodule-wide debug facilities of the | |||
target device / submodule like JTAG and diagnostic hardware built | target device / submodule like JTAG and diagnostic hardware built | |||
into chips. It applies to any software debug facilities related to | into chips. It applies to any software debug facilities related to | |||
root, operating system or privileged software that allow system-wide | root, operating system or privileged software that allow system-wide | |||
memory inspection, tracing or modification of non-system software | memory inspection, tracing or modification of non-system software | |||
like user mode applications. | like user mode applications. | |||
skipping to change at page 18, line 25 ¶ | skipping to change at page 20, line 25 ¶ | |||
also indicates that all debug facilities are currently disabled and | also indicates that all debug facilities are currently disabled and | |||
have been so since boot/start. | have been so since boot/start. | |||
3.11.5. Disabled Fully and Permanently | 3.11.5. Disabled Fully and Permanently | |||
This level indicates that all debug capabilities for the target | This level indicates that all debug capabilities for the target | |||
device/sub-module are permanently disabled. | device/sub-module are permanently disabled. | |||
3.11.6. debug-status CDDL | 3.11.6. debug-status CDDL | |||
{::include cddl/debug-status.cddl} | debug-status-type = &( | |||
enabled: 0, | ||||
disabled: 1, | ||||
disabled-since-boot: 2, | ||||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
debug-status-claim = ( | ||||
debug-status => debug-status-type | ||||
) | ||||
3.12. Including Keys | 3.12. Including Keys | |||
An EAT may include a cryptographic key such as a public key. The | An EAT may include a cryptographic key such as a public key. The | |||
signing of the EAT binds the key to all the other claims in the | signing of the EAT binds the key to all the other claims in the | |||
token. | token. | |||
The purpose for inclusion of the key may vary by use case. For | The purpose for inclusion of the key may vary by use case. For | |||
example, the key may be included as part of an IoT device onboarding | example, the key may be included as part of an IoT device onboarding | |||
protocol. When the FIDO protocol includes a pubic key in its | protocol. When the FIDO protocol includes a pubic key in its | |||
skipping to change at page 19, line 43 ¶ | skipping to change at page 22, line 11 ¶ | |||
since the last contact with a GPS satellite. Either the timestamp or | since the last contact with a GPS satellite. Either the timestamp or | |||
age data item can be used to quantify the cached period. The | age data item can be used to quantify the cached period. The | |||
timestamp data item is preferred as it a non-relative time. | timestamp data item is preferred as it a non-relative time. | |||
The age data item can be used when the entity doesn't know what time | The age data item can be used when the entity doesn't know what time | |||
it is either because it doesn't have a clock or it isn't set. The | it is either because it doesn't have a clock or it isn't set. The | |||
entity must still have a "ticker" that can measure a time interval. | entity must still have a "ticker" that can measure a time interval. | |||
The age is the interval between acquisition of the location data and | The age is the interval between acquisition of the location data and | |||
token creation. | token creation. | |||
See {#locationprivacyconsiderations} below. | See Section 7.2 below. | |||
3.13.1. location CDDL | 3.13.1. location CDDL | |||
{::include cddl/location.cddl} | location-type = { | |||
latitude => number, | ||||
longitude => number, | ||||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number, | ||||
? timestamp => ~time-int, | ||||
? age => uint | ||||
} | ||||
latitude = 1 | ||||
longitude = 2 | ||||
altitude = 3 | ||||
accuracy = 4 | ||||
altitude-accuracy = 5 | ||||
heading = 6 | ||||
speed = 7 | ||||
timestamp = 8 | ||||
age = 9 | ||||
location-claim = ( | ||||
location => location-type | ||||
) | ||||
3.14. The Uptime Claim (uptime) | 3.14. The Uptime Claim (uptime) | |||
The "uptime" claim contains a value that represents the number of | The "uptime" claim contains a value that represents the number of | |||
seconds that have elapsed since the entity or submod was last booted. | seconds that have elapsed since the entity or submod was last booted. | |||
3.14.1. uptime CDDL | 3.14.1. uptime CDDL | |||
{::include cddl/uptime.cddl} | uptime-claim = ( | |||
uptime => uint | ||||
) | ||||
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 | |||
skipping to change at page 21, line 6 ¶ | skipping to change at page 24, line 4 ¶ | |||
5 - Proof-of-Possession An EAT consumer may require an attestation | 5 - Proof-of-Possession An EAT consumer may require an attestation | |||
as part of an accompanying proof-of-possession (PoP) appication. | as part of an accompanying proof-of-possession (PoP) appication. | |||
More precisely, a PoP transaction is intended to provide to the | More precisely, a PoP transaction is intended to provide to the | |||
recipient cryptographically-verifiable proof that the sender has | recipient cryptographically-verifiable proof that the sender has | |||
posession of a key. This kind of attestation may be neceesary to | posession of a key. This kind of attestation may be neceesary to | |||
verify the security state of the entity storing the private key | verify the security state of the entity storing the private key | |||
used in a PoP application. | used in a PoP application. | |||
3.15.1. intended-use CDDL | 3.15.1. intended-use CDDL | |||
intended-use-type = &( | ||||
intended-use = &( | ||||
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 => intended-use-type | ||||
) | ) | |||
3.16. The Submodules Part of a Token (submods) | 3.16. 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. | |||
skipping to change at page 21, line 38 ¶ | skipping to change at page 24, line 39 ¶ | |||
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.16.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: | |||
o A non-token submodule that is a map or object directly containing | * A non-token submodule that is a map or object directly containing | |||
claims for the submodule. | claims for the submodule. | |||
o A nested EAT that is a fully formed, independently signed EAT | * A nested EAT that is a fully formed, independently signed EAT | |||
token | token | |||
3.16.1.1. Non-token Submodules | 3.16.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. | |||
skipping to change at page 24, line 17 ¶ | skipping to change at page 28, line 4 ¶ | |||
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.16.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.16.5. submods CDDL | |||
; 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. | ||||
{::include cddl/submods.cddl} | submods-part = ( | |||
submods => submods-type | ||||
) | ||||
submods-type = { + submod-type } | ||||
; The type of a submodule which can either be a nested claim set or a | ||||
; nested separately signed token. Nested tokens are wrapped in a bstr | ||||
; or a tstr. | ||||
submod-type = ( | ||||
submod-name => eat-claim-set / nested-token | ||||
) | ||||
; 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. | ||||
nested-token = bstr / tstr; | ||||
; Each submodule has a unique text string name. | ||||
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. Encoding | |||
skipping to change at page 24, line 41 ¶ | skipping to change at page 29, line 10 ¶ | |||
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 | 5.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. | |||
{::include cddl/common-types.cddl} | string-or-uri = tstr | |||
time-int = #6.1(int) | ||||
5.2. CDDL for CWT-defined Claims | 5.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. | |||
{::include cddl/cwt.cddl} | $$eat-extension //= ( | |||
? issuer => text, | ||||
? subject => text, | ||||
? audience => text, | ||||
? expiration => time, | ||||
? not-before => time, | ||||
? issued-at => time, | ||||
? cwt-id => bytes, | ||||
) | ||||
issuer = 1 | ||||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
5.3. JSON | 5.3. JSON | |||
5.3.1. JSON Labels | 5.3.1. JSON Labels | |||
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" | ||||
submods /= "submods" | ||||
timestamp /= "timestamp" | ||||
{::include cddl/json.cddl} | latitude /= "lat" | |||
longitude /= "long" | ||||
altitude /= "alt" | ||||
accuracy /= "accry" | ||||
altitude-accuracy /= "alt-accry" | ||||
heading /= "heading" | ||||
speed /= "speed" | ||||
5.3.2. JSON Interoperability | 5.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: | |||
o bstr - must be base64url encoded | * bstr - must be base64url encoded | |||
o time - must be encoded as NumericDate as described section 2 of | * time - must be encoded as NumericDate as described section 2 of | |||
[RFC7519]. | [RFC7519]. | |||
o string-or-uri - must be encoded as StringOrURI as described | * string-or-uri - must be encoded as StringOrURI as described | |||
section 2 of [RFC7519]. | section 2 of [RFC7519]. | |||
5.4. CBOR | 5.4. CBOR | |||
5.4.1. CBOR Interoperability | 5.4.1. CBOR Interoperability | |||
Variations in the CBOR serializations supported in CBOR encoding and | Variations in the CBOR serializations supported in CBOR encoding and | |||
decoding are allowed and suggests that CBOR-based protocols specify | decoding are allowed and suggests that CBOR-based protocols specify | |||
how this variation is handled. This section specifies what formats | how this variation is handled. This section specifies what formats | |||
MUST be supported in order to achieve interoperability. | MUST be supported in order to achieve interoperability. | |||
skipping to change at page 25, line 48 ¶ | skipping to change at page 31, line 20 ¶ | |||
the token must support decoding all encodings. | the token must support decoding all encodings. | |||
These rules cover all types used in the claims in this document. | These rules cover all types used in the claims in this document. | |||
They also are recommendations for additional claims. | They also are recommendations for additional claims. | |||
Canonical CBOR encoding, Preferred Serialization and | Canonical CBOR encoding, Preferred Serialization and | |||
Deterministically Encoded CBOR are explicitly NOT required as they | Deterministically Encoded CBOR are explicitly NOT required as they | |||
would place an unnecessary burden on the entity implementation, | would place an unnecessary burden on the entity implementation, | |||
particularly if the entity implementation is implemented in hardware. | particularly if the entity implementation is implemented in hardware. | |||
o Integer Encoding (major type 0, 1) - The entity may use any | * Integer Encoding (major type 0, 1) - The entity may use any | |||
integer encoding allowed by CBOR. The server MUST accept all | integer encoding allowed by CBOR. The server MUST accept all | |||
integer encodings allowed by CBOR. | integer encodings allowed by CBOR. | |||
o String Encoding (major type 2 and 3) - The entity can use any | * String Encoding (major type 2 and 3) - The entity can use any | |||
string encoding allowed by CBOR including indefinite lengths. It | string encoding allowed by CBOR including indefinite lengths. It | |||
may also encode the lengths of strings in any way allowed by CBOR. | may also encode the lengths of strings in any way allowed by CBOR. | |||
The server must accept all string encodings. | The server must accept all string encodings. | |||
o Major type 2, bstr, SHOULD have tag 21 to indicate conversion to | * Major type 2, bstr, SHOULD have tag 21 to indicate conversion to | |||
base64url in case that conversion is performed. | base64url in case that conversion is performed. | |||
o Map and Array Encoding (major type 4 and 5) - The entity can use | * Map and Array Encoding (major type 4 and 5) - The entity can use | |||
any array or map encoding allowed by CBOR including indefinite | any array or map encoding allowed by CBOR including indefinite | |||
lengths. Sorting of map keys is not required. Duplicate map keys | lengths. Sorting of map keys is not required. Duplicate map keys | |||
are not allowed. The server must accept all array and map | are not allowed. The server must accept all array and map | |||
encodings. The server may reject maps with duplicate map keys. | encodings. The server may reject maps with duplicate map keys. | |||
o Date and Time - The entity should send dates as tag 1 encoded as | * Date and Time - The entity should send dates as tag 1 encoded as | |||
64-bit or 32-bit integers. The entity may not send floating-point | 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 | 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, | 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 | however tag 1 is preferred. The server must support tag 0 UTC | |||
dates. | dates. | |||
o URIs - URIs should be encoded as text strings and marked with tag | * URIs - URIs should be encoded as text strings and marked with tag | |||
32. | 32. | |||
o Floating Point - The entity may use any floating-point encoding. | * Floating Point - The entity may use any floating-point encoding. | |||
The relying party must support decoding of all types of floating- | The relying party must support decoding of all types of floating- | |||
point. | point. | |||
o Other types - Other types like bignums, regular expressions and | * Other types - Other types like bignums, regular expressions and | |||
such, SHOULD NOT be used. The server MAY support them but is not | such, SHOULD NOT be used. The server MAY support them but is not | |||
required to so interoperability is not guaranteed. | required to so interoperability is not guaranteed. | |||
5.5. Collected CDDL | 5.5. Collected CDDL | |||
{::include cddl/eat-token.cddl} | ; 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. | ||||
; TO-DO: Add intended-use claim | ||||
eat-claim-set = { | ||||
? ueid-claim, | ||||
? nonce-claim, | ||||
? 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 | ||||
; or UCSS where the payload is an eat-claim-set. A JWT_Message is what | ||||
; is defined by JWT in RFC 7519. (RFC 7519 doesn't use CDDL so a there | ||||
; is no actual CDDL definition of JWT_Message). | ||||
eat-token = EAT_Tagged_Message / EAT_Untagged_Message / JWT_Message | ||||
; 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. | ||||
EAT_Tagged_Message = #6.61(COSE_Tagged_Message) / #6.601(eat-claim-set) | ||||
; This is a CBOR-format EAT token that is a CWT or UCSS that is not a | ||||
; tag COSE_Tagged_message and COSE_Untagged_Message are defined in RFC | ||||
; 8152. | ||||
EAT_Untagged_Message = COSE_Tagged_Message / COSE_Untagged_Message / UCCS_Untagged_Message | ||||
; 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 | ||||
; The following Claim Keys (labels) are temporary. They are not | ||||
; assigned by IANA | ||||
nonce = 10 | ||||
ueid = 11 | ||||
origination = 12 | ||||
oemid = 13 | ||||
security-level = 14 | ||||
secure-boot = 15 | ||||
debug-status = 16 | ||||
location = 17 | ||||
uptime = 19 | ||||
submods = 20 | ||||
chip-version = 21 | ||||
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, | ||||
) | ||||
issuer = 1 | ||||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
debug-status-type = &( | ||||
enabled: 0, | ||||
disabled: 1, | ||||
disabled-since-boot: 2, | ||||
disabled-permanently: 3, | ||||
disabled-fully-and-permanently: 4 | ||||
) | ||||
debug-status-claim = ( | ||||
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 | ||||
} | ||||
latitude = 1 | ||||
longitude = 2 | ||||
altitude = 3 | ||||
accuracy = 4 | ||||
altitude-accuracy = 5 | ||||
heading = 6 | ||||
speed = 7 | ||||
timestamp = 8 | ||||
age = 9 | ||||
location-claim = ( | ||||
location => location-type | ||||
) | ||||
nonce-type = bstr .size (8..64) | ||||
nonce-claim = ( | ||||
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 | ||||
$version-scheme /= multipartnumeric | ||||
$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 | ||||
chip-version-claim = ( | ||||
chip-version => tstr | ||||
) | ||||
chip-version-scheme-claim = ( | ||||
chip-version-scheme => $version-scheme | ||||
) | ||||
board-version-claim = ( | ||||
board-version => tstr | ||||
) | ||||
board-version-scheme-claim = ( | ||||
board-version-scheme => $version-scheme | ||||
) | ||||
device-version-claim = ( | ||||
device-version => tstr | ||||
) | ||||
device-version-scheme-claim = ( | ||||
device-version-scheme => $version-scheme | ||||
) | ||||
ean-type = text .regexp "[0-9]{13}" | ||||
ean-chip-version-claim = ( | ||||
ean-chip-version => ean-type | ||||
) | ||||
ean-board-version-claim = ( | ||||
ean-board-version => ean-type | ||||
) | ||||
ean-device-version-claim = ( | ||||
ean-device-version => ean-type | ||||
) | ||||
hardware-version-claims = ( | ||||
? 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 = ( | ||||
origination => string-or-uri | ||||
) | ||||
secure-boot-claim = ( | ||||
secure-boot => bool | ||||
) | ||||
security-level-type = &( | ||||
unrestricted: 1, | ||||
restricted: 2, | ||||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
security-level-claim = ( | ||||
security-level => security-level-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. | ||||
submods-part = ( | ||||
submods => submods-type | ||||
) | ||||
submods-type = { + submod-type } | ||||
; The type of a submodule which can either be a nested claim set or a | ||||
; nested separately signed token. Nested tokens are wrapped in a bstr | ||||
; or a tstr. | ||||
submod-type = ( | ||||
submod-name => eat-claim-set / nested-token | ||||
) | ||||
; 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. | ||||
nested-token = bstr / tstr; | ||||
; Each submodule has a unique text string name. | ||||
submod-name = tstr | ||||
ueid-type = bstr .size (7..33) | ||||
ueid-claim = ( | ||||
ueid => ueid-type | ||||
) | ||||
uptime-claim = ( | ||||
uptime => uint | ||||
) | ||||
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" | ||||
submods /= "submods" | ||||
timestamp /= "timestamp" | ||||
latitude /= "lat" | ||||
longitude /= "long" | ||||
altitude /= "alt" | ||||
accuracy /= "accry" | ||||
altitude-accuracy /= "alt-accry" | ||||
heading /= "heading" | ||||
speed /= "speed" | ||||
6. IANA Considerations | 6. IANA Considerations | |||
6.1. Reuse of CBOR Web Token (CWT) Claims Registry | 6.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 | 6.2. Claim Characteristics | |||
skipping to change at page 28, line 49 ¶ | skipping to change at page 40, line 25 ¶ | |||
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 | 6.3. Claims Registered by This Document | |||
o Claim Name: UEID | * Claim Name: UEID | |||
o Claim Description: The Universal Entity ID | * Claim Description: The Universal Entity ID | |||
o JWT Claim Name: N/A | ||||
o Claim Key: 8 | * JWT Claim Name: N/A | |||
o Claim Value Type(s): byte string | * Claim Key: 8 | |||
o Change Controller: IESG | * Claim Value Type(s): byte string | |||
o Specification Document(s): *this document* | * Change Controller: IESG | |||
* 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 | 7. 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. | |||
skipping to change at page 29, line 38 ¶ | skipping to change at page 41, line 19 ¶ | |||
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: | |||
o The device obtains explicit permission from the user of the device | * 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. | |||
o The UEID is used only in a particular context or particular use | * 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. | |||
o The device authenticates the relying party and generates a derived | * 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 | |||
skipping to change at page 34, line 38 ¶ | skipping to change at page 46, line 21 ¶ | |||
"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] | [FIPS-140] National Institue of Standards, "Security Requirements for | |||
National Institue of Standards, "Security Requirements for | ||||
Cryptographic Modules", May 2001, | Cryptographic Modules", May 2001, | |||
<https://csrc.nist.gov/publications/detail/fips/140/2/ | <https://csrc.nist.gov/publications/detail/fips/140/2/ | |||
final>. | final>. | |||
[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 35, line 35 ¶ | skipping to change at page 47, line 19 ¶ | |||
[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] | [Webauthn] Worldwide Web Consortium, "Web Authentication: A Web API | |||
Worldwide Web Consortium, "Web Authentication: A Web API | ||||
for accessing scoped credentials", 2016. | 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. | |||
{::include cddl/examples/simple.diag} | { | |||
/ issuer / 1: "joe", | ||||
/ nonce / 10: h'948f8860d13a463e8e', | ||||
/ UEID / 11: h'0198f50a4ff6c05861c8860d13a638ea4fe2fa', | ||||
/ secure-boot / 15: true, | ||||
/ debug-disable / 16: 3, / permanent-disable / | ||||
/ timestamp (iat) / 6: 1(1526542894), | ||||
/ chip-version / 21: "1.4a", | ||||
/ 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 / | ||||
}, | ||||
{::include cddl/examples/submods.diag} | / 2nd submod, A nested EAT from a secure element / | |||
"Secure Element Eat" : | ||||
/ 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 37, line 5 ¶ | skipping to change at page 49, line 10 ¶ | |||
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 | | +---------+-----------+------------+----------+-----------------+ | |||
| billion | | | | (10^15) | | | 10 | 100,000 | 10 | 10% | quadrillion | | |||
| 100 | 1,000,000 | 10 | 10% | 100 | | | billion | | | | (10^15) | | |||
| billion | | | | quadrillion | | +---------+-----------+------------+----------+-----------------+ | |||
| | | | | (10^17) | | | 100 | 1,000,000 | 10 | 10% | 100 quadrillion | | |||
+---------+------------+--------------+------------+----------------+ | | 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)} | |||
skipping to change at page 37, line 44 ¶ | skipping to change at page 50, line 5 ¶ | |||
[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 | | +---------------------+--------------+--------------+--------------+ | |||
| 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | | quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | |||
| (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 | |||
reality this is unlikely as state changes will be the addition or | reality this is unlikely as state changes will be the addition or | |||
skipping to change at page 38, line 26 ¶ | skipping to change at page 50, line 40 ¶ | |||
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 | | +---------------------+--------------+--------------+--------------+ | |||
| 100 quadrillion | 8 | 10^11 years | 10^31 years | | | quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 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 39, line 34 ¶ | skipping to change at page 51, line 51 ¶ | |||
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 | |||
o Added UEID design rationale appendix | * 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. | |||
o Separate information and data model using CDDL. | * Separate information and data model using CDDL. | |||
o Say an EAT is a CWT or JWT | * Say an EAT is a CWT or JWT | |||
o Use a map to structure the boot_state and location claims | * 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 | |||
o Clarifications and corrections for OEMID claim | * Clarifications and corrections for OEMID claim | |||
o Minor spelling and other fixes | * Minor spelling and other fixes | |||
o Add the nonce claim, clarify jti claim | ||||
* Add the nonce claim, clarify jti claim | ||||
C.4. From draft-ietf-rats-eat-02 | C.4. From draft-ietf-rats-eat-02 | |||
o Roll all EUIs back into one UEID type | * Roll all EUIs back into one UEID type | |||
o UEIDs can be one of three lengths, 128, 192 and 256. | * UEIDs can be one of three lengths, 128, 192 and 256. | |||
o Added appendix justifying UEID design and size. | * Added appendix justifying UEID design and size. | |||
o Submods part now includes nested eat tokens so they can be named | * 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 | |||
o Lots of fixes to the CDDL | * Lots of fixes to the CDDL | |||
o Added security considerations | * Added security considerations | |||
C.5. From draft-ietf-rats-eat-03 | C.5. From draft-ietf-rats-eat-03 | |||
o Split boot_state into secure-boot and debug-disable claims | * Split boot_state into secure-boot and debug-disable claims | |||
o Debug disable is an enumerated type rather than Booleans | * 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 | |||
o Change IMEI-based UEIDs to be encoded as a 14-byte string | * Change IMEI-based UEIDs to be encoded as a 14-byte string | |||
o CDDL cleaned up some more | ||||
o CDDL allows for JWTs and UCCSs | * CDDL cleaned up some more | |||
o CWT format submodules are byte string wrapped | * CDDL allows for JWTs and UCCSs | |||
* CWT format submodules are byte string wrapped | ||||
o Allows for JWT nested in CWT and vice versa | * Allows for JWT nested in CWT and vice versa | |||
o Allows UCCS (unsigned CWTs) and JWT unsecured tokens | * Allows UCCS (unsigned CWTs) and JWT unsecured tokens | |||
o Clarify tag usage when nesting tokens | * Clarify tag usage when nesting tokens | |||
o Add section on key inclusion | * Add section on key inclusion | |||
o Add hardware version claims | * Add hardware version claims | |||
o Collected CDDL is now filled in. Other CDDL corrections. | * Collected CDDL is now filled in. Other CDDL corrections. | |||
o Rename debug-disable to debug-status; clarify that it is not | * Rename debug-disable to debug-status; clarify that it is not | |||
extensible | extensible | |||
o Security level claim is not extensible | * Security level claim is not extensible | |||
o Improve specification of location claim and added a location | * Improve specification of location claim and added a location | |||
privacy section | privacy section | |||
o Add intended use claim | * Add intended use claim | |||
C.7. From draft-ietf-rats-eat-05 | ||||
* CDDL format issues resolved | ||||
* Corrected reference to Location Privacy 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 | |||
USA | United States of America | |||
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 | |||
USA | United States of America | |||
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 GU14 7LS | Farnborough | |||
GU14 7LS | ||||
United Kingdom | United Kingdom | |||
Phone: +44 1252 363189 | Phone: +44 1252 363189 | |||
EMail: jodonogh@qti.qualcomm.com | Email: jodonogh@qti.qualcomm.com | |||
End of changes. 109 change blocks. | ||||
265 lines changed or deleted | 771 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/ |