device-identity-provisioning: add keypair discovery and rename to Att…#98
Conversation
…ested CSR Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>
- KeyPairID 0 sentinel: drop version pin, clarify 0 is not a valid KeyPairID - Make discovery/CSR responses always attested; remove SignerSlotIDParam attestation toggle (Bit [4]) and conditional signing language - Remove standard issuer claim requirement from discovery EAT - Note KeyPairID values match SPDM; add pointer to CDDL definition - VENDOR_DEFINED_REQUEST 'of SPDM 1.3 and later' - kid is SHA-384 of the Attestation Key cert chain (same as SPDM DIGEST) - diag: update kid comments and extend nonces to 32 bytes Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>
|
Following up on our earlier discussion on attesting components involved in Attested CSR key derivation. Recap
ProposalDefine a CDDL map: OID -> Bitfield.
Why this helps
Would this approach work for the team? Happy to hear objections or gaps. |
|
I think it's a good idea starting point, Fabrizio.
|
4cebb43 to
bd80546
Compare
… review fixes Signed-off-by: Fabrizio Damato <fabrizio.damato@amd.com>
bd80546 to
a5ef301
Compare
xiaoyuruan
left a comment
There was a problem hiding this comment.
The Friday WG reviewed this PR and approved it. Great job Fabrizio!
| ; Bitfields are cumulative: each key's bitfield includes the | ||
| ; derivation components inherited from its ancestor keys. |
There was a problem hiding this comment.
| ; Bitfields are cumulative: each key's bitfield includes the | |
| ; derivation components inherited from its ancestor keys. | |
| ; In a typical DICE implementation, bitfields are cumulative: each key's | |
| ; bitfield includes the derivation components inherited from its ancestor keys. |
| - `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. Bits [3:0] select the SPDM slot whose Attestation Key signs the CWT. The discovery response SHALL be attested so that the inventory is attestable. | ||
| - `Nonce` SHALL be a fresh random value chosen by the Requester, and is used to bind the discovery response to this request. |
There was a problem hiding this comment.
| - `Nonce` SHALL be a fresh random value chosen by the Requester, and is used to bind the discovery response to this request. | |
| - `Nonce` SHOULD be a fresh random value chosen by the Requester, and is used to bind the discovery response to this request. |
This spec isn't normative on the Requester - it describes how the Responder must behave.
In particular, there are use-cases where nonces are not 100% random, and are instead a concatenation or a hash of multiple values.
| - The GET_ATTESTED_CSR request and ATTESTED_CSR response forms the payload in the VendorDefinedReqPayload and VendorDefinedRespPayload respectively, defined in Tables [-@tbl:ecsr-req] and [-@tbl:ecsr-resp]. | ||
|
|
||
| Table: GET_ENVELOPE_SIGNED_CSR VendorDefinedReqPayload {#tbl:ecsr-req} | ||
| Table: GET_ATTESTED_CSR VendorDefinedReqPayload {#tbl:ecsr-req} |
There was a problem hiding this comment.
| Table: GET_ATTESTED_CSR VendorDefinedReqPayload {#tbl:ecsr-req} | |
| Table: GET_ATTESTED_CSR VendorDefinedReqPayload {#tbl:acsr-req} |
Global s/ecsr/acsr/ to match the move from ENVELOPE_SIGNED_CSR to ATTESTED_CSR?
| +--------+-------------------------+-------------------------+------------------------------------------+ | ||
| | 8 | EnvelopeSignedCSRdata | EnvelopeSignedCSRLength | Shall be the requested contents of the | | ||
| | | | | envelope-signed CSR. This field shall be | | ||
| | 8 | AttestedCSRdata | AttestedCSRLength | Shall be the requested contents of the | |
There was a problem hiding this comment.
| | 8 | AttestedCSRdata | AttestedCSRLength | Shall be the requested contents of the | | |
| | 8 | AttestedCSRdata | AttestedCSRLength | Shall be the requested contents of the | |
| - **Bit 4 — FIRST_MUTABLE_CODE**: The first mutable code layer (FMC). | ||
| - **Bit 5 — RUNTIME_FIRMWARE**: The runtime firmware layer. | ||
|
|
||
| The bitfield is cumulative across the device's identity key hierarchy: a keypair's bitfield SHALL include every derivation component that contributed to it, including those inherited from its ancestor keys. A key's bitfield is therefore the union (bitwise OR) of the components introduced at its own derivation step and the bitfields of all of its ancestors. Because the property is cumulative, a descendant key's bitfield can never clear a bit that is set in an ancestor key's bitfield. |
There was a problem hiding this comment.
| The bitfield is cumulative across the device's identity key hierarchy: a keypair's bitfield SHALL include every derivation component that contributed to it, including those inherited from its ancestor keys. A key's bitfield is therefore the union (bitwise OR) of the components introduced at its own derivation step and the bitfields of all of its ancestors. Because the property is cumulative, a descendant key's bitfield can never clear a bit that is set in an ancestor key's bitfield. | |
| The bitfield for a given key is a complete enumeration of all derivation components that contributed to that keypair. In typical DICE implementations, a given key's bitfield will be the union (bitwise OR) of the components introduced at its own derivation step and the bitfields of all of its ancestors. For such implementations, a descendant key's bitfield can never clear a bit that is set in an ancestor key's bitfield. |
…ested CSR