作者:Georgios Konstantopoulos
内容
简介
为什么零知识证明很重要?
为什么ZKPs很慢,我们如何使其快速?
硬件问题
总结
零知识密码学是过去50年计算机科学中最引人注目的创新之一。零知识证明(ZKPs)具有独特的属性,使其成为各种区块链扩展和隐私解决方案的重要组成部分,包括像StarkNet这样的ZK rollups,像Aztec这样的私有ZK rollups,以及像Mina、Filecoin和Aleo这样的第一层链。
由于大量昂贵的数学运算,ZKPs的生产速度慢且成本高。然而,随着现场可编程门阵列(FPGA)和特定应用集成电路(ASIC)等专门硬件的使用,它们可以被加速10-1000倍。
随着用户寻求更有表现力的、高性能的和私有的计算,用ZKPs证明的语句的复杂性将增加。这将导致证明生成速度变慢,需要使用专门的硬件,以便及时生成证明。
硬件的操作者将需要为他们的工作得到补偿,类似于比特币矿工。最终,一个完整的ZK挖矿和证明行业将显现出来,首先是业余爱好者在他们的CPU上生成证明,然后是GPU,然后是FPGA。与比特币相比,我们预计ASIC可能需要很长的时间才能看到采用,如果有的话。
零知识证明有两个主要的使用情况。
外包的可验证的计算
假设你有一些昂贵的算力,但由于你所使用的平台(如你的笔记本电脑,树莓派,甚至以太坊)的限制而无法运行计算。
你必须在第三方服务上运行该计算,而不是在你的平台上运行该计算,该服务可以快速而廉价地返回给你该计算的输出(例如AWS的Lambda函数,或像Chainlink这样的Oracle服务)。
通常,你需要相信计算已正确执行,从而允许提供者输出无效结果,并可能带来灾难性后果。
ZKPs允许第三方提供者也输出一个计算完整性的证明,保证你收到的输出是正确的。
私有计算
如果你有一个在本地运行并不昂贵的硬件计算平台,但你想隐藏它的一部分,怎么办?例如,如果我想告诉你我知道第 1000 个斐波那契数而不告诉你数字,或者想说服你我在不透露金额或我的身份的情况下发送了付款怎么办?
ZKPs允许你有选择地隐藏计算语句周围的部分或全部输入。
上述两个用例都以多种形式体现在加密货币行业中(其中包括):
第2层的扩展:可验证的计算与ZKPs允许L1s将交易处理外包给链外高性能系统(又称第2层)。这使得区块链可以在不影响安全性的情况下进行扩展。作为一个例子,StarkWare正在建立一个可扩展的智能合约平台,StarkNet,使用一个特殊用途的虚拟机来运行ZK友好的代码。Aztec还使他们的第2层程序能够私下运行,不会泄露用户交易的任何信息。
私有的L1s:像Aleo、Mina和Zcash这样的L1链允许交易人使用ZKPs隐藏发送者、接收者或金额,可以是默认的(Aleo),也可以是选择加入(Mina和Zcash)。
去中心化的存储:Filecoin使用ZKPs(在GPU上运行)来证明网络中的节点正确存储数据。
区块链压缩:Mina和Celo使用ZKPs将同步到链的最新状态所需的区块链数据压缩成一个小证明。
鉴于上述情况,可以说,随着加密货币采用的增加,将需要ZKPs,以适应用户对性能和隐私的更多需求,以及新类型的应用程序和协议。
ZKPs从根本上允许可扩展的私人支付和智能合约平台蓬勃发展,但引入了非微不足道的开销,这在历史上阻碍了其采用。
证明一个计算首先需要将其从经典程序编译成ZK友好格式。这可以通过手动重写代码来完成,以使用像Arkworks这样的低级库,或者使用像Cairo或Circom这样的领域专用语言,将其编译成必要的原语来生成证明。
更昂贵和复杂的操作会导致更长的证明生成时间。同样常见的是,有些操作对ZK不友好(例如SHA或Keccak中使用的位操作),导致在经典计算机上可能是廉价操作的证明生成时间很长。
一旦你的计算是ZK友好的形式,你就可以选择一些输入并将其发送给一个证明系统。有许多证明系统,有些是以其论文作者的名字命名的(如Groth16, GM17),有些则有更有创意的名字(PLONK, Spartan, STARK)。它们的共同点是,它们接受一个以ZK友好格式表达的计算,以及一些输入,并输出一个证明。
根据不同的证明系统,证明的生成过程可能有所不同,但瓶颈最终总是在其中之一:
大数向量(场或群元素)的乘法,特别是变基和定基的多标度乘法(MSM);或者,
快速傅里叶变换(FFT)和反FFT(尽管有无FFT证明系统的技术)。
在同时存在FFT和MSM的系统中,大约70%的生成证明的时间花在MSM上,其余的时间由FFT主导。
MSM和FFT都很慢,但有办法提高其性能:
MSM的并行程度令人尴尬,可以通过在多个线程上运行来加速。然而,即使在数百个内核上,如果每个元素向量有225个长度(即3300万个元素,对于像zkEVM这样的应用来说,这是一个保守的复杂度概算),乘法最终仍然需要大量的时间。这意味着经常重复相同的操作,并使设备上的大部分可用内存饱和。简而言之,MSM需要大量的内存,即使在严重并行化的情况下仍然很慢。
FFT在很大程度上依赖于算法运行时数据的频繁洗牌。这使得它们很难通过在一个计算集群中分配负载来加速,如DIZK中所示。此外,它们在硬件上运行时需要大量的带宽。洗牌意味着你需要“随机”加载和卸载元素,例如,在内存为16GB或更少的硬件芯片上加载一个超过100GB的数据集。虽然硬件上的操作非常快,但通过电线加载和卸载数据的时间最终会大大降低操作速度。
简而言之:
MSM具有可预测的内存访问,可以进行大量的并行化,但由于需要原始的计算量和内存,其成本仍然很高。
FFT的内存访问是随机的,这使它们对硬件不友好,而且自然很难在分布式基础设施上运行。
我们在解决大型MSM和FFT的缓慢性方面看到的最有希望的工作是PipeZK。在他们的论文中,作者描述了一种使用Pippenger算法使MSM更便宜的方法,以跳过重复计算。他们还描述了一种“ unroll”FFT的方法,这样就可以在不进行大量洗牌的情况下进行,由于现在可预测的内存访问模式,可以在硬件上提高速度。
假设上述方法解决了每种算法的基本瓶颈问题,那么问题就来了。什么是与高度优化的MSM和FFT算法一起闪光的最佳硬件,以加速ZKP生成?
上述加速技术可以在多种硬件技术上实现。GPU、FPGA或ASIC。但哪一个是最好的选择呢?
要回答这个问题,我们首先要承认,ZKPs仍然处于发展的早期。在系统参数(如FFT宽度或元素的比特大小)或证明系统的选择上仍然没有什么标准化。
由于这些因素,FPGA有两个核心特性,使其在ZK背景下比ASIC更受欢迎:
我们还预计FPGA的表现将超过GPU,原因类似于它们在机器学习和计算机视觉领域的蓬勃发展:
硬件成本:一块顶级的FPGA(领先的工艺节点、时钟速度、能源效率和内存带宽)比一块顶级的GPU要便宜3倍左右。全球对GPU的需求进一步加剧了这个问题。
电源效率:FPGA的能效比GPU高10倍以上,其中一个很大的原因是GPU需要连接到主机设备上,而主机设备往往要消耗大量的电能。
鉴于上述情况,我们预计市场上的获胜者将是那些专注于FPGA而不是ASIC或GPU的公司。然而,如果只有一个或几个ZK L1或L2最终达到主导规模,并且ZK证明系统稳定在一个单一的实现上,那么ASIC战胜FPGA的可能性就会更大。但如果它真的发生的话,我们可能离这种情况还有好几年。
2021年,比特币矿工的净收入超过150亿美元,以太坊矿工刚刚超过170亿美元。零知识证明最终会成为网络上计算完整性和隐私的事实媒介,这是可信的。在这种情况下,ZK矿工/provers的机会可能与工作量证明挖矿市场的规模相似。
ZKPs很慢,需要硬件加速才能在复杂的计算中变得可行。我们认为,对ZK硬件加速最重要的技术是FPGA,而不是GPU(由于成本和能源效率)或ASIC(由于其不灵活和长迭代周期)。