multilinear多项式承诺方案benchmark对比

1. 引言

前序博客有:

Lasso lookup中,multilinear多项式承诺方案的高效性至关重要。

本文重点关注4种multilinear多项式承诺方案的实现和benchmark:

  • 1)Ligero: native & recursive implementation; benches, 【交互式】
  • 2)Brakedown: native implementation; benches, 【交互式】
  • 3)Hyrax: native implementation; benches, 【交互式】
  • 4)multilinear KZG: benches. 【非交互式】

目前为止,没有在单个库中基于同样的backend实现了以上4种multilinear多项式承诺方案。如:

  • 现有的Hyrax学术实现,是基于Python的。
  • multilinear KZG:基于Rust,以arkworks库为backend。
  • Ligero和Brakedown:基于Rust,以ZCash库为backend。

本文:

  • 基于arkworks实现了Hyrax、Ligero和Brakedown
  • 基于https://github.com/EspressoSystems/jellyfish(也是以arkworks库为backend)的现有multinear KZG 添加了benchmark
  • 为Ligero实现了Halo2 verifier,以支持潜在的链上验证。

具体开源代码实现见:

在对以上multilinear多项式承诺方案进行benchmark时,重点关注以下维度:

  • Prover time
  • Verifier time
  • Proof size
  • On-chain verification 链上可验证
  • Recursion friendliness 递归友好性

本文bench所采用的硬件为AMD Ryzen™ 9 7950X3D:

  • CPU: 16 cores / 32 threads @ 4.2 GHz
  • Generation: Raphael (Zen 4) with AMD 3D V-Cache™ Technology
  • RAM: 128 GB ECC DDR5 RAM

2. native benchmark

本文所选的4个multilinear多项式承诺方案中,有3个是天然交互式的。通过应用Fiat-Shamir transform,可将这些交互式方案转换为非交互式的。所谓Fiat-Shamir transform,实际上是通过某密码学hash-based sponge来实例化。

递归验证所需的hashing in-circuit,若采用基于bitwise运算的哈希函数(如SHA256),要比采用algebraic哈希函数(如Poseidon),慢几个数量级。

为此,对于Ligero,考虑2个变种:

  • 1)基于SHA256所优化的原生哈希
  • 2)支持递归的Poseidon哈希(R)。

KZG是非交互式的,其无需Fiat-Shamir transformation。

Ligero的结论,足以支撑非交互式Brakedown和非交互式Hyrax的结论。

需注意的是,Jolt中的特定应用所承诺的元素是“small”的,为此,将考虑对Hyrax采用额外的变种:

  • 使用专门针对 < 60 <60 <60 bits优化后的改进版MSM。
  • 相比于任意(A)系数场景MSM, < 60 <60 <60 bits的版本是small变种(S)。

在对以上方案做benchmark时,一个重要事实是:

  • Ligero proof size 要大于 Brakedown proof size。
  • 当给矩阵输入相同的多项式系数时,自然会认为Brakedown具有更大的proof size,因为需open更多的columns。

因此在实际实现时,Ligero总是生成square matrices,而Brakedown的列数比行数多。为此,需对Ligero的实现进行调整,使其与Brakedown采用相同的arrangement。这样:

  • prover time要大一点。
  • 但verifier工作量减少了:因为每列所需哈希的元素数减少了。

实际实现时,Brakedown采用的是Brakedown: Linear-time and field-agnostic SNARKs for R1CS论文中的第三行参数(small distance):
在这里插入图片描述
与采用Larger distance的linear codes版本的Brakedown相比,small distance版本具有更大的 t t t值(即更大的open列数),但改进了prover time。

为此,本文实际benchmark了6个版本的方案:

  • 1)multilinear KZG
  • 2)Hyrax(S):所承诺的元素为 < 60 <60 <60 bits的值。
  • 3)Hyrax(A):所承诺的元素为任意值。
  • 4)Ligero:采用优化后的基于SHA256的哈希函数。【基于linear-code】
  • 5)Ligero(R):采用支持递归的Poseidon哈希函数。【基于linear-code】
  • 6)Brakedown:【基于linear-code】

Ligero、Ligero(R)和Brakedown均是基于linear-code的,其共享 用于编码系数矩阵中每一行所选择的linear函数 带来的运算模式。

实际实现时,多项式系数取自于BN254曲线的scalar field。选择BN254曲线是为了支持潜在的以太坊链上验证需求。

KZG和Hyrax的安全性上限取决于做group运算所选择的椭圆曲线,更准确来说,是取决于所关联的特定group的DLP(Discrete Logarithm Problem) hardness。

Ligeror和Brakedown实现时采用安全参数,致力于实现128 bits的安全性。

需注意的是,尽管致力于为这些基于linear-code的方案实现128位安全性,而不是BN254 DLP的110位安全性,性能上有一定的差异,源自于要open相对少一点的列——仅为a few percentage points。

2.1 Prover计算开销bench

以下所有值的单位为ms,空白表示未运行相应的bench(如,仅关注少量方案的large n n n情况)。横杠表示试图运行,但超过了bench机器的计算资源。

2.1.1 Prover commit时长bench

在这里插入图片描述
相关数据分析有:

  • 当多项式的变量参数个数 n n n小于22个时,Ligero方案的commit时长有优势。这与Brakedown论文中的结论一致。Brakedown具有渐进的linear time,且事实上,但具有足够大的 n n n值时,Ligero具有额外的 log ⁡ ( n ) \log(n) log(n)因子负担。当有 n ≥ 24 n\geq 24 n24的multi-linear多项式,Brakedown的优势开始显现。
  • Ligero(R)的commit(open以及验证)时长,要比Ligero慢得多。
  • 实际所实现的基于Linear-code的方案(Ligero、Ligero(R)和Brakedown),在opening阶段都缺少了一个明显的优化:
    • Prover应无需对所有列重新哈希,因为其已在commit阶段哈希过了。
    • 当使用高效基于bitwise的哈希原生运算时,这可能不是大额开销,但仍然有改进空间。
    • 该问题的核心在于,受限于当前的arkworks trait定义,Prover无法在commit和opening阶段共享 除实际commitments(以及所谓的“randomness”)之外的 任何数据。为此,也向arkworks提交了PR试图解决该问题:added the auxiliary data of the prover for opening

2.1.2 Prover open时长bench

下表数据单位为ms。
在这里插入图片描述
Prover的open时长竞争更激烈,但对于足够大的 n n n值,Ligero险胜于multilinear KZG。

2.2 Verifier计算开销bench

2.2.1 验证时长bench

下表中数据单位为ms。
在这里插入图片描述
相关数据分析有:

  • Ligero为 基于Linear-code的方案(Ligero、Ligero(R)和Brakedown)中的expected winner。因为Ligero,由于其相对大的code distance,其open的列数是small的。
  • 为实现一定级别的安全性,Brakedown需要open更多的列。
  • 与commit时长不同,在所bench的 n n n值区间,无法看到Brakedown的渐进优势。猜测当 n n n值非常大时,可能Brakedown的优势会明显,但实际上无法bench。

2.3 size大小bench

2.3.1 Proof size大小bench

下表中数据单位为字节。
在这里插入图片描述
很明显,在Proof size方面,基于椭圆曲线运算的方案(KZG和Hyrax)要吊打其它方案几个数量级。其中的winner是KZG。

基于linear-code的多项式承诺方案的proof size为 O ( 2 n / 2 ) \mathcal{O}(2^{n/2}) O(2n/2)

2.3.2 commitment size大小bench

下表中数据单位为字节。
在这里插入图片描述
实际bench时,有必要考虑commitment size:

  • Hyrax为唯一的 commitment size与多项式size相关的 multilinear多项式承诺方案。其系数矩阵中的每行对应一个椭圆曲线点。
  • 除Hyrax之外的方案,其commitment size均为相对小的常量值:
    • 基于linear-code的PCS,其commitment size为哈希摘要。
    • KZG的commitment为单个group元素——对于BN254曲线,正好也是64字节。

3. recursive benchmark

当讨论SNARK recursion或composition时,是指将某verifier的验证流程(inner)作为另一(outer)方案的的电路:

  • 首先对inner电路运行Prover,以获取有效的(inner)proof。
  • 然后将该(inner)proof作为outer电路的输入(通常为private输入)。
  • 最后为outer电路运行Prover,其暗含了认可该inner verifier。

递归的好处在于:

  • 可使用具有fast prover但large proof size的方案,将该fast-prover方案 “wrap” 在某short-proof方案中,从而获得所需的small proof。
  • 满足特定的verifier逻辑要求,如链上verifier仅支持Groth16 proof。

因为,为让outer verifier信服某statement,需同时运行inner prover和outer prover。因此实际应仔细权衡取舍。

杜宇递归验证,无需关注“native” verifier time,因为该inner-verifier已包含在outer prover中。

在递归benchmark时,当前仅有Ligero方案的试验数据。实际是基于Axiom的halo2-lib来实现的Ligero方案——由Modulus Labs的小伙伴实现,未来将开源。

根据Ligero所需open的列数,来推断Brakedown中需open的列数。并基于https://github.com/axiom-crypto/halo2-lib#bn254-msm中所提供的BN254 MSM benchmark,初步评估了KZG和Hyrax。

MSM为multi-scalar multiplication简称(即将一组group元素相加,每个group元素乘以可能不同的scalar值),为KZG和Hyrax多项式承诺方案中的核心运算。

3.1 递归Prover计算开销

除了以上所描述的outer-prover开销。当实际实现递归验证方案时,还需考虑inner prover,为满足递归友好性,先前提到的SHA256哈希函数开销巨大,因此更适合使用电路友好的Poseidon哈希函数。

3.1.1 proof生成时长(Halo2)

下表数据单位为秒。
在这里插入图片描述
相关数据分析有:

在对Hyrax和KZG进行递归证明生成时长评估时,仅关注核心开销——MSM/pairing,并完全忽略辅助开销,如让该方案成为非交互式的。

3.2 递归Verifier计算开销

此处是指outer-verifier开销。如上所属,在递归配置下,inner verifier自身影响不大(offline sanity checks除外)——其永远不会原生运行,其计算已包含在outer-prover中。

所有电路均运行在halo2中,仅需 < 1 <1 <1秒的runtime。从而推断出,若运行在EVM-verifier中,其gas开销也可接受。本文不展开讨论。

3.3 递归Verifier proof size

Halo2 proof size与Halo 2电路参数 紧耦合,即,与advice table中的最大行数 k k k呈对数关系。此外,proof size除随 k k k变化之外,仅在fastest prover中展示所选择的 k k k值,如上面“递归Prover计算开销”所述,对KZG、Hyrax和Brakedown也遵循相同的方法。

下表中数字单位为字节。
在这里插入图片描述
相关数据分析有:

  • k = 20 k=20 k=20时,对于 n = 14 n=14 n=14 n = 20 n=20 n=20,Hyrax具有最快的verifier;当 k = 19 k=19 k=19时, n n n取14到20之间的中间值时,具有最快的runtime。这即粗略解释了增加 n n n值,并不会同步doubling proof size。
  • 对于递归prover time,对最大的Ligero实例运行超时,可推断为brakedown也将超时。

3. 结论

选择合适的multilinear多项式承诺方案并不容易。

当实现以上方案时,发现仍有很大的代码和参数优化空间,具体取决于优化目标——是prover time还是verifier time等等。

以上benchmarks仅是开始。很多opening proof generations实例都可在Lasso中batch,而每个多项式分别进行承诺。

ZKP proof的链上验证是很有趣的应用场景,随着SNARKs的进步,将加快相关项目落地。

尽管如此,个人认为,这项技术的未来用户将是链下的,如AI judge或身份证明(proof-of-identity):

  • 未来不局限于小的proof size
  • 亚秒级的验证时长可能也是不必要的;
  • 真正的瓶颈在于Prover。

基于linear-code的multilinear多项式承诺方案在这一领域提供了良好的折衷:

  • 其矩阵结构,具有高并行性;
  • 选择code distance的灵活性;
  • 像Brakedown这样的一些方案也是域不可知的:
  • 没有FFT意味着对该域的group unit的限制更少。

如果在未来一两年内,随着理论和实现的进步,至少一个数量级的改进,并不足为奇。在那之前,还没有明确的赢家,尽管这个multilinear多项式承诺方案家族目前似乎是一个不错的选择。

4. 未来工作展望

未来工作有:

参考资料

[1] 2023年7月博客Benchmarking multilinear Polynomial Commitment Schemes

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值