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+e1}。可将 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,,gk1
    不过实际用时,用单个多项式 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,,gk1中的一个。 g g g多项式的total degree最多为 log ⁡ k \log k logk 乘以 “ g 0 , ⋯   , g k − 1 g_0,\cdots,g_{k-1} g0,,gk1中的最大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=wPlonkishICCS=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,,Mt1],[S0,,Sq1],[c0,,cq1]),其中 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,,Mt1 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,,Tm1每个向量长度为 t t t,其中的每个元素为 { 0 , ⋯   , n + e − 1 } \{0,\cdots,n+e-1\} {0,,n+e1},为指向 z z z向量的索引值。
      除以下指定值之外, M 0 , ⋯   , M t − 1 ∈ F m × n M_0,\cdots,M_{t-1}\in\mathbb{F}^{m\times n} M0,,Mt1Fm×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,,t1},令 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,,Mt1矩阵中的首列对应公开的selectors信息,第 k j k_j kj列的值表示选中 z z z向量的第 k j k_j kj个元素。

      • k j ≥ n k_j\geq n kjn,则设置 M j [ i ] [ 0 ] = s [ k j − n ] M_j[i][0]=s[k_j-n] Mj[i][0]=s[kjn]。注意,等式(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,,Mt1中非零元素的总数。

  • 2)派生 S 0 , ⋯   , S q − 1 S_0,\cdots,S_{q-1} S0,,Sq1 c 0 , ⋯   , c q − 1 c_0,\cdots,c_{q-1} c0,,cq1

    • 注意 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,,q1},设 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,,q1},若 g g g的第 i i i个单项中包含了某变量 j j j,其中 j ∈ { 0 , 1 , ⋯   , t − 1 } j\in\{0,1,\cdots,t-1\} j{0,1,,t1},则将 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)(1bi),同时又有 ( 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=(MqMz)(Maz),即需要额外再引入一列 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 qLqRqOqMqCq1abc,分别对应 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 abc三列中除public input之外,且copy constraints(上图颜色标识部分,只需二者取一), w w w witness的size为 3 ∗ 6 − 2 − 2 − 1 = 13 3*6-2-2-1=13 36221=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+e1}。可将 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,,Mt1矩阵:
    对于所有的 j ∈ { 0 , 1 , ⋯   , t − 1 } j\in\{0,1,\cdots,t-1\} j{0,1,,t1},令 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,,Mt1矩阵中的首列对应公开的selectors信息,第 k j k_j kj列的值表示选中 z z z向量的第 k j k_j kj个元素。

    • k j ≥ n k_j\geq n kjn,则设置 M j [ i ] [ 0 ] = s [ k j − n ] M_j[i][0]=s[k_j-n] Mj[i][0]=s[kjn]。注意,等式(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= 111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    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= 000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
    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 (M0zCCS)(M6zCCS)+(M1zCCS)(M7zCCS)+(M2zCCS)(M8zCCS)+(M3zCCS)(M5zCCS)(M6zCCS)(M7zCCS)+(M4zCCS)=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 z ∈ F n z\in\mathbb{F}^n zFn,存在某fixed vector v ∈ F n v\in\mathbb{F}^n vFn,使得 M ⋅ z = v M\cdot z=v Mz=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 Mz

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 i1行和 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 i1 i i i的寄存器值 为输入,检查在step i i i给寄存器的赋值 正确遵循了自 z z z i − 1 i-1 i1行为起始state进行CPU计算的规则。
    • witness vector w w w的size为: ( m − 1 ) ⋅ t / 2 (m-1)\cdot t/2 (m1)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} rF给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=0k1rigi                    (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(k1)/∣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,,m1}。不同之处在于:

    • 之前的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,,Mt1],[S0,,Sq1],[c0,,cq1]),其中 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=mt/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,,Mt1 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,,Mt1Fm×n中的任意元素均为 0 0 0——即 F \mathbb{F} F的additive identity。
    CCS中 M 0 , ⋯   , M t − 1 M_0,\cdots,M_{t-1} M0,,Mt1矩阵中的一行对应 S A I R S_{AIR} SAIR m m m个约束中的一个,因此,若将CCS行索引号定为 { 0 , ⋯   , m − 1 } \{0,\cdots,m-1\} {0,,m1},则令 i = 0. ⋯   , m − 1 i=0.\cdots,m-1 i=0.,m1,就足以定义这些矩阵中第 i i i行的值。
    对于所有的 j ∈ { 0 , 1 , ⋯   , t − 1 } j\in\{0,1,\cdots,t-1\} j{0,1,,t1} k j = i ⋅ t / 2 + j k_j=i\cdot t/2+j kj=it/2+j应为 k j = ( i − 1 ) ⋅ t / 2 + j k_j=(i-1)\cdot t/2+j kj=(i1)t/2+j) 。存在3种情况:【根据Definition 2.4中定义可知, ∣ w A I R ∣ = ( m − 1 ) ⋅ t / 2 |w_{AIR}|=(m-1)\cdot t/2 wAIR=(m1)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=m1 j ≥ t / 2 j\geq t/2 jt/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=(m1)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 m1个约束中,分别对 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 m1个约束之外的所有第 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,,Mt1矩阵中的所有非零元素总数。

  • 3)派生 S 0 , ⋯   , S q − 1 S_0,\cdots,S_{q-1} S0,,Sq1 c 0 , ⋯   , c q − 1 c_0,\cdots,c_{q-1} c0,,cq1
    注意, 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,,q1},设置 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,,q1},若 g g g中第 i i i项包含某变量 j j j,其中 j ∈ { 0 , 1 , ⋯   , t − 1 } j\in\{0,1,\cdots,t-1\} j{0,1,,t1},则将 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 m3,否则根据Lemma3由AIR转换来的CCS instance,其public input x ∈ F t x\in\mathbb{F}^t xFt的size 要远远短于 witness w ∈ F ( m − 1 ) t / 2 w\in\mathbb{F}^{(m-1)t/2} wF(m1)t/2的size。
    根据后续第5章以及Theorem 1中的证明中可知,最终适合将 x x x填充零后使其长度为 ∣ w − 1 ∣ |w-1| w1∣。这样可确保 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 mn呈线性关系,事实上,给Verifier time增加的开销仅为某加法常量值。

3. 背景知识

3.1 Multilinear extensions

对于具有 l l l个变量的多项式 p : F l → F p:\mathbb{F}^l\rightarrow \mathbb{F} p:FlF,若 p p p中每个变量的degree最多为1,则称 p p p是multilinear的。
f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbb{F} f:{0,1}lF为可将 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:FlF extend 函数 f f f
众所周知,对于任意的函数 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbb{F} f:{0,1}lF,存在唯一的extend 函数 f f f的multilinear多项式 f ~ : F l → F \tilde{f}:\mathbb{F}^l\rightarrow \mathbb{F} f~:FlF。将多项式 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}sF的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(eixi+(1ei)(1xi))           (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 uFm,将 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}logmF:该函数的输入为整数 i ∈ [ 0 , m − 1 ] i\in[0,m-1] i[0,m1]的二进制表示 ( i 0 , ⋯   , i log ⁡ m − 1 ) (i_0,\cdots,i_{\log m -1}) (i0,,ilogm1),输出为 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 − i 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-i}}g(r_0,\cdots,r_{i-1},X_i,b_{i+1},\cdots,b_{l-1})\ \ \ (12) (bi+1,,bl1){0,1}lig(r0,,ri1,Xi,bi+1,,bl1)   (12)

此时,将sum-check protocol中的轮数,以及, g g g中的起始变量号都以 { 0 , 1 , ⋯   , l − 1 } \{0,1,\cdots,l-1\} {0,1,,l1}表示,而 r 0 , ⋯   , r i − 1 r_{0},\cdots,r_{i-1} r0,,ri1为Verifier在协议的第 0 , ⋯   , i − 1 0,\cdots,i-1 0,,i1轮所选择的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 rFl所需的时间。
    经典情况下,对于每轮 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 rFl所需的时间。
    要比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:FlF中每个变量的degree最多为1。当前的multilinear多项式承诺方案主要有:
在这里插入图片描述

  • 除基于KZG的方案之外的所有方案均为transparent的;
  • Brakedown-PC和Orion-PC均具有plausibly post-quantum secure。

参考资料

[1] Customizable constraint systems for succinct arguments

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值