HyperNova:针对CCS的递归证明系统

1. 引言

前序博客有:

Nova、HyperNova及ProtoStar之间的关系为:

  • Nova:fold with error terms
  • HyperNova:fold with sumcheck
  • ProtoStar:fold the sumcheck itself

HyperNova为基于sumcheck协议的、针对CCS的递归证明系统,开源代码实现见:

在这里插入图片描述
与SuperNova类似,HyperNova也用于证明半结构化计算,不同之处在于:

  • SuperNova中每个step表示为Relaxed R1CS,而HyperNova中每个step表示为CCS(Customizable Constraint System)。
    • 在不增加开销的情况下,可将现有流行的算术化电路类型(如R1CS、Plonkish、AIR)均转换为CCS算术化电路。
    • CCS算术化表示,与证明CCS的证明系统,是相互独立的。
      • 1)原来针对R1CS的SNARKs方案,可很容易扩展为针对CCS(以及Plonkish),如:
        • Spartan(R1CS)-》SuperSpartan(CCS)
        • Marlin(R1CS)-》SuperMarlin(CCS)
      • 2)原来针对Plonkish的SNARKs方案(如Plonk、HyperPlonk等),无法在不增加开销的情况下,用于处理CCS(或R1CS)。

HyperNova关键点为:

  • 1)对通用zkSNARKs(Groth16,Plonk等)的关键改进为:
    • HyperNova的Recursive verifier circuit中有:1次scalar multiplication运算 + logarithmic次哈希运算。
    • HyperNova的Prover开销为:对witness进行承诺的1次MSM运算 + 1次sum-check运算(仅包含有限域运算)。即 HyperNova的证明速度 ≈ \approx 通过MSM对witness的承诺速度。
  • 2)采用multi-folding scheme:待fold的2个input instance可具有不同的NP relations,但共享某兼容结构。
  • 3)nlookup算法:与Nova家族兼容的lookup argument算法。

2. 目标:针对半结构化计算的快速递归zkSNARKs

在这里插入图片描述
所谓zkSNARKs,是指:Prover P P P证明其知道witness W W W,使得 C ( x , W ) = 1 C(x,W)=1 C(x,W)=1,其中 C C C为某public circuit, x x x为public input/output。
而递归zkSNARKs形如:

在这里插入图片描述
如证明:基于某初始输入 z 0 z_0 z0,运行某非确定性计算 C \mathcal{C} C n n n次,输出为 z n z_n zn

  • 所谓半结构化,是指:每个step计算为 { C 1 , C 2 , ⋯   , C l } \{\mathcal{C}_1,\mathcal{C}_2,\cdots,\mathcal{C}_l\} { C1,C2,,Cl}之一,由selector circuit ϕ \phi ϕ决定。
  • 所谓递归,是指:按step-by-step生成proof(不要求按顺序生成)

半结构化计算递归zkSNARK方案衍化路径为:【具有越来越简单的底层原语,以及,越来越高的效率】
在这里插入图片描述

  • 1)基于SNARKs的递归证明方案有:[Val08, BCTV14]。

  • 2)基于(S)NARKs+accumulation的递归证明方案有:[BGH19,BCMS20(Halo)]、[BDFG21]、[BCLMS21(采用split accumulation)]。

  • 3)基于folding scheme的递归证明方案有:[KST22(Nova)]、[KS22(SuperNova)]、[M23(Sangria(“PlonkNova”))]、paraNova、AIRNova、TypedNova、Origami、MoonMoon、[KS23(HyperNova)]、[CB23(ProtoStar)]等等。

    • 3.1)[KST22(Nova)]:Nova中的电路为R1CS格式,其Prover开销比通用SNARK更便宜,如Marlin中需要 多于22个MSM和FFT运算,而Nova中仅需要2个size为 O ( ∣ C ∣ ) O(|\mathcal{C}|) O(C)的MSM运算。
    • 3.2)[M23(Sangria(“PlonkNova”))]:将Nova扩展为degree- d d d Plonkish。Sangria的主要缺陷在于:Prover必须做 d d d个size为 O ( ∣ C ∣ ) O(|\mathcal{C}|) O(C)的MSM运算——1个对witness的MSM运算 + ( d − 1 ) (d-1) (d1)个对cross-terms的MSM运算。

    以MinRoot [KMT22]一次迭代为例:

    • a)以R1C2/degree-2 constraints为例:一次MinRoot迭代对应3个约束 -》Nova的开销为每个迭代对应6个exps运算。
    • b)以degree-5 constraints为例:一次MinRoot迭代对应1个约束 -》Sangria的开销为每个迭代对应6个exps运算。

递归证明系统的具体用途可为:

  • 1)VDF: C \mathcal{C} C为对某delay函数调用一次或多次(如MinRoot)。
  • 2)zkVM: C \mathcal{C} C为某VM(如EVM、Wasm、LLVM)的某step,或,某CPU(如RISC-V)的某step。
  • 3)zkBridge: C \mathcal{C} C为根据某链的共识规则来验证状态。
  • 4)zkML: C \mathcal{C} C为某模型的某layer。
  • 5)PhotoProof: C \mathcal{C} C对某图片做特定的转换。
  • 6)Public key transparency: C \mathcal{C} C为检查某目录在每个epoch是append-only的。

3. HyperNova

HyperNova的主要技术贡献点为:

  • 对CCS的Folding scheme
    在这里插入图片描述

其中:

  • IVC(Incrementally Verifiable Computation)主要侧重为:对顺序执行计算的证明。
  • PCD(Proof Carrying Data)主要侧重为:对并行计算的证明。

3.1 R1CS vs. CCS

所谓R1CS是指:
在这里插入图片描述
CCS为对R1CS、Plonkish和AIR的通用表示:

  • 具有至少3个矩阵来定义电路: M 1 , M 2 , ⋯   , M t M_1,M_2,\cdots, M_t M1,M2,,Mt
  • 通过multisets来对约束进行定制: S 1 , S 2 , ⋯   , S q S_1,S_2,\cdots, S_q S1,S2,,Sq
  • 公开输入/输出: x x x
  • 存在witness W W W使得 Z = ( W , x , 1 ) Z=(W,x,1) Z=(W,x,1)满足:
    ∑ i ∈ [ q ] ◯ j ∈ S i M j ⋅ Z = 0 \sum_{i\in [q]}\bigcirc_{j\in S_i} M_j\cdot Z=0 i[q]jSiMjZ=0
  • 通过对矩阵和multiset进行“编程”,可表示任意多项式约束。
  • 对于HyperNova和SuperSpartan中的AIR约束,具有“free” addition gates。

以R1CS为例,转换为CCS表示时,有:

  • M 1 = A , M 2 = B , M 3 = − C M_1=A,M_2=B,M_3=-C M1=A,M2=B,M3=C
  • S 1 = { 1 , 2 } , S 2 = { 3 } S_1=\{1,2\},S_2=\{3\} S1={ 1,2},S2={ 3}

3.2 对Committed CCS的folding scheme

3.2.1 Folding Committed CCS:CCCS × \times × CCCS -> CCCS

Folding Committed CCS:CCCS × \times × CCCS -> CCCS:
在这里插入图片描述

为实现对Committed CCS的folding scheme,在instance(即public input)中还需包含 C = C o m ( W ) C=Com(W) C=Com(W)
主要挑战在于:

  • 挑战一:对于non-linear terms,无法做random linear combination。
  • 挑战二:Nova-style relaxation,会引入 O ( max ⁡ i ∣ S i ∣ ) O(\max_{i}|S_i|) O(maxiSi)个error vector commitments。

3.2.2 Folding Committed CCS:CCCS × \times × LCCCS -> LCCCS

进一步的解决方案为CCCS × \times × LCCCS -> LCCCS:

  • 将CCCS进行线性化,并fold进入一个linearized instance中。这足以用于IVC场景。
    • 注意 Linearized CCCS 不是NP-complete的,但更易于fold。

在这里插入图片描述
其中Linearized CCCS instance中包含:

  • 矩阵 ( M 1 , M 2 , ⋯   , M t ) (M_1,M_2,\cdots, M_t) (M1,M2,,Mt)
  • multiset ( S 1 , S 2 , ⋯   , S q ) (S_1,S_2,\cdots, S_q) (S1,S2,,Sq)
  • 承诺值 C C C
  • scalar值 u u u
  • public input/output:vector x x x
  • random challenge r r r
  • scalars列表 ( v 1 , v 2 , ⋯   , v t ) (v_1, v_2,\cdots, v_t) (v1,v2,,vt)

存在witness vector W W W,使得 Z = ( W , x , u ) Z=(W,x, u) Z=(W,x,u)满足:

  • 1) ∀ i ∈ [ t ] \forall i\in [t] i[t],有 v i = ∑ y ∈ { 0 , 1 } log ⁡ n M i ( r , y ) ⋅ Z ( y ) v_i=\sum_{y\in \{0,1\}^{\log n}}M_i(r,y)\cdot Z(y) vi=y{ 0,1}lognMi(r,y)Z(y)
  • 2) C = C o m ( W ) C=Com(W) C=Com(W)

不过此时Folding Committed CCS:CCCS × \times × LCCCS -> LCCCS 仍然存在如下挑战:

  • 仍然不清楚如何来fold
    在这里插入图片描述

3.2.3 Folding Constrained Instances:LCCCS × ~ \tilde{\times} ×~ LCCCS -> LCCCS

进一步的解决方案为LCCCS × ~ \tilde{\times} ×~ LCCCS -> LCCCS,以实现对2个具有相同randomness(即具有相同的random challenge r r r)的LCCCS instance进行fold的简单目标,即:
在这里插入图片描述
很容易将 CCCS × \times × LCCCS reduce为 LCCCS × ~ \tilde{\times} ×~ LCCCS(即a pair of constrained LCCCS instances):
在这里插入图片描述
Folding Constrained Instances:LCCCS × ~ \tilde{\times} ×~ LCCCS -> LCCCS,即为:
在这里插入图片描述
注意其中 v i = ∑ y ∈ { 0 , 1 } log ⁡ n M i ( r , y ) ⋅ Z ( y ) v_i=\sum_{y\in \{0,1\}^{\log n}}M_i(r,y)\cdot Z(y) vi=y{ 0,1}lognMi(r,y)Z(y),使得 [ ( C , u , x , γ , v 1 , ⋯   , v t ) , W ] [(C,u,x,\gamma,v_1,\cdots,v_t),W] [(C,u,x,γ,v1,,vt),W]的correctness具备线性性:
v i ( 1 ) + γ ⋅ v i ( 2 ) = ∑ y ∈ { 0 , 1 } log ⁡ n M i ( r , y ) ⋅ Z 1 ( y ) + γ ⋅ ∑ y ∈ { 0 , 1 } log ⁡ n M i ( r , y ) ⋅ Z 2 ( y ) = ∑ y ∈ { 0 , 1 } log ⁡ n M i ( r , y ) ⋅ ( Z 1 ( y ) + γ ⋅ Z 2 ( y ) ) v_i^{(1)}+\gamma\cdot v_i^{(2)}=\sum_{y\in \{0,1\}^{\log n}}M_i(r,y)\cdot Z_1(y)+\gamma\cdot \sum_{y\in \{0,1\}^{\log n}}M_i(r,y)\cdot Z_2(y)=\sum_{y\in \{0,1\}^{\log n}}M_i(r,y)\cdot (Z_1(y)+\gamma\cdot Z_2(y)) vi(1)+γvi(2)=y{ 0,1}lognMi(r,y)Z1(y)+γy{ 0,1}lognMi(r,y)Z2(y)=y{ 0,1}lognMi(r,y)(Z1(y)+γZ2(y))

3.2.4 Linearizing Reduction:CCCS × \times × LCCCS -> LCCCS × ~ \tilde{\times} ×~ LCCCS

为实现Folding Committed CCS:CCCS × \times × LCCCS -> LCCCS,接下来的任务是将CCCS × \times × LCCCS reduce为 LCCCS × ~ \tilde{\times} ×~ LCCCS:
在这里插入图片描述
核心思想为:使用sum-check协议,来将CCCS reduce为 “基于相同challenge的LCCCS”。【】
在这里插入图片描述

最终实现的Folding Committed CCS:CCCS × \times × LCCCS -> LCCCS 方案为:
在这里插入图片描述

参考资料

[1] arnaucube 2023年5月笔记 Notes on HyperNova
[2] Oskar 2023年5月hackmd HyperNova Notes
[3] 2023年6月 PSE培训视频 CCS & HyperNova with Srinath - Folding Schemes FTW
[4] 2023年8月 Carlos Pérez hackmd CCS
[5] 2023年5月 Oskar hackmd R1CS to CCS overview
[6] Ariel Gabizon 2023年5月twitter recent history of folding

Nova系列博客

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/132273443
CCS