draft-ietf-rats-eat-04.txt | draft-ietf-rats-eat-05.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: March 4, 2021 Security Theory LLC | Expires: June 4, 2021 Security Theory LLC | |||
M. Ballesteros | M. Ballesteros | |||
J. O'Donoghue | J. O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
August 31, 2020 | December 01, 2020 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-04 | draft-ietf-rats-eat-05 | |||
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 March 4, 2021. | This Internet-Draft will expire on June 4, 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/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | 1.1. CWT, JWT and UCCS . . . . . . . . . . . . . . . . . . . . 5 | |||
1.2. Entity Overview . . . . . . . . . . . . . . . . . . . . . 5 | 1.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.3. EAT Operating Models . . . . . . . . . . . . . . . . . . 5 | 1.3. Entity Overview . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.4. What is Not Standardized . . . . . . . . . . . . . . . . 6 | 1.4. EAT Operating Models . . . . . . . . . . . . . . . . . . 6 | |||
1.4.1. Transmission Protocol . . . . . . . . . . . . . . . . 6 | 1.5. What is Not Standardized . . . . . . . . . . . . . . . . 7 | |||
1.4.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 7 | 1.5.1. Transmission Protocol . . . . . . . . . . . . . . . . 7 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 1.5.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 8 | |||
3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 8 | 3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 9 | 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 9 | |||
3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 9 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 10 | |||
3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 9 | 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 10 | |||
3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 9 | 3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 10 | |||
3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 12 | 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 11 | |||
3.5. Origination Claim (origination) . . . . . . . . . . . . . 12 | 3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3.5.1. origination CDDL . . . . . . . . . . . . . . . . . . 12 | 3.5. Origination Claim (origination) . . . . . . . . . . . . . 13 | |||
3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 12 | 3.5.1. origination CDDL . . . . . . . . . . . . . . . . . . 13 | |||
3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 13 | 3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 14 | |||
3.7. The Security Level Claim (security-level) . . . . . . . . 13 | 3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 14 | |||
3.7.1. security-level CDDL . . . . . . . . . . . . . . . . . 14 | 3.7. Hardware Version Claims (hardware-version-claims) . . . . 14 | |||
3.8. Secure Boot and Debug Enable State Claims (boot-state) . 14 | 3.8. Software Description and Version . . . . . . . . . . . . 15 | |||
3.8.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 14 | 3.9. The Security Level Claim (security-level) . . . . . . . . 15 | |||
3.8.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 15 | 3.9.1. security-level CDDL . . . . . . . . . . . . . . . . . 16 | |||
3.8.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 15 | 3.10. Secure Boot Claim (secure-boot) . . . . . . . . . . . . . 16 | |||
3.8.4. Debug Permanent Disable . . . . . . . . . . . . . . . 15 | 3.10.1. secure-boot CDDL . . . . . . . . . . . . . . . . . . 16 | |||
3.8.5. Debug Full Permanent Disable . . . . . . . . . . . . 15 | 3.11. Debug Status Claim (debug-status) . . . . . . . . . . . . 16 | |||
3.8.6. boot-state CDDL . . . . . . . . . . . . . . . . . . . 15 | 3.11.1. Enabled . . . . . . . . . . . . . . . . . . . . . . 17 | |||
3.9. The Location Claim (location) . . . . . . . . . . . . . . 15 | 3.11.2. Disabled . . . . . . . . . . . . . . . . . . . . . . 17 | |||
3.9.1. location CDDL . . . . . . . . . . . . . . . . . . . . 16 | 3.11.3. Disabled Since Boot . . . . . . . . . . . . . . . . 18 | |||
3.10. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 16 | 3.11.4. Disabled Permanently . . . . . . . . . . . . . . . . 18 | |||
3.10.1. age CDDL . . . . . . . . . . . . . . . . . . . . . . 16 | 3.11.5. Disabled Fully and Permanently . . . . . . . . . . . 18 | |||
3.11. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 16 | 3.11.6. debug-status CDDL . . . . . . . . . . . . . . . . . 18 | |||
3.11.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 16 | 3.12. Including Keys . . . . . . . . . . . . . . . . . . . . . 18 | |||
3.12. The Submods Part of a Token (submods) . . . . . . . . . . 17 | 3.13. The Location Claim (location) . . . . . . . . . . . . . . 19 | |||
3.12.1. Two Types of Submodules . . . . . . . . . . . . . . 17 | 3.13.1. location CDDL . . . . . . . . . . . . . . . . . . . 19 | |||
3.12.1.1. Non-token Submodules . . . . . . . . . . . . . . 17 | 3.14. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 20 | |||
3.12.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 17 | 3.14.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 20 | |||
3.12.2. No Inheritance . . . . . . . . . . . . . . . . . . . 18 | 3.15. The Intended Use Claim (intended-use) . . . . . . . . . . 20 | |||
3.12.3. Security Levels . . . . . . . . . . . . . . . . . . 18 | 3.15.1. intended-use CDDL . . . . . . . . . . . . . . . . . 21 | |||
3.12.4. Submodule Names . . . . . . . . . . . . . . . . . . 18 | 3.16. The Submodules Part of a Token (submods) . . . . . . . . 21 | |||
3.12.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 18 | 3.16.1. Two Types of Submodules . . . . . . . . . . . . . . 21 | |||
4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 3.16.1.1. Non-token Submodules . . . . . . . . . . . . . . 21 | |||
4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 19 | 3.16.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 22 | |||
4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 19 | 3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules . . 23 | |||
4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 3.16.2. No Inheritance . . . . . . . . . . . . . . . . . . . 23 | |||
4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 19 | 3.16.3. Security Levels . . . . . . . . . . . . . . . . . . 23 | |||
4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 20 | 3.16.4. Submodule Names . . . . . . . . . . . . . . . . . . 24 | |||
4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 3.16.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 24 | |||
4.4.1. CBOR Labels . . . . . . . . . . . . . . . . . . . . . 20 | 4. Endorsements and Verification Keys . . . . . . . . . . . . . 24 | |||
4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 21 | 5. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 22 | 5.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 24 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | 5.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 24 | |||
5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 23 | 5.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
5.1.1. Claims Registered by This Document . . . . . . . . . 23 | 5.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 25 | |||
6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 24 | 5.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 25 | |||
6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 24 | 5.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 25 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | 5.4.1. CBOR Interoperability . . . . . . . . . . . . . . . . 25 | |||
7.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 25 | 5.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 26 | |||
7.1.1. Transmission of Key Material . . . . . . . . . . . . 25 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 26 | |||
7.2. Transport Security . . . . . . . . . . . . . . . . . . . 25 | 6.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 26 | |||
7.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 26 | 6.2. Claim Characteristics . . . . . . . . . . . . . . . . . . 27 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | 6.2.1. Interoperability and Relying Party Orientation . . . 27 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 26 | 6.2.2. Operating System and Technology Neutral . . . . . . . 27 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 28 | 6.2.3. Security Level Neutral . . . . . . . . . . . . . . . 28 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 30 | 6.2.4. Reuse of Extant Data Formats . . . . . . . . . . . . 28 | |||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 30 | 6.2.5. Proprietary Claims . . . . . . . . . . . . . . . . . 28 | |||
A.2. Example with Submodules, Nesting and Security Levels . . 30 | 6.3. Claims Registered by This Document . . . . . . . . . . . 28 | |||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 30 | 7. Privacy Considerations . . . . . . . . . . . . . . . . . . . 29 | |||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 30 | 7.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 29 | |||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 33 | 7.2. Location Privacy Considerations . . . . . . . . . . . . . 30 | |||
Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 34 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 30 | |||
C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 34 | 8.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 30 | |||
C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 34 | 8.1.1. Transmission of Key Material . . . . . . . . . . . . 30 | |||
C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 34 | 8.2. Transport Security . . . . . . . . . . . . . . . . . . . 31 | |||
C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 34 | 8.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 31 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
9.1. Normative References . . . . . . . . . . . . . . . . . . 32 | ||||
9.2. Informative References . . . . . . . . . . . . . . . . . 34 | ||||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 36 | ||||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 36 | ||||
A.2. Example with Submodules, Nesting and Security Levels . . 36 | ||||
Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 36 | ||||
B.1. Collision Probability . . . . . . . . . . . . . . . . . . 36 | ||||
B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 38 | ||||
Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 39 | ||||
C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 39 | ||||
C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 39 | ||||
C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 39 | ||||
C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 40 | ||||
C.5. From draft-ietf-rats-eat-03 . . . . . . . . . . . . . . . 40 | ||||
C.6. From draft-ietf-rats-eat-04 . . . . . . . . . . . . . . . 40 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 41 | ||||
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 36 ¶ | skipping to change at page 5, line 4 ¶ | |||
limited to the following: | limited to the following: | |||
o Proof of the make and model of the device hardware (HW) | o Proof of the make and model of the device hardware (HW) | |||
o Proof of the make and model of the device processor, particularly | o Proof of the make and model of the device processor, particularly | |||
for security-oriented chips | for security-oriented chips | |||
o Measurement of the software (SW) running on the device | o Measurement of the software (SW) running on the device | |||
o Configuration and state of the device | o Configuration and state of the device | |||
o Environmental characteristics of the device such as its GPS | o Environmental characteristics of the device such as its GPS | |||
location | location | |||
1.1. CDDL, CWT and JWT | TODO: mention use for Attestation Evidence and Results. | |||
An EAT token is either a CWT as defined in [RFC8392] or a JWT as | 1.1. CWT, JWT and UCCS | |||
defined in [RFC7519]. This specification defines additional claims | ||||
for entity attestation. | For flexibility and ease of imlpementation in a wide variety of | |||
environments, EATs can be either CBOR [RFC7049] or JSON [ECMAScript] | ||||
format. This specification simultaneously describes both formats. | ||||
An EAT is either a CWT as defined in [RFC8392], a UCCS as defined in | ||||
[UCCS.Draft], or a JWT as defined in [RFC7519]. This specification | ||||
extends those specifications with additional claims for attestation. | ||||
The identification of a protocol element as an EAT, whether CBOR or | ||||
JSON format, follows the general conventions used by CWT, JWT and | ||||
UCCS. Largely this depends on the protocol carrying the EAT. In | ||||
some cases it may be by content type (e.g., MIME type). In other | ||||
cases it may be through use of CBOR tags. There is no fixed | ||||
mechanism across all use cases. | ||||
1.2. CDDL | ||||
This specification uses CDDL, [RFC8610], as the primary formalism to | This specification uses CDDL, [RFC8610], as the primary formalism to | |||
define each claim. The implementor then interprets the CDDL to come | define each claim. The implementor then interprets the CDDL to come | |||
to either the CBOR [RFC7049] or JSON [ECMAScript] representation. In | to either the CBOR [RFC7049] or JSON [ECMAScript] representation. In | |||
the case of JSON, Appendix E of [RFC8610] is followed. Additional | the case of JSON, Appendix E of [RFC8610] is followed. Additional | |||
rules are given in Section 4.3.2 of this document where Appendix E is | rules are given in Section 5.3.2 of this document where Appendix E is | |||
insufficient. (Note that this is not to define a general means to | insufficient. (Note that this is not to define a general means to | |||
translate between CBOR and JSON, but only to define enough such that | translate between CBOR and JSON, but only to define enough such that | |||
the claims defined in this document can be rendered unambiguously in | the claims defined in this document can be rendered unambiguously in | |||
JSON). | JSON). | |||
1.2. Entity Overview | The CWT specification was authored before CDDL was available and did | |||
not use it. This specification includes a CDDL definition of most of | ||||
what is described in [RFC8392]. | ||||
1.3. Entity Overview | ||||
An "entity" can be any device or device subassembly ("submodule") | An "entity" can be any device or device subassembly ("submodule") | |||
that can generate its own attestation in the form of an EAT. The | that can generate its own attestation in the form of an EAT. The | |||
attestation should be cryptographically verifiable by the EAT | attestation should be cryptographically verifiable by the EAT | |||
consumer. An EAT at the device-level can be composed of several | consumer. An EAT at the device-level can be composed of several | |||
submodule EAT's. It is assumed that any entity that can create an | submodule EAT's. It is assumed that any entity that can create an | |||
EAT does so by means of a dedicated root-of-trust (RoT). | EAT does so by means of a dedicated root-of-trust (RoT). | |||
Modern devices such as a mobile phone have many different execution | Modern devices such as a mobile phone have many different execution | |||
environments operating with different security levels. For example, | environments operating with different security levels. For example, | |||
skipping to change at page 5, line 29 ¶ | skipping to change at page 6, line 18 ¶ | |||
runs an operating system (OS) that hosts a plethora of downloadable | runs an operating system (OS) that hosts a plethora of downloadable | |||
apps. It may also have a TEE (Trusted Execution Environment) that is | apps. It may also have a TEE (Trusted Execution Environment) that is | |||
distinct, isolated, and hosts security-oriented functionality like | distinct, isolated, and hosts security-oriented functionality like | |||
biometric authentication. Additionally, it may have an eSE (embedded | biometric authentication. Additionally, it may have an eSE (embedded | |||
Secure Element) - a high security chip with defenses against HW | Secure Element) - a high security chip with defenses against HW | |||
attacks that can serve as a RoT. This device attestation format | attacks that can serve as a RoT. This device attestation format | |||
allows the attested data to be tagged at a security level from which | allows the attested data to be tagged at a security level from which | |||
it originates. In general, any discrete execution environment that | it originates. In general, any discrete execution environment that | |||
has an identifiable security level can be considered an entity. | has an identifiable security level can be considered an entity. | |||
1.3. EAT Operating Models | 1.4. EAT Operating Models | |||
TODO: Rewrite (or eliminate) this section in light of the RATS | ||||
architecture draft. | ||||
At least the following three participants exist in all EAT operating | At least the following three participants exist in all EAT operating | |||
models. Some operating models have additional participants. | models. Some operating models have additional participants. | |||
The Entity. This is the phone, the IoT device, the sensor, the sub- | The Entity. This is the phone, the IoT device, the sensor, the sub- | |||
assembly or such that the attestation provides information about. | assembly or such that the attestation provides information about. | |||
The Manufacturer. The company that made the entity. This may be a | The Manufacturer. The company that made the entity. This may be a | |||
chip vendor, a circuit board module vendor or a vendor of finished | chip vendor, a circuit board module vendor or a vendor of finished | |||
consumer products. | consumer products. | |||
skipping to change at page 6, line 41 ¶ | skipping to change at page 7, line 31 ¶ | |||
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 | |||
another, a privacy proxy service processes the EAT before it is | another, a privacy proxy service processes the EAT before it is | |||
transmitted to the relying party. In yet another, symmetric key | transmitted to the relying party. In yet another, symmetric key | |||
material is used for signing. In this case the manufacturer should | material is used for signing. In this case the manufacturer should | |||
perform the verification, because any release of the key material | perform the verification, because any release of the key material | |||
would enable a participant other than the entity to create valid | would enable a participant other than the entity to create valid | |||
signed EATs. | signed EATs. | |||
1.4. What is Not Standardized | 1.5. What is Not Standardized | |||
The following is not standardized for EAT, just the same they are not | The following is not standardized for EAT, just the same they are not | |||
standardized for CWT or JWT. | standardized for CWT or JWT. | |||
1.4.1. Transmission Protocol | 1.5.1. Transmission Protocol | |||
EATs may be transmitted by any protocol the same as CWTs and JWTs. | EATs may be transmitted by any protocol the same as CWTs and JWTs. | |||
For example, they might be added in extension fields of other | For example, they might be added in extension fields of other | |||
protocols, bundled into an HTTP header, or just transmitted as files. | protocols, bundled into an HTTP header, or just transmitted as files. | |||
This flexibility is intentional to allow broader adoption. This | This flexibility is intentional to allow broader adoption. This | |||
flexibility is possible because EAT's are self-secured with signing | flexibility is possible because EAT's are self-secured with signing | |||
(and possibly additionally with encryption and anti-replay). The | (and possibly additionally with encryption and anti-replay). The | |||
transmission protocol is not required to fulfill any additional | transmission protocol is not required to fulfill any additional | |||
security requirements. | security requirements. | |||
For certain devices, a direct connection may not exist between the | For certain devices, a direct connection may not exist between the | |||
EAT-producing device and the Relying Party. In such cases, the EAT | EAT-producing device and the Relying Party. In such cases, the EAT | |||
should be protected against malicious access. The use of COSE and | should be protected against malicious access. The use of COSE and | |||
JOSE allows for signing and encryption of the EAT. Therefore, even | JOSE allows for signing and encryption of the EAT. Therefore, even | |||
if the EAT is conveyed through intermediaries between the device and | if the EAT is conveyed through intermediaries between the device and | |||
Relying Party, such intermediaries cannot easily modify the EAT | Relying Party, such intermediaries cannot easily modify the EAT | |||
payload or alter the signature. | payload or alter the signature. | |||
1.4.2. Signing Scheme | 1.5.2. Signing Scheme | |||
The term "signing scheme" is used to refer to the system that | The term "signing scheme" is used to refer to the system that | |||
includes end-end process of establishing signing attestation key | includes end-end process of establishing signing attestation key | |||
material in the entity, signing the EAT, and verifying it. This | material in the entity, signing the EAT, and verifying it. This | |||
might involve key IDs and X.509 certificate chains or something | might involve key IDs and X.509 certificate chains or something | |||
similar but different. The term "signing algorithm" refers just to | similar but different. The term "signing algorithm" refers just to | |||
the algorithm ID in the COSE signing structure. No particular | the algorithm ID in the COSE signing structure. No particular | |||
signing algorithm or signing scheme is required by this standard. | signing algorithm or signing scheme is required by this standard. | |||
There are three main implementation issues driving this. First, | There are three main implementation issues driving this. First, | |||
skipping to change at page 8, line 7 ¶ | skipping to change at page 8, line 46 ¶ | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
This document reuses terminology from JWT [RFC7519], COSE [RFC8152], | This document reuses terminology from JWT [RFC7519], COSE [RFC8152], | |||
and CWT [RFC8392]. | and CWT [RFC8392]. | |||
Claim Name. The human-readable name used to identify a claim. | Claim Name. The human-readable name used to identify a claim. | |||
Claim Key. The CBOR map key or JSON name used to identify a claim. | Claim Key. The CBOR map key or JSON name used to identify a claim. | |||
Claim Value. The CBOR map or JSON object value representing the | Claim Value. The value portion of the claim. A claim value can be | |||
value of the claim. | any CBOR data item or JSON value. | |||
CWT Claims Set. The CBOR map or JSON object that contains the claims | CWT Claims Set. The CBOR map or JSON object that contains the claims | |||
conveyed by the CWT or JWT. | conveyed by the CWT or JWT. | |||
Attestation Key Material (AKM). The key material used to sign the | Attestation Key Material (AKM). The key material used to sign the | |||
EAT token. If it is done symmetrically with HMAC, then this is a | EAT token. If it is done symmetrically with HMAC, then this is a | |||
simple symmetric key. If it is done with ECC, such as an IEEE | simple symmetric key. If it is done with ECC, such as an IEEE | |||
DevID [IDevID], then this is the private part of the EC key pair. | DevID [IDevID], then this is the private part of the EC key pair. | |||
If ECDAA is used, (e.g., as used by Enhanced Privacy ID, i.e. | If ECDAA is used, (e.g., as used by Enhanced Privacy ID, i.e. | |||
EPID) then it is the key material needed for ECDAA. | EPID) then it is the key material needed for ECDAA. | |||
skipping to change at page 8, line 37 ¶ | skipping to change at page 9, line 29 ¶ | |||
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 | o All claims are optional | |||
o No claims are mandatory | o No claims are mandatory | |||
o All claims that are not understood by implementations MUST be | o All claims that are not understood by implementations MUST be | |||
ignored | ignored | |||
There are no default values or meanings assigned to absent claims | ||||
other than they are not reported. The reason for a claim's absence | ||||
may be the implementation not supporting the claim, an inability to | ||||
determine its value, or a preference to report in a different way | ||||
such as a proprietary claim. | ||||
CDDL along with text descriptions is used to define each claim | CDDL along with text descriptions is used to define each claim | |||
indepdent of encoding. Each claim is defined as a CDDL group (the | indepdent of encoding. Each claim is defined as a CDDL group (the | |||
group is a general aggregation and type definition feature of CDDL). | group is a general aggregation and type definition feature of CDDL). | |||
In the encoding section Section 4, the CDDL groups turn into CBOR map | In the encoding section Section 5, the CDDL groups turn into CBOR map | |||
entries and JSON name/value pairs. | entries and JSON name/value pairs. | |||
TODO: add paragraph here about use for Attestation Evidence and for | ||||
Results. | ||||
3.1. Token ID Claim (cti and jti) | 3.1. Token ID Claim (cti and jti) | |||
CWT defines the "cti" claim. JWT defines the "jti" claim. These are | CWT defines the "cti" claim. JWT defines the "jti" claim. These are | |||
equivalent to each other in EAT and carry a unique token identifier | equivalent to each other in EAT and carry a unique token identifier | |||
as they do in JWT and CWT. They may be used to defend against re use | as they do in JWT and CWT. They may be used to defend against re use | |||
of the token but are distinct from the nonce that is used by the | of the token but are distinct from the nonce that is used by the | |||
relying party to guarantee freshness and defend against replay. | relying party to guarantee freshness and defend against replay. | |||
3.2. Timestamp claim (iat) | 3.2. Timestamp claim (iat) | |||
The "iat" claim defined in CWT and JWT is used to indicate the date- | The "iat" claim defined in CWT and JWT is used to indicate the date- | |||
of-creation of the token. | of-creation of the token, the time at which the claims are collected | |||
and the token is composed and signed. | ||||
The data for some claims may be held or cached for some period of | ||||
time before the token is created. This period may be long, even | ||||
days. Examples are measurements taken at boot or a geographic | ||||
position fix taken the last time a satellite signal was received. | ||||
There are individual timestamps associated with these claims to | ||||
indicate their age is older than the "iat" timestamp. | ||||
CWT allows the use floating-point for this claim. EAT disallows the | ||||
use of floating-point. No token may contain an iat claim in float- | ||||
point format. Any recipient of a token with a floating-point format | ||||
iat claim may consider it an error. A 64-bit integer representation | ||||
of epoch time can represent a range of +/- 500 billion years, so the | ||||
only point of a floating-point timestamp is to have precession | ||||
greater than one second. This is not needed for EAT. | ||||
3.3. Nonce Claim (nonce) | 3.3. Nonce Claim (nonce) | |||
All EATs should have a nonce to prevent replay attacks. The nonce is | All EATs should have a nonce to prevent replay attacks. The nonce is | |||
generated by the relying party, the end consumer of the token. It is | generated by the relying party, the end consumer of the token. It is | |||
conveyed to the entity over whatever transport is in use before the | conveyed to the entity over whatever transport is in use before the | |||
token is generated and then included in the token as the nonce claim. | token is generated and then included in the token as the nonce claim. | |||
This documents the nonce claim for registration in the IANA CWT | This documents the nonce claim for registration in the IANA CWT | |||
claims registry. This is equivalent to the JWT nonce claim that is | claims registry. This is equivalent to the JWT nonce claim that is | |||
skipping to change at page 9, line 32 ¶ | skipping to change at page 10, line 48 ¶ | |||
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 | |||
nonce-type = [ + bstr .size (8..64) ] | {::include cddl/nonce.cddl} | |||
nonce-claim = ( | ||||
nonce => nonce-type | ||||
) | ||||
3.4. Universal Entity ID Claim (ueid) | 3.4. Universal Entity ID Claim (ueid) | |||
UEID's identify individual manufactured entities / devices such as a | UEID's identify individual manufactured entities / devices such as a | |||
mobile phone, a water meter, a Bluetooth speaker or a networked | mobile phone, a water meter, a Bluetooth speaker or a networked | |||
security camera. It may identify the entire device or a submodule or | security camera. It may identify the entire device or a submodule or | |||
subsystem. It does not identify types, models or classes of devices. | subsystem. It does not identify types, models or classes of devices. | |||
It is akin to a serial number, though it does not have to be | It is akin to a serial number, though it does not have to be | |||
sequential. | sequential. | |||
UEID's must be universally and globally unique across manufacturers | UEID's must be universally and globally unique across manufacturers | |||
and countries. UEIDs must also be unique across protocols and | and countries. UEIDs must also be unique across protocols and | |||
systems, as tokens are intended to be embedded in many different | systems, as tokens are intended to be embedded in many different | |||
protocols and systems. No two products anywhere, even in completely | protocols and systems. No two products anywhere, even in completely | |||
different industries made by two different manufacturers in two | different industries made by two different manufacturers in two | |||
different countries should have the same UEID (if they are not global | different countries should have the same UEID (if they are not global | |||
and universal in this way, then relying parties receiving them will | and universal in this way, then relying parties receiving them will | |||
have to track other characteristics of the device to keep devices | have to track other characteristics of the device to keep devices | |||
distinct between manufacturers). | distinct between manufacturers). | |||
There are privacy considerations for UEID's. See Section 6.1. | There are privacy considerations for UEID's. See Section 7.1. | |||
The UEID should be permanent. It should never change for a given | The UEID should be permanent. It should never change for a given | |||
device / entity. In addition, it should not be reprogrammable. | device / entity. In addition, it should not be reprogrammable. | |||
UEID's are variable length. All implementations MUST be able to | UEID's are variable length. All implementations MUST be able to | |||
receive UEID's that are 33 bytes long (1 type byte and 256 bits). | receive UEID's that are 33 bytes long (1 type byte and 256 bits). | |||
The recommended maximum sent is also 33 bytes. | The recommended maximum sent is also 33 bytes. | |||
When the entity constructs the UEID, the first byte is a type and the | When the entity constructs the UEID, the first byte is a type and the | |||
following bytes the ID for that type. Several types are allowed to | following bytes the ID for that type. Several types are allowed to | |||
accommodate different industries and different manufacturing | accommodate different industries and different manufacturing | |||
skipping to change at page 11, line 31 ¶ | skipping to change at page 12, line 31 ¶ | |||
| | | different registered company identifiers, and some | | | | | different registered company identifiers, and some | | |||
| | | unique per-device identifier. EUIs are often the | | | | | unique per-device identifier. EUIs are often the | | |||
| | | same as or similar to MAC addresses. This type | | | | | same as or similar to MAC addresses. This type | | |||
| | | includes MAC-48, an obsolete name for EUI-48. (Note | | | | | includes MAC-48, an obsolete name for EUI-48. (Note | | |||
| | | that while devices with multiple network interfaces | | | | | that while devices with multiple network interfaces | | |||
| | | may have multiple MAC addresses, there is only one | | | | | may have multiple MAC addresses, there is only one | | |||
| | | UEID for a device) [IEEE.802-2001], [OUI.Guide] | | | | | UEID for a device) [IEEE.802-2001], [OUI.Guide] | | |||
| 0x03 | IMEI | This is a 14-digit identifier consisting of an | | | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | |||
| | | 8-digit Type Allocation Code and a 6-digit serial | | | | | 8-digit Type Allocation Code and a 6-digit serial | | |||
| | | number allocated by the manufacturer, which SHALL | | | | | number allocated by the manufacturer, which SHALL | | |||
| | | be encoded as a binary integer over 48 bits. The | | | | | be encoded as byte string of length 14 with each | | |||
| | | IMEI value encoded SHALL NOT include Luhn checksum | | | | | byte as the digit's value (not the ASCII encoding | | |||
| | | or SVN information. [ThreeGPP.IMEI] | | | | | 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 | |||
skipping to change at page 12, line 13 ¶ | skipping to change at page 13, line 17 ¶ | |||
scheme. | scheme. | |||
o Device manufacturers are allowed to change from one type of UEID | o Device manufacturers are allowed to change from one type of UEID | |||
to another anytime they want. For example, they may find they can | to another anytime they want. For example, they may find they can | |||
optimize their manufacturing by switching from type 0x01 to type | optimize their manufacturing by switching from type 0x01 to type | |||
0x02 or vice versa. The main requirement on the manufacturer is | 0x02 or vice versa. The main requirement on the manufacturer is | |||
that UEIDs be universally unique. | that UEIDs be universally unique. | |||
3.4.1. ueid CDDL | 3.4.1. ueid CDDL | |||
ueid-claim = ( | {::include cddl/ueid.cddl} | |||
ueid => bstr .size (7..33) | ||||
) | ||||
3.5. Origination Claim (origination) | 3.5. Origination Claim (origination) | |||
TODO: this claim is likely to be dropped in favor of Endorsement | ||||
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 authored | | |||
| | and configured by "Acme" | | | | and configured by "Acme" | | |||
| Acme-TPM | The EATs are generated in a TPM manufactured | | | Acme-TPM | The EATs are generated in a TPM manufactured | | |||
skipping to change at page 12, line 44 ¶ | skipping to change at page 13, line 49 ¶ | |||
+-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
TODO: consider a more structure approach where the name and the URI | TODO: consider a more structure approach where the name and the URI | |||
and other are in separate fields. | and other are in separate fields. | |||
TODO: This needs refinement. It is somewhat parallel to issuer claim | TODO: This needs refinement. It is somewhat parallel to issuer claim | |||
in CWT in that it describes the authority that created the token. | in CWT in that it describes the authority that created the token. | |||
3.5.1. origination CDDL | 3.5.1. origination CDDL | |||
origination-claim = ( | {::include cddl/origination.cddl} | |||
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 | |||
these. A CID is also a 24-bit value from the same space as an MA-L, | these. A CID is also a 24-bit value from the same space as an MA-L, | |||
but not for use as a MAC address. IEEE has published Guidelines for | but not for use as a MAC address. IEEE has published Guidelines for | |||
Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup services | Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup services | |||
[OUI.Lookup] | [OUI.Lookup] | |||
Companies that have more than one of these IDs or MAC address blocks | Companies that have more than one of these IDs or MAC address blocks | |||
skipping to change at page 13, line 26 ¶ | skipping to change at page 14, line 31 ¶ | |||
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 | |||
oemid-claim = ( | {::include cddl/oemid.cddl} | |||
oemid => bstr | ||||
) | ||||
3.7. The Security Level Claim (security-level) | 3.7. Hardware Version Claims (hardware-version-claims) | |||
EATs have a claim that roughly characterizes the device / entities | The hardware version can be claimed at three different levels, the | |||
ability to defend against attacks aimed at capturing the signing key, | chip, the circuit board and the final device assembly. An EAT can | |||
forging claims and at forging EATs. This is done by roughly defining | include any combination these claims. | |||
four security levels as described below. This is similar to the | ||||
security levels defined in the Metadata Service defined by the Fast | The hardware version is a simple text string the format of which is | |||
Identity Online (FIDO) Alliance (TODO: reference). | set by each manufacturer. The structure and sorting order of this | |||
text string can be specified using the version-scheme item from | ||||
CoSWID [CoSWID]. | ||||
The hardware version can also be given by a 13-digit European 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 | ||||
representation of actual digits often printed with a bar code. Use | ||||
of this claim must comply with the EAN allocation and assignment | ||||
rules. For example, this requires the manufacturer to obtain a | ||||
manufacture code from GS1. | ||||
Both the simple version string and EAN-13 versions may be included | ||||
for the same hardware. | ||||
{::include cddl/hardware-version.cddl} | ||||
3.8. Software Description and Version | ||||
TODO: Add claims that reference CoSWID. | ||||
3.9. The Security Level Claim (security-level) | ||||
This claim characterizes the device/entity ability to defend against | ||||
attacks aimed at capturing the signing key, forging claims and at | ||||
forging EATs. This is done by | ||||
defining four security levels as described below. This is similar to | ||||
the key protection types defined by the Fast Identity Online (FIDO) | ||||
Alliance [FIDO.Registry]). | ||||
These claims describe security environment and countermeasures | These claims describe security environment and countermeasures | |||
available on the end-entity / client device where the attestation key | available on the end-entity / client device where the attestation key | |||
reside and the claims originate. | reside and the claims originate. | |||
1 - Unrestricted There is some expectation that implementor will | 1 - Unrestricted There is some expectation that implementor will | |||
protect the attestation signing keys at this level. Otherwise the | protect the attestation signing keys at this level. Otherwise the | |||
EAT provides no meaningful security assurances. | EAT provides no meaningful security assurances. | |||
2- Restricted Entities at this level should not be general-purpose | 2- Restricted Entities at this level should not be general-purpose | |||
operating environments that host features such as app download | operating environments that host features such as app download | |||
systems, web browsers and complex productivity applications. It | systems, web browsers and complex productivity applications. It | |||
is akin to the Secure Restricted level (see below) without the | is akin to the Secure Restricted level (see below) without the | |||
security orientation. Examples include a Wi-Fi subsystem, an IoT | security orientation. Examples include a Wi-Fi subsystem, an IoT | |||
camera, or sensor device. | camera, or sensor device. | |||
3 - Secure Restricted Entities at this level must meet the criteria | 3 - Secure Restricted Entities at this level must meet the criteria | |||
defined by FIDO Allowed Restricted Operating Environments (TODO: | defined by FIDO Allowed Restricted Operating Environments | |||
reference). Examples include TEE's and schemes using | [FIDO.AROE]. Examples include TEE's and schemes using | |||
virtualization-based security. Like the FIDO security goal, | virtualization-based security. Like the FIDO security goal, | |||
security at this level is aimed at defending well against large- | security at this level is aimed at defending well against large- | |||
scale network / remote attacks against the device. | scale network / remote attacks against the device. | |||
4 - Hardware Entities at this level must include substantial defense | 4 - Hardware Entities at this level must include substantial defense | |||
against physical or electrical attacks against the device itself. | against physical or electrical attacks against the device itself. | |||
It is assumed any potential attacker has captured the device and | It is assumed any potential attacker has captured the device and | |||
can disassemble it. Example include TPMs and Secure Elements. | can disassemble it. Example include TPMs and Secure Elements. | |||
The entity should claim the highest security level it achieves and no | ||||
higher. This set is not extensible so as to provide a common | ||||
interoperable description of security level to the relying party. If | ||||
a particular implementation considers this claim to be inadequate, it | ||||
can define its own proprietary claim. It may consider including both | ||||
this claim as a coarse indication of security and its own proprietary | ||||
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 (TODO: | security certification schemes such as those based on FIPS 140 | |||
reference) or those based on Common Criteria (TODO: reference). 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.7.1. security-level CDDL | 3.9.1. security-level CDDL | |||
security-level-type = &( | {::include cddl/security-level.cddl} | |||
unrestricted: 1, | ||||
restricted: 2, | ||||
secure-restricted: 3, | ||||
hardware: 4 | ||||
) | ||||
security-level-claim = ( | 3.10. Secure Boot Claim (secure-boot) | |||
security-level => security-level-type | ||||
) | ||||
3.8. Secure Boot and Debug Enable State Claims (boot-state) | The value of true indicates secure boot is enabled. Secure boot is | |||
considered enabled when base software, the firmware and operating | ||||
system, are under control of the entity manufacturer identified in | ||||
the oemid claimd described in Section 3.6. This may because the | ||||
software is in ROM or because it is cryptographically authenticated | ||||
or some combination of the two or other. | ||||
This claim is an array of five Boolean values indicating the boot and | 3.10.1. secure-boot CDDL | |||
debug state of the entity. | ||||
3.8.1. Secure Boot Enabled | {::include cddl/secure-boot.cddl} | |||
This indicates whether secure boot is enabled either for an entire | 3.11. Debug Status Claim (debug-status) | |||
device or an individual submodule. If it appears at the device | ||||
level, then this means that secure boot is enabled for all | ||||
submodules. Secure boot enablement allows a secure boot loader to | ||||
authenticate software running either in a device or a submodule prior | ||||
allowing execution. | ||||
3.8.2. Debug Disabled | This applies to system-wide or submodule-wide debug facilities of the | |||
target device / submodule like JTAG and diagnostic hardware built | ||||
into chips. It applies to any software debug facilities related to | ||||
root, operating system or privileged software that allow system-wide | ||||
memory inspection, tracing or modification of non-system software | ||||
like user mode applications. | ||||
This indicates whether debug capabilities are disabled for an entity | This characterization assumes that debug facilities can be enabled | |||
(i.e. value of 'true'). Debug disablement is considered a | and disabled in a dynamic way or be disabled in some permanent way | |||
prerequisite before an entity is considered operational. | such that no enabling is possible. An example of dynamic enabling is | |||
one where some authentication is required to enable debugging. An | ||||
example of permanent disabling is blowing a hardware fuse in a chip. | ||||
The specific type of the mechanism is not taken into account. For | ||||
example, it does not matter if authentication is by a global password | ||||
or by per-device public keys. | ||||
3.8.3. Debug Disabled Since Boot | As with all claims, the absence of the debug level claim means it is | |||
not reported. A conservative interpretation might assume the Not | ||||
Disabled state. It could however be that it is reported in a | ||||
proprietary claim. | ||||
This claim indicates whether debug capabilities for the entity were | This claim is not extensible so as to provide a common interoperable | |||
not disabled in any way since boot (i.e. value of 'true'). | description of debug status to the relying party. If a particular | |||
implementation considers this claim to be inadequate, it can define | ||||
its own proprietary claim. It may consider including both this claim | ||||
as a coarse indication of debug status and its own proprietary claim | ||||
as a refined indication. | ||||
3.8.4. Debug Permanent Disable | The higher levels of debug disabling requires that all debug | |||
disabling of the levels below it be in effect. Since the lowest | ||||
level requires that all of the target's debug be currently disabled, | ||||
all other levels require that too. | ||||
This claim indicates whether debug capabilities for the entity are | There is no inheritance of claims from a submodule to a superior | |||
permanently disabled (i.e. value of 'true'). This value can be set | module or vice versa. There is no assumption, requirement or | |||
to 'true' also if only the manufacturer is allowed to enabled debug, | guarantee that the target of a superior module encompasses the | |||
but the end user is not. | targets of submodules. Thus, every submodule must explicitly | |||
describe its own debug state. The verifier or relying party | ||||
receiving an EAT cannot assume that debug is turned off in a | ||||
submodule because there is a claim indicating it is turned off in a | ||||
superior module. | ||||
3.8.5. Debug Full Permanent Disable | An individual target device / submodule may have multiple debug | |||
facilities. The use of plural in the description of the states | ||||
refers to that, not to any aggregation or inheritance. | ||||
This claim indicates whether debug capabilities for the entity are | The architecture of some chips or devices may be such that a debug | |||
permanently disabled (i.e. value of 'true'). This value can only be | facility operates for the whole chip or device. If the EAT for such | |||
set to 'true' if no party can enable debug capabilities for the | a chip includes submodules, then each submodule should independently | |||
entity. Often this is implemented by blowing a fuse on a chip as | report the status of the whole-chip or whole-device debug facility. | |||
fuses cannot be restored once blown. | This is the only way the relying party can know the debug status of | |||
the submodules since there is no inheritance. | ||||
3.8.6. boot-state CDDL | 3.11.1. Enabled | |||
boot-state-type = [ | If any debug facility, even manufacturer hardware diagnostics, is | |||
secure-boot-enabled => bool, | currently enabled, then this level must be indicated. | |||
debug-disabled => bool, | ||||
debug-disabled-since-boot => bool, | ||||
debug-permanent-disable => bool, | ||||
debug-full-permanent-disable => bool | ||||
] | ||||
boot-state-claim = ( | 3.11.2. Disabled | |||
boot-state => boot-state-type | ||||
) | ||||
3.9. The Location Claim (location) | This level indicates all debug facilities are currently disabled. It | |||
may be possible to enable them in the future, and it may also be | ||||
possible that they were enabled in the past after the target device/ | ||||
sub-system booted/started, but they are currently disabled. | ||||
The location claim is a CBOR-formatted object that describes the | 3.11.3. Disabled Since Boot | |||
location of the device entity from which the attestation originates. | ||||
It is comprised of a map of additional sub claims that represent the | ||||
actual location coordinates (latitude, longitude and altitude). The | ||||
location coordinate claims are consistent with the WGS84 coordinate | ||||
system [WGS84]. In addition, a sub claim providing the estimated | ||||
accuracy of the location measurement is defined. | ||||
3.9.1. location CDDL | This level indicates all debug facilities are currently disabled and | |||
have been so since the target device/sub-system booted/started. | ||||
location-type = { | 3.11.4. Disabled Permanently | |||
latitude => number, | ||||
longitude => number, | ||||
? altitude => number, | ||||
? accuracy => number, | ||||
? altitude-accuracy => number, | ||||
? heading => number, | ||||
? speed => number | ||||
} | ||||
location-claim = ( | This level indicates all non-manufacturer facilities are permanently | |||
location => location-type | disabled such that no end user or developer cannot enable them. Only | |||
) | the manufacturer indicated in the OEMID claim can enable them. This | |||
also indicates that all debug facilities are currently disabled and | ||||
have been so since boot/start. | ||||
3.10. The Age Claim (age) | 3.11.5. Disabled Fully and Permanently | |||
The "age" claim contains a value that represents the number of | This level indicates that all debug capabilities for the target | |||
seconds that have elapsed since the token was created, measurement | device/sub-module are permanently disabled. | |||
was made, or location was obtained. Typical attestable values are | ||||
sent as soon as they are obtained. However, in the case that such a | ||||
value is buffered and sent at a later time and a sufficiently | ||||
accurate time reference is unavailable for creation of a timestamp, | ||||
then the age claim is provided. | ||||
3.10.1. age CDDL | 3.11.6. debug-status CDDL | |||
age-claim = ( | {::include cddl/debug-status.cddl} | |||
age => uint | ||||
) | ||||
3.11. The Uptime Claim (uptime) | 3.12. Including Keys | |||
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 | ||||
token. | ||||
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 | ||||
protocol. When the FIDO protocol includes a pubic key in its | ||||
attestation message, the key represents the binding of a user, device | ||||
and relying party. This document describes how claims containing | ||||
keys should be defined for the various use cases. It does not define | ||||
specific claims for specific use cases. | ||||
Keys in CBOR format tokens SHOULD be the COSE_Key format [RFC8152] | ||||
and keys in JSON format tokens SHOULD be the JSON Web Key format | ||||
[RFC7517]. These two formats support many common key types. Their | ||||
use avoids the need to decode other serialization formats. These two | ||||
formats can be extended to support further key types through their | ||||
IANA registries. | ||||
The general confirmation claim format [RFC8747], [RFC7800] may also | ||||
be used. It provides key encryption. It also allows for inclusion | ||||
by reference through a key ID. The confirmation claim format may | ||||
employed in the definition of some new claim for a a particular use | ||||
case. | ||||
When the actual confirmation claim is included in an EAT, this | ||||
document associates no use case semantics other than proof of | ||||
posession. Different EAT use cases may choose to associate further | ||||
semantics. The key in the confirmation claim MUST be protected the | ||||
same as the key used to sign the EAT. That is, the same, equivalent | ||||
or better hardware defenses, access controls, key generation and such | ||||
must be used. | ||||
3.13. The Location Claim (location) | ||||
The location claim gives the location of the device entity from which | ||||
the attestation originates. It is derived from the W3C Geolocation | ||||
API [W3C.GeoLoc]. The latitude, longitude, altitude and accuracy | ||||
must conform to [WGS84]. The altitude is in meters above the [WGS84] | ||||
ellipsoid. The two accuracy values are positive numbers in meters. | ||||
The heading is in degrees relative to true north. If the device is | ||||
stationary, the heading is NaN (floating-point not-a-number). The | ||||
speed is the horizontal component of the device velocity in meters | ||||
per second. | ||||
When encoding floating-point numbers half-precision should not be | ||||
used. It usually does not provide enough precision for a geographic | ||||
location. It is not a requirement that the receiver of an EAT | ||||
implement half-precision, so the receiver may not be able to decode | ||||
the location. | ||||
The location may have been cached for a period of time before token | ||||
creation. For example, it might have been minutes or hours or more | ||||
since the last contact with a GPS satellite. Either the timestamp or | ||||
age data item can be used to quantify the cached period. The | ||||
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 | ||||
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. | ||||
The age is the interval between acquisition of the location data and | ||||
token creation. | ||||
See {#locationprivacyconsiderations} below. | ||||
3.13.1. location CDDL | ||||
{::include cddl/location.cddl} | ||||
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.11.1. uptime CDDL | 3.14.1. uptime CDDL | |||
uptime-claim = ( | {::include cddl/uptime.cddl} | |||
uptime => uint | ||||
3.15. The Intended Use Claim (intended-use) | ||||
EAT's may be used in the context of several different applications. | ||||
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 | ||||
way for an application using EAT to internally distinguish between | ||||
different ways it uses EAT. | ||||
1 - Generic Generic attestation describes an application where the | ||||
EAT consumer requres the most up-to-date security assessment of | ||||
the attesting entity. It is expected that this is the most | ||||
commonly-used application of EAT. | ||||
2- Registration Entities that are registering for a new service may | ||||
be expected to provide an attestation as part of the registration | ||||
process. This intended-use setting indicates that the attestation | ||||
is not intended for any use but registration. | ||||
3 - Provisioning Entities may be provisioned with different values | ||||
or settings by an EAT consumer. Examples include key material or | ||||
device management trees. The consumer may require an EAT to | ||||
assess device security state of the entity prior to provisioning. | ||||
4 - Certificate Issuance (Certificate Signing Request) Certifying | ||||
authorities (CA's) may require attestations prior to the issuance | ||||
of certificates related to keypairs hosted at the entity. An EAT | ||||
may be used as part of the certificate signing request (CSR). | ||||
5 - Proof-of-Possession An EAT consumer may require an attestation | ||||
as part of an accompanying proof-of-possession (PoP) appication. | ||||
More precisely, a PoP transaction is intended to provide to the | ||||
recipient cryptographically-verifiable proof that the sender has | ||||
posession of a key. This kind of attestation may be neceesary to | ||||
verify the security state of the entity storing the private key | ||||
used in a PoP application. | ||||
3.15.1. intended-use CDDL | ||||
intended-use = &( | ||||
generic: 1, | ||||
registration: 2, | ||||
provisioning: 3, | ||||
csr: 4, | ||||
pop: 5 | ||||
) | ) | |||
3.12. The Submods 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. | |||
The claims for each these can be grouped together in a submodule. | The claims for each these can be grouped together in a submodule. | |||
The submods part of a token a single map/object with many entries, | The submods part of a token are in a single map/object with many | |||
one per submodule. There is only one submods map in a token. It is | entries, one per submodule. There is only one submods map in a | |||
identified by its specific label. It is a peer to other claims, but | token. It is identified by its specific label. It is a peer to | |||
it is not called a claim because it is a container for a claim set | other claims, but it is not called a claim because it is a container | |||
rather than an individual claim. This submods part of a token allows | for a claim set rather than an individual claim. This submods part | |||
what might be called recursion. It allows claim sets inside of claim | of a token allows what might be called recursion. It allows claim | |||
sets inside of claims sets... | sets inside of claim sets inside of claims sets... | |||
3.12.1. Two Types of Submodules | 3.16.1. Two Types of Submodules | |||
Each entry in the submod map 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 | o 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 | o A nested EAT that is a fully formed, independently signed EAT | |||
token | token | |||
3.12.1.1. Non-token Submodules | 3.16.1.1. Non-token Submodules | |||
Essentially this type of submodule, is just a sub-map or sub-object | This is simply a map or object containing claims about the submodule. | |||
containing claims. It is recognized from the other type by being a | ||||
data item of type map in CBOR or by being an object in JSON. | ||||
The contents are claims about the submodule of types defined in this | It may contain claims that are the same as its surrounding token or | |||
document or anywhere else claims types are defined. | superior submodules. For example, the top-level of the token may | |||
have a UEID, a submod may have a different UEID and a further | ||||
subordinate submodule may also have a UEID. | ||||
3.12.1.2. Nested EATs | It is signed/encrypted along with the rest of the token and thus the | |||
claims are secured by the same Attester with the same signing key as | ||||
the rest of the token. | ||||
This type of submodule is a fully formed EAT as described here. In | If a token is in CBOR format (a CWT or a UCCS), all non-token | |||
this case the submodule has key material distinct from the containing | submodules must be CBOR format. If a token in in JSON format (a | |||
EAT token that allows it to sign on its own. | JWT), all non-token submodules must be in JSON format. | |||
When an EAT is nested in another EAT as a submodule the nested EAT | When decoding, this type of submodule is recognized from the other | |||
MUST use the CBOR CWT tag. This clearly distinguishes it from the | type by being a data item of type map for CBOR or type object for | |||
non-token submodules. | JSON. | |||
3.12.2. No Inheritance | 3.16.1.2. Nested EATs | |||
This type of submodule is a fully formed secured EAT as defined in | ||||
this document except that it MUST NOT be a UCCS or an unsecured JWT. | ||||
A nested token that is one that is always secured using COSE or JOSE, | ||||
usually by an independent Attester. When the surrounding EAT is a | ||||
CWT or secured JWT, the nested token becomes securely bound with the | ||||
other claims in the surrounding token. | ||||
It is allowed to have a CWT as a submodule in a JWT and vice versa, | ||||
but this SHOULD be avoided unless necessary. | ||||
3.16.1.2.1. Surrounding EAT is CBOR format | ||||
They type of an EAT nested in a CWT is determined by whether the CBOR | ||||
type is a text string or a byte string. If a text string, then it is | ||||
a JWT. If a byte string, then it is a CWT. | ||||
A CWT nested in a CBOR-format token is always wrapped by a byte | ||||
string for easier handling with standard CBOR decoders and token | ||||
processing APIs that will typically take a byte buffer as input. | ||||
Nested CWTs may be either a CWT CBOR tag or a CWT Protocol Message. | ||||
COSE layers in nested CWT EATs MUST be a COSE_Tagged_Message, never a | ||||
COSE_Untagged_Message. If a nested EAT has more than one level of | ||||
COSE, for example one that is both encrypted and signed, a | ||||
COSE_Tagged_message must be used at every level. | ||||
3.16.1.2.2. Surrounding EAT is JSON format | ||||
When a CWT is nested in a JWT, it must be as a 55799 tag in order to | ||||
distinguish it from a nested JWT. | ||||
When a nested EAT in a JWT is decoded, first remove the base64url | ||||
encoding. Next, check to see if it starts with the bytes 0xd9d9f7. | ||||
If so, then it is a CWT as a JWT will never start with these four | ||||
bytes. If not if it is a JWT. | ||||
Other than the 55799 tag requirement, tag usage for CWT's nested in a | ||||
JSON format token follow the same rules as for CWTs nested in CBOR- | ||||
format tokens. It may be a CWT CBOR tag or a CWT Protocol Message | ||||
and COSE_Tagged_Message MUST be used at all COSE layers. | ||||
3.16.1.3. Unsecured JWTs and UCCS Tokens as Submodules | ||||
To incorporate a UCCS token as a submodule, it MUST be as a non-token | ||||
submodule. This can be accomplished inserting the content of the | ||||
UCCS Tag into the submodule map. The content of a UCCS tag is | ||||
exactly a map of claims as required for a non-token submodule. If | ||||
the UCCS is not a UCCS tag, then it can just be inserted into the | ||||
submodule map directly. | ||||
The definition of a nested EAT type of submodule is that it is one | ||||
that is secured (signed) by an Attester. Since UCCS tokens are | ||||
unsecured, they do not fulfill this definition and must be non-token | ||||
submodules. | ||||
To incorporate an Unsecured JWT as a submodule, the null-security | ||||
JOSE wrapping should be removed. The resulting claims set should be | ||||
inserted as a non-token submodule. | ||||
To incorporate a UCCS token in a surrounding JSON token, the UCCS | ||||
token claims should be translated from CBOR to JSON. To incorporate | ||||
an Unsecured JWT into a surrounding CBOR-format token, the null- | ||||
security JOSE should be removed and the claims translated from JSON | ||||
to CBOR. | ||||
3.16.2. No Inheritance | ||||
The subordinate modules do not inherit anything from the containing | The subordinate modules do not inherit anything from the containing | |||
token. The subordinate modules must explicitly include all of their | token. The subordinate modules must explicitly include all of their | |||
claims. This is the case even for claims like the nonce and age. | claims. This is the case even for claims like the nonce and age. | |||
This rule is in place for simplicity. It avoids complex inheritance | This rule is in place for simplicity. It avoids complex inheritance | |||
rules that might vary from one type of claim to another. (TODO: fix | rules that might vary from one type of claim to another. | |||
the boot claim which does have inheritance as currently described). | ||||
3.12.3. Security Levels | 3.16.3. Security Levels | |||
The security level of the non-token subordinate modules should always | The security level of the non-token subordinate modules should always | |||
be less than or equal to that of the containing modules in the case | be less than or equal to that of the containing modules in the case | |||
of non-token submodules. It makes no sense for a module of lesser | of non-token submodules. It makes no sense for a module of lesser | |||
security to be signing claims of a module of higher security. An | security to be signing claims of a module of higher security. An | |||
example of this is a TEE signing claims made by the non-TEE parts | example of this is a TEE signing claims made by the non-TEE parts | |||
(e.g. the high-level OS) of the device. | (e.g. the high-level OS) of the device. | |||
The opposite may be true for the nested tokens. They usually have | The opposite may be true for the nested tokens. They usually have | |||
their own more secure key material. An example of this is an | their own more secure key material. An example of this is an | |||
embedded secure element. | embedded secure element. | |||
3.12.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.12.5. submods CDDL | 3.16.5. submods CDDL | |||
submods-type = { + submodule } | ||||
submodule = ( | {::include cddl/submods.cddl} | |||
submod_name => eat-claims / eat-token | ||||
) | ||||
submod_name = tstr / int | 4. Endorsements and Verification Keys | |||
submods-part = ( | TODO: fill this section in. It will discuss key IDs, endorsement ID | |||
submods => submod-type | 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, | |||
just and ID/locator. | ||||
4. Encoding | 5. Encoding | |||
This makes use of the types defined in CDDL Appendix D, Standard | This makes use of the types defined in CDDL Appendix D, Standard | |||
Prelude. | Prelude. | |||
4.1. Common CDDL Types | 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. | ||||
CDDL was not in use when these claims where defined. | ||||
string-or-uri = uri / tstr; See JSON section below for JSON encoding of string-or-uri | 5.1. Common CDDL Types | |||
4.2. CDDL for CWT-defined Claims | time-int is identical to the epoch-based time, but disallows | |||
floating-point representation. | ||||
{::include cddl/common-types.cddl} | ||||
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. | |||
rfc8392-claim //= ( issuer => text ) | {::include cddl/cwt.cddl} | |||
rfc8392-claim //= ( subject => text ) | ||||
rfc8392-claim //= ( audience => text ) | ||||
rfc8392-claim //= ( expiration => time ) | ||||
rfc8392-claim //= ( not-before => time ) | ||||
rfc8392-claim //= ( issued-at => time ) | ||||
rfc8392-claim //= ( cwt-id => bytes ) | ||||
issuer = 1 | ||||
subject = 2 | ||||
audience = 3 | ||||
expiration = 4 | ||||
not-before = 5 | ||||
issued-at = 6 | ||||
cwt-id = 7 | ||||
cwt-claim = rfc8392-claim | ||||
4.3. JSON | 5.3. JSON | |||
4.3.1. JSON Labels | 5.3.1. JSON Labels | |||
ueid = "ueid" | ||||
origination = "origination" | ||||
oemid = "oemid" | ||||
security-level = "security-level" | ||||
boot-state = "boot-state" | ||||
location = "location" | ||||
age = "age" | ||||
uptime = "uptime" | ||||
nested-eat = "nested-eat" | ||||
submods = "submods" | ||||
latitude = "lat" | {::include cddl/json.cddl} | |||
longitude = "long"" | ||||
altitude = "alt" | ||||
accuracy = "accry" | ||||
altitude-accuracy = "alt-accry" | ||||
heading = "heading" | ||||
speed = "speed" | ||||
4.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 | o bstr - must be base64url encoded | |||
o time - must be encoded as NumericDate as described section 2 of | o time - must be encoded as NumericDate as described section 2 of | |||
[RFC7519]. | [RFC7519]. | |||
o string-or-uri - must be encoded as StringOrURI as described | o string-or-uri - must be encoded as StringOrURI as described | |||
section 2 of [RFC7519]. | section 2 of [RFC7519]. | |||
4.4. CBOR | 5.4. CBOR | |||
4.4.1. CBOR Labels | ||||
ueid = To_be_assigned | ||||
origination = To_be_assigned | ||||
oemid = To_be_assigned | ||||
security-level = To_be_assigned | ||||
boot-state = To_be_assigned | ||||
location = To_be_assigned | ||||
age = To_be_assigned | ||||
uptime = To_be_assigned | ||||
submods = To_be_assigned | ||||
nonce = To_be_assigned | ||||
latitude = 1 | ||||
longitude = 2 | ||||
altitude = 3 | ||||
accuracy = 4 | ||||
altitude-accuracy = 5 | ||||
heading = 6 | ||||
speed = 7 | ||||
4.4.2. 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. | |||
The assumption is that the entity is likely to be a constrained | The assumption is that the entity is likely to be a constrained | |||
device and relying party is likely to be a very capable server. The | device and relying party is likely to be a very capable server. The | |||
approach taken is that the entity generating the token can use | approach taken is that the entity generating the token can use | |||
whatever encoding it wants, specifically encodings that are easier to | whatever encoding it wants, specifically encodings that are easier to | |||
skipping to change at page 22, line 7 ¶ | skipping to change at page 26, line 10 ¶ | |||
o Integer Encoding (major type 0, 1) - The entity may use any | o 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 | o 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 be have tag 21 to indicate conversion | o Major type 2, bstr, SHOULD have tag 21 to indicate conversion to | |||
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 | o 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 | o 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 | |||
skipping to change at page 22, line 30 ¶ | skipping to change at page 26, line 33 ¶ | |||
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 | o 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. | o 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 - Use of Other types like bignums, regular expressions | o Other types - Other types like bignums, regular expressions and | |||
and such, SHOULD NOT be used. The server MAY support them but is | such, SHOULD NOT be used. The server MAY support them but is not | |||
not required to so interoperability is not guaranteed. | required to so interoperability is not guaranteed. | |||
4.5. Collected CDDL | 5.5. Collected CDDL | |||
A generic-claim is any CBOR map entry or JSON name/value pair. | {::include cddl/eat-token.cddl} | |||
eat-claims = { ; the top-level payload that is signed using COSE or JOSE | 6. IANA Considerations | |||
* claim | ||||
} | ||||
claim = ( | 6.1. Reuse of CBOR Web Token (CWT) Claims Registry | |||
ueid-claim // | ||||
origination-claim // | ||||
oemid-claim // | ||||
security-level-claim // | ||||
boot-state-claim // | ||||
location-claim // | ||||
age-claim // | ||||
uptime-claim // | ||||
submods-part // | ||||
cwt-claim // | ||||
generic-claim-type // | ||||
) | ||||
eat-token ; This is a set of eat-claims signed using COSE | 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 | ||||
EAT claims should be registered in the CWT and JWT Claims Registries. | ||||
TODO: copy the rest of the CDDL here (wait until the CDDL is more | 6.2. Claim Characteristics | |||
settled so as to avoid copying multiple times) | ||||
5. IANA Considerations | The following is design guidance for creating new EAT claims, | |||
particularly those to be registered with IANA. | ||||
5.1. Reuse of CBOR Web Token (CWT) Claims Registry | Much of this guidance is generic and could also be considered when | |||
designing new CWT or JWT claims. | ||||
Claims defined for EAT are compatible with those of CWT so the CWT | 6.2.1. Interoperability and Relying Party Orientation | |||
Claims Registry is re used. No new IANA registry is created. All | ||||
EAT claims should be registered in the CWT and JWT Claims Registries. | ||||
5.1.1. Claims Registered by This Document | It is a broad goal that EATs can be processed by relying parties in a | |||
general way regardless of the type, manufacturer or technology of the | ||||
device from which they originate. It is a goal that there be | ||||
general-purpose verification implementations that can verify tokens | ||||
for large numbers of use cases with special cases and configurations | ||||
for different device types. This is a goal of interoperability of | ||||
the semantics of claims themselves, not just of the signing, encoding | ||||
and serialization formats. | ||||
This is a lofty goal and difficult to achieve broadly requiring | ||||
careful definition of claims in a technology neutral way. Sometimes | ||||
it will be difficult to design a claim that can represent the | ||||
semantics of data from very different device types. However, the | ||||
goal remains even when difficult. | ||||
6.2.2. Operating System and Technology Neutral | ||||
Claims should be defined such that they are not specific to an | ||||
operating system. They should be applicable to multiple large high- | ||||
level operating systems from different vendors. They should also be | ||||
applicable to multiple small embedded operating systems from multiple | ||||
vendors and everything in between. | ||||
Claims should not be defined such that they are specific to a SW | ||||
environment or programming language. | ||||
Claims should not be defined such that they are specific to a chip or | ||||
particular hardware. For example, they should not just be the | ||||
contents of some HW status register as it is unlikely that the same | ||||
HW status register with the same bits exists on a chip of a different | ||||
manufacturer. | ||||
The boot and debug state claims in this document are an example of a | ||||
claim that has been defined in this neutral way. | ||||
6.2.3. Security Level Neutral | ||||
Many use cases will have EATs generated by some of the most secure | ||||
hardware and software that exists. Secure Elements and smart cards | ||||
are examples of this. However, EAT is intended for use in low- | ||||
security use cases the same as high-security use case. For example, | ||||
an app on a mobile device may generate EATs on its own. | ||||
Claims should be defined and registered on the basis of whether they | ||||
are useful and interoperable, not based on security level. In | ||||
particular, there should be no exclusion of claims because they are | ||||
just used only in low-security environments. | ||||
6.2.4. Reuse of Extant Data Formats | ||||
Where possible, claims should use already standardized data items, | ||||
identifiers and formats. This takes advantage of the expertise put | ||||
into creating those formats and improves interoperability. | ||||
Often extant claims will not be defined in an encoding or | ||||
serialization format used by EAT. It is preferred to define a CBOR | ||||
and JSON format for them so that EAT implementations do not require a | ||||
plethora of encoders and decoders for serialization formats. | ||||
In some cases, it may be better to use the encoding and serialization | ||||
as is. For example, signed X.509 certificates and CRLs can be | ||||
carried as-is in a byte string. This retains interoperability with | ||||
the extensive infrastructure for creating and processing X.509 | ||||
certificates and CRLs. | ||||
6.2.5. Proprietary Claims | ||||
EAT allows the definition and use of proprietary claims. | ||||
For example, a device manufacturer may generate a token with | ||||
proprietary claims intended only for verification by a service | ||||
offered by that device manufacturer. This is a supported use case. | ||||
In many cases proprietary claims will be the easiest and most obvious | ||||
way to proceed, however for better interoperability, use of general | ||||
standardized claims is preferred. | ||||
6.3. Claims Registered by This Document | ||||
o Claim Name: UEID | o Claim Name: UEID | |||
o Claim Description: The Universal Entity ID | o Claim Description: The Universal Entity ID | |||
o JWT Claim Name: N/A | o JWT Claim Name: N/A | |||
o Claim Key: 8 | o Claim Key: 8 | |||
o Claim Value Type(s): byte string | o Claim Value Type(s): byte string | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): *this document* | o Specification Document(s): *this document* | |||
skipping to change at page 24, line 5 ¶ | skipping to change at page 29, line 16 ¶ | |||
o Claim Key: 8 | o Claim Key: 8 | |||
o Claim Value Type(s): byte string | o Claim Value Type(s): byte string | |||
o Change Controller: IESG | o Change Controller: IESG | |||
o Specification Document(s): *this document* | o Specification Document(s): *this document* | |||
TODO: add the rest of the claims in here | TODO: add the rest of the claims in here | |||
6. 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. | |||
6.1. UEID Privacy Considerations | 7.1. UEID Privacy Considerations | |||
A UEID is usually not privacy-preserving. Any set of relying parties | A UEID is usually not privacy-preserving. Any set of relying parties | |||
that receives tokens that happen to be from a single device will be | that receives tokens that happen to be from a single device will be | |||
able to know the tokens are all from the same device and be able to | able to know the tokens are all from the same device and be able to | |||
track the device. Thus, in many usage situations ueid violates | track the device. Thus, in many usage situations ueid violates | |||
governmental privacy regulation. In other usage situations UEID will | governmental privacy regulation. In other usage situations UEID will | |||
not be allowed for certain products like browsers that give privacy | not be allowed for certain products like browsers that give privacy | |||
for the end user. It will often be the case that tokens will not | for the end user. It will often be the case that tokens will not | |||
have a UEID for these reasons. | have a UEID for these reasons. | |||
skipping to change at page 25, line 5 ¶ | skipping to change at page 30, line 13 ¶ | |||
device, then the device generates a UEID just for that relying | device, then the device generates a UEID just for that relying | |||
party by hashing a proofed relying party ID with the main device | party by hashing a proofed relying party ID with the main device | |||
UEID. | UEID. | |||
Note that some of these privacy preservation strategies result in | Note that some of these privacy preservation strategies result in | |||
multiple UEIDs per device. Each UEID is used in a different context, | multiple UEIDs per device. Each UEID is used in a different context, | |||
use case or system on the device. However, from the view of the | use case or system on the device. However, from the view of the | |||
relying party, there is just one UEID and it is still globally | relying party, there is just one UEID and it is still globally | |||
universal across manufacturers. | universal across manufacturers. | |||
7. Security Considerations | 7.2. Location Privacy Considerations | |||
Geographic location is most always considered personally identifiable | ||||
information. Implementers should consider laws and regulations | ||||
governing the transmission of location data from end user devices to | ||||
servers and services. Implementers should consider using location | ||||
management facilities offered by the operating system on the device | ||||
generating the attestation. For example, many mobile phones prompt | ||||
the user for permission when before sending location data. | ||||
8. Security Considerations | ||||
The security considerations provided in Section 8 of [RFC8392] and | The security considerations provided in Section 8 of [RFC8392] and | |||
Section 11 of [RFC7519] apply to EAT in its CWT and JWT form, | Section 11 of [RFC7519] apply to EAT in its CWT and JWT form, | |||
respectively. In addition, implementors should consider the | respectively. In addition, implementors should consider the | |||
following. | following. | |||
7.1. Key Provisioning | 8.1. Key Provisioning | |||
Private key material can be used to sign and/or encrypt the EAT, or | Private key material can be used to sign and/or encrypt the EAT, or | |||
can be used to derive the keys used for signing and/or encryption. | can be used to derive the keys used for signing and/or encryption. | |||
In some instances, the manufacturer of the entity may create the key | In some instances, the manufacturer of the entity may create the key | |||
material separately and provision the key material in the entity | material separately and provision the key material in the entity | |||
itself. The manfuacturer of any entity that is capable of producing | itself. The manfuacturer of any entity that is capable of producing | |||
an EAT should take care to ensure that any private key material be | an EAT should take care to ensure that any private key material be | |||
suitably protected prior to provisioning the key material in the | suitably protected prior to provisioning the key material in the | |||
entity itself. This can require creation of key material in an | entity itself. This can require creation of key material in an | |||
enclave (see [RFC4949] for definition of "enclave"), secure | enclave (see [RFC4949] for definition of "enclave"), secure | |||
transmission of the key material from the enclave to the entity using | transmission of the key material from the enclave to the entity using | |||
an appropriate protocol, and persistence of the private key material | an appropriate protocol, and persistence of the private key material | |||
in some form of secure storage to which (preferably) only the entity | in some form of secure storage to which (preferably) only the entity | |||
has access. | has access. | |||
7.1.1. Transmission of Key Material | 8.1.1. Transmission of Key Material | |||
Regarding transmission of key material from the enclave to the | Regarding transmission of key material from the enclave to the | |||
entity, the key material may pass through one or more intermediaries. | entity, the key material may pass through one or more intermediaries. | |||
Therefore some form of protection ("key wrapping") may be necessary. | Therefore some form of protection ("key wrapping") may be necessary. | |||
The transmission itself may be performed electronically, but can also | The transmission itself may be performed electronically, but can also | |||
be done by human courier. In the latter case, there should be | be done by human courier. In the latter case, there should be | |||
minimal to no exposure of the key material to the human (e.g. | minimal to no exposure of the key material to the human (e.g. | |||
encrypted portable memory). Moreover, the human should transport the | encrypted portable memory). Moreover, the human should transport the | |||
key material directly from the secure enclave where it was created to | key material directly from the secure enclave where it was created to | |||
a destination secure enclave where it can be provisioned. | a destination secure enclave where it can be provisioned. | |||
7.2. Transport Security | 8.2. Transport Security | |||
As stated in Section 8 of [RFC8392], "The security of the CWT relies | As stated in Section 8 of [RFC8392], "The security of the CWT relies | |||
upon on the protections offered by COSE". Similar considerations | upon on the protections offered by COSE". Similar considerations | |||
apply to EAT when sent as a CWT. However, EAT introduces the concept | apply to EAT when sent as a CWT. However, EAT introduces the concept | |||
of a nonce to protect against replay. Since an EAT may be created by | of a nonce to protect against replay. Since an EAT may be created by | |||
an entity that may not support the same type of transport security as | an entity that may not support the same type of transport security as | |||
the consumer of the EAT, intermediaries may be required to bridge | the consumer of the EAT, intermediaries may be required to bridge | |||
communications between the entity and consumer. As a result, it is | communications between the entity and consumer. As a result, it is | |||
RECOMMENDED that both the consumer create a nonce, and the entity | RECOMMENDED that both the consumer create a nonce, and the entity | |||
leverage the nonce along with COSE mechanisms for encryption and/or | leverage the nonce along with COSE mechanisms for encryption and/or | |||
signing to create the EAT. | signing to create the EAT. | |||
Similar considerations apply to the use of EAT as a JWT. Although | Similar considerations apply to the use of EAT as a JWT. Although | |||
the security of a JWT leverages the JSON Web Encryption (JWE) and | the security of a JWT leverages the JSON Web Encryption (JWE) and | |||
JSON Web Signature (JWS) specifications, it is still recommended to | JSON Web Signature (JWS) specifications, it is still recommended to | |||
make use of the EAT nonce. | make use of the EAT nonce. | |||
7.3. Multiple EAT Consumers | 8.3. Multiple EAT Consumers | |||
In many cases, more than one EAT consumer may be required to fully | In many cases, more than one EAT consumer may be required to fully | |||
verify the entity attestation. Examples include individual consumers | verify the entity attestation. Examples include individual consumers | |||
for nested EATs, or consumers for individual claims with an EAT. | for nested EATs, or consumers for individual claims with an EAT. | |||
When multiple consumers are required for verification of an EAT, it | When multiple consumers are required for verification of an EAT, it | |||
is important to minimize information exposure to each consumer. In | is important to minimize information exposure to each consumer. In | |||
addition, the communication between multiple consumers should be | addition, the communication between multiple consumers should be | |||
secure. | secure. | |||
For instance, consider the example of an encrypted and signed EAT | For instance, consider the example of an encrypted and signed EAT | |||
skipping to change at page 26, line 36 ¶ | skipping to change at page 32, line 7 ¶ | |||
subsets to any downstream consumer should leverage a secure protocol | subsets to any downstream consumer should leverage a secure protocol | |||
(e.g.one that uses transport-layer security, i.e. TLS), | (e.g.one that uses transport-layer security, i.e. TLS), | |||
However, assume the EAT of the previous example is hierarchical and | However, assume the EAT of the previous example is hierarchical and | |||
each claim subset for a downstream consumer is created in the form of | each claim subset for a downstream consumer is created in the form of | |||
a nested EAT. Then transport security between the receiving and | a nested EAT. Then transport security between the receiving and | |||
downstream consumers is not strictly required. Nevertheless, | downstream consumers is not strictly required. Nevertheless, | |||
downstream consumers of a nested EAT should provide a nonce unique to | downstream consumers of a nested EAT should provide a nonce unique to | |||
the EAT they are consuming. | the EAT they are consuming. | |||
8. References | 9. References | |||
8.1. Normative References | 9.1. Normative References | |||
[CoSWID] "Concise Software Identification Tags", November 2020, | ||||
<https://tools.ietf.org/html/draft-ietf-sacm-coswid-16>. | ||||
[EAN-13] GS1, "International Article Number - EAN/UPC barcodes", | ||||
2019, <https://www.gs1.org/standards/barcodes/ean-upc>. | ||||
[FIDO.AROE] | ||||
The FIDO Alliance, "FIDO Authenticator Allowed Restricted | ||||
Operating Environments List", November 2019, | ||||
<https://fidoalliance.org/specs/fido-uaf-v1.0-fd-20191115/ | ||||
fido-allowed-AROE-v1.0-fd-20191115.html>. | ||||
[IANA.CWT.Claims] | [IANA.CWT.Claims] | |||
IANA, "CBOR Web Token (CWT) Claims", | IANA, "CBOR Web Token (CWT) Claims", | |||
<http://www.iana.org/assignments/cwt>. | <http://www.iana.org/assignments/cwt>. | |||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token (JWT) Claims", | IANA, "JSON Web Token (JWT) Claims", | |||
<https://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | |||
October 2013, <https://www.rfc-editor.org/info/rfc7049>. | October 2013, <https://www.rfc-editor.org/info/rfc7049>. | |||
[RFC7517] Jones, M., "JSON Web Key (JWK)", RFC 7517, | ||||
DOI 10.17487/RFC7517, May 2015, | ||||
<https://www.rfc-editor.org/info/rfc7517>. | ||||
[RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | [RFC7519] Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token | |||
(JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015, | |||
<https://www.rfc-editor.org/info/rfc7519>. | <https://www.rfc-editor.org/info/rfc7519>. | |||
[RFC7800] Jones, M., Bradley, J., and H. Tschofenig, "Proof-of- | ||||
Possession Key Semantics for JSON Web Tokens (JWTs)", | ||||
RFC 7800, DOI 10.17487/RFC7800, April 2016, | ||||
<https://www.rfc-editor.org/info/rfc7800>. | ||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
Writing an IANA Considerations Section in RFCs", BCP 26, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
RFC 8126, DOI 10.17487/RFC8126, June 2017, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc8126>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | [RFC8152] Schaad, J., "CBOR Object Signing and Encryption (COSE)", | |||
RFC 8152, DOI 10.17487/RFC8152, July 2017, | RFC 8152, DOI 10.17487/RFC8152, July 2017, | |||
<https://www.rfc-editor.org/info/rfc8152>. | <https://www.rfc-editor.org/info/rfc8152>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
skipping to change at page 27, line 36 ¶ | skipping to change at page 33, line 28 ¶ | |||
[RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | [RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig, | |||
"CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | "CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392, | |||
May 2018, <https://www.rfc-editor.org/info/rfc8392>. | May 2018, <https://www.rfc-editor.org/info/rfc8392>. | |||
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | [RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data | |||
Definition Language (CDDL): A Notational Convention to | Definition Language (CDDL): A Notational Convention to | |||
Express Concise Binary Object Representation (CBOR) and | Express Concise Binary Object Representation (CBOR) and | |||
JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8610>. | June 2019, <https://www.rfc-editor.org/info/rfc8610>. | |||
[RFC8747] Jones, M., Seitz, L., Selander, G., Erdtman, S., and H. | ||||
Tschofenig, "Proof-of-Possession Key Semantics for CBOR | ||||
Web Tokens (CWTs)", RFC 8747, DOI 10.17487/RFC8747, March | ||||
2020, <https://www.rfc-editor.org/info/rfc8747>. | ||||
[ThreeGPP.IMEI] | [ThreeGPP.IMEI] | |||
3GPP, "3rd Generation Partnership Project; Technical | 3GPP, "3rd Generation Partnership Project; Technical | |||
Specification Group Core Network and Terminals; Numbering, | Specification Group Core Network and Terminals; Numbering, | |||
addressing and identification", 2019, | addressing and identification", 2019, | |||
<https://portal.3gpp.org/desktopmodules/Specifications/ | <https://portal.3gpp.org/desktopmodules/Specifications/ | |||
SpecificationDetails.aspx?specificationId=729>. | SpecificationDetails.aspx?specificationId=729>. | |||
[TIME_T] The Open Group Base Specifications, "Vol. 1: Base | [TIME_T] The Open Group Base Specifications, "Vol. 1: Base | |||
Definitions, Issue 7", Section 4.15 'Seconds Since the | Definitions, Issue 7", Section 4.15 'Seconds Since the | |||
Epoch', IEEE Std 1003.1, 2013 Edition, 2013, | Epoch', IEEE Std 1003.1, 2013 Edition, 2013, | |||
<http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ | <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/ | |||
V1_chap04.html#tag_04_15>. | V1_chap04.html#tag_04_15>. | |||
[UCCS.Draft] | ||||
Birkholz, H., "A CBOR Tag for Unprotected CWT Claims | ||||
Sets", 2020, | ||||
<https://tools.ietf.org/html/draft-birkholz-rats-uccs-01>. | ||||
[WGS84] National Imagery and Mapping Agency, "National Imagery and | [WGS84] National Imagery and Mapping Agency, "National Imagery and | |||
Mapping Agency Technical Report 8350.2, Third Edition", | Mapping Agency Technical Report 8350.2, Third Edition", | |||
2000, <http://earth- | 2000, <http://earth- | |||
info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>. | info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf>. | |||
8.2. Informative References | 9.2. Informative References | |||
[ASN.1] International Telecommunication Union, "Information | [ASN.1] International Telecommunication Union, "Information | |||
Technology -- ASN.1 encoding rules: Specification of Basic | Technology -- ASN.1 encoding rules: Specification of Basic | |||
Encoding Rules (BER), Canonical Encoding Rules (CER) and | Encoding Rules (BER), Canonical Encoding Rules (CER) and | |||
Distinguished Encoding Rules (DER)", ITU-T Recommendation | Distinguished Encoding Rules (DER)", ITU-T Recommendation | |||
X.690, 1994. | X.690, 1994. | |||
[BirthdayAttack] | [BirthdayAttack] | |||
"Birthday attack", | "Birthday attack", | |||
<https://en.wikipedia.org/wiki/Birthday_attack.>. | <https://en.wikipedia.org/wiki/Birthday_attack.>. | |||
[Common.Criteria] | ||||
"Common Criteria for Information Technology Security | ||||
Evaluation", April 2017, | ||||
<https://www.commoncriteriaportal.org/cc/>. | ||||
[ECMAScript] | [ECMAScript] | |||
"Ecma International, "ECMAScript Language Specification, | "Ecma International, "ECMAScript Language Specification, | |||
5.1 Edition", ECMA Standard 262", June 2011, | 5.1 Edition", ECMA Standard 262", June 2011, | |||
<http://www.ecma-international.org/ecma-262/5.1/ECMA- | <http://www.ecma-international.org/ecma-262/5.1/ECMA- | |||
262.pdf>. | 262.pdf>. | |||
[FIDO.Registry] | ||||
The FIDO Alliance, "FIDO Registry of Predefined Values", | ||||
December 2019, <https://fidoalliance.org/specs/common- | ||||
specs/fido-registry-v2.1-ps-20191217.html>. | ||||
[FIPS-140] | ||||
National Institue of Standards, "Security Requirements for | ||||
Cryptographic Modules", May 2001, | ||||
<https://csrc.nist.gov/publications/detail/fips/140/2/ | ||||
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 | |||
Overview And Architecture", 2007, | Overview And Architecture", 2007, | |||
<https://webstore.ansi.org/standards/ieee/ | <https://webstore.ansi.org/standards/ieee/ | |||
ieee8022001r2007>. | ieee8022001r2007>. | |||
skipping to change at page 29, line 9 ¶ | skipping to change at page 35, line 30 ¶ | |||
[RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | |||
Unique IDentifier (UUID) URN Namespace", RFC 4122, | Unique IDentifier (UUID) URN Namespace", RFC 4122, | |||
DOI 10.17487/RFC4122, July 2005, | DOI 10.17487/RFC4122, July 2005, | |||
<https://www.rfc-editor.org/info/rfc4122>. | <https://www.rfc-editor.org/info/rfc4122>. | |||
[RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | |||
FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | |||
<https://www.rfc-editor.org/info/rfc4949>. | <https://www.rfc-editor.org/info/rfc4949>. | |||
[W3C.GeoLoc] | ||||
Worldwide Web Consortium, "Geolocation API Specification | ||||
2nd Edition", January 2018, <https://www.w3.org/TR/ | ||||
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} | |||
/ nonce / 9:h'948f8860d13a463e8e', | ||||
/ UEID / 10:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | ||||
/ boot-state / 12:{true, true, true, true, false} | ||||
/ time stamp (iat) / 6:1526542894, | ||||
} | ||||
A.2. Example with Submodules, Nesting and Security Levels | A.2. Example with Submodules, Nesting and Security Levels | |||
{ | {::include cddl/examples/submods.diag} | |||
/ nonce / 9:h'948f8860d13a463e8e', | ||||
/ UEID / 10:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | ||||
/ boot-state / 12:{true, true, true, true, false} | ||||
/ time stamp (iat) / 6:1526542894, | ||||
/ seclevel / 11:3, / secure restricted OS / | ||||
/ submods / 17: | ||||
{ | ||||
/ first submod, an Android Application / "Android App Foo" : { | ||||
/ seclevel / 11:1, / unrestricted / | ||||
/ app data / -70000:'text string' | ||||
}, | ||||
/ 2nd submod, A nested EAT from a secure element / "Secure Element Eat" : | ||||
/ eat / 61( 18( | ||||
/ an embedded EAT, bytes of which are not shown / | ||||
)) | ||||
/ 3rd submod, information about Linux Android / "Linux Android": { | ||||
/ seclevel / 11:1, / unrestricted / | ||||
/ custom - release / -80000:'8.0.0', | ||||
/ custom - version / -80001:'4.9.51+' | ||||
} | ||||
} | ||||
} | ||||
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 34, line 18 ¶ | skipping to change at page 39, line 39 ¶ | |||
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 | o Added UEID design rationale appendix | |||
C.2. From draft-mandyam-rats-eat-00 | C.2. From draft-mandyam-rats-eat-00 | |||
This is a fairly large change in the orientation of the document, but | This is a fairly large change in the orientation of the document, but | |||
not new claims have been added. | no new claims have been added. | |||
o Separate information and data model using CDDL. | o Separate information and data model using CDDL. | |||
o Say an EAT is a CWT or JWT | o Say an EAT is a CWT or JWT | |||
o Use a map to structure the boot_state and location claims | o Use a map to structure the boot_state and location claims | |||
C.3. From draft-ietf-rats-eat-01 | C.3. From draft-ietf-rats-eat-01 | |||
o Clarifications and corrections for OEMID claim | o Clarifications and corrections for OEMID claim | |||
skipping to change at page 35, line 5 ¶ | skipping to change at page 40, line 21 ¶ | |||
o Added appendix justifying UEID design and size. | o Added appendix justifying UEID design and size. | |||
o Submods part now includes nested eat tokens so they can be named | o Submods part now includes nested eat tokens so they can be named | |||
and there can be more tha one of them | and there can be more tha one of them | |||
o Lots of fixes to the CDDL | o Lots of fixes to the CDDL | |||
o Added security considerations | o Added security considerations | |||
C.5. From draft-ietf-rats-eat-03 | ||||
o Split boot_state into secure-boot and debug-disable claims | ||||
o Debug disable is an enumerated type rather than Booleans | ||||
C.6. From draft-ietf-rats-eat-04 | ||||
o 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 | ||||
o CWT format submodules are byte string wrapped | ||||
o Allows for JWT nested in CWT and vice versa | ||||
o Allows UCCS (unsigned CWTs) and JWT unsecured tokens | ||||
o Clarify tag usage when nesting tokens | ||||
o Add section on key inclusion | ||||
o Add hardware version claims | ||||
o Collected CDDL is now filled in. Other CDDL corrections. | ||||
o Rename debug-disable to debug-status; clarify that it is not | ||||
extensible | ||||
o Security level claim is not extensible | ||||
o Improve specification of location claim and added a location | ||||
privacy section | ||||
o Add intended use claim | ||||
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 | USA | |||
Phone: +1 858 651 7200 | Phone: +1 858 651 7200 | |||
EMail: mandyam@qti.qualcomm.com | EMail: mandyam@qti.qualcomm.com | |||
End of changes. 126 change blocks. | ||||
387 lines changed or deleted | 748 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/ |