当掌握了以上知识点后,我们进入IPA方案的具体流程,验证者拥有一个IPA方案包含三个算法 ( S e t u p , C o m m i t , O p e n ) (Setup,Commit,Open) (Setup,Commit,Open)。
IPA多项式承诺方案采用Pedersden向量承诺来承诺多项式。因此,IPA的 S e t u p Setup Setup算法与Pedersden向量承诺一致。
-
S e t u p : Setup: Setup:验证者生成参数 p p = ( G , G ∈ G n , H ∈ G , F p ) pp=(G,\pmb{G}\in G^n,H\in G,F_p ) pp=(G,G∈Gn,H∈G,Fp),其中, G \pmb{G} G是指 ( G 0 , G 1 , … , G n − 1 ) (G_0,G_1,\dots,G_{n-1}) (G0,G1,…,Gn−1), G , H \pmb{G},H G,H是随机选取的群元素。
-
C o m m i t : Commit: Commit:证明方拥有多项式 f ( X ) = a 0 + a 1 X + ⋯ + a n − 1 X n − 1 f(X)=a_0+a_1X+\dots+a_{n-1}X^{n-1} f(X)=a0+a1X+⋯+an−1Xn−1,系数表示为 a = ( a 0 , a 1 , ⋯ , a n − 1 ) \pmb{a}=(a_0,a_1,\cdots,a_{n-1}) a=(a0,a1,⋯,an−1),采用Pedersden向量承诺对多项式进行承诺,计算如下:
c m = a 0 G 0 + a 1 G 1 + ⋯ + m n − 1 G n − 1 + r H = < a , G > + r H cm=a_0G_0+a_1G_1+\dots+m_{n-1}G_{n-1}+rH\\ =<\bm{a},\bm{G}>+rH cm=a0G0+a1G1+⋯+mn−1Gn−1+rH=<a,G>+rH -
O p e n : Open: Open:
- 验证方选择一个随机评估点 z z z,发送给证明者。
- 证明方计算多项式值 f ( z ) = < a , b > f(z)=<\pmb{a},\pmb{b}> f(z)=<a,b>,其中 b \pmb{b} b为 ( 1 , z , z 2 , ⋯ , z n − 1 ) (1,z,z^2,\cdots ,z^{n-1}) (1,z,z2,⋯,zn−1)。发送证明 a , r \pmb{a},r a,r和评估 f ( z ) f(z) f(z)给验证者。
- 验证者将验证以下等式来确保
f
(
z
)
f(z)
f(z)是证明者承诺的多项式在
z
z
z点的值。
c m = < a , G > + r H f ( z ) = < a , b > cm=<\bm{a},\bm{G}>+rH\\ f(z)=<\bm{a},\bm{b}> cm=<a,G>+rHf(z)=<a,b>
此时方案流程如下图所示。
注意,此时并未考虑零知识,既先不考虑多项式承诺方案的hiding属性。
若验证者选择一个随机数 U ∈ G U\in G U∈G,采用随机线性化组合将两个验证等式合并成一个等式。即
c m + f ( z ) U = < a , G > + r H + < a , b > U cm+f(z)U=<\bm{a},\bm{G}>+rH+<\bm{a},\bm{b}>U cm+f(z)U=<a,G>+rH+<a,b>U
若设置 P = c m + f ( z ) U P=cm+f(z)U P=cm+f(z)U,验证等式为 P = < a , G > + r H + < a , b > U P=<\pmb{a},\pmb{G}>+rH+<\pmb{a},\pmb{b}>U P=<a,G>+rH+<a,b>U,考虑采用分配律来合并缩小证明 a \pmb{a} a的大小。此时证明方需要计算辅助验证等式的值。
K 1 = < a L , G R > + < a L , b R > U K 2 = < a R , G L > + < a R , b L > U K_1=<\bm{a_L},\bm{G_R}>+<\bm{a_L},\bm{b_R}>U\\ K_2=<\bm{a_R},\bm{G_L}>+<\bm{a_R},\bm{b_L}>U\\ K1=<aL,GR>+<aL,bR>UK2=<aR,GL>+<aR,bL>U
验证者的验证等式为
P
=
<
a
,
G
>
+
r
H
+
<
a
,
b
>
U
K
1
=
<
a
L
,
G
R
>
+
<
a
L
,
b
R
>
U
K
2
=
<
a
R
,
G
L
>
+
<
a
R
,
b
L
>
U
P=<\bm{a},\bm{G}>+rH+<\bm{a},\bm{b}>U\\ K_1=<\bm{a_L},\bm{G_R}>+<\bm{a_L},\bm{b_R}>U\\ K_2=<\bm{a_R},\bm{G_L}>+<\bm{a_R},\bm{b_L}>U\\
P=<a,G>+rH+<a,b>UK1=<aL,GR>+<aL,bR>UK2=<aR,GL>+<aR,bL>U
流程如下。
选择随机数 x ∈ F q x \in F_q x∈Fq,合并验证等式为
P + x K 2 + x − 1 K 1 = < x − 1 a L + a R , x G L + G R > + r H + < x − 1 a L + a R , x b L + b R > U P+xK_2+x^{-1}K_1=<x^{-1}\bm{a_L}+\bm{a_R},x\bm{G_L}+\bm{G_R}>+rH+<x^{-1}\bm{a_L}+\bm{a_R},x\bm{b_L}+\bm{b_R}>U P+xK2+x−1K1=<x−1aL+aR,xGL+GR>+rH+<x−1aL+aR,xbL+bR>U
此时,验证者仅需验证以上等式成立则可证明
P
=
<
a
,
G
>
+
r
H
+
<
a
,
b
>
U
P=<\pmb{a},\pmb{G}>+rH+<\pmb{a},\pmb{b}>U
P=<a,G>+rH+<a,b>U成立。此时证明为
x
−
1
a
L
+
a
R
x^{-1}\pmb{a_L}+\pmb{a_R}
x−1aL+aR和
r
r
r,证明
a
\pmb{a}
a的大小仅为原本的一半。如下图所示。
若设置 P = P + x K 2 + x − 1 K 1 , a = x − 1 a L + a R , G = x G L + G R , b = x b L + b R P=P+xK_2+x^{-1}K_1,\pmb{a}=x^{-1}\pmb{a_L}+\pmb{a_R},\pmb{G}=x\pmb{G_L}+\pmb{G_R},\pmb{b}=x\pmb{b_L}+\pmb{b_R} P=P+xK2+x−1K1,a=x−1aL+aR,G=xGL+GR,b=xbL+bR,此时验证等式形式依然是 P = < a , G > + r H + < a , b > U P=<\pmb{a},\pmb{G}>+rH+<\pmb{a},\pmb{b}>U P=<a,G>+rH+<a,b>U,可以重复以上缩减证明的操作,直达证明 a \pmb{a} a的大小仅为一个元素。
此时的 O p e n Open Open具体步骤如下:
-
验证方选择一个随机评估点 z z z,发送给证明者。
-
证明方计算多项式值 f ( z ) = < a , b > f(z)=<\pmb{a},\pmb{b}> f(z)=<a,b>,其中 b \pmb{b} b为 ( 1 , z , z 2 , ⋯ , z n − 1 ) (1,z,z^2,\cdots ,z^{n-1}) (1,z,z2,⋯,zn−1)。发送评估 f ( z ) f(z) f(z)给验证者。
-
验证者选择选择一个随机群元素 U ∈ G U\in G U∈G,并发送给证明者。
-
证明者计算并发送辅助验证等式的值给验证者
K 1 = < a L , G R > + < a L , b R > U K 2 = < a R , G L > + < a R , b L > U K_1=<\bm{a_L},\bm{G_R}>+<\bm{a_L},\bm{b_R}>U\\ K_2=<\bm{a_R},\bm{G_L}>+<\bm{a_R},\bm{b_L}>U\\ K1=<aL,GR>+<aL,bR>UK2=<aR,GL>+<aR,bL>U
-
验证者选择随机数 x ∈ F q x \in F_q x∈Fq,并发送给证明者。
-
证明者计算下一轮的 a , G , b \pmb{a},\pmb{G},\pmb{b} a,G,b
a = x − 1 a L + a R G = x G L + G R b = x b L + b R \bm{a}=x^{-1}\bm{a_L}+\bm{a_R}\\ \bm{G}=x\bm{G_L}+\bm{G_R}\\ \bm{b}=x\bm{b_L}+\bm{b_R}\\ a=x−1aL+aRG=xGL+GRb=xbL+bR
重复以上步骤(重复 l o g 2 n log_2n log2n轮),直至 a \pmb{a} a的元素个数为1,停止,并发送 a , r \pmb{a},r a,r给验证者。
-
假设第 j j j轮的 K 1 , K 2 , x , a , G , b K_1,K_2,x,\pmb{a},\pmb{G},\pmb{b} K1,K2,x,a,G,b表示为 K 1 j , K 2 j , x j , a j , G j , b j K_1^j,K_2^j,x_j,\pmb{a_j},\pmb{G_j},\pmb{b_j} K1j,K2j,xj,aj,Gj,bj,验证者首先计算 P = P + ∑ i = 1 l o g 2 n x i K 1 i + ∑ i = 1 l o g 2 n x i − 1 K 2 i P=P+\sum^{log_2n}_{i=1}x_iK_1^i+\sum^{log_2n}_{i=1}x_i^{-1}K_2^i P=P+∑i=1log2nxiK1i+∑i=1log2nxi−1K2i,然后计算最后的 G l o g 2 n , b l o g 2 n G_{log_2n},b_{log_2n} Glog2n,blog2n,验证等式 P = < a l o g 2 n , G l o g 2 n > + r H + < a l o g 2 n , b l o g 2 n > U P=<a_{log_2n},G_{log_2n}>+rH+<a_{log_2n},b_{log_2n}>U P=<alog2n,Glog2n>+rH+<alog2n,blog2n>U,注意此时 a l o g 2 n , G l o g 2 n , b l o g 2 n a_{log_2n},G_{log_2n},b_{log_2n} alog2n,Glog2n,blog2n的长度均为1。
但本方案目前未考虑零知识性,思考那些元素会泄漏与隐私 a , r \pmb{a},r a,r相关的信息。
首先考虑到每轮辅助验证等式的值 K 1 , K 2 K_1,K_2 K1,K2,其次还有最后发送的信息 a l o g 2 n , r a_{log_2n},r alog2n,r。因为Pedersen向量承诺增加了随机项 r H rH rH具有隐藏属性,因此 P P P不会泄漏信息。
-
对于第 j j j轮 K 1 j , K 2 j K_1^j,K_2^j K1j,K2j,可以增加两项随机项 l j H , r j H l_jH,r_jH ljH,rjH,使其变为Pedersen向量承诺形式,具有隐藏属性,则 K 1 j , K 2 j K_1^j,K_2^j K1j,K2j的计算过程如下:
K 1 j = < a L j , G R j > + l j H + < a L j , b R j > U K 2 j = < a R j , G L j > + r j H + < a R j , b L j > U K_1^j=<\bm{a_L^j},\bm{G_R^j}>+l_jH+<\bm{a_L^j},\bm{b_R^j}>U\\ K_2^j=<\bm{a_R^j},\bm{G_L^j}>+r_jH+<\bm{a_R^j},\bm{b_L^j}>U\\ K1j=<aLj,GRj>+ljH+<aLj,bRj>UK2j=<aRj,GLj>+rjH+<aRj,bLj>U
最后证明者发送 r ′ = r + ∑ i = 1 l o g 2 n x i l i + ∑ i = 1 l o g 2 n x i − 1 r i r'=r+\sum^{log_2n}_{i=1}x_il_i+\sum^{log_2n}_{i=1}x_i^{-1}r_i r′=r+∑i=1log2nxili+∑i=1log2nxi−1ri和 a l o g 2 n a_{log_2n} alog2n。验证者验证等式为 P = < a l o g 2 n , G l o g 2 n > + r ′ H + < a l o g 2 n , b l o g 2 n > U P=<a_{log_2n},G_{log_2n}>+r'H+<a_{log_2n},b_{log_2n}>U P=<alog2n,Glog2n>+r′H+<alog2n,blog2n>U。
-
对于最后发送的信息 a l o g 2 n , r ′ a_{log_2n},r' alog2n,r′,采用 Σ \Sigma Σ 协议实现零知识。此时的论证是 P = < a l o g 2 n , G l o g 2 n > + r ′ H + < a l o g 2 n , b l o g 2 n > U P=<a_{log_2n},G_{log_2n}>+r'H+<a_{log_2n},b_{log_2n}>U P=<alog2n,Glog2n>+r′H+<alog2n,blog2n>U。
首先生成同形式的随机项,此时有两个隐私信息,选择随机数 s , d s,d s,d,计算如下。
R = < s , G l o g 2 n > + d H + < s , b l o g 2 n > U R=<s,G_{log_2n}>+dH+<s,b_{log_2n}>U R=<s,Glog2n>+dH+<s,blog2n>U
发送R给验证方,验证方返回一个随机挑战值 c c c,证明者计算并返回证明 z 1 , z 2 z_1,z_2 z1,z2,其中
z 1 = s + c a l o g 2 n z 2 = d + c r ′ z_1=s+ca_{log_2n}\\ z_2=d+cr' z1=s+calog2nz2=d+cr′
验证者验证如下等式。
R + c P = < z 1 , G l o g 2 n > + z 2 H + < z 1 , b l o g 2 n > U R+cP=<z_1,G_{log_2n}>+z_2H+<z_1,b_{log_2n}>U R+cP=<z1,Glog2n>+z2H+<z1,blog2n>U
以上措施实现IPA方案的零知识性。
思考: r ′ r' r′并不泄漏 r r r的相关信息,为何也需要零知识?
恭喜你,你已经掌握了IPA多项式承诺了。
思考:怎么构建一个多项式在多个点打开、多个多项式在一个点打开、多个多项式在多个点打开的情况下的IPA多项式承诺方案,即批量IPA多项式承诺方案,其证明的有什么变化,验证等式有什么变化?
如果有笔误或者叙述错误,欢迎留言指正。