这篇文章深入探讨了零知识证明(ZKP)及其在区块链技术中的应用,特别是 zkSNARKs、zkEVMs 和 zkBridges。
零知识证明↗ (ZKP) 代表了一类加密协议,它使得一个方(称为证明者)能够为一组值(称为见证值)生成知识证明。这些证明允许证明者向另一个方(称为验证者)证明其知识,且无需披露关于这些值本身的任何附加信息。
前述机制非常自然地扩展到证明计算完整性——换句话说,特定计算已正确和诚实地执行。计算中的每一个操作都可以表示为对操作输入和输出的约束。如果一个证明者提供了计算的输出,以及他们知道在计算中每个约束都具有有效状态值的证明,那么验证该证明相当于验证该输出是否针对某些输入被正确计算出来。因此,验证者能在不进行计算的情况下确保输出的有效性。
最显著的是,ZK证明在加密货币中被用来提升区块链的信任、隐私和稳定性。通过提高安全性而不妨害交易的完整性,ZK证明在这些去中心化系统中发挥着重要作用。在本博客中,我们将对zkSNARKs的景观和现实世界应用进行表面层次的 walkthrough。
具体来说,zkSNARKs↗ 是零知识简洁非交互知识论证的缩写。
ZK
:ZK 代表零知识。如上所述,它允许验证者验证证明者所做的证明是否有效。此外,验证者不会了解到证明中具体信息。这一特征确保了隐私的高度保护,因为它允许敏感信息保持隐藏,同时仍提供足够的合法性证明。S
:S代表简洁。这意味着证明的长度必须相对较小。多小呢?通常,这些证明的长度仅为几百字节。证明的小体积使得在仅几毫秒内实现超快的验证成为可能。N
:N 代表非交互性。这个特性无疑是zkSNARKs最重要的特性。非交互证明意味着证明可以在没有验证者任何交互的情况下生成。一旦证明被创建,它可以发送给验证者,后者可以确认或驳斥该证明。缺乏交互意味着该证明可以公开发布,任何人都可以验证,无需与原始证明者进行沟通。AR
:AR代表论证,与下一个字母有关。K
:K代表知识。与AR结合,字母“ARK”代表知识的论证。知识论证是一种证明,其中证明者说服验证者他们对某个信息的确切知识。其基于计算假设;对一个不诚实的证明者来说,让验证者相信一个虚假的陈述在计算上是不可行的。这与零知识特性不同,因为它更多关注于证明的有效性。zkSNARKs 之所以重要,主要是由于它们的非交互特性。在区块链上,与每个用户进行通信并让每个用户验证一个证明是不可行的。证明者更容易将证明发布到公共场所,任何人都可以验证,而无需与证明者进行回馈沟通。
由于以太坊的日益普及,交易时间变长,费用增加,扩展性成为了一个挑战。解决这些挑战的一种方式是使用zkEVMs↗和zkRollups来帮助解决这些问题。zkEVM 是将零知识证明与以太坊虚拟机结合的产物。它本质上使用ZKPs来证明zkEVM中发生了一笔交易。
更具体地说,zkEVM在第二层上,利用并扩展主要以太坊链的单独区块链。现在,可以上传智能合约,EVM执行智能合约字节码。为了证明与智能合约交互时发生了状态改变,zkEVM的ZK部分创建了一个非交互证明,任何人都可以验证该交易。
随着区块链中区块数量的增加,逐个区块地审查已变得在计算上不可行。zkRollups彻底解决了这个问题。简单来说,zkRollups将大量用户交易压缩成一个超级区块。它还在这个新块上附加了一个证明,使任何人都可以验证该新区块由大量交易组成。zkRollups↗为不断增加的区块数量提供了解决方案。
通过将大量交易“压缩”成一个块,它大大减少了存储在区块链上的数据量,从而提高了扩展性和效率。用户的每个交易并不是直接上传到区块链,而是先进行打包然后统一上传。
这是Polygon↗的解决方案:
Polygon 是zkEVM的首创者之一。Polygon是一个第二层扩展解决方案,使用zkEVM使用户互交,从而提高交易速度和降低交易费用。目前,主要的以太坊链每秒大约可以处理30笔交易(TPS)。通过将交易上传到Polygon,它们可以以每秒最多2000笔交易的速度被处理。为了达到这一速度,Polygon使用一个侧链,在其中大量交易通过zkRollup进行打包,然后再发送到主以太坊区块链,从而减少与主链的总通信。
除了更快的交易速度,每笔交易成本也降低了↗。Polygon通过使用zkRollups以同样的方式达成这一目标。由于与主以太坊区块链的互动最小化,每次交互的gas费用将在被打包的所有交易之间共享。这将一般约20美元的gas费用划分为每个用户几分钱。
随着越来越多的加密货币的出现,区块链生态系统多样化,交换和交流不同货币的需求也日益增强。由于每种加密货币都在自己的区块链上,crypto bridges被用来将货币从一个区块链转移到另一个区块链。目前,人们交易加密货币的两种流行方式是通过集中可信方或通过验证共识。
在不同加密货币之间进行交易的集中方与现实世界的货币兑换相同。银行或可信方允许用户存入某些Coin以换取其他Coin。这些可信方作为市场做市商。然而,这种方式存在一些问题。首先,为了进行这种交易,市场做市商必须拥有足够的两种货币(即流动性)来进行交易。以以太坊和Polygon MATIC为例,如果想将以太坊兑换为MATIC,则集中可信方必须拥有足够的MATIC货币,以满足交易所用以太坊的价值。如果没有人将MATIC交易回以太坊,则该过程停止:没有足够的MATIC来覆盖以太坊的Coin。其次,如果中央方不可信,他们可能会窃取所有存入的Coin,然后消失无踪(即脚裤式盗窃)。
以太坊与Polygon MATIC 之间的 zkBridge。
解决加密货币兑换问题的另一种方案是通过zkBridges↗。它将ZK证明与加密桥结合,以提供在不同使用EVM的加密货币之间的交换,而无需中介可信方。让我们以以太坊与Polygon之间的交易为例。
当交易发生,并且在主以太坊区块链上生成一个区块时,需要进行验证。为实现这一点,验证者通过使用他们自己的密钥来对区块进行签名,以创建一个共识证明↗。在一定数量的验证者签署区块并验证签名后,便达成了区块确实有效的共识。
在实现共识证明后,针对特定块和交易创建一个Merkle证明,并将其发送到Polygon链上的智能合约。由于智能合约之间无法跨链进行通信,因此仍然使用了中间方。然而,这些中间方更可信,因为它们无法在不使证明失效的情况下扰乱证明。
Succinct Labs利用这一点,使用修改过的共识证明和Merkle证明,在使用EVM的加密货币上实现了zkBridge。对于Succinct Labs↗,共识证明是通过使用512名验证器生成的,验证器每27小时轮换一次,以对主要以太坊链上的所有新区块头进行签名,使用Groth16↗ (被Tornado Cash使用)。由于Groth16的常量时间证明验证,这些证明可以在链上非常高效地验证。当证明的有效性被确认后,使用Merkle证明在跨链中转发交易,从而完成zkBridge并允许货币交换。
在ZK证明或ZK电路的开发中,通常选择Rust作为书写语言。然而,这需要对Rust语言以及ZK电路和库有一定的理解。目前,大多数ZK库相当基础。开发者需要阅读大量文档,仅是为了了解如何安全地使用某个函数。
因此,ZK技术的创新进展相对缓慢。ZK编程语言↗的目标是简化ZK电路的开发。通过将所有复杂的数学处理放在幕后,编写ZK电路可以当作是在普通编程语言中编写条件语句。这将允许那些对ZK电路运作原理不深刻理解的普通软件工程师高效地创建这些电路。
对于ZK编程语言的需求来源于这样的事实:编写ZK电路涉及大量的数学和加密操作。理解这些概念需要在加密学和数论等领域具有专业知识。于是,可能缺乏这些领域深厚背景的软件工程师会面临障碍。与使用ZK库来为条件语句创建约束不同,在Noir中编写的if语句会自动转换为电路条件。例如,要设置一个依赖于布尔值b
的值a
而不使用Noir,
let a = b*f(x) + (1-b)*g(x);
使用ZK编程语言,变得如此简单:
if b {
let a = f(x);
} else {
let a = g(x);
}
而没有背后的布尔代数。
Noir↗是由Aztec创建的一种ZK编程语言,旨在弥合软件工程师与ZK电路之间的差距。通过使用类Rust的语言和语法,开发者不必重新学习一种新语言,就可以轻松创建ZK电路。此外,Noir在其标准库中已经实现了许多有用的ZK小工具,包括Merkle证明、ECDSA、域方法等。例如,使用Merkle证明就这么简单:
use dep::std;
fn main(message : [Field; 62], index : Field, hashpath : [Field; 40], root : Field) {
let leaf = std::hash::hash_to_field(message);
let merkle_root = std::merkle::compute_merkle_root(leaf, index, hashpath);
assert(merkle_root == root);
}
但是,Noir并不将代码直接编译为ZK电路。在编译过程中,所编写的代码编译为一个称为抽象电路中间表示的中间阶段(ACIR↗)。它将所有代码编译为R1CS,用户可以选择最适合他们需求的证明系统。ACIR代码最终在抽象电路虚拟机(ACVM)上使用所选择的证明系统进行编译,这充当了ACIR编译器。
总体而言,zk-SNARKs为增强区块链系统中的隐私和信任提供了强有力的工具。通过多种多样的应用(zkEVMs、zkBridges、zk编程语言),它们能够满足区块链上广泛的需求。通过允许各方证明计算结果的完整性,ZK不仅为隐私应用打开了新的途径,也为委托计算提供了可能,因为外包的工作负载可以进行可验证的计算。
请查看零知识入门,第2部分↗以深入了解零知识及其在零知识支付、零知识硬件加速和zkVM等应用中的应用。
特别感谢同事Zellic工程师Mohit Sharma在本文中的帮助和贡献。
Zellic专注于保护新兴技术。我们的安全研究人员在最有价值的目标中发现了漏洞,从财富500强企业到DeFi巨头。
开发者、创始人和投资者信任我们的安全评估,以快速、自信和无重大漏洞的方式发货。凭借在现实世界的攻防安全研究中的背景,我们能够发现他人未能发现的内容。
联系我们↗,获取更好的审计。真正的审计,而非橡皮图章。
- 原文链接: zellic.io/blog/intro-to-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!