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.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |