HyperPlonk——实现zkEVM的一种zk-proof system

1. 引言

Espresso Systems团队Binyin Chen等人2022年论文《HyperPlonk: Plonk with Linear-Time Prover and High-Degree Custom Gates》。

开源代码见:

根据Hardware-friendliness of HyperPlonk可知,"HyperPlonk+MLE-SumCheck"方案 不如 "Plonk+NTT"方案 硬件友好。 Weikeng Chen认为,HyperPlonk不仅不是硬件友好的,也不是软件友好的,其验证gas开销大于100万。

零知识证明系统为区块链隐私和扩容方案的基石,借助ZKP系统,使得Prover可向Verifier证明某state transition是正确的,如:

ZKP具有2大极好的特性:

  • 1)proof本身仅证明state transition是有效的,而不会泄露关于state transition的其它信息。
  • 2)即使state transition是复杂的且包含了很多笔交易,proof是简短的且可高效验证的。

过去几年来,Plonk已用于区块链领域的很多项目中。根本原因在于Plonk在以下维度做了很好的平衡:

  • 1)short proof
  • 2)efficient verification
  • 3)high level of customization
  • 4)minimal trust assumptions

但是,当用于证明large statements 或 试图使用并行化硬件时,Plonk仍有缺陷。当用于证明如rollups和zkEVM这样的大且复杂的statements时,这些缺陷尤为关键。

为克服这些瓶颈,提出了Hyperplonk:

  • 具有fully linear-time Prover:Proving time为 n log ⁡ ( n ) → n d 2 ( n = 2 μ ) n\log(n)\rightarrow nd^2(n=2^{\mu}) nlog(n)nd2n=2μ
  • 支持high-degree和lookup custom gates:对于类似zkEVM等复杂电路特别有用。这些特殊的gates可用于复杂的EVM OPCODES以及构建memory stack。
  • 移除了FFT-friendly field:不需要nth root of unity w n = 1 w^n=1 wn=1
  • Proof size:要比现有的PLONK大。

目前,当电路中约束数大于16000个时,Hyperplonk的原型实现已开始超过了Jellyfish——高度优化的Plonk实现,随着statement size的增加 或 使用更多并行化优化,Hyperplonk的优势将更加明显。

在这里插入图片描述
在HyperPlonk论文中,对比了多个multilinear多项式承诺方案:

  • KZG-based multilinear多项式承诺方案:基于bilinear group构建。
  • Dory multilinear多项式承诺方案:基于bilinear group构建。
  • Bulletproofs multilinear多项式承诺方案:基于Discrete Logarithm构建
  • FRI-based multilinear多项式承诺方案:基于Random Oracle构建。
    • Virgo multilinear多项式承诺方案
  • Orion multilinear多项式承诺方案:基于Random Oracle构建。
  • Orion+(即本文的HyperPlonk) multilinear多项式承诺方案:基于bilinear group构建。

在HyperPlonk中对比了多种PIOP的复杂度:
在这里插入图片描述
对于多变量多项式,有:

  • SumCheck PIOP for high degree polynomials
  • ZeroCheck PIOP
  • ProductCheck PIOP
  • Multiset Check PIOP
  • Permutation PIOP
  • Permutation PIOP for small fields
  • Lookup PIOP
  • Batch openings:特殊设置下更高效的batching方案。

2. Plonk:背景知识及缺陷

现代proof system有2大关键基石:

  • 1)information-theoretic polynomial interactive oracle proof (PIOP):输入为某computation,经PIOP可转换为多项式等式。
    PIOP有:
  • 2)多项式承诺机制:用于证明这些多项式等式成立。
    多项式承诺机制有:
    • 2.1)KZG 多项式承诺机制:2010年
    • 2.2)Bulletproof 多项式承诺机制:2017年
    • 2.3)Virgo(FRI) 多项式承诺机制:2019年
    • 2.4)DARK 多项式承诺机制:2019年

通过PIOP和多项式承诺机制的不同组合,可构建具有不同属性的proof system:

Plonk PIOP吸引了工业界大量注意的一大关键原因在于,其支持定制gates。传统的证明系统要求将计算拆分为加法和乘法运算,而PLONK支持不同的gates,如 X 3 ∗ Y + Y + X = Z X^3*Y+Y+X=Z X3Y+Y+X=Z。在VERI-ZEXE: Decentralized Private Computation with Universal Setup研究表明,这种定制gates可有效降低prover runtime。此外,Plonkplookup支持lookup——即证明某值在某表内。如,若某表包含了数字 [ 0 , ⋯   , 2 32 − 1 ] [0,\cdots,2^{32}-1] [0,,2321],借助lookup即可证明某值为某32-bit number,这将有助于降低prover runtime并高效表达这类计算。
构建zkEVM通常采用PLONK或PLONK-like systems(Starkware的AIR具有与PLONK非常相似的特性)。但是现有的这些系统都有一些缺陷:

  • 1)PLONK的第一步要求将circuit values编码为多项式,如下图所示,先将computation表示为circuit:
    在这里插入图片描述
    然后将circuit中的computation trace写成table,然后借助FFT(Fast-Fourier-Transform)基于table中的值插值为某多项式:
    在这里插入图片描述
    将computation trace编码为一个多项式,需要FFT,Hyperplonk的目的就是移除昂贵的FFT运算。

FFT是优美的算法,但其仍有不小的开销。FFT的runtime为 n log ⁡ 2 ( n ) n\log_2(n) nlog2(n),其中 n n n为circuit size。当 n n n为small或medium-szied时,FFT的开销可接受,但当 n n n大于一百万时, log ⁡ 2 ( n ) \log_2(n) log2(n)的值约为20,FFT开销就不可忽略了。对于zk-rollups和zkEVM系统,其通常有约10亿个gates。FFT的另一个瓶颈在于,其无法很好的并行化,因其需要复杂的内存访问。这些会限制定制硬件(如GPU/FPGA/ASIC)等用于ZKP。

3. HyperPlonk:移除FFT,替代为多变量

Hyperplonk的根本目的在于移除Plonk中的FFT,使其更易于扩展和适用于定制硬件。为此,借助一些可追溯至上世纪90年代的老技巧,如:

等,不同于编码为单变量多项式 P ( X ) P(X) P(X),而是编码为多变量( log ⁡ 2 ( n ) \log_2(n) log2(n)个变量)多项式 P ( X 1 , X 2 , ⋯   , X μ ) P(X_1,X_2,\cdots,X_{\mu}) P(X1,X2,,Xμ)。因研究表明,使用 log ⁡ 2 ( n ) \log_2(n) log2(n)个变量的多项式可编码 n n n个值,使得该多项式内每个变量都是线性的,即不存在 X i 2 X_i^2 Xi2项。即,可使用multi-linear多项式来表示 ( 0 , 0 , ⋯   , 0 ) (0,0,\cdots,0) (0,0,,0) ( 1 , 1 , ⋯   , 1 ) (1,1,\cdots,1) (1,1,,1)的所有可能取值来表示特定集合。也可称为boolean hypercube,因每个变量的取值为0或1。受hypercube启发,因此命名为HyperPlonk。
在这里插入图片描述
与标准的Plonk不同,HyperPlonk将computation trace编码为具有多个变量的multi-linear多项式。

4. 为multi-linear多项式构建toolbox

无需FFT,可将computation trace编码为multi-linear多项式。
Plonk协议可拆分为多个子协议:

  • 1)gate check子协议:以确保circuit中的每个gate都满足。如,若某乘法门的输入为711,则输出必须为77
  • 2)wiring或permutation check子协议:以确保circuit是正确连接的,即某gate的输出是后续gate的正确输入。如,需确保gate 1的输出 等于 gate2的右侧输入。

在Plonk中,这些子协议都是使用单变量多项式来表示(大多需要额外的FFT)。需要将这些子协议也迁移到不依赖FFT的multi-linear多项式表示。为此,构建了一组适于multi-linear多项式的子协议工具箱,其中一些是老工具(如著名的SumCheck协议,并针对high degree gates进行了改进),一些是新工具(如针对多个多项式evaluate at多个points的batch协议):
在这里插入图片描述
Hyperplonk包含了以上多个子协议,并主要基于著名的sumcheck protocol。

5. HyperPlonk, HyperPlonk+ 以及定制gates

借助以上工具箱,很容易构建HyperPlonk。本研究的关键目的在于让HyperPlonk兼容支持Plonk的所有好的特性。
Plonk支持定制gates,但需要做平衡——太大(或太高degree)的定制gates会增加quotient多项式的size,从而降低Prover速度,减少了定制gates带来的更小circuit的好处。为此,实际定制gate的最大degree为5(如 X 5 − Y = Z X^5-Y=Z X5Y=Z)。
而HyperPlonk无quotient多项式,因此更高degree的取舍要优于Plonk。
经评估,HyperPlonk最大可支持degree为32的定制gate,从而针对特定计算可大幅改进prover time。
HyperPlonk也支持lookup,HyperPlonk+lookup=HyperPlonk+。
HyperPlonk支持高degree 定制gate和lookup,将有助于其用于zkEVM。

6. Orion+:超快的多项式承诺方案

正如之前所述,现代证明系统由PIOP和多项式承诺机制组成。
HyperPlonk为PIOP,可与很多有趣的多项式承诺方案结合。
如,基于KZG的multi-linear变种——Orion
Orion具有out-and-out fastest prover,可与HyperPlonk以及HyperPlonk+完全兼容。对于100万个门的电路,生成Orion证明仅需3秒。但是,Orion的proof size很大,约3千万个门的电路,其proof size约为5.5MB,而KZG的proof size为1KB。
对Orion改进后的Orion+,对3千万个门的电路,proof size可降低为约7KB。Orion+实际使用了HyperPlonk及其commit和prove特性。目前仍在评估Orion+的实用性,但是这个方向很有趣,可能可实现blazing-fast prover with a reasonable proof size。

7. HyperPlonk实现及评估

目前将HyperPlonk原型实现与Jellyfish进行了对比。当circuit中约束数大于16000个时,HyperPlonk性能开始超过Jellyfish,约束数越多,优势越明显。Hyperplonk proof size要略大于Plonk proof size(约6kb vs. 1kb),但是对于许多应用来说可接受(已比其它无需FFT的证明方案的proof size要小很多)。
在这里插入图片描述
同时,Hyperplonk可高效支持high-degree gates。degree为32的gate,其仅比degree为2的gate,贵20%。
在这里插入图片描述
目前HyperPlonk的实现和优化仍在进行中,未来将考虑将其集成到Jellyfish库中。

8. Hyperplonk VS Plonk

根据ZKSummit8:Hyperplonk
Hyperplonk致力于避免FFT运算以提升性能。
Hyperplonk这种新的polynomial IOP 可与:

  • Bulletproofs多项式承诺机制
  • 或 KZG多项式承诺机制
  • 或 FRI多项式承诺机制

结合,构造出新的SNARK解决方案。

Hyperplonk支持:

  • 定制gates
  • lookups
  • Halo2 arithmetization(可访问多行)

而:

  • Plonk采用单变量多项式,基于某multiplicative subgroup;
  • Hyerplonk采用multi-linear多项式,基于boolean hypercube。

Hyperplonk中的copy constraints采用的是 微软团队2020年论文Quarks: Quadruple-efficient transparent zkSNARKs 中基于product argument构建的permutation argument来enforced的。

具有FFT的情况下:

  • O ( n log ⁡ n ) O(n\log n) O(nlogn)
  • 需要FFT-friendly multiplicative subgroup w n = 1 w^n=1 wn=1
  • 复杂(即低效的)内存访问模式
  • 影响并行化

因FFT具有superlinear scaling,通常认为,FFT是large instances的瓶颈。

Hyperplonk支持非常复杂的定制门:

  • 又名 high-degree custom gates

前提是,在Plonk,如果gate弄得太大,最终会在group运算中付出代价。
从group运算角度来看:

  • Plonk: O ( n ⋅ d ) O(n\cdot d) O(nd)
  • Hyperplonk: O ( n ) 次 g r o u p 运算 + O ( n ⋅ d log ⁡ 2 ( d ) ) 次 f i e l d 运算 O(n)次group运算+O(n\cdot d\log^2(d))次field运算 O(n)group运算+O(ndlog2(d))field运算

Hyperplonk的proof size要略大于Plonk的:

  • 4 log ⁡ ( n ) 4\log (n) 4log(n)

其中 n n n为约束数(对于KZG来说,当 n = 2 20 n=2^{20} n=220时,其proof size小于4kb)。

multi-linear polynomial看起来像什么呢?
在这里插入图片描述
最终的multi-linear polynomial的每个变量都是linear的,这样有助于效率,但代价是proof size会增加个 log ⁡ 2 ( n ) \log_2(n) log2(n)的开销因子。

Hyperplonk的Prover 试图仅在evaluation form,使用sum-check协议来实现zero-check,在每一轮,Prover需发送a degree 3 polynomial。

Plonk的定制门存在如下问题:【Plonk的定制门degree最大不超过5。】
In Plonk it’s advantageous to use complex custom custom gates, because it reduces the number of gates and the size of the witness, which reduces the number of group operations. However, on the other hand it increases the degree of the quotient polynomials, which increases the number of group operations.

但是,由于Hyperplonk的定制门仅影响sum-check,仅对应field运算。group运算要比field运算 贵1000倍,这是一项重大的加速。

sum-check Prover为quadratic in 定制门的degree d d d,因此可进一步优化为 O ( d log ⁡ 2 ( d ) ) O(d\log^2(d)) O(dlog2(d))。这些优化依赖于一些FFT。

参考资料

[1] HyperPlonk, a zk-proof system for ZKEVMs
[2] https://twitter.com/Hyunxukee/status/1577267554196008960
[3] ZKSummit8:Hyperplonk

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值