📖 术语
🟢 通俗解释
🔰 新手
🕵️ 零知识证明 ZKP
一种向别人证明某件事为真、却不把背后秘密给他看的办法。一方(证明者)说服另一方(验证者),验证者最后深信不疑,却没多知道任何东西。
💡
常见误解 — 用了零知识证明,区块链就完全匿名了?没那么简单!它藏起来的是细节(比如谁给谁转了多少),但「这笔操作有效」的证明依旧记录在链上、人人可查。你得到的是隐私加上证明,而不是隐身。
🚪 通俗来说 — 证明你有钥匙,却不用交出钥匙
设想有一间上了锁的房间,你说你能进去。最直白的证明办法是把钥匙递过去,可这样一来对方手里也有了你的钥匙。零知识证明换了个思路:你自己进屋,把只有进得去的人才能拿到的东西取出来给人看——反反复复,直到没人会觉得你只是运气好。对方由此确信你能打开这扇门,却从头到尾没见过钥匙。现实里也有类似的例子:向保安证明你已满 18 岁,却不用亮出出生日期。他只知道一个事实(够年龄了),别的什么都不知道。
📐 任何零知识证明都得守的三条规矩
| 规矩 | 含义 |
|---|---|
| ✅ 完备性 | 只要说法确实为真,诚实的证明者总能说服验证者 |
| 🛡️ 可靠性 | 如果说法是假的,骗子骗不过验证者(除非撞上小到几乎不可能的巧合) |
| 🤐 零知识 | 验证者只知道这个说法为真——没有任何秘密细节外泄 |
📊 这个名字常把人绕进去。「零知识」不是说证明者什么都不知道——秘密就攥在证明者手里。它指的是验证者最后得到的额外知识为零。
🪙 新手会在哪里遇到零知识证明
主要有两大用场:
- 🙈 隐私 — 一笔交易可以被证明有效(付款人确实有钱、账目对得上),却不必暴露钱包地址和金额。Zcash 早在 2016 年就用这个思路做出了「屏蔽交易」,把付款人、收款人和金额都藏了起来。
- ⚡ 扩容(zk-rollup) — Layer 2 把成千上万笔交易在链下打包处理,再向主链提交一份小小的「有效性证明」。主链只核验这一份证明,不必把每笔交易重跑一遍,于是更便宜也更快。以太坊上的 Starknet 就是这类 zk-rollup。
🧪 两大流派 — SNARK 与 STARK
| 类型 | 长处 | 代价 |
|---|---|---|
| 🤏 zk-SNARK | 证明小巧,验证又快又便宜;资历更老、用得也广 | 历来需要一次性的「可信设置」,且这一步必须诚实完成 |
| 🔭 zk-STARK | 不需要可信设置(透明),被认为更经得起时间考验 | 证明体积更大,验证成本也更高 |
🧷 作为新手,不必急着站队。只要知道两者都是零知识证明,背后是不同的工程取舍就够了。
🚨 新手须知
- 🔍 不是隐身 — 证明照样会上链、可被核验;零知识证明藏的是内容,不是那笔操作本身存在的事实
- 🧠 验证者学不到多余的东西 — 这正是它的全部要义,「零知识」一词也由此而来
- ⚙️ 可信设置很关键 — 一些 zk-SNARK 系统要靠那个设置步骤被诚实地完成并销毁;STARK 则跳过了这一步
❓ 常见问题
- 用了零知识证明,区块链就完全匿名了吗?
- 并不会。零知识证明隐藏的是敏感细节,同时仍能证明这笔操作有效。证明本身、以及通常「发生过一笔交易」这个事实,依旧记录在链上、任何人都能核验。你得到的是隐私加上可验证,而不是彻底隐身。
- 「零知识」是说证明者什么都不知道吗?
- 恰恰相反。证明者手里握着秘密,并证明自己确实知道它。「零知识」指的是验证者除了「这个说法为真」这一个事实,学不到任何多余的东西。
- zk-SNARK 和 zk-STARK 有什么区别?
- 两者都是零知识证明。zk-SNARK 生成的证明很小,验证又快又便宜,但历来需要一次性的「可信设置」。zk-STARK 不需要可信设置,被认为更经得起时间考验,但它的证明体积更大,验证成本也更高。