Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记

1. 引言

前序博客有:

  • Lurk——Recursive zk-SNARKs编程语言
  • rank-1 constraint system R1CS
  • Spartan中 Vitalik R1CS例子 SNARK证明基本思路

微软团队2021年论文 《Nova: Recursive Zero-Knowledge Arguments from Folding Schemes》。
开源代码见:

  • https://github.com/Microsoft/Nova(Rust)

作者视频讲解见:

  • 2022年2月 Nova: Recursive Zero-Knowledge Arguments from Folding Schemes - Srinath Setty

Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第1张图片

Nova为:

  • a SNARK for iterative computations:用于证明 y = F ( F ( F ( F ( F ( x ) ) ) ) ) y=F(F(F(F(F(x))))) y=F(F(F(F(F(x))))),其中:
    • F F F为(potentially non-deterministic)computation
    • x x x为输入, y y y为输出

Nova这样的iterative computation SNARK的应用场景有:

  • VDFs:此时 F F F为某delay function,如MinRoot,计算某有限域内的cube root 或 fifth root。
  • Rollups: F F F的输入为:state Merkle root,以及,某些交易(non-deterministically),执行交易,输出:updated Merkle root。
  • Turing-complete SNARK语言(如Lurk)的后端: F F F为执行a “step” of the program。

Nova的关键特性为:

  • 无需trusted setup
  • 所采用的vector commitment方案必须具有加法同态属性
  • 仅针对R1CS instance,Fold scheme会将2个R1CS instance合并为1个R1CS instance。这些R1CS instance 必须具有完全相同的电路,即具有完全相同的 ( A , B , C ) (A, B, C) (A,B,C)矩阵。
  • 无需(如,通过FFT运算)做多项式除法和多项式乘法运算,可使用DLOG为hard的任意cycles of elliptic curves:
    • 可基于任意cycles of curves,如secp/secq。【详情见Spartan-ECDSA:最快的浏览器内 ZK secp256k1 ECDSA中的“附录:Secp256k1/Secq256k1曲线cycle”。】
    • 也可基于任意FFT-friendly cycles of curves,如Pasta(Pallas/Vesta)。【详情见:Halo2学习笔记——背景资料之Elliptic curves(5) 和 Mina中的Pasta(Pallas和Vesta)曲线。】
  • F F F运算指定为R1CS表示
  • 为理论上最简单的证明系统,同时提供了state-of-the-art efficiency:
    • Prover time:由2个size为 O ( C ) O(C) O(C)的multiexps主导,其中, C = ∣ F ∣ C=|F| C=F
      • Nova的证明速度要比Groth16/PLONK/Halo等快5~50倍。
    • 具有Constant-sized verifier circuit(主要由2个scalar multiplication运算主导):Nova的verifier circuit具有约2万个R1CS约束,是当前文献上记录的最小verifier circuit,意味着具有lowest recursion threshold。Nova的recursion开销比Halo的低7倍+,比Bunz等人2020年论文《Proof-carrying data without succinct arguments》方案低2倍+。
      Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第2张图片
    • 压缩proof size为: O ( log ⁡ C ) O(\log C) O(logC)个group elements:实际上只有数KB。

现有IVC方案对比:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第3张图片

为证明 y = F ( n ) ( x ) y=F^{(n)}(x) y=F(n)(x)

  • 1)直观方法为:
    • F F F n n n个迭代展开为一个电路

    • 对该单一电路应用某state-of-the-art SNARK来生成证明

      直观方法的缺陷为:

      • Prover所需内存为: Ω ( n ∗ ∣ F ∣ ) \Omega(n*|F|) Ω(nF)
      • proof 不是 incrementally updatable
      • 取决于具体的SNARK方案,Verifier time可能会依赖具体的 n n n值(即,迭代次数)
  • 2)Incrementally verifiable computation(IVC)[Val08, BCTV14]
    Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第4张图片

[Val08, BCTV14] IVC方案 与 Nova对比为:【其中[Set19]对应Spartan论文】
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第5张图片
Nova 与 Bunz等人2021年论文BCLMS21 Proof-Carrying Data without Succinct Arguments中的“split accumulation”相关:

  • Nova效率更高、更直接,且提供了a “native” scheme for proof compression。

Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第6张图片
Nova的秘密武器在于:Folding Schemes for NP:【下图的NP instance均为R1CS instance】
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第7张图片
Nova的关键贡献在于:

  • 不使用SNARKs 所实现的folding scheme for NP

R1CS回顾:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第8张图片
为实现R1CS的folding scheme,最直观但却错误的方式为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第9张图片
即以上方案,对于 Z = ( W , x , 1 ) Z=(W,x,1) Z=(W,x,1),找不到相应的 r r r,使得 A Z ∘ B Z = C Z AZ\circ BZ= CZ AZBZ=CZ,原因在于:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第10张图片
Nova的创新之一在于其所实现的Relaxed R1CS:【当 u = 1 , E = 0 ⃗ u=1,E=\vec{0} u=1,E=0 时,标准R1CS实例 为 Relaxed R1CS实例 的特例情况。】
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第11张图片
针对Relaxed R1CS的folding scheme为:【即通过引入public input u u u和witness E E E来实现消减,以保证folding后仍能满足相同的relation关系】
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第12张图片
根据relaxed R1CS的folding scheme所实现的IVC直观方案为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第13张图片
不过,以上naive方案,IVC proof size为: O ( ∣ F ′ ∣ ) O(|F'|) O(F)个group elements。且存在以下2个问题:

  • Proofs are large, both asymptotically and concretely
  • Proofs are not zero-knowledge

原则上:借助zkSNARKs, P P P可证明the knowledge of a valid IVC proof,从而提供了succinctness和zero-knowledge。但是,借助zkSNARKs的方案是expensive的:

  • P P P必须证明,如,其知道 W W W对应承诺值 W ^ \hat{W} W^,以及其他信息

为此,Nova创新之二是进行了proof压缩:

  • 将对vectors的承诺值,解析为,对multilinear多项式的多项式承诺值
  • 使用Spartan的变种,来直接证明承诺值 W ^ \hat{W} W^满足相应的relaxed R1CS。
  • 压缩后的proof size,由 O ( ∣ F ′ ∣ ) O(|F'|) O(F)个group elements,降低为 O ( log ⁡ ∣ F ′ ∣ ) O(\log |F'|) O(logF)个group elements

也可以使用IPA(Inner Product Argument)来证明承诺值 W ^ \hat{W} W^满足相应的relaxed R1CS:

  • proof size可降低约5倍(可避免Spartan中的sum-check protocol,但在生成final proof时,会引入稍微高一点的开销)

Navo的缺陷有:

  • zero-knowledge被限制在单个prover的context(zero-knowledge属性不是必须的)

当前的情况为:

  • IVC proof size为: O ( ∣ F ′ ∣ ) O(|F'|) O(F)个group elements。
  • 压缩的proof size为: O ( log ⁡ ∣ F ′ ∣ ) O(\log |F'|) O(logF)个group elements,但是其不可incremental。

因此,一个open question为:

  • 保持Nova其它特性的同时,能否构建具有succinct proof的IVC方案?
    Nova的一些优秀特性有:
    • smallest verifier circuit
    • efficient prover等等

当前的一些进展以及规划为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第14张图片


最终的committed relaxed R1CS的folding scheme为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第15张图片
借助Fiat-Shamir transform,将上述interactive folding scheme转换为non-interactive folding scheme:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第16张图片
所谓Nova,是指:

  • 根据non-interactive folding scheme设计的IVC(Incrementally Verifiable Computation)方案。
  • 借助具有简洁承诺值的任意加法同态承诺方案(如Pedersen commitment)来实例化。
  • 额外使用某高效zkSNARK变种(如Spartan的变种)来证明knowledge of valid IVC proof,这样就具备了简洁性和零知识性,可提供简洁的、零知识的knowledge of valid IVC proof。
    • 注意Nova是不具备零知识属性的IVC方案。 因为对于零知识IVC方案,其要求IVC proof具备零知识属性。但是Nova中的IVC proof并不会隐藏与incremental computation steps相关的witnesses信息。
      对于单个Prover的情况下,这种差异问题不大,因为可借助Nova中的辅助zkSNARK来提供zero-knowledge proof of knowledge of a valid IVC proof。

假设需构建一个基于folding scheme的IVC方案,其Prover需证明 z n = F n ( z 0 ) z_n=F^{n}(z_0) zn=Fn(z0),基于初始输入 z 0 z_0 z0,重复执行某函数 F F F n n n次之后,输出结果为 z n z_n zn。与SNARK-based IVC类似,基于folding scheme的IVC方案中,Prover使用扩展函数 F ′ F' F,其包括:

  • 调用函数 F F F
  • 记录之前对 F ′ F' F函数调用的fold proofs

Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第17张图片
F ′ F' F的输入有:

  • 2个committed relaxed R1CS instance u i u_i ui U i U_i Ui
    • U i U_i Ui表示调用 F ′ F' F 1 , ⋯   , i − 1 1,\cdots,i-1 1,,i1次的正确执行
    • u i u_i ui表示调用 F ′ F' F i i i次的正确执行

F ′ F' F主要执行2个任务:

  • 1)执行递归计算中的一步(一个step):
    F ′ F' F可使用instance u i u_i ui中所包含的 z i z_i zi来输出 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi)

  • 2) F ′ F' F调用non-interactive folding scheme的Verifier,将:

    • checking u i u_i ui task
    • 和 checking U i U_i Ui task

    fold为对单个instance U i + 1 U_{i+1} Ui+1的checking task。

然后,IVC Prover会计算新的instance u i + 1 u_{i+1} ui+1,用于证明对 F ′ F' F i + 1 i+1 i+1次调用执行的正确性,即IVC Prover会计算新的instance u i + 1 u_{i+1} ui+1来证明 z i + 1 = F ( z i ) z_{i+1}=F(z_i) zi+1=F(zi)
至此,有:

  • U i + 1 U_{i+1} Ui+1:表示调用 F ′ F' F 1 , ⋯   , i − 1 , i 1,\cdots,i-1,i 1,,i1,i 次的正确执行
  • u i + 1 u_{i+1} ui+1:调用 F ′ F' F i + 1 i+1 i+1次的正确执行

以上描述掩盖了一个细微的差异:

  • 因为 F ′ F' F必须输出running instance U i + 1 U_{i+1} Ui+1供下次调用使用, U i + 1 U_{i+1} Ui+1包含在 u i + 1 . x u_{i+1}.x ui+1.x(即为 u i + 1 u_{i+1} ui+1的public IO公共输入输出)中。
  • 但是在下一次迭代时, F ′ F' F必须将 u i + 1 . x u_{i+1}.x ui+1.x fold into U i + 1 . x U_{i+1}.x Ui+1.x,即意味着 F ′ F' F将陷入squeeze U i + 1 U_{i+1} Ui+1 into U i + 1 . x U_{i+1}.x Ui+1.x的困境。

为解决这种不一致性, F ′ F' F不再直接输出 U i + 1 U_{i+1} Ui+1,而是修改 F ′ F' F的输出为其public IO的抗碰撞哈希值,这样可确保 F ′ F' F的public IO为常量个有限域元素。下一次调用 F ′ F' F时,额外将该哈希值的preimage作为non-deterministic advice。可假设该哈希函数还会额外输入一个随机值以提供hiding属性,不过为便于表示这里不明确描述。

以不存在witness的标准R1CS特例情况为例:【即 E 为 0 向量, W 为 0 向量, x 为 0 向量, u 为 0 E为0向量,W为0向量,x为0向量,u为0 E0向量,W0向量,x0向量,u0
( u ⊥ , w ⊥ ) (u_{\perp},w_{\perp}) (u,w)为trivially satisfying instance-witness pair,其中 E , W , x E,W,x E,W,x为appropriately-sized zero vectors, r E = 0 , r W = 0 r_E=0,r_W=0 rE=0,rW=0 E ˉ 和 W ˉ \bar{E}和\bar{W} EˉWˉ分别为 E , W E, W E,W的承诺值。
在第 i + 1 i+1 i+1次迭代时,IVC Prover运行 F ′ F' F,计算 u i + 1 和 U i + 1 u_{i+1}和U_{i+1} ui+1Ui+1的同时,还会计算 w i + 1 和 W i + 1 w_{i+1}和W_{i+1} wi+1Wi+1.。由于 u i + 1 和 U i + 1 u_{i+1}和U_{i+1} ui+1Ui+1证明了对 F ′ F' F i + 1 i+1 i+1次调用的正确性(进而间接证明了对 F F F i + 1 i+1 i+1次调用的正确性),相应的IVC proof为 ( U i + 1 , W i + 1 ) , ( u i + 1 , w i + 1 ) (U_{i+1},W_{i+1}),(u_{i+1},w_{i+1}) (Ui+1,Wi+1),(ui+1,wi+1)。其简洁性由底层的folding scheme提供。
具体的IVC构建为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第18张图片
因为 F ′ F' F可 以polynomial time计算,可将 F ′ F' F表示为一个committed relaxed R1CS structure s F ′ s_{F'} sF。令:
( u i + 1 , w i + 1 ) ← trace ( F ′ , ( v k , U i , u i , ( i , z 0 , z i ) , w i , T ˉ ) ) (u_{i+1},w_{i+1})\leftarrow \text{trace}(F',(vk,U_i,u_i,(i,z_0,z_i),w_i,\bar{T})) (ui+1,wi+1)trace(F,(vk,Ui,ui,(i,z0,zi),wi,Tˉ))
表示基于non-deterministic advice ( v k , U i , u i , ( i , z 0 , z i ) , w i , T ˉ ) (vk,U_i,u_i,(i,z_0,z_i),w_i,\bar{T}) (vk,Ui,ui,(i,z0,zi),wi,Tˉ)运行 F ′ F' F的satisfying committed relaxed R1CS instance-witness pair ( u i + 1 , w i + 1 ) (u_{i+1},w_{i+1}) (ui+1,wi+1)

具体的IVC方案 ( G , K , P , V ) (\mathcal{G,K,P,V}) (G,K,P,V)定义如下:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第19张图片
以上IVC方案 ( G , K , P , V ) (\mathcal{G,K,P,V}) (G,K,P,V)的efficiency为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第20张图片
不过,以上IVC proof:

  • 不具有零知识性:因以上IVC proof没有隐藏Prover的non-deterministic inputs。
  • 不具有简洁性:因以上IVC proof size与 F F F size呈线性关系。

接下来,是使用zkSNARKs来压缩IVC proof:

  • 用于证明其知道 Π i \Pi_i Πi,使得IVC Verifier V \mathcal{V} V accepts for statement ( i , z 0 , z i ) (i,z_0,z_i) (i,z0,zi)
  • 借助zkSNARKs生成的proof,具有与zkSNARKs对应的简洁性和零知识性。

使用zkSNARKs来证明the knowledge of a valid IVC proof的基本原理为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第21张图片
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第22张图片

2. 使用Spartan变种来压缩Nova IVC proof

不过在实例化时,需要针对committed relaxed R1CS的zkSNARK方案,来证明the knowledge of a valid IVC proof succinctly and in zero-knowledge。

Spartan具有无需FFT运算和trusted setup的特性,在Nova论文中,采用了Spartan的改写版zkSNARK方案来实现IVC proof压缩。

2.1 Spartan背景知识

  • polynomial extension定义:每个函数 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow\mathbb{F} f:{0,1}lF具有唯一的MLE,反之,每个基于 F \mathbb{F} F l l l-变量multilinear多项式 唯一 extends 某个唯一函数mapping { 0 , 1 } l → F \{0,1\}^l\rightarrow\mathbb{F} {0,1}lF。本文以 f ~ \tilde{f} f~来表示 f f f的唯一MLE。
    Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第23张图片
  • sum-check protocol协议:
    Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第24张图片

2.2 针对Idealized Relaxed R1CS的polynomial IOP

Nova论文中基于Spartan,将Spartan的 polynomial IOP for R1CS 逐字改编为 polynomial IOP for relaxed R1CS:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第25张图片
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第26张图片
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第27张图片
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第28张图片
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第29张图片
针对Idealized Relaxed R1CS的polynomial IOP具体为:
Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第30张图片
注意:

  • 对上面的Equation(2)应用sum-check protocol的soundness error至多为 O ( log ⁡ m ) / ∣ F ∣ O(\log m)/|\mathbb{F}| O(logm)/∣F
  • 共使用了4次sum-check protocol,其中有3次可并行调用,且可合并为一个sum-check protocol。每次调用sum-check protocol时,相应的多项式在每个变量的degree最多为3,且变量数为 s = log ⁡ m s=\log m s=logm,因此该polynomial IOP的round复杂度为 O ( log ⁡ m ) O(\log m) O(logm)。由于每个多项式的每个变量degree至多为3,总的communication cost为 O ( log ⁡ m ) O(\log m) O(logm)个field elements。
  • Verifier runtime与sum-check protocol Verifier runtime一致。 e q ~ \tilde{eq} eq~ evaluate at任意input ( τ , r x ) ∈ F 2 s (\tau,r_x)\in\mathbb{F}^{2s} (τ,rx)F2s仅需 O ( log ⁡ m ) O(\log m) O(logm)次filed运算。
  • 与Spartan的Prover在polynomial IOP的工作量一致,采用Libra等之前的技术,仅需要 O ( n ) O(n) O(n)次基于 F \mathbb{F} F的运算。

2.3 将Polynomial IOPs编译为zkSNARKs

与SuperSonic、Marlin、Spartan中类似,借助多项式承诺方案和Fiat-Shamir transform来将Polynomial IOPs编译为zkSNARKs。

关键点有:

  • 1)将向量承诺解析为multilinear多项式承诺:
    可将 m m m-sized 向量 看成是 log ⁡ m \log m logm-变量multilinear多项式在 { 0 , 1 } log ⁡ m \{0,1\}^{\log m} {0,1}logm的evaluation值集合。现有的针对 log ⁡ m \log m logm-变量multilinear多项式 承诺方案有:【二者主要差别在于Verifier time】

    • 1.1) P C B P PC_{BP} PCBP:采用Pedersen多项式承诺方案来对向量进行承诺,与Hyrax中类似,Bulletproofs可提供合适的inner product证明协议。基于的安全假设为DLOG。对于 log ⁡ m \log m logm-变量multilinear多项式,承诺用时 O λ ( m ) O_{\lambda}(m) Oλ(m),生成的承诺值长度为 O λ ( 1 ) O_{\lambda}(1) Oλ(1)。Prover开销为 O λ ( m ) O_{\lambda}(m) Oλ(m),proof size为 O λ ( log ⁡ m ) O_{\lambda}(\log m) Oλ(logm),Verifier验证用时为 O λ ( m ) O_{\lambda}(m) Oλ(m)。注意 P C B P PC_{BP} PCBP为Hyrax多项式承诺的特例情况。
      Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第31张图片
    • 1.2) P C D o r y PC_{Dory} PCDory:将向量承诺看成是对2层矩阵承诺值的承诺,详细见[19, 34]论文中的例子。基于SXDH安全假设。Dory [34]提供了所需的inner product argument。承诺用时 O λ ( m ) O_{\lambda}(m) Oλ(m),生成的承诺值长度为 O λ ( 1 ) O_{\lambda}(1) Oλ(1)。Prover开销为 O λ ( m ) O_{\lambda}(m) Oλ(m),proof size为 O λ ( log ⁡ m ) O_{\lambda}(\log m) Oλ(logm),Verifier验证用时为 O λ ( log ⁡ m ) O_{\lambda}(\log m) Oλ(logm)
  • 2)针对sparse multilinear多项式的多项式承诺方案:不过,本文实际需要的是可高效处理sparse multilinear多项式的多项式承诺方案。Spartan论文中第7章和Quarks论文第6章中,提供了将现有 “multilinear多项式的多项式承诺方案” 编译为 “sparse multilinear多项式的多项式承诺方案” 的通用编译器。从而可将 P C B P PC_{BP} PCBP P C D o r y PC_{Dory} PCDory分别编译为“Sparse- P C B P PC_{BP} PCBP”和“Sparse- P C D o r y PC_{Dory} PCDory”。从而分别有:

    • 基于“Sparse- P C B P PC_{BP} PCBP”的zkSNARK:
      Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第32张图片

    • 基于“Sparse- P C D o r y PC_{Dory} PCDory”的zkSNARK:
      Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记_第33张图片

你可能感兴趣的:(零知识证明,零知识证明)