Skip to content

Commit 0ec7c8e

Browse files
authored
SD-JWT VC Issuer Signature Profiles/Mechanisms (#316)
* Rename 'Issuer-signed JWT Verification Key Validation' to 'Issuer Signature Mechanisms' and rework some text accordingly. Provide a web-based metadata resolution mechanism and an inline x509 mechanism. A DID-based mechanism is not explicitly provided herein but still possible via profile/extension. Be explicit that the employed Issuer Signature Mechanism has to be one that is permitted for the Issuer according to policy. * add to the history entry 'Be more clear that one permitted Issuer Signature Mechanism is sufficient'
1 parent 8f42b4e commit 0ec7c8e

File tree

1 file changed

+37
-69
lines changed

1 file changed

+37
-69
lines changed

draft-ietf-oauth-sd-jwt-vc.md

Lines changed: 37 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ registry as defined in [@!RFC7519].
235235
The following registered JWT claims are used within the SD-JWT component of the SD-JWT VC and MUST NOT be included in the Disclosures, i.e., cannot be selectively disclosed:
236236

237237
* `iss`
238-
* REQUIRED. The Issuer of the Verifiable Credential. The value of `iss`
239-
MUST be a URI. See [@!RFC7519] for more information.
238+
* OPTIONAL. As defined in [@!RFC7519, section 4.1.1] this claim explicitly indicates the Issuer of the Verifiable Credential
239+
when it is not conveyed by other means (e.g., the subject of the end-entity certificate of an `x5c` header).
240240
* `nbf`
241241
* OPTIONAL. The time before which the Verifiable Credential MUST NOT be
242242
accepted before validating. See [@!RFC7519] for more information.
@@ -305,16 +305,16 @@ Examples of what presentations of SD-JWT VCs might look like are provided in (#p
305305
## Verification and Processing {#vc-sd-jwt-verification-and-processing}
306306

307307
The recipient (Holder or Verifier) of an SD-JWT VC MUST process and verify an
308-
SD-JWT VC as described in Section 7 of
309-
[@!I-D.ietf-oauth-selective-disclosure-jwt].
308+
SD-JWT VC as described in [@!I-D.ietf-oauth-selective-disclosure-jwt, section 7].
309+
The check in point 2.3 of Section 7.1 of [@!I-D.ietf-oauth-selective-disclosure-jwt],
310+
which validates the Issuer and ensures that the signing key belongs to the Issuer,
311+
MUST be satisfied by determining and validating the public verification key used to verify the Issuer-signed JWT,
312+
employing an Issuer Signature Mechanism (defined in (#ism)) that is permitted for the Issuer according to policy.
310313

311314
If Key Binding is required (refer to the security considerations in Section 9.5 of [@!I-D.ietf-oauth-selective-disclosure-jwt]), the Verifier MUST verify the KB-JWT
312315
according to Section 7.3 of [@!I-D.ietf-oauth-selective-disclosure-jwt]. To verify
313316
the KB-JWT, the `cnf` claim of the SD-JWT MUST be used.
314317

315-
Furthermore, the recipient of the SD-JWT VC MUST validate the public verification key
316-
for the Issuer-signed JWT as defined in (#issuer-signed-jwt-verification-key-validation).
317-
318318
If a schema is provided in the Type Metadata, a recipient MUST validate the schema as defined in (#schema-type-metadata).
319319

320320
If there are no selectively disclosable claims, there is no need to process the
@@ -329,21 +329,26 @@ Any claims used that are not understood MUST be ignored.
329329
Additional validation rules MAY apply, but their use is out of the scope of this
330330
specification.
331331

332-
## Issuer-signed JWT Verification Key Validation {#issuer-signed-jwt-verification-key-validation}
332+
## Issuer Signature Mechanisms {#ism}
333+
334+
An Issuer Signature Mechanism defines how a Verifier determines the appropriate key and associated procedure for
335+
verifying the signature of an Issuer-signed JWT.
336+
This allows for flexibility in supporting different trust anchoring systems and key resolution methods
337+
without changing the core processing model.
333338

334-
A recipient of an SD-JWT VC MUST apply the following rules to validate that the public
335-
verification key for the Issuer-signed JWT corresponds to the `iss` value:
339+
A recipient MUST determine and validate the public verification key for the Issuer-signed JWT using
340+
a supported Issuer Signature Mechanism that is permitted for the given Issuer according to policy.
341+
This specification defines the following two Issuer Signature Mechanisms:
336342

337-
- JWT VC Issuer Metadata: If a recipient supports JWT VC Issuer Metadata and if the `iss` value contains an HTTPS URI, the recipient MUST
338-
obtain the public key using JWT VC Issuer Metadata as defined in (#jwt-vc-issuer-metadata).
339-
- X.509 Certificates: If the recipient supports X.509 Certificates and the `iss` value contains an HTTPS URI, the recipient MUST
340-
1. obtain the public key from the end-entity certificate of the certificates from the `x5c` header parameter of the Issuer-signed JWT and validate the X.509 certificate chain accordingly, and
341-
2. ensure that the `iss` value matches a `uniformResourceIdentifier` SAN entry of the end-entity certificate or that the domain name in the `iss` value matches the `dNSName` SAN entry of the end-entity certificate.
342-
- DID Document Resolution: If a recipient supports DID Document Resolution and if the `iss` value contains a DID [@W3C.DID], the recipient MUST retrieve the public key from the DID Document resolved from the DID in the `iss` value. In this case, if the `kid` JWT header parameter is present, the `kid` MUST be a relative or absolute DID URL of the DID in the `iss` value, identifying the public key.
343+
- JWT VC Issuer Metadata: A mechanism to retrieve the Issuer's public key using web-based resolution. When the value of the `iss` claim of the Issuer-signed JWT is an HTTPS URI, the recipient obtains the public key using the keys from JWT VC Issuer Metadata as defined in (#jwt-vc-issuer-metadata).
343344

344-
Separate specifications or ecosystem regulations MAY define rules complementing the rules defined above, but such rules are out of scope of this specification. See (#ecosystem-verification-rules) for security considerations.
345+
- X.509 Certificates: A mechanism to retrieve the Issuer's public key using the X.509 certificate chain in the SD-JWT header. When the header of the Issuer-signed JWT contains the `x5c` header parameter, the recipient uses the public key from the end-entity certificate of the certificates from the `x5c` header parameter and validates the X.509 certificate chain accordingly. In this case, the Issuer of the Verifiable Credential is the subject of the end-entity certificate.
345346

346-
If a recipient cannot validate that the public verification key corresponds to the `iss` value of the Issuer-signed JWT, the SD-JWT VC MUST be rejected.
347+
To enable different trust anchoring systems or key resolution methods, separate specifications or ecosystem regulations
348+
may define additional Issuer Signature Mechanisms; however, the specifics of such mechanisms are out of scope for this specification.
349+
See (#ecosystem-verification-rules) for related security considerations.
350+
351+
If a recipient cannot validate that the public verification key corresponds the Issuer of the Issuer-signed JWT using a permitted Issuer Signature Mechanism, the SD-JWT VC MUST be rejected.
347352

348353
# Presenting Verifiable Credentials
349354

@@ -459,14 +464,15 @@ including `jwks`:
459464
"keys":[
460465
{
461466
"kid":"doc-signer-05-25-2022",
462-
"e":"AQAB",
463-
"n":"nj3YJwsLUFl9BmpAbkOswCNVx17Eh9wMO-_AReZwBqfaWFcfG
464-
HrZXsIV2VMCNVNU8Tpb4obUaSXcRcQ-VMsfQPJm9IzgtRdAY8NN8Xb7PEcYyk
465-
lBjvTtuPbpzIaqyiUepzUXNDFuAOOkrIol3WmflPUUgMKULBN0EUd1fpOD70p
466-
RM0rlp_gg_WNUKoW1V-3keYUJoXH9NztEDm_D2MQXj9eGOJJ8yPgGL8PAZMLe
467-
2R7jb9TxOCPDED7tY_TU4nFPlxptw59A42mldEmViXsKQt60s1SLboazxFKve
468-
qXC_jpLUt22OC6GUG63p-REw-ZOr3r845z50wMuzifQrMI9bQ",
469-
"kty":"RSA"
467+
"kty": "EC", "crv": "P-256",
468+
"x": "b28d4MwZMjw8-00CG4xfnn9SLMVMM19SlqZpVb_uNtQ",
469+
"y": "Xv5zWwuoaTgdS6hV43yI6gBwTnjukmFQQnJ_kCxzqk8"
470+
},
471+
{
472+
"kid":"doc-signer-06-05-2025",
473+
"kty": "EC", "crv": "P-256",
474+
"x":"DfjUx4WHBds61vGbqUQhsy3FGX13fAS13QWh2EHIkX8",
475+
"y":"NfqJt9Kp0EA93xq9ysO80DRZ_hCGlISz-pYLgv4RFvg"
470476
}
471477
]
472478
}
@@ -479,7 +485,7 @@ configuration including `jwks_uri`:
479485
```
480486
{
481487
"issuer":"https://example.com",
482-
"jwks_uri":"https://jwt-vc-issuer.example.org/my_public_keys.jwks"
488+
"jwks_uri":"https://jwt-vc-issuer.example.com/my_public_keys.jwks"
483489
}
484490
```
485491

@@ -1059,10 +1065,9 @@ Additional considerations can be found in [@OWASP_SSRF].
10591065

10601066
## Ecosystem-specific Public Key Verification Methods {#ecosystem-verification-rules}
10611067

1062-
When defining ecosystem-specific rules for the verification of the public key,
1063-
as outlined in (#issuer-signed-jwt-verification-key-validation), it is critical
1064-
that those rules maintain the integrity of the relationship between the `iss` value
1065-
within the Issuer-signed JWT and the public keys of the Issuer.
1068+
When defining ecosystem-specific rules for resolution and verification of the public key,
1069+
as outlined in (#ism), it is critical that those rules maintain the integrity of the
1070+
relationship between the `iss` value of the SD-JWT, if present, and the public keys of the Issuer.
10661071

10671072
It MUST be ensured that for any given `iss` value, an attacker cannot influence
10681073
the type of verification process used. Otherwise, an attacker could attempt to make
@@ -1223,43 +1228,6 @@ recommendations in (#robust-retrieval) apply.
12231228
</front>
12241229
</reference>
12251230

1226-
<reference anchor="W3C.DID" target="https://www.w3.org/TR/did-core/">
1227-
<front>
1228-
<author initials="M." surname="Sporny" fullname="Manu Sporny">
1229-
<organization>
1230-
<organizationName>Digital Bazaar</organizationName>
1231-
</organization>
1232-
</author>
1233-
<author initials="D." surname="Longley" fullname="Dave Longley">
1234-
<organization>
1235-
<organizationName>Digital Bazaar</organizationName>
1236-
</organization>
1237-
</author>
1238-
<author initials="M." surname="Sabadello" fullname="Markus Sabadello">
1239-
<organization>
1240-
<organizationName>Danube Tech</organizationName>
1241-
</organization>
1242-
</author>
1243-
<author initials="D." surname="Reed" fullname="Drummond Reed">
1244-
<organization>
1245-
<organizationName>Evernym/Avast</organizationName>
1246-
</organization>
1247-
</author>
1248-
<author initials="O." surname="Steele" fullname="Orie Steele">
1249-
<organization>
1250-
<organizationName>Transmute</organizationName>
1251-
</organization>
1252-
</author>
1253-
<author initials="C." surname="Allen" fullname="Christopher Allen">
1254-
<organization>
1255-
<organizationName>Blockchain Commons</organizationName>
1256-
</organization>
1257-
</author>
1258-
<title>Decentralized Identifiers (DIDs) v1.0</title>
1259-
<date day="19" month="July" year="2022"/>
1260-
</front>
1261-
</reference>
1262-
12631231
<reference anchor="W3C.VCDM" target="https://www.w3.org/TR/vc-data-model-2.0/">
12641232
<front>
12651233
<author initials="M." surname="Sporny" fullname="Manu Sporny">
@@ -1592,7 +1560,7 @@ for their contributions (some of which substantial) to this draft and to the ini
15921560

15931561
-10
15941562

1595-
*
1563+
* Rename 'Issuer-signed JWT Verification Key Validation' to 'Issuer Signature Mechanisms' and rework some text accordingly. Provide a web-based metadata resolution mechanism and an inline x509 mechanism. A DID-based mechanism is not explicitly provided herein but still possible via profile/extension. Be explicit that the employed Issuer Signature Mechanism has to be one that is permitted for the Issuer according to policy. Be more clear that one permitted Issuer Signature Mechanism is sufficient.
15961564

15971565
-09
15981566

0 commit comments

Comments
 (0)