作者: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 设计的帮助。