原文:Cambrian Explosion of Cryptographic Proofs
翻译及校对:「Starknet 中文」社区
加密证明可验证计算并提高区块链网络中的交易完整性。
L2 区块链使用加密证明生成聚合交易的可验证证明来实现可扩展性。
零知识证明(ZKP)在不泄露额外信息的情况下进行验证,但在隐私方面的用途各不相同。
加密证明涉及到算术化和低次数约束等技术方面。
随着区块链技术成熟,加密证明可能会占据主导地位,从而促进可扩展性、透明度和隐私。
注意:本文基于 StarkWare 联合创始人兼总裁 Eli Ben-Sasson 教授在第 13 届巴伊兰(BIU)密码学冬季学校的演讲。BIU 冬季学校专注于密码学和区块链技术的最新进展。在这里可以找到 Eli Ben-Sasson 教授的讲座。
C.S.Lewis 将完整性定义为「即使没人盯着,也会做正确的事情」。在区块链中,加密证明正是用于确保一些计算过程在没有人看着的情况下,也能正确完成。
在本文中,将探讨什么是加密证明,它们在区块链中的使用方式,以及实现之间的一些关键差异。先从定义开始。
加密证明是一组数学和密码协议,可用于断言计算的完整性。
关于加密证明可以实现的功能的一个很好的例子,在1991年的一篇具有里程碑意义的论文中有所描述,该论文题为《在多项式对数时间内检查计算》(Checking Computations in Polylogarithmic Time),作者为 L. Babai, L. Fortnow, L.A.Lewin 和 M. Szegedy。作者提出一个协议,其中「一台个人电脑可以监控一组超级计算机,这些超级计算机具有强大功能但不可靠的软件和未经测试的硬件」。这意味着一台计算能力有限的机器可以确认一组计算能力强得多的计算机所做计算的完整性,即使控制这些计算机的一方是恶意的,或者有动机误报这些计算的输出。
过去的十年,我们见证了半实用和实用证明系统的快速发展,各种应用确保计算的隐私、安全和完整性。尽管在 Web2 中和 Web3 中,完整性同样重要的,但由于各种原因,所有使用通用加密证明系统的产品都可以在 Web3 中的区块链上找到,这是因为区块链具有开放透明的特性,并且区块链更倾向于数学完整性,而非基于人的完整性。要了解证明如何帮助扩展区块链,我们首先需要回顾一下区块链是如何运作的。
如今,当在 Solana、以太坊或 Cosmos 区块链上发送一笔交易时,网络中的每个验证器都会接收并执行该交易。效率很快就变得低下。随着去中心化的发展,用于将每笔交易纳入网络历史的计算资源将随着活跃验证器数量的增加而线性增长。
一些项目(如 Aztec、Starknet)旨在通过使用加密证明来解决这个可扩展性问题。因建立于 L1 区块链上(如以太坊),这些链被称为 L2 有效性证明 Rollup。这些 L2 Rollup 背后的想法是,依赖于加密证明来确认链下计算的完整性,以及状态更新和交易集合的有效性。验证长时间计算是否已完整执行的能力,代表了分布式网络吞吐量的根本性范式转变。网络中的众多计算机不再简单地重新执行每个计算步骤,而是仅进行验证。且并不需要超级计算机,这些可以是普通的、性能较弱的计算机。
对大量计算完整性的验证是由 L1 网络(如以太坊)的可靠节点执行的。在这种情况下,根据上文提到的 1991 年论文的预言性描述,L1 网络中的验证器扮演了「单一可靠个人电脑」的角色,而 L2 证明器则在某种程度上成为了一台超级计算机,令人惊叹的是,尽管其执行环境是未经测试的硬件和可能不可靠的软件,但它依然实现了绝对的完整性和可靠性。
加密证明的快速发展,这些系统在区块链中应用不断增长,实现这些证明的不同加密协议层出不穷。下面我们可以看到许多目前在 Web3 中使用的项目的可视化展示。
上述项目仅使用了我们已知的密码证明系统的一小部分(至少在理论实现中)。
由于可选方案众多,了解每种实现的优缺点显得尤为重要。许多细节非常技术性,但理解这些细节对于了解哪些方案可能引领区块链和 L2 的下一代发展具有重要意义。
你可能经常听过项目抛出术语**「零知识」证明**(或 ZKP)。尽管这个术语颇具吸引力,且零知识证明在保护区块链隐私方面具有巨大潜力,但大多数 Web3 L2 有效性证明 Rollup 并没有使用具有「零知识」这一密码学特性的证明,而是依赖于加密证明的可扩展性。让我们简要讨论一下加密证明中的隐私性和可扩展性。
ZKP 是一种允许一方验证特定计算是否正确执行的证明,且无需泄漏该计算的输入(例如密码、交易的财务细节,医疗数据等)。因此,除了显著降低验证成本(源自加密证明的特性)之外,我们还获得了隐私保护。
在了解项目声称使用 ZKP 时,弄清楚它们具体的含义非常重要。尽管大多数基于加密证明的区块链项目都声称其技术「基于 ZKP」,但实际上,它们的解决方案并没有涉及隐私保护方面的考虑。
在对上述图像进行修改后的可视化中,我们可以看到大多数项目更关注可扩展性而非隐私。
接下来,让我们探讨所有证明都使用的三个更为技术性的概念:算术化、低次数性约束以及密码学假设。
当观察一个系统需要证明的一系列计算时,将这些计算问题转化为代数问题是明智的选择。加密证明中的算术化是指在有限域上使用算术运算来表示数学概念和运算的过程。
从高层次来看,这意味着将任何命题表示为代数方程,即多项式。在计算机科学的术语中,将计算问题转换为这类代数问题的过程被称为「化归」,下图给出了一个示例。
将问题算术化有助于提高可扩展性,因为一旦用代数和多项式进行表述,就能更容易发现完整性是否被破坏。为了理解多项式的神奇之处以及它们在证明中的应用,最好学习一下STARK 101 课程或阅读这篇文章。
审视不同的证明系统,一个区分它们的因素是它们执行算术化的方式。有些可能使用整数环上的模算术(RSA 环),另一些可能使用椭圆曲线和/或更复杂的方法(格密码学、编码密码学和多元多项式)。
所有加密证明系统中都有某种形式的低次数性约束,这是它们之间的一个关键区别因素。
低次数性约束是指确保多项式(作为算术化过程的一部分生成的代数方程)的次数低于某个阈值的过程。(提醒,多项式中的次数等于其中出现的项的最大次方。)
低次数性约束对完整性和安全性很有必要。正如上文所述,错误地接受一个错误证明的概率与选择的多项式的次数有关。而且,这些系统中采用低次数多项式,是因为它们具有一些良好的数学特性,使得系统更加高效。
多项式承诺方案(PCS)是一种加密协议,允许在多项式上进行高效且可验证的计算。它使一个称为提交者(committer)的参与方能够在不泄露其完整细节的情况下对一个多项式作出承诺,而另一个称为验证者(verifier)的参与方可以在后续验证多项式承诺的属性。
不同的证明系统使用不同的 PCS 来创建和验证证明。STARK 和 Risc0 使用的是 FRI 承诺方案,而 Groth16 和 PLONK 使用的是 KZG 承诺方案。通常,这些承诺方案之间的区别包括创建证明的成本、验证证明的成本以及证明的大小。
上图展示了不同系统之间的优缺点。STARK 证明系统使用 FRI 协议确保多项式的低次数。在这个系统中,证明器与验证器进行迭代交互,并承诺新的多项式,使得每个新多项式的次数是前一个多项式次数的一半。PLONK 系统使用基于椭圆曲线数学的多项式承诺(比如 KZG)。
此外,某些系统可能需要可信设置。可信设置是一种需要生成特定私密参数的安排。其挑战在于这些参数原像要保持私密。如果不能保证这一点,整个证明系统就极其脆弱,从而可能生成虚假证明。
通常会举行特殊的可信设置「仪式」,多个参与方私下创建随机元素并将其组合获得最终参数。如果这些参与方中,即使只有一个成功地销毁了其提交的随机元素,则该设置就可以认为是安全的。
最后,追踪这些系统使用的其它加密假设也是至关重要的。
比如,其中一些系统依赖于椭圆曲线数学(如 BulletProofs 和 Halos)或指数知识(如 Groth16 和 PLONK 等),这些系统容易受到量子计算机的攻击。
另一方面,还有一些系统使用抗量子计算机攻击的抗碰撞哈希(如 STARK 和 ZKBoo 等)。
从上述讨论可以看出,有大量的加密证明方法可以用来实现可扩展性和透明度(或隐私)。虽然有些证明在短证明中非常方便(如 Groth16),但对于大规模计算,其它系统可能更适合(Ben-Sasson 教授认为 STARK 就非常合适)。然而,随着生态系统越发成熟,我们会看到某个加密证明方法得到广泛应用。
愿最佳系统胜出!