1. 引言
零知识密码学为计算机科学领域近50年来最显著的创新之一。Zero Knowledge Proofs(ZKPs)的独特属性,使其成为很多区块链扩容和隐私解决方案中的基本组件,如:
由于需要大量的expensive数学运算,ZKP的生成是slow和expensive的。但是,借助特殊硬件,如:
- Field Programmable Gate Arrays(FPGAs)
- Application Specific Integrated Circuits(ASICs)
可实现10~1000倍的加速。
用户在追求expressive、性能、以及隐私计算时,ZKP中待证明的statement的复杂性也将随之增加。这将导致更慢的proof生成速度,因此,有必要使用特殊硬件以便能够及时生成proof。
硬件运营商的工作需要得到补偿,就像比特币miners一样。最终,一个完整的ZK mining和proving行业将显现出来,首先是爱好者在他们的CPU中生成证明,然后是GPU,然后是FPGA。与比特币不同的是,我们预计ASIC可能需要很长时间才能被采用。
2. 为什么零知识证明很重要?
零知识证明主要有2大用途:
- 1)可验证算力外包
- 2)隐私计算
上述2个用途在加密行业中以多种形式表现出来:
- 1)Layer 2扩容:ZKP+可验证计算,使得L1可将交易的处理外包给 链下的高性能系统(即L2)。使得可在不牺牲安全性的前提下,实现区块链扩容。如StarkWare构建了可扩容智能合约平台;StarkNet使用特定用途的虚拟机Cairo来允许ZK-friendly code;Aztec也支持隐私地运行其L2程序,不会泄露用户交易的任何信息。
- 2)隐私L1链:类似Aleo、Mina、Zcash这样的L1链,支持交易方使用ZKP隐藏付款人、收款人或金额信息,Aleo是默认就隐藏的,而Mina和Zcash是可选隐藏。
- 3)去中心化存储:Filecoin通过在GPU上运行ZKP,来证明网络中的节点正确存储了数据。
- 4)区块链压缩:Mina和Celo使用ZKP来将 同步到链最新状态所需的链上数据 压缩为 a small proof。
综上所述,可以肯定地说,随着加密货币的推广,将需要ZKP来适应用户对性能和隐私以及新型应用程序和协议的日益增长的需求。
ZKP从根本上支持 可扩展的隐私支付和智能合约平台的蓬勃发展,但阻碍其发展的是使用ZKP所带来的non-trivial开销。
2.1 将零知识证明 用于 可验证算力外包
受限于平台(如笔记本、Raspberry Pi,甚至以太坊)能力,某些计算昂贵或者无法在本平台上运行。此时,可由第三方服务商运行该计算,并快速、便宜地将计算结果返回(如 AWS Lambda function 或者 类似Chainlink的oracle服务)。
通常,你需要相信计算已正确执行,从而允许第三方服务商输出无效结果,从而可能产生灾难性后果。
ZKP允许第三方服务商在输出结果的同时,附加一个计算完整性的证明,使你相信所收到的结果是正确的。
2.2 将零知识证明 用于 隐私计算
若在本地运行某计算并不昂贵,但想要隐藏其中的某些部分呢?如,如果我想告诉你我知道第1000个斐波那契数,而不告诉你具体的数字,或者说服你我在没有透露金额或身份的情况下已完成了付款,该怎么办?
ZKP允许你有选择地隐藏计算statement周围的部分或所有输入。
3. 为什么ZKP很慢,如何使其变快?
证明某个计算,需要先将传统程序 翻译为 ZK-friendly格式的程序。翻译方法有:
昂贵、复杂的运算越多,意味着生成proof的时间更差。某些运算并不是ZK友好的(如SHA或Keccak中的bitwise运算),从而使得这些在传统电脑中cheap运算,生成相应proof的时间确很长。
一旦计算是ZK友好的,可选择某些输入发送到proof system。当前有很多类型的proof system:
这些proof system的一个共同点在于都是以ZK友好的形式表达的,根据输入,可输出a proof。
不同的proof system,生成proof的流程可能会不同,但是,基本的瓶颈无非是二者之一:
- 1)Multiplications over large vectors of numbers(为filed或group elements),特别是 variable-base and fixed-base multi-scalar multiplications (MSMs)。
- 2)Fast Fourier Transforms(FFTs)和 Inverse FFTs。当前有一些FFT-less proof systems:
在某些既有FFT又有MSM的proof system中,生成proof所需时长的约70%用于计算MSM,剩下的大部分则用于计算FFT.
尽管MSM和FFT都很慢,但是仍有一些办法可改进其性能:
- 1)MSM:具有易并行的特征,可通过多线程来加速。但是,即使有数百个核,若每个vector中有 2 25 2^{25} 225个elements(即3千3百万个元素,对于zkEVM之类的应用程序来说,这是一个保守的复杂度标准),相应的乘法运算将耗费很多时间。这意味着若重复相同的运算,设备上可用内存将饱和。简单来说,MSM需要大量内存,当高度并行化时,将仍是slow的。
- 2)FFT:在算法运行时,强依赖于频繁地data shuffling。使得FFT很难通过将负载分发给计算集群来实现加速,具体见2018年论文 DIZK: A Distributed Zero Knowledge Proof System。
此外,在硬件上运行FFT时,需要很多带宽。shuffling意味着需要“随机地”从 具有约16GB内存的硬件芯片内的 >100GB 数据集 中加载和卸载元素。当硬件内的运算非常快时,通过wires加载和卸载数据的时间最终将减缓拖累计算速度。
简而言之:
- 1)MSM:具有可预测的内存访问,支持高度并行化,但是由于其需要计算的raw amount和所需的内存,计算MSM的开销仍然很高。
- 2)FFT:具有随机内存访问,使得其对硬件不友好,使其天然地不适合运行在分布式架构中。
我们在解决大型MSM和FFT的缓慢性方面看到的最有希望的工作是PipeZK。在其2021年论文PipeZK: Accelerating Zero-Knowledge Proof with a Pipelined Architecture中,作者描述了一种使用Pippenger算法跳过重复计算的方法,使得MSM计算更便宜。同时,在PipeZK论文中,描述了一种“unroll” FFT的算法,使得可大幅减少shuffling的数量,由于采用了now-predictable内存访问模式,大幅改进了硬件上的运行速度。
假设以上方法解决了MSM和FFT算法的核心瓶颈问题,那么接下来的问题是:
使用高度优化的MSM和FFT算法来加速ZKP生成的最佳闪存硬件是什么?
4. 硬件问题
以上加速技术可在多种硬件上实现:
- GPU
- FPGA
- ASIC
但是哪种硬件是最优选择呢?
当前ZKP仍处于早期发展阶段,对系统参数的标准化工作仍然很少(如FFT的width 或 element的bit-size),对proof system的选型也无相关标准。
基于以上因素,对于ZKP场景,FPGA有2个核心属性,使得其更优于ASIC:
- 1)“Write multiple times” VS “Write once”:ASIC上的业务逻辑是write-once的。若有任何ZKP逻辑修改,需重头开始。FPGA可在1秒内re-flash,支持re-flash无数次,这就意味着可在 运行不兼容proof system的不同链之间 复用相同的硬件(如想要跨链extract MEV),并随着ZK“meta”的变化而灵活地适应。
- 2)更健康的供应量:ASIC的设计、制造和部署通常需要12到18个月或更长时间。而FPGA的供应链是健康的,如Xilinx这样的领先FPGA供应商,允许从网上批量下单(即无需其它联系)并在16周内到达。这允许以FPGA为中心的运营在其产品上有更紧密的反馈回路,并通过购买和部署更多FPGA来扩大其运营。
我们还预计FPGA的性能将优于GPU,原因与它们在机器学习和计算机视觉领域蓬勃发展的原因类似:
- 1)硬件开销:顶级FPGA(领先的处理节点、时钟速度、能效和内存带宽)比顶级GPU便宜约3倍。全球对GPU的需求进一步加剧了这一问题。
- 2)功耗效率:FPGA的能耗要优于GPU >10倍,主要原因在于GPU需要连接到a host device,这通常将耗费大量电量。
基于以上原因,我们认为市场上未来的赢家将是:FPGA > ASIC(或GPU)。若未来仅有一个或少量ZK L1或L2方案占据了主导规模,ZK proof system将稳定围绕在某单一实现,则可能ASIC将超过FPGA。但是目前来看,数年内不会有该情况发生。
5. 小结
2021,比特币矿商的收入超过150亿美元,以太坊矿商的收入刚刚超过170亿美元。零知识证明最终成为网络上计算完整性和隐私的事实媒介,这似乎是合理的。在这种情况下,ZK miners/provers 的机会可能与工作量证明采矿市场的规模相似。
ZKP速度较慢,需要硬件加速才能实现复杂计算。我们认为,对ZK硬件加速最重要的技术是FPGA,而不是GPU(受限于成本和能效)或ASIC(受限于其不灵活和迭代周期长)。