Skip to content

device-identity-provisioning: add keypair discovery and rename to Att…#98

Open
fdamato wants to merge 1 commit into
opencomputeproject:mainfrom
fdamato:fadamato/device_identity_prov_attested_csr_discovery
Open

device-identity-provisioning: add keypair discovery and rename to Att…#98
fdamato wants to merge 1 commit into
opencomputeproject:mainfrom
fdamato:fadamato/device_identity_prov_attested_csr_discovery

Conversation

@fdamato
Copy link
Copy Markdown
Collaborator

@fdamato fdamato commented May 27, 2026

…ested CSR

…ested CSR

Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>

1. The `KeyPairID` as a CBOR unsigned integer in the range `1..255`.
2. An array of OIDs describing the derivation attributes of that keypair, drawn from the OIDs defined in @sec:defined-oids.

Copy link
Copy Markdown

@xiaoyuruan xiaoyuruan May 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Place a pointer to the CDDL definition.

/ protected / <<{
/ alg-id / 1 : 7,
/ content-type / 3 : "application/eat+cbor",
; SHA-384 digest of the Attestation Key (i.e. the SPDM Signing Key)
Copy link
Copy Markdown

@xiaoyuruan xiaoyuruan May 29, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change to hash of cert chain (same as DIGEST response)

/ unprotected / {},
/ payload / <<{
/ iss / 1 : "RT Alias Key",
/ nonce / 10 : h'AAAABBBBAAAABBBBAAAABBBB',
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change to 32 bytes same as SPDM nonce

TODO: fill in
A device may expose multiple identity keypairs (e.g., IDevID, LDevID, and other vendor- or owner-defined keys), each with its own derivation inputs. Before a PKI owner can select a suitable PKI anchor point, it must discover which keypairs the device supports and which derivation attributes are associated with each.

This specification reuses the `GET_ATTESTED_CSR` command defined in @sec:establishing-trust-in-identity for keypair discovery, by reserving `KeyPairID = 0` as a discovery sentinel. SPDM 1.3 reserves the value 0 for the `KeyPairID` field, so it is safe to repurpose here without colliding with any valid keypair identifier.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove "1.3". Say "value 0 is not a valid KeyPairID."


- `Param1` (`KeyPairID`) SHALL be `0`, indicating a discovery request rather than a CSR request.
- `Param2` (Request Attributes), `RequesterInfoLength`, `OpaqueDataLength`, `RequesterInfo`, and `OpaqueData` SHALL be `0` / empty. The Responder SHALL ignore any non-zero values in these fields when `KeyPairID` is `0`.
- `SignerSlotIDParam` SHALL be interpreted identically to the CSR case. Bit [4] selects whether the response is attested by an Attestation Key, and bits [3:0] select the SPDM slot whose Attestation Key signs the CWT. Requesters SHOULD request an attested response so that the inventory is attestable.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Should" -> "shall"


When `KeyPairID = 0` is specified in the request, the Responder SHALL return an `ATTESTED_CSR` response whose `AttestedCSRdata` is an EAT encoded as a CWT, with the following requirements:

- The EAT SHALL include the standard issuer claim and a nonce claim whose value matches the `Nonce` provided in the discovery request.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove "the standard issuer claim"


- The EAT SHALL include the standard issuer claim and a nonce claim whose value matches the `Nonce` provided in the discovery request.
- The EAT SHALL NOT include the CSR claim or the derivation-attribute-OID claim defined in @sec:establishing-trust-in-identity. Instead, it SHALL include a single private claim, the *KeyPair Inventory* claim, containing the device's keypair inventory.
- If `SignerSlotIDParam` indicated an attested response, the CWT SHALL be signed by the Attestation Key corresponding to the specified slot, following the same `kid` and signing rules as in @sec:establishing-trust-in-identity.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove "If SignerSlotIDParam indicated an attested response, " as it's always required.


The *KeyPair Inventory* claim SHALL be a CBOR array. Each element SHALL be a CBOR array of two elements:

1. The `KeyPairID` as a CBOR unsigned integer in the range `1..255`.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

KeyPairID is same as SPDM

![Envelope-signed Non-self-signed CSR](./diagrams/envelope_signed_csr_non_self_signed.drawio.svg){#fig:envelope-signed-csr-non-self-signed}
![Attested Non-self-signed CSR](./diagrams/attested_csr_non_self_signed.drawio.svg){#fig:attested-csr-non-self-signed}

This specification provides a definition for a vendor-defined SPDM command, utilizing VENDOR_DEFINED_REQUEST from SPDM 1.3, which can be used to surface these attested CSRs.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"from SPDM 1.3" -> "of SPDM 1.3 and later"

@@ -237,12 +267,13 @@ Table: GET_ENVELOPE_SIGNED_CSR VendorDefinedReqPayload {#tbl:ecsr-req}
+---------------------+---------------------+---------------------+----------------------------------------------+
| 12 | SignerSlotIDParam | 1 | - Bit [7:5]. Reserved. |
| | | | - Bit [4:4]. If this value is `1`, the CSR |
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Signature is always required, so remove Bit [4] def.

- E.g., Slot 0's certificate chain would extend at least to the vendor-endorsed certificate over IDevID. A separate slot's certificate chain would extend at least to the certificate issued by the slot's configured PKI owner.
- A device may report intermediate certificates for the slot's PKI owner if it is configured to do so.
- The nonce claim SHALL match the nonce value provided in the GET_ATTESTED_CSR request to ensure freshness.
- If SignerSlotIDParam indicates an attested response, the CWT SHALL be signed by an Attestation Key endorsed by the certificate chain corresponding to the specified SlotID. The Requester obtains the Attestation Key's certificate chain out-of-band via the SPDM `GET_CERTIFICATE` command for that slot.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove "If SignerSlotIDParam indicates an attested response, " as sig is required

- A device may report intermediate certificates for the slot's PKI owner if it is configured to do so.
- The nonce claim SHALL match the nonce value provided in the GET_ATTESTED_CSR request to ensure freshness.
- If SignerSlotIDParam indicates an attested response, the CWT SHALL be signed by an Attestation Key endorsed by the certificate chain corresponding to the specified SlotID. The Requester obtains the Attestation Key's certificate chain out-of-band via the SPDM `GET_CERTIFICATE` command for that slot.
- If SignerSlotIDParam indicates an attested response, the `kid` parameter (COSE header label `4`) in the CWT's protected header SHALL be the SHA-384 digest of the DER-encoded `SubjectPublicKeyInfo` of the Attestation Key. The Requester uses this digest to confirm that the signing key matches the Attestation Key whose certificate chain it retrieved from the selected SPDM slot.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same as above

- A device may report intermediate certificates for the slot's PKI owner if it is configured to do so.
- The nonce claim SHALL match the nonce value provided in the GET_ATTESTED_CSR request to ensure freshness.
- If SignerSlotIDParam indicates an attested response, the CWT SHALL be signed by an Attestation Key endorsed by the certificate chain corresponding to the specified SlotID. The Requester obtains the Attestation Key's certificate chain out-of-band via the SPDM `GET_CERTIFICATE` command for that slot.
- If SignerSlotIDParam indicates an attested response, the `kid` parameter (COSE header label `4`) in the CWT's protected header SHALL be the SHA-384 digest of the DER-encoded `SubjectPublicKeyInfo` of the Attestation Key. The Requester uses this digest to confirm that the signing key matches the Attestation Key whose certificate chain it retrieved from the selected SPDM slot.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make it hash of cert chain to be consistent with DIGEST
"the DER-encoded SubjectPublicKeyInfo of the Attestation Key"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants