Skip to content

Commit d4adfb1

Browse files
authored
Include Optional non verifiable Claims into EAT Profile (#69)
Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>
1 parent ffa218d commit d4adfb1

File tree

3 files changed

+151
-21
lines changed

3 files changed

+151
-21
lines changed

specifications/ietf-eat-profile/bibliography.yaml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,24 @@ references:
3434
year: 2020
3535
month: 11
3636
url: "https://datatracker.ietf.org/doc/html/rfc9360"
37-
37+
- id: "ietf-rfc9711"
38+
title: "The Entity Attestation Token (EAT)"
39+
publisher: "IETF"
40+
issued:
41+
year: 2025
42+
month: 4
43+
url: "https://datatracker.ietf.org/doc/rfc9711/"
44+
- id: "ietf-rfc8392"
45+
title: "CBOR Web Token (CWT)"
46+
publisher: "IETF"
47+
issued:
48+
year: 2018
49+
month: 5
50+
url: "https://datatracker.ietf.org/doc/html/rfc8392/"
51+
- id: "ietf-rfc8949"
52+
title: "Concise Binary Object Representation (CBOR)"
53+
publisher: "IETF"
54+
issued:
55+
year: 2020
56+
month: 12
57+
url: "https://datatracker.ietf.org/doc/html/rfc8949"

specifications/ietf-eat-profile/cddl/ietf_eat_ocp_profile.cddl

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,52 @@
11
cwt-eat = {
2-
; The EAT Profile for OCP OID
3-
&(EAT Profile : 265 ) => ~oid ; TODO: OCP Security to assign a value - note: `~` strips CBOR tag #6.111(oid) from `oid`
2+
; Mandatory Claims
43

5-
; Issuer claim is StringOrURI (tstr)
4+
; Issuer claim is StringOrURI (tstr) (Mandatory)
65
&(iss : 1) => tstr
76

8-
; Nonce claim is nonce-type = bstr .size (8..64)
9-
&(Nonce : 10) => bstr
7+
; CTI claim for token uniqueness (Mandatory)
8+
&(cti : 7) => bstr .size (8..64)
9+
10+
; Nonce claim is nonce-type = bstr .size (8..64) (Mandatory)
11+
&(Nonce : 10) => bstr .size (8..64)
12+
13+
; Debug status claim (Mandatory) // dbgstat-type is defined in https://datatracker.ietf.org/doc/rfc9711/
14+
&(dbgstat : 263) => dbgstat-type
1015

11-
; EAT measurements claim is defined in section-4.2.16
16+
; The EAT Profile for OCP OID (Mandatory) // eat-profile is defined in https://datatracker.ietf.org/doc/rfc9711/
17+
&(EAT Profile : 265 ) => ~oid ; TODO: OCP Security to assign a value - note: `~` strips CBOR tag #6.111(oid) from `oid`
18+
19+
; EAT measurements (Mandatory)
1220
&(Measurements : 273) => measurements-type
1321

14-
; Private Claims (they have to be < -65536 for rfc8392) per RFC 8392
22+
; Optional Claims
1523

16-
; CoRIM Locator Map (Optional)
24+
; CoRIM Locator Map (Optional) // corim-locator-map is defined in https://datatracker.ietf.org/doc/draft-ietf-rats-corim/
1725
? &(rim-locators : -70001) => [ + corim-locator-map]
26+
27+
; DLOA claim (Optional) // dloa-type is defined in https://datatracker.ietf.org/doc/rfc9711/
28+
? &(dloas : 269) => [ + dloa-type ]
29+
30+
; UEID claim (Optional)
31+
? &(ueid : 256) => bstr .size (7..33)
32+
33+
; OEM ID claim (Optional) // oemid-type is defined in https://datatracker.ietf.org/doc/rfc9711/
34+
? &(oemid : 258) => oemid-type
35+
36+
; Hardware model claim (Optional)
37+
? &(hwmodel : 259) => bytes .size (1..32)
38+
39+
; Uptime claim (Optional)
40+
? &(uptime : 261) => uint
41+
42+
; Boot count claim (Optional)
43+
? &(bootcount : 267) => uint
44+
45+
; Boot seed claim (Optional)
46+
? &(bootseed : 268) => bstr .size (32..64)
47+
48+
; Private Claims (up to 5, must be < -65536 per RFC 8392)
49+
* $$private-claims => any
1850
}
1951

2052
; The concise-evidence-map CDDL is defined in

specifications/ietf-eat-profile/spec.ocp

Lines changed: 90 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -154,20 +154,99 @@ in the unsigned section of the COSE_Sign1 header.
154154
## CWT Claim Set
155155

156156
The CWT claim set is intentionally minimalistic, serving primarily as an
157-
integrity-protected wrapper for concise evidence.
157+
integrity-protected wrapper for concise evidence. The claims are divided into
158+
mandatory and optional categories to balance attestation requirements with
159+
implementation flexibility.
158160

159-
1. **EAT Profile**
161+
**Claim Ordering**: To ensure consistent CBOR serialization and maximize
162+
interoperability across different implementations, **all claims MUST**
163+
be reported following the CBOR deterministic encoding requirements as specified
164+
in [@{ietf-rfc8949}].
165+
Specifically, the keys in the CWT map **MUST** be sorted in the bytewise
166+
lexicographic order of their deterministic encodings. This ordering convention
167+
applies to mandatory claims, optional claims, and private claims when present.
168+
169+
**Mandatory Claims (1-6)**: These claims are **REQUIRED** for all attestations
170+
and provide the minimum necessary information for verifier appraisal policies:
171+
172+
1. **issuer** (claim key: 1, encoded as 0x01)
173+
* This claim is used by the attester to bind the EAT to the certificate chain that issued it. It **SHALL** match the SUBJECT Common Name of the Attestation Key (AK) Certificate.
174+
175+
2. **cti** (claim key: 7, encoded as 0x07)
176+
* This claim is used by the attester to determine the uniqueness of the token. Refer to [@{ietf-rfc8392}] for acceptable values for this claim
177+
178+
3. **Nonce** (claim key: 10, encoded as 0x0a)
179+
* This claim is used by the attester to ensure the freshness of the response. Refer to [@{ietf-rfc9711}] for acceptable values for this claim
180+
181+
4. **dbgstat** (claim key: 263, encoded as 0x190107)
182+
* This claim is used by the attester to determine whether the attester is in Debug mode. Refer to [@{ietf-rfc9711}] for acceptable values for this claim
183+
184+
5. **EAT Profile** (claim key: 265, encoded as 0x190109)
160185
* This claim is used by the attester to identify the profile. It **MUST** be present and **SHALL** contain the OID assigned to the OCP Profile. **TODO: OCP to assign OID Value**
161-
2. **issuer**
162-
* This claim is optionally used by the attester to bind the EAT to the certificate chain that issued it. If present, **SHALL** match the SUBJECT Common Name of the Attestation Key (AK) Certificate.
163-
3. **Nonce**
164-
* This claim is used by the attester to ensure the freshness of the response. It **MUST** be present and **SHALL** be a string or an array of strings. It **SHALL** contain as minimum the nonce value passed by the requester.
165-
4. **Measurements**
166-
* This claim is used by the attester to present the target environment claims that verifier will consume for the appraisal policy. It **MUST** be present and **SHALL** encapsulate a “concise-evidence” using the appropriate IANA media type.
167-
5. **rim-locators**
168-
* This claim is used by the attester to point the verifier to the rim repository. If present, **SHALL** be an array of corim-locator-map (as defined by the IETF CoRIM Draft).
169186

170-
The cwt-eat statement is defined as follows:
187+
6. **Measurements** (claim key: 273, encoded as 0x190111)
188+
* This claim is used by the attester to present the target environment claims that verifier will consume for the appraisal policy. It **MUST** be present and **SHALL** encapsulate a "concise-evidence" as a serialized CBOR byte string using the appropriate IANA media type. The serialized concise-evidence **SHALL NOT** exceed 128kB in size.
189+
190+
**Optional Claims (7-14)**: These claims are **OPTIONAL** and provide additional
191+
platform information that may be useful for audit purposes but are not strictly
192+
necessary for appraisal policies. These claims are typically non-verifiable and
193+
serve informational purposes:
194+
195+
7. **ueid** (claim key: 256, encoded as 0x190100)
196+
* This claim is used by the attester to identify the attester. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
197+
198+
8. **oemid** (claim key: 258, encoded as 0x190102)
199+
* This claim is used by the attester to identify the Original Equipment Manufacturer (OEM) of the hardware. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
200+
201+
9. **hwmodel** (claim key: 259, encoded as 0x190103)
202+
* This claim is used by the attester to differentiate hardware models, products, and variants manufactured by a particular OEM. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
203+
204+
10. **uptime** (claim key: 261, encoded as 0x190105)
205+
* This claim is used by the attester to indicate the number of seconds elapsed since boot. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
206+
207+
11. **bootcount** (claim key: 267, encoded as 0x19010b)
208+
* This claim is used by the attester to indicate the number of times the attester has booted. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
209+
210+
12. **bootseed** (claim key: 268, encoded as 0x19010c)
211+
* This claim is used by the attester to differentiate boot sessions. If present, refer to [@{ietf-rfc9711}] for acceptable values for this claim
212+
213+
13. **dloas** (claim key: 269, encoded as 0x19010d)
214+
* This claim is used by the attester to point the verifier to the endorsement repository (one example, OCP SAFE). If present, refer to [@{ietf-rfc9711}] for the claim structure.
215+
216+
14. **rim-locators** (claim key: -70001, encoded as 0x3a00011170)
217+
* This claim is used by the attester to point the verifier to the rim repository. If present, **SHALL** be an array of corim-locator-map (refer to [@{ietf-rats-corim}]).
218+
219+
220+
**Private Claims**: In addition to the standard claims defined above, this
221+
profile allows for up to 5 implementor-specific private claims. These claims
222+
are **OPTIONAL** and **MAY** be included to address vendor-specific requirements
223+
or unique platform characteristics. Private claims **MUST** use claim keys less
224+
than -65536 per RFC 8392. When present, private claims follow the deterministic
225+
encoding order and appear after all standard claims. Each private claim **SHOULD**
226+
be limited to 100 bytes in size to ensure efficient transmission and processing.
227+
228+
The following private claim keys are reserved for implementor use:
229+
- **Private claim 1** (claim key: -70002, encoded as 0x3a00011171, optional)
230+
- **Private claim 2** (claim key: -70003, encoded as 0x3a00011172, optional)
231+
- **Private claim 3** (claim key: -70004, encoded as 0x3a00011173, optional)
232+
- **Private claim 4** (claim key: -70005, encoded as 0x3a00011174, optional)
233+
- **Private claim 5** (claim key: -70006, encoded as 0x3a00011175, optional)
234+
235+
**Size Limitations**: To maintain efficiency and interoperability, the following
236+
size constraints apply:
237+
238+
* The complete CWT token (including the certificate chain in the unprotected header) **SHALL NOT** exceed 64kB. This limitation aligns with the SPDM Measurement block size limit, as most OCP Attesters are expected to rely on SPDM for EAT conveyance.
239+
* Each vendor-specific private claim **SHOULD NOT** exceed 100 bytes
240+
* Each URI value in any claim **SHOULD NOT** exceed 100 bytes
241+
* Each text string value in any claim **SHOULD NOT** exceed 100 bytes
242+
243+
**Appraisal Policy Considerations**: For verifier appraisal policies, the
244+
mandatory claims (1-6) **SHALL** be sufficient to establish the security
245+
posture of the attesting platform. Optional claims provide supplementary
246+
information that enhances visibility into platform state and configuration but
247+
are not critical for basic attestation verification. Verifiers **MAY** choose
248+
to incorporate optional claims into their policies based on specific security
249+
requirements or audit needs.
171250

172251
## CWT Integrity Protection
173252

@@ -214,7 +293,6 @@ Each Target Environment **SHOULD** comprehensively describe three key components
214293
* Vendor ID
215294
* Product ID
216295
* Digest of FW journey to reflect impactless update since last cold reboot
217-
* List of FW version since last cold reboot
218296
* Flags Attributes that indicate specific firmware states or configurations like debug mode or production mode, anti-roll back enable or disable
219297

220298
The table below maps the above entries with the reference-triple dictionary structure:

0 commit comments

Comments
 (0)