重点整理
零知识证明让一方可以向另一方证明某个叙述为真,而不需要揭露任何底层资料。
zk-SNARKs 是一种用于加密货币的零知识证明协定类型。它用来验证某些资讯(例如帐户余额)是否正确,同时不揭露任何私密细节。
Binance 以 zk-SNARKs 搭配 Merkle tree,让使用者能验证自己的余额确实包含在总准备金证明(Proof of Reserves)中,而不必揭露个别帐户资料。
除了交易所准备金之外,ZK 证明正越来越多地用于 ZK-rollups、身分验证与投票系统,覆盖整个区块链生态。
简介
区块链使用者重视透明与隐私。许多情境下,这两个目标似乎彼此冲突:要证明某件事是真的,往往需要揭露其背后的细节。零知识证明提供了一种方法,用来化解这种矛盾。
透过使用像 zk-SNARKs 这样的零知识证明协定,并搭配像 Merkle tree 这样的加密资料结构,就能在不揭露资讯本身的情况下,证明资讯的有效性。本文将说明这些工具如何运作,以及 Binance 如何将它们用于准备金证明。
什么是零知识证明?
零知识证明允许一方(证明者,prover)说服另一方(验证者,verifier),证明某个叙述为真,但不分享该叙述内容的任何资讯。这个概念最早出现在 1985 年的学术论文中,之后成为应用密码学的基础要素。
一个简单的比喻:想像你知道一个上锁保险箱的组合密码。你可以透过打开保险箱、读出里面朋友放进去的一张便条,然后再把保险箱关起来,来向朋友证明你知道密码。现在你的朋友相信你知道密码,但你从未说出密码是什么。
想要更深入的技术解释,请参考学院文章《什么是零知识证明,以及它如何影响区块链》。
为什么零知识证明很有用?
当你需要在不暴露敏感资料的情况下证明一个主张时,ZK 证明就非常有用。在传统系统中,证明你拥有某项资产或持有特定凭证,通常需要分享底层资讯,这会带来隐私与安全性的风险。
在加密货币领域,常见的使用案例包括:
在不揭露私钥内容的情况下证明你拥有该私钥。
让交易所能在不揭露个别帐户余额的情况下验证其总用户准备金。
透过 ZK-rollups 实现可扩充的区块链交易,而不需要将每一笔交易都公开发布到链上。
这些证明使用的演算法会把资料当作输入,然后回传 true 或 false,同时不会泄露任何关于输入本身的细节。
零知识证明的技术特性
有效的零知识证明必须满足三个性质:
完整性(Completeness)。如果叙述为真,诚实的验证者会被该证明说服。
可靠性/健全性(Soundness)。如果叙述为假,没有任何证明者能够说服验证者它为真。
零知识(Zero-knowledge)。如果叙述为真,验证者除了「确实为真」这件事之外,什么都学不到。
什么是 zk-SNARK?
zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,零知识简洁非交互式知识论证)是一种零知识证明协定类型。它被设计为简洁(证明大小很小)、非交互式(证明者与验证者之间不需要来回互动),并且具有加密层级的可靠性(cryptographically sound)。
使用 zk-SNARK 时,验证者可以证明自己掌握某个隐藏数值,或某项计算已正确执行,同时不揭露任何输入内容的资讯。以加密货币交易所的情境而言,这意味著能够证明所有使用者余额的总和确实等于所宣称的准备金,而不必显示每一个人的单独余额。
验证步骤的速度极快,远快于生成证明本身所需的时间。这使得 zk-SNARKs 能够应用于需要大量规模的情境,例如交易所稽核或区块链的扩充。
什么是 Merkle Tree?
Merkle tree 是一种加密资料结构,可高效率地组织大量资料。每一份资料会被转换成杂凑(hash),接著把这些杂凑两两配对并再次合并,直到产生单一的根杂凑(root hash)。只要任何一个输入值发生变更,根杂凑就会改变,因此窜改很容易被侦测。
杂凑函数(Hash functions)
Merkle tree 要能运作,依赖杂凑函数。杂凑会接受任意长度的输入并产生固定长度的输出。相同的输入永远会得到相同的输出。甚至输入只改动一点点,也会产生完全不同的输出。
例如,将 100 本书的资料丢给 SHA-256 杂凑函数,会得到一个唯一的 64 字元字串。如果把这些书中的任意一个字元改掉,输出就会完全不同。这项特性让你能在不逐一比对所有原始内容的情况下,轻松验证资料完整性。
加密货币中的 Merkle tree
在区块链中,每一笔交易会先被杂凑成一个唯一的叶节点(leaf node)。接著把两个叶节点合并后再杂凑,形成分支节点(branch nodes)。此流程会一直持续,直到产生单一的 Merkle root。这个根值以加密方式汇总了某个区块中的所有交易。
对交易所而言,Merkle tree 提供了一种方式,能将客户余额整理成可被稽核的形式,同时不需揭露每一个人的个别帐户。
仅使用 Merkle tree 的限制
加密货币交易所可以根据所有客户帐户的余额建立 Merkle tree,以支援「准备金证明(Proof of Reserves, PoR)」。然而,若没有额外的保护机制,这种做法仍有弱点。
如果没有 ZK 层,交易所可能会把某些帐户从树中排除,或新增带有负余额的假帐户,以降低看似的总负债。若使用者只检视自己的叶节点,而看不到其他所有帐户,便无从察觉这种问题。
使用可信的第三方稽核者是一个可能的解决方案,但这需要你同时信任稽核者,以及稽核者所能存取的资料。
zk-SNARKs 与 Merkle tree 如何协同运作
将 zk-SNARKs 与 Merkle tree 结合,可以免除对第三方的信任需求。交易所会先建立包含所有使用者余额的 Merkle tree,接著生成一份 zk-SNARK 证明,能在数学上保证:
每位使用者的余额都包含在 Merkle tree 中(不省略任何帐户)。
没有任何使用者的净余额为负(不存在被伪造的资料)。
Merkle root 有效,且没有被更动。
使用者可以验证自己的余额确实有贡献到 Merkle root。他们也可以验证 zk-SNARK 证明,确认该树是正确建立的,同时不必看到任何其他人的余额。
Binance 如何套用这套系统
Binance 将它想要证明的内容定义为一个可程式化电路。对于 Merkle tree 中每位使用者的余额叶节点,电路会检查三个条件:
使用者的资产被纳入总净余额的计算。
使用者的总净余额大于或等于零。
在纳入该使用者资料后,Merkle root 有效。
接著,Binance 会为整棵 Merkle tree 生成 zk-SNARK 证明。在每次释出准备金证明时,Binance 会发布每位使用者的 Merkle 证明,以及附带其公开输入(public inputs)的 zk-SNARK 证明。任何人都能使用公开可取得的开源程式码,彼此独立地完成验证。
这种方法提供的是数学上的保证,而不是只依赖稽核者的信任。
准备金证明之外的更广泛应用
ZK 证明技术已大幅超出交易所稽核的范围。ZK-rollups 目前是以太坊上最主要的第二层(Layer 2)扩充方案之一:将交易在链下处理,并提交 ZK 证明到主链以确认有效性。这能在维持安全性的同时提升吞吐量。
除了扩充性之外,人们也正在探索用 ZK 证明进行身分验证(在不揭露你完整身分的情况下证明你符合年龄或司法管辖要求)、私密投票系统,以及机密智慧合约的执行。这项技术仍在成熟中,但它在金融、治理与数位身分等领域的潜在应用非常可观。
常见问题(FAQ)
用简单的说法,零知识证明是什么?
零知识证明让你能证明你知道某件事情,或某个叙述为真,但同时不揭露底层资讯。这就像你透过打开保险箱来证明你知道保险箱的组合密码,然后又把它关回去;你的朋友相信你知道密码,但你从不需要说出密码本身是什么。
为什么 Binance 在准备金证明中使用 zk-SNARKs?
Binance 使用 zk-SNARKs 来证明客户余额已完整被支撑(fully backed),同时不揭露个别帐户细节。ZK 证明提供数学层级的验证:所有帐户都有被包含,且不存在负余额,而不需要使用者信任稽核者。
zk-SNARKs 与 ZK-rollups 的差异是什么?
zk-SNARKs 是一种零知识证明协定。ZK-rollups 是一种第二层(Layer 2)的扩充解决方案,它使用 zk-SNARKs(或类似的证明)把大量交易打包在一起,并向主区块链提交单一的有效性证明。zk-SNARKs 是底层的加密工具;ZK-rollups 则是该工具的一种应用。
使用者能否自行独立验证 Binance 的准备金证明?
可以。Binance 会发布每位使用者的 Merkle 证明,以及连同其公开输入的 zk-SNARK 证明。使用者可以使用 Binance 先前公开释出的开源程式码,验证自己的余额确实包含在 Merkle tree 中,并且 zk-SNARK 证明也证实该树是被正确建立的。
零知识证明是否仅用于交易所准备金?
不是。ZK 证明有广泛的应用。在区块链中,它们用于 ZK-rollups 的交易规模扩充、身分系统,以及机密合约执行。在加密货币之外,也正在被研究用于隐私保护的投票、年龄验证,以及在不揭露资料的情况下进行凭证验证。
最后的想法
透过将 zk-SNARKs 与 Merkle tree 结合,交易所能提供关于准备金的加密证据,同时不会牺牲使用者资料。除了准备金稽核之外,ZK 技术也正在占据区块链扩充、身分系统与去中心化治理等领域的位置。
延伸阅读
什么是零知识证明(Zero-Knowledge Proof),以及它如何影响区块链?
已解释:zk-SNARKs 与 zk-STARKs
什么是 ZK-Rollups?
什么是准备金证明(Proof of Reserves),以及它在 Binance 上如何运作
已解释:Merkle Trees 与 Merkle Roots
免责声明:本内容仅以「现况(as is)」提供给你,目的仅限于一般资讯与教育用途,不作任何形式的声明或保证。内容不应被视为财务、法律或其他专业建议,也不意在推荐购买任何特定产品或服务。你应向合适的专业顾问寻求自身建议。若内容由第三方提供者贡献,请注意其中表达的观点属于该第三方提供者,未必反映 Binance Academy 的立场。数位资产价格可能波动。你的投资价值可能下跌或上涨,且你可能无法取回投资金额。你对自己的投资决策自行负责,且 Binance Academy 不对你可能遭受的任何损失负责。欲了解更多资讯,请参阅我们的《使用条款(Terms of Use)》、《风险警示(Risk Warning)》以及《Binance Academy 条款(Binance Academy Terms)》。
