基于Sigma protocol实现的零知识证明protocol集锦

1. 背景知识

Sigma protocols,又称为 3 phase protocols,用于证明knowledge of values in some relation,但是又不泄露values的具体值。

如用于证明knowledge of discrete log:given g g and y y ,prove knowledge of x x 满足 g x = y g^x=y without revealing x x

本文将介绍如何构建Sigma protocols来证明各种关系,如:

  • knowledge of discrete log
  • equality of discrete log
  • inequality of 2 given discrete logs
  • knowledge of multiple discrete logs
  • composition of many Sigma protocols
  • knowledge of message and randomness in a Pedersen commitment
  • equality of message in 2 Pedersen commitments

同时提供了Python 代码示例,用于说明在elliptic curves 上如何实现相应的构建。

1.1 零知识证明中的术语

  • Witness:the value being proven knowledge of。待证明的信息,仅Prover知道,不对Verifier泄露。目的就是:在不将witness泄露给Verifier的情况下,Prover知道满足某关系的witness并提供相应的proof,使Verifier根据proof和instance信息确信“Prover确实知道满足指定关系的witness”。对adversary而言,由于其不知道相应的witness,由adversary提供的proof应总是被验证失败。
  • Instance:描述关系中除witness外的所有其它元素,均统称为instance。instance为public information,对于Prover和Verifier均已知。
  • Prover: the entity proving the knowledge of the witness。用于证明其知道witness的一方叫做Prover,Prover提供proof。
  • Verifier:the other party that the prover needs to convince of the knowledge of witness。验证proof的一方叫做Verifier。

以proof of knowledge of discrete log 为例:( y = g x y=g^x )
Witness: x x
Instance: y y g g

1.2 Sigma protocol

Sigma protocol可分三步描述:

  • 1)Commitment:
    The prover generates a random number, creates a commitment to that randomness and sends the commitment to the verifier.

  • 2)Challenge:
    After getting the commitment, the verifier generates a random number as a challenge and sends it to the prover. It is important that the verifier does not send the challenge before getting the commitment or else the prover can cheat.

  • 3)Response:
    The prover takes the challenge and creates a response using the random number chosen in step 1), the challenge and the witness. The prover will then send the response to the verifier who will do some computation and will or will not be convinced of the knowledge of the witness.

以上描述的Sigma protocol为interactive protocol,要求Prover和Verifier必须同时在线,且能相互发送消息来完成整个流程。利用Fiat-Shamir heuristic,可将其转化为non-interactive:即不需要Verifier在第2步中发送challenge,Prover自己模拟一个challenge(by using a hash function to hash something specific to this protocol execution. 该hash函数的输入可为:如第1步中生成的commitment以及其它instance数据。)在non-interactive protocol中,Prover可以创建proof,而任意的Verifier都可以verify the proof。

仍以proof of knowledge of discrete log 为例:( y = g x y=g^x )【该协议也可称为Schnorr identification protocol或Schnorr protocol。】

  • 1)Commitment:
    Prover选择随机数 r r ,创建commitment t = g r t=g^r ,将 t t 值发送给Verifier。

  • 2)Challenge:
    Verifier存储 t t 值,生成随机challenge c c ,将 c c 值发送给Prover。

  • 3)Response:
    Prover根据收到的challenge c c 值,创建response s = r + x c s=r+x*c ,将 s s 值发送给Verifier。

Verifier只需要验证 g s = y c t g^s=y^c*t 成立,即可相信Prover确实知道相应的 x x 使得 y = g x y=g^x 成立。

1.2.1 注意事项一:Prover应每次使用新的随机数 r r

每次生成proof时,Prover都应选择不同的新的随机数 r r ,否则会造成 x x 泄露。
具体为:

  • 1.1)Prover:选择随机数 r r ,计算 t = g r t=g^r ,将 t t 发送给Verifier;

  • 1.2)Verifier:存储 t t ,发送challenge c 1 c_1 给Prover;

  • 1.3)Prover:根据 r r c 1 c_1 ,计算response s 1 = r + c 1 x s_1=r+c_1*x ,将 s 1 s_1 发送给Verifier。

  • 2.1)Prover:仍然选择相同的随机数 r r ,计算 t = g r t=g^r ,将 t t 发送给Verifier;

  • 2.2)Verifier:存储 t t ,发送challenge c 2 c_2 给Prover;

  • 2.3)Prover:根据 r r c 1 c_1 ,计算response s 2 = r + c 2 x s_2=r+c_2*x ,将 s 1 s_1 发送给Verifier。

若Prover采用了相同的随机数 r r ,则Verifier根据收到的 s 1 s_1 s 2 s_2 ,可计算出 x = ( s 1 s 2 ) / ( c 1 c 2 ) x=(s_1-s_2)/(c_1-c_2) ,从而造成 witness x x 的泄露。

1.2.2 注意事项二:Prover应无法预测challenge c c

Prover应无法预测challenge c c ,否则Prover可在不知道witness x x 的情况下,伪造证明使Verifier信服。
正常情况下,若Prover应无法预测challenge c c ,Verifier根据其收到的 s ( = r + c x ) s(=r+c*x) ,验证 g s = y c t g^s=y^c*t 成立,则可认为Prover确实知道witness x x 使得 y = g x y=g^x 成立。

但是,若Prover可预测到challenge c c 值,则其在构建 t t 时不再是基于随机数 r r ,而是可以直接计算 t = y c g s t=y^{-c}*g^s (不需要 x x 参与计算),使得 g s = y c t g^s=y^c*t 恒成立。

1.2.3 make the protocol non-interactive

利用Fiat-Shamir heuristic,Prover使用hash function Hash 来生成相应的challenge c c (应保证Prover无法预测Hash函数的输出,否则如1.2.2节所示Prover可以作弊。)。
non-interactive protocol可让Verifier不再需要生成随机数 c c ,使得Verifier的实现更简单。
non-interactive的详细实现为:

  • 1)Prover:Prover生成随机数 r r ,创建commitment t = g r t=g^r ;Prover将 g , t , y g,t,y 作为hash函数输入计算challenge c ( = H a s h ( g , y , t ) ) c(=Hash(g,y,t)) ;Prover计算response s = r + c x s=r+c*x 。Prover将 ( t , s ) (t,s) 发送给Verifier。

Verifier根据收到的 t t 和instance g , y g,y ,利用相同的Hash函数计算 c = H a s h ( g , y , t ) c=Hash(g,y,t) ,再结合收到的 s s ,验证 g s = y c t g^s=y^c*t 是否成立即可。

实际实现时, t t 的size可能要远远大于 c c s s 的size(注意: t t 为group element, c s c和s 为field element)。为了降低传输压力,Prover发送 ( t , s ) (t,s) 可改为发送 ( c , s ) (c,s) 。调整为:

  • 1)Prover:Prover生成随机数 r r ,创建commitment t = g r t=g^r ;Prover将 g , t , y g,t,y 作为hash函数输入计算challenge c ( = H a s h ( g , y , t ) ) c(=Hash(g,y,t)) ;Prover计算response s = r + c x s=r+c*x 。Prover将 ( c , s ) (c,s) 发送给Verifier。

Verifier根据收到的 ( c , s ) (c,s) ,假设 g s = y c t g^s=y^c*t 成立,计算 t ( = g s y c ) t(=g^s*y^{-c}) ,利用 t , g , y t,g,y 作为相同hash函数的输入,计算 c = h a s h ( g , y , t ) c’=hash(g,y,t) ,验证 c = c c=c’ 是否成立即可。

以上non-interactive protocol即是Schnorr signatures的核心思想。可将Schnorr signature看作是proof of knowledge of secret key corresponding to a public key ( x x in g x g^x ),而被签名的消息 m m 增加作为hash函数的输入,以此来生成challenge。(the message being signed is just hashed in the challenge in addition to other stuff we saw above.)
(可参见博客 Schnorr signature (Schnorr 签名)数学原理

2. 基于Sigma protocol实现基础协议

以下罗列了一些基于Sigma protocol实现的基础关系证明,主要针对的是non-interactive场景。

2.1 Protocol 1. Equality of discrete logs

证明Prover知道witness x x ,使得 g x = y h x = z g^x=y且h^x=z
Witness: x x
Instance: g , h , y , z g,h,y,z
Relation: g x = y g^x=y h x = z h^x=z

具体实现可为:
1)Prover:

  • 生成随机数 r r ,采用相同的 r r 创建2个commitment t 1 = g r , t 2 = h r t_1=g^r,t_2=h^r
  • g , h , y , z , t 1 , t 2 g,h,y,z,t_1,t_2 为输入,生成challenge c = H a s h ( g , h , y , z , t 1 , t 2 ) c=Hash(g,h,y,z,t_1,t_2)
  • 创建response s = r + c x s=r+c*x
  • 发送 ( t 1 , t 2 , s ) (t_1,t_2,s) 给Verifier。

2)Verifier:

  • 验证 g s = y c t g^s=y^c*t h s = z c t h^s=z^c*t 是否同时成立即可。

2.2 Protocol 2. Conjunction (AND) of discrete logs

证明Prover知道witness a , b a,b ,使得 g a = P h b = Q g^a=P且h^b=Q
Witness: a , b a,b
Instance: g , h , P , Q g,h,P,Q
Relation: g a = P h b = Q g^a=P且h^b=Q

具体实现可为:【相当于并行执行2个 ”knowledge of discrete log” protocol】
1)Prover:

  • 生成随机数 r 1 , r 2 r_1,r_2 ,分别创建2个commitment t 1 = g r 1 , t 2 = h r 2 t_1=g^{r_1},t_2=h^{r_2}
  • g , h , P , Q , t 1 , t 2 g,h,P,Q,t_1,t_2 为输入,生成challenge c = H a s h ( g , h , P , Q , t 1 , t 2 ) c=Hash(g,h,P,Q,t_1,t_2)
  • 创建response s 1 = r 1 + c x , s 2 = r 2 + c x s_1=r_1+c*x,s_2=r_2+c*x
  • 发送 ( t 1 , t 2 , s 1 , s 2 ) (t_1,t_2,s_1,s_2) 给Verifier。

2)Verifier:

  • 验证 g s 1 = y c t 1 g^{s_1}=y^c*t_1 h s 2 = z c t 2 h^{s_2}=z^c*t_2 是否同时成立即可。

2.3 Protocol 3. Disjunction (OR) of discrete logs

证明Prover知道witness a a 使得 g a = P g^a=P ,或者,知道witness b b 使得 h b = Q h^b=Q ,但是,无法同时知道 a , b a,b 使得 g a = P h b = Q g^a=P且h^b=Q 同时成立。
不能暴露Prover到底知道的是 a a 还是 b b

假设Prover仅知道 a a 使得 g a = P g^a=P 【<1>,可诚信证明】,而不知道 b b 使得 h b = Q h^b=Q 【<2>,需伪造证明】,具体实现可为:
1)Prover:

  • 生成用于证明<1>随机数 r 1 r_1 ,构建第1个commitment t 1 = g r 1 t_1=g^{r_1}
  • 生成用于证明<2>的challenge c 2 c_2 和随机response s 2 s_2 ,(由于Prover由于不知道 b b ,只能随机生成,采用1.2.2节中的方式来伪造证明),构建第2个commitment t 2 = h s 2 Q c 2 t_2=h^{s_2}*Q^{-c_2}
  • 计算hash值 c = H a s h ( g , h , P , Q , t 1 , t 2 ) c=Hash(g,h,P,Q,t_1,t_2) ,计算用于证明<1>的challenge c 1 = c c 2 c_1=c-c_2
  • 计算用于证明<1>的response s 1 = r 1 + a c 1 s_1=r_1+a*c_1
  • 发送 ( ( t 1 , c 1 , s 1 ) , ( t 2 , c 2 , s 2 ) ) ((t_1,c_1,s_1),(t_2,c_2,s_2)) 给Verifier。

2)Verifier:
可同时验证 g s 1 = P c 1 t 1 g^{s_1}=P^{c_1}*t_1 h s 2 = Q c 2 t 2 h^{s_2}=Q^{c_2}*t_2 均成功,由于Verifier 可计算 c = H a s h ( g , h , P , Q , t 1 , t 2 ) c=Hash(g,h,P,Q,t_1,t_2) ,其收到的 c 1 , c 2 c_1,c_2 满足 c 1 + c 2 = c c_1+c_2=c ,相比于2.2节的AND proof,Verifier可确信Prover确实知道 a a OR b b

Jan Camenisc等人1997年论文《Proof Systems for General Statements about Discrete Logarithms》中,也有一些证明方案(参见博客 密码学中的sigma-protocol 第2节中提到的OR证明。),其中的OR证明【repsonse格式改为 s = r c x s=r-c*x 格式】,Prover发送给Verifier的内容调整为了 ( c 1 , c 2 , s 1 , s 2 ) (c_1,c_2,s_1,s_2) ;Verifier计算 t 1 = g s 1 P c 1 , t 2 = h s 2 Q c 2 t_1=g^{s_1}P^{c_1},t_2=h^{s_2}Q^{c_2} ,同时验证 c 1 + c 2 = H ( g , h , P , Q , t 1 , t 2 ) c_1+c_2=H(g,h,P,Q,t_1,t_2) 是否成立即可。具体为:
1)Prover:

  • 生成用于证明<1>随机数 r 1 r_1 ,构建第1个commitment t 1 = g r 1 t_1=g^{r_1}
  • 生成用于证明<2>的challenge c 2 c_2 和随机response s 2 s_2 ,(由于Prover由于不知道 b b ,只能随机生成,采用1.2.2节中的方式来伪造证明),构建第2个commitment t 2 = h s 2 Q c 2 t_2=h^{s_2}*Q^{c_2}
  • 计算hash值 c = H a s h ( g , h , P , Q , t 1 , t 2 ) c=Hash(g,h,P,Q,t_1,t_2) ,计算用于证明<1>的challenge c 1 = c c 2 c_1=c-c_2
  • 计算用于证明<1>的response s 1 = r 1 a c 1 s_1=r_1-a*c_1
  • 发送 ( ( c 1 , s 1 ) , ( c 2 , s 2 ) ) ((c_1,s_1),(c_2,s_2)) 给Verifier。

2)Verifier:
计算 t 1 = g s 1 P c 1 , t 2 = h s 2 Q c 2 t_1=g^{s_1}P^{c_1},t_2=h^{s_2}Q^{c_2} ,同时验证 c 1 + c 2 = H ( g , h , P , Q , t 1 , t 2 ) c_1+c_2=H(g,h,P,Q,t_1,t_2) 是否成立即可。相比于2.2节的AND proof,Verifier可确信Prover确实知道 a a OR b b

2.4 Protocol 4. Knowledge of the opening of Pedersen commitment

Pedersen commitment: P = C o m ( m ; r ) = g m h r P=Com(m;r)=g^mh^r ,其中 ( m , r ) (m,r) 称为the opening of the commitment。
证明Prover知道witness ( m , r ) (m,r) ,使得 P = g m h r P=g^m*h^r
Witness: m , r m,r
Instance: g , h , P g,h,P
Relation: P = g m h r P=g^m*h^r

具体实现可为:
1)Prover:

  • 生成随机数 r 1 , r 2 r1,r_2 ,创建commitment t = g r 1 h r 2 t=g^{r_1}*h^{r_2}
  • 构建challenge c = H a s h ( g , h , P , t ) c=Hash(g,h,P,t)
  • 计算response s 1 = r 1 + m c , s 2 = r 2 + r c s_1=r_1+m*c,s_2=r_2+r*c
  • ( t , s 1 , s 2 ) (t,s_1,s_2) 发送给Verifier。

2)Verifier:

  • 验证 t P c = g s 1 h s 2 t*P^c=g^{s_1}*h^{s_2} 是否成立即可。

若将上述流程用于证明vector Pedersen commitment P = g 1 m 1 g 2 m 2 g n m n h r P=g_1^{m_1}*g_2^{m_2}*\cdots *g_n^{m_n}*h^r ,则相应Prover发送给Verifier的内容长度为 Θ ( n ) \Theta(n) —— ( t , s 1 , s 2 , , s n , s n + 1 ) (t,s_1,s_2,\cdots,s_n,s_{n+1})

2.5 Protocol 5. Equality of the opening of 2 Pedersen commitment

证明Prover知道witness ( a , b ) (a,b) ,使得 P = g 1 a h 1 b Q = g 2 a h 2 b P=g_1^a*h_1^b且Q=g_2^a*h_2^b
Witness: a , b a,b
Instance: g 1 , h 1 , g 2 , h 2 , P , Q g_1,h_1,g_2,h_2,P,Q
Relation: P = g 1 a h 1 b Q = g 2 a h 2 b P=g_1^a*h_1^b且Q=g_2^a*h_2^b

具体实现可为:
1)Prover:

  • 生成随机数 r 1 , r 2 r1,r_2 ,创建commitment t 1 = g 1 r 1 h 1 r 2 , t 2 = g 2 r 1 h 2 r 2 t_1=g_1^{r_1}*h_1^{r_2},t_2=g_2^{r_1}*h_2^{r_2}
  • 构建challenge c = H a s h ( g 1 , h 1 , g 2 , h 2 , P , Q , t 1 , t 2 ) c=Hash(g_1,h_1,g_2,h_2,P,Q,t_1,t_2)
  • 计算response s 1 = r 1 + a c , s 2 = r 2 + b c s_1=r_1+a*c,s_2=r_2+b *c
  • ( t 1 , t 2 , s 1 , s 2 ) (t_1,t_2,s_1,s_2) 发送给Verifier。

2)Verifier:

  • 验证 t 1 P c = g 1 s 1 h 1 s 2 t 2 Q c = g 2 s 1 h 2 s 2 t_1*P^c=g_1^{s_1}*h_1^{s_2}且t_2*Q^c=g_2^{s_1}*h_2^{s_2} 是否成立即可。

(?没想明白,咋用于vector Pedersen commitment或more than 2 Pedersen commitments呢??)

2.6 Protocol 6. Equality of message in 2 Pedersen commitment

证明Prover知道witness ( a , b , d ) (a,b,d) ,使得 P = g 1 a h 1 b Q = g 2 a h 2 d P=g_1^a*h_1^b且Q=g_2^a*h_2^d
Witness: a , b , d a,b,d
Instance: g 1 , h 1 , g 2 , h 2 , P , Q g_1,h_1,g_2,h_2,P,Q
Relation: P = g 1 a h 1 b Q = g 2 a h 2 d P=g_1^a*h_1^b且Q=g_2^a*h_2^d

具体实现可为:
1)Prover:

  • 生成随机数 r 1 , r 2 , r 3 r1,r_2,r_3 ,创建commitment t 1 = g 1 r 1 h 1 r 2 , t 2 = g 2 r 1 h 2 r 3 t_1=g_1^{r_1}*h_1^{r_2},t_2=g_2^{r_1}*h_2^{r_3}
  • 构建challenge c = H a s h ( g 1 , h 1 , g 2 , h 2 , P , Q , t 1 , t 2 ) c=Hash(g_1,h_1,g_2,h_2,P,Q,t_1,t_2)
  • 计算response s 1 = r 1 + a c , s 2 = r 2 + b c , s 3 = r 3 + d c s_1=r_1+a*c,s_2=r_2+b *c,s_3=r_3+d*c
  • ( t 1 , t 2 , s 1 , s 2 , s 3 ) (t_1,t_2,s_1,s_2,s_3) 发送给Verifier。

2)Verifier:

  • 验证 t 1 P c = g 1 s 1 h 1 s 2 t 2 Q c = g 2 s 1 h 2 s 3 t_1*P^c=g_1^{s_1}*h_1^{s_2}且t_2*Q^c=g_2^{s_1}*h_2^{s_3} 是否成立即可。

注意:whenever we prove some witness values are the same across different relations, the same random value is used in their corresponding commitments。如上,P和Q的 a a 相同,则构建的commitment t 1 t 2 t_1和t_2 中的 r 1 r_1 应相同。

可参看博客 Hyrax: Doubly-efficient zkSNARKs without trusted setup学习笔记 3.3节中的“proof of commitment to the same value”,所构建的证明算法proof size更小:
在这里插入图片描述

2.7 Protocol 7. Inequality of discrete logs

该协议首次在Jan Camenisch和Victor Shoup 2003年论文《Practical Verifiable Encryption and Decryption of Discrete Logarithms∗》中第6节提及。
证明Prover知道witness ( a ) (a) ,使得 P = g a Q = h b a b P=g^a,Q=h^b,且a\neq b
Witness: a a
Instance: g , h , P , Q g,h,P,Q
Relation: P = g a Q = h b a b P=g^a,Q=h^b,且a\neq b

具体实现可为:
1)Prover:

  • 生成随机数 r r ,创建commitment C = h a r Q r = h α Q β C=h^{a*r}*Q^{-r}=h^{\alpha}*Q^{\beta} ;【若 a b a\neq b ,Prover仅需证明 h α Q β = C C 1 g α P β = 1 h^{\alpha}*Q^{\beta}=C,C\neq 1且g^{\alpha}*P^{\beta}=1 。可将 1 1 C C 看成是Pedersen commitments to message α \alpha 和randomness β \beta with different generators h , Q , g , P h,Q,g,P 。可参照2.5节的Protocol 5方式执行,获得相应的 ( t 1 , t 2 , s 1 , s 2 ) (t_1,t_2,s_1,s_2)
  • ( C , t 1 , t 2 , s 1 , s 2 ) (C,t_1,t_2,s_1,s_2) 发送给Verifier。

2)Verifier:

  • 验证 C 1 C\neq 1 且按Protocol 5验证程序执行是否均成立即可。

示例代码 中,采用的Elliptic curve,其中 1 1 对应的是the identity element (the point at infinity) on the curve。

def verify_discrete_log_inequality(g, h, P, Q, C, t1s1, t2s2):
	    if C.is_identity:
	        return False
	

	    # iden is the identity element so adding or subtracting it from something makes no difference
	    iden = C - C
	    return verify_knowledge_and_eq_of_opening_of_pedersen_commitments(g, P, h, Q, iden, C, t1s1, t2s2)

3 Generalization of Sigma protocols

Dan Boneh 的视频解说 Discrete Log based Zero-Knowledge Proofs 中提到,可将Sigma protocol看成是prove knowledge of a homomorphism pre-image (其中 p r e i m a g e pre-image 为函数输入, i m a g e image 为函数输出)。
homomorphism同态性,如 g a + b = g a g b g^{a+b}=g^a*g_b 可认为具有加法同态性。

homomorphism可定义为a function f f ,where f ( a ) = g a f(a)=g^a . To prove the knowledge of a a , given common input f ( a ) f(a) (如 g a g^a ),则具体的protocol可描述为:
1)Prover:生成随机数 r r ,发送 f ( r ) = g r f(r)=g^r 给Verifier;
2)Verifier:发送challenge c c 给Prover;
3)Prover:发送response s = r + c a s=r+c*a
4)Verifier:计算 f ( s ) = g s f(s)=g^s ,验证 f ( s ) = f ( r ) f ( a ) c f(s)=f(r)*f(a)^c 是否成立即可。

3.1 Protocol 8. Equality of discrete logs

定义homomorphism函数为 f ( a ) = ( g a , h a ) f(a)=(g^a,h^a)
证明Prover知道witness x x ,使得 g x = y h x = z g^x=y且h^x=z
Witness: x x
Instance: g , h , y , z g,h,y,z
Relation: g x = y g^x=y h x = z h^x=z

具体实现可为:
1)Prover:生成随机数 r r ,发送 f ( r ) = ( g r , h r ) f(r)=(g^r,h^r) 给Verifier;
2)Verifier:发送challenge c c 给Prover;
3)Prover:发送response s = r + c a s=r+c*a
4)Verifier:计算 f ( s ) = ( g s , h s ) f(s)=(g^s,h^s) ,验证 f ( s ) = f ( r ) f ( a ) c f(s)=f(r)*f(a)^c 是否成立即可。

3.2 Protocol 9. Conjunction (AND) of discrete logs

定义homomorphism函数为 f ( a , b ) = ( g a , h b ) f(a,b)=(g^a,h^b)
证明Prover知道witness a , b a,b ,使得 g a = P h b = Q g^a=P且h^b=Q
Witness: a , b a,b
Instance: g , h , P , Q g,h,P,Q
Relation: g a = P h b = Q g^a=P且h^b=Q

具体实现可为:【相当于并行执行2个 ”knowledge of discrete log” protocol】
1)Prover:生成2个随机数 r 1 , r 2 r_1,r_2 ,发送 f ( r 1 , r 2 ) = ( g r 1 , h r 2 ) f(r_1,r_2)=(g^{r_1},h^{r_2}) 给Verifier;
2)Verifier:发送challenge c c 给Prover;
3)Prover:发送response ( s 1 , s 2 ) (s_1,s_2) ,其中 s 1 = r 1 + c a , s 2 = r 2 + c b s_1=r_1+c*a,s_2=r_2+c*b
4)Verifier:计算 f ( s 1 , s 2 ) = ( g s 1 , h s 2 ) f(s_1,s_2)=(g^{s_1},h^{s_2}) ,验证 f ( s 1 , s 2 ) = f ( r 1 , r 2 ) f ( a , b ) c f(s_1,s_2)=f(r_1,r_2)*f(a,b)^c 是否成立即可。

3.3 Protocol 10. Knowledge of opening of Pedersen commitment

定义homomorphism函数为 f ( m , r ) = g m h r f(m,r)=g^m*h^r
证明Prover知道witness ( m , r ) (m,r) ,使得 P = g m h r P=g^m*h^r
Witness: m , r m,r
Instance: g , h , P g,h,P
Relation: P = g m h r P=g^m*h^r

具体实现可为:
1)Prover:生成2个随机数 r 1 , r 2 r1,r_2 ,发送 f ( r 1 , r 2 ) = g r 1 h r 2 f(r_1,r_2)=g^{r_1}*h^{r_2} 给Verifier;
2)Verifier:发送challenge c c 给Prover;
3)Prover:发送response ( s 1 , s 2 ) (s_1,s_2) ,其中 s 1 = r 1 + c m , s 2 = r 2 + c r s_1=r_1+c*m,s_2=r_2+c*r
4)Verifier:计算 f ( s 1 , s 2 ) = g s 1 h s 2 f(s_1,s_2)=g^{s_1}*h^{s_2} ,验证 f ( s 1 , s 2 ) = f ( r 1 , r 2 ) f ( m , r ) c f(s_1,s_2)=f(r_1,r_2)*f(m,r)^c 是否成立即可。

3.4 Homomorphism preimage proof for R1CS

在这里插入图片描述

3.5 Schnorr in a group of unkown order

Dan Boneh 在2019年 2nd ZKProof Workshop 上的视频解说 Discrete Log based Zero-Knowledge Proofs

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考资料:

[1] Lovesh Harchandani 在medium的博客Zero Knowledge Proofs with Sigma Protocols
[2] Dan Boneh 的视频解说 Discrete Log based Zero-Knowledge Proofs

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/106391126
今日推荐