Skip to content

Conversation

@danielfett
Copy link
Contributor

Fixes #6

Executive summary:

  • in the text, use "Verifiable Presentation" to refer to Presentations with Holder Binding Proofs only; use "Presentation" as the generic term for all kinds of credential presentations
  • adapt the terminology section accordingly
  • introduce considerations for using state: now REQUIRED if at least one Presentation without Holder Binding is requested.
    Alternative: "if only pres. without holder binding are requested", but the current rule seems easier to implement considering that credentials can be returned conditionally etc.
  • introduce the new DCQL credential query parameter allow_replay that requests a Presentation without Holder Binding
  • introduce some format-specific considerations:
    • SD-JWT VC needs just allow_replay: true
    • for W3C VCs, we already had four format identifiers distinguishing between presentations and credentials: jwt_vp_json, jwt_vc_json, ldp_vp, ldp_vc — I therefore introduced the rule that *vc must be used if and only if allow_replay is true.
      Alternative 1: Remove the *vp formats, but that would be another breaking change, I suppose? Alternative 2: Remove the *vc formats, but that would mean requesting a "*vp" when in reality, only a credential is returned.
  • adapt the security considerations to make clear that without key binding, replay of credentials is possible

Let the bikeshedding on the parameter name begin, other ideas I had were insecure_no_binding and simply key_binding: false. I think allow_replay captures the risk quite well and to the point, without sounding too scare, and doesn't sound too nice for developers to "just give it a try".

@danielfett danielfett requested a review from Copilot April 8, 2025 14:46
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
The Credential format identifiers are `jwt_vc_json` to request a W3C Verifiable Credential and `jwt_vp_json` to request a W3C Verifiable Presentation.
The Credential Format Identifiers are `jwt_vc_json` to request a W3C Verifiable Credential and `jwt_vp_json` to request a Verifiable Presentation compliant to the [@VC_DATA] specification.

If `jwt_vc_json` is used, the Credential is returned without Holder Binding. Therefore, the Verifier MUST set the `allow_replay` parameter in the Credential Query to `true` if it is using `jwt_vc_json`. Otherwise, `allow_replay` MUST be `false`. Wallets MUST reject requests that do not follow these rules.
Copy link
Member

Choose a reason for hiding this comment

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

I feel like allow_replay is more of a result of not requiring key binding. But I don't think it's the best name for a query parameter.

I'm not sure if there's an overarching term. I think in OID4VCI it's called key binding (so something like 'require_key_binding) or more generic that a presentation is required (so require_verifiable_presentation`).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't think require_key_binding sounds serious enough :-) I'd prefer a wording that conveys that this is a critial parameter.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I agree with @TimoGlastra .

replayed. (#preventing-replay) contains additional considerations for this case.

To request a Credential without proof of Holder Binding, the Verifier specifies a
different format in the DCQL request as defined in (#dcql_query) and
Copy link
Collaborator

Choose a reason for hiding this comment

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

would it make sense to add an example?

The Credential format identifiers are `jwt_vc_json` to request a W3C Verifiable Credential and `jwt_vp_json` to request a W3C Verifiable Presentation.
The Credential Format Identifiers are `jwt_vc_json` to request a W3C Verifiable Credential and `jwt_vp_json` to request a Verifiable Presentation compliant to the [@VC_DATA] specification.

If `jwt_vc_json` is used, the Credential is returned without Holder Binding. Therefore, the Verifier MUST set the `allow_replay` parameter in the Credential Query to `true` if it is using `jwt_vc_json`. Otherwise, `allow_replay` MUST be `false`. Wallets MUST reject requests that do not follow these rules.
Copy link
Collaborator

Choose a reason for hiding this comment

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

I agree with @TimoGlastra .

Co-authored-by: Torsten Lodderstedt <torsten@lodderstedt.net>
@danielfett danielfett mentioned this pull request Apr 11, 2025
Copy link
Contributor

@paulbastian paulbastian left a comment

Choose a reason for hiding this comment

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

From my view, two open questions to the WG:

  • nonce REQUIRED for requests without key binding?
  • rename allow_replay to key_binding_required ?

Co-authored-by: Paul Bastian <paul.bastian@posteo.de>
@Sakurann Sakurann merged commit c521eab into main Apr 11, 2025
2 checks passed
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.

Presenting VC without a VP (non key-bound credentials)

8 participants