rfc9711v3.txt | rfc9711.txt | |||
---|---|---|---|---|
skipping to change at line 619 ¶ | skipping to change at line 619 ¶ | |||
CBOR map entries and JSON name/value pairs. | CBOR map entries and JSON name/value pairs. | |||
Each claim defined in this document is added to the $$Claims-Set- | Each claim defined in this document is added to the $$Claims-Set- | |||
Claims group socket. Claims defined by other specifications MUST | Claims group socket. Claims defined by other specifications MUST | |||
also be added to the $$Claims-Set-Claims group socket. | also be added to the $$Claims-Set-Claims group socket. | |||
All claims in an EAT MUST use the same encoding except where | All claims in an EAT MUST use the same encoding except where | |||
otherwise explicitly stated (e.g., in a CBOR-encoded token, all | otherwise explicitly stated (e.g., in a CBOR-encoded token, all | |||
claims must be encoded with CBOR). | claims must be encoded with CBOR). | |||
This specification includes a CDDL definition that is derived from | This specification provides a CDDL definition for most of the | |||
the normative text in [RFC7519] and [RFC8392]. These definitions are | elements defined in [RFC7519] and [RFC8392]. These definitions are | |||
in Appendix D and are not normative. | in Appendix D and are not normative. | |||
Each claim described has a unique text string and integer that | Each claim described has a unique text string and integer that | |||
identifies it. CBOR-encoded tokens MUST only use the integer for | identifies it. CBOR-encoded tokens MUST only use the integer for | |||
claim keys. JSON-encoded tokens MUST only use the text string for | claim keys. JSON-encoded tokens MUST only use the text string for | |||
claim names. | claim names. | |||
4.1. eat_nonce (EAT Nonce) Claim | 4.1. eat_nonce (EAT Nonce) Claim | |||
An EAT nonce is either a byte, a text string, or an array of bytes or | In JSON, an EAT nonce is either a text string or an array of text | |||
text strings. The array option supports multistage EAT verification | strings. In CBOR, an EAT nonce is either a byte string or an array | |||
and consumption. | of byte strings. The array option supports multistage EAT | |||
verification and consumption. | ||||
A claim named "nonce" was defined for JWT and registered with IANA in | A claim named "nonce" was defined for JWT and registered with IANA in | |||
the "JSON Web Token Claims" registry, but it MUST NOT be used because | the "JSON Web Token Claims" registry, but it MUST NOT be used because | |||
it does not support multiple nonces. No previous "nonce" claim was | it does not support multiple nonces. No previous "nonce" claim was | |||
defined for CWT. To distinguish from the previously defined JWT | defined for CWT. To distinguish from the previously defined JWT | |||
"nonce" claim, this claim is named "eat_nonce" in JSON-encoded EATs. | "nonce" claim, this claim is named "eat_nonce" in JSON-encoded EATs. | |||
The CWT nonce defined here is intended for general purpose use and | The CWT nonce defined here is intended for general purpose use and | |||
retains the "Nonce" claim name instead of an EAT-specific name. | retains the "Nonce" claim name instead of an EAT-specific name. | |||
An EAT nonce MUST have at least 64 bits of entropy. A maximum EAT | An EAT nonce MUST have at least 64 bits of entropy. A maximum EAT | |||
skipping to change at line 893 ¶ | skipping to change at line 894 ¶ | |||
value used as the first part of a MAC address, and MA-S (formerly | value used as the first part of a MAC address, and MA-S (formerly | |||
known as OUI-36) is a 36-bit value. Many companies have already | known as OUI-36) is a 36-bit value. Many companies have already | |||
obtained an OEM ID from the IEEE registry. A CID is also a 24-bit | obtained an OEM ID from the IEEE registry. A CID is also a 24-bit | |||
value from the same space as an MA-L but is not for use as a MAC | value from the same space as an MA-L but is not for use as a MAC | |||
address. IEEE has published Guidelines for Use of EUI, OUI, and CID | address. IEEE has published Guidelines for Use of EUI, OUI, and CID | |||
[OUI.Guide] and provides a lookup service [OUI.Lookup]. | [OUI.Guide] and provides a lookup service [OUI.Lookup]. | |||
Companies that have more than one of these IDs or MAC address blocks | Companies that have more than one of these IDs or MAC address blocks | |||
SHOULD select one as preferred and use that for all their entities. | SHOULD select one as preferred and use that for all their entities. | |||
Commonly, these are expressed in hexadecimal representation as | Commonly, these are expressed in "hexadecimal representation" as | |||
described in [IEEE.802-2014]. It is also called the canonical | described in [IEEE.802-2014]. When this claim is encoded, the order | |||
format. When this claim is encoded, the order of bytes in the bstr | of bytes in the bstr is the same as the order in the "hexadecimal | |||
is the same as the order in the hexadecimal representation. For | representation". For example, an MA-L like "AC-DE-48" would be | |||
example, an MA-L like "AC-DE-48" would be encoded in 3 bytes with | encoded in 3 bytes with values 0xAC, 0xDE, and 0x48. | |||
values 0xAC, 0xDE, and 0x48. | ||||
This format is always 3 bytes in size in CBOR. | This format is always 3 bytes in size in CBOR. | |||
In JSON-encoded tokens, this MUST be base64url encoded and always 4 | In JSON-encoded tokens, this MUST be base64url encoded and always 4 | |||
bytes. | bytes. | |||
4.2.3.3. IANA Private Enterprise Number-Based OEM ID | 4.2.3.3. IANA Private Enterprise Number-Based OEM ID | |||
IANA maintains a registry for Private Enterprise Numbers [PEN]. A | IANA maintains a registry for Private Enterprise Numbers [PEN]. A | |||
PEN is an integer that identifies an enterprise, and it may be used | PEN is an integer that identifies an enterprise, and it may be used | |||
skipping to change at line 1810 ¶ | skipping to change at line 1810 ¶ | |||
guarantee interoperability. EAT chooses one general and explicit | guarantee interoperability. EAT chooses one general and explicit | |||
mechanism, the profile, to indicate the choices made for these | mechanism, the profile, to indicate the choices made for these | |||
implementation options for all aspects of the token. | implementation options for all aspects of the token. | |||
Below is a list of the various issues that should be addressed by a | Below is a list of the various issues that should be addressed by a | |||
profile. | profile. | |||
The "eat_profile" claim in Section 4.3.2 provides a unique identifier | The "eat_profile" claim in Section 4.3.2 provides a unique identifier | |||
for the profile a particular token uses. | for the profile a particular token uses. | |||
A profile can apply to evidence results, attestation results, or | A profile can apply to evidence, attestation results, or both. | |||
both. | ||||
6.1. Format of a Profile Document | 6.1. Format of a Profile Document | |||
A profile document does not have to be in any particular format. It | A profile document does not have to be in any particular format. It | |||
may be simple text, something more formal, or a combination of both. | may be simple text, something more formal, or a combination of both. | |||
A profile may define, and possibly register, one or more new claims | A profile may define, and possibly register, one or more new claims | |||
if needed. A profile may also reuse one or more already defined | if needed. A profile may also reuse one or more already defined | |||
claims either as is or with values constrained to a subset or | claims either as is or with values constrained to a subset or | |||
subrange. | subrange. | |||
skipping to change at line 2032 ¶ | skipping to change at line 2031 ¶ | |||
their content. The "manifests" claim (Section 4.2.15) and the | their content. The "manifests" claim (Section 4.2.15) and the | |||
"measurements" claim (Section 4.2.16) are examples of this, allowing | "measurements" claim (Section 4.2.16) are examples of this, allowing | |||
the use of CoSWID and other formats. A profile should specify which | the use of CoSWID and other formats. A profile should specify which | |||
formats are allowed to be sent, with the assumption that the | formats are allowed to be sent, with the assumption that the | |||
corresponding CoAP content types have been registered. A profile | corresponding CoAP content types have been registered. A profile | |||
should require the receiver to accept all formats that are allowed to | should require the receiver to accept all formats that are allowed to | |||
be sent. | be sent. | |||
Further, if there is variation within a format that is allowed, the | Further, if there is variation within a format that is allowed, the | |||
profile should specify which variations can be sent. For example, | profile should specify which variations can be sent. For example, | |||
there are variations in the CoSWID format, such as a profile that | there are variations in the CoSWID format. A profile might require | |||
requires the receiver to accept all variations that are allowed to be | the receiver to accept all variations that are allowed to be sent. | |||
sent. | ||||
6.4. The Constrained Device Standard Profile | 6.4. The Constrained Device Standard Profile | |||
It is anticipated that there will be many profiles defined for EAT | It is anticipated that there will be many profiles defined for EAT | |||
for many different use cases. This section gives a normative | for many different use cases. This section gives a normative | |||
definition of one profile that is good for many constrained device | definition of one profile that is good for many constrained device | |||
use cases. | use cases. | |||
The identifier for this profile is "urn:ietf:rfc:rfc9711". | The identifier for this profile is "urn:ietf:rfc:rfc9711". | |||
skipping to change at line 2210 ¶ | skipping to change at line 2208 ¶ | |||
tokens. When this is the case, the JC<> CDDL construct is used to | tokens. When this is the case, the JC<> CDDL construct is used to | |||
give both the integer and string values. | give both the integer and string values. | |||
7.2.4. CBOR Interoperability | 7.2.4. CBOR Interoperability | |||
CBOR allows data items to be serialized in more than one form to | CBOR allows data items to be serialized in more than one form to | |||
accommodate a variety of use cases. This is addressed in Section 6. | accommodate a variety of use cases. This is addressed in Section 6. | |||
7.3. Collected CDDL | 7.3. Collected CDDL | |||
See [EAT-GitHub] for additional information and stub files, when | ||||
using the CDDL presented in this section to validate EAT protocol | ||||
messages. | ||||
7.3.1. Payload CDDL | 7.3.1. Payload CDDL | |||
The payload CDDL defines all the EAT claims that are added to the | The payload CDDL defines all the EAT claims that are added to the | |||
main definition of a Claims-Set in Appendix D. Claims-Set is the | main definition of a Claims-Set in Appendix D. Claims-Set is the | |||
payload for CWT, JWT, and potentially other token types. This is for | payload for CWT, JWT, and potentially other token types. This is for | |||
both CBOR and JSON. When there is variation between CBOR and JSON, | both CBOR and JSON. When there is variation between CBOR and JSON, | |||
the JC<> CDDL generic defined in Appendix D is used. Note that the | the JC<> CDDL generic defined in Appendix D is used. Note that the | |||
JC<> generic uses the CDDL ".feature" control operator defined in | JC<> generic uses the CDDL ".feature" control operator defined in | |||
[RFC9165]. | [RFC9165]. | |||
skipping to change at line 3180 ¶ | skipping to change at line 3182 ¶ | |||
ietf-cose-cbor-encoded-cert-12, 8 January 2025, | ietf-cose-cbor-encoded-cert-12, 8 January 2025, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-cose- | <https://datatracker.ietf.org/doc/html/draft-ietf-cose- | |||
cbor-encoded-cert-12>. | cbor-encoded-cert-12>. | |||
[CC-Example] | [CC-Example] | |||
Eurosmart, "Secure Sub-System in System-on-Chip (3S in | Eurosmart, "Secure Sub-System in System-on-Chip (3S in | |||
SoC) Protection Profile", Version 1.8, October 2023, | SoC) Protection Profile", Version 1.8, October 2023, | |||
<https://commoncriteriaportal.org/nfs/ccpfiles/files/ | <https://commoncriteriaportal.org/nfs/ccpfiles/files/ | |||
ppfiles/pp0117V2b_pdf.pdf>. | ppfiles/pp0117V2b_pdf.pdf>. | |||
[EAT-GitHub] | ||||
"Entity Attestation Token IETF Draft Standard", commit | ||||
62c726b, January 2024, | ||||
<https://github.com/ietf-rats-wg/eat>. | ||||
[EAT.media-types] | [EAT.media-types] | |||
Lundblade, L., Birkholz, H., and T. Fossati, "EAT Media | Lundblade, L., Birkholz, H., and T. Fossati, "EAT Media | |||
Types", Work in Progress, Internet-Draft, draft-ietf-rats- | Types", Work in Progress, Internet-Draft, draft-ietf-rats- | |||
eat-media-type-12, 3 November 2024, | eat-media-type-12, 3 November 2024, | |||
<https://datatracker.ietf.org/doc/html/draft-ietf-rats- | <https://datatracker.ietf.org/doc/html/draft-ietf-rats- | |||
eat-media-type-12>. | eat-media-type-12>. | |||
[GP-Example] | [GP-Example] | |||
GlobalPlatform, "GlobalPlatform Technology: TEE | GlobalPlatform, "GlobalPlatform Technology: TEE | |||
Certification Process", Public Release Version 2.0, | Certification Process", Public Release Version 2.0, | |||
skipping to change at line 3623 ¶ | skipping to change at line 3630 ¶ | |||
] | ] | |||
] | ] | |||
] | ] | |||
] | ] | |||
} | } | |||
A.1.7. JSON-Encoded Token with Submodules | A.1.7. JSON-Encoded Token with Submodules | |||
The lines in this example are wrapped per [RFC8792]. | The lines in this example are wrapped per [RFC8792]. | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | ||||
{ | { | |||
"eat_nonce": "lI-IYNE6Rj6O", | "eat_nonce": "lI-IYNE6Rj6O", | |||
"ueid": "AJj1Ck_2wFhhyIYNE6Y46g==", | "ueid": "AJj1Ck_2wFhhyIYNE6Y46g==", | |||
"secboot": true, | "secboot": true, | |||
"dbgstat": "disabled-permanently", | "dbgstat": "disabled-permanently", | |||
"iat": 1526542894, | "iat": 1526542894, | |||
"submods": { | "submods": { | |||
"Android App Foo": { | "Android App Foo": { | |||
"swname": "Foo.app" | "swname": "Foo.app" | |||
}, | }, | |||
skipping to change at line 3769 ¶ | skipping to change at line 3778 ¶ | |||
A.2.3. JSON-Encoded Detached EAT Bundle | A.2.3. JSON-Encoded Detached EAT Bundle | |||
In this bundle, there are two detached Claims-Sets: "Audio Subsystem" | In this bundle, there are two detached Claims-Sets: "Audio Subsystem" | |||
and "Graphics Subsystem". The JWT at the start of the bundle has | and "Graphics Subsystem". The JWT at the start of the bundle has | |||
detached signature submodules with hashes that cover these two | detached signature submodules with hashes that cover these two | |||
Claims-Sets. The JWT itself is protected using the Hashed Message | Claims-Sets. The JWT itself is protected using the Hashed Message | |||
Authentication Code (HMAC) with a key of "xxxxxx". | Authentication Code (HMAC) with a key of "xxxxxx". | |||
The lines in this example are wrapped per [RFC8792]. | The lines in this example are wrapped per [RFC8792]. | |||
=============== NOTE: '\' line wrapping per RFC 8792 ================ | ||||
[ | [ | |||
[ | [ | |||
"JWT", | "JWT", | |||
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlYXRfbm9uY2UiOiJ5dT\ | "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlYXRfbm9uY2UiOiJ5dT\ | |||
c2Tk44SXVWNmUiLCJzdWJtb2RzIjp7IkF1ZGlvIFN1YnN5c3RlbSI6WyJESUdFU1QiLF\ | c2Tk44SXVWNmUiLCJzdWJtb2RzIjp7IkF1ZGlvIFN1YnN5c3RlbSI6WyJESUdFU1QiLF\ | |||
siU0hBLTI1NiIsIkZSRW4yVlR3aTk5cWNNRVFzYmxtTVFnM2I1b2ZYUG5OM1BJYW5CME\ | siU0hBLTI1NiIsIkZSRW4yVlR3aTk5cWNNRVFzYmxtTVFnM2I1b2ZYUG5OM1BJYW5CME\ | |||
5RT3MiXV0sIkdyYXBoaWNzIFN1YnN5c3RlbSI6WyJESUdFU1QiLFsiU0hBLTI1NiIsIk\ | 5RT3MiXV0sIkdyYXBoaWNzIFN1YnN5c3RlbSI6WyJESUdFU1QiLFsiU0hBLTI1NiIsIk\ | |||
52M3NqUVU3Q1Z0RFRka0RTUlhWcFZDNUNMVFBCWmVQWWhTLUhoVlZWMXMiXV19fQ.FYs\ | 52M3NqUVU3Q1Z0RFRka0RTUlhWcFZDNUNMVFBCWmVQWWhTLUhoVlZWMXMiXV19fQ.FYs\ | |||
7R-TKhgAk85NyCOPQlbtGGjFM_3chnhBEOuM6qCo" | 7R-TKhgAk85NyCOPQlbtGGjFM_3chnhBEOuM6qCo" | |||
], | ], | |||
skipping to change at line 4116 ¶ | skipping to change at line 4127 ¶ | |||
exp-claim-label = JC<"exp", 4> | exp-claim-label = JC<"exp", 4> | |||
nbf-claim-label = JC<"nbf", 5> | nbf-claim-label = JC<"nbf", 5> | |||
iat-claim-label = JC<"iat", 6> | iat-claim-label = JC<"iat", 6> | |||
cti-claim-label = CBOR-ONLY<7> ; jti in JWT: different name and text | cti-claim-label = CBOR-ONLY<7> ; jti in JWT: different name and text | |||
JSON-ONLY<J> = J .feature "json" | JSON-ONLY<J> = J .feature "json" | |||
CBOR-ONLY<C> = C .feature "cbor" | CBOR-ONLY<C> = C .feature "cbor" | |||
JC<J,C> = JSON-ONLY<J> / CBOR-ONLY<C> | JC<J,C> = JSON-ONLY<J> / CBOR-ONLY<C> | |||
JC<J,C> = J .feature "json" / C .feature "cbor" | ||||
; A JWT message is either a JSON Web Signature (JWS) or a JSON Web | ; A JWT message is either a JSON Web Signature (JWS) or a JSON Web | |||
; Encryption (JWE) in compact serialization form with the payload | ; Encryption (JWE) in compact serialization form with the payload | |||
; as a Claims-Set. Compact serialization is the protected headers, | ; as a Claims-Set. Compact serialization is the protected headers, | |||
; payload, and signature that are each b64url-encoded and separated | ; payload, and signature that are each b64url-encoded and separated | |||
; by a ".". This CDDL simply matches the top-level syntax of a JWS | ; by a ".". This CDDL simply matches the top-level syntax of a JWS | |||
; or JWE as it is not possible to do more in CDDL. | ; or JWE as it is not possible to do more in CDDL. | |||
JWT-Message = | JWT-Message = | |||
text .regexp "[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+" | text .regexp "[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+" | |||
End of changes. 10 change blocks. | ||||
18 lines changed or deleted | 27 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |