Customizable constraint systems for succinct arguments学习笔记(1)
1. 引言
微软研究中心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),在不增加开销的情况下,同时涵盖了当前主流的电路表示:
- 1)R1CS(rank-one constraint system):约束电路degree只能为2。
- 2)AIR(algebraic intermediate representation):电路必须是uniform的。
- 3)Plonkish:泛指具有custom gates的约束系统,或,RAP(randomized AIR with preprocessing),或,TurboPLONK/UltraPLONK。
- 不同于AIR,不要求电路是uniform的。
- 不同于R1CS,支持约束degree大于2。
- Plonkish的表现力更强,对于特定program execution,其表示要比R1CS或AIR更简短。但是,对于Prover来说,证明Plonkish需要更高的per-gate(或per-constraint)开销。
很多应用场景,其减少的circuit size所接收的成本,可能超过了 Prover证明更具表现力gate的成本。
不同于Plonkish和AIR,CCS不与特定的证明系统绑定。
- 1)SuperSpartan:CRYTPO20论文Spartan中的linear-time polynomial IOP for R1CS 很容易扩展为CCS,将其与 某多项式承诺方案结合,可生成针对CCS的SNARK族——称为SuperSpartan。
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:
- Verifier:无需linear-time preprocessing。
- 针对这些CCS instance,SuperSpartan提供了“free” addition gates。
1.4)SuperSpartan for AIR:
- 为首个针对AIR的SNARK
- 具有linear-time Prover:比现有的AIR STARK方案的Prover要更快。
- transparent
- sublinear-time pre-processing
- polylogarithmic proof size
- plausible post-quantum security。
- 2)SuperMarlin:2020年Marlin 的扩展。
SNARK( succinct non-interactive argument of knowledge)中的succinct是指:
- 验证某proof的速度 要比 之间检查witness本身的速度 快指数级。(即proof size要比待证明的statement size 小指数级。)
之前研究通常认为Plonkish与R1CS有很大的不同,并且优于R1CS,并相信,为支持Plonkish,必须基于Plonk证明系统[GWC19]。为提升效率,对底层基石进行修改——如HyperPlonk [CBBZ23],HyperPlonk严格遵循Plonk的证明系统,但:
- 将基于单变量多项式的“zero checks”、“permutation checks”和“product checks” 替换为 基于multilinear多项式[Set20, SL20]的等价gadgets。
- 这种替换的动机是:这些基于multilinear多项式的gadgets采用了sum-check协议[LFKN90],该协议对Prover具有独特的成本分布(如,可实现linear-time Prover [Ta13,Set20])。
1.1 本文贡献
本文贡献主要有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中仅包含:- matrix-vector products
- Hadamard(即entry-wise)vector products
- summation
与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以另一种方式实现了】- 其Prover的cryptographic开销,不会随constraints degree增长。Spartan中不包含FFT运算。(FFT运算需superlinear-time,且难于分发处理。)
注意:
- Remark 1:当前不清楚如何来对polynomial IOPs for Plonkish(Plonk和HyperPlonk)进行扩展以适于处理CCS或R1CS。
主要问题在于Plonk和HyerPlonk中限制了特定类型的linear constraints(又名“copy constraints”)——仅用于enforce equality between a pair of values in the satisfying assignment。
而Spartan和Marlin中 都有名为sparse polynomial commitment scheme,如[Tha20第10.3.2和16.2节],的机制来处理通用linear constraints。
此外,SuperSpartan可用于:- uniform instances of CCS,包括由AIR提升的CCS instance和CCS并行变种
- 提供了“free” addition gates,即Prover的cryptographic work与CCS instance中的加法运算次数无关。该属性与之前需要per-circuit trusted setup[GGPR13, Gro16]的SNARKs for R1CS类似。
- Remark 2:Spartan和SuperSpartan的polynomial IOP为interactive oracle protocols [BFL92],为早于(polynomial)IOP的证明西,且更简单。
在Babai等[BFL92]的interactive oracle protocol模式下,Verifier可 以functions或polynomials形式,query访问Prover的特定oracles,但除此之外,Prover和Verifier进行交互式证明(一个密切相关的证明模型是interactive PCP[KR08],其中Prover的oracle为某PCP)。特别是,在interactive oracle protocol中,在交互过程中不发送oracle。
3)SNARKs for uniform CCS(including AIR):
本文将描述如何用SuperSpartan来证明“uniform” circuits(特别是,所有AIR instance)的同时,在无需任何preprocessing的情况下实现succinct Verifier。具体依赖的关键技术为:- Verifier需evaluate certain multilinear polynomials that capture the “wiring” of the circuit(即CCS instance)。
支持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。
2. Customizable constraint systems(CCS)
R1CS为quadratic arithmetic programs (QAPs) [GGPR13]中的NP-complete problem。
R1CS instance中包含:
- a set of m m m constraints
- a vector z z z over 有限域 F \mathbb{F} F,为便于描述,将向量的初始索引值设为1。
- z z z satisfies所有 m m m个约束,则称其satisfy该R1CS instance。
在R1CS instance中:
- 以“structure”来描述约束
- “instance”中仅包含public input。
详细的R1CS定义为:
其中:
- z = ( w , 1 , x ) ∈ F n z=(w,1,x)\in\mathbb{F}^n z=(w,1,x)∈Fn。
- ⋅ \cdot ⋅为matrix-vector乘法运算。
- ∘ \circ ∘为向量间的Hadamard(即entry-wise)product。
- 0 \mathbf{0} 0为 m m m-sized向量,其每个条目等于 F \mathbb{F} F的additive identity。
- l l l:表示public input个数。
- m m m:表示单个矩阵中的行数。
- n n n:表示单个矩阵中的列数。
- N N N:为 Ω ( max ( m , n ) ) \Omega(\max(m,n)) Ω(max(m,n)),即单个矩阵中的最大非零元素个数。即保证矩阵是sparse的。
详细的CCS定义为:
其中:
- l l l:表示public input个数。
- t t t:表示矩阵总个数。
- m m m:表示单个矩阵中的行数。
- n n n:表示单个矩阵中的列数。
- N N N:为 Ω ( max ( m , n ) ) \Omega(\max(m,n)) Ω(max(m,n)),即单个矩阵中的最大非零元素个数。即保证矩阵是sparse的。
- q q q:即"structure"约束多项式中所包含的单项的总个数。
- d d d:即"structure"约束多项式中的单项中最多包含的矩阵个数。
- S i S_i Si:为"structure"约束多项式中第 i i i个单项中所包含的矩阵的index索引号。
- c i c_i ci:为"structure"约束多项式中第 i i i个单项中所包含常量值。
注意:
- 等式(3)中的 z z z向量的第 0 0 0个元素固定为1。
2.1 将R1CS表示为CCS
假设在算法中存在NP checker,其输入有NP instance和NP witness,会检查该witness是否satisfies该instance。
本文也采用类似的checker runtime来检查转换效率,也会作为size overhead的proxy(如将某R1CS witness转换为CCS witness)。
将R1CS表示为CCS:
2.2 将Plonkish表示为CCS
Plonkish定义为:
其中:
- g g g:即"structure"约束多项式 对应为 多变量多项式 g g g。
- t t t:即"structure"约束多项式(即多变量多项式 g g g)中的变量个数。【对应CCS定义中的矩阵总个数。】
- q q q:即"structure"约束多项式(即多变量多项式 g g g)中所包含的单项的总个数。【对应CCS定义中的 "structure"约束多项式中所包含的单项的总个数】
- d d d:即"structure"约束多项式(即多变量多项式 g g g)中的单项中的最大total degree。【对应CCS定义中的 "structure"约束多项式中的单项中最多包含的矩阵个数】
- s s s向量:为selectors取值常量向量。
- e e e:为selectors取值常量个数。
- m m m:表示"structure"中有 m m m个约束。【对应CCS定义中的单个矩阵中的行数】
- l l l:表示public input个数。【对应CCS定义中的public input个数】
- n n n:表示witness + public input 总个数。【对应CCS定义中的单个矩阵中的列数】
- 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 z z z中选出 t t t个元素给多变量多项式 g g g。
Remark 3:
- Plonkish通常结合gate constraints和copy constraints来表示,其中:
- copy constraints:用于enforce satisfying assignment中的某特定element pair具有相同的值。
在上面的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 instance中应包含不是一个,而是多个,多变量多项式 g g g,即 g 0 , ⋯ , g k − 1 g_0,\cdots,g_{k-1} g0,⋯,gk−1。
不过实际用时,用单个多项式 g g g,连同 log k \log k logk个selectors s s s,来对 g g g多项式的项进行开关,以 仿真不同的可能多项式 g 0 , ⋯ , g k − 1 g_0,\cdots,g_{k-1} g0,⋯,gk−1中的一个。 g g g多项式的total degree最多为 log k \log k logk 乘以 “ g 0 , ⋯ , g k − 1 g_0,\cdots,g_{k-1} g0,⋯,gk−1中的最大total degree”。
将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个元素。】- 若 k j ≥ n k_j\geq n kj≥n,则设置 M j [ i ] [ 0 ] = s [ k j − n ] M_j[i][0]=s[k_j-n] Mj[i][0]=s[kj−n]。注意,等式(3)中的 z z z向量的第 0 0 0个元素固定为1。
- 若 k j < n k_j<n kj<n,则设置 M j [ i ] [ k j ] = 1 M_j[i][k_j]=1 Mj[i][kj]=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中非零元素的总数。
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:
- 注意 g g g为 S P l o n k i s h S_{Plonkish} SPlonkish中的具有 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 j S_j Sj中 with multiplicity equal to the degree of the variable。
以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个元素。】- 若 k j ≥ n k_j\geq n kj≥n,则设置 M j [ i ] [ 0 ] = s [ k j − n ] M_j[i][0]=s[k_j-n] Mj[i][0]=s[kj−n]。注意,等式(3)中的 z z z向量的第 0 0 0个元素固定为1。
- 若 k j < n k_j<n kj<n,则设置 M j [ i ] [ k j ] = 1 M_j[i][k_j]=1 Mj[i][kj]=1。
对于上图情况,有:【事实上,每个 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:
- 当转换具有gate constraints和copy constraints的Plonkish为CCS时,CCS的witness个数 要比 Plonkish的witness个数 少copy constraints个。
Remark 6:
- Plonkish的NP-checker在evaluate g g g时是逐项操作的,用时为 O ( q d ) O(qd) O(qd),但对于某些 g g g多项式,可进一步优化具有更快的evaluation流程。
本文在将Plonkish 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 7:
- 当由Plonkish升为CCS时,CCS结构中的特定稀疏矩阵,具有CCS结构中稀疏矩阵 M M M的属性,即对于任意的satisfying assignment KaTeX parse error: Undefined control sequence: \iin at position 2: z\̲i̲i̲n̲\mathbb{F}^n,存在某fixed vector v ∈ F n v\in\mathbb{F}^n v∈Fn,使得 M ⋅ z = v M\cdot z=v M⋅z=v。
在Plonkish到CCS的过程中,那些包含了Plonkish “selectors”的矩阵(如上例中的 M 0 , M 2 , ⋯ , M 5 M_0,M_2,\cdots,M_5 M0,M2,⋯,M5),为减小sparse多项式承诺方案的复杂度和开销,SNARK for CCS(如SuperSpartan):- 可对 v v v commit,而不是在preprocessing phase中对 M M M进行commit;
- 且在proving时,Prover可使用 v v v来代替 M ⋅ z M\cdot z M⋅z。
Remark 8:
- Plonkish instance在实现时长使用随机化fingerprinting技术(如检查多个向量相互为permutation关系)。这就要求Prover在了解fingerprinting流程中用于检查witness正确性的randomness之前,需先对某witness vector进行cryptographically commit。Plonkish instance仅仅实现了该randomized checking procedure。而本文的CCS和SNARK for CCS可很容易就适应处理这样的randomized流程。详细见[Tha20, 第6.6.2节]讨论了如何将约束系统由interactive reductions 提升到 circuit satisfiability problems。
2.3 将AIR表示为CCS
AIR定义为:
其中:
t t t:为偶数。
理论上,AIR assignment z z z包含了 m + 1 m+1 m+1行,每行具有 t / 2 t/2 t/2列。上面的Definition 2.4定义中要求:
- 当对 z z z的每个相邻两行(即对于 i − 1 i-1 i−1行和 i i i行,其中 i = 1 , 2 , ⋯ m i=1,2,\cdots m i=1,2,⋯m)进行evaluate时,“constraint polynomial” g g g evaluation值为0。
- z z z的第一行,认为其为该computation的public input,即第一行的所有 t / 2 t/2 t/2个元素均属于public 信息 x x x。
- z z z的最后一行,认为其是该computation的claimed public output,即最后一行的所有 t / 2 t/2 t/2个元素也均属于public 信息 x x x。
- z z z中每行的 t / 2 t/2 t/2列,可看成是某CPU的特定register运行 m m m个steps的“execution trace”。constraint polynomial g g g以 状态机相邻step i − 1 i-1 i−1和 i i i的寄存器值 为输入,检查在step i i i给寄存器的赋值 正确遵循了自 z z z的 i − 1 i-1 i−1行为起始state进行CPU计算的规则。
- witness vector w w w的size为: ( m − 1 ) ⋅ t / 2 (m-1)\cdot t/2 (m−1)⋅t/2。因 z z z共有 m + 1 m+1 m+1行,第一行和最后一行均为public信息。
本文可处理不只一个(多个)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:- Verifier选择并发送随机数 r ∈ F r\in\mathbb{F} r∈F给Prover,Prover将 g 1 , ⋯ , g k g_1,\cdots,g_k g1,⋯,gk替换为单一约束多项式:
g : = ∑ i = 0 k − 1 r i ⋅ g i ( 8 ) g:=\sum_{i=0}^{k-1}r^i\cdot g_i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (8) g:=∑i=0k−1ri⋅gi (8)
将方程式(7)中的 g g g替换为 g 1 , ⋯ , g k g_1,\cdots,g_k g1,⋯,gk,若其均成立,则对 g 1 , ⋯ , g k g_1,\cdots,g_k g1,⋯,gk通过随机数 r r r合成的random linear combination g g g替换到方程式(7)中成立的概率为 1 1 1。与此同时,对于任意的 g i g_i gi方程式(7)fail,则random linear combination g g g fail的概率至少为 1 − ( k − 1 ) / ∣ F ∣ 1-(k-1)/|\mathbb{F}| 1−(k−1)/∣F∣。
- Verifier选择并发送随机数 r ∈ F r\in\mathbb{F} r∈F给Prover,Prover将 g 1 , ⋯ , g k g_1,\cdots,g_k g1,⋯,gk替换为单一约束多项式:
与之前的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定义允许每个约束多项式与某associated subset of rows耦合,使得,该constraint仅对属于该subset的rows成立。该subset必须为 G G G的subgroup,这实际上限制了其为“periodic” constraints,即意味着对每个第 k k k行,其中 k k k为a power of 2,则可应用该constraint。
而本文的SNARKs易于修改为支持这样的periodic constraints(见Remark 11)。
- 之前的AIR定义允许每个约束多项式与某associated subset of rows耦合,使得,该constraint仅对属于该subset的rows成立。该subset必须为 G G G的subgroup,这实际上限制了其为“periodic” constraints,即意味着对每个第 k k k行,其中 k k k为a power of 2,则可应用该constraint。
将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。- 即 z A I R z_{AIR} zAIR中首行为public input,共 t / 2 t/2 t/2个元素,令 l = t / 2 l=t/2 l=t/2表示public input个数。
- z A I R z_{AIR} zAIR中每相邻2行对应一个约束,共 m + 1 m+1 m+1行,对应 m m m个约束,令 n = ( m + 1 ) ⋅ t / 2 + 1 n=(m+1)\cdot t/2+1 n=(m+1)⋅t/2+1表示 z C C S z_{CCS} zCCS的size。
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。】- 2.1)如 i = 0 i=0 i=0且 j < t / 2 j<t/2 j<t/2,则设置 M j [ i ] [ j + ∣ w A I R ∣ ] = 1 M_j[i][j+|w_{AIR}|]=1 Mj[i][j+∣wAIR∣]=1。即对 M j M_j Mj的首行的值进行设置。
即表示取 z A I R z_{AIR} zAIR的首行值(即public input)。 - 2.2)如 i = m − 1 i=m-1 i=m−1且 j ≥ t / 2 j\geq t/2 j≥t/2,则设置 M j [ i ] [ j + ∣ w A I R ∣ + t / 2 ] = 1 M_j[i][j+|w_{AIR}|+t/2]=1 Mj[i][j+∣wAIR∣+t/2]=1。即对 M j M_j Mj的最后一行的值进行设置。
即表示取 z A I R z_{AIR} zAIR的最后一行值(即public output)。 - 2.3)否则,设置 M j [ i ] [ k j ] = 1 M_j[i][k_j]=1 Mj[i][kj]=1。设置 M j M_j Mj的第 i i i行的第 k j k_j kj列值为1。
即表示对应CCS的第 i i i个约束,分别取 w A I R w_{AIR} wAIR的第 i i i和第 i + 1 i+1 i+1行值用于多项式 g g g。
这样使得 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个元素,其中:
- w A I R w_{AIR} wAIR的size为 n = ( m − 1 ) ⋅ t / 2 n=(m-1)\cdot t/2 n=(m−1)⋅t/2。
- x A I R x_{AIR} xAIR对应 z A I R z_{AIR} zAIR首行和最后一行的值,其size为 t / 2 + t / 2 = t t/2+t/2=t t/2+t/2=t
- z C C S z_{CCS} zCCS的size为 ( m + 1 ) ⋅ t / 2 + 1 (m+1)\cdot t/2+1 (m+1)⋅t/2+1。
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矩阵中的所有非零元素总数。- 2.1)如 i = 0 i=0 i=0且 j < t / 2 j<t/2 j<t/2,则设置 M j [ i ] [ j + ∣ w A I R ∣ ] = 1 M_j[i][j+|w_{AIR}|]=1 Mj[i][j+∣wAIR∣]=1。即对 M j M_j Mj的首行的值进行设置。
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:
- 除非 m ≤ 3 m\leq 3 m≤3,否则根据Lemma3由AIR转换来的CCS instance,其public input x ∈ F t x\in\mathbb{F}^t x∈Ft的size 要远远短于 witness w ∈ F ( m − 1 ) t / 2 w\in\mathbb{F}^{(m-1)t/2} w∈F(m−1)t/2的size。
根据后续第5章以及Theorem 1中的证明中可知,最终适合将 x x x填充零后使其长度为 ∣ w − 1 ∣ |w-1| ∣w−1∣。这样可确保 z C C S z_{CCS} zCCS的长度 n n n、 ∣ w A I R ∣ |w_{AIR}| ∣wAIR∣、 ∣ ( 1 , x ) ∣ |(1,x)| ∣(1,x)∣的长度均可为powers of 2。这个很重要,可避免在将SNARK for AIR用于SNARK for CCS时Verifier的pre-processing开销。详细见后续Theorem 1证明中的段落可知,Verifier可高效evaluate z ~ \tilde{z} z~,这样的填充技术并不会让Verifier time与 m 和 n m和n m和n呈线性关系,事实上,给Verifier time增加的开销仅为某加法常量值。
3. 背景知识
3.1 Multilinear extensions
对于具有 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定义:
- 已知某vector u ∈ F m u\in \mathbb{F}^m u∈Fm,将 u u u的multilinear extension表示为multilinear多项式 u ~ \tilde{u} u~。可将 u u u看成是某函数: { 0 , 1 } log m → F \{0,1\}^{\log m}\rightarrow \mathbb{F} {0,1}logm→F:该函数的输入为整数 i ∈ [ 0 , m − 1 ] i\in[0,m-1] i∈[0,m−1]的二进制表示 ( i 0 , ⋯ , i log m − 1 ) (i_0,\cdots,i_{\log m -1}) (i0,⋯,ilogm−1),输出为 u i u_i ui。多项式 u ~ \tilde{u} u~为该函数的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)。
3.2 sum-check protocol
令 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轮:
- Prover发送包含了 d i d_i di个field elements的message,其中 d i d_i di对应 g g g中第 i i i个变量的degree。
- Verifier:回复单个random field element r i r_i ri。
- 若Prover是诚实的,则以单个 X i X_i Xi为变量的多项式为:
∑ ( b i + 1 , ⋯ , b l − 1 ) ∈ { 0 , 1 } l g ( r 0 , ⋯ , r i − 1 , X i , b i + 1 , ⋯ , b l − 1 ) ( 12 ) \sum_{(b_{i+1},\cdots,b_{l-1})\in\{0,1\}^l}g(r_0,\cdots,r_{i-1},X_i,b_{i+1},\cdots,b_{l-1})\ \ \ (12) ∑(bi+1,⋯,bl−1)∈{0,1}lg(r0,⋯,ri−1,Xi,bi+1,⋯,bl−1) (12)
此时,将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中:
- Verifier的runtime为 O ( ∑ i = 1 l d i ) O(\sum_{i=1}^{l}d_i) O(∑i=1ldi),+ evaluate g g g at a single point r ∈ F l r\in\mathbb{F}^l r∈Fl所需的时间。
经典情况下,对于每轮 i i i,有 d i = O ( 1 ) d_i=O(1) di=O(1),这就意味着Verifier总时长为: O ( l ) O(l) O(l) + evaluate g g g at a single point r ∈ F l r\in\mathbb{F}^l r∈Fl所需的时间。
要比Verifier直接计算 H H H所需时长 2 l 2^l 2l快指数级。
详细见[AB09, 第8章]或[Tha20,第4.1节]。
3.3 SNARKs
本文遵循[KST22] Nova中的SNARK定义:
本文遵循[BFS20] SuperSonic—— Transparent SNARKs from DARK compilers中的多项式承诺方案定义。针对multilinear多项式的多项式承诺方案 PC=(Gen, Commit, Open, Eval) \text{PC=(Gen, Commit, Open, Eval)} PC=(Gen, Commit, Open, Eval)为:
3.4 Polynomial IOP + polynomial commitment
现代SNARK为:
- 名为polynomial IOP( [BFS20, 即SuperSonic])的交互式协议
- 和 名为polynomial commitment scheme([KZG10])的密码学原语
的组合。二者组合可构建succinct interactive argument,通过Fiat-Shamir transformation[FS86],可转换为non-interactive,即实现某SNARK。
- Polynomial IOP:为一种交互式协议,具有一轮或多轮,Prover可能会“send”一个非常巨大的多项式 g g g给Verifier。由于 g g g非常大,可能Verifier并不希望读取整个 g g g多项式的描述。相反,在任何efficient polynomial IOP方案中,Verifier仅需“query” g g g at 一个点或少量点。这就意味着,Verifier所仅需的 g g g的信息为检查Prover在这个或这些点上的 g g g evaluation计算是诚实的。
- Polynomial Commitment:使得untrusted Prover可简洁地对某多项式 g g g进行承诺,并稍后根据Verifier所选择的 r r r,提供 g ( r ) g(r) g(r) 以及 以及该值确实为所承诺的多项式的evaluation值的证明。Polynomial Commitment方案恰为根据Polynomial IOP获取succinct argument所需的密码学原语。
不同于在Polynomial IOP中Prover需给Verifier发送大多项式 g g g,argument system Prover可对 g g g进行cryptographically commit,并在稍后reveal any evaluations of g g g required by the Verifier to perform its check。
具体SNARK方案是否需要trusted setup,还是是否为post-quantum secure,都取决于所采用的Polynomial Commitment方案。
- 若采用的Polynomial Commitment方案不需要trusted setup,则最终实现的SNARK也不需要;
- 若所采用的Polynomial Commitment方案为plausibly binding against quantum adversaries,则最终实现的SNARK也具有plausibly post-quantum sound。
SuperSpartan可采用任何适于multilinear多项式 g g g的多项式承诺方案。【任何单变量多项式承诺方案都可转换为multilinear,但转换过程中会引入额外开销,具体见如[CBBZ23, BCHO22, ZXZS20]。】
multilinear多项式 g : F l → F g:\mathbb{F}^l\rightarrow\mathbb{F} g:Fl→F中每个变量的degree最多为1。当前的multilinear多项式承诺方案主要有:
- 除基于KZG的方案之外的所有方案均为transparent的;
- Brakedown-PC和Orion-PC均具有plausibly post-quantum secure。
参考资料
[1] Customizable constraint systems for succinct arguments
Customizable constraint systems for succinct arguments学习笔记(1)相关推荐
- Customizable constraint systems for succinct arguments学习笔记(2)
微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon Unive ...
- Subvector Commitments with Application to Succinct Arguments学习笔记
1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...
- Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记
1. 引言 Groth 2009年论文<Linear Algebra with Sub-linear Zero-Knowledge Arguments>. 已知2个matrices A,B ...
- 架构设计 之一 C 嵌入式设计模式(Design Patterns for Embedded Systems in C)学习笔记
前言 时至今日,已经不知道在嵌入式的道路上到底挣扎了多少个岁月,总感觉要"病入膏肓"了.此间总是不时出现一些疑惑:人家搞 Java.搞 C# 的动不动就是什么架构 / 框架的, ...
- CST(Crypto Systems Toolkit) 7.1学习笔记-chapter6
6,加密入门 6.1,使用密码则安全 非对称加密包括RSA,DSA,Diffie-Hellman... 对称加密包括DES, Triple DES,RC2,RC4,IDEA,RC5,Blow ...
- Vector Commitment Techniques and Applications to Verifiable Decentralized Storage学习笔记
1. 引言 Campanelli等人 2020年论文<Vector Commitment Techniques and Applications to Verifiable Decentrali ...
- Linear-time zero-knowledge proofs for arithmetic circuit satisfiability 学习笔记
1. 引言 Bootle等人2017年论文<Linear-time zero-knowledge proofs for arithmetic circuit satisfiability> ...
- Practical Zero-Knowledge Protocols Based on the Discrete Logarithm Assumption 学习笔记 1
1. 引言 Stephanie Bayer 2013年博士论文 <Practical Zero-Knowledge Protocols Based on the Discrete Logarit ...
- PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记
1. 引言 Gabizon等人2019年论文<PLONK: permutations over lagrange-bases for oecumenical noninteractive arg ...
最新文章
- python操作MariaDB
- c++ 三角函数_高中数学:三角函数知识点总结+专项练习,速速查看!
- AIX的异步IO设置
- id3决策树 鸢尾花 python_C4.5决策树Python代码实现
- lintcode Permutation Index
- DPDK Qos之报文处理流水线
- 交互式多模型_26亿参数,智源、清华开源中文大规模预训练模型
- php发布文章时 未定义索引,php – 上传文件时未定义的索引
- Access——SQL语言查询
- 读取肌电数据,构建模型训练数据
- 2019-06-30中国裁判文书网数据爬虫更新,PYTHON
- 金融行业的数据分析应该怎么做?
- YC出品的创业第一课:How to start a startup
- Nginx-正向代理HTTPS
- 支付宝APP支付 显示 系统繁忙 请稍后再试 ALI40247
- 现实迷途 第三十章 若即若离
- 达梦数据库备份还原中出现的错误
- 了解僵尸网络攻击:什么是僵尸网络,它如何传播恶意软件以及如何保护自己?
- 5G和人工智能存在递进关系,两者相辅相成!
- getnameinfo函数