1. 椭圆曲线下的Pedersen commitment
椭圆曲线下Pedersen commitment可用scalar multiplication of curve points来表示:
C=rH+aGC=rH+aGC=rH+aG
其中,CCC为椭圆曲线上的一个点curve point,作为commitment;aaa为commit to 的数值;rrr为随机数,可提供隐藏功能;GGG为所选择椭圆曲线广泛接受的generator;HHH为椭圆曲线上的另一个点,且保证无任何可推导qqq,使得H=qGH=qGH=qG,这个H与G直接无明确关系非常重要。
如需open commitment CCC,需要提供r值和a值。
Pedersen commitment具有加法同态性:
C(r1,a1)+C(r2,a2)=r1H+a1G+r2H+a2G=(r1+r2)H+(a1+a2)G=C(r1+r2,a1+a2)C(r_1,a_1)+C(r_2,a_2)=r_1H+a_1G+r_2H+a_2G=(r_1+r_2)H+(a_1+a_2)G=C(r_1+r_2,a_1+a_2)C(r1,a1)+C(r2,a2)=r1H+a1G+r2H+a2G=(r1+r2)H+(a1+a2)G=C(r1+r2,a1+a2)
2. Vector Pedersen Commitment 向量commitment
C=rH+(v1G1+v2G2+....+vnGn)=rH+v⃗G⃗C=rH+(v_1G_1+v_2G_2+....+v_nG_n)=rH+\vec v\vec GC=rH+(v1G1+v2G2+....+vnGn)=rH+vG
其中,各个GiG_iGi可由Hash(encode(G)∣∣i)Hash(encode(G)||i)Hash(encode(G)∣∣i)来获取。
如需open commitment CCC,需要提供随机数r值和向量值v⃗\vec vv。
向量值v⃗\vec vv中可以有大量元素,但最终的commitment只为椭圆曲线上的一个点CCC。
也可以同时对多个Vector进行commitment,如对v⃗,w⃗\vec v,\vec wv,w同时commitment:
C=rH+v⃗G⃗+w⃗H⃗C=rH+\vec v\vec G+\vec w\vec HC=rH+vG+wH
其中,各个HiH_iHi可由Hash(encode(H)∣∣i)Hash(encode(H)||i)Hash(encode(H)∣∣i)来获取,即curve point HHH不在vector H⃗\vec HH中。
3. A zero knowledge argument of knowledge of a set of vectors——一系列向量的零知识证明
假设有m个向量x⃗1,x⃗2,...,x⃗m\vec x_1,\vec x_2, ..., \vec x_mx1,x2,...,xm,且每个向量都有N个元素(N!=mN != mN!=m)。已知各个向量的commitment为:
C1=r1H+x⃗1G⃗C_1=r_1H+\vec x_1 \vec GC1=r1H+x1G
C2=r2H+x⃗2G⃗C_2=r_2H+\vec x_2 \vec GC2=r2H+x2G
.........
Cm=rmH+x⃗mG⃗C_m=r_mH+\vec x_m \vec GCm=rmH+xmG
以下PPP代表prover, VVV代表Verifier。
a) P→V:C0P \rightarrow V: C_0P→V:C0 (a new commitment to a newly chosen random vector of dimension N)
b) V→P:eV \rightarrow P: eV→P:e (a random scalar,也可称为challenge值。)
c) P→V:(z⃗,s)P \rightarrow V: (\vec z, s)P→V:(z,s) (a single vector of dimension N, and another scalar)
其中:
z⃗=∑i=0meix⃗i,s=∑i=0meiri\vec z=\sum_{i=0}^{m}e^i\vec x_i, \quad s=\sum_{i=0}^{m}e^ir_iz=∑i=0meixi,s=∑i=0meiri
通过随机数eee,可很好的隐藏向量x⃗\vec xx,如取z⃗\vec zz向量的第二个元素——z2=x02+ex12+...+emxm2z_2=x_{02}+ex_{12}+...+e^mx_{m2}z2=x02+ex12+...+emxm2。
有1*m维矩阵:
(1,e,e2,...,em)(1,e,e^2,...,e^m)(1,e,e2,...,em)
使得z值无法获取相应的x值。
对于Verifier,只需验证:
∑i=0meiCi=?sH+z⃗G⃗\sum_{i=0}^{m}e^iC_i=?sH+\vec z\vec G∑i=0meiCi=?sH+zG
证明过程如下:
sH+z⃗G⃗=∑i=0mei(riH)+∑i=0meix⃗iG⃗=∑i=0mei(riH+x⃗iG⃗)=∑i=0meiCisH+\vec z\vec G=\sum_{i=0}^{m}e^i(r_iH)+\sum_{i=0}^{m}e^i\vec x_i\vec G=\sum_{i=0}^{m}e^i(r_iH+\vec x_i\vec G)=\sum_{i=0}^{m}e^iC_isH+zG=∑i=0mei(riH)+∑i=0meixiG=∑i=0mei(riH+xiG)=∑i=0meiCi
由以上证明可知,Verifer可根据信息(C0,e,(z⃗,s))(C_0,e,(\vec z, s))(C0,e,(z,s)),可信服honest prover的proof (z⃗,s)(\vec z, s)(z,s)。
但是对于不诚信的prover,他可以随机选择e,(z⃗,s)e,(\vec z, s)e,(z,s)值,并根据之前已生成的C1,C2,...,CmC_1,C_2,...,C_mC1,C2,...,Cm值,推导出C0=(sH+z⃗G⃗)−(∑i=1meiCi)C_0=(sH+\vec z\vec G)-(\sum_{i=1}^{m}e^{i}C_i)C0=(sH+zG)−(∑i=1meiCi),
使得∑i=0meiCi=C0+∑i=1meiCi=(sH+z⃗G⃗)−(∑i=1meiCi)+∑i=1meiCi=sH+z⃗G⃗\sum_{i=0}^{m}e^iC_i=C_0+\sum_{i=1}^{m}e^{i}C_i=(sH+\vec z\vec G)-(\sum_{i=1}^{m}e^{i}C_i)+\sum_{i=1}^{m}e^{i}C_i=sH+\vec z\vec G∑i=0meiCi=C0+∑i=1meiCi=(sH+zG)−(∑i=1meiCi)+∑i=1meiCi=sH+zG恒成立,因此,对于此种情况,不诚信的prover可伪造相应的证明。
若需要open此种情况下的commitment,需要提供C1,C2,...CmC_1,C_2,...C_mC1,C2,...Cm对应的共m个scalar数r1,r2,...,rmr_1,r_2,...,r_mr1,r2,...,rm,以及m∗Nm*Nm∗N个向量元素x11,x12,...,xmNx_{11},x_{12},...,x_{mN}x11,x12,...,xmN。
3.1 一系列向量的零知识证明的soundness验证
修改上面的流程,重复a)b)c)步骤m+1次,每次均为scalar e提供不同的随机值eje_jej:
(C0,0,e0,(z⃗0,s0))(C_{0,0},e_0,(\vec z_0,s_0))(C0,0,e0,(z0,s0))
(C0,1,e1,(z⃗1,s1))(C_{0,1},e_1,(\vec z_1,s_1))(C0,1,e1,(z1,s1))
(C0,2,e2,(z⃗2,s2))(C_{0,2},e_2,(\vec z_2,s_2))(C0,2,e2,(z2,s2))
.........
(C0,m,em,(z⃗m,sm))(C_{0,m},e_m,(\vec z_m,s_m))(C0,m,em,(zm,sm))
相应地:
z⃗j=∑i=0mejix⃗i,sj=∑i=0mejiri,其中j∈[0,m]\vec z_j=\sum_{i=0}^{m}e_j^i\vec x_i, \quad s_j=\sum_{i=0}^{m}e_j^ir_i, \quad 其中j\in [0,m]zj=∑i=0mejixi,sj=∑i=0mejiri,其中j∈[0,m]
则 有(m+1)*(m+1)维矩阵:
A−1=(1e0e02...e0m1e1e12...e1m1e2e22...e2m...1emem2...emm)A^{-1}=\begin{pmatrix}
1& e_0& e_0^2 &... &e_0^m \\
1& e_1& e_1^2 &... &e_1^m\\
1& e_2& e_2^2 &... &e_2^m\\
...& & & & \\
1& e_m& e_m^2 &... &e_m^m
\end{pmatrix}A−1=⎝⎜⎜⎜⎜⎛111...1e0e1e2eme02e12e22em2............e0me1me2memm⎠⎟⎟⎟⎟⎞
使得z值无法获取相应的x值。该矩阵为Vandermonde 矩阵。
若e0,e1,...,eme_0,e_1,...,e_me0,e1,...,em互异,则存在对应的逆矩阵为:
A=(a00a01a02...a0ma10a11a12...a1ma20a21a22...a2m...am0am1am2...amm)A=\begin{pmatrix}
a_{00}& a_{01}& a_{02}&... &a_{0m} \\
a_{10}& a_{11}& a_{12}&... &a_{1m} \\
a_{20}& a_{21}& a_{22}&... &a_{2m} \\
...& & & & \\
a_{m0}& a_{m1}& a_{m2}&... &a_{mm}
\end{pmatrix}A=⎝⎜⎜⎜⎜⎛a00a10a20...am0a01a11a21am1a02a12a22am2............a0ma1ma2mamm⎠⎟⎟⎟⎟⎞
相应的Z也为矩阵,满足:
Z=A−1X=(1e0e02...e0m1e1e12...e1m1e2e22...e2m...1emem2...emm)(x⃗0x⃗1x⃗2...x⃗m)=(∑i=0me0ix⃗i∑i=0me1ix⃗i∑i=0me2ix⃗i...∑i=0memix⃗i)=(z⃗0z⃗1z⃗2...z⃗m)Z=A^{-1}X=\begin{pmatrix}
1& e_0& e_0^2 &... &e_0^m \\
1& e_1& e_1^2 &... &e_1^m\\
1& e_2& e_2^2 &... &e_2^m\\
...& & & & \\
1& e_m& e_m^2 &... &e_m^m
\end{pmatrix}\begin{pmatrix}
\vec x_0\\
\vec x_1\\
\vec x_2\\
... \\
\vec x_m
\end{pmatrix}=\begin{pmatrix}
\sum_{i=0}^{m}e_0^i\vec x_i\\
\sum_{i=0}^{m}e_1^i\vec x_i\\
\sum_{i=0}^{m}e_2^i\vec x_i\\
... \\
\sum_{i=0}^{m}e_m^i\vec x_i
\end{pmatrix}=\begin{pmatrix}
\vec z_0\\
\vec z_1\\
\vec z_2\\
... \\
\vec z_m
\end{pmatrix}Z=A−1X=⎝⎜⎜⎜⎜⎛111...1e0e1e2eme02e12e22em2............e0me1me2memm⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎛x0x1x2...xm⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛∑i=0me0ixi∑i=0me1ixi∑i=0me2ixi...∑i=0memixi⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛z0z1z2...zm⎠⎟⎟⎟⎟⎞
即相当于求m+1个方程式,存在唯一解(x⃗0,x⃗1,...,x⃗m)(\vec x_0, \vec x_1,..., \vec x_m)(x0,x1,...,xm)。即可保证soundness。
若e0,e1,...,eme_0,e_1,...,e_me0,e1,...,em不互异,则可逆矩阵A不存在,也不能保证解的唯一性。
根据矩阵基础知识,矩阵B存在可逆矩阵的充分必要条件为B的判别式不为零,即det|B|!=0。
A的可逆矩阵A-1之间的关系有:AA−1=I,I为单位矩阵AA^{-1}=I,I为单位矩阵AA−1=I,I为单位矩阵,即:
AA−1=(a00a01a02...a0ma10a11a12...a1ma20a21a22...a2m...am0am1am2...amm)(1e0e02...e0m1e1e12...e1m1e2e22...e2m...1emem2...emm)=(100...0010...0001...0...000...1)=(δ00δ01δ02...δ0mδ10δ11δ12...δ1mδ20δ21δ22...δ2m...δm0δm1δm2...δmm)AA^{-1}=\begin{pmatrix}
a_{00}& a_{01}& a_{02}&... &a_{0m} \\
a_{10}& a_{11}& a_{12}&... &a_{1m} \\
a_{20}& a_{21}& a_{22}&... &a_{2m} \\
...& & & & \\
a_{m0}& a_{m1}& a_{m2}&... &a_{mm}
\end{pmatrix}\begin{pmatrix}
1& e_0& e_0^2 &... &e_0^m \\
1& e_1& e_1^2 &... &e_1^m\\
1& e_2& e_2^2 &... &e_2^m\\
...& & & & \\
1& e_m& e_m^2 &... &e_m^m
\end{pmatrix}=\begin{pmatrix}
1& 0& 0 &... &0 \\
0& 1& 0 &... &0 \\
0& 0& 1 &... &0 \\
...& & & & \\
0& 0& 0 &... &1
\end{pmatrix}=\begin{pmatrix}
\delta _{00}& \delta _{01}& \delta _{02} &... &\delta _{0m} \\
\delta _{10}& \delta _{11}& \delta _{12} &... &\delta _{1m} \\
\delta _{20}& \delta _{21}& \delta _{22} &... &\delta _{2m} \\
...& & & & \\
\delta _{m0}& \delta _{m1}& \delta _{m2} &... &\delta _{mm}
\end{pmatrix}AA−1=⎝⎜⎜⎜⎜⎛a00a10a20...am0a01a11a21am1a02a12a22am2............a0ma1ma2mamm⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎛111...1e0e1e2eme02e12e22em2............e0me1me2memm⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛100...001000010............0001⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛δ00δ10δ20...δm0δ01δ11δ21δm1δ02δ12δ22δm2............δ0mδ1mδ2mδmm⎠⎟⎟⎟⎟⎞
上面公式中,eje_jej为challenge值,有:
δhi=∑j=0mahjeji\delta _{hi}=\sum_{j=0}^{m}a_{hj}e_j^iδhi=∑j=0mahjeji
当h==ih==ih==i时,有δhi=1\delta _{hi}=1δhi=1;当h!=ih!=ih!=i时,有δhi=0\delta _{hi}=0δhi=0。也可称δhi\delta _{hi}δhi为Kronecker delta函数。
基于δhi\delta _{hi}δhi的特性,有:
Ch=∑i=0mδhiCiC_h=\sum_{i=0}^{m}\delta _{hi}C_iCh=∑i=0mδhiCi
⇔Ch=∑i=0mδhiCi=∑i=0m(∑j=0mahjeji)Ci\Leftrightarrow C_h=\sum_{i=0}^{m}\delta _{hi}C_i=\sum_{i=0}^{m}(\sum_{j=0}^{m}a_{hj}e_j^i)C_i⇔Ch=∑i=0mδhiCi=∑i=0m(∑j=0mahjeji)Ci
⇔根据加法交换律有:Ch=∑i=0m(∑j=0mahjeji)Ci=∑j=0mahj(∑i=0mejiCi)\Leftrightarrow 根据加法交换律有: \quad C_h=\sum_{i=0}^{m}(\sum_{j=0}^{m}a_{hj}e_j^i)C_i=\sum_{j=0}^{m}a_{hj}(\sum_{i=0}^{m}e_j^iC_i)⇔根据加法交换律有:Ch=∑i=0m(∑j=0mahjeji)Ci=∑j=0mahj(∑i=0mejiCi)
∵Ci=riH+x⃗iG⃗,z⃗j=∑i=0mejix⃗i,sj=∑i=0mejiri,以及加法结合律\because C_i=r_iH+\vec x_i\vec G, \quad \vec z_j=\sum_{i=0}^{m}e_j^i\vec x_i, \quad s_j=\sum_{i=0}^{m}e_j^ir_i, \quad 以及加法结合律∵Ci=riH+xiG,zj=∑i=0mejixi,sj=∑i=0mejiri,以及加法结合律
∴Ch=∑j=0mahj(∑i=0meji(riH+x⃗iG⃗))=∑j=0mahj(∑i=0mejiriH)+∑j=0mahj(∑i=0mejix⃗iG⃗)=∑j=0mahjsjH+∑j=0mahjz⃗jG⃗\therefore C_h=\sum_{j=0}^{m}a_{hj}(\sum_{i=0}^{m}e_j^i(r_iH+\vec x_i\vec G))=\sum_{j=0}^{m}a_{hj}(\sum_{i=0}^{m}e_j^ir_iH)+\sum_{j=0}^{m}a_{hj}(\sum_{i=0}^{m}e_j^i\vec x_i\vec G)=\sum_{j=0}^{m}a_{hj}s_jH+\sum_{j=0}^{m}a_{hj}\vec z_j\vec G∴Ch=∑j=0mahj(∑i=0meji(riH+xiG))=∑j=0mahj(∑i=0mejiriH)+∑j=0mahj(∑i=0mejixiG)=∑j=0mahjsjH+∑j=0mahjzjG
⇒Ch\Rightarrow C_h⇒Chis a commitment to ∑j=0mahjz⃗j\sum_{j=0}^{m}a_{hj}\vec z_j∑j=0mahjzj with randomness ∑j=0mahjsj\sum_{j=0}^{m}a_{hj}s_j∑j=0mahjsj
∵Ch=rhH+x⃗hG⃗,以及有且仅有一个值对应一个commitment\because C_h=r_hH+\vec x_h\vec G,\quad以及有且仅有一个值对应一个commitment∵Ch=rhH+xhG,以及有且仅有一个值对应一个commitment
⇒x⃗h=∑j=0mahjz⃗j\Rightarrow \vec x_h=\sum_{j=0}^{m}a_{hj}\vec z_j⇒xh=∑j=0mahjzj
以上公式推导可知,当有m+1个不同的方程式时,可以通过(z⃗0,z⃗1,z⃗2,...,z⃗m)(\vec z_0, \vec z_1, \vec z_2,...,\vec z_m)(z0,z1,z2,...,zm)一一对应的提取出所有的witness向量值(x⃗0,x⃗1,x⃗2,...,x⃗m)(\vec x_0, \vec x_1, \vec x_2,...,\vec x_m)(x0,x1,x2,...,xm)
通过本算法,根据proof信息,可提取witness信息,且为唯一解,即保证了“knowledge-soundness”。由于解的唯一性,当Prover不知道解的情况下,无法提供可验证通过的proof。
3.2 Polynomial Interpolation多项式插值
Z=A−1X=(1e0e02...e0m1e1e12...e1m1e2e22...e2m...1emem2...emm)(x⃗0x⃗1x⃗2...x⃗m)=(∑i=0me0ix⃗i∑i=0me1ix⃗i∑i=0me2ix⃗i...∑i=0memix⃗i)=(z⃗0z⃗1z⃗2...z⃗m)Z=A^{-1}X=\begin{pmatrix}
1& e_0& e_0^2 &... &e_0^m \\
1& e_1& e_1^2 &... &e_1^m\\
1& e_2& e_2^2 &... &e_2^m\\
...& & & & \\
1& e_m& e_m^2 &... &e_m^m
\end{pmatrix}\begin{pmatrix}
\vec x_0\\
\vec x_1\\
\vec x_2\\
... \\
\vec x_m
\end{pmatrix}=\begin{pmatrix}
\sum_{i=0}^{m}e_0^i\vec x_i\\
\sum_{i=0}^{m}e_1^i\vec x_i\\
\sum_{i=0}^{m}e_2^i\vec x_i\\
... \\
\sum_{i=0}^{m}e_m^i\vec x_i
\end{pmatrix}=\begin{pmatrix}
\vec z_0\\
\vec z_1\\
\vec z_2\\
... \\
\vec z_m
\end{pmatrix}Z=A−1X=⎝⎜⎜⎜⎜⎛111...1e0e1e2eme02e12e22em2............e0me1me2memm⎠⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎛x0x1x2...xm⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛∑i=0me0ixi∑i=0me1ixi∑i=0me2ixi...∑i=0memixi⎠⎟⎟⎟⎟⎞=⎝⎜⎜⎜⎜⎛z0z1z2...zm⎠⎟⎟⎟⎟⎞
以上公式,可抽象为一个多项式,该多项式的变量为e,系数分别为x⃗0,x⃗1,x⃗2,...,x⃗m\vec x_0, \vec x_1, \vec x_2,...,\vec x_mx0,x1,x2,...,xm:
Z(e)=x⃗0+x⃗1e+x⃗2e2+...+x⃗memZ(e)=\vec x_0+\vec x_1e+\vec x_2e^2+...+\vec x_me^mZ(e)=x0+x1e+x2e2+...+xmem
对Z(e)Z(e)Z(e)多项式的变量eee分别取m+1不同的值e0,e1,e2,...,eme_0,e_1, e_2,...,e_me0,e1,e2,...,em,可通过Lagrange interpolation来唯一确定Z(e)Z(e)Z(e)多项式的系数x⃗0,x⃗1,x⃗2,...,x⃗m\vec x_0, \vec x_1, \vec x_2,...,\vec x_mx0,x1,x2,...,xm。
参考资料:
[1] http://www0.cs.ucl.ac.uk/staff/J.Groth/MatrixZK.pdf
[2] https://joinmarket.me/static/FromZK2BPs_v1.pdf
本文介绍了椭圆曲线下的Pedersen承诺机制及其向量扩展,包括其加法同态性及一系列向量的零知识证明过程。此外,还讨论了多项式插值在该过程中的应用。

3192

被折叠的 条评论
为什么被折叠?



