区块链上的零知识证明技术及其典型算法、工具
零知识证明(ZKP)是由Goldwasser等人首先提出的,在密码学领域有着重要的应用。它能够保证证明者在不提供任何有用的相关信息的情况下,使验证者相信一个语句是真实的。零知识证明允许证明者产生一个简短的证明π,可以说服任何验证者相信证明者的公共输入x和秘密输入w上的公共函数f的结果是y = f(x,w)。w通常被称为见证输入或辅助输入。零知识证明保证了如果证明者在计算结果时作弊,验证者以压倒性的概率拒绝,而证明过程不会透露关于秘密w的额外信息,包括证明者的数据、证明者的身份和验证者的身份等。在区块链应用中,验证者可以使用ZKP来验证证明者在区块链环境中是否有足够的交易量,而不会泄露任何私有交易数据。
零知识证明作为一项重要的密码学技术,在许多领域有着广泛应用,例如隐私保护、区块链智能合约的验证等。为了更深入地理解零知识证明的多样性和适用性,接下来本文将进一步探讨零知识证明的不同类型,包括Snark(Succinct Non-Interactive Arguments of Knowledge)、Stark(Scalable Transparent ARguments of Knowledge)以及Bulletproof等。每种类型都在特定情境下具有独特的优势和应用。
零知识证明分类
在当前的密码学研究和实践中,零知识证明(ZKP)技术已成为确保数据隐私和完整性的关键工具。零知识证明允许一方(证明者)向另一方(验证者)证明某个陈述的正确性,而无需透露除该陈述正确性之外的任何信息。由于零知识证明底层的构造繁杂,本文更强调零知识证明在区块链上的应用,故本节将深入探讨区块链上三种代表性以及使用范围最广的零知识证明构造:ZK-Snark、ZK-Stark和Bulletproof。这三种构造方法体现了零知识证明技术在安全性、效率和实用性方面的不同技术特点及发展趋势。ZK-Snark是一种高度压缩且非交互式的零知识证明,适用于区块链和隐私保护应用。其主要优点是极高的验证效率和低通信开销,但这种优势的代价是需要一个可信的设置阶段,这可能引入了中心化的风险和潜在的安全漏洞。相比之下,ZK-Stark提供了一种无需可信设置的零知识证明方法,能够在不牺牲透明度和安全性的前提下提供可扩展性。它利用了密码学中的哈希函数和其他非对称技术,因此理论上在对抗量子计算攻击方面具有更强的韧性。然而,这种方法通常会带来更大的证明尺寸和计算开销。最后,Bulletproof是一种新型的非交互式零知识证明技术,不需要可信的设置过程,适用于范围证明。
ZK-Snark
ZK-Snark:一个非交互式论证系统R的ZK-Snark是指满足以下条件的(G, P, Ver, Sim):
完备性:对于关系 R 的一个真实陈述,一个诚实的证明者 P 拥有一个能够说服验证者V有效的证据。
知识可靠性:存在一个提取器,每当P生成一个有效的论证时,就能计算出一个证据。提取器可以完全访问P的状态,包括任何随机的硬币,以确保对手不能通过作弊或不真实的证明欺骗系统。
简洁性:一个非交互式论证,其中验证者在 λ + |u| 的多项式时间内运行,并且证明大小是 λ 的多项式,称为预处理 Snark。如果公共参考字符串是 λ 的多项式,则非交互式论证是一个完全简洁的 Snark。
统计零知识:统计零知识是一种强零知识证明,在这种证明中,对于任何可能的输入,验证者从证明者那里获得的信息与他在不进行任何交互时可以模拟的信息在统计上是无法区分的。具体来说,这意味着存在一个模拟器,该模拟器在不与证明者交互的情况下,能够生成一个与实际交互记录在统计上无法区分的记录。
ZK-Stark
Eli Ben-Sasson于2018年提出了一种称为ZK-Stark的新型零知识证明[2]。ZK-Stark是ZK-Snark协议的改进版本。“Stark” 这个缩写代表 “Scalable Transparent Argument of Knowledge”-即可扩展透明知识论证。“可扩展” 指的是证明者的运行时间最多是计算大小的准线性级别、验证时间是计算大小的对数级别。也就是说,ZK-Stark是一种针对可用对数空间,使用可计算电路表示陈述的非交互零知识论证。“透明”指的是所有验证者信息只是公开抽样的随机硬币。ZK-Stark不需要可信设置程序来实例化证明系统,而是依赖于基于哈希冲突的对称加密算法,这种特性使其更加高效,并且完全摆脱了ZK-Snark中可信阶段产生的参数,能够有效抗击量子计算机对算法的威胁。ZK-Stark通过AIR(algebraic intermediate representation,代数中间表示)进行约束的表示,Stark证明系统将在任何时间计算的状态都包含在从有限域取值的寄存器元组中,在每个周期更新状态。而代数执行轨迹(AET)则是按时间顺序排列的所有状态元组的列表。ZK-Stark可以有一个非常快的证明时间和验证时间,但证明大小过大。因此,它在投票系统、在线系统和其他一些需要识别步骤才能访问的服务中有着光明的前景。
Bulletproof
Bulletproof的构造思路如下:首先将电路中的乘法门约束和乘法门之间的线性约束利用 Schwartz-Zippel 引理[3]归约为一个多项式的某一特定项系数为零的问题,然后将该问题转化为内积论证(IPA)[4]的陈述表示形式,最后调用内积论证实现零知识证明。
Bulletproof提供了一种更有效的机密交易(CT)范围证明,主要应用于在加密货币领域如Zcash中。防弹技术建立在实现通信高效的零知识证明的技术之上,它们可以用来扩展多方协议,如多重签名或零知识紧急支付等,事实上,Bulletproof可以认为是基于IPA的Snark构造的一种。
零知识证明的应用
对于区块链的扩容问题,已成为增强区块链网络可扩展性的关键方案。Rollups通过在二层协议上处理交易并将结果传回主链,能够在提高性能和降低交易费用的同时,保持去中心化和安全性。在这一过程中,零知识证明尤为关键,因为它们允许在主链上对多笔交易的真实性进行一次性验证,而无需逐个验证每笔交易的细节。而在跨链技术方面,ZK Bridge展示了零知识证明技术在实现不同区块链之间资产与信息传递的潜力。与传统的跨链桥相比,ZK Bridge的优势在于它不需要引入额外的信任假设,并且可以实现高效率的交易验证,从而降低了计算和存储成本。
扩容
随着以太坊生态的日渐繁荣,以太坊主链无法承受庞大的生态,导致整个以太坊网络拥堵。Rollup 是为了缓解 Layer1 扩容问题所提出的可扩展性的方案,通常被称为链下解决方案。它扩展了以太坊并继承了以太坊的安全保证。它的主要目的是在提高以太坊的性能并且降低 Gas费用的同时,保留分布式协议的去中心化和安全性特点。Rollup通过将Layer1的部分数据转移到二层协议上进行处理,然后将处理结果返送到Layer1上,从而增强区块链网络的可扩展性。Rollups 会在其上的网络中将交易打包在一起并进行压缩,然后将打包后的交易发送到Layer1主网进行验证,通过一次性验证多笔交易,使得网络效率得到提高,同时增加了可被执行的交易数量,实现了网络扩容。但在这个过程中,需要保证L1的节点没有作弊上传虚假交易。
根据证明方法,Rollup 可以大致分为两类:乐观(optimistic)—Rollup 和ZK(零知识)-Rollup。Optimistic-Rollup的前提是所有交易均有效,除非另有证明。如果交易的有效性受到质疑,验证者需要提供欺诈证明,然后将其发送到主网络进行验证。如果发现无效,交易将被恢复。这种方法依赖于网络参与者彼此保持诚实,从而建立信任和警惕的平衡。但是当用户提供欺诈证据时,主网上的解决方案不会立即得到解决。这可能会导致从Optimistic-Rollup链中提取资产时出现延迟,等待时间从几天到甚至几周不等。而零知识证明可以很好地完成上述需求,在L1打包多笔交易后同时为这个过程生成零知识证明,验证者在Layer1上通过验证该证明后打包生成共识,完成扩容功能。ZK-Rollup则确保所有交易都经过验证,同时保持交易详细信息完全私密。这不仅增强了安全性,而且提供了所有用户都非常赞赏的更高程度的隐私。ZK-rollups的落地应用包括基于Snark的Scroll[551],基于Starknet的Starknet[6],混合Snark与Stark证明机制的Taiko[7]等项目。
跨链
跨链技术是一种使得加密资产在不同的区块链之间移动和储存的技术。当前市场上存在众多独立运作的区块链,例如比特币和以太坊,但它们之间缺乏直接的互通机制。若无跨链技术,资产将无法在不同链间转移。
ZK Bridge作为使用零知识证明技术的跨链桥梁,其最大特点是不需要引入额外的信任假设就可以适应多种不同类型的区块链。在这个解决方案当中,零知识证明是在区块链之外生成的,实际的验证则是在区块链上进行的。这样的做法大幅降低了区块链上的计算和存储成本,是当今市场上一种相当前沿且有潜力的跨链技术。目前,有几个项目正在发展 ZK Bridge 的生态系统,也就是开发基于零知识证明技术的跨链桥解决方案,但皆处于开发阶段。例如,Succinct Labs[8]、Electron Labs[9]、zkIBC[10]、Polyhedra Network[11]的 zkBridge[12] 等。Succinct Labs推出了Tendermint X,这是第一个开源的、高性能的Tendermint ZK轻客户端,它为Cosmos和Ethereum之间提供了一个无需信任的ZK桥接,标志着将Cosmos连接到Ethereum的实现。Polyhedra Network的zkBridge利用其独创的deVirgo协议,一种高效的分布式零知识证明协议,实现了令人印象深刻的性能优化和线性可扩展性。deVirgo协议的核心优势在于它几乎完美的线性可扩展性—在一个分布式计算网络中,随着计算资源的线性增加,证明的生成时间将成倍减少。deVirgo协议的这一特性特别适合处理大量数据或高频交易,使得zkBridge在处理跨链交易时,不仅保持了零知识证明的隐私和安全性优势,同时也确保了极高的吞吐量和低延迟,这对于金融交易和复杂的去中心化应用(dApps)来说至关重要。
挑战与未来展望
零知识证明技术仍然面临许多挑战,同时也衍生出众多研究方向。
较弱假设的挑战。ZKP的一个挑战是,是否可以在一些较弱假设下有效实施。例如,Zerocash中使用了ZK-Snark,但它需要一个受信任的第三方来进行设置和系统初始化。ZKP可以在没有受信任第三方的情况下实施,但这会影响ZKP的效率。因此,研究在没有受信任第三方的情况下有效实施ZKP是值得的。Spartan是一个引人注目的成果[13],它提供了一种无需可信设置的ZK-Snark,特别适用于解决算术电路满足性问题(R1CS)。它的特点在于,它能够在验证证明时产生低于线性的成本,而且不要求NP陈述的结构具有一致性。此外,Spartan实现了时间最优化的证明者,这在先前的ZK-Snark文献中几乎未被实现。Spartan应用了新技术,如计算承诺和一个加密编译器Spark,用于将现有的可提取多项式承诺方案转换为有效处理稀疏多项式的方案,这对于实现时间最优化的证明者至关重要。Spartan作为Rust库实现,并与最新ZK-Snark进行了实验比较,表现出多方面的优势,包括在无可信设置方案中具有较快的证明者速度,生成更短的证明,验证时间低,综合效率优秀。
零知识证明的硬件加速。零知识证明技术虽然被广泛认为是解决区块链主要问题的关键方案,但长期受制于其本身的高计算密集性导致的计算效率问题。正是基于这种背景,ZKP硬件加速成为解决 ZKP 效率问题的一个重要创新方向。ZKP 硬件加速涉及在专用硬件(如 GPU、 FPGA 和 ASIC)上实现 ZKP 算法的优化,使其能够更快地处理复杂计算,从而大幅提高 ZKP 的生成和验证速度。在 ZKP 的不同证明系统及其相关实现中,计算需求与资源开销各不相同。在众多证明系统中,有两种计算操作尤为耗时与昂贵,分别是多标量乘法(Multiscalar Multiplication-MSM)和快速傅里叶变换(Fast Fourier Transform-FFT)。CUZK[14]中提出MSM 算法占据了证明生成总运行时间的70%以上。随着新的 ZKP 框架 STARK 的发展,也有更多的证明是基于 FTT 算法为主。
多标量乘法(MSM)优化。MSM是一种在椭圆曲线密码学中常见的操作,它涉及对多个标量和椭圆曲线点的乘法与求和运算。虽然MSM 可以通过并行处理来加速,但即使在多核心的系统上,对于复杂的应用MSM 的运算仍然需要消耗大量的资源与时间。MSM 算法需要处理大量的元素与重复执行相同的操作。
快速傅里叶变换(FFT)优化。以STARK为代表的零知识证明系统大量用到了快速傅里叶变换(FFT)。这个算法用于高效计算序列的离散傅里叶变换(DFT)及其逆变换。FFT 的运行过程严重依赖于数据的频繁交换,数据交换过程中需要从大数据集中“随机”地传输元素,这在硬件内存有限的情况下尤为困难。尽管硬件操作本身非常快,但传输数据的时间却显著降低了整体操作速度。除此之外,FFT 算法通常需要将输入数据重新排列成特定顺序以执行变换,这可能需要大量的数据移动,对于大型FFT算法规模来说,这可能成为性能瓶颈。FFT 虽然是一种强大且广泛应用的算法,但在大型数据处理和分布式计算环境中,其性能和效率受到数据交换、带宽限制的显著影响。
基于 SNARK 的证明系统主要依赖于 MSM 算法,而 STARK 类证明则主要使用 FFT 算法。因此,目前的硬件加速主要是面向这两种加密算法的需求进行优化。MSM 对硬件的需求包括强大的并行处理能力、较大的内存容量。相比之下,FFT 对硬件的需求则包括高带宽、大内存容量、高效的数据访问模式。