微软研究中心Srinath Setty、a16z crypto research 和 Georgetown University Justin Thaler、Carnegie Mellon University Riad Wahby 20203年论文《Customizable constraint systems for succinct arguments》。
在该论文中,介绍了Customizable constraint systems(CCS),在不增加开销的情况下,同时涵盖了当前主流的电路表示:
不同于Plonkish和AIR,CCS不与特定的证明系统绑定。
1.1)SuperSpartan支持high-degree constraints,且随着constraints degree的增加,prover不会有额外的cryptographic开销,仅会增加field operations。
1.2)Spartan中不包含FFT运算。(FFT运算需superlinear-time,且难于分发处理。)
不过HyperPlonk采用不同的方法,也为Plonkish实现了无需FFT运算的效果。但是,在不增加开销的情况下,当前并不清楚如何用HyperPlonk(或Plonk)来证明CCS instance(甚至是R1CS instance)。
1.3)不同于HyperPlonk,SuperSpartan可证明CCS(包括AIR) uniform instance:
1.4)SuperSpartan for AIR:
SNARK( succinct non-interactive argument of knowledge)中的succinct是指:
之前研究通常认为Plonkish与R1CS有很大的不同,并且优于R1CS,并相信,为支持Plonkish,必须基于Plonk证明系统[GWC19]。为提升效率,对底层基石进行修改——如HyperPlonk [CBBZ23],HyperPlonk严格遵循Plonk的证明系统,但:
本文贡献主要有3方面:
1)CCS:引入了名为Customizable constraint systems(CCS)的R1CS新扩展。CCS可同时扩展Plonkish、AIR和R1CS,可将这3种instance以costless的方式转换为等价的CCS instance。在本文附录B中,还展示了CCS的自然扩展(CCS+),可支持对read-only tables/memories的lookup操作。
通常以gate checks、copy checks、permutation checks等方式来描述“Plonkish circuits”,而Plonk证明系统是对这些类型checks的证明。
而CCS中不关心这些checks如何被证明。
与R1CS类似,CCS中仅包含:
与AIR、R1CS电路类似,Plonkish的IR(Intermediate Representation)也可由许多不同的证明系统证明,而不仅局限于Plonk证明系统及其变种。
类似地,AIR satisfiability(如[BSCKL23, Sta12, BBHR19a])也常与特定的证明系统绑定。本文将AIR也定义为了CCS格式。
2)SNARKs for CCS:本文发现,之前的polynomial IOPs for R1CS,当结合某多项式承诺方案,可生成SNARKs for R1CS。
将现有个的名为Spartan和Marlin的polynomial IOPs for R1CS进行扩展,分别获得polynomial IOPs for R1CS 的 SuperSpartan和SuperMarlin。
SuperSpartan具有特别吸引人的开销概括:【类似的性能HyperPlonk以另一种方式实现了】
注意:
3)SNARKs for uniform CCS(including AIR):
本文将描述如何用SuperSpartan来证明“uniform” circuits(特别是,所有AIR instance)的同时,在无需任何preprocessing的情况下实现succinct Verifier。具体依赖的关键技术为:
支持preprocessing phase的话,Verifier需在offline phase对这些多项式进行commit,然后Prover需在online phase中证明其evaluations。 对于由AIR提升而来的CCS instance,Verifier可在无需任何preprocessing的情况以下,以logarithmic time完成该工作。详情见本文Theorem 2。这可确保SuperSpartan的Verifier已logarithmic time运行(+ 验证多项式承诺方案中的single evaluation proof的time)。从而可实现具有良好开销概况的SNARKs for AIR。
将SuperSpartan 与 Orion[XZS22]的多项式承诺方案结合,可实现首个具有polylogarithmic time Verifier和linear-time Prover的SNARK for AIR。
若将SuperSpartan与Orion之前的Brakedown[GLS+21]结合,可实现具有linear-time的field-agnostic,但proof size为AIR instance witness size的平方根。
尽管HyperPlonk提供了SNARK for AIR,但其需要circuit-dependent preprocessing phase,其time与circuit size呈线性关系,比SuperSpartan for AIR所需的Verifier time要大指数级。该preprocessing算法是指HyperPlonk中的indexer算法,也在[CHM+20, COS20]等早期作品中用作preprocessing。
R1CS为quadratic arithmetic programs (QAPs) [GGPR13]中的NP-complete problem。
R1CS instance中包含:
在R1CS instance中:
注意:
假设在算法中存在NP checker,其输入有NP instance和NP witness,会检查该witness是否satisfies该instance。
本文也采用类似的checker runtime来检查转换效率,也会作为size overhead的proxy(如将某R1CS witness转换为CCS witness)。
Remark 3:
在上面的Plonkish定义中,避开了copy constraints,其使用的“duplicated”版本的satisfying assignment的length 要短于 Plonkish satisfying assignment的copy constraints数。相比于Plonkish,SNARKs for CCS需具有更快的Prover,因Prover的瓶颈在于对satisfying assignment的cryptographically commit。
Remark 4:
将Plonkish表示为CCS的流程为:
令 w C C S = w P l o n k i s h , I C C S = I P l o n k i s h w_{CCS}=w_{Plonkish},\mathcal{I}_{CCS}=\mathcal{I}_{Plonkish} wCCS=wPlonkish,ICCS=IPlonkish。
令 S C C S = ( m , n , N , l , t , q , d , [ M 0 , ⋯ , M t − 1 ] , [ S 0 , ⋯ , S q − 1 ] , [ c 0 , ⋯ , c q − 1 ] ) S_{CCS}=(m,n,N,l,t,q,d,[M_0,\cdots,M_{t-1}],[S_0,\cdots,S_{q-1}],[c_0,\cdots,c_{q-1}]) SCCS=(m,n,N,l,t,q,d,[M0,⋯,Mt−1],[S0,⋯,Sq−1],[c0,⋯,cq−1]),其中 m , n , l , t , q , d m,n,l,t,q,d m,n,l,t,q,d源自上面定义的 S P l o n k i s h S_{Plonkish} SPlonkish。
剩下的 S C C S S_{CCS} SCCS元素的转换规则为:
1)派生 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1和 N N N:
注意 g g g为 S P l o n k i s h S_{Plonkish} SPlonkish中的具有 t t t个变量的多变量多项式, T 0 , ⋯ , T m − 1 T_0,\cdots,T_{m-1} T0,⋯,Tm−1每个向量长度为 t t t,其中的每个元素为 { 0 , ⋯ , n + e − 1 } \{0,\cdots,n+e-1\} {0,⋯,n+e−1},为指向 z z z向量的索引值。
除以下指定值之外, M 0 , ⋯ , M t − 1 ∈ F m × n M_0,\cdots,M_{t-1}\in\mathbb{F}^{m\times n} M0,⋯,Mt−1∈Fm×n中的任意元素均为additive identity 0 0 0 of F \mathbb{F} F。这些矩阵的每一行对应 S P l o n k i s h S_{Plonkish} SPlonkish的一个约束,因此,只需知道如何设定这些矩阵的第 i i i行的值就足以。对于所有的 j ∈ { 0 , 1 , ⋯ , t − 1 } j\in\{0,1,\cdots,t-1\} j∈{0,1,⋯,t−1},令 k j = T i [ j ] k_j=T_i[j] kj=Ti[j],即 k j k_j kj为 T i T_i Ti向量的第 j j j个元素, k j k_j kj值后续表示取 z z z向量的第 k j k_j kj个元素:【即 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1矩阵中的首列对应公开的selectors信息,第 k j k_j kj列的值表示选中 z z z向量的第 k j k_j kj个元素。】
设置 S C C S . N S_{CCS}.N SCCS.N值为 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1中非零元素的总数。
2)派生 S 0 , ⋯ , S t − 1 S_0,\cdots,S_{t-1} S0,⋯,St−1和 c 0 , ⋯ , c q − 1 c_0,\cdots,c_{q-1} c0,⋯,cq−1:
以standard PLONK约束 ( q L ) i a i + ( q R ) i b i + ( q O ) i c i + ( q M ) i a i b i + ( q C ) i = 0 (q_L)_ia_i+(q_R)_ib_i+(q_O)_ic_i+(q_M)_ia_ib_i+(q_C)_i=0 (qL)iai+(qR)ibi+(qO)ici+(qM)iaibi+(qC)i=0为例:
如以上图为例,为转换为CCS表示,因为有 ( q M ) i a i b i = ( ( q M ) i a i ) ∘ ( 1 ⋅ b i ) (q_M)_ia_ib_i=((q_M)_ia_i)\circ (1\cdot b_i) (qM)iaibi=((qM)iai)∘(1⋅bi),同时又有 ( q M ) i a i = ( M q M ⋅ z ) ∘ ( M a ⋅ z ) (q_M)_ia_i=(M_{q_M}\cdot z) \circ (M_{a}\cdot z) (qM)iai=(MqM⋅z)∘(Ma⋅z),即需要额外再引入一列 q 1 q_1 q1列,其所有值均为 1 1 1。 将上图转换为:
从而有:
s s s向量:为selectors取值常量向量。如上图中的各selector取值情况,则 s s s向量对应为 ( 0 , 1 , − 1 ) (0,1,-1) (0,1,−1)。
e e e:为selectors取值常量个数。如上图情况,则 e e e的个数为3。
t t t:即"structure"约束多项式(即多变量多项式 g g g)中的变量个数。【对应CCS定义中的矩阵总个数。】实际 t t t表示约束系统的列数,如上图情况, t t t取值为9。【所谓的变量即对应上图的各个selector列的标识,如 q L 、 q R 、 q O 、 q M 、 q C 、 q 1 、 a 、 b 、 c q_L、q_R、q_O、q_M、q_C、q_1、a、b、c qL、qR、qO、qM、qC、q1、a、b、c,分别对应 M 0 , M 1 , ⋯ , M 8 M_0,M_1,\cdots,M_8 M0,M1,⋯,M8。】
q q q:即"structure"约束多项式(即多变量多项式 g g g)中所包含的单项的总个数。【对应CCS定义中的 "structure"约束多项式中所包含的单项的总个数】如上图情况, q q q取值为5。
x x x:为public input。如上图情况, x = ( 5 , 10 ) x=(5,10) x=(5,10)。
w w w:为witness。如上图情况,为 a 、 b 、 c a、b、c a、b、c三列中除public input之外,且copy constraints(上图颜色标识部分,只需二者取一), w w w witness的size为 3 ∗ 6 − 2 − 2 − 1 = 13 3*6-2-2-1=13 3∗6−2−2−1=13。上图情况 w = ( a 2 , a 3 , a 4 , a 5 , b 0 , b 1 , b 2 , b 5 , c 0 , c 1 , c 3 , c 4 , c 5 ) w=(a_2,a_3,a_4,a_5,b_0,b_1,b_2,b_5,c_0,c_1,c_3,c_4,c_5) w=(a2,a3,a4,a5,b0,b1,b2,b5,c0,c1,c3,c4,c5)
z z z:CCS中的 z C C S = ( 1 , x , w ) z_{CCS}=(1,x,w) zCCS=(1,x,w)。如上图情况, z z z的size为 n = 1 + 2 + 13 = 16 n=1+2+13=16 n=1+2+13=16。也即CCS中每个 M i M_i Mi矩阵具有 n n n列。 z C C S = ( 1 , x , w ) = ( 1 , 5 , 10 , a 2 , a 3 , a 4 , a 5 , b 0 , b 1 , b 2 , b 5 , c 0 , c 1 , c 3 , c 4 , c 5 ) z_{CCS}=(1,x,w)=(1,5,10,a_2,a_3,a_4,a_5,b_0,b_1,b_2,b_5,c_0,c_1,c_3,c_4,c_5) zCCS=(1,x,w)=(1,5,10,a2,a3,a4,a5,b0,b1,b2,b5,c0,c1,c3,c4,c5)。
m m m:表示"structure"中有 m m m个约束。【对应CCS定义中的单个矩阵中的行数】。也即CCS中每个 M i M_i Mi具有 m m m行。
T i T_i Ti向量:对应地 i i i个约束的向量, T i T_i Ti向量的长度为 t t t, T i T_i Ti向量内的每个元素的取值范围为 { 0 , ⋯ , n + e − 1 } \{0,\cdots,n+e-1\} {0,⋯,n+e−1}。可将 T i T_i Ti看成是从声称satisfying assignment Plonkish z P l o n k i s h z_{Plonkish} zPlonkish中选出 t t t个元素给多变量多项式 g g g。 T i T_i Ti向量中的每个元素值 对应 从 Plonkish z P l o n k i s h = ( 1 , x , w , s ) z_{Plonkish}=(1,x,w,s) zPlonkish=(1,x,w,s)中选中相应元素的索引值。
如上图情况, z P l o n k i s h = ( 1 , x , w , s ) = ( 1 , 5 , 10 , a 2 , a 3 , a 4 , a 5 , b 0 , b 1 , b 2 , b 5 , c 0 , c 1 , c 3 , c 4 , c 5 , 0 , 1 , − 1 ) z_{Plonkish}=(1,x,w,s)=(1,5,10,a_2,a_3,a_4,a_5,b_0,b_1,b_2,b_5,c_0,c_1,c_3,c_4,c_5,0,1,-1) zPlonkish=(1,x,w,s)=(1,5,10,a2,a3,a4,a5,b0,b1,b2,b5,c0,c1,c3,c4,c5,0,1,−1)
如上图情况, T i T_i Ti对应上图第 i i i行的前 t t t列值 对应 z P l o n k i s h z_{Plonkish} zPlonkish的索引值。有:
T 0 = ( 17 , 16 , 16 , 16 , 16 , 17 , 1 , 7 , 11 ) T_0=(17,16,16,16,16,17,1,7,11) T0=(17,16,16,16,16,17,1,7,11)
T 1 = ( 17 , 16 , 16 , 16 , 16 , 17 , 2 , 8 , 12 ) T_1=(17,16,16,16,16,17,2,8,12) T1=(17,16,16,16,16,17,2,8,12)
T 2 = ( 18 , 16 , 16 , 17 , 16 , 17 , 3 , 9 , 5 ) T_2=(18,16,16,17,16,17,3,9,5) T2=(18,16,16,17,16,17,3,9,5)
T 3 = ( 18 , 16 , 16 , 17 , 16 , 17 , 4 , 2 , 13 ) T_3=(18,16,16,17,16,17,4,2,13) T3=(18,16,16,17,16,17,4,2,13)
T 4 = ( 17 , 17 , 18 , 16 , 16 , 17 , 5 , 1 , 14 ) T_4=(17,17,18,16,16,17,5,1,14) T4=(17,17,18,16,16,17,5,1,14)
T 5 = ( 16 , 16 , 18 , 17 , 16 , 17 , 6 , 10 , 15 ) T_5=(16,16,18,17,16,17,6,10,15) T5=(16,16,18,17,16,17,6,10,15)
派生 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1矩阵:
对于所有的 j ∈ { 0 , 1 , ⋯ , t − 1 } j\in\{0,1,\cdots,t-1\} j∈{0,1,⋯,t−1},令 k j = T i [ j ] k_j=T_i[j] kj=Ti[j],即 k j k_j kj为 T i T_i Ti向量的第 j j j个元素, k j k_j kj值后续表示取 z z z向量的第 k j k_j kj个元素:【即 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1矩阵中的首列对应公开的selectors信息,第 k j k_j kj列的值表示选中 z z z向量的第 k j k_j kj个元素。】
对于上图情况,有:【事实上,每个 M i M_i Mi矩阵对应一个selector 及其所选中的 z C C S z_{CCS} zCCS乘积项 。】
M 0 = ( 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 − 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 − 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_0=\begin{pmatrix} 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ -1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ -1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M0= 11−1−110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 1 = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_1=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M1= 000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 2 = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 − 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 − 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_2=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ -1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ -1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M2= 0000−1−1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 3 = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_3=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M3= 001101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 4 = ( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_4=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M4= 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 5 = ( 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ) M_5=\begin{pmatrix} 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 1& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M5= 111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
M 6 = ( 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ) M_6=\begin{pmatrix} 0& 1 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 1& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0\\ 0& 0 & 0& 1& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 1& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 1& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 1& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \end{pmatrix} M6= 000000100000010000001000000100000010000001000000000000000000000000000000000000000000000000000000
M 7 = ( 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 ) M_7=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 1& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 1 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 1& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 1& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 1 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 1& 0 & 0& 0& 0 & 0 \end{pmatrix} M7= 000000000010000100000000000000000000000000100000010000001000000001000000000000000000000000000000
M 8 = ( 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ) M_8=\begin{pmatrix} 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 1 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 1& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 1& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 1& 0 & 0\\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 1 & 0 \\ 0& 0 & 0& 0& 0& 0& 0& 0& 0 & 0& 0& 0 & 0& 0& 0 & 1 \end{pmatrix} M8= 000000000000000000000000000000001000000000000000000000000000000000100000010000000100000010000001
S i S_i Si:为"structure"约束多项式中第 i i i个单项中所包含的矩阵的index索引号。
如上图情况,有 S 0 = { 0 , 6 } , S 1 = { 1 , 7 } , S 2 = { 2 , 8 } , S 3 = { 3 , 5 , 6 , 7 } , S 4 = { 4 } S_0=\{0,6\},S_1=\{1,7\},S_2=\{2,8\},S_3=\{3,5,6,7\},S_4=\{4\} S0={0,6},S1={1,7},S2={2,8},S3={3,5,6,7},S4={4}
d d d:即"structure"约束多项式(即多变量多项式 g g g)中的单项中的最大total degree。【对应CCS定义中的 "structure"约束多项式中的单项中最多包含的矩阵个数】如上图情况, d d d取值为4。
c i c_i ci:为"structure"约束多项式中第 i i i个单项中所包含常量值。如上图情况,各 c i c_i ci值均为1。
最终满足CCS定义:
( M 0 ⋅ z C C S ) ∘ ( M 6 ⋅ z C C S ) + ( M 1 ⋅ z C C S ) ∘ ( M 7 ⋅ z C C S ) + ( M 2 ⋅ z C C S ) ∘ ( M 8 ⋅ z C C S ) + ( M 3 ⋅ z C C S ) ∘ ( M 5 ⋅ z C C S ) ∘ ( M 6 ⋅ z C C S ) ∘ ( M 7 ⋅ z C C S ) + ( M 4 ⋅ z C C S ) = 0 (M_0\cdot z_{CCS}) \circ (M_6\cdot z_{CCS})+(M_1\cdot z_{CCS})\circ (M_7\cdot z_{CCS})+(M_2\cdot z_{CCS})\circ (M_8\cdot z_{CCS})+(M_3\cdot z_{CCS})\circ (M_5\cdot z_{CCS})\circ (M_6\cdot z_{CCS})\circ (M_7\cdot z_{CCS})+(M_4\cdot z_{CCS})=0 (M0⋅zCCS)∘(M6⋅zCCS)+(M1⋅zCCS)∘(M7⋅zCCS)+(M2⋅zCCS)∘(M8⋅zCCS)+(M3⋅zCCS)∘(M5⋅zCCS)∘(M6⋅zCCS)∘(M7⋅zCCS)+(M4⋅zCCS)=0
Remark 5:
Remark 6:
Remark 7:
Remark 8:
t t t:为偶数。
理论上,AIR assignment z z z包含了 m + 1 m+1 m+1行,每行具有 t / 2 t/2 t/2列。上面的Definition 2.4定义中要求:
本文可处理不只一个(多个)AIR constraint polynomials:
为表示某CPU某single step的约束,通常需要多个约束多项式 g g g,表示为 g 1 , ⋯ , g k g_1,\cdots,g_k g1,⋯,gk。通常 k k k值为数十或数百[GPR21, BGtRZt23]。不过存在直观且标准的randomized reduction方法,可将具有 k > 1 k>1 k>1个约束多项式的AIR reduce为 只具有单一约束多项式 g g g的AIR:
与之前的AIR定义对比:
之前的一些研究成果中,针对证明AIR instance satisfiability所使用的特定证明系统,以裁剪的方式来定义AIR instance,如称为STARKs [BBHR19b, Sta21, BSCKL23]。这些定义将witness vector z z z的行索引,定义为 F \mathbb{F} F的某cyclic subgroup G G G的generator h h h的powers h i h^i hi,即 h i h^i hi指向 z z z的第 i i i行。
本文定义与该定义等价,只是更自然地将 z z z的行索引号表示为整数 { 0 , ⋯ , m − 1 } \{0,\cdots,m-1\} {0,⋯,m−1}。不之处在于:
将AIR表示为CCS:
令 w C C S = w A I R , I C C S = I A I R w_{CCS}=w_{AIR},\mathcal{I}_{CCS}=\mathcal{I}_{AIR} wCCS=wAIR,ICCS=IAIR。
令 S C C S = ( m , n , N , l , t , q , d , [ M 0 , ⋯ , M t − 1 ] , [ S 0 , ⋯ , S q − 1 ] , [ c 0 , ⋯ , c q − 1 ] ) S_{CCS}=(m,n,N,l,t,q,d,[M_0,\cdots,M_{t-1}],[S_0,\cdots,S_{q-1}],[c_0,\cdots,c_{q-1}]) SCCS=(m,n,N,l,t,q,d,[M0,⋯,Mt−1],[S0,⋯,Sq−1],[c0,⋯,cq−1]),其中 m , t , q , d m,t,q,d m,t,q,d源自上面定义的 S A I R S_{AIR} SAIR。
剩下的 S C C S S_{CCS} SCCS元素的转换规则为:
1)派生 l l l和 n n n:
令 l = t / 2 , n = m ⋅ t / 2 l=t/2,n=m\cdot t/2 l=t/2,n=m⋅t/2。 应为:令 l = t / 2 , n = ( m + 1 ) ⋅ t / 2 + 1 l=t/2,n=(m+1)\cdot t/2+1 l=t/2,n=(m+1)⋅t/2+1。
2)派生 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1和 N N N:
注意, S A I R S_{AIR} SAIR中的 g g g为具有 t t t个变量的多变量多项式。
除明确指出,以下 M 0 , ⋯ , M t − 1 ∈ F m × n M_0,\cdots,M_{t-1}\in\mathbb{F}^{m\times n} M0,⋯,Mt−1∈Fm×n中的任意元素均为 0 0 0——即 F \mathbb{F} F的additive identity。
CCS中 M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1矩阵中的一行对应 S A I R S_{AIR} SAIR中 m m m个约束中的一个,因此,若将CCS行索引号定为 { 0 , ⋯ , m − 1 } \{0,\cdots,m-1\} {0,⋯,m−1},则令 i = 0. ⋯ , m − 1 i=0.\cdots,m-1 i=0.⋯,m−1,就足以定义这些矩阵中第 i i i行的值。
对于所有的 j ∈ { 0 , 1 , ⋯ , t − 1 } j\in\{0,1,\cdots,t-1\} j∈{0,1,⋯,t−1},令 k j = i ⋅ t / 2 + j k_j=i\cdot t/2+j kj=i⋅t/2+j(应为 k j = ( i − 1 ) ⋅ t / 2 + j k_j=(i-1)\cdot t/2+j kj=(i−1)⋅t/2+j) 。存在3种情况:【根据Definition 2.4中定义可知, ∣ w A I R ∣ = ( m − 1 ) ⋅ t / 2 |w_{AIR}|=(m-1)\cdot t/2 ∣wAIR∣=(m−1)⋅t/2。】
这样使得 z C C S = ( w A I R , x A I R , 1 ) z_{CCS}=(w_{AIR},x_{AIR},1) zCCS=(wAIR,xAIR,1), x A I R x_{AIR} xAIR的前半部分对应 z A I R z_{AIR} zAIR的首行的所有 t / 2 t/2 t/2个元素, x A I R x_{AIR} xAIR的后半部分对应 z A I R z_{AIR} zAIR的最后一行的所有 t / 2 t/2 t/2个元素,其中:
2.1)和2.3)结合,表示CCS的第 0 0 0个约束中,分别对 g g g用 x A I R x_{AIR} xAIR的前半部分和 w A I R w_{AIR} wAIR的第一行;2.2)和2.3)结合,表示CCS的第 m − 1 m-1 m−1个约束中,分别对 g g g用 x A I R x_{AIR} xAIR的后半部分和 w A I R w_{AIR} wAIR的最后一行;单独2.2),表示CCS中除第 0 0 0和第 m − 1 m-1 m−1个约束之外的所有第 i i i个约束,分别对 g g g用 w A I R w_{AIR} wAIR的第 i i i和第 i + 1 i+1 i+1行。
S C C S . N S_{CCS}.N SCCS.N值为: M 0 , ⋯ , M t − 1 M_0,\cdots,M_{t-1} M0,⋯,Mt−1矩阵中的所有非零元素总数。
3)派生 S 0 , ⋯ , S q − 1 S_0,\cdots,S_{q-1} S0,⋯,Sq−1和 c 0 , ⋯ , c q − 1 c_0,\cdots,c_{q-1} c0,⋯,cq−1:
注意, S A I R S_{AIR} SAIR中的 g g g为具有 t t t个变量的多变量多项式, g g g具有 q q q个单项,每个单项的最大degree为 d d d。
对于 i ∈ { 0 , 1 , ⋯ , q − 1 } i\in\{0,1,\cdots,q-1\} i∈{0,1,⋯,q−1},设置 c i c_i ci为 g g g中第 i i i项的系数。
对于 i ∈ { 0 , 1 , ⋯ , q − 1 } i\in\{0,1,\cdots,q-1\} i∈{0,1,⋯,q−1},若 g g g中第 i i i项包含某变量 j j j,其中 j ∈ { 0 , 1 , ⋯ , t − 1 } j\in\{0,1,\cdots,t-1\} j∈{0,1,⋯,t−1},则将 j j j添加到multiset S i S_i Si 中,并with multiplicity equal to the degree of the variable。
经观察可发现,tuple ( S C C S , I C C S ) (S_{CCS},\mathcal{I}_{CCS}) (SCCS,ICCS) is satisfied by w C C S w_{CCS} wCCS 当且仅当 ( S A I R , I A I R ) (S_{AIR},\mathcal{I}_{AIR}) (SAIR,IAIR) is satisfied by w A I R w_{AIR} wAIR。
与Remark 6类似,AIR的NP-checker在evaluate g g g时是逐项操作的,用时为 O ( q d ) O(qd) O(qd),但对于某些 g g g多项式,可进一步优化具有更快的evaluation流程。
本文在将AIR reduce为CCS时,并不会引入增加SNARK Prover time的开销。原因在于,在SNARK for CCS中的Prover,其执行的field operations数量会随着 q q q( g g g多项式中的单项个数)的增加而增加,但Prover所需的cryptographic operations数量与 q q q无关。所谓cryptographic operations是指必须cryptographically committed的field elements数量。而通常,cryptographic operations数量为SNARK Prover的计算瓶颈。
Remark 9:
对于具有 l l l个变量的多项式 p : F l → F p:\mathbb{F}^l\rightarrow \mathbb{F} p:Fl→F,若 p p p中每个变量的degree最多为1,则称 p p p是multilinear的。
令 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbb{F} f:{0,1}l→F为可将 l l l维度的Boolean hypercube映射为某field F \mathbb{F} F的任意函数。
若对于所有的 x ∈ { 0 , 1 } l x\in\{0,1\}^l x∈{0,1}l,有 g ( x ) = f ( x ) g(x)=f(x) g(x)=f(x),则可称多项式 g : F l → F g:\mathbb{F}^l\rightarrow \mathbb{F} g:Fl→F extend 函数 f f f。
众所周知,对于任意的函数 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbb{F} f:{0,1}l→F,存在唯一的extend 函数 f f f的multilinear多项式 f ~ : F l → F \tilde{f}:\mathbb{F}^l\rightarrow \mathbb{F} f~:Fl→F。将多项式 f ~ \tilde{f} f~称为函数 f f f的multilinear extension(MLE)。
在interactive proof设计中常用到的一种特殊multilinear extension(MLE)为:多项式 e q ~ \tilde{eq} eq~为函数 e q : { 0 , 1 } s × { 0 , 1 } s → F eq:\{0,1\}^s\times \{0,1\}^s\rightarrow \mathbb{F} eq:{0,1}s×{0,1}s→F的MLE,详细定义为:
e q ( x , e ) = { 1 if x=e 0 otherwise eq(x,e)= \left\{\begin{matrix} 1 & \text{if x=e} \\ 0 &\text{otherwise} \end{matrix}\right. eq(x,e)={10if x=eotherwise
e q ~ ( x , e ) = ∏ i = 1 s ( e i ⋅ x i + ( 1 − e i ) ⋅ ( 1 − x i ) ) ( 9 ) \tilde{eq}(x,e)=\prod_{i=1}^{s}(e_i\cdot x_i+(1-e_i)\cdot (1-x_i))\ \ \ \ \ \ \ \ \ \ \ (9) eq~(x,e)=∏i=1s(ei⋅xi+(1−ei)⋅(1−xi)) (9)
事实上,很容易发现方程式(9)中右侧为一个multilinear多项式,当对任意input ( x , e ) ∈ { 0 , 1 } s × { 0 , 1 } s (x,e)\in\{0,1\}^s\times \{0,1\}^s (x,e)∈{0,1}s×{0,1}s evaluate时,若 x = e x=e x=e,则输出为1,否则为0。因此方程式(9)中右侧为extend 函数 e q eq eq的唯一multilinear多项式。同时,方程式(9)中暗示了, e q ~ ( r 1 , r 2 ) \tilde{eq}(r_1,r_2) eq~(r1,r2) evaluate at任意point ( r 1 , r 2 ) ∈ F s × F s (r_1,r_2)\in\mathbb{F}^s\times \mathbb{F}^s (r1,r2)∈Fs×Fs的用时为 O ( s ) O(s) O(s)(本文认为任意的field addition或multiplicatio运算用时均为constant的)。
vector的multilinear extension定义:
为获取任意函数的MLE表示,遵循[Tha20, Lemma3.6]标准规则,采用Lagrange插值方式:
其中多项式集合 { X w : w ∈ { 0.1 } l } \{\mathcal{X}_w:w\in\{0.1\}^l\} {Xw:w∈{0.1}l}称为 具有 l l l个变量multilinear多项式的Lagrange basis polynomials。evaluation结果值 { f ~ ( w ) : w ∈ { 0.1 } l } \{\tilde{f}(w):w\in\{0.1\}^l\} {f~(w):w∈{0.1}l}有时称为 f ~ \tilde{f} f~的Lagrange basis系数,具体定义见上面方程式(10)。
令 g g g为基于某有限域 F \mathbb{F} F的某 l l l个变量多项式。sum-check protocol协议是指:Prover向Verifier提供如下求和值:
H : = ∑ b ∈ { 0 , 1 } l g ( b ) ( 11 ) H:=\sum_{b\in\{0,1\}^l}g(b)\ \ \ \ \ \ \ \ \ \ \ (11) H:=∑b∈{0,1}lg(b) (11)
若无帮助,为计算 H H H,Verifier需对 g g g evaluate at all 2 l 2^l 2l points in { 0 , 1 } l \{0,1\}^l {0,1}l之后再求和。
sum-check protocol,支持Verifier将这些困难的工作转移给Prover。
sum-check protocol包含 l l l轮,每轮对应 g g g的一个变量。在第 i i i轮:
此时,将sum-check protocol中的轮数,以及, g g g中的其实变量号都以 { 0 , 1 , ⋯ , l − 1 } \{0,1,\cdots,l-1\} {0,1,⋯,l−1}表示,而 r 0 , ⋯ , r i − 1 r_{0},\cdots,r_{i-1} r0,⋯,ri−1为Verifier在协议的第 0 , ⋯ , i − 1 0,\cdots,i-1 0,⋯,i−1轮所选择的random field elements。
sum-check protocol中: