This specification describes the did:compositejwk method to deal with Post-Quantum/Traditional (PQ/T) hybrid signatures in Verifiable Credentials.
This specification was published by the Cybersecurity Research Group @ LINKS Foundation.
This specification is experimental, do not use it in any production setting.
GitHub Issues are preferred for discussion of this specification.
did:compositejwk
is a deterministic transformation of a compositeJwk
into a DID Document.
The compositeJwk
is a new Verification Material property introduced to handle Post-Quantum/Traditinal (PQ/T) hybrid keys. This object contains the PQ and traditional public keys, both JWK encoded, and the algId string representing the name of algorithms used to generate the hybrid signature.
"compositeJwk": {
"algId": ".. composite key OID ..",
"pqPublicKey": {
".. PQ JWK encoded key .."
},
"traditionalPublicKey": {
".. Traditional JWK encoded key .."
}
}
"compositeJwk": { "algId": "id-MLDSA44-Ed25519-SHA512", "pqPublicKey": { "kty": "ML-DSA", "alg": "ML-DSA-44", "kid": ".. key thumbprint ..", "pub": ".. encoded public key .." }, "traditionalPublicKey": { "crv": "Ed25519", "x": ".. x coordinate ..", "kty": "OKP", "kid": ".. key thumbprint .." } }
did-compositejwk-format := did:compositejwk:base64url-value base64url-value := [A-Za-z0-9_-]+
The base64url-value
is a base64url encoded compositeJwk
.
To create the DID:
compositeJwk
did:compositejwk:
To create the DID Document:
The compositeJwk
is used to generate the DID Document in the following form with the
base64url encoded value replacing ${base64url-value}
, and the compositeJwk
structure replacing ${composite-jwk}
:
{ "@context": [ "https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/jws-2020/v1" ], "id": "did:compositejwk:${base64url-value}", "verificationMethod": [ { "id": "did:compositejwk:${base64url-value}#0", "type": "CompositeJsonWebKey", "controller": "did:compositejwk:${base64url-value}", "compositeJwk": "${composite-jwk}" } ] }
To create the DID URL:
Since did:compositejwk
only contains a single composite public key (a PQ and a Traditional public key), the DID URL fragment identifier is always a fixed #0
value. If the PQ and/or Traditional JWK contains a kid
value, it is not used as the reference, #0
is the only valid value.
did:compositejwk:
compositeJwk
propertiesNot supported.
Not supported.
Since the did:compositejwk
method is similar to the did:jwk
method, see also did:jwk