1. 引言
前序博客有:
- Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
卡内基梅隆大学 Abhiram Kothapalli 和 微软研究中心 Srinath Setty 2022年论文《SuperNova: Proving universal machine executions without universal circuits》,为Nova的扩展版,开源代码见:
- https://github.com/jules/supernova(Rust)
- https://github.com/hero78119/SuperNova(Rust)【活跃开发中】
本文主要参考:
- 2023年3月视频分享 SuperNova with Srinath and Abhiram
- 2022年8月在Session at Crypto 2022上分享 Nova: Recursive Zero-Knowledge Arguments from Folding Schemes - Abhiram Kothapalli
- 2023年4月视频分享 zkStudyClub: Supernova (Srinath Setty - MS Research)
2. Nova回顾
2.1 IVC计算模型
所谓IVC(Incremental Verifiable Computation)计算模型,是指:
- 对于(非确定性)函数 F F F 和 statement ( n , z 0 , z n ) (n, z_0, z_n) (n,z0,zn),证明存在 z 0 = z 0 ′ z_0=z_0' z0=z0′和 z i + 1 ′ ← F ( z i ′ , w i ) z_{i+1}'\leftarrow F(z_i', w_i) zi+1′←F(zi′,wi),使得 z n = z n ′ z_n=z_n' zn=zn′。
IVC(Incremental Verifiable Computation)最早由Valiant在其2008年论文[Val08] Incrementally verifiable computation or proofs of knowledge imply time/space efficiency 中首次提出,其核心思想为:
IVC的关键在于,随着迭代次数的增加,其proof size并不会增加。具体为:
不过,其中存在的问题在于:
- 实际实现时,在电路中验证SNARK proof是昂贵的。
2.2 Nova(本文称为NIVC):为针对单个指令的IVC
从SuperNova的角度来看Nova(本文称为NIVC):
- Nova为针对单个指令的IVC。
Nova通过引入Folding scheme,在 F ′ F' F′中不再做任何proof验证工作:
2.3 Folding Schemes
交互式folding scheme是指Prover P P P和Verifier V V V交互式地将"2个claim ( u 1 , w 1 ) , ( u 2 , w 2 ) ∈ R (u_1,w_1),(u_2,w_2)\in R (u1,w1),(u2,w2)∈R" reduce为 “1个claim ( u , w ) ∈ R (u,w)\in R (u,w)∈R”。
Folding scheme需满足如下属性:
- Completeness完备性:若 u 1 , u 2 u_1,u_2 u1,u2为satisfiable的,则 u u u也是satisfiable的。
- Knowledge Soundness可靠性:若Prover可输出satisfying w w w,则Prover必然知道satisfying w 1 , w 2 w_1,w_2 w1,w2。
- Efficiency高效性:Verifier “做Folding操作”,必须比, “对某instance做check操作(即验证proof)” ,要便宜很多。
以上交互式folding scheme可通过Fiat-Shamir Transformation 来实现非交互式folding scheme。
已知某NP的非交互式folding scheme,通过运行folding Verifier, F ′ F' F′可verifiably fold u i u_i ui和 U i U_i Ui:【fold前后的3个instance具有相同的结构和相同的size。】
2.4 针对R1CS约束系统的Folding Scheme
标准R1CS表示为:
其中:
- Z = ( W , x , 1 ) Z=(W,x,1) Z=(W,x,1), W W W为witness vector, x x x为public input/output vector。
需在标准R1CS表示的基础之上,额外引入error vector E E E和scalar u u u,从而构建出Relaxed R1CS:
其中:
- Z = ( W , x , u ) Z=(W,x,u) Z=(W,x,u), W W W为witness vector, x x x为public input/output vector。
- 当 u = 1 , E = 0 ⃗ u=1,E=\vec{0} u=1,E=0,则为标准R1CS。即可将标准R1CS看成是Relaxed R1CS的特例情况。
然后是结合具有加法同态属性的承诺方案,来实现对Relaxed R1CS的Folding Scheme:【为避免Prover作弊,并 实现Verifier succinctness,需将 ( E , W ) (E,W) (E,W)一起作为witness,并提前在statement中公开其承诺值 ( E ˉ , W ˉ ) (\bar{E},\bar{W}) (Eˉ,Wˉ)。】
3. SuperNova
3.1 NIVC计算模型
所谓NIVC(Non-uniform IVC)计算模型,是指:
- 对于(非确定性)指令集 F 1 , ⋯ , F l F_1,\cdots, F_l F1,⋯,Fl、控制函数 φ \varphi φ 和 statement ( n , z 0 , z n ) (n, z_0, z_n) (n,z0,zn),证明存在 z 0 = z 0 ′ z_0=z_0' z0=z0′和 z i + 1 ′ ← F φ ( z i ′ , w i ) ( z i ′ , w i ) z_{i+1}'\leftarrow F_{\varphi(z_i', w_i)}(z_i', w_i) zi+1′←Fφ(zi′,wi)(zi′,wi),使得 z n = z n ′ z_n=z_n' zn=zn′。
以上为SuperNova核心思想,SuperNova为对Nova的扩展,理论上可将SuperNova用于实现虚拟机。在递归过程中,每个step可动态选择所执行的指令,不再需要在每个step实现 所有指令集 的电路,而是,在每个step只需实现 实际用到的指令 的电路。
SuperNova实现了"a la carte(按菜单点菜)" cost profile:
- pay only for what is executed。
3.2 SuperNova的Folding Scheme
Nova中要求 fold前后的3个instance(claim)具有相同的结构和相同的size。
而SuperNova中,针对所支持的每个指令,构建了一个Running Claim(又名Running Instance):
其中:
- 每个step的running instance集合 { U i , 1 , U i , 2 , ⋯ , U i , l } \{U_{i,1},U_{i,2}, \cdots, U_{i,l}\} {Ui,1,Ui,2,⋯,Ui,l}可 以Merkle tree或multi-set hash等成熟技术来表示,因为实际在每个step仅使用该running instance集合中的一个,实际电路中没必要枚举所有的running instance。
- p c i pc_i pci为program counter,用于:
- 决定集合 { U i , 1 , U i , 2 , ⋯ , U i , l } \{U_{i,1},U_{i,2}, \cdots, U_{i,l}\} {Ui,1,Ui,2,⋯,Ui,l} 中哪个running instance参与Fold。
- 决定用Fold结果 来 更新集合 { U i + 1 , 1 , U i + 1 , 2 , ⋯ , U i + 1 , l } \{U_{i+1,1},U_{i+1,2}, \cdots, U_{i+1,l}\} {Ui+1,1,Ui+1,2,⋯,Ui+1,l} 中哪个running instance。
- 基于控制函数 φ \varphi φ和 w i , z i w_i,z_i wi,zi,来决定下一个step的program counter p c i + 1 pc_{i+1} pci+1。
Nova系列博客
- Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记
- Nova 和 SuperNova:无需通用电路的通用机器执行证明系统
- Sangria:类似Nova folding scheme的relaxed PLONK for PLONK
- 基于Nova/SuperNova的zkVM
- SuperNova:为多指令虚拟机执行提供递归证明
- Lurk——Recursive zk-SNARKs编程语言
- Research Day 2023:Succinct ZKP最新进展
- 2023年 ZK Hack以及ZK Summit 亮点记
- 基于cycle of curves的Nova证明系统(1)
- 基于cycle of curves的Nova证明系统(2)
- Nova代码解析
- Nova中 Vitalik R1CS例子 的 folding scheme
- 基于Nova的MinRoot VDF实现
- 基于Nova的SHA256证明
- Nova-Scotia代码解析