| < draft-ietf-rats-eat-00.txt | draft-ietf-rats-eat-01.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: December 24, 2019 Security Theory LLC | Expires: January 5, 2020 Security Theory LLC | |||
| M. Ballesteros | M. Ballesteros | |||
| J. O'Donoghue | J. O'Donoghue | |||
| Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
| June 22, 2019 | July 04, 2019 | |||
| The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
| draft-ietf-rats-eat-00 | draft-ietf-rats-eat-01 | |||
| Abstract | Abstract | |||
| An attestation format based on concise binary object representation | An Entity Attestation Token (EAT) provides a signed (attested) set of | |||
| (CBOR) is proposed that is suitable for inclusion in a CBOR Web Token | claims that describe state and characteristics of an entity, | |||
| (CWT), know as the Entity Attestation Token (EAT). The associated | typically a device like a phone or an IoT device. These claims are | |||
| data can be used by a relying party to assess the security state of a | used by a relying party to determine how much it wishes to trust the | |||
| remote device or module. | entity. | |||
| An EAT is either a CWT or JWT with some attestation-oriented claims. | ||||
| To a large degree, all this document does is extend CWT and JWT. | ||||
| Contributing | Contributing | |||
| TBD | TBD | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on December 24, 2019. | This Internet-Draft will expire on January 5, 2020. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2019 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 . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Entity Overview . . . . . . . . . . . . . . . . . . . . . 4 | 1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | |||
| 1.2. Use of CBOR and COSE . . . . . . . . . . . . . . . . . . 5 | 1.2. Entity Overview . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 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 . . . . . . . . . . . . . . . . . . . 6 | |||
| 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 3. The Claims . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 3. The Claims Information Model . . . . . . . . . . . . . . . . 8 | |||
| 3.1. Universal Entity ID (UEID) Claim . . . . . . . . . . . . 8 | 3.1. Nonce Claim (cti and jti) . . . . . . . . . . . . . . . . 8 | |||
| 3.2. Origination (origination) Claims . . . . . . . . . . . . 11 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 8 | |||
| 3.3. OEM identification by IEEE OUI . . . . . . . . . . . . . 11 | 3.3. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 8 | |||
| 3.4. Security Level (seclevel) Claim . . . . . . . . . . . . . 12 | 3.4. Origination Claim (origination) . . . . . . . . . . . . . 11 | |||
| 3.5. Nonce (nonce) Claim . . . . . . . . . . . . . . . . . . . 13 | 3.4.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.6. Secure Boot and Debug Enable State Claims . . . . . . . . 13 | 3.5. OEM identification by IEEE OUI (oemid) . . . . . . . . . 12 | |||
| 3.6.1. Secure Boot Enabled (secbootenabled) Claim . . . . . 13 | 3.5.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 3.6.2. Debug Disabled (debugdisabled) Claim . . . . . . . . 13 | 3.6. The Security Level Claim (security_level) . . . . . . . . 12 | |||
| 3.6.3. Debug Disabled Since Boot (debugdisabledsincebboot) | 3.6.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
| Claim . . . . . . . . . . . . . . . . . . . . . . . . 13 | 3.7. Secure Boot and Debug Enable State Claims (boot_state) . 13 | |||
| 3.6.4. Debug Permanent Disable (debugpermanentdisable) Claim 13 | 3.7.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 13 | |||
| 3.6.5. Debug Full Permanent Disable | 3.7.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 13 | |||
| (debugfullpermanentdisable) Claim . . . . . . . . . . 14 | 3.7.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 14 | |||
| 3.7. Location (loc) Claim . . . . . . . . . . . . . . . . . . 14 | 3.7.4. Debug Permanent Disable . . . . . . . . . . . . . . . 14 | |||
| 3.7.1. lat (latitude) claim . . . . . . . . . . . . . . . . 14 | 3.7.5. Debug Full Permanent Disable . . . . . . . . . . . . 14 | |||
| 3.7.2. long (longitude) claim . . . . . . . . . . . . . . . 14 | 3.7.6. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 3.7.3. alt (altitude) claim . . . . . . . . . . . . . . . . 14 | 3.8. The Location Claim (location) . . . . . . . . . . . . . . 14 | |||
| 3.7.4. acc (accuracy) claim . . . . . . . . . . . . . . . . 14 | 3.8.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.7.5. altacc (altitude accuracy) claim . . . . . . . . . . 15 | 3.9. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.7.6. heading claim . . . . . . . . . . . . . . . . . . . . 15 | 3.10. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 15 | |||
| 3.7.7. speed claim . . . . . . . . . . . . . . . . . . . . . 15 | 3.10.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
| 3.8. ts (timestamp) claim . . . . . . . . . . . . . . . . . . 15 | 3.11. Nested EATs, the EAT Claim (nested_eat) . . . . . . . . . 15 | |||
| 3.9. age claim . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.11.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.10. uptime claim . . . . . . . . . . . . . . . . . . . . . . 15 | 3.12. The Submods Claim (submods) . . . . . . . . . . . . . . . 16 | |||
| 3.11. The submods Claim . . . . . . . . . . . . . . . . . . . . 16 | 3.12.1. The submod_name Claim . . . . . . . . . . . . . . . 16 | |||
| 3.11.1. The submod_name Claim . . . . . . . . . . . . . . . 16 | 3.12.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
| 3.11.2. Nested EATs, the eat Claim . . . . . . . . . . . . . 16 | 4. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
| 4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 17 | ||||
| 4. CBOR Interoperability . . . . . . . . . . . . . . . . . . . . 16 | 4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 17 | |||
| 4.1. Integer Encoding (major type 0 and 1) . . . . . . . . . . 17 | 4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.2. String Encoding (major type 2 and 3) . . . . . . . . . . 17 | 4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.3. Map and Array Encoding (major type 4 and 5) . . . . . . . 17 | 4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 19 | |||
| 4.4. Date and Time . . . . . . . . . . . . . . . . . . . . . . 17 | 4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.5. URIs . . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.4.1. Labels . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
| 4.6. Floating Point . . . . . . . . . . . . . . . . . . . . . 17 | 4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 20 | |||
| 4.7. Other types . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 18 | 5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 21 | |||
| 5.1.1. Claims Registered by This Document . . . . . . . . . 18 | 5.1.1. Claims Registered by This Document . . . . . . . . . 22 | |||
| 5.2. EAT CBOR Tag Registration . . . . . . . . . . . . . . . . 18 | 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 22 | |||
| 5.2.1. Tag Registered by This Document . . . . . . . . . . . 18 | 6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 22 | |||
| 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 19 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
| 6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 19 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 23 | |||
| 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 20 | 8.2. Informative References . . . . . . . . . . . . . . . . . 24 | |||
| 8.1. Normative References . . . . . . . . . . . . . . . . . . 20 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 26 | |||
| 8.2. Informative References . . . . . . . . . . . . . . . . . 21 | A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 26 | |||
| Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 22 | A.2. Example with Submodules, Nesting and Security Levels . . 26 | |||
| A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 22 | Appendix B. Changes from Previous Drafts . . . . . . . . . . . . 27 | |||
| A.2. Example with Submodules, Nesting and Security Levels . . 22 | B.1. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 27 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 23 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
| 1. Introduction | 1. Introduction | |||
| Remote device attestation is fundamental service that allows a remote | Remote device attestation is a fundamental service that allows a | |||
| device such as a mobile phone, an Internet-of-Things (IoT) device, or | remote device such as a mobile phone, an Internet-of-Things (IoT) | |||
| other endpoint to prove itself to a relying party, a server or a | device, or other endpoint to prove itself to a relying party, a | |||
| service. This allows the relying party to know some characteristics | server or a service. This allows the relying party to know some | |||
| about the device and decide whether it trusts the device. | characteristics about the device and decide whether it trusts the | |||
| device. | ||||
| Remote attestation is a fundamental service that can underlie other | Remote attestation is a fundamental service that can underlie other | |||
| protocols and services that need to know about the trustworthiness of | protocols and services that need to know about the trustworthiness of | |||
| the device before proceeding. One good example is biometric | the device before proceeding. One good example is biometric | |||
| authentication where the biometric matching is done on the device. | authentication where the biometric matching is done on the device. | |||
| The relying party needs to know that the device is one that is known | The relying party needs to know that the device is one that is known | |||
| to do biometric matching correctly. Another example is content | to do biometric matching correctly. Another example is content | |||
| protection where the relying party wants to know the device will | protection where the relying party wants to know the device will | |||
| protect the data. This generalizes on to corporate enterprises that | protect the data. This generalizes on to corporate enterprises that | |||
| might want to know that a device is trustworthy before allowing | might want to know that a device is trustworthy before allowing | |||
| skipping to change at page 4, line 4 ¶ | skipping to change at page 4, line 11 ¶ | |||
| to do biometric matching correctly. Another example is content | to do biometric matching correctly. Another example is content | |||
| protection where the relying party wants to know the device will | protection where the relying party wants to know the device will | |||
| protect the data. This generalizes on to corporate enterprises that | protect the data. This generalizes on to corporate enterprises that | |||
| might want to know that a device is trustworthy before allowing | might want to know that a device is trustworthy before allowing | |||
| corporate data to be accessed by it. | corporate data to be accessed by it. | |||
| The notion of attestation here is large and may include, but is not | The notion of attestation here is large and may include, but is not | |||
| limited to the following: | limited to the following: | |||
| o Proof of the make and model of the device hardware (HW) | 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 | |||
| The required data format should be general purpose and extensible so | 1.1. CDDL, CWT and JWT | |||
| that it can work across many use cases. This is why CBOR (see | ||||
| [RFC7049]) was chosen as the format -- it already supports a rich set | ||||
| of data types, and is both expressive and extensible. It translates | ||||
| well to JSON for good interoperation with web technology. It is | ||||
| compact and can work on very small IoT device. The format proposed | ||||
| here is small enough that a limited version can be implemented in | ||||
| pure hardware gates with no software at all. Moreover, the | ||||
| attestation data is defined in the form of claims that is the same as | ||||
| CBOR Web Token (CWT, see [RFC8392]). This is the motivation for | ||||
| defining the Entity Attestation Token, i.e. EAT. | ||||
| 1.1. Entity Overview | An EAT token is either a CWT as defined in [RFC8392] or a JWT as | |||
| defined in [RFC7519]. This specification defines additional claims | ||||
| for entity attestation. | ||||
| This specification uses CDDL, [RFC8610], as the primary formalism to | ||||
| define each claim. The implementor then interprets the CDDL to come | ||||
| to either the CBOR [RFC7049] or JSON [ECMAScript] representation. In | ||||
| 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 | ||||
| insufficient. (Note that this is not to define a general means to | ||||
| translate between CBOR and JSON, but only to define enough such that | ||||
| the claims defined in this document can be rendered unambiguously in | ||||
| JSON). | ||||
| 1.2. 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, | |||
| it is common for a mobile phone to have an "apps" environment that | it is common for a mobile phone to have an "apps" environment that | |||
| 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.2. Use of CBOR and COSE | ||||
| Fundamentally this attestation format is a verifiable data format. | ||||
| It is a collection of data items that can be signed by an attestation | ||||
| key, hashed, and/or encrypted. As per Section 7 of [RFC8392], the | ||||
| verification method is in the CWT using the CBOR Object Signing and | ||||
| Encryption (COSE) methodology (see [RFC8152]). | ||||
| In addition, the reported attestation data could be determined within | ||||
| the secure operating environment or written to it from an external | ||||
| and presumably less trusted entity on the device. In either case, | ||||
| the source of the reported data must be identifiable by the relying | ||||
| party. | ||||
| This attestation format is a single relatively simple signed message. | ||||
| It is designed to be incorporated into many other protocols and many | ||||
| other transports. It is also designed such that other SW and apps | ||||
| can add their own data to the message such that it is also attested. | ||||
| 1.3. EAT Operating Models | 1.3. EAT Operating Models | |||
| 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 | |||
| skipping to change at page 6, line 21 ¶ | skipping to change at page 6, line 11 ¶ | |||
| o The EAT is transmitted to the relying party. The relying party | o The EAT is transmitted to the relying party. The relying party | |||
| transmits the EAT to a verification service offered by the | transmits the EAT to a verification service offered by the | |||
| manufacturer. The server returns the validated claims. | manufacturer. The server returns the validated claims. | |||
| o The EAT is transmitted directly to a verification service, perhaps | o The EAT is transmitted directly to a verification service, perhaps | |||
| operated by the manufacturer or perhaps by another party. It | operated by the manufacturer or perhaps by another party. It | |||
| verifies the EAT and makes the validated claims available to the | verifies the EAT and makes the validated claims available to the | |||
| relying party. It may even modify the claims in some way and re- | relying party. It may even modify the claims in some way and re- | |||
| sign the EAT (with a different signing key). | sign the EAT (with a different signing key). | |||
| This standard supports all these operating models and does not prefer | All these operating models are supported and there is no preference | |||
| one over the other. It is important to support this variety of | of one over the other. It is important to support this variety of | |||
| operating models to generally facilitate deployment and to allow for | operating models to generally facilitate deployment and to allow for | |||
| some special scenarios. One special scenario has a validation | some special scenarios. One special scenario has a validation | |||
| service that is monetized, most likely by the manufacturer. In | service that is monetized, most likely by the manufacturer. In | |||
| 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.4. What is Not Standardized | |||
| The following is not standardized for EAT, just the same they are not | ||||
| standardized for CWT or JWT. | ||||
| 1.4.1. Transmission Protocol | 1.4.1. Transmission Protocol | |||
| EATs may be transmitted by any protocol. For example, they might be | EATs may be transmitted by any protocol the same as CWTs and JWTs. | |||
| added in extension fields of other protocols, bundled into an HTTP | For example, they might be added in extension fields of other | |||
| header, or just transmitted as files. This flexibility is | protocols, bundled into an HTTP header, or just transmitted as files. | |||
| intentional to allow broader adoption. This flexibility is possible | This flexibility is intentional to allow broader adoption. This | |||
| because EAT's are self-secured with signing (and possibly | flexibility is possible because EAT's are self-secured with signing | |||
| additionally with encryption and anti-replay). The transmission | (and possibly additionally with encryption and anti-replay). The | |||
| protocol is not required to fulfill any additional security | transmission protocol is not required to fulfill any additional | |||
| 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 allows | should be protected against malicious access. The use of COSE and | |||
| for signing and encryption of the EAT. Therefore even if the EAT is | JOSE allows for signing and encryption of the EAT. Therefore, even | |||
| conveyed through intermediaries between the device and Relying Party, | if the EAT is conveyed through intermediaries between the device and | |||
| such intermediaries cannot easily modify the EAT payload or alter the | Relying Party, such intermediaries cannot easily modify the EAT | |||
| signature. | payload or alter the signature. | |||
| 1.4.2. Signing Scheme | 1.4.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. | |||
| skipping to change at page 7, line 27 ¶ | skipping to change at page 7, line 18 ¶ | |||
| There are three main implementation issues driving this. First, | There are three main implementation issues driving this. First, | |||
| secure non-volatile storage space in the entity for the attestation | secure non-volatile storage space in the entity for the attestation | |||
| key material may be highly limited, perhaps to only a few hundred | key material may be highly limited, perhaps to only a few hundred | |||
| bits, on some small IoT chips. Second, the factory cost of | bits, on some small IoT chips. Second, the factory cost of | |||
| provisioning key material in each chip or device may be high, with | provisioning key material in each chip or device may be high, with | |||
| even millisecond delays adding to the cost of a chip. Third, | even millisecond delays adding to the cost of a chip. Third, | |||
| privacy-preserving signing schemes like ECDAA (Elliptic Curve Direct | privacy-preserving signing schemes like ECDAA (Elliptic Curve Direct | |||
| Anonymous Attestation) are complex and not suitable for all use | Anonymous Attestation) are complex and not suitable for all use | |||
| cases. | cases. | |||
| Eventually some form of standardization of the signing scheme may be | Over time to faciliate interoperability, some signing schemes may be | |||
| required. This might come in the form of another standard that adds | defined in EAT profiles or other documents either in the IETF or | |||
| to this document, or when there is clear convergence on a small | outside. | |||
| number of signing schemes this standard can be updated. | ||||
| 2. Terminology | 2. Terminology | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This document reuses terminology from JWT [RFC7519], COSE [RFC8152], | This document reuses terminology from JWT [RFC7519], COSE [RFC8152], | |||
| and CWT [RFC8392]. | and CWT [RFC8392]. | |||
| StringOrURI. The "StringOrURI" term in this specification has the | ||||
| same meaning and processing rules as the JWT "StringOrURI" term | ||||
| defined in Section 2 of [RFC7519], except that it is represented | ||||
| as a CBOR text string instead of a JSON text string. | ||||
| NumericDate. The "NumericDate" term in this specification has the | ||||
| same meaning and processing rules as the JWT "NumericDate" term | ||||
| defined in Section 2 of [RFC7519], except that it is represented | ||||
| as a CBOR numeric date (from Section 2.4.1 of [RFC7049]) instead | ||||
| of a JSON number. The encoding is modified so that the leading | ||||
| tag 1 (epoch-based date/time) MUST be omitted. | ||||
| 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 used to identify a claim. | Claim Key. The CBOR map key or JSON name used to identify a claim. | |||
| Claim Value. The CBOR map value representing the value of the claim. | ||||
| CWT Claims Set. The CBOR map that contains the claims conveyed by | Claim Value. The CBOR map or JSON object value representing the | |||
| the CWT. | value of the claim. | |||
| FloatOrNumber. The "FloatOrNumber" term in this specification is the | CWT Claims Set. The CBOR map or JSON object that contains the claims | |||
| type of a claim that is either a CBOR positive integer, negative | conveyed by the CWT or JWT. | |||
| integer or floating point number. | ||||
| 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 | 3. The Claims Information Model | |||
| 3.1. Universal Entity ID (UEID) Claim | This section describes new claims defined for attestation. It also | |||
| mentions several claims defined by CWT and JWT are particularly | ||||
| important for 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 | ||||
| [IANA.JWT.Claims] claims registries. * All claims are optional * No | ||||
| claims are mandatory * All claims that are not understood by | ||||
| implementations MUST be ignored | ||||
| CDDL along with text descriptions is used to define the information | ||||
| model. Each claim is defined as a CDDL group (the group is a general | ||||
| aggregation and type definition feature of CDDL). In the data model, | ||||
| described in the Section 4, the CDDL groups turn into CBOR map | ||||
| entries and JSON name/value pairs. | ||||
| 3.1. Nonce Claim (cti and jti) | ||||
| All EATs should have a nonce to prevent replay attacks. The nonce is | ||||
| generated by the relying party, sent to the entity by any protocol, | ||||
| and included in the token. Note that intrinsically by the nature of | ||||
| a nonce no security is needed for its transport. | ||||
| CWT defines the "cti" claim. JWT defines the "jti" claim. These | ||||
| carry the nonce in an EAT. | ||||
| TODO: what about the JWT claim "nonce"? | ||||
| 3.2. Timestamp claim (iat) | ||||
| The "iat" claim defined in CWT and JWT is used to indicate the date- | ||||
| of-creation of the token. | ||||
| 3.3. 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. | |||
| It is identified by Claim Key X (X is TBD). | ||||
| 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 | different countries should have the same UEID (if they are not global | |||
| global and universal in this way then relying parties receiving them | and universal in this way, then relying parties receiving them will | |||
| will have to track other characteristics of the device to keep | have to track other characteristics of the device to keep devices | |||
| devices distinct between manufacturers). | distinct between manufacturers). | |||
| 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 binary byte-strings (resulting in a smaller size than text | type byte and 256 bits). The recommended minimum is 17 bytes (1 type | |||
| strings). When handled in text-based protocols, they should be | and 128 bits) because fewer bytes endanger the universal uniqueness. | |||
| base-64 encoded. | ||||
| UEID's are variable length with a maximum size of 33 bytes (1 type | ||||
| byte and 256 bits). A receivers of a token with UEIDs may reject the | ||||
| token if a UEID is larger than 33 bytes. | ||||
| 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. | ||||
| A UEID is a byte string. From the consumer's view (the rely party) | ||||
| it is opaque with no bytes having any special meaning. | ||||
| 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]. | ||||
| +------+--------+---------------------------------------------------+ | +------+--------+---------------------------------------------------+ | |||
| | Type | Type | Specification | | | Type | Type | Specification | | |||
| | Byte | Name | | | | Byte | Name | | | |||
| +------+--------+---------------------------------------------------+ | +------+--------+---------------------------------------------------+ | |||
| | 0x01 | GUID | This is a 128 to 256 bit random number generated | | | 0x01 | RAND | This is a 128- to 256-bit random number generated | | |||
| | | | once and stored in the device. The GUID may be | | | | | once and stored in the device. This may be | | |||
| | | | constructed from various identifiers on the | | | | | constructed by concatenating enough identifiers | | |||
| | | | device using a hash function or it may be just | | | | | to be universally unique and then feeding the | | |||
| | | | the raw random number. | | | | | concatenation through a cryptographic hash | | |||
| | | | function. It may also be a cryptographic quality | | ||||
| | | | random number generate once at the beginning of | | ||||
| | | | the life of the device and stored. | | ||||
| | 0x02 | IEEE | This makes use of the IEEE company identification | | | 0x02 | IEEE | This makes use of the IEEE company identification | | |||
| | | EUI | registry. An EUI is made up of an OUI and OUI-36 | | | | EUI | registry. An EUI is made up of an OUI and OUI-36 | | |||
| | | | or a CID, different registered company | | | | | or a CID, different registered company | | |||
| | | | identifiers, and some unique per-device | | | | | identifiers, and some unique per-device | | |||
| | | | identifier. EUIs are often the same as or similar | | | | | identifier. EUIs are often the same as or similar | | |||
| | | | to MAC addresses. (Note that while devices with | | | | | to MAC addresses. (Note that while devices with | | |||
| | | | multiple network interfaces may have multiple MAC | | | | | multiple network interfaces may have multiple MAC | | |||
| | | | addresses, there is only one UEID for a device) | | | | | addresses, there is only one UEID for a device) | | |||
| | | | TODO: normative references to IEEE. | | | | | TODO: normative references to IEEE. | | |||
| | 0x03 | IMEI | This is a 14-digit identifier consisting of an 8 | | | 0x03 | IMEI | This is a 14-digit identifier consisting of an | | |||
| | | | digit Type Allocation Code and a six 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 a binary integer over 48 bits. The | | |||
| | | | IMEI value encoded SHALL NOT include Luhn | | | | | IMEI value encoded SHALL NOT include Luhn | | |||
| | | | checksum or SVN information. | | | | | checksum or SVN information. | | |||
| | 0x04 | EUI-48 | This is a 48-bit identifier formed by | | | 0x04 | EUI-48 | This is a 48-bit identifier formed by | | |||
| | | | concatenating the 24-bit OUI with a 24-bit | | | | | concatenating the 24-bit OUI with a 24-bit | | |||
| | | | identifier assigned by the organisation that | | | | | identifier assigned by the organisation that | | |||
| | | | purchased the OUI. | | | | | purchased the OUI. | | |||
| | 0x05 | EUI-60 | This is a 60-bit identifier formed by | | | 0x05 | EUI-60 | This is a 60-bit identifier formed by | | |||
| | | | concatenating the 24-bit OUI with a 36-bit | | | | | concatenating the 24-bit OUI with a 36-bit | | |||
| | | | identifier assigned by the organisation that | | | | | identifier assigned by the organisation that | | |||
| | | | purchased the OUI. | | | | | purchased the OUI. | | |||
| | 0x06 | EUI-64 | This is a 64-bit identifier formed by | | | 0x06 | EUI-64 | This is a 64-bit identifier formed by | | |||
| | | | concatenating the 24-bit OUI with a 40-bit | | | | | concatenating the 24-bit OUI with a 40-bit | | |||
| | | | identifier assigned by the organisation that | | | | | identifier assigned by the organisation that | | |||
| | | | purchased the OUI. | | | | | purchased the OUI. | | |||
| +------+--------+---------------------------------------------------+ | +------+--------+---------------------------------------------------+ | |||
| Table 1: UEID Composition Types | Table 1: UEID Composition Types | |||
| The consumer (the Relying Party) of a UEID should treat a UEID as a | 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 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 OUI claim that is defined elsewhere. The reasons | |||
| for this are: | 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 0x04 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.2. Origination (origination) Claims | ### CDDL | |||
| ueid_claim = ( | ||||
| ueid: bstr ) | ||||
| 3.4. 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 | | |||
| +-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| | 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 | | |||
| | | by "Acme" | | | | by "Acme" | | |||
| | Acme-Linux-Kernel | The EATs are generated in a Linux kernel | | | Acme-Linux-Kernel | The EATs are generated in a Linux kernel | | |||
| | | configured and shipped by "Acme" | | | | configured and shipped by "Acme" | | |||
| | 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" | | |||
| +-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| The claim is represented by Claim Key X+1. It is type StringOrURI. | ||||
| 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.3. OEM identification by IEEE OUI | 3.4.1. CDDL | |||
| origination_claim = ( | ||||
| origination: string_or_uri ) | ||||
| 3.5. OEM identification by IEEE OUI (oemid) | ||||
| This claim identifies a device OEM by the IEEE OUI. Reference TBD. | This claim identifies a device OEM by the IEEE OUI. Reference TBD. | |||
| It is a byte string representing the OUI in binary form in network | It is a byte string representing the OUI in binary form in network | |||
| byte order (TODO: confirm details). | byte order (TODO: confirm details). | |||
| Companies that have more than one IEEE OUI registered with IEEE | Companies that have more than one IEEE OUI registered with IEEE | |||
| should pick one and prefer that for all their devices. | should pick one and prefer that for all their devices. | |||
| Note that the OUI is in common use as a part of MAC Address. This | Note that the OUI is in common use as a part of MAC Address. This | |||
| claim is only the first bits of the MAC address that identify the | claim is only the first bits of the MAC address that identify the | |||
| manufacturer. The IEEE maintains a registry for these in which many | manufacturer. The IEEE maintains a registry for these in which many | |||
| companies participate. This claim is represented by Claim Key TBD. | companies participate. | |||
| 3.4. Security Level (seclevel) Claim | 3.5.1. CDDL | |||
| oemid_claim = ( | ||||
| oemid: bstr ) | ||||
| 3.6. 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 definied 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 | |||
| reside and the claims originate. | reside and the claims originate. | |||
| This claim is identified by Claim Key X+2. The value is an integer | ||||
| between 1 and 4 as defined below. | ||||
| 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 WiFi 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 critera | 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 (TODO: | |||
| reference). Examples include TEE's and schemes using | reference). 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. | |||
| 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.5. Nonce (nonce) Claim | 3.6.1. CDDL | |||
| The "nonce" (Nonce) claim represents a random value that can be used | security_level_type = ( | |||
| to avoid replay attacks. This would be ideally generated by the CWT | unrestricted: 1, | |||
| consumer. This value is intended to be a CWT companion claim to the | restricted: 2, | |||
| existing JWT claim **_IANAJWT_ (TODO: fix this reference). The nonce | secure_restricted: 3, | |||
| claim is identified by Claim Key X+3. | hardware: 4 | |||
| ) | ||||
| 3.6. Secure Boot and Debug Enable State Claims | security_level_claim = ( | |||
| security_level: security_level_type ) | ||||
| 3.6.1. Secure Boot Enabled (secbootenabled) Claim | 3.7. Secure Boot and Debug Enable State Claims (boot_state) | |||
| The "secbootenabled" (Secure Boot Enabled) claim represents a boolean | This claim is an array of five Boolean values indicating the boot and | |||
| value that indicates whether secure boot is enabled either for an | debug state of the entity. | |||
| entire device or an individual submodule. If it appears at the | ||||
| device level, then this means that secure boot is enabled for all | 3.7.1. Secure Boot Enabled | |||
| This indicates whether secure boot is enabled either for an entire | ||||
| 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 | submodules. Secure boot enablement allows a secure boot loader to | |||
| authenticate software running either in a device or a submodule prior | authenticate software running either in a device or a submodule prior | |||
| allowing execution. This claim is identified by Claim Key X+4. | allowing execution. | |||
| 3.6.2. Debug Disabled (debugdisabled) Claim | 3.7.2. Debug Disabled | |||
| The "debugdisabled" (Debug Disabled) claim represents a boolean value | This indicates whether debug capabilities are disabled for an entity | |||
| that indicates whether debug capabilities are disabled for an entity | ||||
| (i.e. value of 'true'). Debug disablement is considered a | (i.e. value of 'true'). Debug disablement is considered a | |||
| prerequisite before an entity is considered operational. This claim | prerequisite before an entity is considered operational. | |||
| is identified by Claim Key X+5. | ||||
| 3.6.3. Debug Disabled Since Boot (debugdisabledsincebboot) Claim | ||||
| The "debugdisabledsinceboot" (Debug Disabled Since Boot) claim | 3.7.3. Debug Disabled Since Boot | |||
| represents a boolean value that indicates whether debug capabilities | ||||
| for the entity were not disabled in any way since boot (i.e. value of | ||||
| 'true'). This claim is identified by Claim Key X+6. | ||||
| 3.6.4. Debug Permanent Disable (debugpermanentdisable) Claim | This claim indicates whether debug capabilities for the entity were | |||
| not disabled in any way since boot (i.e. value of 'true'). | ||||
| The "debugpermanentdisable" (Debug Permanent Disable) claim | 3.7.4. Debug Permanent Disable | |||
| represents a boolean value that indicates whether debug capabilities | ||||
| for the entity are permanently disabled (i.e. value of 'true'). This | ||||
| value can be set to 'true' also if only the manufacturer is allowed | ||||
| to enabled debug, but the end user is not. This claim is identified | ||||
| by Claim Key X+7. | ||||
| 3.6.5. Debug Full Permanent Disable (debugfullpermanentdisable) Claim | This claim indicates whether debug capabilities for the entity are | |||
| permanently disabled (i.e. value of 'true'). This value can be set | ||||
| to 'true' also if only the manufacturer is allowed to enabled debug, | ||||
| but the end user is not. | ||||
| The "debugfullpermanentdisable" (Debug Full Permanent Disable) claim | 3.7.5. Debug Full Permanent Disable | |||
| represents a boolean value that indicates whether debug capabilities | ||||
| for the entity are permanently disabled (i.e. value of 'true'). This | ||||
| value can only be 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 fuses cannot be restored once blown. This claim is | ||||
| identified by Claim Key X+8. | ||||
| 3.7. Location (loc) Claim | This claim indicates whether debug capabilities for the entity are | |||
| permanently disabled (i.e. value of 'true'). This value can only be | ||||
| 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 | ||||
| fuses cannot be restored once blown. | ||||
| The "loc" (location) claim is a CBOR-formatted object that describes | 3.7.6. CDDL | |||
| the location of the device entity from which the attestation | ||||
| originates. It is identified by Claim Key X+10. It is comprised of | ||||
| an array of additional subclaims 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 subclaim providing the estimated accuracy of | ||||
| the location measurement is defined. | ||||
| 3.7.1. lat (latitude) claim | boot_state_type = [ | |||
| secure_boot_enabled=> bool, | ||||
| debug_disabled=> bool, | ||||
| debug_disabled_since_boot=> bool, | ||||
| debug_permanent_disable=> bool, | ||||
| debug_full_permanent_disable=> bool | ||||
| ] | ||||
| The "lat" (latitude) claim contains the value of the device location | boot_state_claim = ( | |||
| corresponding to its latitude coordinate. It is of data type | boot_state: boot_state_type | |||
| FloatOrNumber and identified by Claim Key X+11. | ) | |||
| 3.7.2. long (longitude) claim | 3.8. The Location Claim (location) | |||
| The "long" (longitude) claim contains the value of the device | The location claim is a CBOR-formatted object that describes the | |||
| location corresponding to its longitude coordinate. It is of data | location of the device entity from which the attestation originates. | |||
| type FloatOrNumber and identified by Claim Key X+12. | 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.7.3. alt (altitude) claim | 3.8.1. CDDL | |||
| The "alt" (altitude) claim contains the value of the device location | location_type = { | |||
| corresponding to its altitude coordinate (if available). It is of | latitude => number, | |||
| data type FloatOrNumber and identified by Claim Key X+13. | longitude => number, | |||
| altitude => number, | ||||
| accuracy => number, | ||||
| altitude_accuracy => number, | ||||
| heading_claim => number, | ||||
| speed_claim => number | ||||
| } | ||||
| 3.7.4. acc (accuracy) claim | location_claim = ( | |||
| location: location_type ) | ||||
| The "acc" (accuracy) claim contains a value that describes the | 3.9. The Age Claim (age) | |||
| location accuracy. It is non-negative and expressed in meters. It | ||||
| is of data type FloatOrNumber and identified by Claim Key X+14. | ||||
| 3.7.5. altacc (altitude accuracy) claim | The "age" claim contains a value that represents the number of | |||
| seconds that have elapsed since the token was created, measurement | ||||
| 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. | ||||
| The "altacc" (altitude accuracy) claim contains a value that | age_claim = ( | |||
| describes the altitude accuracy. It is non-negative and expressed in | age: uint) | |||
| meters. It is of data type FloatOrNumber and identified by Claim Key | ||||
| X+15. | ||||
| 3.7.6. heading claim | 3.10. The Uptime Claim (uptime) | |||
| The "heading" claim contains a value that describes direction of | The "uptime" claim contains a value that represents the number of | |||
| motion for the entity. Its value is specified in degrees, between 0 | seconds that have elapsed since the entity or submod was last booted. | |||
| and 360. It is of data type FloatOrNumber and identified by Claim | ||||
| Key X+16. | ||||
| 3.7.7. speed claim | 3.10.1. CDDL | |||
| The "speed" claim contains a value that describes the velocity of the | uptime_claim = ( | |||
| entity in the horizontal direction. Its value is specified in | uptime: uint ) | |||
| meters/second and must be non-negative. It is of data type | ||||
| FloatOrNumber and identified by Claim Key X+17. | ||||
| 3.8. ts (timestamp) claim | 3.11. Nested EATs, the EAT Claim (nested_eat) | |||
| The "ts" (timestamp) claim contains a timestamp derived using the | It is allowed for one EAT to be embedded in another. This is for | |||
| same time reference as is used to generate an "iat" claim (see | complex devices that have more than one subsystem capable of | |||
| Section 3.1.6 of [RFC8392]). It is of the same type as "iat" | generating an EAT. Typically, one will be the device-wide EAT that | |||
| (integer or floating-point), and is identified by Claim Key X+18. It | is low to medium security and another from a Secure Element or | |||
| is meant to designate the time at which a measurement was taken, when | similar that is high security. | |||
| a location was obtained, or when a token was actually transmitted. | ||||
| The timestamp would be included as a subclaim under the "submod" or | ||||
| "loc" claims (in addition to the existing respective subclaims), or | ||||
| at the device level. | ||||
| 3.9. age claim | The contents of the "eat" claim must be a fully signed, optionally | |||
| encrypted, EAT token. | ||||
| The "age" claim contains a value that represents the number of | 3.11.1. CDDL | |||
| seconds that have elapsed since the token was created, measurement | ||||
| 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. It is identified by Claim Key X+19. | ||||
| 3.10. uptime claim | nested_eat_claim = ( | |||
| nested_eat: nested_eat_type) | ||||
| The "uptime" claim contains a value that represents the number of | A nested_eat_type is defined in words rather than CDDL. It is either | |||
| seconds that have elapsed since the entity or submod was last booted. | a full CWT or JWT including the COSE or JOSE signing. | |||
| It is identified by Claim Key X+20. | ||||
| 3.11. The submods Claim | 3.12. The Submods Claim (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., WiFi and cellular). It may have | submodules for communications (e.g., Wi-Fi and cellular). It may | |||
| sub systems for low-power audio and video playback. It may have one | have subsystems for low-power audio and video playback. It may have | |||
| or more security-oriented subsystems like a TEE or a Secure Element. | one or more security-oriented subsystems like a TEE or a Secure | |||
| Element. | ||||
| The claims for each these can be grouped together in a submodule. | The claims for each these can be grouped together in a submodule. | |||
| Specifically, the "submods" claim is an array. Each item in the | Specifically, the "submods" claim is an array. Each item in the | |||
| array is a CBOR map containing all the claims for a particular | array is a CBOR map containing all the claims for a particular | |||
| submodule. It is identified by Claim Key X+22. | submodule. | |||
| The security level of the submod is assumed to be at the same level | The security level of the submod is assumed to be at the same level | |||
| as the main entity unless there is a security level claim in that | as the main entity unless there is a security level claim in that | |||
| submodule indicating otherwise. The security level of a submodule | submodule indicating otherwise. The security level of a submodule | |||
| can never be higher (more secure) than the security level of the EAT | can never be higher (more secure) than the security level of the EAT | |||
| it is a part of. | it is a part of. | |||
| 3.11.1. The submod_name Claim | 3.12.1. The submod_name Claim | |||
| Each submodule should have a submod_name claim that is descriptive | Each submodule should have a submod_name claim that is descriptive | |||
| name. This name should be the CBOR txt type. | name. This name should be the CBOR txt type. | |||
| 3.11.2. Nested EATs, the eat Claim | 3.12.2. CDDL | |||
| It is allowed for one EAT to be embedded in another. This is for | In the following a generic_claim_type is any CBOR map entry or JSON | |||
| complex devices that have more than one subsystem capable of | name/value pair. | |||
| generating an EAT. Typically one will 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 "eat" claim must be a fully signed, optionally | submod_name_type = ( | |||
| encrypted, EAT token. It is identified by Claim Key X+23. | submod_name: tstr ) | |||
| 4. CBOR Interoperability | submods_type = [ * submod_claims ] | |||
| EAT is a one-way protocol. It only defines a single message that | submod_claims = { | |||
| goes from the entity to the server. The entity implementation will | submod_name_type, | |||
| often be in a contained environment with little RAM and the server | * generic_claim_type | |||
| will usually not be. The following requirements for interoperability | } | |||
| take that into account. The entity can generally use whatever | ||||
| encoding it wants. The server is required to support just about | ||||
| every encoding. | ||||
| Canonical CBOR encoding is explicitly NOT required as it would place | submods_claim = ( | |||
| an unnecessary burden on the entity implementation. | submods: submod_type ) | |||
| 4.1. Integer Encoding (major type 0 and 1) | 4. Data Model | |||
| The entity may use any integer encoding allowed by CBOR. The server | This makes use of the types defined in CDDL Appendix D, Standard | |||
| MUST accept all integer encodings allowed by CBOR. | Prelude. | |||
| 4.2. String Encoding (major type 2 and 3) | 4.1. Common CDDL Types | |||
| The entity can use any string encoding allowed by CBOR including | string_or_uri = #6.32(tstr) / tstr; See JSON section below for JSON encoding of string_or_uri | |||
| indefinite lengths. It may also encode the lengths of strings in any | ||||
| way allowed by CBOR. The server must accept all string encodings. | ||||
| Major type 2, bstr, SHOULD be have tag 21, 22 or 23 to indicate | 4.2. CDDL for CWT-defined Claims | |||
| conversion to base64 or such when converting to JSON. | ||||
| 4.3. Map and Array Encoding (major type 4 and 5) | This section provides CDDL for the claims defined in CWT. It is non- | |||
| normative as [RFC8392] is the authoritative definition of these | ||||
| claims. | ||||
| The entity can use any array or map encoding allowed by CBOR | cwt_claim = ( | |||
| including indefinite lengths. Sorting of map keys is not required. | issuer_claim // | |||
| Duplicate map keys are not allowed. The server must accept all array | subject_claim // | |||
| and map encodings. The server may reject maps with duplicate map | audience_claim // | |||
| keys. | expiration_claim // | |||
| not_before_claim // | ||||
| issued_at_calim // | ||||
| cwt_id_claim | ||||
| ) | ||||
| 4.4. Date and Time | issuer_claim = ( | |||
| issuer: string_or_uri ) | ||||
| The entity should send dates as tag 1 encoded as 64-bit or 32-bit | subject_claim = ( | |||
| integers. The entity may not send floating point dates. The server | subject: string_or_uri ) | |||
| must support tag 1 epoch based dates encoded as 64-bit or 32-bit | ||||
| integers. | ||||
| The entity may send tag 0 dates, however tag 1 is preferred. The | audience_claim = ( | |||
| server must support tag 0 UTC dates. | audience: string_or_uri ) | |||
| 4.5. URIs | expiration_claim = ( | |||
| expiration: time ) | ||||
| URIs should be encoded as text strings and marked with tag 32. | not_before_claim = ( | |||
| not_before: time ) | ||||
| 4.6. Floating Point | issued_at_calim = ( | |||
| issued_at: time ) | ||||
| Encoding data in floating point is to be used only if necessary. | cwt_id_claim = ( | |||
| Location coordinates are always in floating point. The server must | cwt_id: bstr ) | |||
| support decoding of all types of floating point. | ||||
| 4.7. Other types | issuer = 1 | |||
| subject = 2 | ||||
| audience = 3 | ||||
| expiration = 4 | ||||
| not_before = 5 | ||||
| issued_at = 6 | ||||
| cwt_id = 7 | ||||
| Use of Other types like bignums, regular expressions and so SHOULD | 4.3. JSON | |||
| NOT be used. The server MAY support them, but is not required to. | ||||
| Use of these tags is | 4.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" | ||||
| 4.3.2. JSON Interoperability | ||||
| JSON should be encoded per RFC 8610 Appendix E. In addition, the | ||||
| following CDDL types are encoded in JSON as follows: | ||||
| o bstr - must be base64url encoded | ||||
| o time - must be encoded as NumericDate as described section 2 of | ||||
| [RFC7519]. | ||||
| o string_or_uri - must be encoded as StringOrURI as described | ||||
| section 2 of [RFC7519]. | ||||
| 4.4. CBOR | ||||
| 4.4.1. Labels | ||||
| ueid = 8 | ||||
| origination = 9 | ||||
| oemid = 10 | ||||
| security_level = 11 | ||||
| boot_state = 12 | ||||
| location = 13 | ||||
| age = 14 | ||||
| uptime = 15 | ||||
| nested_eat = 16 | ||||
| submods = 17 | ||||
| submod_name = 18 | ||||
| latitude 1 | ||||
| longitude 2 | ||||
| altitude 3 | ||||
| accuracy 4 | ||||
| altitude_accuracy 5 | ||||
| heading_claim 6 | ||||
| speed_claim 7 | ||||
| 4.4.2. CBOR Interoperability | ||||
| Variations in the CBOR serializations supported in CBOR encoding and | ||||
| decoding are allowed and suggests that CBOR-based protocols specify | ||||
| how this variation is handled. This section specifies what formats | ||||
| MUST be supported in order to achieve interoperability. | ||||
| The assumption is that the entity is likely to be a constrained | ||||
| device and relying party is likely to be a very capable server. The | ||||
| approach taken is that the entity generating the token can use | ||||
| whatever encoding it wants, specifically encodings that are easier to | ||||
| implement such as indefinite lengths. The relying party receiving | ||||
| the token must support decoding all encodings. | ||||
| These rules cover all types used in the claims in this document. | ||||
| They also are recommendations for additional claims. | ||||
| Canonical CBOR encoding, Preferred Serialization and | ||||
| Deterministically Encoded CBOR are explicitly NOT required as they | ||||
| would place an unnecessary burden on the entity implementation, | ||||
| particularly if the entity implementation is implemented in hardware. | ||||
| o Integer Encoding (major type 0, 1) - The entity may use any | ||||
| integer encoding allowed by CBOR. The server MUST accept all | ||||
| integer encodings allowed by CBOR. | ||||
| o String Encoding (major type 2 and 3) - The entity can use any | ||||
| string encoding allowed by CBOR including indefinite lengths. It | ||||
| may also encode the lengths of strings in any way allowed by CBOR. | ||||
| The server must accept all string encodings. | ||||
| o Major type 2, bstr, SHOULD be have tag 21 to indicate conversion | ||||
| to base64url in case that conversion is performed. | ||||
| o Map and Array Encoding (major type 4 and 5) - The entity can use | ||||
| any array or map encoding allowed by CBOR including indefinite | ||||
| lengths. Sorting of map keys is not required. Duplicate map keys | ||||
| are not allowed. The server must accept all array and map | ||||
| encodings. The server may reject maps with duplicate map keys. | ||||
| 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 | ||||
| dates. The server must support tag 1 epoch-based dates encoded as | ||||
| 64-bit or 32-bit integers. The entity may send tag 0 dates, | ||||
| however tag 1 is preferred. The server must support tag 0 UTC | ||||
| dates. | ||||
| o URIs - URIs should be encoded as text strings and marked with tag | ||||
| 32. | ||||
| o Floating Point - The entity may use any floating-point encoding. | ||||
| The relying party must support decoding of all types of floating- | ||||
| point. | ||||
| o Other types - Use of Other types like bignums, regular expressions | ||||
| and such, SHOULD NOT be used. The server MAY support them but is | ||||
| not required to so interoperability is not guaranteed. | ||||
| 4.5. Collected CDDL | ||||
| 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 | ||||
| * claim | ||||
| } | ||||
| claim = ( | ||||
| ueid_claim // | ||||
| origination_claim // | ||||
| oemid_claim // | ||||
| security_level_claim // | ||||
| boot_state_claim // | ||||
| location_claim // | ||||
| age_claim // | ||||
| uptime_claim // | ||||
| nested_eat_claim // | ||||
| cwt_claim // | ||||
| generic_claim_type // | ||||
| ) | ||||
| TODO: copy the rest of the CDDL here (wait until the CDDL is more | ||||
| 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. New new IANA registry is created. All | Claims Registry is re used. No new IANA registry is created. All | |||
| EAT claims should be registered in the CWT Claims Registry. | EAT claims should be registered in the CWT and JWT Claims Registries. | |||
| 5.1.1. Claims Registered by This Document | 5.1.1. 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: X | 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 | |||
| 5.2. EAT CBOR Tag Registration | ||||
| How an EAT consumer determines whether received CBOR-formatted data | ||||
| actually represents a valid EAT is application-dependent, much like a | ||||
| CWT. For instance, a specific MIME type associated with the EAT such | ||||
| as "application/eat" could be sufficient for identification of the | ||||
| EAT. Note however that EAT's can include other EAT's (e.g. a device | ||||
| EAT comprised of several submodule EAT's). In this case, a CBOR tag | ||||
| dedicated to the EAT will be required at least for the submodule | ||||
| EAT's and the tag must be a valid CBOR tag. In other words - the EAT | ||||
| CBOR tag can optionally prefix a device-level EAT, but a EAT CBOR tag | ||||
| must always prefix a submodule EAT. The proposed EAT CBOR tag is 71. | ||||
| 5.2.1. Tag Registered by This Document | ||||
| o CBOR Tag: 71 | ||||
| o Data Item: Entity Attestation Token (EAT) | ||||
| o Semantics: Entity Attestation Token (CWT), as defined in | ||||
| *this_doc* | ||||
| o Reference: *this_doc* | ||||
| o Point of Contact: Giridhar Mandyam, mandyam@qti.qualcomm.com | ||||
| 6. Privacy Considerations | 6. 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 | 6.1. UEID Privacy Considerations | |||
| A UEID is usually not privacy preserving. Any set of relying parties | A UEID is usually not privacy-preserving. Any set of relying parties | |||
| that receives tokens that happen to be from a single device will be | that receives tokens that happen to be from a single device will be | |||
| able to know the tokens are all from the same device and be able to | able to know the tokens are all from the same device and be able to | |||
| track the device. Thus, in many usage situations ueid violates | track the device. Thus, in many usage situations ueid violates | |||
| governmental privacy regulation. In other usage situations UEID will | governmental privacy regulation. In other usage situations UEID will | |||
| not be allowed for certain products like browsers that give privacy | not be allowed for certain products like browsers that give privacy | |||
| for the end user. it will often be the case that tokens will not | for the end user. it will often be the case that tokens will not | |||
| have a UEID for these reasons. | have a UEID for these reasons. | |||
| There are several strategies that can be used to still be able to put | There are several strategies that can be used to still be able to put | |||
| UEID's in tokens: | UEID's in tokens: | |||
| skipping to change at page 20, line 15 ¶ | skipping to change at page 23, line 28 ¶ | |||
| 7. Security Considerations | 7. Security Considerations | |||
| TODO: Perhaps this can be the same as CWT / COSE, but not sure yet | TODO: Perhaps this can be the same as CWT / COSE, but not sure yet | |||
| because it involves so much entity / device security that those do | because it involves so much entity / device security that those do | |||
| not. | not. | |||
| 8. References | 8. References | |||
| 8.1. Normative References | 8.1. Normative References | |||
| [IANA.CWT.Claims] | ||||
| IANA, "CBOR Web Token (CWT) Claims", n.d., | ||||
| <http://www.iana.org/assignments/cwt>. | ||||
| [IANA.JWT.Claims] | ||||
| IANA, "JSON Web Token (JWT) Claims", n.d., | ||||
| <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>. | |||
| [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>. | |||
| [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | ||||
| Writing an IANA Considerations Section in RFCs", BCP 26, | ||||
| RFC 8126, DOI 10.17487/RFC8126, June 2017, | ||||
| <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 | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [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 | ||||
| Definition Language (CDDL): A Notational Convention to | ||||
| Express Concise Binary Object Representation (CBOR) and | ||||
| JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, | ||||
| June 2019, <https://www.rfc-editor.org/info/rfc8610>. | ||||
| [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. | |||
| [ECMAScript] | ||||
| "Ecma International, "ECMAScript Language Specification, | ||||
| 5.1 Edition", ECMA Standard 262", June 2011, | ||||
| <http://www.ecma-international.org/ecma-262/5.1/ | ||||
| ECMA-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>. | |||
| [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 / 11:h'948f8860d13a463e8e', | / nonce (cti) / 7:h'948f8860d13a463e8e', | |||
| / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | |||
| / secbootenabled / 13:true, | / boot_state / 12:{true, true, true, true, false} | |||
| / debugpermanentdisable / 15:true, | / time stamp (iat) / 6:1526542894, | |||
| / ts / 21:1526542894, | ||||
| } | } | |||
| A.2. Example with Submodules, Nesting and Security Levels | A.2. Example with Submodules, Nesting and Security Levels | |||
| { | { | |||
| / nonce / 11:h'948f8860d13a463e8e', | / nonce / 7:h'948f8860d13a463e8e', | |||
| / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | / UEID / 8:h'0198f50a4ff6c05861c8860d13a638ea4fe2f', | |||
| / secbootenabled / 13:true, | / boot_state / 12:{true, true, true, true, false} | |||
| / debugpermanentdisable / 15:true, | / time stamp (iat) / 6:1526542894, | |||
| / ts / 21:1526542894, | / seclevel / 11:3, / secure restricted OS / | |||
| / seclevel / 10:3, / secure restriced OS / | ||||
| / submods / 30: | / submods / 17: | |||
| [ | [ | |||
| / 1st submod, an Android Application / { | / 1st submod, an Android Application / { | |||
| / submod_name / 30:'Android App "Foo"', | / submod_name / 18:'Android App "Foo"', | |||
| / seclevel / 10: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 / { | |||
| / submod_name / 30:'Secure Element EAT', | / submod_name / 18:'Secure Element EAT', | |||
| / eat / 31:71( 18( | / eat / 16:61( 18( | |||
| / an embedded EAT / [ /...COSE_Sign1 bytes with payload.../ ] | / an embedded EAT / [ /...COSE_Sign1 bytes with payload.../ ] | |||
| )) | )) | |||
| } | } | |||
| / 3rd submod, information about Linux Android / { | / 3rd submod, information about Linux Android / { | |||
| / submod_name/ 30:'Linux Android', | / submod_name/ 18:'Linux Android', | |||
| / seclevel / 10:1, / unrestricted / | / seclevel / 11:1, / unrestricted / | |||
| / custom - release / -80000:'8.0.0', | / custom - release / -80000:'8.0.0', | |||
| / custom - version / -80001:'4.9.51+' | / custom - version / -80001:'4.9.51+' | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| Appendix B. Changes from 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 | ||||
| the significant differences. | ||||
| B.1. From draft-mandyam-rats-eat-00 | ||||
| This is a fairly large change in the orientation of the document, but | ||||
| not new claims have been added. | ||||
| o Separate information and data model using CDDL. | ||||
| o Say an EAT is a CWT or JWT | ||||
| o Use a map to structure the boot_state and location claims | ||||
| 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. | ||||
| 391 lines changed or deleted | 552 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/ | ||||