技术

Zero-Knowledge

零知识证明

一种密码学技术,可以在不泄露背后数据的前提下,证明某个陈述为真。

最近审阅: 审阅人Kevin Riedl wiki ↗

零知识证明允许一方(证明者)让另一方(验证者)相信自己知道某条信息,而不揭示这条信息本身。经典例子:在不暴露出生日期的情况下,证明自己年满 18 岁。

在生产中,ZK 有两类常见形态。ZK-SNARK 体积更小、验证更快,但需要一次 Trusted Setup。ZK-STARK 更大也更慢,但不需要 Trusted Setup 且抗量子。多数链如今已经为常见证明(身份、余额、投票资格)提供了预制电路,所以你不必为了发布一个验证它们的智能合约而在编制里养一个密码学家。

ZK 真正赚回成本的地方,举个实际例子:一家受监管的交易所必须向审计师证明每个用户都通过了 KYC,却不把一份包含姓名和护照号的数据库交给审计师。一个零知识证明让交易所证明「这组账户全部通过了 KYC 验证」,而底层身份保持私密。在欧盟,GDPR 让那份护照数据库成为一项你宁愿不持有的负债,所以这份隐私不是锦上添花,它就是要点本身。反例同样有教益:如果一次受信数据库查询就能让验证者满意,那 ZK 就是昂贵的表演。

诚实的工程取舍,以及创始人最常犯的错误:以为难的部分是密码学。数学是可靠的。风险住在电路里。一个细微出错的电路会产出一个完美通过验证、却证明了错误陈述的证明,而这个 Bug 在有人利用它之前都是隐形的。这就是为什么 ZK 工作属于 账户抽象 及其他审计不可协商的链上原语附近,而不是当作一个营销功能拴上去。商业理由比炒作窄:当你需要在链上(或对一个交易对手)证明某个属性而不泄露数据时,ZK 是真正有价值的。对多数消费级应用、以及多数顺嘴提它的 web3 项目来说,它是杀鸡用牛刀。

// FAQ

常见问题

当你需要向一个交易对手(监管者、链、合作伙伴)证明某个属性、却不泄露底层数据时:KYC 状态、余额门槛、投票资格、年龄、资质。如果这个证明可以用一次受信的数据库查询来替代,那 ZK 就是杀鸡用牛刀。
SNARK:证明更小、验证更快、需要 Trusted Setup、工具链更成熟。STARK:证明更大、验证更慢、不需要 Trusted Setup、抗量子。对当下大多数生产场景,选你目标链支持得最好的那一个,而不是白皮书写得更好的那一个。
电路 Bug(证明验证通过、却证明了错误的陈述)、Trusted Setup 被攻破,以及输入规模增长时证明者一侧的性能墙。密码学是可靠的;出大多数漏洞的地方,是它周围的工程。