零知识证明介绍
在过去的十年中,称为“零知识证明”的密码学领域一直在迅速发展。它提供了构建应用程序的新范式,并使协议能够提高效率、安全性和隐私性。
让我们看看是什么让零知识证明领域如此令人兴奋,以及它帮助工程师解决了哪些问题。
无需信任的区块链和可验证性
区块链通常用于处理用户提交的交易。这些交易通常会触发区块链所需执行的一些计算。
为了使区块链是无需信任的(即不依赖于信任单独的一方),网络中的参与者必须可以验证交易是否有效,以及它们所含的计算是否正确执行。
验证交易是否有效通常需要数字签名验证 - 这需要验证交易的发送方确实是交易的发起人。验证交易的计算是否正确执行通常需要在本地重新执行交易。
可验证性的局限性
这种验证每个交易的方法在验证者无法重新运行计算的情况下会面临崩溃。 参与者出于某些原因可能无法重新执行计算,例如: (1)(出于隐私原因)某些数据可能不应当公开,或者(2)对于参与验证的计算机来说,重新执行所有交易可能太昂贵了 - 在考虑每秒有大量交易的高吞吐量区块链时,第二个原因尤其重要。
零知识证明的力量
零知识证明 (以下简称 ZKP) 有克服这些限制的神奇魔力。
ZKP 允许验证者验证计算结果,同时 (1) 保护计算中所使用的任何敏感数据的隐私,以及 (2) 验证比重新执行计算便宜得多。ZKP 的这两个性质分别称为 零知识 和 简洁性 。
ZKP 的上述特性在无需信任的区块链的可验证性方面非常有用。 如果没有 ZKP,验证者需要重新执行每笔交易的计算结果。这要求所有验证者都能看到每次计算中使用的所有(潜在敏感)数据,这也限制了整个系统的吞吐量。 使用 ZKP,一方可以执行计算,然后生成计算正确执行的证明。其他参与方可以通过验证证明是否有效来验证计算是否正确执行,而无需自己重新执行计算。 验证证明 (1) 不会泄露有关原始计算中使用的敏感数据的信息,并且 (2) 在计算上比重新执行原始计算便宜得多。这两个属性将为无需信任的区块链实现隐私和可扩展性。
电路、证明和验证器
在实践中,ZKP 在系统中的实现可能非常复杂,但在概览的层面,您需要了解零知识证明有几个组件:电路、证明和验证器。
电路是一个程序,它接收输入数据,并根据输入数据必须满足的一些“约束”来确保输入数据是有效的。输入数据可以是公开的(每个人都知道)、隐私的(只有证明者知道)或混合的(有些输入是公开的,有些是隐私的)。
证明生成可以用来确保满足电路。证明不会泄漏有关隐私输入的信息,并且非常之小。
验证器可以验真 (1) 证明是否有效,(2) 证明是否符合电路规定的约束(而不仅仅是虚假证明),以及 (3) 用于生成证明的公开输入是否与验证器使用的输入像匹配。请注意,验证器执行的此类检查通常是一种开销较低的计算
您可能会注意到,除了“有效证明”或“无效证明”之外,验证程序没有其他输出。请记住,验证器只是在确认其他计算的正确性 —— 在实践中,函数的“输出”实际上可能最终成为电路和验证器的附加输入。
电路、证明和验证器 — 一个例子
让我们以数独为例。假设有一个数独题,爱丽丝想向鲍勃证明她知道谜题的答案,但不想透露答案是什么。
在这种情况下,特定的谜题将是一个公开输入(Alice 和 Bob 都知道它),而解决方案是一个隐私输入(Alice 知道它,但会对 Bob 保密)。电路 将接受这两个输入,并通过以标准方法、逐行逐列地检查答案来断言答案是正确的。 电路在这个例子中,约束了隐私输入的答案确实是公开输入的谜题的解,并且电路只有在答案检查通过时才“满足”。
然后即可以生成一个 证明 ,说明爱丽丝知道满足特定谜题电路(公开输入)的隐私输入。
证明可以和谜题一起传递给鲍勃,然后鲍勃可以使用与数独检查电路相对应的 验证器 来判断证明是否有效,从而证明爱丽丝确实知道谜题的解。最重要的是,鲍勃没有获得任何关于爱丽丝所知道的解的信息,但他仍然可以验证她是否知道有效的解!
零知识证明和区块链
ZKPs 最近取得进展的主要原因是它在区块链中的应用。 去中心化区块链面临的两个关键挑战是隐私和可扩展性 —— 所有数据都是公开的,网络中的每个节点都必须在网络上重新执行每个计算。 ZKP 可以帮助解决这两个挑战。
虽然有一些项目利用 ZKP 的零知识特性来构建隐私保护的应用程序,但我们 Scroll 仅使用了 ZKP 的简洁性来扩容以太坊。
Scroll 和零知识证明
驱动 Scroll 的想法非常简单。如果我们可以使用以太坊智能合约来验证另一个版本的以太坊的所有计算呢?我们可以运行另一个网络,提供对以太坊虚拟机(“EVM”)的更快、更便宜的访问,而以太坊本身将提供验证所有计算所需的安全性,并确保另一个网络不会违反 EVM 规范。
“学习”和“技术”部分的其余部分更详细地讲解了其工作原理, 但简单理解,只需记住,零知识依赖于电路、证明和验证器。
在我们的架构中,电路(实际上是一组电路)对 EVM 的规则进行了编码,来“约束”对链状态更改的输入交易的可接受行为。 使用这个“zkEVM”,GPU 网络获取一组区块的交易并生成证明。 然后回到以太坊,智能合约将验证该批次交易的证明,证明需要与智能合约中所规定的电路相匹配。 如果确实满足,这些交易可以被认为是“最终确认的”,网络将向前推进,而我们已经为以太坊的发展创造了快速、安全和可负担得起的区块空间。
多项式承诺方案
多项式承诺方案是零知识证明系统(以及其他加密协议)的核心组成部分。
顾名思义,多项式承诺方案是承诺方案,其中要承诺的对象是多项式。这类方案的一个特殊属性是,多项式的计算可以通过仅访问多项式的承诺来验证。
承诺方案
A 承诺方案 是一种加密原语,涉及两方:承诺者 和 验证者。承诺者对值 vv 进行计算承诺 cc,并将其揭示给验证者。随后,承诺者可以揭示原始值,验证者可以验证承诺是否与所揭示的原始值相对应。
安全的承诺方案有两个属性:
- 绑定: 一旦发布承诺 cc,承诺者就无法找到与 vv 不同的值 v’v’ 与承诺 cc 相对应。也就是说,承诺 cc 将承诺者与他的原始价值 vv 绑定。
- 隐藏: 验证者无法从承诺 cc 中获知有关原始值 vv 的任何信息。也就是说,承诺 cc 隐藏了有关原始值 vv 的所有信息。
多项式承诺方案
多项式承诺方案 中,承诺者通过计算承诺 cc,对多项式 P(x)P(x) 进行承诺。与常规的承诺方案一样,承诺者稍后可以揭示原始多项式,验证者可以检查承诺是否与所揭示的多项式相对应。然而,多项式承诺方案还有一个额外的属性:承诺者可以在不透露多项式本身的情况下证明对所承诺多项式的特定计算。例如,承诺者可以证明多项式上的一点 P(a)=bP(a)=b, 而验证者可以仅使用承诺 cc 来验证这样的证明。
多项式承诺方案在零知识应用中非常有用。证明者可以使用这样的方案来证明他知道一些满足某些性质的多项式(例如,它通过某个特定的点 (a,b)(a,b)),而无需揭示潜在的多项式。
多项式方案有用的另一个原因是,承诺 cc 通常比它所表示的多项式小得多,因此可以认为是多项式 P(x)P(x) 的压缩。压缩的程度取决于特定的方案。例如,在 KZG 多项式承诺方案中,任意大小次数的多项式可以压缩为由单个群元素组成的承诺。
了解更多
KZG 承诺方案
使用最广泛的多项式承诺方案之一是 KZG 承诺方案。该方案最早由 Kate、Zaverucha 和 Goldberg 于 2010 年发布。
KZG 用于以太坊的 Proto-Danksharding, 也用于 Scroll 的证明系统。
本节将概述 KZG 承诺方案。
初步工作和符号表示
回顾一下多项式承诺方案的假设,我们需要对一些多项式 P(x)P(x) 进行承诺。我们假设多项式的阶数小于 ll.
KZG 承诺依赖于 椭圆曲线配对。假设 G1G1 和 G2G2 是两个阶为 pp 的椭圆曲线群,满足 non-trivial 双线性配对 e:G1×G2→GTe:G1×G2→GT。假设 gg 是群 G1G1 的生成元,hh 是群 G2G2 的生成元。我们使用符号表示为 [x]1:=x⋅g[x]1:=x⋅g 和 [x]2:=x⋅h[x]2:=x⋅h,其中 x∈Fpx∈Fp.
1. 可信设置
使用多方计算 (MPC) 在弱信任假设(N 个信任假设中为 1 个)的情况下,有一些已有的方法来执行可信设置仪式。有关可信设置如何工作的更多信息,请参阅 Vitalik 的这篇文章。
2. 承诺多项式
3. 证明求值
4. 验证求值证明
了解更多
- KZG polynomial commitments | Dankrad Feist
- Kate-Zaverucha-Goldberg (KZG) Constant-Sized Polynomial Commitments - Alin Tomescu
- https://www.iacr.org/archive/asiacrypt2010/6477178/6477178.pdf
其他 ZK 学习资源
想要更深入学习 ZK?以下是我们最收藏的一些资源。
视频
- ZK Whiteboard Sessions
- ZK Whiteboard Sessions 系列是了解 ZK 的绝佳方式。Dan Boneh 的前三场演讲提供了一个很好的基础况下,以下讲座在此基础上讨论了最近的发展。
- Zero Knowledge Proofs MOOC
- 涵盖了零知识证明的第一性原理到行业前沿话题的慕课
- The 9th BIU Winter School on Cryptography - Zero Knowledge
- 这些讲座需要一定的零知识理论基础 —— 它们所针对的是具有数学背景的学者和听众。
- ZK Symposium
- 来自零知识证明领域一些顶级研究员和产品开发者的应用和理论演讲的合集。
文档
- Proofs, Arguments, and Zero Knowledge - Justin Thaler
- 一本关于零知识理论的综合教科书。