Plonky1 & Plonky2 & Plonky2.5 & Plonky3

1. 引言

Plonky1(又名Plonky):

Plonky2:

Plonky3:

Plonky2.5:

1.1 时间轴

  • 1)2018年:Eli Ben-Sasson和Starkware团队引入了STARKs——首个fully transparent, quantum-safe proof system with a scalable verifier。
    • STARKs中指出:作为PCPs(Probabilistically Checkable Proofs)的变种——IOPs(Interactive Oracle Proofs),会比现有Groth16方案性能更优。
    • 即使在STARKs发明五年后,其仍非常姜丹,引领了ZK L2领域——如StarkNet和Polygon zkEVM。
  • 2)2019年:
    • DEEP-FRI论文:描述了对FRI的进一步优化,FRI为赋能STARKs的PCS(多项式承诺方案)。

      • Plonky2、ethSTARK和其它(使用unique decoding radius之外的delta参数)等方案中所用的现代方案,首次在DEEP-FRI论文中描述。
    • Sean Bowe和Mary Maller发布突破性论文 Sonic:为SNARK构建提供了universal trusted setup。

    • 受Sonic启发,Zac Williamson、Ariel Gabizon 和 Oana Ciobotaru发布了PLONK:取得了更大的突破,Plonk为universal trusted setup提供了更高效的SNARK。当前PLONK组件仍大量用于Polygon、zkSync等项目中。

      • 自Sonic之后,研究人员发现,特定SNARKs具有2大组件:

        • a)the argument/IOP
        • b)the polynomial commitment scheme

        受Plonk和Marlin启发,这2大组件可混合搭配,使得可将Sonic中的argument组件,替换为某更高效的变种。

    • DEEP-FRI论文发布6个月后,Matter Labs团队发布了Transparent Polynomial Commitment Scheme with Polylogarithmic Communication Complexity,介绍了一种使用FRI的多项式承诺方案,但该变种不够实用,且迄今为止并未被使用。

    • 稍后,发布了Fractal:详细描述了在某transparent SNARK中将FRI用作多项式承诺方案。Fractal使用与Marlin相同的IOP,并使用FRI作为PCS。

    • 数月后,Matter Labs发布了RedShift:很自然地将Fractal中的IOP替换为PLONK IOP。RedShift中所用的PCS之前已在DEEP-FRI论文中描述。

      • RedShift采用PLONK+FRI,思路不错,但proof size大,且 proof time相比于最先进水平并未有显著改进。
      • RedShift中更大的瓶颈在于(parallelize proof generation所需的)递归,不是真的可行。Fractal中对使用FRI的SNARK做了recursion benchmark,为生成单个recursive proof,用时需要约10分钟。
      • 因此,在zkSync中使用RedShift性能是不够的。zkSync中持续用了约4年的PLONK+KZG,直到18个月前Plonky2的横空出世。(相比于2023年8月,即2022年2月Plonky2横空出世。)
  • 2020年:
    • Polygon团队开始尝试实现一种高效证明系统——Plonky:基于Halo,但一直在与使用cycles of elliptic curves的accumulation scheme的复杂性作斗争。
    • Daniel Lubarov一直对Fractal和STARKs感兴趣,并相信使用FRI可提供一条从根本上提高prover性能的现实途径。但该观点并未让大家达成共识——因为Fractal的递归证明极其缓慢。
    • 但Mir团队(即现在的Polygon Zero团队)的Daniel、William Borgeaud 和 Hamish Ivey-Law 坚信:通过仔细的优化和对如何构建在硬件上高效运行的证明系统的深入理解,可实现巨大的性能提升。
    • 使用FRI有2大优势:
      • a)可避免cycles of elliptic curves的accumulation scheme的复杂性。
      • b)可使用small field,即可在现代硬件上运算速度快得多。
    • Plonky2(PLONK + FRI),和,Starky(超性能STARKs):是数十次精心优化的结果,旨在实现最大性能。
    • Plonky2之所以如此引人注目,是因为它解决了Fractal和RedShift中递归的性能问题。第一次,基于FRI的方案可以用于生成超快的递归证明——在Macbook Pro上仅需170毫秒。这消除了在生产中使用Plonky2和Starky的任何障碍。

取决于具体应用,Polygon Zero团队所构建的Plonky2和Starky,可实现10倍到100倍的性能改进。即使是自横空出世2年后,经第三方评测,Starky仍是最快的prover。

1.2 Plonky2、Starky和RedShift

Plonky2与RedShift等价么?

  • 正是从这个意义上说,RedShift论文提出了PLONK+FRI的想法(尽管Fractal已经在SNARK构建中使用了FRI)。然而,Plonky2与RedShift论文中实际描述的方案完全不同,并代表了巨大的性能改进。从RedShift论文中实现Plonky2是不可能的。

Starky与RedShift等价么?

  • Starky根本不是RedShift——Starky是一个STARK,与PLONK无关。
  • Starky比Plonky2的性能高得多,且用于Polygon zkEVM上所有昂贵的交易级proofs。Plonky2和Starky从未声称自己是新的SNARKs或STARKs。正如其名,Plonky2和Starky分别是PLONK和STARK实现,具有超性能,代表了对先前技术状态的巨大改进。
  • Plonky2和Starky是工程和应用密码学的成果,而不是学术论文。声称Plonky2只是RedShift,最大限度地减少了许多参与构建Plonxy2的人的辛勤工作。这表明,RedShift的创建者Matter Labs在论文发表后的近四年内(以及Plonky2发布后的18个多月)没有采用像RedShift这样的方案。

Boojum就是Plonky2吗?

  • 当然,Boojum中使用了Plonky2中的一些相同代码。

2. Plonky1

当时团队在构建Mir——受Zexe启发的succinct区块链。
当时Coda(现在的Mina),使用Groth16和MNT curves来实现递归。

Plonky1利用了当时的前沿递归技术:

  • on cycles of pairing-friendly elliptic curves

Plonky1中嵌入了当时的前沿研究:

  • PLONK:succinct PIOP for circuits
  • Halo:为原始的folding scheme
  • Pasta curves

Plonky1最终实现的递归速度为:

  • 约10秒钟。

刚速度无法满足要求,根本原因在于:

  • 256-bit域通常需要分解为4个64-bit limbs
  • 1次256-bit乘法运算,对应为16次64-bit limb乘法运算。每次域乘法运算,对应约80 cycles。
  • 1次Montgomery乘法运算,对应3次256-bit乘法运算,从而对应48次64-bit limb乘法运算。

3. Plonky2

Plonky2的递归速度为:

  • 约300毫秒。

根本原因在于:

  • Plonky2中避免了使用256-bit域

Plonky2中创新使用了更小的Goldilocks域( 2 64 − 2 32 + 1 2^{64}-2^{32}+1 264232+1),具有如下属性:

  • Solinas prime结构,对应有除Montgomery reduction之外的fast reduction。
  • 该域内大多数乘法运算,对应2 cycles或3 cycles。比Pasta域的80 cycles乘法运算要更便宜。
  • 非常smooth: p = 2 32 ∗ 3 ∗ 5 ∗ 17 ∗ 257 ∗ 65537 p=2^{32}*3*5*17*257*65537 p=232351725765537
  • 在FFT中有很好的twiddle factors。
  • 更多详情可参看:Remco 2024年3月7日博客The Goldilocks Prime

对于小域的挑战在于:

  • soundness errors将变得不可忽略(non-negligible)

以多项式identity test为例,对于:
C ( ζ ) = Z H ( ζ ) q ( ζ ) C(\zeta)=Z_H(\zeta)q(\zeta) C(ζ)=ZH(ζ)q(ζ)

根据Schwartz-Zippel,该多项式identity test具有的soundness error上限为:
deg ⁡ ( C ( x ) ) / ∣ F ∣ \deg(C(x))/|\mathbb{F}| deg(C(x))/∣F
或, D n / ∣ F ∣ D n/|\mathbb{F}| Dn/∣F,其中 D D D为constraint degree。

3.1 提升基于Goldilocks域构建的密码学协议soundness的方法

3.1.1 以扩域来提高soundness

最简单的解决方案为:【即从Goldilocks扩域采样 ζ \zeta ζ

  • 选择更大的extension field,如约128 bit field: E = F [ X ] / ( X 2 − X − 1 ) \mathbb{E}=\mathbb{F}[X]/(X^2-X-1) E=F[X]/(X2X1)

通过采用Goldilocks degree 2 extension 或 degree 3 extension,即扩域至少为128 bits,从而可获得至少100-bit的安全性。

所有的密码学协议都可基于该扩域来开展。

3.1.2 以parallel repetition来提高soundness

另一解决方案为:

  • 为多项式identity test,采样多个 ζ i ∈ F \zeta_i\in\mathbb{F} ζiF,检查每个:【即仍然从Goldilocks域采样 ζ i \zeta_i ζi
    C ( ζ 1 ) = Z H ( ζ 1 ) q ( ζ 1 ) C(\zeta_1)=Z_H(\zeta_1)q(\zeta_1) C(ζ1)=ZH(ζ1)q(ζ1)
    C ( ζ 2 ) = Z H ( ζ 2 ) q ( ζ 2 ) C(\zeta_2)=Z_H(\zeta_2)q(\zeta_2) C(ζ2)=ZH(ζ2)q(ζ2)
    C ( ζ 3 ) = Z H ( ζ 3 ) q ( ζ 3 ) C(\zeta_3)=Z_H(\zeta_3)q(\zeta_3) C(ζ3)=ZH(ζ3)q(ζ3)

根据tight parallel repetition theorem:

  • repeated protocol具有error ε ′ \varepsilon' ε

从而有soundness error:
deg ⁡ ( C ( x ) ) ′ / ∣ F ∣ ′ \deg(C(x))'/|\mathbb{F}|' deg(C(x))/∣F

实际需要的是non-interactive arguments,因此需要检查底层IOP的state-restoration soundness。最终仍为 ε ′ \varepsilon' ε,但security argument是less clean的。详情可参看:

3.1.3 采用混合方式来提升soundness

Plony2中采用混合方式来提升soundness:【主要是基于工程易实现角度来选型】

环节提升soundness方法
permutation argumentparallel repetition
combining constraintsparallel repetition
polynomial identity testextension field
FRI protocolextension field

3.2 High arity “circuits”

标准PLONK电路的arity为3,即有2个输入和1个输出,形如:
在这里插入图片描述
而Plonky2电路中默认使用的arity为135:

  • 使得单个gate可做复杂操作:如哈希或插值。原因在于:对于复杂操作,在单个大gate内,比跨多个小gate,要更简单。
  • 区分了“routed” wires 和 “advice” wires。

3.3 Generalized wiring argument

标准PLONK的约束形式为:
Z ( x ) f 1 ( x ) f 2 ( x ) f 3 ( x ) = Z ( g x ) g 1 ( x ) g 2 ( x ) g 3 ( x ) Z(x)f_1(x)f_2(x)f_3(x)=Z(gx)g_1(x)g_2(x)g_3(x) Z(x)f1(x)f2(x)f3(x)=Z(gx)g1(x)g2(x)g3(x)

从而强化 Z Z Z必须被更新为类似:
Z ′ = Z ∗ ( f 1 ∗ f 2 ∗ f 3 ) / ( g 1 ∗ g 2 ∗ g 3 ) Z'=Z*(f_1*f_2*f_3)/(g_1*g_2*g_3) Z=Z(f1f2f3)/(g1g2g3)

由于有许多routed wires,该degree将变得too high。

为降低degree,Plonky2中添加了额外的列来维护中间结果。

3.4 Easier public inputs

标准PLONK将第 i i i个public input置于第 i i i个gate:
P I ( X ) : = ∑ i ∈ [ ℓ ] − x i ⋅ L i ( X ) PI(X):=\sum_{i\in [\ell]}-x_i\cdot L_i(X) PI(X):=i[]xiLi(X)

Plonky1中则相反,将public inputs置于最后几个gates。

若有大量的public inputs,有时最好将这些public inputs哈希到电路中,这样就仅需要发布单个哈希output。

Plonky2中:

  • 采用了该哈希方法,哈希之后,总是准确有4个public inputs(即对应为原始public inputs的256-bit 哈希压缩结果——以4个Goldilocks域元素来表示)。
  • 实际并不真的需要 P I ( X ) PI(X) PI(X)多项式,仅需要4个PI值,其在约束系统内为常量值。

3.5 “Fun” recursion problems

Plonky2专注于递归,其支持多种不同的递归模式:

  • 1)标准递归为:【为最简单的方式,依赖关系是单向的】
    • Circuit A:验证a proof of circuit B。
  • 2)multi recursion为:
    • Circuit A:验证a proof of circuit B,以及另一proof of circuit C。
  • 3)conditional recursion为:【如IVC】
    • Circuit A:验证a proof of circuit B,但仅当某特定wire被设置为1,才要求是valid有效的。
  • 4)cyclic recursion为:【最困难,循环依赖】
    • Circuit A:验证a proof of circuit A。
    • 从而出现了循环依赖关系。在做recursion Gadget时,需要知道:
      • size
      • gates
      • layout等等
    • 如:使用IVC来证明某hash chain。
  • 5)either-or recursion为:
    • Circuit A:验证a proof of circuit A,或,a proof of circuit B。
      • 可使用2个conditional recursion gadgets,来实现either-or recursion。
      • 有时,需要将其合并为单个gadget。
  • 6)STARK recursion为:
    • Circuit A:验证a proof of STARK B,其length是可变的。
  • 7)Polygon zero Type 1 zkEVM aggregation proof:
    • Circuit A:有最多2个child proofs。每个child proof可为:
      • a proof of circuit A
      • 或,a proof of circuit B
      • 或,empty

4. Plonky3

Plonky3为更灵活的PIOP toolkit,具有如下API:

  • Polynomial commitment 方案
  • Vector commitment方案
  • Fiat-Shamir实现等等

Plonky3提供了更强大的batching:

  • Merkle trees supporting matrices with mixed lengths
  • FRI supporting codewords of mixed lengths

Plonky3中:

  • 实现了多项式IOP:如PLONK和STARKs。
  • 实现了承诺方案:Brakedown、FRI
  • 实现了M31、BabyBear、Goldilocks等域。
  • 实现了Brakedown codes和Reed-Solomon codes。
  • 实现了Rescue、Poseidon、Poseidon2、BLAKE3、Keccak-256、Monolith哈希函数。

在Plonky3中,避免了使用parallel repetition来提升soundness,因为:

  • 从安全角度来看,parallel repetition使得安全论证是less clean的。
  • 而倾向于选择安全性更明显的extension field,因为这样没有caveats(警告)或待论证的事项。

参考资料

[1] 2024年3月8日,Polygon Zero团队Daniel Lubarov分享视频 Introduction to Plonky 1, 2 and 3
[2] Plonky 2 & 3
[3] Plonky2.5:在Plonky2中验证Plonky3 proof
[4] Polygon Knowledger Layer docs
[5] Polygon Zero官方2023年8月3日博客 A Short History of Plonky2

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值