数据与云安全

零知识证明

约 5 分钟阅读

什么是零知识证明

零知识证明(Zero-Knowledge Proof / ZKP)是一种密码学方法,能够在不泄露命题内容的任何信息的情况下,证明某个命题为真。它由 Goldwasser、Micali 和 Rackoff 三位研究者于 1985 年提出。

用日常例子来说明:假设你想证明“我知道保险箱的密码”,通常需要把密码告诉对方并打开保险箱。而零知识证明可以在完全不透露密码的情况下,仅证明“我知道密码”这一事实。

这项技术与端到端加密公钥密码学并列为现代密码学的重要概念,广泛应用于隐私保护、身份认证和区块链可扩展性等领域。

零知识证明的三个性质

零知识证明成立需要满足以下三个性质。

  • 完备性(Completeness):如果证明者确实知道秘密,验证者必定判定为“真”。诚实的证明者不会被不当拒绝。
  • 可靠性(Soundness):如果证明者不知道秘密,则(除极小概率外)无法欺骗验证者判定为“真”。不诚实的证明者通过验证的概率可忽略不计。
  • 零知识性(Zero-Knowledge):在验证过程中,验证者除了“命题为真”这一事实外,不会获得任何其他信息。即使记录整个交互过程,也无法获得关于秘密的任何线索。

洞穴比喻(阿里巴巴的洞穴)

“阿里巴巴的洞穴”比喻是理解零知识证明的经典方式。一个环形洞穴有 A 和 B 两个入口,深处由一扇魔法门相连。证明者想证明自己知道开门的咒语。验证者让证明者进入洞穴,然后随机指示“从 A 出来”或“从 B 出来”。如果知道咒语,就一定能从指定出口出来;不知道的话只有 50% 的成功率。重复 20 次后,偶然成功的概率不到百万分之一。

零知识证明的类型与技术

  • 交互式零知识证明:证明者和验证者实时交换消息的方式。上述洞穴比喻即属此类。验证者发送随机挑战,证明者作出回应。由于每次验证都需要交互,效率较低。
  • 非交互式零知识证明(NIZK):证明者只需生成一次证明,验证者可以事后验证。由于不需要交互,适合区块链等离线验证场景。通过 Fiat-Shamir 变换可将交互式证明转换为非交互式。
  • zk-SNARK:Zero-Knowledge Succinct Non-Interactive Argument of Knowledge 的缩写。证明体积小(数百字节),验证速度快(数毫秒)。被 Zcash 采用,可在隐藏发送方、接收方和金额的同时验证交易的合法性。但需要初始可信设置(Trusted Setup),如果该设置泄露,则可能创建伪造证明。
  • zk-STARK:zk-SNARK 的改进版,不需要 Trusted Setup。证明体积比 zk-SNARK 大,但具有抗量子计算机的能力。由 StarkWare 开发,被 Ethereum 的可扩展性方案(StarkNet)采用。

零知识证明的应用与未来

零知识证明不仅是理论上的密码学技术,已在众多实际系统中广泛应用。

  • 隐私保护型认证:在年龄验证场景中,无需透露出生日期即可证明“年满 18 岁”。作为通行密钥的未来扩展,零知识证明可能被纳入基于属性的认证。
  • 区块链可扩展性:在 Ethereum 的 Layer 2 方案(zk-Rollup)中,将数千笔交易打包成一个零知识证明记录到主链上。无需公开交易详情即可验证合法性,同时提升吞吐量和隐私性。
  • 云存储的零知识加密:Tresorit 和 Proton Drive 等服务宣称“零知识加密”,采用提供商完全无法查看用户数据的设计。严格来说这是客户端加密而非零知识证明本身,但体现了“提供商对数据一无所知”的零知识理念。
  • 数据加密的结合:将同态加密(对加密数据进行计算而无需解密)与零知识证明相结合,实现在完全保护隐私的同时进行数据处理的研究正在推进中。

零知识证明曾面临计算成本高的挑战,但随着硬件的进步和证明算法的改进,越来越多的系统能够以实用速度运行。作为兼顾隐私与安全的技术,其重要性将持续增长。

常见误解

零知识证明是理论概念,尚未实用化
零知识证明已在 Zcash(加密货币)、StarkNet(Ethereum Layer 2)、Proton Drive(云存储)等众多实际系统中运行。特别是在区块链领域,zk-Rollup 已被作为主要的可扩展性方案采用。
使用零知识证明就能完全隐藏任何数据
零知识证明是一种在不泄露秘密的情况下证明命题为真的技术,与以数据隐藏为目的的加密不同。此外,生成证明需要计算成本,并非适用于所有场景。

zk-SNARK 与 zk-STARK 的比较

zk-SNARK

证明体积小(数百字节),验证速度快。被 Zcash 和部分 Ethereum 项目采用。但需要初始可信设置(Trusted Setup),安全性依赖于该设置。可能对量子计算机脆弱。

zk-STARK

不需要 Trusted Setup,透明度更高。具有抗量子计算机的能力。但证明体积比 zk-SNARK 大(数十 KB),验证时间稍长。已在 StarkNet 上实际部署。

分享

相关术语