Skip to main content

什么是 ZK(零知识)

注意:本文档是英文原版的自动翻译。

什么是 ZK(零知识)

零知识证明(ZK proofs)是一种密码学技术,允许一方(证明者)使另一方(验证者)确信某个陈述为真——而无需透露除该陈述本身为真之外的任何信息。在区块链中,ZK 证明用于三大目的:隐私(在证明交易有效的同时隐藏交易细节)、扩容(将许多交易压缩为一个在链上验证的单一证明)以及可验证计算(证明一项链下计算被正确执行)。

**简而言之:**ZK 证明让你能证明某事为真,而无需展示如何或为何为真。在加密领域,它们实现了私密交易、可扩展的 rollup 和可验证的 AI 推理——所有这些都无需信任证明者。

核心思想

这个概念违反直觉:你怎么能在不透露某事的情况下证明你知道它?一个经典的类比有助于理解。

想象一个有两条路径(左和右)的洞穴,它们在后方一扇上锁的门处汇合。你声称知道这扇门的密码。为了在不透露密码的情况下证明这一点,一位验证者站在洞穴入口处,而你从随机一条路径进入。验证者随后喊出他们希望你从哪一侧出来。如果你知道密码,你总是能从被要求的那一侧出来——必要时你穿过那扇门。如果你不知道密码,你只能从你进入的那一侧出来。经过多轮之后,验证者确信你知道密码,但从未得知密码是什么。

ZK 证明用数学方式将这一直觉形式化。它们满足三个性质:

  • 完备性(Completeness)。 如果陈述为真且双方都遵循协议,验证者将被说服。
  • 可靠性(Soundness)。 如果陈述为假,任何作弊的证明者都无法说服验证者(除了以可忽略的概率)。
  • 零知识(Zero-knowledge)。 验证者除了得知陈述为真这一事实之外,什么也学不到。

ZK 证明如何运作(简化版)

一个 ZK 证明系统涉及以下步骤:

  1. 陈述表述。 要证明的主张被表达为一个数学陈述——通常表达为一个电路(一系列算术运算)或一组多项式方程。
  2. 见证(Witness)。 证明者拥有使陈述为真的私密信息("见证")。例如,见证可能是产生一个已知输出的计算的输入。
  3. 证明生成。 证明者使用见证和陈述来生成一个证明——一个紧凑的数学对象。这对证明者而言计算成本高昂。
  4. 证明验证。 验证者根据陈述检查证明。验证很快,且不需要见证。如果证明有效,验证者就确信陈述为真,而无需得知见证。

证明通常比见证小得多,并且验证比重新执行计算便宜得多。这种不对称性正是 ZK 证明对区块链扩容和验证有用的原因。

zk-SNARKs 与 zk-STARKs

两大主要的 ZK 证明系统家族主导着区块链领域:

zk-SNARKs

Succinct Non-interactive Arguments of Knowledge(简洁非交互式知识论证)。 SNARK 产生非常小的证明(几百字节),验证成本低廉。它们是"非交互式"的——证明者一步生成证明,无需与验证者来回交互。大多数 SNARK 构造需要一个可信设置(trusted setup)——一次性的仪式来生成公共参数。如果设置被破坏,可靠性保证就会失效。现代 SNARK(例如 PLONK 及其变体)使用一种适用于任何电路的通用可信设置,减少但并未消除这一顾虑。

zk-STARKs

Scalable Transparent Arguments of Knowledge(可扩展透明知识论证)。 STARK 不需要可信设置——它们是"透明的"。它们还提供后量子安全(抵抗量子计算机的攻击)。其权衡是 STARK 证明比 SNARK 证明更大,且验证略贵一些。STARK 特别适合大型计算,因为其证明者时间随计算规模呈准线性扩展。

比较

性质 zk-SNARKs zk-STARKs
证明大小 小(几百字节) 较大(数十到数百千字节)
验证成本 低 中等
可信设置 需要(大多数构造) 不需要(透明)
后量子安全 否(大多数构造) 是
证明者成本 中等 较高,但对大型电路扩展性更好

在实践中,许多项目因 SNARK 证明体积小和验证成本低而使用基于 SNARK 的系统,而 STARK 则在透明性和后量子安全成为优先事项的场景中获得越来越多的采用。

ZK 在区块链中:主要应用

隐私

ZK 证明在公共区块链上实现私密交易。用户可以证明其交易有效(余额正确、无双花),而无需透露发送方、接收方或金额。注重隐私的协议利用这一点在原本透明的链上创建机密转账。

扩容(zk-rollup)

ZK-rollup 是 Layer 2 扩容解决方案,它在链下执行交易、将它们批处理,并生成一个证明整个批次被正确处理的 ZK 证明。只有证明和状态变更的摘要被发布到基础层(Layer 1)。L1 智能合约验证该证明并接受状态更新。这将数千笔交易压缩为一次证明验证,在继承基础层安全性的同时大幅提高吞吐量。主要的 zk-rollup 实现包括 zkSync、StarkNet、Polygon zkEVM、Scroll 和 Linea。

关于 Layer 2 扩容的更多信息,参见 L2。

可验证计算与 zkML

ZK 证明可以验证任何计算被正确执行。这延伸到 AI:zkML 使用 ZK 证明来验证一个机器学习模型从特定输入产生了特定输出,而无需透露模型权重或输入数据。一个智能合约可以在链上验证该证明,创造出 AI 推理被正确计算的无信任保证。

zkML 代表了 ZK 在加密 AI 中技术上最雄心勃勃的应用之一。它提供了正确推理的数学(无信任)保证,但由于证明生成的计算成本,目前仅限于小型模型。

为什么 ZK 对加密 AI 很重要

ZK 证明解决了去中心化 AI 中的两个关键需求:

  • 可验证的 AI。 当 AI 推理在不受信任的第三方硬件上运行时,ZK 证明可以保证结果正确,而无需重新运行计算。这对于 AI 输出触发智能合约动作的链上应用至关重要。
  • 隐私。 ZK 证明使 AI 计算成为可能,其中模型、输入或两者都保持私密。用户可以在计算提供者看不到查询的情况下获得 AI 生成的结果,而模型所有者可以在不透露权重的情况下证明其模型被使用过。

在 DecAIHub 评估框架中,基于 ZK 的验证充当真实链上 AI 集成的指标——它在链下 AI 计算与链上状态之间创造了一个数学上可验证的联系。

它在 DecAIHub 项目卡片中出现的位置

与 ZK 相关的特性出现在多个地方:

  • AI component——诸如 "zkML inference"、"ZK-verified computation" 或 "zero-knowledge proof of inference" 等值表明基于 ZK 的 AI 验证。
  • Category——将 ZK 用于 AI 的项目可能出现在 AI/推理 或 AI/计算类别中,以 ZK 作为验证机制。
  • Evidence table——ZK 的 Tier-1 物证包括已部署的验证者合约、已发布的证明基准、电路实现和链上验证交易。
  • On-chain artifacts——链上的 ZK 验证者合约是真实 ZK 集成的具体证据,为 Onchain necessity 维度做出贡献。

ZK 不能证明什么

  • ZK 证明的是一项计算被正确运行——它并不证明该计算有用、模型好或数据准确。经过验证的垃圾仍然是垃圾。
  • ZK 并不证明某个代币是必需的。ZK 证明在没有区块链的情况下也能运作;将验证放到链上是一个架构选择。
  • ZK 并不证明去中心化。一个中心化的提供者可以为自己的计算生成 ZK 证明。
  • ZK 并不证明模型就是所声称的那个,除非模型承诺(权重的哈希)被公开锚定且证明被绑定到该承诺。
  • 一个项目在其白皮书中提及 ZK 并不意味着 ZK 已被实现。请查找已部署的验证者合约、证明基准和电路代码作为证据。

请勿混淆

  • 隐私——隐私是更广泛的目标。ZK 是实现它的一种工具。其他隐私机制包括 TEE、MPC 和同态加密。
  • TEE(可信执行环境)——TEE 提供基于硬件的机密性。ZK 提供数学证明。两者都可用于可验证的 AI,但具有不同的信任假设和性能权衡。
  • zkML——将 ZK 证明应用于机器学习推理的具体应用。ZK 是通用的密码学技术;zkML 是专门的用例。
  • 加密(Encryption)——加密隐藏数据。ZK 证明在不透露数据的情况下证明关于数据的陈述。它们是不同的操作:加密将数据转换为不可读的形式,而 ZK 证明在不暴露数据的情况下生成关于数据的数学证据。
  • 乐观验证(Optimistic verification)——假定结果正确,仅在受到质疑时使用欺诈证明。ZK 则在前期主动证明正确性。这些是用于不同 L2 设计(乐观 rollup vs zk-rollup)的互补方法。

常见问题

zk-SNARKs 和 zk-STARKs 有什么区别?

两者都是零知识证明系统的家族,但它们在关键性质上有所不同。zk-SNARK 产生更小的证明且验证成本更低,但通常需要可信设置——一次性的仪式来生成系统参数。zk-STARK 不需要可信设置(它们是透明的)并提供后量子安全,但其证明更大且验证成本更高。选择取决于应用:当证明大小和验证成本至关重要时(例如链上验证)偏好 SNARK,而当透明性和长期安全成为优先事项时偏好 STARK。

ZK 证明如何用于区块链扩容?

zk-rollup 在链下分批执行交易,然后生成一个证明整个批次被正确处理的单一 ZK 证明。这个证明连同状态变更的压缩摘要一起被提交到 Layer 1 区块链。L1 智能合约验证该证明——这比重新执行所有交易便宜得多——并接受状态更新。这使得 L1 能够通过验证一个证明来处理数千笔交易的效果,从而大幅提高吞吐量。

ZK 与 AI 之间有什么联系?

ZK 证明可以验证一次 AI 模型推理被正确执行,而无需透露模型或输入数据。这一应用称为 zkML,它使链上的无信任 AI 验证成为可能:一个智能合约可以确认某个特定模型产生了某个特定输出。目前,由于将模型运算转换为 ZK 电路并生成证明的计算成本,zkML 仅对小型模型实用。随着证明系统的改进,可验证 AI 模型的范围将会扩大。

ZK 证明的计算成本高吗?

证明生成成本高昂——远高于底层计算本身。为一项计算生成 ZK 证明所需的时间可能是简单运行该计算的十到一千倍。然而,证明验证既便宜又快速。这种不对称性是设计使然:证明者一次性完成繁重的工作,而任意数量的验证者都可以高效地检查结果。对于区块链应用,这意味着昂贵的证明生成在链下进行,而便宜的验证在链上进行。

外部参考

另请参阅