Slide 1

Slide 1 text

An Experimental Version of JSON-LD BBS+ Verifiable Credentials Dan Yamamoto (Internet Initiative Japan) 2023-11-10

Slide 2

Slide 2 text

Our work 1 ◼ Experimental JSON-LD BBS+ Verifiable Credentials with... ✓ Selective disclosure ✓ Signature hiding for unlinkability ✓ Proof of equality for hidden attributes ✓ Blind signature for private holder binding ✓ Pairwise pseudonymous identifier (PPID) ✓ Predicate proofs  Revocation, issuer-hiding, secure key storage, ...  Documentation, rigorous security review, standardization, ...

Slide 3

Slide 3 text

Example Use Case 2 Issuer Verifier Holder

Slide 4

Slide 4 text

Example Use Case 3 xyz: Person name = John Smith credentialSubject : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine vc#1: VerifiableCredential issuer = gov; proof = sig1 VC1 bound to Holder's secret Issuer Verifier Holder

Slide 5

Slide 5 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 4 VC1 vc#1: VerifiableCredential issuer = gov; proof = sig1 credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 !

Slide 6

Slide 6 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine Example Use Case 5 VC1 code#123 vc#1: VerifiableCredential issuer = gov; proof = sig1 credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Is it authorized?

Slide 7

Slide 7 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine Example Use Case 6 VC1 VC2 : VerifiableCredential issuer = prv; proof = sig2 code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject download code#123 vc#1: VerifiableCredential issuer = gov; proof = sig1 credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Is it authorized? Issuer (vaccine info provider)

Slide 8

Slide 8 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf cvx#207 : Vaccine vaccine Example Use Case 7 VC1 VC2 : VerifiableCredential issuer = prv; proof = sig2 code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject code#123 vc#1: VerifiableCredential issuer = gov; proof = sig1 credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Is it authorized? Issuer (vaccine info provider) download link data

Slide 9

Slide 9 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 8 VC1 VC2 : VerifiableCredential issuer = prv; proof = sig2 code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject vc#1: VerifiableCredential issuer = gov; proof = sig1 credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) link data

Slide 10

Slide 10 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 9 VC1 VC2 : VerifiableCredential issuer = prv; proof = sig2 code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** ********* ********* ********************** ************************* vc#1: VerifiableCredential issuer = gov; proof = sig1 selective disclosure *** credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider)

Slide 11

Slide 11 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 10 VC1 VC2 : VerifiableCredential issuer = prv; proof = sig2 code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* proof of equality vc#1: VerifiableCredential issuer = gov; proof = sig1 *** credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) selective disclosure

Slide 12

Slide 12 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 11 VC1 VC2 : VerifiableCredential issuer = prv; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* *** vc#1: VerifiableCredential issuer = gov; proof = 署名値 *** **** signature hiding credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) proof of equality selective disclosure

Slide 13

Slide 13 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 12 VC1 VC2 : VerifiableCredential issuer = prv; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* *** vc#1: VerifiableCredential issuer = gov; proof = 署名値 *** **** signature hiding credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) proof of equality selective disclosure >= 2022-04 Predicate Proof

Slide 14

Slide 14 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 13 VC1 VC2 : VerifiableCredential issuer = prv; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* vc#1: VerifiableCredential issuer = gov; proof = 署名値 *** **** proof of secret knowledge credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) signature hiding proof of equality selective disclosure *** >= 2022-04 Predicate Proof

Slide 15

Slide 15 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 14 VC1 VC2 : VerifiableCredential issuer = prv; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* vc#1: VerifiableCredential issuer = gov; proof = 署名値 *** **** credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) signature hiding proof of equality selective disclosure *** VP proof of secret knowledge >= 2022-04 Predicate Proof

Slide 16

Slide 16 text

xyz: Person name = John Smith : Vaccination date = 2022-04-04 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine Example Use Case 15 VC1 VC2 : VerifiableCredential issuer = prv; proof = ... code#123: Vaccine name = Awesome Vaccine manufacturer = Example.com status = authorized credentialSubject *** **************** **************** *** X *** *** X *** ********************** ************************* vc#1: VerifiableCredential issuer = gov; proof = 署名値 *** **** credentialSubject Issuer Verifier Holder Prove that you got vaccinated using authorized vaccine after April 2022 ! Issuer (vaccine info provider) signature hiding proof of equality selective disclosure *** VP I (anonymized) got vaccinated using authorized vaccine (anonymized) after April 2022 (without exact date) proof of secret knowledge >= 2022-04 Predicate Proof

Slide 17

Slide 17 text

Prototype Implementation jsonld-proofs rdf-proofs-wasm rdf-proofs zkp-ld-playground docknetwork/crypto demo apps JSON-LD processing RDF processing BBS+ and zk-SNARKs 16 thin wrapper https://github.com/zkp-ld/ ◆issue & verify JSON-LD VC ◆compose & verify JSON-LD VP ◆issue & verify N-Quads VC ◆compose & verify N-Quads VP ◆issue & verify N-Quads VC ◆compose & verify N-Quads VP ◆sign & verify integer array ◆derive & verify ZKP for integer array

Slide 18

Slide 18 text

Playground 17 https://playground.zkp-ld.org/

Slide 19

Slide 19 text

Termwise Encoding with RDF Canonicalization Holder Verifier Issuer Verifiable Credential (VC) Verifiable Presentation (VP)

Slide 20

Slide 20 text

JSON-LD 19 xyz: Person name = John Smith credentialSubject : Vaccination date = 2023-01-01 lotNo = 9999999 isPatientOf code#123 : Vaccine vaccine : VerifiableCredential issuer = gov; proof = sig1 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } }, ... } JSON-LD document

Slide 21

Slide 21 text

Fill the Gap between JSON-LD and BBS+ 20 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } }, ... } 9139018... 8394757... 4937101... ... BBS+. sign Issuer's secret key signature 𝑚1 𝑚2 𝑚3 scalars to be signed encode BBS+ requires an array of scalars as input, rather than JSON-LD → some type of encoding is necessary  Schema mapping  JSON Pointer  N-Quads statement-wise encoding  N-Quads termwise encoding JSON-LD document

Slide 22

Slide 22 text

Termwise Encoding 21 1. Convert JSON-LD to RDF N-Quads 2. Disambiguate N-Quads data (Canonicalization) 3. Decompose N-Quads data into terms 4. Encode each term to scalar 5. Feed the array of scalars into the BBS+ sign/verify algorithm

Slide 23

Slide 23 text

22 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } } } JSON-LD document (1) Convert JSON-LD into RDF N-Quads

Slide 24

Slide 24 text

23 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } } } JSON-LD document _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document toRDF (1) Convert JSON-LD into RDF N-Quads

Slide 25

Slide 25 text

24 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } } } JSON-LD document _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document toRDF _:foo credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date _:bar vaccine code#123 toRDF (1) Convert JSON-LD into RDF N-Quads

Slide 26

Slide 26 text

25 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } } } JSON-LD document _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document toRDF _:foo credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date _:bar vaccine code#123 toRDF _:bar vaccine code#123 xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date xyz name "John Smith" _:foo credentialSubject xyz toRDF (1) Convert JSON-LD into RDF N-Quads

Slide 27

Slide 27 text

26 { "credentialSubject": { "id": "xyz", "name": "John Smith" "isPatientOf": { "date": "2023-01-01", "vaccine": "code#123" } } } JSON-LD document _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document toRDF _:foo credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date _:bar vaccine code#123 toRDF _:bar vaccine code#123 xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date xyz name "John Smith" _:foo credentialSubject xyz toRDF (1) Convert JSON-LD into RDF N-Quads One RDF dataset can have multiple isomorphic RDF N-Quads representations

Slide 28

Slide 28 text

(2) Disambiguate N-Quads (Canonicalization) 27 _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document _:foo credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date _:bar vaccine code#123 _:bar vaccine code#123 xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date xyz name "John Smith" _:foo credentialSubject xyz

Slide 29

Slide 29 text

(2) Disambiguate N-Quads (Canonicalization) 28 _:b0 credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:b1 _:b1 date "2023-01-01"^^xsd:date _:b1 vaccine code#123 N-Quads document _:foo credentialSubject xyz xyz name "John Smith" xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date _:bar vaccine code#123 _:bar vaccine code#123 xyz isPatientOf _:bar _:bar date "2023-01-01"^^xsd:date xyz name "John Smith" _:foo credentialSubject xyz _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" canon Canonicalized N-Quads ✓ deterministically relabel blank nodes ✓ sort in the code order

Slide 30

Slide 30 text

(3) Decompose N-Quads into Terms 29 _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" Canonicalized N-Quads

Slide 31

Slide 31 text

(3) Decompose N-Quads into Terms 30 _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" Canonicalized N-Quads _:c14n0 date "2023-01-01"^^xsd:date code#123 _:c14n0 vaccine 1 4 2 5 3 6 ... split

Slide 32

Slide 32 text

(4) Encode each Term to Scalar 31 _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" Canonicalized N-Quads _:c14n0 date "2023-01-01"^^xsd:date code#123 _:c14n0 vaccine 1 4 2 5 3 6 9139018... 7975413... 1672531200 4937101... 9139018... 1106247... ... 1 4 2 5 3 6 ... split to Scalar

Slide 33

Slide 33 text

(4) Encode each Term to Scalar 32 _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" Canonicalized N-Quads _:c14n0 date "2023-01-01"^^xsd:date code#123 _:c14n0 vaccine 1 4 2 5 3 6 9139018... 7975413... 1672531200 4937101... 9139018... 1106247... ... 1 4 2 5 3 6 ... if datatype == date or dateTime: convert it into UNIX timestamp if datatype == integer: do nothing otherwise: hash to scalar split to Scalar

Slide 34

Slide 34 text

(5) Feed Scalars into BBS+ 33 _:c14n0 date "2023-01-01"^^xsd:date _:c14n0 vaccine code#123 _:c14n1 credentialSubject xyz xyz isPatientOf _:c14n0 xyz name "John Smith" Canonicalized N-Quads _:c14n0 date "2023-01-01"^^xsd:date code#123 _:c14n0 vaccine 1 4 2 5 3 6 9139018... 7975413... 1672531200 4937101... 9139018... 1106247... ... 1 4 2 5 3 6 ... BBS+. sign Issuer's secret key signature split to Scalar

Slide 35

Slide 35 text

(5') Embed Holder's Secret using Blind Signatures 34 9139018... 7975413... 1672531200 4937101... 9139018... 1106247... 1 4 2 5 3 6 ... BBS+. blind sign Issuer's secret key blinded signature {blinded secret} 0 BBS+. unblind signature 9139018... 7975413... 1672531200 4937101... 9139018... 1106247... 1 4 2 5 3 6 ... BBS+. sign Issuer's secret key {secret} 0

Slide 36

Slide 36 text

Selective Disclosure Holder Verifier Issuer Verifiable Credential (VC) Verifiable Presentation (VP)

Slide 37

Slide 37 text

Selective Disclosure 36 VC issued by Issuer VC' to be shown to Verifier { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } Holder Selective Disclosure { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } }

Slide 38

Slide 38 text

Selective Disclosure 37 VC issued by Issuer VC' to be shown to Verifier { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } Holder Selective Disclosure { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } remove attribute

Slide 39

Slide 39 text

Selective Disclosure 38 VC issued by Issuer VC' to be shown to Verifier { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } Holder Selective Disclosure { "credentialSubject": { "id": "_:000", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } remove attribute replace value with blank node

Slide 40

Slide 40 text

Selective Disclosure 39 VC issued by Issuer VC' to be shown to Verifier { "credentialSubject": { "id": "xyz", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } Holder Selective Disclosure { "credentialSubject": { "id": "_:000", "firstName": "John", "isPatientOf": { "date": "2023-01-01" } } remove attribute _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" toRDF toRDF replace value with blank node

Slide 41

Slide 41 text

Challenge 40 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" VC issued by Issuer VC' to be shown to Verifier Holder

Slide 42

Slide 42 text

Challenge 41 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" VC issued by Issuer VC' to be shown to Verifier canon Holder

Slide 43

Slide 43 text

Challenge 42 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' to be shown to Verifier canon canon Holder

Slide 44

Slide 44 text

Challenge 43 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' to be shown to Verifier canon canon Holder Even after canonicalization, datasets of Holder and Verifier may differ in: blank node labels and quad order

Slide 45

Slide 45 text

Challenge 44 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' to be shown to Verifier canon canon Holder Even after canonicalization, datasets of Holder and Verifier may differ in: blank node labels and quad order We introduce index map to handle quad order differences and use Selective Disclosure (ZKP) to deal with the blank node label differences

Slide 46

Slide 46 text

(1) Holder Calculates Index Map 𝜓 45 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' to be shown to Verifier Holder canon canon _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 index map 𝜓

Slide 47

Slide 47 text

(2) Holder Generates ZK proof 𝜋 46 VC issued by Issuer VC' to be shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 ≃ _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0

Slide 48

Slide 48 text

(2) Holder Generates ZK proof 𝜋 47 VC issued by Issuer VC' to be shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 ≃ deleted statements and all blank nodes are to be treated as unrevealed values

Slide 49

Slide 49 text

(2) Holder Generates ZK proof 𝜋 48 VC issued by Issuer VC' to be shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:c14n0 date "2023-01-01" xyz _:c14n1 credentialSubject 1 4 2 5 3 6 reveal indexes [2, 3, 5, 11] ≃ xyz firstName "John" _:c14n0 xyz isPatientOf 7 10 8 11 9 12 deleted statements and all blank nodes are to be treated as unrevealed values split

Slide 50

Slide 50 text

(2) Holder Generates ZK proof 𝜋 49 VC issued by Issuer VC' to be shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 BBS+.derive Proof 𝜋 (proof) _:c14n0 date "2023-01-01" xyz _:c14n1 credentialSubject 1 4 2 5 3 6 reveal indexes [2, 3, 5, 11] Issuer's public key, signature ≃ xyz firstName "John" _:c14n0 xyz isPatientOf 7 10 8 11 9 12 deleted statements and all blank nodes are to be treated as unrevealed values split

Slide 51

Slide 51 text

(3) Send to Verifier 50 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" VC issued by Issuer Holder Verifier VC' 𝜓, 𝜋 canon canon index map 𝜓

Slide 52

Slide 52 text

(3) Send to Verifier 51 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 Verifier VC' 𝜓, 𝜋 canon canon index map 𝜓

Slide 53

Slide 53 text

(3) Send to Verifier 52 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 Verifier VC' 𝜓, 𝜋 _:c14n1 date "2023-01-01" ... split BBS+.verify Proof 1 or 0 canon canon index map 𝜓

Slide 54

Slide 54 text

(3) Send to Verifier 53 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 Verifier VC' 𝜓, 𝜋 _:c14n1 date "2023-01-01" ... split BBS+.verify Proof 1 or 0 canon canon index map Issuer's public key, proof 𝜋 𝜓

Slide 55

Slide 55 text

*How to Generate Index Map 𝜓 54 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 𝜓 canon canon index map

Slide 56

Slide 56 text

*How to Generate Index Map 𝜓 55 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 𝜓 deanon map 𝜙 from to _:000 xyz canon canon index map

Slide 57

Slide 57 text

*How to Generate Index Map 𝜓 56 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 𝜓 deanon map 𝜙 from to _:000 xyz issuer canon map 𝜑 from to _:foo _:c14n1 _:bar _:c14n0 canon canon index map

Slide 58

Slide 58 text

*How to Generate Index Map 𝜓 57 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 𝜓 deanon map 𝜙 from to _:000 xyz verifier canon map 𝜑′ from to _:000 _:c14n0 _:bar _:c14n1 _:foo _:c14n2 issuer canon map 𝜑 from to _:foo _:c14n1 _:bar _:c14n0 canon canon index map

Slide 59

Slide 59 text

*How to Generate Index Map 𝜓 58 verifier canon map 𝜑′−1 from to _:c14n0 _:000 _:c14n1 _:bar _:c14n2 _:foo issuer canon map 𝜑 from to _:foo _:c14n1 _:bar _:c14n0 Φ ≔ 𝜑 ⊕ 𝜙 ∘ 𝜑′−1 from to _:c14n0 xyz _:c14n1 _:c14n0 _:c14n2 _:c14n1 𝜙 ⊕ 𝜑 from to _:000 xyz _:foo _:c14n1 _:bar _:c14n0 𝜙 ⊕ 𝜑 from to _:000 xyz _:foo _:c14n1 _:bar _:c14n0 deanon map 𝜙 from to _:000 xyz direct sum compose extended deanon map

Slide 60

Slide 60 text

*How to Generate Index Map 𝜓 59 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder xyz isPatientOf _:c14n0 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 extended deanon map Φ index map 𝜓 = [3, 0, 1] (with total length 𝐿 = 4) canon canon 0 1 2 0 1 2 3

Slide 61

Slide 61 text

*Use Index Map 𝜓 60 _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 _:foo credentialSubject xyz xyz firstName "John" xyz isPatientOf _:bar _:bar date "2023-01-01" _:foo credentialSubject _:000 _:000 isPatientOf _:bar _:bar date "2023-01-01" _:c14n0 isPatientOf _:c14n1 _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 VC issued by Issuer VC' shown to Verifier Holder _:c14n1 date "2023-01-01" _:c14n2 credentialSubject _:c14n0 _:c14n0 isPatientOf _:c14n1 Verifier VC' 𝜓, 𝜋 _:c14n1 date "2023-01-01" ... split BBS+.verify Proof 1 or 0 canon canon index map Issuer's public key, proof 𝜋 𝜓 = [3,0,1]

Slide 62

Slide 62 text

PPID (Pairwise Pseudonymous IDentifier) Holder Verifier Issuer Verifiable Credential (VC) Verifiable Presentation (VP)

Slide 63

Slide 63 text

PPID bound to Holder's Secret and Verifier's Scope 62 VC issued by Issuer Holder _:c14n0 date "2023-01-01" _:c14n1 credentialSubject xyz xyz firstName "John" xyz isPatientOf _:c14n0 BBS+.derive Proof 𝜋 (proof) _:c14n0 date "2023-01-01" xyz _:c14n1 credentialSubject 1 4 2 5 3 6 reveal indexes [2, 3, 5, 11] Issuer's public key, signature xyz firstName "John" _:c14n0 xyz isPatientOf 7 10 8 11 9 12 split {𝑠𝑒𝑐𝑟𝑒𝑡} 0 generate 𝑃𝑃𝐼𝐷 ← 𝐻 𝑠𝑐𝑜𝑝𝑒 𝑠𝑒𝑐𝑟𝑒𝑡 with Proof of Knowledge of 𝑠𝑒𝑐𝑟𝑒𝑡 using the same blinding with BBS+ (for proving equality) Verifier VC' 𝜓, 𝜋 𝑃𝑃𝐼𝐷 integrated