Skip to content

Commit 24ec343

Browse files
authored
Add GET_EAT Support to OCP Profile (#60)
* Add GET_EAT Support to OCP Profile Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * - Create central registry for OCP VENDOR_DEFINED command codes - Updated Contributors list Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Address Reviews: - Replace Requester with Verifier - Swap Command Version and Command Code - Strip unnecessary description of Security Considerations - Add Clarification for large buffer handling Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Address OCP Feedback on NONCE length, and remove OCP Command Registry from Attestation Main Spec Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Address feedback: - Change SHALL with MUST - Move GetEAT to OCP Attestation Specification - Defer Error Reporting to underlying transport mechanism Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Address few feedbacks Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Fix Responder -> Attester Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Revert ietf-eat-profile/spec.ocp Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * Add OCP Command Registry to bibliography.yml Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> * few stylistic fixes Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com> --------- Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>
1 parent 70f55f6 commit 24ec343

File tree

3 files changed

+117
-8
lines changed

3 files changed

+117
-8
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
references:
2+
- id: "ocp-command-registry"
3+
title: "OCP Command Registry"
4+
publisher: "Open Compute Project"
5+
issued:
6+
year: 2025
7+
month: 9
8+
url: "https://github.com/opencomputeproject/ocp-registry/blob/main/command-registry.md"

specifications/attestation-of-system-components/spec.ocp

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ The Contributors of this Specification would like to acknowledge the following:
6565
- Wojtek Powiertowski, Facebook, Inc.
6666
- Eric Spada, Broadcom, Inc.
6767
- Ben Stoltz, Google
68+
- Fabrizio D'Amato - AMD
6869

6970
<!---
7071
Please describe how this Specification complies with the OCP tenets.
@@ -558,6 +559,106 @@ May call these "(strongly) recommended"
558559

559560
See <https://github.com/opencomputeproject/Security/tree/main/specifications/ietf-eat-profile>.
560561

562+
# GET_EAT Command
563+
564+
## Overview
565+
566+
The GET_EAT command enables verifiers to obtain attestation evidence from a device in the form of an Entity Attestation Token (EAT) that conforms to the OCP EAT Profile. This command is allocated in the [@{ocp-command-registry}] and is designed to be transport-agnostic while providing a standardized interface for attestation requests.
567+
568+
## Command Definition
569+
570+
The GET_EAT command is assigned command code 0x02 in the [@{ocp-command-registry}].
571+
572+
### GET_EAT Request
573+
574+
+---------------------+---------------------+---------------------+----------------------------------------------+
575+
| Byte offset | Field | Size (bytes) | Description |
576+
+=====================+=====================+=====================+==============================================+
577+
| 0 | CommandVersion | 1 | The version of this request structure. |
578+
| | | | Shall be zero. |
579+
+---------------------+---------------------+---------------------+----------------------------------------------+
580+
| 1 | CommandCode | 1 | Shall be 02h to indicate GET_EAT. |
581+
+---------------------+---------------------+---------------------+----------------------------------------------+
582+
| 2 | Reserved | 2 | Reserved. |
583+
+---------------------+---------------------+---------------------+----------------------------------------------+
584+
| 4 | NonceLength | 1 | Shall be the length of the Nonce field |
585+
| | | | in bytes. Shall be between 8 and 64 bytes. |
586+
+---------------------+---------------------+---------------------+----------------------------------------------+
587+
| 5 | Nonce | NonceLength | The Verifier shall choose a random |
588+
| | | | value to ensure freshness. |
589+
+---------------------+---------------------+---------------------+----------------------------------------------+
590+
| 5 + NonceLength | SignerSlotID | 1 | Shall be the SlotID. Slot number of the |
591+
| | | | Attester certificate chain that shall |
592+
| | | | be used for signing the EAT. |
593+
+---------------------+---------------------+---------------------+----------------------------------------------+
594+
595+
### GET_EAT Response
596+
597+
For successful responses, the following structure is returned:
598+
599+
+---------------------+---------------------+---------------------+----------------------------------------------+
600+
| Byte offset | Field | Size (bytes) | Description |
601+
+=====================+=====================+=====================+==============================================+
602+
| 0 | CommandVersion | 1 | The version of this response structure. |
603+
| | | | Shall be zero. |
604+
+---------------------+---------------------+---------------------+----------------------------------------------+
605+
| 1 | CommandCode | 1 | Shall be 02h to indicate GET_EAT. |
606+
+---------------------+---------------------+---------------------+----------------------------------------------+
607+
| 2 | Reserved | 2 | Reserved. |
608+
+---------------------+---------------------+---------------------+----------------------------------------------+
609+
| 4 | EATLength | 4 | Shall be the length of the EATToken |
610+
| | | | field in bytes. Note: For large EAT tokens, |
611+
| | | | transport protocols may provide mechanisms |
612+
| | | | such as chunking or streaming to manage |
613+
| | | | buffer limitations. |
614+
+---------------------+---------------------+---------------------+----------------------------------------------+
615+
| 8 | EATToken | EATLength | Shall be the Entity Attestation Token |
616+
| | | | conforming to the OCP EAT Profile. |
617+
+---------------------+---------------------+---------------------+----------------------------------------------+
618+
619+
**Note**: Error conditions are reported using transport-specific error mechanisms with error codes from [@{ocp-command-registry}].
620+
621+
## EAT Token Requirements
622+
623+
The EATToken returned in the GET_EAT response **MUST** conform to the OCP EAT Profile specification, which includes:
624+
625+
1. The EAT **MUST** be encoded as a signed CWT (CBOR Web Token)
626+
2. The EAT Profile claim (265) **MUST** be present and contain the OCP Profile OID
627+
3. The Nonce claim (10) **MUST** be present and contain the exact nonce value from the request (matching both value and length)
628+
4. The Measurements claim (273) **MUST** be present and contain concise evidence as defined in the OCP EAT Profile
629+
5. The issuer claim (1) **MUST** be present to bind the EAT to the certificate chain that issued it
630+
6. The rim-locators claim (-70001) **MAY** be present to reference CoRIM locations
631+
632+
**Note:** The nonce claim in the EAT response must preserve both the value and length of the nonce provided in the GET_EAT request to ensure proper freshness verification.
633+
634+
## Transport Bindings
635+
636+
### SPDM Binding
637+
638+
When transported over SPDM, the GET_EAT command utilizes the VENDOR_DEFINED mechanism as specified in the [@{ocp-command-registry}].
639+
640+
For SPDM binding:
641+
642+
- The SignerSlotID field **MUST** correspond to SPDM certificate slot numbers
643+
644+
For detailed SPDM transport binding requirements including:
645+
646+
- VENDOR_DEFINED message structure
647+
- Success and error case handling
648+
- ExtendedErrorData usage
649+
- Command framing specifications
650+
651+
Please refer to the [@{ocp-command-registry}] specification.
652+
653+
### Native Transport Bindings
654+
655+
TSM engines and other transport mechanisms **MAY** define their own bindings for the GET_EAT command, provided they:
656+
657+
- Maintain semantic equivalence of request and response structures
658+
- Preserve all required fields and their meanings
659+
- Implement appropriate error reporting using transport-native mechanisms
660+
- Document any transport-specific adaptations
661+
561662
# Measurement collection and storage
562663

563664
## REQUIREMENTS - What to measure and what not to measure {#sec:requirements-what-to-measure-and-what-not-to-measure}

specifications/device-identity-provisioning/spec.ocp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,12 @@ Table: GET_ENVELOPE_SIGNED_CSR VendorDefinedReqPayload {#tbl:ecsr-req}
209209
+---------------------+---------------------+---------------------+----------------------------------------------+
210210
| Byte offset | Field | Size (bytes) | Description |
211211
+=====================+=====================+=====================+==============================================+
212-
| 0 | CommandCode | 1 | Shall be 01h to indicate |
213-
| | | | GET_ENVELOPE_SIGNED_CSR. |
214-
+---------------------+---------------------+---------------------+----------------------------------------------+
215-
| 1 | CommandVersion | 1 | The version of this request structure. |
212+
| 0 | CommandVersion | 1 | The version of this request structure. |
216213
| | | | Shall be zero. |
217214
+---------------------+---------------------+---------------------+----------------------------------------------+
215+
| 1 | CommandCode | 1 | Shall be 01h to indicate |
216+
| | | | GET_ENVELOPE_SIGNED_CSR. |
217+
+---------------------+---------------------+---------------------+----------------------------------------------+
218218
| 2 | Reserved | 4 | Reserved. |
219219
+---------------------+---------------------+---------------------+----------------------------------------------+
220220
| 6 | Param1 | 1 | KeyPairID. The value of this field |
@@ -281,12 +281,12 @@ Table: ENVELOPE_SIGNED_CSR VendorDefinedRespPayload {#tbl:ecsr-resp}
281281
| Byte | Field | Size (bytes) | Description |
282282
| offset | | | |
283283
+========+=========================+=========================+==========================================+
284-
| 0 | CommandCode | 1 | Shall be 01h to indicate |
285-
| | | | ENVELOPE_SIGNED_CSR. |
286-
+--------+-------------------------+-------------------------+------------------------------------------+
287-
| 1 | CommandVersion | 1 | The version of this request structure. |
284+
| 0 | CommandVersion | 1 | The version of this request structure. |
288285
| | | | Shall be zero. |
289286
+--------+-------------------------+-------------------------+------------------------------------------+
287+
| 1 | CommandCode | 1 | Shall be 01h to indicate |
288+
| | | | ENVELOPE_SIGNED_CSR. |
289+
+--------+-------------------------+-------------------------+------------------------------------------+
290290
| 2 | Reserved | 4 | Reserved. |
291291
+--------+-------------------------+-------------------------+------------------------------------------+
292292
| 6 | EnvelopeSignedCSRLength | 2 | Shall be the length of the |

0 commit comments

Comments
 (0)