blob: 034ab830896e7e9b3f620817acfcc427e89e9813 [file] [view]
# SPDM
SPDM OpenPRoT devices shall use SPDM to conduct all attestation operations both
with downstream devices (as a requester) and upstream devices (as a responder.)
Devices may choose to act as a requester, a responder, or both. All SPDM version
references assume alignment with the most recently released versions of the spec.
## OCP Attestation Spec 1.1 Alignment
OpenPRoT implementations of SPDM must align with the
[OCP Attestation Spec 1.1](https://github.com/google/spdm-accelerator-requirement/blob/main/OCP-Attestation-v1.1.docx.pdf).
All following sections have taken this spec into account. Please refer to that
specification for details on specific requirements.
## Baseline Version
OpenPRoT sets a baseline version of SPDM 1.2.
## Requesters
OpenPRoT devices implementing an SPDM requester will implement support for SPDM
1.2 minimum and may implement SPDM 1.3 and up. The minimum and maximum supported
SPDM versions can be changed if support for other versions is not necessary.
## Responders
OpenPRoT devices implementing an SPDM responder must implement support for SPDM
1.2 or higher. Responders may only report (via `GET_VERSION`) a single supported
version of SPDM.
## Required Commands
All requesters and responders shall implement the four (4) *spec mandatory* SPDM
commands:
* `GET_VERSION`
* `GET_CAPABILITIES`
* `NEGOTIATE_ALGORITHMS`
* `RESPOND_IF_READY`
All requesters and responders shall implement the following *spec optional*
commands:
* `GET_DIGESTS`
* `GET_CERTIFICATE`
* `CHALLENGE`
* `GET_MEASUREMENTS`
* `GET_CSR`
* `SET_CERTIFICATE`
* `CHUNK_SEND`
* `CHUNK_GET`
Requesters and responders may implement the following recommended *spec
optional* commands:
* Events
* `GET_SUPPORTED_EVENT_TYPES`
* `SUBSCRIBE_EVENT_TYPES`
* `SEND_EVENT`
* Encapsulated requests
* `GET_ENCAPSULATED_REQUEST`
* `DELIVER_ENCAPSULATED_RESPONSE`
* `GET_KEY_PAIR_INFO`
* `SET_KEY_PAIR_INFO`
* `KEY_UPDATE`
* `KEY_EXCHANGE`
* `FINISH`
* `PSK_EXCHANGE`
* `PSK_FINISH`
All other *spec optional* commands may be implemented as the integrator sees fit
for their use case.
## Required Capabilities
* `CERT_CAP` (required for `GET_CERTIFICATE`)
* `CHAL_CAP` (required for `CHALLENGE`)
* `MEAS_CAP` (required for `GET_MEASUREMENT`)
* `MEAS_FRESH_CAP`
## Algorithms
The following cryptographic algorithms are accepted for use within OpenPRoT, but
may be further constrained by hardware capabilities. At a minimum OpenPRoT
hardware must support:
* `TPM_ALG_ECDSA_ECC_NIST_P384`
* `TPM_ALG_SHA3_384`
All others are optional and may be used if supported.
* Asymmetric
* `TPM_ALG_ECDSA_ECC_NIST_P256`
* `TPM_ALG_ECDSA_ECC_NIST_P384`
* `EdDSA ed25519`
* `EdDSA ed448`
* `TPM_ALG_SHA_384`
* Hash
* `TPM_ALG_SHA_256`
* `TPM_ALG_SHA_384`
* `TPM_ALG_SHA_512`
* `TPM_ALG_SHA3_256`
* `TPM_ALG_SHA3_384`
* `TPM_ALG_SHA3_512`
* AEAD Cipher
* `AES-128-GCM`
* `AES-256-GCM`
* `CHACHA20_POLY1305`
## Attestation Report Format
Devices will support either RATS EAT (as CWT) or an SPDM evidence manifest TOC
per the *TCG DICE Concise Evidence for SPDM* specification.
## Measurement block 0xF0
Devices that do not provide a Measurement Manifest shall locate RATS EAT at SPDM
measurement block 0xF0