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为:

  • 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倍+。
    • 压缩proof size为: O ( log ⁡ C ) O(\log C) O(logC)个group elements:实际上只有数KB。

现有IVC方案对比:

为证明 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|) Ω(n∗∣F∣)
      • proof 不是 incrementally updatable
      • 取决于具体的SNARK方案,Verifier time可能会依赖具体的 n n n值(即,迭代次数)
  • 2)Incrementally verifiable computation(IVC)[Val08, BCTV14]

[Val08, BCTV14] IVC方案 与 Nova对比为:【其中[Set19]对应Spartan论文】

Nova 与 Bunz等人2021年论文BCLMS21 Proof-Carrying Data without Succinct Arguments中的“split accumulation”相关:

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


Nova的秘密武器在于:Folding Schemes for NP:【下图的NP instance均为R1CS instance】

Nova的关键贡献在于:

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

R1CS回顾:

为实现R1CS的folding scheme,最直观但却错误的方式为:

即以上方案,对于 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 AZ∘BZ=CZ,原因在于:

Nova的创新之一在于其所实现的Relaxed R1CS:【当 u = 1 , E = 0 ⃗ u=1,E=\vec{0} u=1,E=0 时,标准R1CS实例 为 Relaxed R1CS实例 的特例情况。】

针对Relaxed R1CS的folding scheme为:【即通过引入public input u u u和witness E E E来实现消减,以保证folding后仍能满足相同的relation关系】

根据relaxed R1CS的folding scheme所实现的IVC直观方案为:

不过,以上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(log∣F′∣)个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(log∣F′∣)个group elements,但是其不可incremental。

因此,一个open question为:

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

    • smallest verifier circuit
    • efficient prover等等

当前的一些进展以及规划为:


最终的committed relaxed R1CS的folding scheme为:

借助Fiat-Shamir transform,将上述interactive folding scheme转换为non-interactive folding scheme:

所谓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


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,⋯,i−1次的正确执行
    • 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,⋯,i−1,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 E为0向量,W为0向量,x为0向量,u为0】
令 ( 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+1​和Ui+1​的同时,还会计算 w i + 1 和 W i + 1 w_{i+1}和W_{i+1} wi+1​和Wi+1​.。由于 u i + 1 和 U i + 1 u_{i+1}和U_{i+1} ui+1​和Ui+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构建为:

因为 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)定义如下:

以上IVC方案 ( G , K , P , V ) (\mathcal{G,K,P,V}) (G,K,P,V)的efficiency为:

不过,以上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的基本原理为:

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}l→F具有唯一的MLE,反之,每个基于 F \mathbb{F} F的 l l l-变量multilinear多项式 唯一 extends 某个唯一函数mapping { 0 , 1 } l → F \{0,1\}^l\rightarrow\mathbb{F} {0,1}l→F。本文以 f ~ \tilde{f} f~​来表示 f f f的唯一MLE。
  • sum-check protocol协议:

2.2 针对Idealized Relaxed R1CS的polynomial IOP

Nova论文中基于Spartan,将Spartan的 polynomial IOP for R1CS 逐字改编为 polynomial IOP for relaxed R1CS:





针对Idealized Relaxed R1CS的polynomial IOP具体为:

注意:

  • 对上面的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多项式承诺的特例情况。
    • 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:

    • 基于“Sparse- P C D o r y PC_{Dory} PCDory​”的zkSNARK:

Nova: Recursive Zero-Knowledge Arguments from Folding Schemes学习笔记相关推荐

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

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

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

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

  3. qesa Efficient zero-knowledge arguments in the discrete log setting 学习笔记

    1. 引言 Hoffmann等人 2019年论文 <Efficient zero-knowledge arguments in the discrete log setting >. 相应 ...

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

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

  5. Cross Domain Knowledge Transfer for Person Re-identification笔记

    Cross Domain Knowledge Transfer for Person Re-identification笔记 1 介绍 2 相关工作 3 方法 3.1 特征提取的ResNet 3.2 特 ...

  6. cs224w(图机器学习)2021冬季课程学习笔记12 Knowledge Graph Embeddings

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Heterogeneous Graphs and Relational GCN (RGCN) ...

  7. Functional Commitment Schemes: From Polynomial Commitments to Pairing-Based Accumulators学习笔记

    1. 背景知识 Benoˆıt Libert, Somindu C. Ramanna 和 Moti Yung 2016年论文 <Functional Commitment Schemes: Fr ...

  8. JS学习笔记(五)函数类型、箭头函数、arguments参数、标签函数

    JS学习笔记(五) 本系列更多文章,可以查看专栏 JS学习笔记 文章目录 JS学习笔记(五) 一.函数 1. 函数定义 2. 方法( 对象 + 函数 ) 二.函数参数及返回值 1. 传递原始类型参数 ...

  9. openstack 学习笔记 虚拟机的基础安装sql glance nova keystone 。。。。。

    专业综合设计与开发 目 录 1.虚拟机的安装 6 1.1 虚拟机安装配置 6 1.2 安装epel仓库 6 1.3 克隆前的其它准备工作 6 2.Open Stack 7 2.1 OpenStack是 ...

最新文章

  1. 静态常量放在什么包里面_在沙雕游戏里面用表情包打架,是一种什么体验
  2. 面试造飞机这么能耐,对着调优实战更不能怂啊!
  3. 安卓无需root权限小黄鸟抓包教程
  4. priority_queue的常见用法详解
  5. mac版python安装pandas_Mac OS 安装pandas
  6. 一篇英文文档中找出频数最多的10个单词
  7. Linux——VIM学习选取多行(转)
  8. LINUX负载均衡LVS-NAT搭建
  9. [Editor][003][Emacs] 从零到高级的进阶 - 实践开发 - emacs tutorial的使用和基本导航键
  10. python中全局变量有缩进吗_python有全局变量吗
  11. VS开发工具常用插件
  12. 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
  13. linux下好用的超级终端,【整理】Windows下超级终端的最佳替代品,免费的串口终端工具Putty...
  14. 共享打印机无法连接的解决办法
  15. Win10预览版之BUG
  16. 【C++】教大家在七夕new一个对象
  17. c语言的Hello World
  18. JUJU 猫论坛系统克隆准备工具 V1.0.0.0 Beta 测试版(菜鸟也能轻松制作万能克隆光盘)...
  19. tinyserver小型服务器
  20. 使用grop解析日志

热门文章

  1. oracle为表增加索引,【增加Oracle中表的索引】
  2. MACD进阶版指标公式,提前一天判断MACD金叉
  3. 编译原理 推导和归约
  4. System V IPC POSIX IPC(一):消息队列
  5. android河流曲线控件,WWF Free Rivers
  6. 解决在微信 H5 页面 background 背景图显示不出来
  7. win10语音识别python_微软不愿意提及的软肋:Win10的语音识别
  8. uni-app 多语言,国际化
  9. C语言—字符串函数的使用
  10. vscode输出中文乱码问题