github仓库: https://github.com/FindoraNetwork/zei/blob/develop/crypto/src/basic/chaum_pedersen.rs
在Findora密码原语之chaum-pedersen协议 协议中介绍了一种在不泄漏承诺值的情况下证明两个承诺具有相同的承诺值的零知识证明方法,这里将其称为二元chaum-pedersen协议,此外,Findora还支持chaum_pedersen的批量证明,也即证明多个pedersen 承诺具有相同的承诺值,在证明过程会用到上面的二元chaum_pedersen证明,设 P i = v G + b i H , i ∈ { 1 , . . . , n } P_i = vG + b_iH, i \in \{1,...,n\} Pi=vG+biH,i∈{1,...,n},证明过程如下:
Prove:
输入: P i , v , b i , i ∈ { 1 , . . . , n } , 输入:P_i, v,b_i,i \in \{1,...,n\}, 输入:Pi,v,bi,i∈{1,...,n},
输出: π 1 , π 2 输出:\pi_1,\pi_2 输出:π1,π2
- 计算 P 1 和 P 2 的二元 c h a u m _ p e d e r s e n 证明 π 1 = ( c 1 , c 2 , s 1 , s 2 , s 3 ) 计算P_1和P_2的二元chaum\_pedersen证明\pi_1= (c_1,c_2,s_1,s_2,s_3) 计算P1和P2的二元chaum_pedersen证明π1=(c1,c2,s1,s2,s3)
- 通过 F i a t − S h a m i r 变换计算 l 3 , l 4 , . . . l n 通过Fiat-Shamir变换计算l_3,l_4,...l_n 通过Fiat−Shamir变换计算l3,l4,...ln
- 计算 c o m m = ∑ j = 3 n l j ⋅ ( P 1 − P j ) 计算comm = \sum_{j=3}^{n} l_j \cdot(P_1 -P_j) 计算comm=∑j=3nlj⋅(P1−Pj)
- 计算 r = ∑ j = 3 n l j ⋅ ( b 1 − b j ) 计算r =\sum_{j=3}^{n} l_j \cdot(b_1 -b_j) 计算r=∑j=3nlj⋅(b1−bj)
- 计算 c o m m 和 0 G 的二元 c h a u m _ p e d e r s e n 证明 π 2 计算comm和0_G的二元chaum\_pedersen证明\pi_2 计算comm和0G的二元chaum_pedersen证明π2
Verify:
输入: P i , π 1 , π 2 输入:P_i,\pi_1,\pi_2 输入:Pi,π1,π2
输出: t r u e o r f a l s e 输出:true\ or \ false 输出:true or false
-
通过 F i a t − S h a m i r 变换计算 l 3 , l 4 , . . . l n 通过Fiat-Shamir变换计算l_3,l_4,...l_n 通过Fiat−Shamir变换计算l3,l4,...ln
-
计算 c o m m = ∑ j = 3 n l j ⋅ ( P 1 − P j ) 计算comm = \sum_{j=3}^{n} l_j \cdot(P_1 -P_j) 计算comm=∑j=3nlj⋅(P1−Pj)
-
验证二元 c h a u m _ p e d e r s e n ,其输入是 ( P 1 , P 2 , π 1 ) 验证二元chaum\_pedersen,其输入是(P_1,P_2,\pi_1) 验证二元chaum_pedersen,其输入是(P1,P2,π1)
-
验证二元 c h a u m _ p e d e r s e n ,其输入是 ( c o m m , 0 G , π 2 ) 验证二元chaum\_pedersen,其输入是(comm,0_G,\pi_2) 验证二元chaum_pedersen,其输入是(comm,0G,π2)