微软研究中心Srinath Setty、a16z crypto research 和 Georgetown University Justin Thaler、Carnegie Mellon University Riad Wahby 20203年论文《Customizable constraint systems for succinct arguments》。
前序博客有:
本节讨论的“SuperSpartan的Polynomial IOP for CCS”,为“Spartan [Set20] polynomial IOP for R1CS”的扩展。附录C中展示了如何扩展SuperSpartan的polynomial IOP来处理CCS+(即具有lookup操作的CCS)。
根据Definition 2.2,假定有某CCS structure-instance tuple with size bounds:
( ( m , n , l , t , q , d ) , ( M 0 , ⋯ , M t − 1 , S 0 , ⋯ , S q − 1 , x ) ) ((m,n,l,t,q,d),(M_0,\cdots,M_{t-1},S_0,\cdots,S_{q-1},x)) ((m,n,l,t,q,d),(M0,⋯,Mt−1,S0,⋯,Sq−1,x))
为简便表示,令协议中的 m , n m,n m,n均为powers of 2(若不是,则对每个矩阵 M i M_i Mi以及witness vector z z z进行补零,扩展 m , n m,n m,n均为powers of 2,在以下SNARK协议中,并不会增加SNARK中的Prover time或Verifier time)。
将矩阵 M 0 , ⋯ , M t − 1 M_0,\cdots, M_{t-1} M0,⋯,Mt−1解析为函数: { 0 , 1 } log m × { 0 , 1 } log n → F \{0,1\}^{\log m}\times \{0,1\}^{\log n}\rightarrow \mathbb{F} {0,1}logm×{0,1}logn→F。任何 { 0 , 1 } log m × { 0 , 1 } log n \{0,1\}^{\log m}\times \{0,1\}^{\log n} {0,1}logm×{0,1}logn格式的输入都可解析为是索引 ( i , j ) ∈ { 0 , 1 , ⋯ , m − 1 } × { 0 , 1 , ⋯ , n − 1 } (i, j)\in\{0,1,\cdots,m-1\}\times\{0,1,\cdots,n-1\} (i,j)∈{0,1,⋯,m−1}×{0,1,⋯,n−1}的二进制表示。该函数的输出为矩阵中第 ( i , j ) (i,j) (i,j)个元素。
Spartan背景知识参见:
将Spartan中R1CS扩展为CCS表示:
Remark 10:
Theorem 1证明:
对于某CCS structure和instance, I = ( M 0 , ⋯ , M t − 1 , S 0 , ⋯ , S q − 1 , x ) \mathcal{I}=(M_0,\cdots,M_{t-1}, S_0,\cdots,S_{q-1},x) I=(M0,⋯,Mt−1,S0,⋯,Sq−1,x)和声称的witness W W W。令 Z = ( W , 1 , x ) Z=(W,1,x) Z=(W,1,x)。
如之前所述,可:
函数 Z Z Z的MLE Z ~ \tilde{Z} Z~表示为:
t i l d e Z ( X 0 , ⋯ , X log n − 1 ) = ( 1 − X 0 ) ⋅ W ~ ( X 1 , ⋯ , X log n − 1 ) + X 0 ⋅ ( 1 , x ) ~ ( X 1 , ⋯ , X log n − 1 ) ( 13 ) tilde{Z}(X_0,\cdots,X_{\log n -1})=(1-X_0)\cdot \widetilde{W}(X_1,\cdots,X_{\log n-1})+ X_0\cdot \widetilde{(1,x)}(X_1,\cdots,X_{\log n-1})\ \ \ \ \ \ \ \ \ \ \ (13) tildeZ(X0,⋯,Xlogn−1)=(1−X0)⋅W (X1,⋯,Xlogn−1)+X0⋅(1,x) (X1,⋯,Xlogn−1) (13)
可看出方程式(13)中的右侧为multilinear多项式。对于所有的 ( x 0 , ⋯ , x log n − 1 ) ∈ { 0 , 1 } log n (x_0,\cdots,x_{\log n -1})\in\{0,1\}^{\log n} (x0,⋯,xlogn−1)∈{0,1}logn,很容易检查有 Z ~ ( x 0 , ⋯ , x log n − 1 ) = Z ( ( x 0 , ⋯ , x log n − 1 ) ) \tilde{Z}(x_0,\cdots,x_{\log n -1})=Z((x_0,\cdots,x_{\log n -1})) Z~(x0,⋯,xlogn−1)=Z((x0,⋯,xlogn−1))。(因为 Z Z Z evaluations的前半部分对应 W W W,后半部分对应vector ( 1 , x ) (1,x) (1,x)。)
因此方程式(13)中的右侧为 Z Z Z的唯一multilinear extension。
若 ( 1 , x ) (1,x) (1,x)长度小于 W W W长度(如当根据Lemma 3将AIR转换为CCS)时,可对 x x x填充补零获得 x p a d x_{pad} xpad,使其填充后 ( 1 , x p a d ) (1,x_{pad}) (1,xpad)的长度与 W W W一样。这样填充补零后,会让Verifier计算 ( 1 , x ) ~ ( X 1 , ⋯ , X log n − 1 ) \widetilde{(1,x)}(X_1,\cdots,X_{\log n-1}) (1,x) (X1,⋯,Xlogn−1)的time增加 O ( log n ) O(\log n) O(logn)次field加法运算。如,若未填充 ( 1 , x ) (1,x) (1,x)长度为 2 l 2^l 2l,则很容易检查具有length为 n / 2 n/2 n/2的填充 ( 1 , x p a d ) (1,x_{pad}) (1,xpad)的multilinear extension为:
( X 1 , ⋯ , X log n − 1 ) → ( 1 − X l + 1 ) ⋅ ( 1 − X l + 2 ) ⋯ ⋅ ( 1 − X log n − 1 ( 1 , x ) ~ ) ( X 1 , ⋯ , X l ) (X_1,\cdots,X_{\log n -1})\rightarrow (1-X_{l+1})\cdot (1-X_{l+2})\cdots\cdot (1-X_{\log n -1}\widetilde{(1,x)})(X_1,\cdots,X_l) (X1,⋯,Xlogn−1)→(1−Xl+1)⋅(1−Xl+2)⋯⋅(1−Xlogn−1(1,x) )(X1,⋯,Xl)
使得该multilinear多项式对于所有的inputs ( x 1 , ⋯ , x log n − 1 ) (x_1,\cdots,x_{\log n-1}) (x1,⋯,xlogn−1)对应填充后的 ( 1 , x p a d ) (1,x_{pad}) (1,xpad),可认为其是填充后 ( 1 , x p a d ) (1,x_{pad}) (1,xpad)的唯一multilinear多项式。
与Spartan论文Theorem 4.1类似,对由Spartan R1CS转换的CCS的“SuperSpartan的Polynomial IOP for CCS”协议为:
可对方程式(14)右侧的多项式应用sum-check协议:
从Verifier的角度来看,这可将方程式(14)右侧的计算 reduce为 “evaluate g g g at a random input r a ∈ F m r_a\in\mathbb{F}^m ra∈Fm”。且Verifier 可自己以 O ( log m ) O(\log m) O(logm)次field运算来计算 e q ~ ( τ , r a ) \tilde{eq}(\tau,r_a) eq~(τ,ra),因其易于检查:
当Verifier计算出 e q ~ ( τ , r a ) \tilde{eq}(\tau,r_a) eq~(τ,ra)值之后,Verifier计算 g ( r a ) g(r_a) g(ra)的time为 O ( d q ) O(dq) O(dq)。对于 i ∈ { 0 , 1 , ⋯ , t − 1 } i\in\{0,1,\cdots,t-1\} i∈{0,1,⋯,t−1}:
对该计算,可并行执行 t t t个sum-check协议:为此,引入随机数 γ ∈ F \gamma\in\mathbb{F} γ∈F,并对 M ~ i ( r a , y ) ⋅ Z ~ ( y ) \tilde{M}_i(r_a,y)\cdot \tilde{Z}(y) M~i(ra,y)⋅Z~(y)做random linear combination,权重分别为 [ γ 0 , ⋯ , γ t − 1 ] [\gamma^0,\cdots,\gamma^{t-1}] [γ0,⋯,γt−1]。
在该sum-check协议中,Verifier在做final check时:仅需对以上 t t t个多项式 M ~ i ( r a , y ) ⋅ Z ~ ( y ) \tilde{M}_i(r_a,y)\cdot \tilde{Z}(y) M~i(ra,y)⋅Z~(y) evaluate at r y r_y ry,即意味着Verifier evaluate M ~ i ( r a , r y ) \tilde{M}_i(r_a,r_y) M~i(ra,ry)就足矣。这样的前提假设是Verifier具有query access to M ~ 0 , ⋯ , M ~ t − 1 \tilde{M}_0,\cdots,\tilde{M}_{t-1} M~0,⋯,M~t−1,根据方程式(13),Verifier仅需对 W ~ \tilde{W} W~和 ( 1 , x ) ~ \widetilde{(1,x)} (1,x) 各query一次就可获得 Z ~ ( r y ) \tilde{Z}(r_y) Z~(ry)。
本文所实现的“SuperSpartan的Polynomial IOP for CCS”协议伪代码实现为:
总之,本文所实现的“SuperSpartan的Polynomial IOP for CCS”协议具有如下属性:
根据上面的“SuperSpartan的Polynomial IOP for CCS”协议伪代码可知,其包含了2次sum-check协议调用:
当CCS instance中有“uniform” structure时(如某circuit具有多个相同的sub-circuit),为实现succinct verification cost,应避免对circuit structure的预处理。
对于uniform CCS instance,本文实现了:
可将整数 { 0 , 1 , ⋯ , D − 1 } \{0,1,\cdots, D-1\} {0,1,⋯,D−1}的索引以二进制表示。整数 D − 1 D-1 D−1的索引可以全1向量表示,整数0索引可以全零向量表示。在这种索引表示法中,可将最右侧的bit看成是low-order bit。
对于某bit-vector i ∈ { 0 , 1 } log D i\in\{0,1\}^{\log D} i∈{0,1}logD,令 to-int ( i ) = ∑ j = 0 log D − 1 i j ⋅ 2 j \text{to-int}(i)=\sum_{j=0}^{\log D-1}i_j\cdot 2^j to-int(i)=∑j=0logD−1ij⋅2j对应 i i i所表示的整数。对于整数 κ ∈ { 0 , 1 , ⋯ , t − 1 } \kappa \in\{0,1,\cdots,t-1\} κ∈{0,1,⋯,t−1}, bin ( κ ) \text{bin}(\kappa) bin(κ)表示 κ \kappa κ对应的二进制表示。
定义函数:
next ( i , j ) : { 0 , 1 } log D × { 0 , 1 } log D → { 0 , 1 } \text{next}(i,j):\{0,1\}^{\log D}\times \{0,1\}^{\log D}\rightarrow \{0,1\} next(i,j):{0,1}logD×{0,1}logD→{0,1}
其中:
因此可将该函数称为“adding 1 in binary”函数:
注意:
从而有Theorem 2:
实际分析时分为3种情况:
接下来是解释方程式(16)可evaluate at any point ( r x , r y ) ∈ F log D × F log D (r_x,r_y)\in\mathbb{F}^{\log D}\times \mathbb{F}^{\log D} (rx,ry)∈FlogD×FlogD in O ( log D ) O(\log D) O(logD) time:
本小节中, m m m表示AIR的参数,有 w A I R ∈ F ( m − 1 ) ⋅ t / 2 , z A I R ∈ F ( m + 1 ) ⋅ t / 2 w_{AIR}\in\mathbb{F}^{(m-1)\cdot t/2},z_{AIR}\in\mathbb{F}^{(m+1)\cdot t/2} wAIR∈F(m−1)⋅t/2,zAIR∈F(m+1)⋅t/2。同时 m m m表示CCS矩阵 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1的行数。本节还假设 m − 1 m-1 m−1为a power of 2,同时对 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1填充补零,使得其行数为a power of 2(该填充不会增加SuperSpartan中的Verifier或Prover time)。即意味着填充后的 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1的行数不再为 m m m,而是 2 ( m − 1 ) 2(m-1) 2(m−1)。
这样处理便于基于实际域做实现,并借助上一节的 “adding 1 in binary”函数的multilinear extension,对由AIR转换来的CCS实际表达做了进一步优化。