Holder Binding
Confirmation Method
Oliver Terbu @W3C CCG
April 11th, 2023
Problem Statement
Problem Statement
What a lot of people do today …
{
"@context":[ ... ],
"type":[
"VerifiablePresentation",
"CredentialManagerPresentation"
],
"holder":"did:example:subject",
"verifiableCredential":[{
"@context":[ ... ],
"type":[ "VerifiableCredential",
"UniversityDegreeCredential" ],
"issuer":"https://example.edu/issuers/565049",
"issuanceDate":"2010-01-01T00:00:00Z",
"credentialSubject":{
"id":"did:example:subject",
"degree":{
"type":"BachelorDegree",
"name":"Bachelor of Science and Arts"
}
},
"proof":{ ... }
}],
"proof":{
"type":"JsonWebSignature2020",
"created":"2019-12-11T03:50:55Z",
"jws":"ey...",
"proofPurpose":"authentication",
"verificationMethod":"did:example:subject#key-1"
}
}
“holder” is non-normative and optional, unclear who is “holder” when omitted
“credentialSubject.id” is optional
IF (holder.id == credentialSubject.id AND hasAuthnMethod(resolve(holder.id), vp.proof.verificationMethod) AND isValid(vp.proof)) THEN
Print “Holder Binding validated”
Problem Statement: holder + VP don’t solve the issue
Confirmation Method
A Confirmation Method can be included by an issuer in a verifiable credential to declare that the subject controls, or a holder has been designated to use, one or more particular confirmation methods. This binds a specific claim about a subject to one or more confirmation methods. In this way, an issuer explicitly gives guidance around how a verifier can validate that the holder is bound to the claims presented in a verifiable credential.
Assumptions
Consequences
Context Matters
Holder Binding → Identifier Binding
→ However, although this slide deck uses examples from the paper, it deviates by saying “to verify that entity confirmed the presentation” where authentication is one aspect of the process and where confirmation methods are those “means”.
Use Case
Scenario 1 | Fully remote
Scenario 1 | Fully remote
The verifiable credential looks like this:
...�"credentialSubject": {� "id": "<some-uri>",� "passedExam": "SOL"�}�...
Without additional information, the verifiable credential cannot be used by Alice to enrol for Bob’s course in a secure way (online, in-person). Also Bob cannot verify that it was Alice that provided the verifiable presentation that embeds the VC above.
Scenario 1 | Fully remote
We could add additional claims, so Bob could ask for an identity document that can be used to confirm Alice by comparing claims from the VC below against claims in the trusted identity document:
...�"credentialSubject": {� "id": "<some-uri>",� "passedExam": "SOL",� "firstName": "Alice",� "lastName": "Wonderland"�}
...
�
Implications
Scenario 1 | Fully remote
Alice needs to present some cryptographic proof specifically for online use cases. Ivan could just include Alice’s cryptographic key as a claim like this:
...�"credentialSubject": {� "id": "<some-uri>", ; OR "did:..."� "passedExam": "SOL",� "publicKey": "..." ; OR "verificationMethod"�}
...
�But this does not give the verifier enough guidance to verify the verifiable presentation since the verifier does not know the intention or further semantics of the publicKey claim. Note, if verificationMethod was used, it would be DID spec specific. A normative reference for such a mechanism is missing in the VCDM.
Scenario 1 | Fully remote
For that reason, we propose a new property confirmationMethod (subject to bikeshedding):
...�"credentialSubject": {� "id": "<some-uri>",� "passedExam": "SOL",� "confirmationMethod": [{� "type": "KeyConfirmationMethod2023",� "publicKeyBase58": "did:key:z6...#key-1"� }]�}
...
�
NOTE: DID/Key is not owned by issuer → issuer attested that claim after, for example, a DIDAuth challenge was verified.
This makes it clear and Alice can enroll for Bob’s course fully remotely. Mallory could also not just copy Alice’s verifiable credential and enroll for Bob’s course without passing the SOL exam first, since the verifiable credential is bound to a key that Alice possesses and that was endorsed by Ivan as the confirmation method for that VC. Only if Alice and Mallory would collude (friendly relay/fraud), Mallory would be able to confirm the verifiable presentation on behalf of Alice.
Scenario 1 | Fully remote (PROPOSAL)
Because confirmation methods can be quite different and a VC could have many confirmation methods endorsed by the VC issuer, we propose a new property where each confirmation method is described by its type and where each type is registered in the VC directory. The VCDM should also define 1-2 basic types such as KeyConfirmationMethod2023. For high assurance use cases it might not be even feasible to add all required claims to the VC (number too high, lack of standards, not possible to be verified by verifier etc.).��...
{� "confirmationMethod": [ � { "type": "...", ... }, <more elements of array of confirmation-method-elements> ]�},�...
Scenario 1 | Other Examples
...
"credentialSubject": {� "id": "<some-uri>",� "passedExam": "SOL",� "confirmationMethod": [{� "type": "DIDConfirmationMethod2023",� "did": "did:key:z6..."� },{� "type": "KeyConfirmationMethod2023",� "publicKeyBase58": "did:key:z6...#key-1",� "loa": "high", ; additional properties � ; allowed� "some": "other" ; additional properties � ;allowed� "realm": "eIDAS" ; additional properties � ; allowed� },{� "type": "AnonCredsLinkedSecret2023",� "blindedLinkedSecret": "..."� }]�}
...
...
"credentialSubject": {� "id": "<some-uri>",� "passedExam": "SOL",� "confirmationMethod": [{� "type": "BiometricTemplate2023",� "portrait": "data:..."� }]�}
...
Scenario 1 | Linking Confirmation Methods
"credentialSubject": [ {� "id": "uri:9021678535", //mandatory� "confirmationMethod": [ {� "type": "secureWallet� RemoteBindingDIF",� "walletName": "Example Wallet",� //optional� "walletVersion": "1.3.0",� //optional� "hardwarePublicKey": � "did:jwk:123", � //links and other formats� // possible� "holderAuthentication": � ["FaceID", "PIN"]� } ],� "firstName": "Alice",� "familyName": "Wonderland",�...�}�],�...
...
"credentialSubject": [ {� "id": "uri:492754832663",� "confirmationMethod": [ {� "type": "linkedBinding",� "link": "uri:9021678535"� } ],� "hasPassedExam": "SOL"�}],�...
...�"credentialSubject": [ {� "id": "uri:399912",� "confirmationMethod": [ {� "type": "linkedCredential",� "link": "uri:9021678535"� } ],� "isEnrolledFor": "MLAS-3"�}�],�...
Applications (non-exhaustive list)
Applications (non-exhaustive list)
Privacy Considerations
Status of “Holder Binding”
Thank you!