Skip to content

Commit 472eefe

Browse files
authored
Merge branch 'main' into remove-error-code
2 parents df4d80e + de04ff5 commit 472eefe

4 files changed

Lines changed: 80 additions & 20 deletions

File tree

1.0/examples/digital_credentials_api/signed_request_payload_compact.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
"crv": "P-256",
1313
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1414
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
15-
"use": "enc",
1615
"kid": "1"
1716
}
1817
]

1.0/openid-4-verifiable-presentations-1_0.md

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ that signals to the Wallet that it can make an HTTP POST request to the Verifier
276276
endpoint with information about its capabilities as defined in (#request_uri_method_post). The Wallet MAY continue with JAR
277277
when it receives `request_uri_method` parameter with the value `post` but does not support this feature.
278278

279-
The Verifier articulates requirements of the Credential(s) that are requested using the `dcql_query` parameter. Wallet implementations MUST process the DCQL query and select candidate Credential(s) using the evaluation process described in (#dcql_query_lang_processing_rules)
279+
The Verifier articulates requirements of the Credential(s) that are requested using either the `dcql_query` or `scope` parameters. Wallet implementations MUST process the DCQL query and select candidate Credential(s) using the evaluation process described in (#dcql_query_lang_processing_rules)
280280

281281
The Verifier communicates a Client Identifier Prefix that indicates how the Wallet is supposed to interpret the Client Identifier and associated data in the process of Client identification, authentication, and authorization as a prefix in the `client_id` parameter. This enables deployments of this specification to use different mechanisms to obtain and validate Client metadata beyond the scope of [@!RFC6749]. A certain Client Identifier Prefix sets the requirements whether the Verifier needs to sign the Authorization Request as a means of authentication and/or pass additional parameters and require the Wallet to process them.
282282

@@ -289,6 +289,9 @@ One exception to this rule is the `transaction_data` parameter. Wallets that do
289289
## New Parameters {#new_parameters}
290290
This specification defines the following new request parameters:
291291

292+
`response_uri`:
293+
: As defined in (#security_considerations_direct_post).
294+
292295
`dcql_query`:
293296
: A JSON object containing a DCQL query as defined in (#dcql_query).
294297

@@ -308,7 +311,7 @@ This specification defines the following new request parameters:
308311
Other metadata parameters MUST be ignored unless a profile of this specification explicitly defines them as usable in the `client_metadata` parameter.
309312

310313
`request_uri_method`:
311-
: OPTIONAL. A string determining the HTTP method to be used when the `request_uri` parameter is included in the same request. Two case-sensitive valid values are defined in this specification: `get` and `post`. If `request_uri_method` value is `get`, the Wallet MUST send the request to retrieve the Request Object using the HTTP GET method, i.e., as defined in [@RFC9101]. If `request_uri_method` value is `post`, a supporting Wallet MUST send the request using the HTTP POST method as detailed in (#request_uri_method_post). If the `request_uri_method` parameter is not present, the Wallet MUST process the `request_uri` parameter as defined in [@RFC9101]. Wallets not supporting the `post` method will send a GET request to the Request URI (default behavior as defined in [@RFC9101]). `request_uri_method` parameter MUST NOT be present if a `request_uri` parameter is not present.
314+
: OPTIONAL. A case-sensitive string determining the HTTP method to be used when the `request_uri` parameter is included in the same request. Two case-sensitive valid values are defined in this specification: `get` and `post`. If `request_uri_method` value is `get`, the Wallet MUST send the request to retrieve the Request Object using the HTTP GET method, i.e., as defined in [@RFC9101]. If `request_uri_method` value is `post`, a supporting Wallet MUST send the request using the HTTP POST method as detailed in (#request_uri_method_post). If the `request_uri_method` parameter is not present, the Wallet MUST process the `request_uri` parameter as defined in [@RFC9101]. Wallets not supporting the `post` method will send a GET request to the Request URI (default behavior as defined in [@RFC9101]). `request_uri_method` parameter MUST NOT be present if a `request_uri` parameter is not present.
312315

313316
If the Verifier set the `request_uri_method` parameter value to `post` and there is no other means to convey its capabilities to the Wallet, it SHOULD add the `client_metadata` parameter to the Authorization Request.
314317
This enables the Wallet to assess the Verifier's capabilities, allowing it to transmit only the relevant capabilities through the `wallet_metadata` parameter in the Request URI POST request.
@@ -615,7 +618,7 @@ In case of using OpenID4VP over DC API, as defined in (#dc_api), it is at the di
615618
616619
* `x509_hash`: When the Client Identifier Prefix is `x509_hash`, the original Client Identifier (the part without the `x509_hash:` prefix) MUST be a hash and match the hash of the leaf certificate passed with the request. The request MUST be signed with the private key corresponding to the public key in the leaf X.509 certificate of the certificate chain added to the request in the `x5c` JOSE header parameter [@!RFC7515] of the signed request object. The value of `x509_hash` is the base64url-encoded value of the SHA-256 hash of the DER-encoded X.509 certificate. The Wallet MUST validate the signature and the trust chain of the X.509 leaf certificate. All Verifier metadata other than the public key MUST be obtained from the `client_metadata` parameter. Example Client Identifier: `x509_hash:Uvo3HtuIxuhC92rShpgqcT3YXwrqRxWEviRiA0OZszk`
617620
618-
* `origin`: This reserved Client Identifier Prefix is defined in (#dc_api_request). The Wallet MUST NOT accept this Client Identifier Prefix in requests. In OpenID4VP over the Digital Credentials API, the audience of the Credential Presentation is always the origin value prefixed by `origin:`, for example `origin:https://verifier.example.com/`.
621+
* `origin`: This reserved Client Identifier Prefix is defined in (#dc_api_request). The Wallet MUST NOT accept this Client Identifier Prefix in requests. In OpenID4VP over the Digital Credentials API, the audience of the Credential Presentation is always the origin value prefixed by `origin:`, for example `origin:https://verifier.example.com`.
619622
620623
To use the Client Identifier Prefixes `openid_federation`, `decentralized_identifier`, `verifier_attestation`, `x509_san_dns` and `x509_hash`, Verifiers MUST be capable of securely storing private key material. This might require changes to the technical design of native apps as such apps are typically public clients.
621624
@@ -1139,7 +1142,7 @@ Additional, more complex examples can be found in (#more_dcql_query_examples).
11391142

11401143
# Response {#response}
11411144

1142-
A VP Token is only returned if the corresponding Authorization Request contained a `dcql_query` parameter or a `scope` parameter representing a DCQL Query (#vp_token_request).
1145+
A VP Token is only returned if the corresponding Authorization Request contained a `dcql_query` parameter or a `scope` parameter representing a DCQL Query (as defined in #vp_token_request).
11431146

11441147
A VP Token can be returned in the Authorization Response or the Token Response depending on the Response Type used. See (#response_type_vp_token) for more details.
11451148

@@ -1765,6 +1768,10 @@ While breaking changes to the specifications referenced in this specification ar
17651768

17661769
# Security Considerations {#security_considerations}
17671770

1771+
## Formal Security Analysis
1772+
1773+
The security properties of the OpenID for Verifiable Credentials family of specifications have been formally analyzed, see [@secanalysis.openid4vc].
1774+
17681775
## Preventing Replay of Verifiable Presentations {#preventing-replay}
17691776

17701777
An attacker could try to inject Presentations obtained from (for example) a previous Authorization Response into another Authorization Response, thus impersonating the End-User that originally presented the respective Verifiable Presentation. Holder Binding aims to prevent such attacks.
@@ -2353,7 +2360,6 @@ Ecosystems intending to use trusted authority mechanisms SHOULD ensure that the
23532360
</front>
23542361
</reference>
23552362

2356-
23572363
<reference anchor="IANA.Hash.Algorithms" target="https://www.iana.org/assignments/named-information/named-information.xhtml">
23582364
<front>
23592365
<title>Named Information Hash Algorithm Registry</title>
@@ -2363,6 +2369,26 @@ Ecosystems intending to use trusted authority mechanisms SHOULD ensure that the
23632369
</front>
23642370
</reference>
23652371

2372+
<reference anchor="secanalysis.openid4vp.dc" target="https://openid.net/wp-content/uploads/2025/08/Report-Deliverable-A_1_B_.pdf">
2373+
<front>
2374+
<title>Formal Security Analysis of the OpenID for Verifiable Presentations Specification (with DC API)</title>
2375+
<author fullname="Fabian Hauck"></author>
2376+
<author fullname="Pedram Hosseyni"></author>
2377+
<author fullname="Ralf Küsters"></author>
2378+
<author fullname="Tim Würtele"></author>
2379+
<date day="15" month="July" year="2025"/>
2380+
</front>
2381+
</reference>
2382+
2383+
<reference anchor="secanalysis.openid4vc" target="https://dx.doi.org/10.18419/opus-13772">
2384+
<front>
2385+
<title>OpenID for Verifiable Credentials: Formal Security Analysis using the Web Infrastructure Model</title>
2386+
<author fullname="Fabian Hauck">
2387+
</author>
2388+
<date day="2" month="October" year="2023"/>
2389+
</front>
2390+
</reference>
2391+
23662392
# OpenID4VP over the Digital Credentials API {#dc_api}
23672393

23682394
This section defines how to use OpenID4VP with the Digital Credentials API.
@@ -2477,7 +2503,7 @@ This is an example of the payload of a signed OpenID4VP request used with the W3
24772503

24782504
#### JWS JSON Serialization {#multi_signed_request}
24792505

2480-
The JWS JSON Serialization ([@!RFC7515]) allows the Verifier to use multiple Client Identifiers and corresponding key material to protect the same request. This serves use cases where the Verifier requests Credentials belonging to different trust frameworks and, therefore, needs to authenticate in the context of those trust frameworks. It also allows the Verifier to add different attestations for each Client Identifier.
2506+
The JWS JSON Serialization ([@!RFC7515]) allows the Verifier to use multiple Client Identifiers and corresponding key material to protect the same request. This serves use cases where the Verifier requests Credentials belonging to different trust frameworks and, therefore, needs to authenticate in the context of those trust frameworks. It also allows the Verifier to add different Verifier Info for each Client Identifier.
24812507

24822508
In this case, the following request parameters, if used, MUST be present only in the protected header of the respective `signature` object in the `signatures` array defined in [@!RFC7515, section 7.2.1]:
24832509

@@ -2536,17 +2562,19 @@ The following is a non-normative example of a `data` object containing an error:
25362562

25372563
The security properties that are normally provided by the Client Identifier are achieved by binding the response to the Origin it was received from.
25382564

2539-
The audience for the response (for example, the `aud` value in a Key Binding JWT) MUST be the Origin, prefixed with `origin:`, for example `origin:https://verifier.example.com/`. This is the case even for signed requests. Therefore, when using OpenID4VP over the DC API, the Client Identifier is not used as the audience for the response.
2565+
The audience for the response (for example, the `aud` value in a Key Binding JWT) MUST be the Origin, prefixed with `origin:`, for example `origin:https://verifier.example.com`. This is the case even for signed requests. Therefore, when using OpenID4VP over the DC API, the Client Identifier is not used as the audience for the response.
25402566

25412567
## Security Considerations {#dc_api_security_considerations}
25422568

2569+
The security properties of the OpenID4VP protocol, when used in conjunction with the Digital Credentials API (DC API) [@!W3C.Digital_Credentials_API], have been formally analyzed, see [@secanalysis.openid4vp.dc].
2570+
25432571
The following security considerations from OpenID4VP apply:
25442572

25452573
* Preventing Replay of Verifiable Presentations as described in (#preventing-replay), with the difference that the origin is used instead of the Client Identifier to bind the response to the Client.
25462574
* End-User Authentication using Credentials as described in (#end-user-authentication-using-credentials).
25472575
* Encrypting an Unsigned Response as described in (#encrypting_unsigned_response).
25482576
* TLS Requirements as described in (#tls-requirements).
2549-
* Always Use the Full Client Identifier as described in (#full-client-identifier) for signed requests.
2577+
* Always use the Full Client Identifier as described in (#full-client-identifier) for signed requests.
25502578
* Security Checks on the Returned Credentials and Presentations as described in (#dcql_query_security).
25512579
* DCQL Value Matching as described in (#dcql-value-matching).
25522580

@@ -3563,9 +3591,12 @@ The technology described in this specification was made available from contribut
35633591
-31
35643592

35653593
* Clarify that `encrypted_response_enc_values_supported` applies only if JWE content encryption algorithm is used
3566-
* Clarify that `aud` corresponds to `issuer` Wallet Metadata paremeter if Dynamic Discovery is used
35673594
* Removed invalid_scope error guidance as duplicate of RFC6749
3595+
* Clarified that Multi-RP-sig section means Verifier Info instead of attestations
3596+
* Updated origin examples to remove trailing slash
3597+
* Clarify that `aud` corresponds to `issuer` Wallet Metadata paremeter if Dynamic Discovery is used
3598+
* Clarified that request_uri_method is a case-sensitive string
35683599

35693600
-final
35703601

3571-
* https://openid.net/specs/openid-4-verifiable-presentations-1_0-final.html
3602+
* https://openid.net/specs/openid-4-verifiable-presentations-1_0-final.html

1.1/examples/digital_credentials_api/signed_request_payload_compact.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
"crv": "P-256",
1313
"x": "MKBCTNIcKUSDii11ySs3526iDZ8AiTo7Tu6KPAqv7D4",
1414
"y": "4Etl6SRW2YiLUrN5vfvVHuhp7x8PxltmWWlbbM4IFyM",
15-
"use": "enc",
1615
"kid": "1"
1716
}
1817
]

0 commit comments

Comments
 (0)