Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 99 additions & 0 deletions specifications/attestation-of-system-components/spec.ocp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ The Contributors of this Specification would like to acknowledge the following:
- Wojtek Powiertowski, Facebook, Inc.
- Eric Spada, Broadcom, Inc.
- Ben Stoltz, Google
- Fabrizio D'Amato - AMD

<!---
Please describe how this Specification complies with the OCP tenets.
Expand Down Expand Up @@ -558,6 +559,104 @@ May call these "(strongly) recommended"

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

# GET_EAT Command

## Overview

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 defined in the OCP Command Registry and is designed to be transport-agnostic while providing a standardized interface for attestation requests.

## Command Definition

The GET_EAT command is assigned command code 0x02 in the OCP Command Registry.

### GET_EAT Request

+---------------------+---------------------+---------------------+----------------------------------------------+
| Byte offset | Field | Size (bytes) | Description |
+=====================+=====================+=====================+==============================================+
| 0 | CommandVersion | 1 | The version of this request structure. |
| | | | Shall be zero. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 1 | CommandCode | 1 | Shall be 02h to indicate GET_EAT. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 2 | Reserved | 2 | Reserved. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 4 | NonceLength | 1 | Shall be the length of the Nonce field |
| | | | in bytes. Shall be between 8 and 64 bytes. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 5 | Nonce | NonceLength | The Requester shall choose a random |
| | | | value to ensure freshness. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 5 + NonceLength | SignerSlotID | 1 | Shall be the SlotID. Slot number of the |
| | | | Responder certificate chain that shall |
| | | | be used for signing the EAT. |
+---------------------+---------------------+---------------------+----------------------------------------------+

### GET_EAT Response

For successful responses, the following structure is returned:

+---------------------+---------------------+---------------------+----------------------------------------------+
| Byte offset | Field | Size (bytes) | Description |
+=====================+=====================+=====================+==============================================+
| 0 | CommandVersion | 1 | The version of this response structure. |
| | | | Shall be zero. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 1 | CommandCode | 1 | Shall be 02h to indicate GET_EAT. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 2 | Reserved | 2 | Reserved. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 4 | EATLength | 4 | Shall be the length of the EATToken |
| | | | field in bytes. Note: For large EAT tokens, |
| | | | transport protocols may provide mechanisms |
| | | | such as chunking or streaming to manage |
| | | | buffer limitations. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 8 | EATToken | EATLength | Shall be the Entity Attestation Token |
| | | | conforming to the OCP EAT Profile. |
+---------------------+---------------------+---------------------+----------------------------------------------+

**Note**: Error conditions are reported using transport-specific error mechanisms with error codes from the OCP Error Registry.

## EAT Token Requirements

The EATToken returned in the GET_EAT response **MUST** conform to the OCP EAT Profile specification, which includes:

1. The EAT **MUST** be encoded as a signed CWT (CBOR Web Token)
2. The EAT Profile claim (265) **MUST** be present and contain the OCP Profile OID
3. The Nonce claim (10) **MUST** be present and contain the exact nonce value from the request (matching both value and length)
4. The Measurements claim (273) **MUST** be present and contain concise evidence as defined in the OCP EAT Profile
5. The issuer claim (1) **MUST** be present to bind the EAT to the certificate chain that issued it
6. The rim-locators claim (-70001) **MAY** be present to reference CoRIM locations

**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.

## Transport Bindings

### SPDM Binding

When transported over SPDM, the GET_EAT command utilizes the VENDOR_DEFINED mechanism as specified in the OCP Command Registry.

For SPDM binding:
- The SignerSlotID field **MUST** correspond to SPDM certificate slot numbers

For detailed SPDM transport binding requirements including:
- VENDOR_DEFINED message structure
- Success and error case handling
- ExtendedErrorData usage
- Command framing specifications

Please refer to the OCP Command Registry specification.

### Native Transport Bindings

TSM engines and other transport mechanisms **MAY** define their own bindings for the GET_EAT command, provided they:

- Maintain semantic equivalence of request and response structures
- Preserve all required fields and their meanings
- Implement appropriate error reporting using transport-native mechanisms
- Document any transport-specific adaptations

# Measurement collection and storage

## REQUIREMENTS - What to measure and what not to measure {#sec:requirements-what-to-measure-and-what-not-to-measure}
Expand Down
16 changes: 8 additions & 8 deletions specifications/device-identity-provisioning/spec.ocp
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,12 @@ Table: GET_ENVELOPE_SIGNED_CSR VendorDefinedReqPayload {#tbl:ecsr-req}
+---------------------+---------------------+---------------------+----------------------------------------------+
| Byte offset | Field | Size (bytes) | Description |
+=====================+=====================+=====================+==============================================+
| 0 | CommandCode | 1 | Shall be 01h to indicate |
| | | | GET_ENVELOPE_SIGNED_CSR. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 1 | CommandVersion | 1 | The version of this request structure. |
| 0 | CommandVersion | 1 | The version of this request structure. |
| | | | Shall be zero. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 1 | CommandCode | 1 | Shall be 01h to indicate |
| | | | GET_ENVELOPE_SIGNED_CSR. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 2 | Reserved | 4 | Reserved. |
+---------------------+---------------------+---------------------+----------------------------------------------+
| 6 | Param1 | 1 | KeyPairID. The value of this field |
Expand Down Expand Up @@ -281,12 +281,12 @@ Table: ENVELOPE_SIGNED_CSR VendorDefinedRespPayload {#tbl:ecsr-resp}
| Byte | Field | Size (bytes) | Description |
| offset | | | |
+========+=========================+=========================+==========================================+
| 0 | CommandCode | 1 | Shall be 01h to indicate |
| | | | ENVELOPE_SIGNED_CSR. |
+--------+-------------------------+-------------------------+------------------------------------------+
| 1 | CommandVersion | 1 | The version of this request structure. |
| 0 | CommandVersion | 1 | The version of this request structure. |
| | | | Shall be zero. |
+--------+-------------------------+-------------------------+------------------------------------------+
| 1 | CommandCode | 1 | Shall be 01h to indicate |
| | | | ENVELOPE_SIGNED_CSR. |
+--------+-------------------------+-------------------------+------------------------------------------+
| 2 | Reserved | 4 | Reserved. |
+--------+-------------------------+-------------------------+------------------------------------------+
| 6 | EnvelopeSignedCSRLength | 2 | Shall be the length of the |
Expand Down
2 changes: 1 addition & 1 deletion specifications/ietf-eat-profile/spec.ocp
Original file line number Diff line number Diff line change
Expand Up @@ -282,4 +282,4 @@ The following example illustrates a CWT containing claims for three target envir

```include {.small}
TODO: fill in with a diag
```
```