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 !
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?
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
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
_: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
"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
"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
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
𝜑′−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