multilinear多项式承诺方案benchmark对比

1. 引言

前序博客有:

  • Lasso、Jolt 以及 Lookup Singularity——Part 1
  • Lasso、Jolt 以及 Lookup Singularity——Part 2
  • 深入了解Lasso+Jolt

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,以支持潜在的链上验证。

具体开源代码实现见:

  • https://github.com/HungryCatsStudio/poly-commit(Rust)【运行cargo bench来benchmark】
    • 已向https://github.com/arkworks-rs/poly-commit提交Ligero、Brakedown和Hyrax的PR,当前正在review中。
    • 已向https://github.com/EspressoSystems/jellyfish/pull/390提交了KZG bench的PR,已被merge。
      • jellyfish KZG time bench:cargo bench --bench="pcs" --features="test-srs"
      • jellyfish KZG size bench:cargo bench --bench="pcs-size" --features="test-srs"

在对以上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的开销,为对2个size为 2 n / 2 2^{n/2} 2n/2的MSM的,具有 n n n个变量的multilinear多项式的,证明时长。基于https://github.com/axiom-crypto/halo2-lib/blob/15bca77fd383a7cb04099483cb6a3524c3615b0d/halo2-ecc/src/bn254/tests/msm.rs#L67 Halo2-lib,使用不同数量的base-scalar pairs来bench。
  • KZG开销,为基于 https://github.com/axiom-crypto/halo2-lib/blob/15bca77fd383a7cb04099483cb6a3524c3615b0d/halo2-ecc/src/bn254/tests/pairing.rs#L49 的单个pairing的bench,其乘以 n n n。实际multilinear KZG验证计算中包含了一个multipairing of n n n pairs,通常可优化为比 n n n个独立pairing 运算更快。
  • Brakedown当前未做递归proof生成时长bench。
    • 因为所选的硬件配置,已无法为大型多项式运行Ligero verifier。原因在于,当 n = 18 n=18 n=18时,有超过25万个halo2 advice cells,大多数都源自基于linear-code多项式方案在非交互式设置下所需的大量哈希。
    • 而相同参数配置下,Brakedown所需的open列数,要比Ligero多一个数量级。且由于Brakedown verifier需对每列进行哈希,认为在当前配置下,无法运行递归Brakedown。

在对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)Zeromorph:将任意单变量方案,转换为multilinear方案。对已知的单变量方案应用Zeromorph,能否带来更好的性能?
  • 2)BaseFold:最新的multilinear多项式承诺方案,见BaseFold: Efficient Field-Agnostic Polynomial Commitment Schemes from Foldable Codes。
  • 3)能否为基于linear-code的multilinear多项式承诺方案,做一些修改,使其受益于“small”系数呢?
  • 4)升级更新的电路友好的哈希函数。某些新的双倍友好的构建,致力于在native和in-circuit efficiency中做权衡。如Monolith: Circuit-Friendly Hash Functions with
    New Nonlinear Layers for Fast and Constant-Time Implementations。
  • 5)对多个多项式的batch openings进行bench,并对多个queries进行bench。
    • Ligero没有同态承诺,因此对同一多项式open多个点时,可通过线性组合来实现;而对多个多项式oepn同一(或多个)点时,使用哈希并没有任何明显的捷径。这不用于基于椭圆曲线的方案。详情见From one {point,poly} to multi {point,poly} commitment schemes。
  • 6)更多方案以及更多方案变种。

参考资料

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/170079.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动Docker服务后显示Docker Engine stopped

1、重新启动Docker服务&#xff1a;打开Windows服务管理器&#xff08;可以在开始菜单中搜索&#xff09;&#xff0c;找到"Docker Desktop Service"或类似命名的服务&#xff0c;右键单击并选择"重启"。稍等片刻&#xff0c;看看是否重新启动成功 2、尝试…

k8s二进制(ETCD的部署安装)

角色ip组件k8s-master192.168.11.169kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-node1192.168.11.164kubelet,kube-proxy,docker,etcdk8s-node2192.168.11.166kubelet,kube-proxy,docker,etcd 1、为etcd签发证书 1、证书的下载(任意机器上执行都可以) …

深度解剖Linux权限的概念

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;牢记Linux权限的概念。 > 毒鸡汤&#xff1a;你…

Java13新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 今天我们来一起看一下Java13这个版本的一些重要信息 版本介绍 Java 13 是在 2019 年 9 月 17 日…

SSM框架Demo: 简朴博客系统

文章目录 1. 前端页面效果2. 项目创建3. 前期配置3.1. 创建数据库数据表3.2. 配置文件 4. 创建实体类5. 统一处理5.1. 统一返回格式处理5.2. 统一异常处理 6. 全局变量7. Session工具类8. 登录拦截器9. 密码加盐加密10. 线程池组件11. dao层11.1. UserMapper11.2. ArticleMappe…

【Linux】八、进程通信

进程通信的介绍 目的 数据传输&#xff1a;一个进程将它的数据发送给另一个进程&#xff1b; 资源共享&#xff1a;多个进程间共享资源&#xff1b; 通知事件&#xff1a;一个进程向另一个或一组进程发送消息&#xff0c;同时事件如&#xff0c;进程终止时要通知父进程&#xf…

结构型设计模式07-享元模式

结构型设计模式07-享元模式 1、享元模式介绍 享元模式是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用和提高性能。它主要用于处理大量细粒度对象的情况&#xff0c;其中许多对象具有相似的属性和行为。 在享元模式中&#xff0c;对象分为两种类型&#xf…

02MyBatisPlus条件构造器,自定义SQL,Service接口

一、条件构造器 1.MyBatis支持各种复杂的where条件&#xff0c;满足开发的需求 Wrapper是条件构造器&#xff0c;构建复杂的where查询 AbstractWrapper有构造where条件的所有方法&#xff0c;QueryWrapper继承后并有自己的select指定查询字段。UpdateWrapper有指定更新的字段的…

量子计算和量子通信技术:引领潜力无限的未来

近年来&#xff0c;随着量子计算和量子通信技术的迅速发展&#xff0c;它们在各个领域的广泛应用前景引起了人们的极大兴趣。本文将深入探讨量子计算和量子通信技术的普遍应用&#xff0c;以及它们预示的未来&#xff0c;同时提出业内人士需要注意的事项。 介绍&#xff1a;量子…

SpringData、SparkStreaming和Flink集成Elasticsearch

本文代码链接&#xff1a;https://download.csdn.net/download/shangjg03/88522188 1 Spring Data框架集成 1.1 Spring Data框架介绍 Spring Data是一个用于简化数据库、非关系型数据库、索引库访问&#xff0c;并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快…

【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解

【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 GoogLeNet(InceptionV2)模型算法详解前言GoogLeNet(InceptionV2)讲解Batch Normalization公式InceptionV2结构InceptionV2特殊结构GoogLeNet(I…

pyTorch Hub 系列#4:PGAN — GAN 模型

一、主题描述 2014 年生成对抗网络的诞生及其对任意数据分布进行有效建模的能力席卷了计算机视觉界。两人范例的简单性和推理时令人惊讶的快速样本生成是使 GAN 成为现实世界中实际应用的理想选择的两个主要因素。 然而&#xff0c;在它们出现后的很长一段时间内&#xff0c;GA…