大多数零知识证明的入门介绍都从阿里巴巴山洞的比喻开始:某人通过始终从验证者指定的一侧走出,来证明自己知晓打开大门的密语,却从未透露密语本身。这个比喻很巧妙,但对于理解零知识证明为何在实践中重要毫无帮助。它告诉你这种证明是可能的,却没有告诉你为什么有人在区块链上需要它。
实际的起点更为简单。每条区块链都面临同样的矛盾:透明性带来信任,但透明性也破坏了隐私。比特币的账本是公开的,每笔交易、每个余额、每个地址对任何人都可见。以太坊也是如此。这种透明性让系统可审计且值得信赖,但也意味着任何得知你地址归属的人,都能看到你曾进行过的每笔交易、持有的每个代币、以及交互过的每个协议。
零知识证明解决了这一矛盾。它让你能够证明关于数据的某些事实,而无需透露数据本身。你可以证明账户余额超过某个阈值,而无需透露具体余额。你可以证明一笔交易有效,而无需透露发送方、接收方或金额。你可以证明自己不在制裁名单上,而无需透露身份。
这背后的数学原理很深奥,但应用场景却近在眼前。
每个零知识证明系统都必须满足三个属性,理解它们对于评估任何基于零知识证明的协议至关重要。
完备性。如果声明为真,且证明者和验证者都遵循协议,那么验证者将始终被说服。有效的证明永远不会验证失败。如果你确实知道秘密,证明将始终有效。
可靠性。如果声明为假,那么任何作弊的证明者都无法说服验证者其为真,除非概率可忽略不计。不诚实的证明者无法伪造有效的证明。虚假证明通过验证的概率极低(通常小于2^128分之一),实际上不可能发生。
零知识性。验证者除了得知声明为真之外,不会获得任何其他信息。证明不会泄露关于秘密本身、任何中间计算或用于生成证明的任何数据的任何信息。验证者在看到证明后的知识,与有人仅仅告知其声明为真时的知识完全相同。
第三个属性正是零知识证明不仅正确而且有用的原因。标准数字签名能证明消息由特定密钥签名,但会泄露消息内容。标准哈希承诺能证明某个值已被承诺,但在打开时泄露该值。零知识证明则能证明秘密值之间存在某种关系,而不会在任何时刻泄露这些值。
区块链中两种主流的零知识证明系统是 zk-SNARKs 和 zk-STARKs。它们以不同的权衡方式解决相同的问题。
zk-SNARKs(零知识简洁非交互式知识论证)生成的证明体积小,验证速度快。一个典型的 zk-SNARK 证明约为 200 到 300 字节,在以太坊上链验证大约消耗 20 万到 30 万 gas。无论所证明的计算有多复杂,验证时间都是恒定的。验证单个交易的证明与验证一万个交易的证明所需时间相同。
这种简洁性的代价是可信设置。大多数 zk-SNARK 系统需要一次性的仪式,在仪式中生成随机参数,然后销毁随机性。如果仪式中的随机性未被妥善销毁,攻击者就可能伪造证明。Zcash 进行了密码学史上最精心的可信设置仪式之一(“Powers of Tau”仪式),有全球数百名参与者参与,其安全假设是至少有一名参与者诚实销毁了他们的随机性。
较新的 SNARK 系统如 PLONK 和 Halo 2 已减少或消除了可信设置需求,但这种看法依然存在。一些项目正是出于对可信设置的担忧而避免使用 SNARK,即使它们将使用的实现并不需要可信设置。
zk-STARKs(零知识可扩展透明知识论证)完全消除了可信设置。它们的安全性来源于哈希函数而非椭圆曲线假设,这使得它们透明(无秘密参数)且理论上具备量子抗性(基于哈希的密码学被认为能抵御量子计算机攻击,而椭圆曲线密码学则不能)。
其权衡在于体积。STARK 证明明显大于 SNARK 证明,通常为几十到几百 KB,而 SNARK 证明仅为几百字节。在数据存储需要 gas 的区块链上,更大的证明意味着更高的验证成本。STARK 技术的主要开发者 StarkWare 通过递归证明组合来解决这个问题:先证明一个证明有效,再证明这个证明的证明有效,从而压缩最终的链上占用空间。
在实践中,这种区别的重要性已不如五年前。现代证明系统越来越多地融合了两种技术路线的特点,工程重点已从“使用哪种证明系统”转向“证明者能多快生成证明,验证者能多便宜地检查证明”。
零知识证明在扩展方面的应用概念上很直接。Rollup 在链下执行一批交易,生成证明该批次交易正确执行的证明,并将证明发布到以太坊。以太坊上的验证者合约通过一次操作检查证明,并接受新的状态。
这种方法之所以强大,在于证明与验证之间的不对称性。为一万个交易批次生成证明可能需要一台强大的机器花费几分钟。而验证证明只需不到一秒,且无论批次中有多少交易,gas 成本都是固定的。这种不对称性使得 ZK Rollup 能够将数千笔交易压缩为以太坊上的一次验证。
主要的 ZK Rollup 各自采用了不同的实现方式。
zkSync Era 使用自定义虚拟机(zkEVM),在语言层面与 Solidity 兼容,但编译为针对 ZK 证明生成优化的不同指令集。现有的以太坊合约只需少量修改即可重新编译用于 zkSync。
StarkNet 使用 Cairo 编程语言和 STARK 证明。Cairo 是一种专门为可证明计算设计的语言,这带来了性能优势,但要求开发者学习新的语言和范式。
Polygon zkEVM 追求 EVM 等价性,即无需重新编译即可执行与以太坊相同的字节码。这最大限度地提高了兼容性,但使每个 EVM 操作码都可证明,增加了工程复杂性。
Scroll 也追求完整的 EVM 等价性,并采用社区驱动的方式实现其 zkEVM,目标是成为与以太坊最兼容的 ZK Rollup。
这些方法之间的竞争,归根结底是兼容性与性能之间的竞争。ZK Rollup 与现有以太坊工具越兼容,开发者迁移就越容易。Rollup 越优化其指令集以实现可证明性,其证明生成就越快、越便宜。
隐私保护应用是零知识证明最具影响力也最具争议之处。
标准的以太坊交易会暴露发送方地址、接收方地址、转移金额以及调用的智能合约。这些信息是永久公开的。Chainalysis 和 Elliptic 等链分析公司已建立起完整的业务,追踪透明账本上的交易流向,通过交易所 KYC 数据、已知实体标签和行为模式将地址与现实世界身份关联起来。
零知识证明隐私协议打破了这种可见性链条。在基于 ZK 的隐私交易中,用户生成证明其交易有效(发送方有足够资金、无双重支付、金额平衡)的证明,而无需透露发送方、接收方或转移金额。证明在链上发布并由网络验证,但底层交易细节保持加密。
Zcash 是这一概念的首个主要实现,于 2016 年推出,使用 zk-SNARKs 实现屏蔽交易。Zcash 用户可以选择透明交易(与比特币的公开账本相同)或屏蔽交易(发送方、接收方和金额隐藏在 ZK 证明后面)。在实践中,Zcash 上屏蔽交易的采用率低于支持者预期,大多数 Zcash 交易仍在使用透明池。
较新的协议正在构建可编程隐私,不仅代币转移,任意智能合约逻辑都可以私下执行。Aztec Network 正在以太坊上构建一个隐私优先的第 2 层,所有交易默认都是私密的。Aleo 正在构建一个具有原生 ZK 支持的原生第 1 层区块链,用于私有智能合约。两者都使用 ZK 证明来验证状态转换,而无需透露涉及的计算或数据。
隐私的潜力不仅仅局限于个人交易。ZK 证明可以实现私有投票(证明你已投票,但不透露你的选择)、私有身份验证(证明你是某个国家的公民,但不透露你的护照号码)和私有 DeFi(向资金池提供流动性,但不透露你的地址或仓位大小)。
加密货币领域的隐私问题处于一个仍在定义中的法律争议空间。
2022 年 8 月,美国财政部外国资产控制办公室(OFAC)制裁了 Tornado Cash,这是一个基于以太坊的混合器,它使用 ZK 证明来打破存款地址和取款地址之间的联系。制裁开源智能合约代码(而非个人或公司)是前所未有的,在加密货币隐私社区引起了轩然大波。
2024 年 5 月,Tornado Cash 的开发者之一 Alexey Pertsev 被荷兰法院判定犯有洗钱协助罪。该判决确立了一个法律先例:如果编写隐私保护代码的工具被用于非法目的,那么编写该代码的作者可能承担刑事责任,无论开发者是否亲自协助了非法活动。
这些行动已影响了 ZK 隐私开发的方向。当前一代隐私协议正围绕监管约束进行构建,而非忽视它们。
选择性披露允许用户证明关于其身份或交易历史的特定事实,而无需透露所有信息。用户可以证明他们通过了持牌交易所的 KYC 认证,证明他们不在 OFAC 制裁名单上,或证明他们的资金并非来自受制裁地址,所有这些都基于 ZK 证明,仅透露被验证的具体声明。
隐私池是由 Vitalik Buterin 等人形式化的概念,允许用户证明其从隐私集合中的取款属于一个干净的存款子集。该协议不是不加区分地混合所有存款,而是维护排除已知非法地址的关联集合。用户证明自己属于干净集合,而无需透露正在取款的具体存款。
这些折衷方案能否让监管机构满意,还有待观察。根本性的矛盾在于,隐私与监控在架构上是不兼容的,这无法仅靠技术解决。ZK 证明为政策制定者提供了一个前所未有的工具:在不要求披露的情况下验证合规性的能力。他们是否选择使用它,这是一个政治问题,而非密码学问题。
证明成本直接影响哪些应用会首先采用 ZK 技术。高价值金融交易(其中生成证明的成本相对于交易规模微不足道)是最早的采用者。机构级跨链转移、大型 DeFi 仓位和企业结算系统可以承受每笔交易几美元的证明成本,而不会影响其经济性。消费者应用(其中单笔交易可能仅值几美元)需要证明成本再下降一个数量级,ZK 隐私才能在日常使用中变得实用。公司正在构建 ZK 专用 ASIC 的硬件加速努力,正是针对这一成本障碍。
扩展与隐私应用的融合,或许是 ZK 技术最被低估的方面。一个能够私下处理交易的 ZK Rollup,将结合链下执行的吞吐量优势与加密状态转换的机密性优势。用户将获得快速、廉价且对链分析不可见的交易。包括 Aztec 和 Polygon Miden 在内的几个项目正在构建这种组合,尽管将这两种能力合并到一个生产系统中的工程复杂性仍然巨大。
本文未涵盖支持 ZK 证明系统的多项式承诺、椭圆曲线配对或 Fiat-Shamir 变换的数学原理。理解这些需要研究生水平的抽象代数知识,对于作为用户或投资者评估基于 ZK 的协议并非必需。
本文未涵盖 ZK 机器学习(zkML),这是一个新兴领域,使用 ZK 证明来验证机器学习模型产生了特定输出,而无需透露模型的权重或训练数据。该应用仍处于实验阶段,其实践意义仍在研究中。
本文未涉及 ZK 证明生成的硬件加速竞赛。Cysic、Ingonyama 和 Fabric Cryptography 等公司正在构建专门用于 ZK 证明的定制 ASIC 和 FPGA,这可能将证明成本降低数个数量级。硬件领域变化太快,无法进行静态分析。
验证证明系统的审计状态。ZK 证明系统在数学上很复杂,实现错误可能是灾难性的。电路(被证明计算的数学表示)中的漏洞可能允许攻击者伪造证明并铸造代币或窃取资金。检查证明系统及其电路是否已由专门从事 ZK 密码学的公司(而非仅是一般智能合约审计公司)进行审计。
了解实际隐私范围。并非所有基于 ZK 的协议都提供相同级别的隐私。有些隐藏交易金额但暴露地址,有些隐藏地址但暴露金额,有些则隐藏所有信息。阅读协议文档,准确了解哪些信息被隐藏,哪些仍然可见。诸如交易时间、gas 模式、交互频率等元数据,即使核心交易数据被隐藏,也常常能使用户去匿名化。
检查可信设置状态。如果协议使用 zk-SNARKs,请确定它是否需要可信设置以及该设置是如何进行的。有数百名参与者的多方计算仪式比只有少数已知实体的仪式更可信。使用 STARKs、具有通用设置的 PLONK 或 Halo 2 的协议根本不需要可信设置。
评估监管风险。隐私协议在法律不确定的环境中运行。考虑协议是否有合规机制(选择性披露、隐私池、可选合规证明),以及该机制是否已接受过实际监管审查。使用后来被制裁的隐私协议,可能会使您转移或出售资产的能力复杂化。
测试证明生成时间。生成 ZK 证明是计算密集型的。在移动设备上,证明简单交易可能需要 30 秒到两分钟。在桌面上,可能需要几秒钟。如果证明时间对您的用例来说太长,那么该协议可能不适用于频繁交易。一些协议将证明生成卸载到专用服务器,这更快,但引入了信任假设:服务器不会了解您的私人数据。
零知识证明是一种在不透露原由的情况下证明某事为真的方法。在区块链中,这意味着你可以证明交易有效、你拥有足够资金、或计算已正确执行,所有这些都无需透露实际的交易细节、你的余额或计算中使用的数据。验证者确信声明为真,但除此之外一无所知。
zk-SNARKs 生成非常小的证明(几百字节),验证成本低,但历史上需要可信设置仪式来生成初始系统参数。zk-STARKs 生成更大的证明(几十到几百 KB),但不需要可信设置,并且理论上可以抵抗量子计算攻击。在实践中,现代证明系统正在融合,体积、速度和信任假设之间的权衡变得不那么明显。
ZK Rollup 在链下执行数千笔交易,并生成一个证明所有交易正确执行的单一证明。该证明在以太坊上通过一次操作进行验证,无论批次中有多少笔交易,gas 成本都是固定的。生成证明的成本(高昂,但由 Rollup 运营商承担)与验证成本(低廉,且为整个批次支付一次)之间的不对称性,正是扩展效果的来源。
像 Zcash 这样基于 ZK 的隐私币在大多数司法管辖区并非天然违法。然而,监管方法差异很大。一些交易所已下架隐私币以遵守反洗钱法规。2022 年的 Tornado Cash 制裁表明,隐私保护协议可能面临监管行动。合法性取决于您所在的司法管辖区以及您使用该技术的方式,而非技术本身。
可信设置是一些 zk-SNARK 系统为生成加密参数所需的一次性仪式。在仪式中,会创建随机值,之后必须销毁。如果任何参与者保留了随机值,他们理论上可以伪造证明。多方仪式通过要求可能数百名参与者中只需有一名诚实销毁其随机性来降低风险。较新的证明系统如 PLONK 和 Halo 2 已消除或最小化了对可信设置的要求。
从技术上讲,是的。像 Aztec Network 和 Aleo 这样的协议正在构建默认所有智能合约交互都是私密的系统,而不仅仅是代币转移。然而,所有交易的完全隐私会带来监管挑战,增加计算成本(ZK 证明生成成本高昂),并改变用户体验(证明生成需要时间)。链上完全隐私能否成为标准,既取决于监管决策,也取决于技术能力。
隐私池允许用户将资金存入共享池,并从不同地址取款,从而打破链上两个地址之间的链接。与简单的混合器不同,隐私池使用 ZK 证明结合关联集合,让用户证明其取款属于排除了已知非法地址的存款子集。这为用户提供了隐私,同时提供了合规机制。用户证明自己在干净集合中,而无需透露正在取款的具体存款。
主要风险包括 ZK 电路中的实现错误(可能导致伪造证明)、旧版 SNARK 系统中的可信设置漏洞、针对隐私功能的监管行动、消费级硬件上证明生成的高计算需求,以及相较于标准智能合约开发,ZK 工具相对不成熟。此外,元数据泄露(交易时间、gas 模式、交互频率)有时即使在核心交易数据私密的情况下,也能使用户去匿名化。