multilinear多项式承诺方案benchmark对比

news2024/11/19 15:25:49

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.coloradmin.cn/o/1199807.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 不同用户不同jdk

0、 解压一个新版本的jdk 1、 检查root用户下的环境变量&#xff0c;是否配置了JAVA_HOME&#xff0c;基于这个变量再配置的PATH变量是实现切换的前提。 2、 创建新用户 adduser jdk11 passwd jfjfjfjfjfjfj123 3、 编辑改用下的 .bashrc 文件 执行命令进行编辑&#xff0…

【Nginx】深入浅出搞懂Nginx

Nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛应用。 反向代理服务器&#xff1f; 经常听人说到一些术语&#xff0c;如反向代理&#xff0c;那么什么是反向代理&a…

BGP基本配置实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、内部OSPF互通&#xff0c;配置OSPF协议 3、BGP建立邻居关系 4、R1和R5上把业务网段宣告进BGP 5、消除路由黑洞&#xff0c;在R2、R4上做路由引入 6、业务网段互通 一、实验拓扑 二、实验需求 1、按照图…

开发者测试2023省赛--UnrolledLinkedList测试用例

测试结果 官方提交结果 EclEmma PITest 被测文件UnrolledLinkedList.java /** This source code is placed in the public domain. This means you can use it* without any restrictions.*/package net.mooctest;import java.util.AbstractList; import java.util.Collectio…

担忧CentOS停服?KeyarchOS系统来支撑

担忧CentOS停服&#xff1f;KeyarchOS系统来支撑 近年发生的“微软黑屏门”、“微软操作系统停更”、“棱镜门”、“中兴华为”等安全事件&#xff0c;敲响了我国 IT 产业的警钟&#xff0c;建立由我国主导的 IT 产业生态尤为迫切。对此&#xff0c;我国信息技术应用创新行业乘…

数字媒体技术基础之:分辨率

分辨率 Resolution&#xff0c;中国大陆译为“分辨率”&#xff0c;中国香港地区、中国台湾地区分别译为“解像度”和“解析度”&#xff0c;泛指测量设备对细节的分辨能力。 ◆ ◆ ◆ 图像尺寸 在数字图像处理中&#xff0c;像素 Pixel是一个无具体物理尺寸的抽象单位。 一张…

序列化模块-json和pickle

一、json json是所有语言都通用的一种序列化格式 &#xff0c;只支持 列表、 字典、 字符串、 数字 &#xff0c; 字典的key必须是字符串 1、dumps、loods # 在内存中做数据转换 : # durps 数据类型 转成 字符串 序列化 # loods 字符串 转成 数据类型 反序…

基于STC12C5A60S2系列1T 8051单片机定时器/计数器应用

基于STC12C5A60S2系列1T 8051单片机定时器/计数器应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍STC12C5A60S2系列1T 8051单片机定时器/计数器介绍STC12C5A60S2系…

No179.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

C++算法:完美矩形

题目 给你一个数组 rectangles &#xff0c;其中 rectangles[i] [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) &#xff0c;右上顶点是 (ai, bi) 。 如果所有矩形一起精确覆盖了某个矩形区域&#xff0c;则返回 true &#xff1b;否则&#xf…

C语言基础篇3:函数

1 函数简介 C源程序是由函数组成的&#xff0c;一个程序往往由多个函数组成&#xff0c;函数是程序实现模块化变成的基本的单元&#xff0c;一般是为了完成某一个特定的功能&#xff0c;相当于其他语言中的子程序。一个较大程序的各项功能都是由各个子程序共同完成的&#xff0…

【Seata源码学习 】 AT模式 第一阶段 @GlobalTransaction的扫描

1. SeataAutoConfiguration 自动配置类的加载 基于SpringBoot的starter机制&#xff0c;在应用上下文启动时&#xff0c;会加载SeataAutoConfiguration自动配置类 # Auto Configure org.springframework.boot.autoconfigure.EnableAutoConfigurationio.seata.spring.boot.aut…

Zabbix SNMPv3

一、Snmpv3简述 SNMPv3是Simple Network Management Protocol version 3&#xff08;简单网络管理协议第三版&#xff09;的缩写。它是一种网络管理协议&#xff0c;用于监控和管理网络中的设备、系统和应用程序。 相对于之前的版本&#xff0c;SNMPv3具有更强的安全性和扩展…

NGINX三种虚拟主机的配置

基于IP的配置 首先在原本基础上增加两个IP地址 [rootlocalhost conf.d]# nmcli connection modify ens33 ipv4.addresses 192.168.38.140 [rootlocalhost conf.d]# nmcli connection modify ens33 ipv4.addresses 192.168.38.150 [rootlocalhost conf.d]# nmcli connection u…

SharePoint 是什么

SharePoint 平台使您能够以在线方式和本地方式轻松地管理和协调业务数据。因为其灵活性和易使用性&#xff0c;公司可以快速采用SharePoint来管理其业务数据。 SharePoint Microsoft 365 一种基于云的服务&#xff0c;由 Microsoft 托管&#xff0c;适用于各种规模的企业。 任何…

vue2 数字软键盘 封装 可拖动 使用简单

1、效果图 2、使用方式 <Keyboard v-if"show" close"show false" :inputDom"$refs.input" /> 封装的数字键盘 Keyboard.vue 组件代码 <template><divclass"keyboard"ref"keyboard":style"{ left: …

CS224W6.2——深度学习基础

在本文中&#xff0c;我们回顾了深度学习的概念和技术&#xff0c;这些概念和技术对理解图神经网络至关重要。从将机器学习表述为优化问题开始&#xff0c;介绍了目标函数、梯度下降、非线性和反向传播的概念。 文章目录 1. 大纲2. 优化问题2.1 举例损失函数 3. 如何优化目标函…

matlab Silink PID 手动调参

&#xff08;业余&#xff09;PID即比例积分微分&#xff0c;它将给定值r(t)与实际输出值y(t)的偏差的比例(P)、积分(I)、微分(D)通过线性组合形成控制量&#xff0c;对被控对象进行控制。我们先用matlab Silink弄一个简易的PID例子&#xff1a; 中间三条就是比例&#xff0c;积…

【Python】一篇带你掌握数据容器之列表

目录 前言&#xff1a; 一、列表 1.列表的定义 2.列表的下标索引 3.列表的常用操作 &#xff08;1&#xff09;index方法&#xff1a;查找某元素的下标 (2)修改特定位置下标的元素 &#xff08;3&#xff09;insert&#xff08;下标&#xff0c;元素&#xff09;方法&a…

C/C++调试工具 - gdb详解

C/C调试工具 -gdb详解 1 简介 2 常用的命令 3 使用的条件 4 程序调试 4.1 直接运行程序 4.2 断点调试(在某一行) 4.3 断点调试(在函数入口处打断点) 5 调试core文件 5.1 生成core文件的方法 5.2 调试core文件 1 简介 GDB是Linux下非常好用且强大的调试工具。GD…