| < draft-ietf-rats-eat-02.txt | draft-ietf-rats-eat-03.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: July 12, 2020 Security Theory LLC | Expires: August 23, 2020 Security Theory LLC | |||
| M. Ballesteros | M. Ballesteros | |||
| J. O'Donoghue | J. O'Donoghue | |||
| Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
| January 09, 2020 | February 20, 2020 | |||
| The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
| draft-ietf-rats-eat-02 | draft-ietf-rats-eat-03 | |||
| 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 July 12, 2020. | This Internet-Draft will expire on August 23, 2020. | |||
| 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | 1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2. Entity Overview . . . . . . . . . . . . . . . . . . . . . 4 | 1.2. Entity Overview . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1.3. EAT Operating Models . . . . . . . . . . . . . . . . . . 5 | 1.3. EAT Operating Models . . . . . . . . . . . . . . . . . . 5 | |||
| 1.4. What is Not Standardized . . . . . . . . . . . . . . . . 6 | 1.4. What is Not Standardized . . . . . . . . . . . . . . . . 6 | |||
| 1.4.1. Transmission Protocol . . . . . . . . . . . . . . . . 6 | 1.4.1. Transmission Protocol . . . . . . . . . . . . . . . . 6 | |||
| 1.4.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 7 | 1.4.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 7 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. The Claims Information Model . . . . . . . . . . . . . . . . 8 | 3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 8 | 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 8 | |||
| 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 8 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 8 | 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.3.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 9 | 3.3.1. nonce CDDL . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 9 | 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 9 | |||
| 3.4.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3.4.1. ueid CDDL . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.5. Origination Claim (origination) . . . . . . . . . . . . . 11 | 3.5. Origination Claim (origination) . . . . . . . . . . . . . 12 | |||
| 3.5.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.5.1. origination CDDL . . . . . . . . . . . . . . . . . . 12 | |||
| 3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 12 | 3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 12 | |||
| 3.6.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.6.1. oemid CDDL . . . . . . . . . . . . . . . . . . . . . 13 | |||
| 3.7. The Security Level Claim (security_level) . . . . . . . . 12 | 3.7. The Security Level Claim (security-level) . . . . . . . . 13 | |||
| 3.7.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 13 | 3.7.1. security-level CDDL . . . . . . . . . . . . . . . . . 14 | |||
| 3.8. Secure Boot and Debug Enable State Claims (boot_state) . 13 | 3.8. Secure Boot and Debug Enable State Claims (boot-state) . 14 | |||
| 3.8.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 14 | 3.8.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 14 | |||
| 3.8.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 14 | 3.8.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.8.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 14 | 3.8.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 15 | |||
| 3.8.4. Debug Permanent Disable . . . . . . . . . . . . . . . 14 | 3.8.4. Debug Permanent Disable . . . . . . . . . . . . . . . 15 | |||
| 3.8.5. Debug Full Permanent Disable . . . . . . . . . . . . 14 | 3.8.5. Debug Full Permanent Disable . . . . . . . . . . . . 15 | |||
| 3.8.6. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 14 | 3.8.6. boot-state CDDL . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.9. The Location Claim (location) . . . . . . . . . . . . . . 15 | 3.9. The Location Claim (location) . . . . . . . . . . . . . . 15 | |||
| 3.9.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.9.1. location CDDL . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.10. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 15 | 3.10. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.11. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 15 | 3.10.1. age CDDL . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.11.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.11. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 16 | |||
| 3.12. Nested EATs, the EAT Claim (nested_eat) . . . . . . . . . 16 | 3.11.1. uptime CDDL . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.12.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3.12. The Submods Part of a Token (submods) . . . . . . . . . . 17 | |||
| 3.13. The Submods Claim (submods) . . . . . . . . . . . . . . . 16 | 3.12.1. Two Types of Submodules . . . . . . . . . . . . . . 17 | |||
| 3.13.1. The submod_name Claim . . . . . . . . . . . . . . . 16 | 3.12.1.1. Non-token Submodules . . . . . . . . . . . . . . 17 | |||
| 3.13.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.12.1.2. Nested EATs . . . . . . . . . . . . . . . . . . 17 | |||
| 4. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 3.12.2. No Inheritance . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 17 | 3.12.3. Security Levels . . . . . . . . . . . . . . . . . . 18 | |||
| 4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 17 | 3.12.4. Submodule Names . . . . . . . . . . . . . . . . . . 18 | |||
| 4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 3.12.5. submods CDDL . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 18 | 4. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 19 | 4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 19 | |||
| 4.4.1. Labels . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 20 | 4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 21 | 4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 20 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 22 | 4.4.1. CBOR Labels . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 5.1.1. Claims Registered by This Document . . . . . . . . . 22 | 4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 21 | |||
| 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 23 | 4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 22 | |||
| 6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 23 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | 5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 23 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | 5.1.1. Claims Registered by This Document . . . . . . . . . 23 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 24 | 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 25 | 6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 24 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 27 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 25 | |||
| A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 27 | 7.1. Key Provisioning . . . . . . . . . . . . . . . . . . . . 25 | |||
| A.2. Example with Submodules, Nesting and Security Levels . . 27 | 7.1.1. Transmission of Key Material . . . . . . . . . . . . 25 | |||
| Appendix B. Changes from Previous Drafts . . . . . . . . . . . . 28 | 7.2. Transport Security . . . . . . . . . . . . . . . . . . . 25 | |||
| B.1. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 28 | 7.3. Multiple EAT Consumers . . . . . . . . . . . . . . . . . 26 | |||
| B.2. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 28 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 26 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 28 | ||||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 30 | ||||
| A.2. Example with Submodules, Nesting and Security Levels . . 30 | ||||
| Appendix B. UEID Design Rationale . . . . . . . . . . . . . . . 30 | ||||
| B.1. Collision Probability . . . . . . . . . . . . . . . . . . 30 | ||||
| B.2. No Use of UUID . . . . . . . . . . . . . . . . . . . . . 33 | ||||
| Appendix C. Changes from Previous Drafts . . . . . . . . . . . . 34 | ||||
| C.1. From draft-rats-eat-01 . . . . . . . . . . . . . . . . . 34 | ||||
| C.2. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 34 | ||||
| C.3. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 34 | ||||
| C.4. From draft-ietf-rats-eat-02 . . . . . . . . . . . . . . . 34 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 35 | ||||
| 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 8, line 8 ¶ | skipping to change at page 8, line 20 ¶ | |||
| 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. | |||
| 3. The Claims Information Model | 3. The Claims | |||
| This section describes new claims defined for attestation. It also | This section describes new claims defined for attestation. It also | |||
| mentions several claims defined by CWT and JWT that are particularly | mentions several claims defined by CWT and JWT that are particularly | |||
| important for EAT. | important for EAT. | |||
| Note also: * Any claim defined for CWT or JWT may be used in an EAT | Note also: * Any claim defined for CWT or JWT may be used in an EAT | |||
| including those in the CWT [IANA.CWT.Claims] and JWT IANA | including those in the CWT [IANA.CWT.Claims] and JWT IANA | |||
| [IANA.JWT.Claims] claims registries. | [IANA.JWT.Claims] claims registries. | |||
| o All claims are optional | 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 | |||
| CDDL along with text descriptions is used to define the information | CDDL along with text descriptions is used to define each claim | |||
| model. Each claim is defined as a CDDL group (the group is a general | indepdent of encoding. Each claim is defined as a CDDL group (the | |||
| aggregation and type definition feature of CDDL). In the data model, | group is a general aggregation and type definition feature of CDDL). | |||
| described in the Section 4, the CDDL groups turn into CBOR map | In the encoding section Section 4, the CDDL groups turn into CBOR map | |||
| entries and JSON name/value pairs. | entries and JSON name/value pairs. | |||
| 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. | |||
| skipping to change at page 9, line 15 ¶ | skipping to change at page 9, line 27 ¶ | |||
| This documents the nonce claim for registration in the IANA CWT | This documents the nonce claim for registration in the IANA CWT | |||
| claims registry. This is equivalent to the JWT nonce claim that is | claims registry. This is equivalent to the JWT nonce claim that is | |||
| already registered. | already registered. | |||
| The nonce must be at least 8 bytes (64 bits) as fewer are unlikely to | The nonce must be at least 8 bytes (64 bits) as fewer are unlikely to | |||
| be secure. A maximum of 64 bytes is set to limit the memory a | be secure. A maximum of 64 bytes is set to limit the memory a | |||
| constrained implementation uses. This size range is not set for the | constrained implementation uses. This size range is not set for the | |||
| already-registered JWT nonce, but it should follow this size | already-registered JWT nonce, but it should follow this size | |||
| recommendation when used in an EAT. | recommendation when used in an EAT. | |||
| 3.3.1. CDDL | Multiple nonces are allowed to accommodate multistage verification | |||
| and consumption. | ||||
| nonce_claim = ( | 3.3.1. nonce CDDL | |||
| nonce => bstr .size (8..64) | ||||
| nonce-type = [ + bstr .size (8..64) ] | ||||
| 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. | |||
| skipping to change at page 9, line 44 ¶ | skipping to change at page 10, line 12 ¶ | |||
| 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 6.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. The recommended maximum is 33 bytes (1 | UEID's are variable length. All implementations MUST be able to | |||
| type byte and 256 bits). The recommended minimum is 17 bytes (1 type | receive UEID's that are 33 bytes long (1 type byte and 256 bits). | |||
| and 128 bits) because fewer bytes endanger the universal uniqueness. | The recommended maximum sent is also 33 bytes. | |||
| When the entity constructs the UEID, the first byte is a type and the | When the entity constructs the UEID, the first byte is a type and the | |||
| following bytes the ID for that type. Several types are allowed to | following bytes the ID for that type. Several types are allowed to | |||
| accommodate different industries and different manufacturing | accommodate different industries and different manufacturing | |||
| processes and to give options to avoid paying fees for certain types | processes and to give options to avoid paying fees for certain types | |||
| of manufacturer registrations. | of manufacturer registrations. | |||
| Creation of new types requires a Standards Action [RFC8126]. | Creation of new types requires a Standards Action [RFC8126]. | |||
| +------+--------+---------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
| | Type | Type | Specification | | | Type | Type | Specification | | |||
| | Byte | Name | | | | Byte | Name | | | |||
| +------+--------+---------------------------------------------------+ | +------+------+-----------------------------------------------------+ | |||
| | 0x01 | RAND | This is a 128- to 256-bit random number generated | | | 0x01 | RAND | This is a 128, 192 or 256 bit random number | | |||
| | | | once and stored in the device. This may be | | | | | generated once and stored in the device. This may | | |||
| | | | constructed by concatenating enough identifiers | | | | | be constructed by concatenating enough identifiers | | |||
| | | | to be universally unique and then feeding the | | | | | to make up an equivalent number of random bits and | | |||
| | | | concatenation through a cryptographic hash | | | | | then feeding the concatenation through a | | |||
| | | | function. It may also be a cryptographic quality | | | | | cryptographic hash function. It may also be a | | |||
| | | | random number generate once at the beginning of | | | | | cryptographic quality random number generated once | | |||
| | | | the life of the device and stored. | | | | | at the beginning of the life of the device and | | |||
| | 0x02 | IEEE | This makes use of the IEEE company identification | | | | | stored. It may not be smaller than 128 bits. | | |||
| | | EUI | registry. An EUI is made up of an OUI and OUI-36 | | | 0x02 | IEEE | This makes use of the IEEE company identification | | |||
| | | | or a CID, different registered company | | | | EUI | registry. An EUI is either an EUI-48, EUI-60 or | | |||
| | | | identifiers, and some unique per-device | | | | | EUI-64 and made up of an OUI, OUI-36 or a CID, | | |||
| | | | identifier. EUIs are often the same as or similar | | | | | different registered company identifiers, and some | | |||
| | | | to MAC addresses. (Note that while devices with | | | | | unique per-device identifier. EUIs are often the | | |||
| | | | multiple network interfaces may have multiple MAC | | | | | same as or similar to MAC addresses. This type | | |||
| | | | addresses, there is only one UEID for a device) | | | | | includes MAC-48, an obsolete name for EUI-48. (Note | | |||
| | | | TODO: normative references to IEEE. | | | | | that while devices with multiple network interfaces | | |||
| | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | | | | may have multiple MAC addresses, there is only one | | |||
| | | | 8-digit Type Allocation Code and a 6-digit serial | | | | | UEID for a device) [IEEE.802-2001], [OUI.Guide] | | |||
| | | | number allocated by the manufacturer, which SHALL | | | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | |||
| | | | be encoded as a binary integer over 48 bits. The | | | | | 8-digit Type Allocation Code and a 6-digit serial | | |||
| | | | IMEI value encoded SHALL NOT include Luhn | | | | | number allocated by the manufacturer, which SHALL | | |||
| | | | checksum or SVN information. | | | | | be encoded as a binary integer over 48 bits. The | | |||
| | 0x04 | EUI-48 | This is a 48-bit identifier formed by | | | | | IMEI value encoded SHALL NOT include Luhn checksum | | |||
| | | | concatenating the 24-bit OUI with a 24-bit | | | | | or SVN information. [ThreeGPP.IMEI] | | |||
| | | | identifier assigned by the organisation that | | +------+------+-----------------------------------------------------+ | |||
| | | | purchased the OUI. | | ||||
| | 0x05 | EUI-60 | This is a 60-bit identifier formed by | | ||||
| | | | concatenating the 24-bit OUI with a 36-bit | | ||||
| | | | identifier assigned by the organisation that | | ||||
| | | | purchased the OUI. | | ||||
| | 0x06 | EUI-64 | This is a 64-bit identifier formed by | | ||||
| | | | concatenating the 24-bit OUI with a 40-bit | | ||||
| | | | identifier assigned by the organisation that | | ||||
| | | | purchased the OUI. | | ||||
| +------+--------+---------------------------------------------------+ | ||||
| Table 1: UEID Composition Types | Table 1: UEID Composition Types | |||
| UEID's are not designed for direct use by humans (e.g., printing on | UEID's are not designed for direct use by humans (e.g., printing on | |||
| the case of a device), so no textual representation is defined. | the case of a device), so no textual representation is defined. | |||
| The consumer (the relying party) of a UEID MUST treat a UEID as a | The consumer (the relying party) of a UEID MUST treat a UEID as a | |||
| completely opaque string of bytes and not make any use of its | completely opaque string of bytes and not make any use of its | |||
| internal structure. For example, they should not use the OUI part of | internal structure. For example, they should not use the OUI part of | |||
| a type 0x02 UEID to identify the manufacturer of the device. Instead | a type 0x02 UEID to identify the manufacturer of the device. Instead | |||
| they should use the OUI claim that is defined elsewhere. The reasons | they should use the oemid claim that is defined elsewhere. The | |||
| for this are: | reasons for this are: | |||
| o UEIDs types may vary freely from one manufacturer to the next. | o UEIDs types may vary freely from one manufacturer to the next. | |||
| o New types of UEIDs may be created. For example, a type 0x07 UEID | o New types of UEIDs may be created. For example, a type 0x07 UEID | |||
| may be created based on some other manufacturer registration | may be created based on some other manufacturer registration | |||
| scheme. | scheme. | |||
| o Device manufacturers are allowed to change from one type of UEID | o Device manufacturers are allowed to change from one type of UEID | |||
| to another anytime they want. For example, they may find they can | to another anytime they want. For example, they may find they can | |||
| optimize their manufacturing by switching from type 0x01 to type | optimize their manufacturing by switching from type 0x01 to type | |||
| 0x02 or vice versa. The main requirement on the manufacturer is | 0x02 or vice versa. The main requirement on the manufacturer is | |||
| that UEIDs be universally unique. | that UEIDs be universally unique. | |||
| 3.4.1. CDDL | 3.4.1. ueid CDDL | |||
| ueid_claim = ( | ueid-claim = ( | |||
| ueid: bstr ) | ueid => bstr .size (7..33) | |||
| ) | ||||
| 3.5. Origination Claim (origination) | 3.5. Origination Claim (origination) | |||
| 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 | | |||
| +-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| skipping to change at page 12, line 5 ¶ | skipping to change at page 12, line 42 ¶ | |||
| | Acme-TA | The EATs are generated in a Trusted | | | Acme-TA | The EATs are generated in a Trusted | | |||
| | | Application (TA) authored by "Acme" | | | | Application (TA) authored by "Acme" | | |||
| +-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| 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. CDDL | 3.5.1. origination CDDL | |||
| origination_claim = ( | origination-claim = ( | |||
| origination: string_or_uri ) | 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 | |||
| should pick one and prefer that for all their devices. | should pick one and prefer that for all their devices. | |||
| Commonly, these are expressed in Hexadecimal Representation | Commonly, these are expressed in Hexadecimal Representation | |||
| [IEEE.802-2001] also called the Canonical format. When this claim is | [IEEE.802-2001] also called the Canonical format. When this claim is | |||
| encoded order of bytes in the bstr are the same as the order in the | encoded the order of bytes in the bstr are the same as the order in | |||
| 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. CDDL | 3.6.1. oemid CDDL | |||
| oemid_claim = ( | oemid-claim = ( | |||
| oemid: bstr ) | oemid => bstr | |||
| ) | ||||
| 3.7. The Security Level Claim (security_level) | 3.7. The Security Level Claim (security-level) | |||
| EATs have a claim that roughly characterizes the device / entities | EATs have a claim that roughly characterizes the device / entities | |||
| ability to defend against attacks aimed at capturing the signing key, | ability to defend against attacks aimed at capturing the signing key, | |||
| forging claims and at forging EATs. This is done by roughly defining | forging claims and at forging EATs. This is done by roughly defining | |||
| four security levels as described below. This is similar to the | four security levels as described below. This is similar to the | |||
| security levels defined in the Metadata Service defined by the Fast | security levels defined in the Metadata Service defined by the Fast | |||
| Identity Online (FIDO) Alliance (TODO: reference). | Identity Online (FIDO) Alliance (TODO: reference). | |||
| 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 | |||
| skipping to change at page 13, line 33 ¶ | skipping to change at page 14, line 22 ¶ | |||
| 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. | |||
| 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 (TODO: | |||
| reference) or those based on Common Criteria (TODO: reference). The | reference) or those based on Common Criteria (TODO: reference). 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. CDDL | 3.7.1. security-level CDDL | |||
| security_level_type = ( | security-level-type = &( | |||
| unrestricted: 1, | unrestricted: 1, | |||
| restricted: 2, | restricted: 2, | |||
| secure_restricted: 3, | secure-restricted: 3, | |||
| hardware: 4 | hardware: 4 | |||
| ) | ) | |||
| security_level_claim = ( | security-level-claim = ( | |||
| security_level: security_level_type ) | security-level => security-level-type | |||
| ) | ||||
| 3.8. Secure Boot and Debug Enable State Claims (boot_state) | 3.8. Secure Boot and Debug Enable State Claims (boot-state) | |||
| This claim is an array of five Boolean values indicating the boot and | This claim is an array of five Boolean values indicating the boot and | |||
| debug state of the entity. | debug state of the entity. | |||
| 3.8.1. Secure Boot Enabled | 3.8.1. Secure Boot Enabled | |||
| This indicates whether secure boot is enabled either for an entire | This indicates whether secure boot is enabled either for an entire | |||
| device or an individual submodule. If it appears at the device | device or an individual submodule. If it appears at the device | |||
| level, then this means that secure boot is enabled for all | level, then this means that secure boot is enabled for all | |||
| submodules. Secure boot enablement allows a secure boot loader to | submodules. Secure boot enablement allows a secure boot loader to | |||
| skipping to change at page 14, line 40 ¶ | skipping to change at page 15, line 31 ¶ | |||
| but the end user is not. | but the end user is not. | |||
| 3.8.5. Debug Full Permanent Disable | 3.8.5. Debug Full Permanent Disable | |||
| This claim indicates whether debug capabilities for the entity are | This claim indicates whether debug capabilities for the entity are | |||
| permanently disabled (i.e. value of 'true'). This value can only be | permanently disabled (i.e. value of 'true'). This value can only be | |||
| set to 'true' if no party can enable debug capabilities for the | set to 'true' if no party can enable debug capabilities for the | |||
| entity. Often this is implemented by blowing a fuse on a chip as | entity. Often this is implemented by blowing a fuse on a chip as | |||
| fuses cannot be restored once blown. | fuses cannot be restored once blown. | |||
| 3.8.6. CDDL | 3.8.6. boot-state CDDL | |||
| boot_state_type = [ | boot-state-type = [ | |||
| secure_boot_enabled=> bool, | secure-boot-enabled => bool, | |||
| debug_disabled=> bool, | debug-disabled => bool, | |||
| debug_disabled_since_boot=> bool, | debug-disabled-since-boot => bool, | |||
| debug_permanent_disable=> bool, | debug-permanent-disable => bool, | |||
| debug_full_permanent_disable=> bool | debug-full-permanent-disable => bool | |||
| ] | ] | |||
| boot_state_claim = ( | boot-state-claim = ( | |||
| boot_state: boot_state_type | boot-state => boot-state-type | |||
| ) | ) | |||
| 3.9. The Location Claim (location) | 3.9. The Location Claim (location) | |||
| The location claim is a CBOR-formatted object that describes the | The location claim is a CBOR-formatted object that describes the | |||
| location of the device entity from which the attestation originates. | location of the device entity from which the attestation originates. | |||
| It is comprised of a map of additional sub claims that represent the | It is comprised of a map of additional sub claims that represent the | |||
| actual location coordinates (latitude, longitude and altitude). The | actual location coordinates (latitude, longitude and altitude). The | |||
| location coordinate claims are consistent with the WGS84 coordinate | location coordinate claims are consistent with the WGS84 coordinate | |||
| system [WGS84]. In addition, a sub claim providing the estimated | system [WGS84]. In addition, a sub claim providing the estimated | |||
| accuracy of the location measurement is defined. | accuracy of the location measurement is defined. | |||
| 3.9.1. CDDL | 3.9.1. location CDDL | |||
| location_type = { | location-type = { | |||
| latitude => number, | latitude => number, | |||
| longitude => number, | longitude => number, | |||
| altitude => number, | ? altitude => number, | |||
| accuracy => number, | ? accuracy => number, | |||
| altitude_accuracy => number, | ? altitude-accuracy => number, | |||
| heading => number, | ? heading => number, | |||
| speed => number | ? speed => number | |||
| } | } | |||
| location_claim = ( | location-claim = ( | |||
| location: location_type ) | location => location-type | |||
| ) | ||||
| 3.10. The Age Claim (age) | 3.10. The Age Claim (age) | |||
| The "age" claim contains a value that represents the number of | The "age" claim contains a value that represents the number of | |||
| seconds that have elapsed since the token was created, measurement | seconds that have elapsed since the token was created, measurement | |||
| was made, or location was obtained. Typical attestable values are | was made, or location was obtained. Typical attestable values are | |||
| sent as soon as they are obtained. However, in the case that such a | 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 | value is buffered and sent at a later time and a sufficiently | |||
| accurate time reference is unavailable for creation of a timestamp, | accurate time reference is unavailable for creation of a timestamp, | |||
| then the age claim is provided. | then the age claim is provided. | |||
| age_claim = ( | 3.10.1. age CDDL | |||
| age: uint) | ||||
| age-claim = ( | ||||
| age => uint | ||||
| ) | ||||
| 3.11. The Uptime Claim (uptime) | 3.11. 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. CDDL | 3.11.1. uptime CDDL | |||
| uptime_claim = ( | ||||
| uptime: uint ) | ||||
| 3.12. Nested EATs, the EAT Claim (nested_eat) | ||||
| It is allowed for one EAT to be embedded in another. This is for | ||||
| complex devices that have more than one subsystem capable of | ||||
| generating an EAT. For example, one might be the device-wide EAT | ||||
| that is low to medium security and another from a Secure Element or | ||||
| similar that is high security. | ||||
| The contents of the "nested_eat" claim must be a fully signed, | ||||
| optionally encrypted, EAT token. | ||||
| 3.12.1. CDDL | ||||
| nested_eat_claim = ( | ||||
| nested_eat: nested_eat_type) | ||||
| A nested_eat_type is defined in words rather than CDDL. It is either | uptime-claim = ( | |||
| a full CWT or JWT including the COSE or JOSE signing. | uptime => uint | |||
| ) | ||||
| 3.13. The Submods Claim (submods) | 3.12. The Submods 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. | |||
| Specifically, the "submods" claim is an array. Each item in the | The submods part of a token a single map/object with many entries, | |||
| array is a CBOR map containing all the claims for a particular | one per submodule. There is only one submods map in a token. It is | |||
| submodule. | identified by its specific label. It is a peer to other claims, but | |||
| it is not called a claim because it is a container for a claim set | ||||
| rather than an individual claim. This submods part of a token allows | ||||
| what might be called recursion. It allows claim sets inside of claim | ||||
| sets inside of claims sets... | ||||
| The security level of the submod is assumed to be at the same level | 3.12.1. Two Types of Submodules | |||
| as the main entity unless there is a security level claim in that | ||||
| submodule indicating otherwise. The security level of a submodule | ||||
| can never be higher (more secure) than the security level of the EAT | ||||
| it is a part of. | ||||
| 3.13.1. The submod_name Claim | Each entry in the submod map one of two types: | |||
| Each submodule should have a submod_name claim that is descriptive | o A non-token submodule that is a map or object directly containing | |||
| name. This name should be the CBOR txt type. | claims for the submodule. | |||
| 3.13.2. CDDL | o A nested EAT that is a fully-formed, independently signed EAT | |||
| token | ||||
| In the following a generic_claim_type is any CBOR map entry or JSON | 3.12.1.1. Non-token Submodules | |||
| name/value pair. | ||||
| submod_name_type = ( | Essentially this type of submodule, is just a sub-map or sub-object | |||
| submod_name: tstr ) | 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. | ||||
| submods_type = [ * submod_claims ] | The contents are claims about the submodule of types defined in this | |||
| document or anywhere else claims types are defined. | ||||
| submod_claims = { | 3.12.1.2. Nested EATs | |||
| submod_name_type, | ||||
| * generic_claim_type | ||||
| } | ||||
| submods_claim = ( | This type of submodule is a fully formed EAT as described here. In | |||
| submods: submod_type ) | this case the submodule has key material distinct from the containing | |||
| EAT token that allows it to sign on its own. | ||||
| 4. Data Model | When an EAT is nested in another EAT as a submodule the nested EAT | |||
| MUST use the CBOR CWT tag. This clearly distinguishes it from the | ||||
| non-token submodules. | ||||
| This makes use of the types defined in CDDL Appendix D, Standard | 3.12.2. No Inheritance | |||
| Prelude. | ||||
| 4.1. Common CDDL Types | The subordinate modules do not inherit anything from the containing | |||
| token. The subordinate modules must explicitly include all of their | ||||
| claims. This is the case even for claims like the nonce and age. | ||||
| string_or_uri = #6.32(tstr) / tstr; See JSON section below for JSON encoding of string_or_uri | This rule is in place for simplicity. It avoids complex inheritance | |||
| rules that might vary from one type of claim to another. (TODO: fix | ||||
| the boot claim which does have inheritance as currently described). | ||||
| 4.2. CDDL for CWT-defined Claims | 3.12.3. Security Levels | |||
| This section provides CDDL for the claims defined in CWT. It is non- | The security level of the non-token subordinate modules should always | |||
| normative as [RFC8392] is the authoritative definition of these | be less than or equal to that of the containing modules in the case | |||
| claims. | 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 | ||||
| example of this is a TEE signing claims made by the non-TEE parts | ||||
| (e.g. the high-level OS) of the device. | ||||
| cwt_claim = ( | The opposite may be true for the nested tokens. They usually have | |||
| issuer_claim // | their own more secure key material. An example of this is an | |||
| subject_claim // | embedded secure element. | |||
| audience_claim // | ||||
| expiration_claim // | 3.12.4. Submodule Names | |||
| not_before_claim // | ||||
| issued_at_calim // | The label or name for each submodule in the submods map is a text | |||
| cwt_id_claim | string naming the submodule. No submodules may have the same name. | |||
| 3.12.5. submods CDDL | ||||
| submods-type = { + submodule } | ||||
| submodule = ( | ||||
| submod_name => eat-claims / eat-token | ||||
| ) | ) | |||
| issuer_claim = ( | submod_name = tstr / int | |||
| issuer: string_or_uri ) | ||||
| subject_claim = ( | submods-part = ( | |||
| subject: string_or_uri ) | submods => submod-type | |||
| ) | ||||
| audience_claim = ( | 4. Encoding | |||
| audience: string_or_uri ) | ||||
| expiration_claim = ( | This makes use of the types defined in CDDL Appendix D, Standard | |||
| expiration: time ) | Prelude. | |||
| not_before_claim = ( | 4.1. Common CDDL Types | |||
| not_before: time ) | ||||
| issued_at_calim = ( | string-or-uri = uri / tstr; See JSON section below for JSON encoding of string-or-uri | |||
| issued_at: time ) | ||||
| cwt_id_claim = ( | 4.2. CDDL for CWT-defined Claims | |||
| cwt_id: bstr ) | ||||
| This section provides CDDL for the claims defined in CWT. It is non- | ||||
| normative as [RFC8392] is the authoritative definition of these | ||||
| claims. | ||||
| rfc8392-claim //= ( issuer => text ) | ||||
| 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 | issuer = 1 | |||
| subject = 2 | subject = 2 | |||
| audience = 3 | audience = 3 | |||
| expiration = 4 | expiration = 4 | |||
| not_before = 5 | not-before = 5 | |||
| issued_at = 6 | issued-at = 6 | |||
| cwt_id = 7 | cwt-id = 7 | |||
| cwt-claim = rfc8392-claim | ||||
| 4.3. JSON | 4.3. JSON | |||
| 4.3.1. JSON Labels | 4.3.1. JSON Labels | |||
| ueid = "ueid" | ueid = "ueid" | |||
| origination = "origination" | origination = "origination" | |||
| oemid = "oemid" | oemid = "oemid" | |||
| security_level = "security_level" | security-level = "security-level" | |||
| boot_state = "boot_state" | boot-state = "boot-state" | |||
| location = "location" | location = "location" | |||
| age = "age" | age = "age" | |||
| uptime = "uptime" | uptime = "uptime" | |||
| nested_eat = "nested_eat" | nested-eat = "nested-eat" | |||
| submods = "submods" | submods = "submods" | |||
| latitude = "lat"" | latitude = "lat" | |||
| longitude = "long"" | longitude = "long"" | |||
| altitude = "alt" | altitude = "alt" | |||
| accuracy = "accry" | accuracy = "accry" | |||
| altitude_accuracy = "alt_accry" | altitude-accuracy = "alt-accry" | |||
| heading = "heading" | heading = "heading" | |||
| speed = "speed" | speed = "speed" | |||
| 4.3.2. JSON Interoperability | 4.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 | 4.4. CBOR | |||
| 4.4.1. Labels | 4.4.1. CBOR Labels | |||
| ueid = 8 | ueid = To_be_assigned | |||
| origination = 9 | origination = To_be_assigned | |||
| oemid = 10 | oemid = To_be_assigned | |||
| security_level = 11 | security-level = To_be_assigned | |||
| boot_state = 12 | boot-state = To_be_assigned | |||
| location = 13 | location = To_be_assigned | |||
| age = 14 | age = To_be_assigned | |||
| uptime = 15 | uptime = To_be_assigned | |||
| nested_eat = 16 | submods = To_be_assigned | |||
| submods = 17 | nonce = To_be_assigned | |||
| submod_name = 18 | ||||
| nonce = 19 | ||||
| latitude = 1 | latitude = 1 | |||
| longitude = 2 | longitude = 2 | |||
| altitude = 3 | altitude = 3 | |||
| accuracy = 4 | accuracy = 4 | |||
| altitude_accuracy = 5 | altitude-accuracy = 5 | |||
| heading = 6 | heading = 6 | |||
| speed = 7 | speed = 7 | |||
| 4.4.2. CBOR Interoperability | 4.4.2. CBOR Interoperability | |||
| Variations in the CBOR serializations supported in CBOR encoding and | Variations in the CBOR serializations supported in CBOR encoding and | |||
| decoding are allowed and suggests that CBOR-based protocols specify | decoding are allowed and suggests that CBOR-based protocols specify | |||
| how this variation is handled. This section specifies what formats | how this variation is handled. This section specifies what formats | |||
| MUST be supported in order to achieve interoperability. | MUST be supported in order to achieve interoperability. | |||
| skipping to change at page 21, line 39 ¶ | skipping to change at page 22, line 36 ¶ | |||
| 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 - Use of Other types like bignums, regular expressions | |||
| and such, SHOULD NOT be used. The server MAY support them but is | and such, SHOULD NOT be used. The server MAY support them but is | |||
| not required to so interoperability is not guaranteed. | not required to so interoperability is not guaranteed. | |||
| 4.5. Collected CDDL | 4.5. Collected CDDL | |||
| A generic_claim is any CBOR map entry or JSON name/value pair. | A generic-claim is any CBOR map entry or JSON name/value pair. | |||
| eat_claims = { ; the top-level payload that is signed using COSE or JOSE | eat-claims = { ; the top-level payload that is signed using COSE or JOSE | |||
| * claim | * claim | |||
| } | } | |||
| claim = ( | claim = ( | |||
| ueid_claim // | ueid-claim // | |||
| origination_claim // | origination-claim // | |||
| oemid_claim // | oemid-claim // | |||
| security_level_claim // | security-level-claim // | |||
| boot_state_claim // | boot-state-claim // | |||
| location_claim // | location-claim // | |||
| age_claim // | age-claim // | |||
| uptime_claim // | uptime-claim // | |||
| nested_eat_claim // | submods-part // | |||
| cwt_claim // | cwt-claim // | |||
| generic_claim_type // | generic-claim-type // | |||
| ) | ) | |||
| eat-token ; This is a set of eat-claims signed using COSE | ||||
| TODO: copy the rest of the CDDL here (wait until the CDDL is more | TODO: copy the rest of the CDDL here (wait until the CDDL is more | |||
| settled so as to avoid copying multiple times) | settled so as to avoid copying multiple times) | |||
| 5. IANA Considerations | 5. IANA Considerations | |||
| 5.1. Reuse of CBOR Web Token (CWT) Claims Registry | 5.1. Reuse of CBOR Web Token (CWT) Claims Registry | |||
| Claims defined for EAT are compatible with those of CWT so the CWT | Claims defined for EAT are compatible with those of CWT so the CWT | |||
| Claims Registry is re used. No new IANA registry is created. All | Claims Registry is re used. No new IANA registry is created. All | |||
| skipping to change at page 24, line 7 ¶ | skipping to change at page 25, line 7 ¶ | |||
| 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. Security Considerations | |||
| TODO: Perhaps this can be the same as CWT / COSE, but not sure yet | The security considerations provided in Section 8 of [RFC8392] and | |||
| because it involves so much entity / device security that those do | Section 11 of [RFC7519] apply to EAT in its CWT and JWT form, | |||
| not. | respectively. In addition, implementors should consider the | |||
| following. | ||||
| 7.1. Key Provisioning | ||||
| 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. | ||||
| In some instances, the manufacturer of the entity may create the key | ||||
| material separately and provision the key material in the entity | ||||
| itself. The manfuacturer of any entity that is capable of producing | ||||
| an EAT should take care to ensure that any private key material be | ||||
| suitably protected prior to provisioning the key material in the | ||||
| entity itself. This can require creation of key material in an | ||||
| enclave (see [RFC4949] for definition of "enclave"), secure | ||||
| transmission of the key material from the enclave to the entity using | ||||
| an appropriate protocol, and persistence of the private key material | ||||
| in some form of secure storage to which (preferably) only the entity | ||||
| has access. | ||||
| 7.1.1. Transmission of Key Material | ||||
| Regarding transmission of key material from the enclave to the | ||||
| entity, the key material may pass through one or more intermediaries. | ||||
| Therefore some form of protection ("key wrapping") may be necessary. | ||||
| The transmission itself may be performed electronically, but can also | ||||
| 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. | ||||
| encrypted portable memory). Moreover, the human should transport the | ||||
| key material directly from the secure enclave where it was created to | ||||
| a destination secure enclave where it can be provisioned. | ||||
| 7.2. Transport Security | ||||
| As stated in Section 8 of [RFC8392], "The security of the CWT relies | ||||
| upon on the protections offered by COSE". Similar considerations | ||||
| 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 | ||||
| an entity that may not support the same type of transport security as | ||||
| the consumer of the EAT, intermediaries may be required to bridge | ||||
| communications between the entity and consumer. As a result, it is | ||||
| RECOMMENDED that both the consumer create a nonce, and the entity | ||||
| leverage the nonce along with COSE mechanisms for encryption and/or | ||||
| signing to create the EAT. | ||||
| Similar considerations apply to the use of EAT as a JWT. Although | ||||
| the security of a JWT leverages the JSON Web Encryption (JWE) and | ||||
| JSON Web Signature (JWS) specifications, it is still recommended to | ||||
| make use of the EAT nonce. | ||||
| 7.3. Multiple EAT Consumers | ||||
| In many cases, more than one EAT consumer may be required to fully | ||||
| verify the entity attestation. Examples include individual consumers | ||||
| for nested EATs, or consumers for individual claims with an EAT. | ||||
| When multiple consumers are required for verification of an EAT, it | ||||
| is important to minimize information exposure to each consumer. In | ||||
| addition, the communication between multiple consumers should be | ||||
| secure. | ||||
| For instance, consider the example of an encrypted and signed EAT | ||||
| with multiple claims. A consumer may receive the EAT (denoted as the | ||||
| "receiving consumer"), decrypt its payload, verify its signature, but | ||||
| then pass specific subsets of claims to other consumers for | ||||
| evaluation ("downstream consumers"). Since any COSE encryption will | ||||
| be removed by the receiving consumer, the communication of claim | ||||
| subsets to any downstream consumer should leverage a secure protocol | ||||
| (e.g.one that uses transport-layer security, i.e. TLS), | ||||
| However, assume the EAT of the previous example is hierarchical and | ||||
| each claim subset for a downstream consumer is created in the form of | ||||
| a nested EAT. Then transport security between the receiving and | ||||
| downstream consumers is not strictly required. Nevertheless, | ||||
| downstream consumers of a nested EAT should provide a nonce unique to | ||||
| the EAT they are consuming. | ||||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [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] | |||
| skipping to change at page 25, line 11 ¶ | skipping to change at page 27, line 36 ¶ | |||
| [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>. | |||
| [ThreeGPP.IMEI] | ||||
| 3GPP, "3rd Generation Partnership Project; Technical | ||||
| Specification Group Core Network and Terminals; Numbering, | ||||
| addressing and identification", 2019, | ||||
| <https://portal.3gpp.org/desktopmodules/Specifications/ | ||||
| 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>. | |||
| [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 | 8.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] | ||||
| "Birthday attack", | ||||
| <https://en.wikipedia.org/wiki/Birthday_attack.>. | ||||
| [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>. | |||
| [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>. | |||
| skipping to change at page 26, line 17 ¶ | skipping to change at page 28, line 49 ¶ | |||
| Organizationally Unique Identifier (OUI), and Company ID | Organizationally Unique Identifier (OUI), and Company ID | |||
| (CID)", August 2017, | (CID)", August 2017, | |||
| <https://standards.ieee.org/content/dam/ieee- | <https://standards.ieee.org/content/dam/ieee- | |||
| standards/standards/web/documents/tutorials/eui.pdf>. | standards/standards/web/documents/tutorials/eui.pdf>. | |||
| [OUI.Lookup] | [OUI.Lookup] | |||
| "IEEE Registration Authority Assignments", | "IEEE Registration Authority Assignments", | |||
| <https://regauth.standards.ieee.org/standards-ra-web/pub/ | <https://regauth.standards.ieee.org/standards-ra-web/pub/ | |||
| view.html#registries>. | view.html#registries>. | |||
| [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally | ||||
| Unique IDentifier (UUID) URN Namespace", RFC 4122, | ||||
| DOI 10.17487/RFC4122, July 2005, | ||||
| <https://www.rfc-editor.org/info/rfc4122>. | ||||
| [RFC4949] Shirey, R., "Internet Security Glossary, Version 2", | ||||
| FYI 36, RFC 4949, DOI 10.17487/RFC4949, August 2007, | ||||
| <https://www.rfc-editor.org/info/rfc4949>. | ||||
| [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. | |||
| { | { | |||
| / nonce (cti) / 7:h'948f8860d13a463e8e', | / nonce / 9:h'948f8860d13a463e8e', | |||
| / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | / UEID / 10:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | |||
| / boot_state / 12:{true, true, true, true, false} | / boot-state / 12:{true, true, true, true, false} | |||
| / time stamp (iat) / 6:1526542894, | / time stamp (iat) / 6:1526542894, | |||
| } | } | |||
| A.2. Example with Submodules, Nesting and Security Levels | A.2. Example with Submodules, Nesting and Security Levels | |||
| { | { | |||
| / nonce / 7:h'948f8860d13a463e8e', | / nonce / 9:h'948f8860d13a463e8e', | |||
| / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | / UEID / 10:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | |||
| / boot_state / 12:{true, true, true, true, false} | / boot-state / 12:{true, true, true, true, false} | |||
| / time stamp (iat) / 6:1526542894, | / time stamp (iat) / 6:1526542894, | |||
| / seclevel / 11:3, / secure restricted OS / | / seclevel / 11:3, / secure restricted OS / | |||
| / submods / 17: | / submods / 17: | |||
| [ | { | |||
| / 1st submod, an Android Application / { | / first submod, an Android Application / "Android App Foo" : { | |||
| / submod_name / 18:'Android App "Foo"', | / seclevel / 11:1, / unrestricted / | |||
| / seclevel / 11:1, / unrestricted / | / app data / -70000:'text string' | |||
| / app data / -70000:'text string' | ||||
| }, | }, | |||
| / 2nd submod, A nested EAT from a secure element / { | / 2nd submod, A nested EAT from a secure element / "Secure Element Eat" : | |||
| / submod_name / 18:'Secure Element EAT', | / eat / 61( 18( | |||
| / eat / 16:61( 18( | / an embedded EAT, bytes of which are not shown / | |||
| / an embedded EAT / [ /...COSE_Sign1 bytes with payload.../ ] | ||||
| )) | )) | |||
| / 3rd submod, information about Linux Android / "Linux Android": { | ||||
| / seclevel / 11:1, / unrestricted / | ||||
| / custom - release / -80000:'8.0.0', | ||||
| / custom - version / -80001:'4.9.51+' | ||||
| } | } | |||
| / 3rd submod, information about Linux Android / { | } | |||
| / submod_name/ 18:'Linux Android', | ||||
| / seclevel / 11:1, / unrestricted / | ||||
| / custom - release / -80000:'8.0.0', | ||||
| / custom - version / -80001:'4.9.51+' | ||||
| } | ||||
| ] | ||||
| } | } | |||
| Appendix B. Changes from Previous Drafts | ||||
| Appendix B. UEID Design Rationale | ||||
| B.1. Collision Probability | ||||
| This calculation is to determine the probability of a collision of | ||||
| UEIDs given the total possible entity population and the number of | ||||
| entities in a particular entity management database. | ||||
| Three different sized databases are considered. The number of | ||||
| devices per person roughly models non-personal devices such as | ||||
| traffic lights, devices in stores they shop in, facilities they work | ||||
| in and so on, even considering individual light bulbs. A device may | ||||
| have individually attested subsystems, for example parts of a car or | ||||
| a mobile phone. It is assumed that the largest database will have at | ||||
| most 10% of the world's population of devices. Note that databases | ||||
| that handle more than a trillion records exist today. | ||||
| The trillion-record database size models an easy-to-imagine reality | ||||
| over the next decades. The quadrillion-record database is roughly at | ||||
| the limit of what is imaginable and should probably be accommodated. | ||||
| The 100 quadrillion datadbase is highly speculative perhaps involving | ||||
| nanorobots for every person, livestock animal and domesticated bird. | ||||
| It is included to round out the analysis. | ||||
| Note that the items counted here certainly do not have IP address and | ||||
| are not individually connected to the network. They may be connected | ||||
| to internal buses, via serial links, Bluetooth and so on. This is | ||||
| not the same problem as sizing IP addresses. | ||||
| +---------+------------+--------------+------------+----------------+ | ||||
| | People | Devices / | Subsystems / | Database | Database Size | | ||||
| | | Person | Device | Portion | | | ||||
| +---------+------------+--------------+------------+----------------+ | ||||
| | 10 | 100 | 10 | 10% | trillion | | ||||
| | billion | | | | (10^12) | | ||||
| | 10 | 100,000 | 10 | 10% | quadrillion | | ||||
| | billion | | | | (10^15) | | ||||
| | 100 | 1,000,000 | 10 | 10% | 100 | | ||||
| | billion | | | | quadrillion | | ||||
| | | | | | (10^17) | | ||||
| +---------+------------+--------------+------------+----------------+ | ||||
| This is conceptually similar to the Birthday Problem where m is the | ||||
| number of possible birthdays, always 365, and k is the number of | ||||
| people. It is also conceptually similar to the Birthday Attack where | ||||
| collisions of the output of hash functions are considered. | ||||
| The proper formula for the collision calculation is | ||||
| p = 1 - e^{-k^2/(2n)} | ||||
| p Collision Probability | ||||
| n Total possible population | ||||
| k Actual population | ||||
| However, for the very large values involved here, this formula | ||||
| requires floating point precision higher than commonly available in | ||||
| calculators and SW so this simple approximation is used. See | ||||
| [BirthdayAttack]. | ||||
| p = k^2 / 2n | ||||
| For this calculation: | ||||
| p Collision Probability | ||||
| n Total population based on number of bits in UEID | ||||
| k Population in a database | ||||
| +----------------------+--------------+--------------+--------------+ | ||||
| | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | ||||
| +----------------------+--------------+--------------+--------------+ | ||||
| | trillion (10^12) | 2 * 10^-15 | 8 * 10^-35 | 5 * 10^-55 | | ||||
| | quadrillion (10^15) | 2 * 10^-09 | 8 * 10^-29 | 5 * 10^-49 | | ||||
| | 100 quadrillion | 2 * 10^-05 | 8 * 10^-25 | 5 * 10^-45 | | ||||
| | (10^17) | | | | | ||||
| +----------------------+--------------+--------------+--------------+ | ||||
| Next, to calculate the probability of a collision occurring in one | ||||
| year's operation of a database, it is assumed that the database size | ||||
| is in a steady state and that 10% of the database changes per year. | ||||
| For example, a trillion record database would have 100 billion states | ||||
| per year. Each of those states has the above calculated probability | ||||
| of a collision. | ||||
| This assumption is a worst-case since it assumes that each state of | ||||
| the database is completely independent from the previous state. In | ||||
| reality this is unlikely as state changes will be the addition or | ||||
| deletion of a few records. | ||||
| The following tables gives the time interval until there is a | ||||
| probability of a collision based on there being one tenth the number | ||||
| of states per year as the number of records in the database. | ||||
| t = 1 / ((k / 10) * p) | ||||
| t Time until a collision | ||||
| p Collision probability for UEID size | ||||
| k Database size | ||||
| +---------------------+---------------+--------------+--------------+ | ||||
| | Database Size | 128-bit UEID | 192-bit UEID | 256-bit UEID | | ||||
| +---------------------+---------------+--------------+--------------+ | ||||
| | trillion (10^12) | 60,000 years | 10^24 years | 10^44 years | | ||||
| | quadrillion (10^15) | 8 seconds | 10^14 years | 10^34 years | | ||||
| | 100 quadrillion | 8 | 10^11 years | 10^31 years | | ||||
| | (10^17) | microseconds | | | | ||||
| +---------------------+---------------+--------------+--------------+ | ||||
| Clearly, 128 bits is enough for the near future thus the requirement | ||||
| that UEIDs be a minimum of 128 bits. | ||||
| There is no requirement for 256 bits today as quadrillion-record | ||||
| databases are not expected in the near future and because this time- | ||||
| to-collision calculation is a very worst case. A future update of | ||||
| the standard may increase the requirement to 256 bits, so there is a | ||||
| requirement that implementations be able to receive 256-bit UEIDs. | ||||
| B.2. No Use of UUID | ||||
| A UEID is not a UUID [RFC4122] by conscious choice for the following | ||||
| reasons. | ||||
| UUIDs are limited to 128 bits which may not be enough for some future | ||||
| use cases. | ||||
| Today, cryptographic-quality random numbers are available from common | ||||
| CPUs and hardware. This hardware was introduced between 2010 and | ||||
| 2015. Operating systems and cryptographic libraries give access to | ||||
| this hardware. Consequently, there is little need for | ||||
| implementations to construct such random values from multiple sources | ||||
| on their own. | ||||
| Version 4 UUIDs do allow for use of such cryptographic-quality random | ||||
| numbers, but do so by mapping into the overall UUID structure of time | ||||
| and clock values. This structure is of no value here yet adds | ||||
| complexity. It also slightly reduces the number of actual bits with | ||||
| entropy. | ||||
| UUIDs seem to have been designed for scenarios where the implementor | ||||
| does not have full control over the environment and uniqueness has to | ||||
| be constructed from identifiers at hand. UEID takes the view that | ||||
| hardware, software and/or manufacturing process directly implement | ||||
| UEID in a simple and direct way. It takes the view that | ||||
| cryptographic quality random number generators are readily available | ||||
| as they are implemented in commonly used CPU hardware. | ||||
| Appendix C. Changes from Previous Drafts | ||||
| The following is a list of known changes from the previous drafts. | The following is a list of known changes from the previous drafts. | |||
| This list is non-authoritative. It is meant to help reviewers see | This list is non-authoritative. It is meant to help reviewers see | |||
| the significant differences. | the significant differences. | |||
| B.1. From draft-mandyam-rats-eat-00 | C.1. From draft-rats-eat-01 | |||
| o Added UEID design rationale appendix | ||||
| 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. | not 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 | |||
| B.2. 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 | |||
| o Minor spelling and other fixes | o Minor spelling and other fixes | |||
| o Add the nonce claim, clarify jti claim | o Add the nonce claim, clarify jti claim | |||
| C.4. From draft-ietf-rats-eat-02 | ||||
| o Roll all EUIs back into one UEID type | ||||
| o UEIDs can be one of three lengths, 128, 192 and 256. | ||||
| o Added appendix justifying UEID design and size. | ||||
| o Submods part now includes nested eat tokens so they can be named | ||||
| and there can be more tha one of them | ||||
| o Lots of fixes to the CDDL | ||||
| o Added security considerations | ||||
| 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. 92 change blocks. | ||||
| 294 lines changed or deleted | 573 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/ | ||||