ZKLang – Implementation and Standardization
Jan Camenisch1, Manu Drijvers1, Maria Dubovitskaya, 1 Jason Law2, ... 1: IBM Research – Zurich 2: Evernym
ZKLang Implementation and Standardization Jan Camenisch 1 , Manu - - PowerPoint PPT Presentation
ZKLang Implementation and Standardization Jan Camenisch 1 , Manu Drijvers 1 , Maria Dubovitskaya, 1 Jason Law 2 , ... 1: IBM Research Zurich 2: Evernym W3C Verifiable Claims (VC) An effort for standardizing protocols and languages
Jan Camenisch1, Manu Drijvers1, Maria Dubovitskaya, 1 Jason Law2, ... 1: IBM Research – Zurich 2: Evernym
identity management
providers
(e.g., Older18) about the holder
2
3
4
5
PoK of Signature !, #, $ on message % w.r.t. issuer public key & = ()*
! ← !′/0 1 (2 1 ℎ4
5 1 ℎ2 6 ,
(= !)*)
5 1 ℎ2 6 , 1 ℎ4 ,)
:;< %, #, $), =, =), =)) : ̅ ! 9 = !′/0 1 ℎ4
,) ∧
(2 = 9," ⋅ ℎ4
/5B ⋅ ℎ2 /6
6
Implementing even a simple verifiable claim results in a complicated NIZK statement and requires orchestration of different cryptographic building blocks
Signature !, #, $
! ← !′*+ , -. , ℎ0
1 , ℎ. 2 '
(= !%5)
1 , ℎ. 2 ' , ℎ0 '%
89: ; < =, #, $%, >, >%, >%% : ̅ ! 7 = !′*+ , ℎ0
'% ∧
= 7'" ⋅ ℎ0
*1C ⋅ ℎ. *2
7
Signature !, #, $
! ← !′*+ , -. , ℎ0
1 , ℎ. 2 '
(= !%5)
1 , ℎ. 2 ' , ℎ0 '%
89: ; < =, #, $%, >, >%, >%% : ̅ ! 7 = !′*+ , ℎ0
'% ∧
= 7'" ⋅ ℎ0
*1C ⋅ ℎ. *2
8
9
10
Primitives ZKLang (proofs)
Sig Sig
Issuance KeyGen
Sig Sig Range Com Enc Enc
Verifiable Credentials
Non Interactive Zero-knowledge proof of Knowledge (NIZK) statements:
– possession of a credential
– range proof
– verifiable encryption for auditing
– pseudonymous user public key
– nym, but unique per scope
– linear relations
11
Terms can be combined
Credential(PKissuer, m1,m2,m3,m4) AND Enc(PKauditor, ciphertext, m3) AND Interall (today-m2,0,18*365) AND Nym(PPK)}
with Pkissuer,
12
13
14
15
Primitives ZKLang (proofs) Sig Sig Issuance KeyGen Sig Sig Range Com Enc Enc Verifiable Credentials Primitives ZKLang (proofs) Sig Sig Issuance KeyGen Sig Sig Range Com Enc Enc Verifiable Credentials
Prover Verifier Verifiable Credential request Verifiable Credential
ZKLang ProofSpec – derived from VC and Public keys ZKLang Witnesses – derived from secrets ZKLang Proof – cryptographic proof ZKLang ProofSpec – derived from VC and Public keys ZKLang Proof – obtained from prover
True/false
ZKL-ProofSpec:{ "attributeCount": 10, "disclosed": [{ "index": 3, "value": 500}, {"index": 9, "value": 20}], "clauses": [ {"type": "Credential", "dataclauseData": { "pk": "<ipk1>", "attrs": [0, 1, 2, 3] }, {"type": "Credential", "clauseData": { "pk": "<ipk2>","attrs": [0, 4, 5, 6, 7, 8, 9]} }, {"type": "Interval", "clauseData": { "attrs": [2], "min": 6, "max": 10, "pk": "<rpk>}] } ZKL-Witness:{ "attributeValues": ["av0","av1","av2","av3","av4","av5","av6","av7","av8"], "clauseSecrets": [ "<cred1>", "<cred2>", "<enc randomness>", "<nym randomness>", null ] } ZKL-Proof:{ "chal": "<c>", "s": [s0, s1, s2, s4, s5, s6, s7, s8], "clauseOut": ["<out0>", "<out1>", "<out2>", "<out3>", "<out4>", "<out5>” ], "clauseProof": [ "<proof0>", "<proof1>", "<proof2>", "<proof3>", "<proof4>", "<proof5>” ]}
16
17
18
19
20