浅谈 Binius:用 Rust 实现的硬件优化 SNARK 协议

图片

作者:Ulvetanna 团队

编译:TinTinLand

原文链接:https://www.ulvetanna.io/news/binius-hardware-optimized-snark

在一篇新的研究论文中,零知识证明技术开发团队 Ulvetanna 展示了一种基于二进制域塔 (Towers of Binary Fields)的性能优化的 SNARK 构建方法。

为什么在整个以太坊协议中使用的 Keccak-256 哈希函数在 CPU 上运行得如此之快,但对于 zk-SNARKs 却遇到了众所周知的发展瓶颈。这种差异目前阻碍了许多构建 zk-rollups、zk-bridges 和其他旨在使用加密技术证明扩展区块链计算的解决方案。问题源于计算机使用的基本数据类型与当今 SNARKs 使用的数据类型之间的不匹配。在 Ulvetanna 团队的新研究论文《二元域塔上的简洁论证》(Succinct Arguments over Towers of Binary Fields,https://eprint.iacr.org/2023/1784)中,我们提出了一种新的 SNARK 构建方法,最终将为真实世界的计算带来数量级的性能改进。

此外,我们正在开源我们正在进行中的 Rust 实现系统,名为 Binius (https://gitlab.com/UlvetannaOSS/binius)。

图片

Bits(0 和 1)是信息的基本单位。从半导体门到高级编程语言,在所有常见的计算方法中,我们都用 Bits 进行处理,8-bit 字节、32-bit 或 64-bit 字符。另一方面,当今广泛使用的 SNARKs 基本上是在素数阶有限域上进行计算,通常为 256 bits 左右的阶上。类似 Polygon Zero 和 RISC Zero 这样的团队,已经通过从 256-bits 素数域转向更小的素数域(约为 64-bits 和 32-bits)而取得了性能突破。在 Ulvetanna,我们开始思考为什么我们不能将小域的优势一直扩展到最小的域:单个位域(the single-bit field)。

从数学上讲,1-bit 被称为 GF(2),它属于一种称为二进制域(binary fields)的系列。对于那些之前没有接触过这个的人来说,二进制域可能一开始看起来很奇怪。k-bit 二进制域元素的加法等于 k-bit 字符串的异或(XOR)运算。而乘法二进制域元素则更像是多项式的模乘法,而不是整数的模乘法。然而,这些域具有一些卓越的特性,允许在数字电路中实现非常高效。在密码学中,二进制域并不是一个新概念;事实上,AES-GCM 加密标准使用了两种不同的二进制域,GF(28) 和 GF(2128)。在 SNARKs 和可验证计算的世界中,人们普遍忽视了备受赞誉的 Fast Reed–Solomon IOP of Proximity(https://eccc.weizmann.ac.il/report/2017/134/)。它是 STARK 协议的核心,最初也是为二进制域设计的。

数据类型不匹配不仅仅是一个理论问题;许多 ZK 电路,包括旨在验证 Keccak-256 哈希的电路,实际上使用了更大的域元素来表示 bit。例如,像 PLONK 和 Groth16 这样的椭圆曲线 SNARKs,需要 256-bit 素域来确保安全性,但它们通常使用具有 256-bit 域元素的电路,其中许多电线上的值为 0 或 1。这种做法浪费了 255-bit,并且导致证明有意义的 SNARKs 需要大量的内存。我们将这种现象称为嵌入开销(overhead of embedding)。像我们之前在一篇博客中所介绍的 Goldilocks,虽然减少了这种嵌入开销,但仍然可以节省 64 倍。这恰恰是我们希望用我们的技术实现的改进。

尽管二进制域看起来很有吸引力,但直到现在,存在着各种技术问题阻碍了它们在我们行业中的应用。然而,我们发现通过应用和调整最近几年发布的作品中的技术,如 Brakedown(https://dl.acm.org/doi/abs/10.1007/978-3-031-38545-2_7)、HyperPlonk(https://link.springer.com/chapter/10.1007/978-3-031-30617-4_17)和 Lasso(https://eprint.iacr.org/2023/1216),我们设法规避了这些问题。我们研究的结果是一个实用且高效的 GF(2) SNARK 协议。我们为 GF(2) 开发了一种多项式承诺方案,不会产生任何嵌入开销,这意味着承诺数据的 bit 效率就像承诺 64-bit chunks 一样高效。Binius 构造不仅适用于 GF(2),还适用于一整个二进制域系统,这些域具有二次幂的大小,称为二进制域塔(a tower of binary fields)。这一点延伸到了算术化层面,意味着我们的 SNARK 支持的 PLONKish 和 AIR 约束系统同时可以访问整个域塔。实际上,约束系统层可以使用与 bit、字节和字匹配大小的数据类型,这将允许进一步提高性能。

在 SNARKs 中使用二进制域的一个潜在缺点是,无法在约束系统中“原生地”(natively)执行整数加法和乘法。然而,像 Lasso 这样高效查找参数的出现,已经降低了非本地电路操作的成本。虽然以前 Lasso 本身只被认为优于基于椭圆曲线的 SNARKS 的备用查找参数,但二进制塔提供了另一个可以捕捉 Lasso 改进的场景。利用我们可以廉价地直接操作 bit 的能力,高效地查找协议以及我们开发的其他几种多线性多项式协议的能力,我们的论文提供了能够高效执行整数加法和乘法的约束系统部件。作为另一个示例,我们还为验证完整的 Keccak-256 哈希函数提供了一个约束系统,每个 Keccak-f 排列只需要提交 12 千字节的数据。

我们认为二进制域塔 SNARKs 有三个主要优点

降低内存用量和计算成本

首先,这种方法通过最大化小域的优势,大大降低了内存使用量和计算成本。Binius 在提交 1-bit 元素方面已经比我们基准测试的下一个最佳系统 plonky2(https://github.com/0xPolygonZero/plonky2)高效 50 倍,并且还有许多优化空间。

与标准哈希函数兼容

第二个优点是与标准哈希函数的兼容性。二进制域塔 SNARKs 可以高效执行像 XOR 和逻辑移位这样的位操作,在 SHA-256、Keccak-256 和其他对称加密原语中广泛使用。我们特别认为 Grøstl(https://www.groestl.info/)是一种适合与我们技术验证的哈希函数。虽然 Grøstl 并不像 Keccak 和 Blake2 那样广为人知,但它曾作为 SHA-3 竞赛的最终入围者与它们并列。Grøstl 的设计基于 AES,并经历了广泛的密码分析,这比今天许多 SNARKs 依赖的 Poseidon 哈希函数更令人放心。展望未来,我们预计 Binius 也能够以零知识技术高效地证明和验证 AES-GCM 加密的密文的属性。

硬件友好实现

最后,第三个重要优点是二进制域的硬件友好实现。二进制域的算术运算仅依赖于简单的逻辑门(例如 XOR)和位移,这是免费的。这与素数域形成鲜明对比,后者需要复杂的宽整数乘法器。这在哈希电路中尤为重要:Poseidon 和 Poseidon2 创造的计算瓶颈在 Grøstl 中完全消失。这意味着我们可以在相同的硅片区域上容纳更多的算术和哈希加速器,并以比以前甚至选择的素数域更高的时钟频率运行它们。此外,由于 Binius 证明器减少了嵌入开销所导致的内存需求,因此在芯片上使用的内存减少了,主机和加速器之间的带宽压力也减轻了。

Ulvetanna 是一家密码加速公司,我们的使命是加速 ZK 革命。团队结合了我们在硬件实现、高性能计算和密码学方面的专业知识,努力推动 Binius。虽然软件实现已经展示了出色的性能,但我们的系统将通过硬件加速真正发挥作用。我们已经在 FPGA 中内部实现了几个关键模块。我们看到的结果承诺在证明性能上将实现数量级的改进。敬请期待后续的技术报告。

这项工作远未结束,我们才刚刚开始。我们期待与 Web3 和零知识社区的合作,使用二进制域塔和 Binius 提供更高级别的 SNARK 性能。关注我们的博客和 X(前身为 Twitter)上的 @UlvetannaHQ 以获取未来更新的信息。我们正在积极寻找更多出色的工程师和计算机科学家,帮助我们推动可验证计算的极限。如果您想加入我们这个旅程,请查看我们的求职网站:https://www.ulvetanna.io/careers

感谢 Justin Thaler 的多次交流,为我们的研究工作做出了贡献。感谢 Eli Ben-Sasson 回答了我们关于二进制域 STARK 的几个问题。感谢 Achal Srinivasan 和 Paradigm 设计团队对 Binius logo 设计的帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

迪科DTC-F81收费机DTC-F82

迪科DTC-F81收费机是一款挂式收费机,广泛应用的学校食堂刷卡消费,DTC-F82收费机是台式消费机,常用在学校超市,放在桌子上使用的,这2款消费机是迪科畅销机型,如下图 机器质量可靠稳定,不少用户使…

NFT Insider115:The Sandbox开设元宇宙Diorama快闪店,​YGG Web3 游戏峰会已开幕

引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…

Vue3框架中让table合计居中对齐

第一步&#xff1a;给它加一个类名 center-table 如下&#xff1a; <el-table:data"datas.shows"max-height"600px"show-summarystripeborderstyle"width: 100%":header-cell-style"{ textAlign: center }":cell-style"{ text…

threejs创建一个旋转的正方体【完整代码】

效果&#xff1a; 中文网three.js docs 1.搭建环境 安装three 首先我们需要新建一个项目 vue/react都可 这里以vue为演示 npm i three 找到一个新的页面 在页面script的地方导入three import * as THREE from "three" 或者自己逐个导入 import {PerspectiveC…

SQLite 和 SQLiteDatabase 的使用

实验七&#xff1a;SQLite 和 SQLiteDatabase 的使用 7.1 实验目的 本次实验的目的是让大家熟悉 Android 中对数据库进行操作的相关的接口、类等。SQLiteDatabase 这个是在 android 中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删…

保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

1 K8S 简介 K8S是Kubernetes的简称&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的系统。它可以跨多个主机聚集在一起&#xff0c;控制和自动化应用的部署与更新。 K8S 架构 Kubernete…

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)

Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…

聚类笔记:HDBSCAN

1 算法介绍 DBSCAN/OPTICS层次聚类主要由以下几步组成 空间变换构建最小生成树构建聚类层次结构(聚类树)压缩聚类树提取簇 2 空间变换 用互达距离来表示两个样本点之间的距离 ——>密集区域的样本距离不受影响——>稀疏区域的样本点与其他样本点的距离被放大——>…

Unity Android FireBase bugly报错查询

报错如下图&#xff0c;注意&#xff0c;标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表&#xff0c;在unity安装目录下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册 CK-FR03-EIP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯…

Linux文件查看命令

1.cat加上文件名 &#xff08;因为所有文件内容都会打印到屏幕上&#xff0c;所以内容少时使用这个&#xff0c;总不能用cat来定义一本小说&#xff09; 3.往文件中写入数据——cat加上>(重定向符&#xff09;加上文件名&#xff0c;写完之后&#xff0c;按键 cat原本是把…

Mac OS 干货教学-超详细Wifi破解教学

Mac OS 干货教学&#x1f525;-超详细Wifi破解教学 尊重原创&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 PS&#xff1a;学术交流&#xff0c;私自破解他人wifi可能要负担法律责任或让办公电脑被Hack黑客风险&#xff01;本次本…

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建&#xff0c;创建新的pyqt项目&#xff0c;下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到&#xff0c;该项目下有3个文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

python 将当前时间转成CP56time2a BIN码

def cp56time2a_hex_str():# 获取当前时间now datetime.now()# 将当前时间格式化为CP56time2a格式s now.strftime("%Y%m%d%H%M%S")[2:]cp56time2a [s[i:i 2] for i in range(0, len(s), 2)]seconds cp56time2a[-1:][0]cp56time2a cp56time2a[:-1]seconds_hex …

openstack(2)

目录 块存储服务 安装并配置控制节点 安装并配置一个存储节点 验证操作 封装镜像 上传镜像 块存储服务 安装并配置控制节点 创建数据库 [rootcontroller ~]# mysql -u root -pshg12345 MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PR…

bat批处理文件

常用的bat批处理命令 1、遍历移动文件最好将文件编码保存为 ANSI编码 新的改变 1、遍历移动文件 把子目录里面的文件批量移动到当前目录 &#xff08;或根目录&#xff09; 项目中要批量导入附件&#xff0c;但是收集的子公司员工信息&#xff0c;都是每个人一个文件夹的&…

需求变更导致估算不精准 6大措施

需求变更可能导致估算不精准、项目成本增加、进度延迟等问题&#xff0c;如果不能准确地估算项目&#xff0c;往往会造成资源浪费和开发效率的降低&#xff0c;因此亟需解决因需求变更导致地估算不精准的问题。 一般来说&#xff0c;主要是从以下6个方面入手解决&#xff1a; 1…

python实现存款日利息计算器(窗口界面形式)

输入存款金额&#xff0c;7日年化收益率&#xff0c;输出每日利息 完整源码如下&#xff1a; import tkinter as tk from tkinter import messageboxdef calculate_interest():deposit float(entry_deposit.get())interest_rate float(entry_interest_rate.get())daily_int…

基于Zigbee的教室智能环境监控系统(论文+源码)

1.系统设计 此次研究的目的是设计一款基于Zigbee的教室智能环境监控系统&#xff0c;其系统框图如下图2.1。在此拟由CC2530单片机作为核心进行设计。同时结合多种传感器&#xff0c;如温度传感器&#xff0c;用来检测环境的温度。光照传感器&#xff0c;用来通过检测光照强度&…