📖 术语 🟢 通俗解释 🔰 新手

🕵️ 零知识证明 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 不需要可信设置,被认为更经得起时间考验,但它的证明体积更大,验证成本也更高。

🔗 相关术语 · 币种