关于 zk-SNARK 的学习笔记,主要关注 zk-SNARK 中的方程。
ZK-SNARK 代表 零知识简洁非交互式知识论证。
zk-SNARK 的三个属性
完整性:每个具有有效见证的声明都有一个能够说服验证者的证明。
健壮性:具有无效见证的声明没有能够说服验证者的证明。
零知识:证明仅传达有关声明有效性的信息,而不涉及证明者的见证。
初步知识#
算术电路#
算术电路是计算多项式的模型。对于有限域 F = { 0 , ⋯ , p − 1 } F=\{0,\cdots,p-1\} F = { 0 , ⋯ , p − 1 } (素数 p > 2 p>2 p > 2 ),算术电路 C : F n → F C:F^n\rightarrow F C : F n → F 是一个有向无环图(DAG),其中节点是加法和乘法门,边是电线。DAG 中每个节点有两个输入和输出。DAG 有一个最终输出。
在一个 m m m - 门,n n n - 线的算术电路中,见证 定义为 s = ( s 1 , s 2 , ⋯ , s n ) s=(s_1,s_2,\cdots, s_n) s = ( s 1 , s 2 , ⋯ , s n ) ,其中 s i s_i s i 是第 i i i 条电线的值。
Rank-1 约束 (R1CS) 定义如下:对于某些常数 { u i , q , v i , q , w i , q } 1 ≤ i ≤ n , 1 ≤ q ≤ m \{u_{i,q},v_{i,q},w_{i,q}\}_{1\le i\le n,1\le q\le m} { u i , q , v i , q , w i , q } 1 ≤ i ≤ n , 1 ≤ q ≤ m ,∑ i = 1 n s i u i , q ⋅ ∑ i = 1 n s i v i , q = ∑ i = 1 n s i w i , q \sum_{i=1}^ns_iu_{i,q}\cdot \sum_{i=1}^ns_iv_{i,q}=\sum_{i=1}^ns_iw_{i,q} ∑ i = 1 n s i u i , q ⋅ ∑ i = 1 n s i v i , q = ∑ i = 1 n s i w i , q 。例如,在图 1 中,s 1 ⋅ s 2 = s 4 s_1\cdot s_2=s_4 s 1 ⋅ s 2 = s 4 是一个 R1CS,其中 u 1 , 1 = 1 , v 2 , 1 = 1 , w 4 , 1 = 1 u_{1,1}=1,v_{2,1}=1,w_{4,1}=1 u 1 , 1 = 1 , v 2 , 1 = 1 , w 4 , 1 = 1 ,其他 = 0 =0 = 0 。
二次算术程序 (QAP)#
首先,我们定义目标点为 r 1 , r 2 , ⋯ , t m ∈ F p r_1,r_2,\cdots,t_m\in F_p r 1 , r 2 , ⋯ , t m ∈ F p 。每个目标点对应于算术电路中的一个门。然后,我们定义消失函数 t ( x ) = Π q = 1 m ( x − r q ) t(x)=\Pi_{q=1}^m(x-r_q) t ( x ) = Π q = 1 m ( x − r q ) ,使得 t ( x ) = 0 t(x)=0 t ( x ) = 0 在目标点 r 1 , r 2 , ⋯ , t m r_1,r_2,\cdots,t_m r 1 , r 2 , ⋯ , t m 。
一个二次算术程序是一个关于 s = ( s 1 , s 2 , ⋯ , s n ) s=(s_1,s_2,\cdots, s_n) s = ( s 1 , s 2 , ⋯ , s n ) 的关系,使得 ∑ i = 1 n s i u i ( x ) ⋅ ∑ i = 1 n s i v i ( x ) − ∑ i = 1 n s i w i ( x ) ≡ 0 ( m o d t ( x ) ) \sum_{i=1}^ns_iu_{i}(x)\cdot \sum_{i=1}^ns_iv_{i}(x)-\sum_{i=1}^ns_iw_{i}(x)\equiv 0~(\bmod~t(x)) ∑ i = 1 n s i u i ( x ) ⋅ ∑ i = 1 n s i v i ( x ) − ∑ i = 1 n s i w i ( x ) ≡ 0 ( mod t ( x )) ,其中 u i ( x ) , v i ( x ) , w i ( x ) u_i(x),v_i(x),w_i(x) u i ( x ) , v i ( x ) , w i ( x ) 是度为 m − 1 m-1 m − 1 的多项式,使得对于 1 ≤ i ≤ n , 1 ≤ q ≤ m 1\le i\le n,1\le q\le m 1 ≤ i ≤ n , 1 ≤ q ≤ m ,u i ( r q ) = u i , q u_i(r_q)=u_{i,q} u i ( r q ) = u i , q ,v i ( r q ) = v i , q v_i(r_q)=v_{i,q} v i ( r q ) = v i , q 和 w i ( r q ) = w i , q w_i(r_q)=w_{i,q} w i ( r q ) = w i , q 。
当 x = r q x=r_q x = r q 时,这个方程是第 q q q 个门的 R1CS。因此,检查这个方程等同于同时检查 m m m 个 Rank-1 约束。
同态编码#
同态编码是一个单射同态 E : F p → G E: F_p\rightarrow G E : F p → G ,使得给定 E ( x ) E(x) E ( x ) 很难找到 x x x 。
例如,给定一个素数阶 p p p 的循环群 G G G ,以 g g g 为生成元,乘法为群运算,同态编码为 E ( a ) = g a E(a)=g^a E ( a ) = g a 。它是同态的且是单射的。此外,由于离散对数问题的困难,给定 E ( x ) E(x) E ( x ) 也很难找到 x x x 。
配对函数,或双线性映射#
配对函数,也称为双线性映射,定义如下:
G 1 , G 2 G_1,G_2 G 1 , G 2 和 G T G_T G T 是素数阶 p p p 的群,配对函数为 e : G 1 × G 2 → G T e:G_1\times G_2\rightarrow G_T e : G 1 × G 2 → G T ,使得:
如果 g , h g,h g , h 分别是 G 1 G_1 G 1 和 G 2 G_2 G 2 的生成元,则 e ( g , h ) ≠ 1 e(g,h)\not= 1 e ( g , h ) = 1 是 G T G_T G T 的生成元。
e ( g a , h b ) = e ( g , h ) a b e(g^a,h^b)=e(g,h)^{ab} e ( g a , h b ) = e ( g , h ) ab 。
双线性映射具有几个属性,如下所示:
e ( u , v w ) = e ( g a , h b h c ) = e ( g , h ) a ( b + c ) = e ( g a , h b ) e ( g a , h c ) = e ( u , v ) e ( u , w ) e(u,vw)=e(g^a,h^bh^c)=e(g,h)^{a(b+c)}=e(g^a,h^b)e(g^a,h^c)=e(u,v)e(u,w) e ( u , v w ) = e ( g a , h b h c ) = e ( g , h ) a ( b + c ) = e ( g a , h b ) e ( g a , h c ) = e ( u , v ) e ( u , w )
e ( v w , u ) = e ( v , u ) e ( w , u ) e(vw,u)=e(v,u)e(w,u) e ( v w , u ) = e ( v , u ) e ( w , u )
e ( u x , v ) = e ( g , h ) x a b = e ( u , v x ) e(u^x,v)=e(g,h)^{xab}=e(u,v^x) e ( u x , v ) = e ( g , h ) x ab = e ( u , v x )
在 Pinocchio 实现中(zk-SNARK 的一种实现),使用了对称双线性映射,其中 G : = G 1 = G 2 G:=G_1=G_2 G := G 1 = G 2 。
zk-SNARK#
对于任何 NP 计算,证明者和验证者事先达成一致,他们可以为该计算构建一个算术电路,使得该电路的见证是原始计算的见证。算术电路可以简化为 QAP,使得验证 QAP 的见证等同于验证算术电路的见证。因此,验证 QAP 的见证等同于验证原始计算的见证。
从算术电路到 QAP 的一般简化#
对于一个具有 m m m 个门和 n n n 条线的算术电路,见证定义为 s = ( s 1 , s 2 , ⋯ , s n ) ∈ R n s=(s_1,s_2,\cdots,s_n)\in R^n s = ( s 1 , s 2 , ⋯ , s n ) ∈ R n 。对于 s s s 的 R1CS ( a i , b i , c i ) (a_i,b_i,c_i) ( a i , b i , c i ) 定义为 ( s ⋅ a i ) × ( s ⋅ b i ) − s ⋅ c i = 0 (s\cdot a_i)\times(s\cdot b_i)-s\cdot c_i=0 ( s ⋅ a i ) × ( s ⋅ b i ) − s ⋅ c i = 0 ,其中 1 ≤ i ≤ m 1\le i\le m 1 ≤ i ≤ m 且 a i , b i , c i ∈ R n a_i,b_i,c_i\in R^n a i , b i , c i ∈ R n 。
一般简化包括三个步骤:
将 m m m 个约束向量堆叠以获得矩阵 A , B , C ∈ R m × n A,B,C\in R^{m\times n} A , B , C ∈ R m × n ,其中
A = ( a 1 T a 2 T ⋮ a m T ) B = ( b 1 T b 2 T ⋮ b m T ) C = ( c 1 T c 2 T ⋮ c m T ) A=\begin{pmatrix}a_1^T\\a_2^T\\\vdots\\a_m^T\end{pmatrix}B=\begin{pmatrix}b_1^T\\b_2^T\\\vdots\\b_m^T\end{pmatrix}C=\begin{pmatrix}c_1^T\\c_2^T\\\vdots\\c_m^T\end{pmatrix} A = a 1 T a 2 T ⋮ a m T B = b 1 T b 2 T ⋮ b m T C = c 1 T c 2 T ⋮ c m T
使用拉格朗日插值,找到 3 3 3 组 n n n 个多项式 { u i } i = 1 n , { v i } i = 1 n , { w i } i = 1 n \{u_i\}_{i=1}^n,\{v_i\}_{i=1}^n,\{w_i\}_{i=1}^n { u i } i = 1 n , { v i } i = 1 n , { w i } i = 1 n ,使得
对于所有 i ∈ [ n ] i\in[n] i ∈ [ n ] 和 x ∈ [ m ] x\in[m] x ∈ [ m ]
u i ( x ) = A [ x ] [ i ] v i ( x ) = B [ x ] [ i ] w i ( x ) = C [ x ] [ i ] \begin{aligned}u_i(x)&=A[x][i]\\v_i(x)&=B[x][i]\\w_i(x)&=C[x][i]\end{aligned} u i ( x ) v i ( x ) w i ( x ) = A [ x ] [ i ] = B [ x ] [ i ] = C [ x ] [ i ]
找到多项式 h ( x ) h(x) h ( x ) ,使得
( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x )
其中 t ( x ) = ( x − 1 ) ( x − 2 ) ⋯ ( x − n ) t(x)=(x-1)(x-2)\cdots(x-n) t ( x ) = ( x − 1 ) ( x − 2 ) ⋯ ( x − n )
因此,检查 ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) 等同于检查算术电路中的 R1CS 关系。也就是说,见证可以满足每个节点中的所有 R1CS 关系。
Pinocchio 协议#
Pinocchio 协议是 zk-SNARK 的一种实现。
该协议建立在一个素数阶 p p p 的群 G G G 上,生成元为 g g g 。定义同态编码为 E : F p → G E:F_p\rightarrow G E : F p → G ,E ( x ) = g x E(x)=g^x E ( x ) = g x 。定义椭圆曲线双线性映射为 e : G × G → G T e:G\times G\rightarrow G_T e : G × G → G T 。证明者知道见证 { s i } i = 1 n \{s_i\}_{i=1}^n { s i } i = 1 n ,他可以通过简化得到以下方程:( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) 。
主要思想如下:
V V V 在随机点 z ∈ F p z\in F_p z ∈ F p 测试 P P P 的多项式。
P P P 计算 u ( z ) = ∑ i = 1 n s i u i ( z ) , v ( z ) = ∑ i = 1 n s i v i ( z ) , w ( z ) = ∑ i = 1 n s i w i ( z ) u(z)=\sum_{i=1}^{n}s_{i}u_{i}(z),v(z)=\sum_{i=1}^{n}s_{i}v_{i}(z),w(z)=\sum_{i=1}^{n}s_{i}w_{i}(z) u ( z ) = ∑ i = 1 n s i u i ( z ) , v ( z ) = ∑ i = 1 n s i v i ( z ) , w ( z ) = ∑ i = 1 n s i w i ( z ) 和 h ( z ) h(z) h ( z ) ,并同态编码这些值并发送给 V V V 。
V V V 可以验证同态编码的值满足相同的方程,而不需要了解见证本身。
Pinocchio 协议由三个步骤组成:(1)可信第三方生成一个公共参考字符串(CRS);(2)证明者生成证明;(3)验证者检查证明并决定接受或拒绝。
在 CRS 生成过程中,可信第三方随机选择 α , β u , β v , β w , γ , z ∈ F p ∗ \alpha, \beta_u,\beta_v,\beta_w,\gamma,z\in F_p^* α , β u , β v , β w , γ , z ∈ F p ∗ 并发布 CRS。然后,可信第三方丢弃在生成过程中使用的所有采样群元素(有毒废物)。CRS 包含证明者的评估密钥和验证者的验证密钥。
评估密钥定义如下:
{ E ( z i ) } i = 0 n , { E ( α z i ) } i = 0 n \{E(z^{i})\}_{i=0}^{n},\{E(\alpha z^{i})\}_{i=0}^{n} { E ( z i ) } i = 0 n , { E ( α z i ) } i = 0 n
{ E ( u i ( z ) } i = 1 n , { E ( α u i ( z ) } i = 1 n , { E ( β u u i ( z ) } i = 1 n \{E(u_i(z)\}_{i=1}^n,\{E(\alpha u_i(z)\}_{i=1}^n,\{E(\beta_uu_i(z)\}_{i=1}^n { E ( u i ( z ) } i = 1 n , { E ( α u i ( z ) } i = 1 n , { E ( β u u i ( z ) } i = 1 n
{ E ( v i ( z ) } i = 1 n , { E ( α v i ( z ) } i = 1 n , { E ( β v v i ( z ) } i = 1 n \{E(v_{i}(z)\}_{i=1}^{n},\{E(\alpha v_{i}(z)\}_{i=1}^{n},\{E(\beta_{v}v_{i}(z)\}_{i=1}^{n} { E ( v i ( z ) } i = 1 n , { E ( α v i ( z ) } i = 1 n , { E ( β v v i ( z ) } i = 1 n
{ E ( w i ( z ) } i = 1 n , { E ( α w i ( z ) } i = 1 n , { E ( β w w i ( z ) } i = 1 n \{E(w_i(z)\}_{i=1}^n,\{E(\alpha w_i(z)\}_{i=1}^n,\{E(\beta_ww_i(z)\}_{i=1}^n { E ( w i ( z ) } i = 1 n , { E ( α w i ( z ) } i = 1 n , { E ( β w w i ( z ) } i = 1 n
验证密钥定义如下:
E ( 1 ) , E ( α ) , E ( t ( z ) ) E(1),E(\alpha),E(t(z)) E ( 1 ) , E ( α ) , E ( t ( z ))
E ( γ ) , E ( β u γ ) , E ( β v γ ) , E ( β w γ ) E(\gamma),E(\beta_u\gamma),E(\beta_v\gamma),E(\beta_w\gamma) E ( γ ) , E ( β u γ ) , E ( β v γ ) , E ( β w γ )
在证明生成过程中,由于证明者知道多项式 ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) ,他将首先计算 h ( x ) h(x) h ( x ) 。然后,证明者使用评估密钥生成证明,如下所示:
E ( u ( z ) ) , E ( α u ( z ) ) , 其中 u ( z ) = ∑ i = 1 n s i u i ( z ) E(u(z)),E(\alpha u(z)),\mathrm{~其中~}u(z)=\sum_{i=1}^ns_iu_i(z) E ( u ( z )) , E ( αu ( z )) , 其中 u ( z ) = ∑ i = 1 n s i u i ( z )
E ( v ( z ) ) , E ( α v ( z ) ) , 其中 v ( z ) = ∑ i = 1 n s i v i ( z ) E(v(z)),E(\alpha v(z)),\mathrm{~其中~}v(z)=\sum_{i=1}^ns_iv_i(z) E ( v ( z )) , E ( αv ( z )) , 其中 v ( z ) = ∑ i = 1 n s i v i ( z )
E ( w ( z ) ) , E ( α w ( z ) ) , 其中 w ( z ) = ∑ i = 1 n s i w i ( z ) E(w(z)),E(\alpha w(z)),\text{ 其中 }w(z)=\sum_{i=1}^ns_iw_i(z) E ( w ( z )) , E ( α w ( z )) , 其中 w ( z ) = ∑ i = 1 n s i w i ( z )
E ( h ( z ) ) , E ( α h ( z ) ) E(h(z)),E(\alpha h(z)) E ( h ( z )) , E ( α h ( z ))
E ( β u u ( z ) + β v v ( z ) + β w w ( z ) ) E(\beta_uu(z)+\beta_vv(z)+\beta_ww(z)) E ( β u u ( z ) + β v v ( z ) + β w w ( z ))
例如,
E ( u ( z ) ) = E ( ∑ i = 1 n s i u i ( z ) ) = g ∑ i = 1 n s i u i ( z ) = Π i = 1 n g s i u i ( z ) = Π i = 1 n ( g u i ( z ) ) s i = Π i = 1 n ( E ( u i ( z ) ) s i ) E(u(z))=E(\sum_{i=1}^ns_iu_i(z))=g^{\sum_{i=1}^ns_iu_i(z)}=\Pi_{i=1}^ng^{s_iu_i(z)}=\Pi_{i=1}^n(g^{u_i(z)})^{s_i}=\Pi_{i=1}^n(E(u_i(z))^{s_i}) E ( u ( z )) = E ( ∑ i = 1 n s i u i ( z )) = g ∑ i = 1 n s i u i ( z ) = Π i = 1 n g s i u i ( z ) = Π i = 1 n ( g u i ( z ) ) s i = Π i = 1 n ( E ( u i ( z ) ) s i )
E ( α u ( z ) ) = E ( ∑ i = 1 n s i α u i ( z ) ) = Π i = 1 n ( E ( α u i ( z ) ) s i ) E(\alpha u(z))=E(\sum_{i=1}^ns_i\alpha u_i(z))=\Pi_{i=1}^n(E(\alpha u_i(z))^{s_i}) E ( αu ( z )) = E ( ∑ i = 1 n s i α u i ( z )) = Π i = 1 n ( E ( α u i ( z ) ) s i )
E ( h ( z ) ) E(h(z)) E ( h ( z )) :z i z^i z i 的线性组合,可以从 E ( z i ) E(z^i) E ( z i ) 中计算。
E ( β u u ( z ) + β v v ( z ) + β w w ( z ) ) = E ( β u u ( z ) ) E ( β v v ( z ) ) E ( β w w ( z ) ) E(\beta_uu(z)+\beta_vv(z)+\beta_ww(z))=E(\beta_uu(z))E(\beta_vv(z))E(\beta_ww(z)) E ( β u u ( z ) + β v v ( z ) + β w w ( z )) = E ( β u u ( z )) E ( β v v ( z )) E ( β w w ( z ))
在证明验证过程中,验证者将进行三次验证。
首先,验证者检查项 u ( z ) , v ( z ) , w ( z ) , h ( z ) u(z), v(z), w(z), h(z) u ( z ) , v ( z ) , w ( z ) , h ( z ) 是否作为 CRS 中项的线性组合构造,通过检查以下方程:
e ( E ( u ( z ) ) , E ( α u 1 ( z ) ) ) = e ( E ( α u ( z ) ) , E ( u 1 ( z ) ) ) e(E(u(z)),E(\alpha u_{1}(z))) =e(E(\alpha u(z)),E(u_1(z))) e ( E ( u ( z )) , E ( α u 1 ( z ))) = e ( E ( αu ( z )) , E ( u 1 ( z )))
e ( E ( v ( z ) ) , E ( α v 1 ( z ) ) ) = e ( E ( α v ( z ) ) , E ( v 1 ( z ) ) ) e(E(v(z)),E(\alpha v_1(z))) =e(E(\alpha v(z)),E(v_1(z))) e ( E ( v ( z )) , E ( α v 1 ( z ))) = e ( E ( αv ( z )) , E ( v 1 ( z )))
e ( E ( w ( z ) ) , E ( α w 1 ( z ) ) ) = e ( E ( α w ( z ) ) , E ( w 1 ( z ) ) ) e(E(w(z)),E(\alpha w_{1}(z))) =e(E(\alpha w(z)),E(w_1(z))) e ( E ( w ( z )) , E ( α w 1 ( z ))) = e ( E ( α w ( z )) , E ( w 1 ( z )))
e ( E ( h ( z ) ) , E ( α ) ) = e ( E ( α h ( z ) ) , E ( 1 ) ) e(E(h(z)),E(\alpha)) =e(E(\alpha h(z)),E(1)) e ( E ( h ( z )) , E ( α )) = e ( E ( α h ( z )) , E ( 1 ))
然后,验证者检查每个项 u ( z ) , v ( z ) , w ( z ) u(z), v(z), w(z) u ( z ) , v ( z ) , w ( z ) 是否使用相同的线性系数 { s i } i = 1 n \{s_i\}^n_{i=1} { s i } i = 1 n ,即检查 u ( z ) = ∑ i = 1 n s i u i ( z ) , v ( z ) = ∑ i = 1 n s i v i ( z ) , w ( z ) = ∑ i = 1 n s i w i ( z ) u(z)=\sum_{i=1}^{n}s_{i}u_{i}(z),v(z)=\sum_{i=1}^{n}s_{i}v_{i}(z),w(z)=\sum_{i=1}^{n}s_{i}w_{i}(z) u ( z ) = ∑ i = 1 n s i u i ( z ) , v ( z ) = ∑ i = 1 n s i v i ( z ) , w ( z ) = ∑ i = 1 n s i w i ( z ) 。
e ( E ( β u u ( z ) + β v v ( z ) + β w w ( z ) ) , E ( γ ) ) = e ( E ( u ( z ) ) , E ( β u γ ) ) e ( E ( v ( z ) ) , E ( β v γ ) ) e ( E ( w ( z ) ) , E ( β w γ ) ) e(E(\beta_uu(z)+\beta_vv(z)+\beta_ww(z)),E(\gamma))=e(E(u(z)),E(\beta_u\gamma))e(E(v(z)),E(\beta_v\gamma))e(E(w(z)),E(\beta_w\gamma)) e ( E ( β u u ( z ) + β v v ( z ) + β w w ( z )) , E ( γ )) = e ( E ( u ( z )) , E ( β u γ )) e ( E ( v ( z )) , E ( β v γ )) e ( E ( w ( z )) , E ( β w γ ))
最后,验证者检查表征多项式可除性标准的关键条件,通过检查以下方程:
e ( E ( u ( z ) ) , E ( v ( z ) ) ) = e ( E ( w ( z ) ) , E ( 1 ) ) ⋅ e ( E ( t ( z ) ) , E ( h ( z ) ) ) e(E(u(z)),E(v(z)))=e(E(w(z)),E(1))\cdot e(E(t(z)),E(h(z))) e ( E ( u ( z )) , E ( v ( z ))) = e ( E ( w ( z )) , E ( 1 )) ⋅ e ( E ( t ( z )) , E ( h ( z )))
即 e ( E ( u ( z ) ) , E ( v ( z ) ) ) / e ( E ( w ( z ) ) , E ( 1 ) ) = e ( E ( t ( z ) ) , E ( h ( z ) ) ) e(E(u(z)),E(v(z)))/e(E(w(z)),E(1))= e(E(t(z)),E(h(z))) e ( E ( u ( z )) , E ( v ( z ))) / e ( E ( w ( z )) , E ( 1 )) = e ( E ( t ( z )) , E ( h ( z )))
即检查 ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x )
如果所有检查都通过,验证者将接受。
由于现在的过程不是零知识。如果 V V V 提出自己的见证 s ′ = ( s 1 ′ , s 2 ′ , ⋯ , s n ′ ) s^\prime=(s_1^\prime,s_2^\prime,\cdots,s_n^\prime) s ′ = ( s 1 ′ , s 2 ′ , ⋯ , s n ′ ) ,他们可以计算 E ( u ′ ( z ) ) , E ( v ′ ( z ) ) , E ( w ′ ( z ) ) , E ( h ′ ( z ) ) E(u^\prime(z)),E(v^\prime(z)),E(w^\prime(z)),E(h^\prime(z)) E ( u ′ ( z )) , E ( v ′ ( z )) , E ( w ′ ( z )) , E ( h ′ ( z )) 。如果这些值与 E ( u ( z ) ) , E ( v ( z ) ) , E ( w ( z ) ) , E ( h ( z ) ) E(u(z)),E(v(z)),E(w(z)),E(h(z)) E ( u ( z )) , E ( v ( z )) , E ( w ( z )) , E ( h ( z )) 不同,则验证者得出结论,证明者的见证不是 s ′ s^\prime s ′ 。
通过向多项式 u , v , w u,v,w u , v , w 添加随机偏移,可以实现零知识。随机偏移将是 t ( x ) t(x) t ( x ) 的倍数,以便一切仍然在 m o d t ( x ) \bmod~t(x) mod t ( x ) 下相同。对于随机 δ 1 , δ 2 , δ 3 ∈ F p \delta_1,\delta_2,\delta_3\in F_p δ 1 , δ 2 , δ 3 ∈ F p ,偏移多项式定义为
u z ( x ) = u ( x ) + δ 1 t ( x ) u_z(x)=u(x)+\delta_1 t(x) u z ( x ) = u ( x ) + δ 1 t ( x )
v z ( x ) = v ( x ) + δ 2 t ( x ) v_z(x)=v(x)+\delta_2t(x) v z ( x ) = v ( x ) + δ 2 t ( x )
w z ( x ) = w ( x ) + δ 3 t ( x ) w_z(x)=w(x)+\delta_3t(x) w z ( x ) = w ( x ) + δ 3 t ( x )
然后,P P P 将在其证明中用偏移项替换未偏移项。例如,E ( u z ( x ) ) = E ( u ( x ) + δ 1 t ( x ) ) = E ( u ( x ) ) E ( δ 1 t ( x ) ) E(u_z(x))=E(u(x)+\delta_1t(x))=E(u(x))E(\delta_1t(x)) E ( u z ( x )) = E ( u ( x ) + δ 1 t ( x )) = E ( u ( x )) E ( δ 1 t ( x )) 。
Groth-16 协议#
Groth-16 协议是 zk-SNARK 的一种更简洁的实现。证明大小和验证者复杂度都显著低于 Pinocchio。
在 Groth-16 中,由于证明者知道多项式 ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) \left(\sum_{i=1}^ns_iu_i(x)\right)\cdot\left(\sum_{i=1}^ns_iv_i(x)\right)-\left(\sum_{i=1}^ns_iw_i(x)\right)=h(x)t(x) ( ∑ i = 1 n s i u i ( x ) ) ⋅ ( ∑ i = 1 n s i v i ( x ) ) − ( ∑ i = 1 n s i w i ( x ) ) = h ( x ) t ( x ) ,证明定义如下:
E ( α + u ( z ) ) E(\alpha+u(z)) E ( α + u ( z ))
E ( β + v ( z ) ) E(\beta+v(z)) E ( β + v ( z ))
E ( ∑ s i × ( β u i ( z ) + α v i ( z ) + w i ( z ) ) + h ( z ) t ( z ) ) E(\sum s_i\times(\beta u_i(z)+\alpha v_i(z)+w_i(z))+h(z)t(z)) E ( ∑ s i × ( β u i ( z ) + α v i ( z ) + w i ( z )) + h ( z ) t ( z ))
验证者将检查:e ( E ( α + u ( z ) ) , E ( β + v ( z ) ) ) = e ( E ( ∑ s i × ( β u i ( z ) + α v i ( z ) + w i ( z ) ) + h ( z ) t ( z ) ) , E ( 1 ) ) e ( E ( α ) , E ( β ) ) e(E(\alpha+u(z)), E(\beta+v(z)))=e(E(\sum s_i\times(\beta u_i(z)+\alpha v_i(z)+w_i(z))+h(z)t(z)), E(1))e(E(\alpha), E(\beta)) e ( E ( α + u ( z )) , E ( β + v ( z ))) = e ( E ( ∑ s i × ( β u i ( z ) + α v i ( z ) + w i ( z )) + h ( z ) t ( z )) , E ( 1 )) e ( E ( α ) , E ( β ))
参考文献#
A Review of zk-SNARKs
Zero Knowledge Proofs MOOC