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