Skip to content

Commit 70a0bff

Browse files
committed
Device Identity Provisioning: Update Details on EAT response to GET_ENVELOPE_SIGNED_CSR
Signed-off-by: Fabrizio Damato <[email protected]>
1 parent 7ff9f8c commit 70a0bff

File tree

3 files changed

+40
-17
lines changed

3 files changed

+40
-17
lines changed

specifications/device-identity-provisioning/cddl/envelope-signed-csr-eat.cddl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
cwt-envelope-signed-csr-eat = {
2-
; Issuer claim is StringOrURI (tstr)
3-
&(iss : 1) => tstr
4-
52
; Nonce claim is nonce-type = bstr .size (8..64)
63
? &(nonce : 10) => bstr
74

specifications/device-identity-provisioning/diag/envelope-signed-csr-eat-example.diag

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
signed-cwt / 18([
22
/ protected / <<{
33
/ alg-id / 1 : 7,
4-
/ content-type / 3 : "application/eat+cbor",
5-
/ kid / 4 : 'RT Alias Key'
4+
/ content-type / 3 : "application/eat+cwt",
5+
/ issuer-key-id / 4 : 'RT Alias Key'
66
}>>,
7-
/ unprotected / {/ x5-chain / 33 : h'59025630820252308201d9a003020102021431a4ef62e5244e4d952ea485976098090d5f242f300a06082a8648ce3d040303307b310b30090603550406130255533113301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e204672616e636973636f311d301b060355040a0c144578616d706c65204f7267616e697a6174696f6e3120301e06035504030c174578616d706c652043575420456e646f7273656d656e74301e170d3235303231333139303230345a170d3236303231343139303230345a307b310b30090603550406130255533113301106035504080c0a43616c69666f726e69613116301406035504070c0d53616e204672616e636973636f311d301b060355040a0c144578616d706c65204f7267616e697a6174696f6e3120301e06035504030c174578616d706c652043575420456e646f7273656d656e743076301006072a8648ce3d020106052b8104002203620004fcd3fad48575addceee9638583aa7054f71a402f35993901923cc0ee9763b85b1e729c740331f4e91079559bce17d5c3b706748333faeb192120e32d815f88f7310ae05df55060f96fbdb2d0acb19e710d25ec27cfa8945fe5dda73332813feda31e301c301a0603551d1104133011820f7777772e6578616d706c652e636f6d300a06082a8648ce3d040303036700306402306e1166a8a3132d4a20e0200a26d1eba0937fec54fdb7547eb7c5ccca0370170853294cdd6b3a1eb0fe649f12446d8b17023071219daf2b7c1aa6f7727d053e1027309594fd8cab9f820fa89d8f88fc7e551c0d30781b12aea48b53fde200e6cf082b' },
87
/ payload / <<{
9-
/ iss / 1 : "RT Alias Key",
108
/ nonce / 10: h'AAAABBBBAAAABBBBAAAABBBB',
119
/ csr / -70001 : h'59025630820252308201d9a003020102021431a4e0',
1210
/ attrib / -70002: [

specifications/device-identity-provisioning/spec.ocp

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -230,14 +230,11 @@ Table: GET_ENVELOPE_SIGNED_CSR VendorDefinedReqPayload {#tbl:ecsr-req}
230230
| | | | bytes. Shall be 0 if no OpaqueData is |
231231
| | | | provided. |
232232
+---------------------+---------------------+---------------------+----------------------------------------------+
233-
| 12 | SignerSlotIDParam | 1 | - Bit [7:5]. Reserved. |
234-
| | | | - Bit [4:4]. If this value is `1`, the CSR |
235-
| | | | envelope is signed; otherwise the envelope |
236-
| | | | is unsigned, and bits [3:0] are ignored. |
233+
| 12 | SignerSlotIDParam | 1 | - Bit [7:4]. Reserved. |
237234
| | | | - Bit [3:0]. Shall be the SlotID. Slot |
238235
| | | | number of the Responder certificate chain |
239236
| | | | that shall be used for authenticating the |
240-
| | | | CSR envelope. If the Responders public key |
237+
| | | | CSR envelope. If the Responder's public key |
241238
| | | | was provisioned to the Requester previously, |
242239
| | | | this field shall be 0xF. |
243240
| | | | For non-SPDM implementations, bits [3:0] |
@@ -317,8 +314,6 @@ The EnvelopeSignedCSRdata shall adhere to the following requirements:
317314

318315
**OCP Security Branch**: `ocp-security OBJECT IDENTIFIER ::= {1 3 6 1 4 1 42623 1}`
319316

320-
**Envelope-signed EAT profile OID**: `ocp-security-dip-eat-profile OBJECT IDENTIFIER ::= {ocp-security 1}`
321-
322317
**Key Derivation Attribute OID Branch**: `ocp-security-dip-kda OBJECT IDENTIFIER ::= {ocp-security 2}`
323318

324319
The following OIDs are defined for key derivation attributes:
@@ -332,6 +327,42 @@ These OIDs indicate which inputs contribute to the derivation of the identity ke
332327

333328
Subsequent versions of this specification may be expanded with additional key derivation attribute OIDs.
334329

330+
#### Envelope-Signed CSR EAT Profile
331+
332+
This specification defines a partial EAT profile for use in the GET_ENVELOPE_SIGNED_CSR response. This is not a complete EAT profile as defined in RFC 9711 because:
333+
334+
1. It does not prescribe specific cryptographic algorithms
335+
2. It is only used as a response to the GET_ENVELOPE_SIGNED_CSR command
336+
3. It does not define all aspects required for a full profile
337+
338+
Therefore, no EAT Profile OID is assigned for this usage.
339+
340+
**Required EAT Claims:**
341+
342+
The EAT contained in EnvelopeSignedCSRdata SHALL include the following claims:
343+
344+
1. **Nonce claim (nonce: 10)** - A binary string between 8 and 64 bytes that MUST match the Nonce value provided in the GET_ENVELOPE_SIGNED_CSR request. This provides freshness and prevents replay attacks.
345+
346+
2. **CSR claim (csr: -70001)** - A binary string containing the DER-encoded Certificate Signing Request. This may be either:
347+
- A self-signed CSR where the signature is generated by the subject key
348+
- A non-self-signed CSR where the signature field contains all zeroes
349+
350+
3. **Key derivation attributes claim (attrib: -70002)** - An array of OIDs indicating which inputs contributed to the derivation of the identity key for which the CSR is being requested. Each OID is encoded according to CBOR OID encoding rules.
351+
352+
**Signature Requirements:**
353+
354+
The EAT SHALL be encoded as a signed CWT using COSE_Sign1. The signature provides authenticity and integrity for the CSR and its associated metadata.
355+
356+
**Key Identification:**
357+
358+
The COSE_Sign1 protected header SHALL include:
359+
- **Algorithm identifier (alg: 1)** - Integer identifying the signature algorithm used
360+
- **Content type (content-type: 3)** - Text string or integer indicating the content type (for EAT, this is typically "application/eat+cwt")
361+
- **Key ID (issuer-key-id: 4)** - Binary string that MUST match the subject name of the certificate containing the public key that can verify the EAT signature
362+
363+
For example, if the EAT is signed by the RT_Alias key, the kid should match the subject field of the RT_Alias certificate.
364+
365+
335366
## Issuing and provisioning an identity certificate {#sec:issuing-and-provisioning-identity-cert}
336367

337368
After establishing trust in a device's identity keypair through the envelope-signed CSR mechanism, a PKI owner can issue and provision an identity certificate to the device. This specification defines OCP-specific commands for certificate provisioning.
@@ -358,9 +389,6 @@ This approach ensures that only identity certificates can be provisioned, as tho
358389
- Optionally, any intermediate CA certificates
359390
- Optionally, the root CA certificate
360391

361-
362-
**Important**: While devices may expose CSRs for various keys in their hierarchy, endorsement chains provisioned via `OCP_SET_ENDORSEMENT` SHALL NOT include LEAF certificates. This ensures that endorsements work across different use cases (e.g., attestation, secure sessions) since each use case may have different LEAF certificates while sharing the same endorsement chain.
363-
364392
**Certificate chain composition**: When provisioning via `OCP_SET_ENDORSEMENT`, the certificate chain SHALL include:
365393
- The PKI-issued identity certificate for the device key (e.g., the LDevID certificate issued by the owner's PKI)
366394
- Optionally, any intermediate CA certificates

0 commit comments

Comments
 (0)