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​)i​ai​+(qR​)i​bi​+(qO​)i​ci​+(qM​)i​ai​bi​+(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​)i​ai​bi​=((qM​)i​ai​)∘(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​)i​ai​=(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−110​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​000010​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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−1​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​001101​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​111111​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​000000​100000​010000​001000​000100​000010​000001​000000​000000​000000​000000​000000​000000​000000​000000​000000​ ​
    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​= ​000000​000010​000100​000000​000000​000000​000000​100000​010000​001000​000001​000000​000000​000000​000000​000000​ ​
    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​= ​000000​000000​000000​000000​000000​001000​000000​000000​000000​000000​000000​100000​010000​000100​000010​000001​ ​

  • 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−1​ri⋅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∣。
  • 与之前的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表示为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​矩阵中的所有非零元素总数。

  • 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)={10​if 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}l​g(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}l​g(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=1l​di​),+ 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)相关推荐

  1. Customizable constraint systems for succinct arguments学习笔记(2)

    微软研究中心Srinath Setty.a16z crypto research 和 Georgetown University Justin Thaler.Carnegie Mellon Unive ...

  2. Subvector Commitments with Application to Succinct Arguments学习笔记

    1. 背景知识 Russell W. F. Lai 和 Giulio Malavolta 在Crypto 2019上发表的论文<Subvector Commitments with Applic ...

  3. Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记

    1. 引言 Groth 2009年论文<Linear Algebra with Sub-linear Zero-Knowledge Arguments>. 已知2个matrices A,B ...

  4. 架构设计 之一 C 嵌入式设计模式(Design Patterns for Embedded Systems in C)学习笔记

    前言   时至今日,已经不知道在嵌入式的道路上到底挣扎了多少个岁月,总感觉要"病入膏肓"了.此间总是不时出现一些疑惑:人家搞 Java.搞 C# 的动不动就是什么架构 / 框架的, ...

  5. CST(Crypto Systems Toolkit) 7.1学习笔记-chapter6

    6,加密入门  6.1,使用密码则安全   非对称加密包括RSA,DSA,Diffie-Hellman...   对称加密包括DES, Triple DES,RC2,RC4,IDEA,RC5,Blow ...

  6. Vector Commitment Techniques and Applications to Verifiable Decentralized Storage学习笔记

    1. 引言 Campanelli等人 2020年论文<Vector Commitment Techniques and Applications to Verifiable Decentrali ...

  7. Linear-time zero-knowledge proofs for arithmetic circuit satisfiability 学习笔记

    1. 引言 Bootle等人2017年论文<Linear-time zero-knowledge proofs for arithmetic circuit satisfiability> ...

  8. Practical Zero-Knowledge Protocols Based on the Discrete Logarithm Assumption 学习笔记 1

    1. 引言 Stephanie Bayer 2013年博士论文 <Practical Zero-Knowledge Protocols Based on the Discrete Logarit ...

  9. PLONK: permutations over lagrange-bases for oecumenical noninteractive arguments of knowledge 学习笔记

    1. 引言 Gabizon等人2019年论文<PLONK: permutations over lagrange-bases for oecumenical noninteractive arg ...

最新文章

  1. python操作MariaDB
  2. c++ 三角函数_高中数学:三角函数知识点总结+专项练习,速速查看!
  3. AIX的异步IO设置
  4. id3决策树 鸢尾花 python_C4.5决策树Python代码实现
  5. lintcode Permutation Index
  6. DPDK Qos之报文处理流水线
  7. 交互式多模型_26亿参数,智源、清华开源中文大规模预训练模型
  8. php发布文章时 未定义索引,php – 上传文件时未定义的索引
  9. Access——SQL语言查询
  10. 读取肌电数据,构建模型训练数据
  11. 2019-06-30中国裁判文书网数据爬虫更新,PYTHON
  12. 金融行业的数据分析应该怎么做?
  13. YC出品的创业第一课:How to start a startup
  14. Nginx-正向代理HTTPS
  15. 支付宝APP支付 显示 系统繁忙 请稍后再试 ALI40247
  16. 现实迷途 第三十章 若即若离
  17. 达梦数据库备份还原中出现的错误
  18. 了解僵尸网络攻击:什么是僵尸网络,它如何传播恶意软件以及如何保护自己?
  19. 5G和人工智能存在递进关系,两者相辅相成!
  20. getnameinfo函数

热门文章

  1. React 实现计时器
  2. 一篇文章教你理解什么是静态库和动态库
  3. 分享 华为多屏协同初体验 第三方电脑DIY华为一碰传教程
  4. 树莓派4b主板特点_树莓派4B的实用配件清单推荐
  5. neo4j spatial导入shpfile/OSM
  6. 【ESP32细节】WiFi STA连接后,更改在路由器中显示的名称
  7. CNN入门——CNN各层功能解释
  8. java经典程序(1-10)
  9. EgretMVC龙骨动画插入及播放
  10. oneinStack配置无域名网站