draft-ietf-rats-eat-01.txt | draft-ietf-rats-eat-02.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: January 5, 2020 Security Theory LLC | Expires: July 12, 2020 Security Theory LLC | |||
M. Ballesteros | M. Ballesteros | |||
J. O'Donoghue | J. O'Donoghue | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
July 04, 2019 | January 09, 2020 | |||
The Entity Attestation Token (EAT) | The Entity Attestation Token (EAT) | |||
draft-ietf-rats-eat-01 | draft-ietf-rats-eat-02 | |||
Abstract | Abstract | |||
An Entity Attestation Token (EAT) provides a signed (attested) set of | An Entity Attestation Token (EAT) provides a signed (attested) set of | |||
claims that describe state and characteristics of an entity, | claims that describe state and characteristics of an entity, | |||
typically a device like a phone or an IoT device. These claims are | typically a device like a phone or an IoT device. These claims are | |||
used by a relying party to determine how much it wishes to trust the | used by a relying party to determine how much it wishes to trust the | |||
entity. | entity. | |||
An EAT is either a CWT or JWT with some attestation-oriented claims. | An EAT is either a CWT or JWT with some attestation-oriented claims. | |||
skipping to change at page 1, line 45 ¶ | skipping to change at page 1, line 45 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 5, 2020. | This Internet-Draft will expire on July 12, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2019 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | 1.1. CDDL, CWT and JWT . . . . . . . . . . . . . . . . . . . . 4 | |||
1.2. Entity Overview . . . . . . . . . . . . . . . . . . . . . 4 | 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 . . . . . . . . . . . . . . . . . . . 6 | 1.4.2. Signing Scheme . . . . . . . . . . . . . . . . . . . 7 | |||
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
3. The Claims Information Model . . . . . . . . . . . . . . . . 8 | 3. The Claims Information Model . . . . . . . . . . . . . . . . 8 | |||
3.1. Nonce Claim (cti and jti) . . . . . . . . . . . . . . . . 8 | 3.1. Token ID Claim (cti and jti) . . . . . . . . . . . . . . 8 | |||
3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 8 | 3.2. Timestamp claim (iat) . . . . . . . . . . . . . . . . . . 8 | |||
3.3. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 8 | 3.3. Nonce Claim (nonce) . . . . . . . . . . . . . . . . . . . 8 | |||
3.4. Origination Claim (origination) . . . . . . . . . . . . . 11 | 3.3.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
3.4.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.4. Universal Entity ID Claim (ueid) . . . . . . . . . . . . 9 | |||
3.5. OEM identification by IEEE OUI (oemid) . . . . . . . . . 12 | 3.4.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
3.5. Origination Claim (origination) . . . . . . . . . . . . . 11 | ||||
3.5.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | 3.5.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
3.6. The Security Level Claim (security_level) . . . . . . . . 12 | 3.6. OEM Identification by IEEE (oemid) . . . . . . . . . . . 12 | |||
3.6.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 13 | 3.6.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
3.7. Secure Boot and Debug Enable State Claims (boot_state) . 13 | 3.7. The Security Level Claim (security_level) . . . . . . . . 12 | |||
3.7.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 13 | 3.7.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3.7.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 13 | 3.8. Secure Boot and Debug Enable State Claims (boot_state) . 13 | |||
3.7.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 14 | 3.8.1. Secure Boot Enabled . . . . . . . . . . . . . . . . . 14 | |||
3.7.4. Debug Permanent Disable . . . . . . . . . . . . . . . 14 | 3.8.2. Debug Disabled . . . . . . . . . . . . . . . . . . . 14 | |||
3.7.5. Debug Full Permanent Disable . . . . . . . . . . . . 14 | 3.8.3. Debug Disabled Since Boot . . . . . . . . . . . . . . 14 | |||
3.7.6. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 14 | 3.8.4. Debug Permanent Disable . . . . . . . . . . . . . . . 14 | |||
3.8. The Location Claim (location) . . . . . . . . . . . . . . 14 | 3.8.5. Debug Full Permanent Disable . . . . . . . . . . . . 14 | |||
3.8.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.8.6. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
3.9. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 15 | 3.9. The Location Claim (location) . . . . . . . . . . . . . . 15 | |||
3.10. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 15 | 3.9.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.10.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | 3.10. The Age Claim (age) . . . . . . . . . . . . . . . . . . . 15 | |||
3.11. Nested EATs, the EAT Claim (nested_eat) . . . . . . . . . 15 | 3.11. The Uptime Claim (uptime) . . . . . . . . . . . . . . . . 15 | |||
3.11.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3.11.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
3.12. The Submods Claim (submods) . . . . . . . . . . . . . . . 16 | 3.12. Nested EATs, the EAT Claim (nested_eat) . . . . . . . . . 16 | |||
3.12.1. The submod_name Claim . . . . . . . . . . . . . . . 16 | 3.12.1. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | |||
3.12.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 16 | 3.13. The Submods Claim (submods) . . . . . . . . . . . . . . . 16 | |||
3.13.1. The submod_name Claim . . . . . . . . . . . . . . . 16 | ||||
3.13.2. CDDL . . . . . . . . . . . . . . . . . . . . . . . . 17 | ||||
4. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4. Data Model . . . . . . . . . . . . . . . . . . . . . . . . . 17 | |||
4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 17 | 4.1. Common CDDL Types . . . . . . . . . . . . . . . . . . . . 17 | |||
4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 17 | 4.2. CDDL for CWT-defined Claims . . . . . . . . . . . . . . . 17 | |||
4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | 4.3. JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | |||
4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 18 | 4.3.1. JSON Labels . . . . . . . . . . . . . . . . . . . . . 18 | |||
4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 19 | 4.3.2. JSON Interoperability . . . . . . . . . . . . . . . . 19 | |||
4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.4. CBOR . . . . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
4.4.1. Labels . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.4.1. Labels . . . . . . . . . . . . . . . . . . . . . . . 19 | |||
4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 20 | 4.4.2. CBOR Interoperability . . . . . . . . . . . . . . . . 20 | |||
4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 21 | 4.5. Collected CDDL . . . . . . . . . . . . . . . . . . . . . 21 | |||
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | |||
5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 21 | 5.1. Reuse of CBOR Web Token (CWT) Claims Registry . . . . . . 22 | |||
5.1.1. Claims Registered by This Document . . . . . . . . . 22 | 5.1.1. Claims Registered by This Document . . . . . . . . . 22 | |||
6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 22 | 6. Privacy Considerations . . . . . . . . . . . . . . . . . . . 23 | |||
6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 22 | 6.1. UEID Privacy Considerations . . . . . . . . . . . . . . . 23 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 23 | 7. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 24 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 24 | 8.2. Informative References . . . . . . . . . . . . . . . . . 25 | |||
Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 26 | Appendix A. Examples . . . . . . . . . . . . . . . . . . . . . . 27 | |||
A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 26 | A.1. Very Simple EAT . . . . . . . . . . . . . . . . . . . . . 27 | |||
A.2. Example with Submodules, Nesting and Security Levels . . 26 | A.2. Example with Submodules, Nesting and Security Levels . . 27 | |||
Appendix B. Changes from Previous Drafts . . . . . . . . . . . . 27 | Appendix B. Changes from Previous Drafts . . . . . . . . . . . . 28 | |||
B.1. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 27 | B.1. From draft-mandyam-rats-eat-00 . . . . . . . . . . . . . 28 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | B.2. From draft-ietf-rats-eat-01 . . . . . . . . . . . . . . . 28 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 28 | ||||
1. Introduction | 1. Introduction | |||
Remote device attestation is a fundamental service that allows a | Remote device attestation is a fundamental service that allows a | |||
remote device such as a mobile phone, an Internet-of-Things (IoT) | remote device such as a mobile phone, an Internet-of-Things (IoT) | |||
device, or other endpoint to prove itself to a relying party, a | device, or other endpoint to prove itself to a relying party, a | |||
server or a service. This allows the relying party to know some | server or a service. This allows the relying party to know some | |||
characteristics about the device and decide whether it trusts the | characteristics about the device and decide whether it trusts the | |||
device. | device. | |||
skipping to change at page 8, line 8 ¶ | skipping to change at page 8, line 11 ¶ | |||
Attestation Key Material (AKM). The key material used to sign the | Attestation Key Material (AKM). The key material used to sign the | |||
EAT token. If it is done symmetrically with HMAC, then this is a | EAT token. If it is done symmetrically with HMAC, then this is a | |||
simple symmetric key. If it is done with ECC, such as an IEEE | simple symmetric key. If it is done with ECC, such as an IEEE | |||
DevID [IDevID], then this is the private part of the EC key pair. | DevID [IDevID], then this is the private part of the EC key pair. | |||
If ECDAA is used, (e.g., as used by Enhanced Privacy ID, i.e. | If ECDAA is used, (e.g., as used by Enhanced Privacy ID, i.e. | |||
EPID) then it is the key material needed for ECDAA. | EPID) then it is the key material needed for ECDAA. | |||
3. The Claims Information Model | 3. The Claims Information Model | |||
This section describes new claims defined for attestation. It also | This section describes new claims defined for attestation. It also | |||
mentions several claims defined by CWT and JWT are particularly | mentions several claims defined by CWT and JWT that are particularly | |||
important for EAT. | important for EAT. | |||
Note also: * Any claim defined for CWT or JWT may be used in an EAT | Note also: * Any claim defined for CWT or JWT may be used in an EAT | |||
including those in the CWT [IANA.CWT.Claims] and JWT IANA | including those in the CWT [IANA.CWT.Claims] and JWT IANA | |||
[IANA.JWT.Claims] claims registries. * All claims are optional * No | [IANA.JWT.Claims] claims registries. | |||
claims are mandatory * All claims that are not understood by | ||||
implementations MUST be ignored | o All claims are optional | |||
o No claims are mandatory | ||||
o All claims that are not understood by implementations MUST be | ||||
ignored | ||||
CDDL along with text descriptions is used to define the information | 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 | 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, | aggregation and type definition feature of CDDL). In the data model, | |||
described in the Section 4, the CDDL groups turn into CBOR map | described in the Section 4, the CDDL groups turn into CBOR map | |||
entries and JSON name/value pairs. | entries and JSON name/value pairs. | |||
3.1. Nonce Claim (cti and jti) | 3.1. Token ID 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"? | CWT defines the "cti" claim. JWT defines the "jti" claim. These are | |||
equivalent to each other in EAT and carry a unique token identifier | ||||
as they do in JWT and CWT. They may be used to defend against re use | ||||
of the token but are distinct from the nonce that is used by the | ||||
relying party to guarantee freshness and defend against replay. | ||||
3.2. Timestamp claim (iat) | 3.2. Timestamp claim (iat) | |||
The "iat" claim defined in CWT and JWT is used to indicate the date- | The "iat" claim defined in CWT and JWT is used to indicate the date- | |||
of-creation of the token. | of-creation of the token. | |||
3.3. Universal Entity ID Claim (ueid) | 3.3. Nonce Claim (nonce) | |||
All EATs should have a nonce to prevent replay attacks. The nonce is | ||||
generated by the relying party, the end consumer of the token. It is | ||||
conveyed to the entity over whatever transport is in use before the | ||||
token is generated and then included in the token as the nonce claim. | ||||
This documents the nonce claim for registration in the IANA CWT | ||||
claims registry. This is equivalent to the JWT nonce claim that is | ||||
already registered. | ||||
The nonce must be at least 8 bytes (64 bits) as fewer are unlikely to | ||||
be secure. A maximum of 64 bytes is set to limit the memory a | ||||
constrained implementation uses. This size range is not set for the | ||||
already-registered JWT nonce, but it should follow this size | ||||
recommendation when used in an EAT. | ||||
3.3.1. CDDL | ||||
nonce_claim = ( | ||||
nonce => bstr .size (8..64) | ||||
) | ||||
3.4. Universal Entity ID Claim (ueid) | ||||
UEID's identify individual manufactured entities / devices such as a | UEID's identify individual manufactured entities / devices such as a | |||
mobile phone, a water meter, a Bluetooth speaker or a networked | mobile phone, a water meter, a Bluetooth speaker or a networked | |||
security camera. It may identify the entire device or a submodule or | security camera. It may identify the entire device or a submodule or | |||
subsystem. It does not identify types, models or classes of devices. | subsystem. It does not identify types, models or classes of devices. | |||
It is akin to a serial number, though it does not have to be | It is akin to a serial number, though it does not have to be | |||
sequential. | sequential. | |||
UEID's must be universally and globally unique across manufacturers | UEID's must be universally and globally unique across manufacturers | |||
and countries. UEIDs must also be unique across protocols and | and countries. UEIDs must also be unique across protocols and | |||
skipping to change at page 11, line 21 ¶ | skipping to change at page 11, line 24 ¶ | |||
o New types of UEIDs may be created. For example, a type 0x07 UEID | o New types of UEIDs may be created. For example, a type 0x07 UEID | |||
may be created based on some other manufacturer registration | may be created based on some other manufacturer registration | |||
scheme. | scheme. | |||
o Device manufacturers are allowed to change from one type of UEID | o Device manufacturers are allowed to change from one type of UEID | |||
to another anytime they want. For example, they may find they can | to another anytime they want. For example, they may find they can | |||
optimize their manufacturing by switching from type 0x01 to type | optimize their manufacturing by switching from type 0x01 to type | |||
0x02 or vice versa. The main requirement on the manufacturer is | 0x02 or vice versa. The main requirement on the manufacturer is | |||
that UEIDs be universally unique. | that UEIDs be universally unique. | |||
### CDDL | 3.4.1. CDDL | |||
ueid_claim = ( | ueid_claim = ( | |||
ueid: bstr ) | ueid: bstr ) | |||
3.4. Origination Claim (origination) | 3.5. Origination Claim (origination) | |||
This claim describes the parts of the device or entity that are | This claim describes the parts of the device or entity that are | |||
creating the EAT. Often it will be tied back to the device or chip | creating the EAT. Often it will be tied back to the device or chip | |||
manufacturer. The following table gives some examples: | manufacturer. The following table gives some examples: | |||
+-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| Name | Description | | | Name | Description | | |||
+-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
| 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" | | |||
skipping to change at page 12, line 5 ¶ | skipping to change at page 12, line 5 ¶ | |||
| Acme-TA | The EATs are generated in a Trusted | | | Acme-TA | The EATs are generated in a Trusted | | |||
| | Application (TA) authored by "Acme" | | | | Application (TA) authored by "Acme" | | |||
+-------------------+-----------------------------------------------+ | +-------------------+-----------------------------------------------+ | |||
TODO: consider a more structure approach where the name and the URI | TODO: consider a more structure approach where the name and the URI | |||
and other are in separate fields. | and other are in separate fields. | |||
TODO: This needs refinement. It is somewhat parallel to issuer claim | TODO: This needs refinement. It is somewhat parallel to issuer claim | |||
in CWT in that it describes the authority that created the token. | in CWT in that it describes the authority that created the token. | |||
3.4.1. CDDL | 3.5.1. CDDL | |||
origination_claim = ( | origination_claim = ( | |||
origination: string_or_uri ) | origination: string_or_uri ) | |||
3.5. OEM identification by IEEE OUI (oemid) | 3.6. OEM Identification by IEEE (oemid) | |||
This claim identifies a device OEM by the IEEE OUI. Reference TBD. | The IEEE operates a global registry for MAC addresses and company | |||
It is a byte string representing the OUI in binary form in network | IDs. This claim uses that database to identify OEMs. The contents | |||
byte order (TODO: confirm details). | of the claim may be either an IEEE MA-L, MA-M, MA-S or an IEEE CID | |||
[IEEE.RA]. An MA-L, formerly known as an OUI, is a 24-bit value used | ||||
as the first half of a MAC address. MA-M similarly is a 28-bit value | ||||
uses as the first part of a MAC address, and MA-S, formerly known as | ||||
OUI-36, a 36-bit value. Many companies already have purchased one of | ||||
these. A CID is also a 24-bit value from the same space as an MA-L, | ||||
but not for use as a MAC address. IEEE has published Guidelines for | ||||
Use of EUI, OUI, and CID [OUI.Guide] and provides a lookup services | ||||
[OUI.Lookup] | ||||
Companies that have more than one IEEE OUI registered with IEEE | Companies that have more than one of these IDs or MAC address blocks | |||
should pick one and prefer that for all their devices. | should pick one and prefer that for all their devices. | |||
Note that the OUI is in common use as a part of MAC Address. This | Commonly, these are expressed in Hexadecimal Representation | |||
claim is only the first bits of the MAC address that identify the | [IEEE.802-2001] also called the Canonical format. When this claim is | |||
manufacturer. The IEEE maintains a registry for these in which many | encoded order of bytes in the bstr are the same as the order in the | |||
companies participate. | Hexadecimal Representation. For example, an MA-L like "AC-DE-48" | |||
would be encoded in 3 bytes with values 0xAC, 0xDE, 0x48. For JSON | ||||
encoded tokens, this is further base64url encoded. | ||||
3.5.1. CDDL | 3.6.1. CDDL | |||
oemid_claim = ( | oemid_claim = ( | |||
oemid: bstr ) | oemid: bstr ) | |||
3.6. The Security Level Claim (security_level) | 3.7. The Security Level Claim (security_level) | |||
EATs have a claim that roughly characterizes the device / entities | EATs have a claim that roughly characterizes the device / entities | |||
ability to defend against attacks aimed at capturing the signing key, | ability to defend against attacks aimed at capturing the signing key, | |||
forging claims and at forging EATs. This is done by roughly defining | forging claims and at forging EATs. This is done by roughly defining | |||
four security levels as described below. This is similar to the | four security levels as described below. This is similar to the | |||
security levels defined in the Metadata Service defined by the Fast | security levels defined in the Metadata Service defined by the Fast | |||
Identity Online (FIDO) Alliance (TODO: reference). | Identity Online (FIDO) Alliance (TODO: reference). | |||
These claims describe security environment and countermeasures | These claims describe security environment and countermeasures | |||
available on the end-entity / client device where the attestation key | available on the end-entity / client device where the attestation key | |||
skipping to change at page 13, line 22 ¶ | skipping to change at page 13, line 33 ¶ | |||
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.6.1. CDDL | 3.7.1. CDDL | |||
security_level_type = ( | security_level_type = ( | |||
unrestricted: 1, | unrestricted: 1, | |||
restricted: 2, | restricted: 2, | |||
secure_restricted: 3, | secure_restricted: 3, | |||
hardware: 4 | hardware: 4 | |||
) | ) | |||
security_level_claim = ( | security_level_claim = ( | |||
security_level: security_level_type ) | security_level: security_level_type ) | |||
3.7. Secure Boot and Debug Enable State Claims (boot_state) | 3.8. Secure Boot and Debug Enable State Claims (boot_state) | |||
This claim is an array of five Boolean values indicating the boot and | This claim is an array of five Boolean values indicating the boot and | |||
debug state of the entity. | debug state of the entity. | |||
3.7.1. Secure Boot Enabled | 3.8.1. Secure Boot Enabled | |||
This indicates whether secure boot is enabled either for an entire | This indicates whether secure boot is enabled either for an entire | |||
device or an individual submodule. If it appears at the device | device or an individual submodule. If it appears at the device | |||
level, then this means that secure boot is enabled for all | level, then this means that secure boot is enabled for all | |||
submodules. Secure boot enablement allows a secure boot loader to | submodules. Secure boot enablement allows a secure boot loader to | |||
authenticate software running either in a device or a submodule prior | authenticate software running either in a device or a submodule prior | |||
allowing execution. | allowing execution. | |||
3.7.2. Debug Disabled | 3.8.2. Debug Disabled | |||
This indicates whether debug capabilities are disabled for an entity | This 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. | prerequisite before an entity is considered operational. | |||
3.7.3. Debug Disabled Since Boot | 3.8.3. Debug Disabled Since Boot | |||
This claim indicates whether debug capabilities for the entity were | This claim indicates whether debug capabilities for the entity were | |||
not disabled in any way since boot (i.e. value of 'true'). | not disabled in any way since boot (i.e. value of 'true'). | |||
3.7.4. Debug Permanent Disable | 3.8.4. Debug Permanent Disable | |||
This claim indicates whether debug capabilities for the entity are | This claim indicates whether debug capabilities for the entity are | |||
permanently disabled (i.e. value of 'true'). This value can be set | permanently disabled (i.e. value of 'true'). This value can be set | |||
to 'true' also if only the manufacturer is allowed to enabled debug, | to 'true' also if only the manufacturer is allowed to enabled debug, | |||
but the end user is not. | but the end user is not. | |||
3.7.5. Debug Full Permanent Disable | 3.8.5. Debug Full Permanent Disable | |||
This claim indicates whether debug capabilities for the entity are | This claim indicates whether debug capabilities for the entity are | |||
permanently disabled (i.e. value of 'true'). This value can only be | permanently disabled (i.e. value of 'true'). This value can only be | |||
set to 'true' if no party can enable debug capabilities for the | set to 'true' if no party can enable debug capabilities for the | |||
entity. Often this is implemented by blowing a fuse on a chip as | entity. Often this is implemented by blowing a fuse on a chip as | |||
fuses cannot be restored once blown. | fuses cannot be restored once blown. | |||
3.7.6. CDDL | 3.8.6. CDDL | |||
boot_state_type = [ | boot_state_type = [ | |||
secure_boot_enabled=> bool, | secure_boot_enabled=> bool, | |||
debug_disabled=> bool, | debug_disabled=> bool, | |||
debug_disabled_since_boot=> bool, | debug_disabled_since_boot=> bool, | |||
debug_permanent_disable=> bool, | debug_permanent_disable=> bool, | |||
debug_full_permanent_disable=> bool | debug_full_permanent_disable=> bool | |||
] | ] | |||
boot_state_claim = ( | boot_state_claim = ( | |||
boot_state: boot_state_type | boot_state: boot_state_type | |||
) | ) | |||
3.8. The Location Claim (location) | 3.9. The Location Claim (location) | |||
The location claim is a CBOR-formatted object that describes the | The location claim is a CBOR-formatted object that describes the | |||
location of the device entity from which the attestation originates. | location of the device entity from which the attestation originates. | |||
It is comprised of a map of additional sub claims that represent the | It is comprised of a map of additional sub claims that represent the | |||
actual location coordinates (latitude, longitude and altitude). The | actual location coordinates (latitude, longitude and altitude). The | |||
location coordinate claims are consistent with the WGS84 coordinate | location coordinate claims are consistent with the WGS84 coordinate | |||
system [WGS84]. In addition, a sub claim providing the estimated | system [WGS84]. In addition, a sub claim providing the estimated | |||
accuracy of the location measurement is defined. | accuracy of the location measurement is defined. | |||
3.8.1. CDDL | 3.9.1. CDDL | |||
location_type = { | location_type = { | |||
latitude => number, | latitude => number, | |||
longitude => number, | longitude => number, | |||
altitude => number, | altitude => number, | |||
accuracy => number, | accuracy => number, | |||
altitude_accuracy => number, | altitude_accuracy => number, | |||
heading_claim => number, | heading => number, | |||
speed_claim => number | speed => number | |||
} | } | |||
location_claim = ( | location_claim = ( | |||
location: location_type ) | location: location_type ) | |||
3.9. The Age Claim (age) | 3.10. The Age Claim (age) | |||
The "age" claim contains a value that represents the number of | The "age" claim contains a value that represents the number of | |||
seconds that have elapsed since the token was created, measurement | seconds that have elapsed since the token was created, measurement | |||
was made, or location was obtained. Typical attestable values are | was made, or location was obtained. Typical attestable values are | |||
sent as soon as they are obtained. However, in the case that such a | sent as soon as they are obtained. However, in the case that such a | |||
value is buffered and sent at a later time and a sufficiently | value is buffered and sent at a later time and a sufficiently | |||
accurate time reference is unavailable for creation of a timestamp, | accurate time reference is unavailable for creation of a timestamp, | |||
then the age claim is provided. | then the age claim is provided. | |||
age_claim = ( | age_claim = ( | |||
age: uint) | age: uint) | |||
3.10. The Uptime Claim (uptime) | 3.11. The Uptime Claim (uptime) | |||
The "uptime" claim contains a value that represents the number of | The "uptime" claim contains a value that represents the number of | |||
seconds that have elapsed since the entity or submod was last booted. | seconds that have elapsed since the entity or submod was last booted. | |||
3.10.1. CDDL | 3.11.1. CDDL | |||
uptime_claim = ( | uptime_claim = ( | |||
uptime: uint ) | uptime: uint ) | |||
3.11. Nested EATs, the EAT Claim (nested_eat) | 3.12. Nested EATs, the EAT Claim (nested_eat) | |||
It is allowed for one EAT to be embedded in another. This is for | It is allowed for one EAT to be embedded in another. This is for | |||
complex devices that have more than one subsystem capable of | complex devices that have more than one subsystem capable of | |||
generating an EAT. Typically, one will be the device-wide EAT that | generating an EAT. For example, one might be the device-wide EAT | |||
is low to medium security and another from a Secure Element or | that is low to medium security and another from a Secure Element or | |||
similar that is high security. | similar that is high security. | |||
The contents of the "eat" claim must be a fully signed, optionally | The contents of the "nested_eat" claim must be a fully signed, | |||
encrypted, EAT token. | optionally encrypted, EAT token. | |||
3.11.1. CDDL | 3.12.1. CDDL | |||
nested_eat_claim = ( | nested_eat_claim = ( | |||
nested_eat: nested_eat_type) | nested_eat: nested_eat_type) | |||
A nested_eat_type is defined in words rather than CDDL. It is either | A nested_eat_type is defined in words rather than CDDL. It is either | |||
a full CWT or JWT including the COSE or JOSE signing. | a full CWT or JWT including the COSE or JOSE signing. | |||
3.12. The Submods Claim (submods) | 3.13. 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., Wi-Fi and cellular). It may | submodules for communications (e.g., Wi-Fi and cellular). It may | |||
have subsystems for low-power audio and video playback. It may have | have subsystems for low-power audio and video playback. It may have | |||
one or more security-oriented subsystems like a TEE or a Secure | one or more security-oriented subsystems like a TEE or a Secure | |||
Element. | Element. | |||
The claims for each these can be grouped together in a submodule. | The claims for each these can be grouped together in a submodule. | |||
Specifically, the "submods" claim is an array. Each item in the | 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. | 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.12.1. The submod_name Claim | 3.13.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.12.2. CDDL | 3.13.2. CDDL | |||
In the following a generic_claim_type is any CBOR map entry or JSON | In the following a generic_claim_type is any CBOR map entry or JSON | |||
name/value pair. | name/value pair. | |||
submod_name_type = ( | submod_name_type = ( | |||
submod_name: tstr ) | submod_name: tstr ) | |||
submods_type = [ * submod_claims ] | submods_type = [ * submod_claims ] | |||
submod_claims = { | submod_claims = { | |||
skipping to change at page 19, line 15 ¶ | skipping to change at page 19, line 15 ¶ | |||
origination = "origination" | origination = "origination" | |||
oemid = "oemid" | oemid = "oemid" | |||
security_level = "security_level" | security_level = "security_level" | |||
boot_state = "boot_state" | boot_state = "boot_state" | |||
location = "location" | location = "location" | |||
age = "age" | age = "age" | |||
uptime = "uptime" | uptime = "uptime" | |||
nested_eat = "nested_eat" | nested_eat = "nested_eat" | |||
submods = "submods" | submods = "submods" | |||
latitude = "lat"" | ||||
longitude = "long"" | ||||
altitude = "alt" | ||||
accuracy = "accry" | ||||
altitude_accuracy = "alt_accry" | ||||
heading = "heading" | ||||
speed = "speed" | ||||
4.3.2. JSON Interoperability | 4.3.2. JSON Interoperability | |||
JSON should be encoded per RFC 8610 Appendix E. In addition, the | JSON should be encoded per RFC 8610 Appendix E. In addition, the | |||
following CDDL types are encoded in JSON as follows: | following CDDL types are encoded in JSON as follows: | |||
o bstr - must be base64url encoded | o bstr - must be base64url encoded | |||
o time - must be encoded as NumericDate as described section 2 of | o time - must be encoded as NumericDate as described section 2 of | |||
[RFC7519]. | [RFC7519]. | |||
skipping to change at page 19, line 43 ¶ | skipping to change at page 20, line 15 ¶ | |||
origination = 9 | origination = 9 | |||
oemid = 10 | oemid = 10 | |||
security_level = 11 | security_level = 11 | |||
boot_state = 12 | boot_state = 12 | |||
location = 13 | location = 13 | |||
age = 14 | age = 14 | |||
uptime = 15 | uptime = 15 | |||
nested_eat = 16 | nested_eat = 16 | |||
submods = 17 | submods = 17 | |||
submod_name = 18 | submod_name = 18 | |||
nonce = 19 | ||||
latitude 1 | latitude = 1 | |||
longitude 2 | longitude = 2 | |||
altitude 3 | altitude = 3 | |||
accuracy 4 | accuracy = 4 | |||
altitude_accuracy 5 | altitude_accuracy = 5 | |||
heading_claim 6 | heading = 6 | |||
speed_claim 7 | speed = 7 | |||
4.4.2. CBOR Interoperability | 4.4.2. CBOR Interoperability | |||
Variations in the CBOR serializations supported in CBOR encoding and | Variations in the CBOR serializations supported in CBOR encoding and | |||
decoding are allowed and suggests that CBOR-based protocols specify | decoding are allowed and suggests that CBOR-based protocols specify | |||
how this variation is handled. This section specifies what formats | how this variation is handled. This section specifies what formats | |||
MUST be supported in order to achieve interoperability. | MUST be supported in order to achieve interoperability. | |||
The assumption is that the entity is likely to be a constrained | The assumption is that the entity is likely to be a constrained | |||
device and relying party is likely to be a very capable server. The | device and relying party is likely to be a very capable server. The | |||
skipping to change at page 22, line 39 ¶ | skipping to change at page 23, line 21 ¶ | |||
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: | |||
o The device obtains explicit permission from the user of the device | o The device obtains explicit permission from the user of the device | |||
to use the UEID. This may be through a prompt. It may also be | to use the UEID. This may be through a prompt. It may also be | |||
through a license agreement. For example, agreements for some | through a license agreement. For example, agreements for some | |||
online banking and brokerage services might already cover use of a | online banking and brokerage services might already cover use of a | |||
UEID. | UEID. | |||
skipping to change at page 23, line 29 ¶ | skipping to change at page 24, line 16 ¶ | |||
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.CWT.Claims] | |||
IANA, "CBOR Web Token (CWT) Claims", n.d., | IANA, "CBOR Web Token (CWT) Claims", | |||
<http://www.iana.org/assignments/cwt>. | <http://www.iana.org/assignments/cwt>. | |||
[IANA.JWT.Claims] | [IANA.JWT.Claims] | |||
IANA, "JSON Web Token (JWT) Claims", n.d., | IANA, "JSON Web Token (JWT) Claims", | |||
<https://www.iana.org/assignments/jwt>. | <https://www.iana.org/assignments/jwt>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | [RFC7049] Bormann, C. and P. Hoffman, "Concise Binary Object | |||
Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | Representation (CBOR)", RFC 7049, DOI 10.17487/RFC7049, | |||
October 2013, <https://www.rfc-editor.org/info/rfc7049>. | October 2013, <https://www.rfc-editor.org/info/rfc7049>. | |||
skipping to change at page 24, line 45 ¶ | skipping to change at page 25, line 33 ¶ | |||
[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] | [ECMAScript] | |||
"Ecma International, "ECMAScript Language Specification, | "Ecma International, "ECMAScript Language Specification, | |||
5.1 Edition", ECMA Standard 262", June 2011, | 5.1 Edition", ECMA Standard 262", June 2011, | |||
<http://www.ecma-international.org/ecma-262/5.1/ | <http://www.ecma-international.org/ecma-262/5.1/ECMA- | |||
ECMA-262.pdf>. | 262.pdf>. | |||
[IDevID] "IEEE Standard, "IEEE 802.1AR Secure Device Identifier"", | [IDevID] "IEEE Standard, "IEEE 802.1AR Secure Device Identifier"", | |||
December 2009, <http://standards.ieee.org/findstds/ | December 2009, <http://standards.ieee.org/findstds/ | |||
standard/802.1AR-2009.html>. | standard/802.1AR-2009.html>. | |||
[IEEE.802-2001] | ||||
"IEEE Standard For Local And Metropolitan Area Networks | ||||
Overview And Architecture", 2007, | ||||
<https://webstore.ansi.org/standards/ieee/ | ||||
ieee8022001r2007>. | ||||
[IEEE.RA] "IEEE Registration Authority", | ||||
<https://standards.ieee.org/products-services/regauth/ | ||||
index.html>. | ||||
[OUI.Guide] | ||||
"Guidelines for Use of Extended Unique Identifier (EUI), | ||||
Organizationally Unique Identifier (OUI), and Company ID | ||||
(CID)", August 2017, | ||||
<https://standards.ieee.org/content/dam/ieee- | ||||
standards/standards/web/documents/tutorials/eui.pdf>. | ||||
[OUI.Lookup] | ||||
"IEEE Registration Authority Assignments", | ||||
<https://regauth.standards.ieee.org/standards-ra-web/pub/ | ||||
view.html#registries>. | ||||
[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. | |||
skipping to change at page 27, line 21 ¶ | skipping to change at page 28, line 21 ¶ | |||
This is a fairly large change in the orientation of the document, but | This is a fairly large change in the orientation of the document, but | |||
not new claims have been added. | not new claims have been added. | |||
o Separate information and data model using CDDL. | o Separate information and data model using CDDL. | |||
o Say an EAT is a CWT or JWT | o Say an EAT is a CWT or JWT | |||
o Use a map to structure the boot_state and location claims | o Use a map to structure the boot_state and location claims | |||
B.2. From draft-ietf-rats-eat-01 | ||||
o Clarifications and corrections for OEMID claim | ||||
o Minor spelling and other fixes | ||||
o Add the nonce claim, clarify jti claim | ||||
Authors' Addresses | Authors' Addresses | |||
Giridhar Mandyam | Giridhar Mandyam | |||
Qualcomm Technologies Inc. | Qualcomm Technologies Inc. | |||
5775 Morehouse Drive | 5775 Morehouse Drive | |||
San Diego, California | San Diego, California | |||
USA | USA | |||
Phone: +1 858 651 7200 | Phone: +1 858 651 7200 | |||
EMail: mandyam@qti.qualcomm.com | EMail: mandyam@qti.qualcomm.com | |||
End of changes. 55 change blocks. | ||||
109 lines changed or deleted | 186 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/ |