在密码学与信息安全的广阔领域中,一项名为零知识证明(Zero-Knowledge Proof,简称ZK)的技术正日益引发人们的广泛关注。这份不太全面的ZK技术导引,旨在揭示其深藏的重要性与独特价值。零知识证明是一种革命性的安全验证方法,它允许一方向另一方证明自己知道某个信息,而无需透露该信息本身或任何额外信息。这种既能确保隐私又能验证事实的能力,使得ZK技术在区块链、身份认证、数据共享等多个领域展现出巨大的应用潜力和重要性。因此,理解并探讨ZK的重要地位,对于我们把握未来信息技术的发展趋势具有深远意义。
一份关于零知识证明的不完整指南:为什么 ZK 如此重要?在全面检查 ZK 证明系统之前,请注意 ZK-SNARK 指的是一类方案的名称,而 ZK-STARK 是特定方案的名称。
让我们从 ZK-SNARK 开始。SNARK 代表简洁的非交互式知识论证。SNARK 不同于其他 ZK 证明系统,因为它的信任设置阶段,“N”代表了:
简洁:证明大小和验证时间小于原始计算(语句)。
非交互:证明者和验证者不需要为每一轮来回通信。相反,证明者和验证者需要完成初始设置阶段。即使他们错过了设置阶段,公共验证者也可以稍后加入验证。
论据:具有极大计算能力的证明者可以通过生成错误的证明来欺骗验证者。发生这种情况时,公钥/私钥加密也会被破坏。
知识:证明者需要知道一些秘密才能进行证明。
ZK-SNARK 的问题在于信任建立阶段。信任设置阶段生成一个参考字符串。如果参考字符串泄露,任何人都可以做假证明。此外,在多方之间协调这种信任建立阶段也很复杂。参考字符串只能在一个程序(电路)中使用。因此,不可能让 ZK-SNARK 具有用于一般计算的单一信任设置。另一个问题是参考字符串不可升级。如果我们升级程序,我们需要重新运行信任设置阶段。
为了解决这个问题,有两种方法:
透明设置:信任设置阶段设置一个 CRS(通用参考字符串)。如果 CRS 泄露,ZK 证明系统不会受到伤害。Fractal、Halo、SuperSonic 和 ZK-STARK 使用这种方法。这种方法的问题是证明的大小可能以 kB 为单位。这对于区块链领域来说太大了。
通用设置:设置创建一个秘密参考字符串,但它是结构化的。因此,它不仅可以在一个程序中使用。Marlin、SuperSonic-RSA 和 Plonk 使用这种方法。
业界常用的 ZK 证明系统如下:
Groth16:在 Zcash 中使用。它速度快,证明规模小,验证时间恒定,但信任设置阶段需要为每个程序运行。
Sonic:支持通用设置。SRS(结构化参考字符串)与受支持程序的大小成线性关系。证明大小是固定的,但验证成本很高。另一方面,它使一般计算成为可能。
分形:允许递归。证明尺寸很大。
Halo:支持递归。它并不简洁,因为验证时间是线性的。大多数 ZK 应用程序都基于 Halo2。
SuperSonic:第一款实用的透明 ZK-SNARK。
Marlin:结构化引用字符串(SRS);通用且可更新;比 Sonic 更好的证明和变化时间,但比 Groth16 慢。
Plonk:通用设置;多方按顺序加入设置阶段。这使许多参与者很容易加入信任设置阶段;PLONK 使用 Kate 承诺而不是多项式承诺(回想一下,ZK-SNARK 的第一步是将计算转换为多项式问题)。Plonk 是现代流行的。许多 ZK 证明系统都基于 Plonk,它们被命名为 Plonkish。
这是基于这项研究的基准。CRS 是通用参考字符串。SRS 是在信任建立阶段生成的结构引用字符串。证明大小决定了基础层的存储成本——证明者和验证者的运行时间会影响计算资源。
您可以在以下研究中找到更多基准:
使用 isekai 对零知识证明进行基准测试
零知识证明:STARKs vs SNARKs
社区提案:(零知识)证明系统的基准框架
不同 zk-SNARK 的比较
总结一下,如果你看到一个新的零知识证明系统,你应该关心什么数字?
1 tx 和 10 txs 的证明时间
1 tx 和 10 txs 的验证时间
1 tx 和 10 txs 的证明大小
可信设置阶段
参考字符串大小
CRS(通用参考字符串)支持
可升级
SRS(结构化参考字符串)支持
递归支持
后量子安全
密码学假设
ZK 是近几年来应用的。ZK 的两个主要论点是 rollup,它提高了计算效率和隐私。对于私人观点,这是直观的,因为 ZK 除了语句本身之外,不与验证者共享任何知识。Rollup 论点在很大程度上依赖于 ZK 的两个特征:简洁和递归。简洁的特性有助于验证者节省许多计算资源,而不是重新运行整个程序。递归特性有助于节省存储空间。通过递归,区块链可以保持固定的大小。这也有利于去中心化,因为微小的区块链节点不需要高端硬件。
独立开发 ZK 应用,开发者需要具备以下研发技能:
算术技能的算法和低级优化。开发人员需要这种技能来解决有限域算术、多项式承诺和椭圆曲线中的问题。
有关 ZK 证明系统(如 ZK-SNARK、Plonkish 和信任设置过程)的密码学知识。开发者需要选择合适的零知识证明系统,他们可能需要对其进行定制。
电路编程技巧。开发人员需要为一些密码学原语(例如 Merkle Trees 和 Hash)开发约束。
应用程序和加密协议开发。
有效的开发工具不仅可以加快开发过程,还可以降低复杂性。例如,像 Circom 这样的工具负责处理低级代数和证明系统。开发人员可以忽略代数和 ZK 证明系统,而专注于编程和应用程序开发。
机制
rollup 的概念很简单。由于链上计算是扩展的,因此 rollup 将计算置于链下,并且只将结果存储在链上。
Merkle 树的状态根存储在 rollup 合约中。根可以用来验证叶子的存在。智能合约知道如何用信息批量更新状态,状态根切换到新的状态根。
资料来源:rollup 指南不完整 (vitalik.ca)
ZK rollup 批量使用 ZK proof 来验证新的状态根是否正确。ZK 证明可以用来验证批量执行 txs 后,我们可以批量获取新的状态根。验证者无需执行即可验证计算的正确性,验证者甚至不会知道执行了什么。简洁的特性有助于 ZKRU(ZK rollup)规模化。
OpTIMistic Rollup 不如 ZKRU 完美。例如,由于依赖欺诈证明,ORU 的 TPS 较少,提款期较长。因此,一些 ORU 正在将 ZK 集成到他们的解决方案中。通过这种方式,他们可以提高 TPS 并缩短提款期。例如,他们可以将 ZK 添加到状态转换中,以缩短防欺诈时间。
角色
rollup 中包含三个角色:
用户:用户在 Layer2 上提交 txs。他们将资产存入 Layer2。
Rollup 运营方:Rollup 运营方使网络保持运行。他们生成证明、执行 txs、将 txs 分批并挑战欺诈证明。
基础层:这一层保证了 Layer2 的安全,是共识所在。Layer2 最常见的基础层是以太坊
经济结构
对于 Layer2 的经济来说,最重要的是成本和收入。
对于 Layer2,我们可以将成本分解为以下内容:
证明成本(对于第 2 层)
状态转换
基础层 Tx 成本
基础层的数据成本
网络的一项主要成本是数据存储。此图表说明了数据的存储方式。首先,用户将数据 (txs) 发送给汇总运营商。然后汇总操作员将大量数据(txs)打包成批次并发布到基础层。
Layer2 的共同收入是费用和 MEV 价值。费用因网络状态而异,MEV 因用户的交易而异。此外,Layer2 可能会发行新的代币。代币将成为 Rollup 运营商的奖励。
常见的 ZK Rollup
此图显示了不同 Layer2 的现状。Arbitrum主导着整个市场。
该图说明了不同链使用的不同技术。这是一个简短的解释:
状态验证
欺诈证明:欺诈证明允许白名单中的参与者观察链来证明状态是不正确的。
ZK 证明 (ST):ZK-STARKS 是确保状态正确性的零知识证明。
INT:交互式证明(INT)需要随着时间的推移进行多次交易才能解决。
SN:仅需要信任设置 Exits:从网络中退出需要经过一段时间才能受到质疑。Internet 网络状态未选中。
1 R:单轮证明(1 R)只需要单笔交易即可解决。
数据可用性
链上:证明构建所需的所有数据都在链上发布。
外部 DAC:证明构建完全依赖于未在链上发布的数据。存在一个数据可用性委员会 (DAC),其任务是保护和提供数据。
外部:证明构建完全依赖于未在链上发布的数据。
可升级性
是:保护系统的代码可以任意更改,恕不另行通知。
21 天或无延迟:有 21 天的延迟,除非它被 9/15 安全理事会多重签名覆盖。
定序器(Sequencer)故障
使用 L1 进行交易:用户能够通过 L1 提交交易并强制将其包含在 L2 上。
强制交易/退出到 L1:用户可以通过 L1 提交请求来强制定序器包含交易或提款交易。用户需要通过系统外的方式寻找交易对手方。如果定序器出现故障,用户可以使用退出舱口提取资金。
强制退出到 L1:用户可以通过 L1 提交请求来强制排序器包含他们的提款交易。如果定序器出现故障,用户可以使用退出舱口提取资金。
提议区块(ZK):用户需要运行自己的节点并使用它来提议包含其他审查交易的新区块。提出新区块需要创建计算量非常大的 ZK 证明。
退出到 L1:用户只能提交 L1 提款请求。之后,用户带着他们的资金退出系统。
验证失败:
逃生舱(MP):用户可以通过提交资金的默克尔证明来不信任地退出他们的抵押品。头寸将使用最后一批状态更新的平均价格平仓。
提议区块:用户需要运行自己的节点并使用它来提议新区块以替换验证者。
以下是 Ethhub 上列出的 ZKRU 的优缺点:
优点:
减少每次用户转移的费用。
比 Optimistic Rollup 和 Plasma 更快。
区块将在一个鼓励去中心化的并行计算模型中计算。
每个事务中包含的更少数据增加了第 2 层的吞吐量和可扩展性。
它不需要像 Optimistic Rollup 这样的欺诈游戏验证,它可以将提款延迟最多两周。
缺点:
计算零知识证明的难度将需要数据优化以获得最大吞吐量。
ZK Rollup 的初始设置促进了中心化方案(请参阅安全注意事项)。
安全方案假定了某种程度的无法验证的信任。
量子计算对破解区块链构成威胁。