Skip to content

Requirements on nonce and client_id inclusion too specific for QES #612

@sander

Description

@sander

I’m working on a “Wallet-centric” model for creating Qualified Electronic Signatures or Seals (QES) over OID4VP. In this use case, we are facing issues with some OID4VP requirements as of WG-Draft 2025-05-16.

Use case context

In the “Wallet-centric” design:

  • Credential = X.509 certificate
    • Format: https://cloudsignatureconsortium.org/2025/x509 from CSC DM v0.2.0
    • Claims:
      • Subject Distinguished Name / Alternative Name
      • Subject Public Key Info
      • Qualified Certificate Statements
  • Issuer = Qualified Trust Service Provider issuing the certificate
  • Holder = EUDIW user where:
    • the Wallet Instance has an integrated Signature Creation Application
    • the Signature Creation Application applies a (local/external/remote) Qualified Signature or Seal Creation Device (QSCD)
    • the QSCD protects the private key to which the Subject Public Key Info refers
  • Verifier = Driving Application, a Relying Party Instance that in a transaction:
    • can provide a document in any format (usually XML/JSON/PDF) and QES creation parameters
    • can validate a QES over that document
  • Presentation = QES
    • Transaction Data: https://cloudsignatureconsortium.org/2025/qes from CSC DM v0.2.0 where:
      • the data includes or referes to the document, QES creation parameters, and QES creation rules
      • the returned VP Token includes the QES, verifiably bound to these data

In my interpretation:

  • The transaction entails:
    • the request for QES;
    • the QES or rejection response.
  • The QES provides Cryptographic Holder Binding, as required for the application of OID4VP transaction data.
  • The QES provides no replay detection capabilities. There is no guarantee that it was generated in response to a specific request. However, the Verifier may choose to include fresh application-specific data in the QES request that is expected to be signed in the QES response.

Problematic requirements in OID4VP

  • Required nonce creation. § 5.2 Existing Parameters: the Verifier is REQUIRED to create a nonce. This serves two purposes:
    • “securely link the request and response” (transaction binding): redundant in QES-only transactions, since the document or QES parameters in transaction_data fulfills exactly this role.
    • “replay protection in the Holder Binding proof” (replay protection): not applicable in a standard way to QES.
  • Required nonce and client ID presentation. § 14.1.2 Verifiable Presentations requires the Wallet to include the client_id and the nonce in the VP, and the Verifier to verify this binding. This serves one purpose:
    • “to detect and prevent replay attacks” (replay protection): not applicable in a standard way to QES.

We may find more conflicting requirements as we dive deeper into this application. We should look carefully at use cases where QES is combined with other transactions in a single OID4VP interaction.

There may be impact to OID4VP applications that depend on nonce as a request identifier for response correlation.

Proposed approach

Generalise these requirements so that the credential format must/should/can enable the Verifier to implement transaction binding and/or replay protection, providing the inclusion of nonce and client_id as one possible means.

First, I’m curious if the WG agrees with this interpretation and approach. Then, we can look for a way to communicate this in the OID4VP specification or supplementary material. In parallel, CSC can take this information into its work on CSC DM.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions