零知识证明到底在证明什么

5 min read

零知识证明到底在证明什么

第一次听到“零知识证明”这个词的时候,我觉得它在耍赖。

“我能向你证明我知道某个东西,但我不告诉你这个东西是什么。”

这听起来像极了小时候考完试跟同桌说“我真的会做这道题,但我就是不给你看答案”——你信不信?不信算了。

但后来慢慢搞懂了,它不是在耍文字游戏。它证明的不是“答案是什么”,而是“我确实知道答案”这件事本身。这是两件完全不同的事。


有一个很经典的故事讲这个。

想象一个山洞,洞口分叉成两条路 A 和 B,但两条路的尽头有一扇魔法门相连。这扇门需要念一句咒语才能打开。张三说他知道那句咒语。李四不信。

张三不想把咒语告诉李四。但他想让李四相信他确实知道。

于是张三想了一个办法。

他让李四站在洞口外,自己一个人走进洞里。李四看不到张三走了哪条路——他走的是 A 还是 B,李四不知道。

然后李四走进洞口,朝里面大喊:“从 B 路出来!”

如果张三确实知道咒语,他就能打开魔法门,从 B 路出来。如果张三不知道,他只有 50% 的概率刚好走了 B 路——因为在李四喊出来之前他就已经选好路了。

一遍不够。李四说:“再来。”

这次李四随机选了一条路——可能是 A,可能是 B。张三每次都从指定的路走出来。

重复 20 次之后,李四算了一下:如果张三只是碰运气,连续 20 次都猜对李四说哪条路的概率是二分之一的 20 次方,大概一百万分之一。

李四不信张三能靠运气连赢 20 次。

所以李四确信:张三知道咒语。

但在这个过程中,李四没有获得任何关于“咒语是什么”的信息。他没听过咒语,没见过张三开门。他只是知道——每次张三都从正确的路走出来了。这个结论不是靠相信,是靠概率推导出来的。


这个山洞故事里,藏着零知识证明的所有关键要素。

证明者想证明自己知道某个秘密,验证者不想只靠“相信”来接受结论。他们通过多轮交互——每一轮证明者可能赢也可能输——把概率压到一个低到无法接受的区间。验证者从“不信”变成“不得不信”。

重要的是这个过程的单向性。验证者只知道“证明者知道答案”这个事实——他不获得关于答案本身的任何知识。就像李四不知道咒语长什么样。


那回到现实。这有什么用?

比如区块链上的一笔隐私转账。一笔转账需要被验证——付款方确实有钱、确实转了账、收款方确实收到了。传统区块链上,所有人都能看到这笔交易的金额和双方地址——这叫透明,不叫隐私。

零知识证明能做到的是:你在链上提交一段密文,外加一个证明。这个证明告诉所有人“我现在有一笔转账,它符合所有规则——金额没造假、余额没透支、签名有效——但我不告诉你具体转了多少钱、谁转给谁。”

其他人看到的只是一段乱码和一个证明,外加一个结论:验证通过了。

他们不是相信你说的。他们是自己推导出来的。


所以回到开头那个问题:零知识证明到底在证明什么?

不是“答案是什么”。

是“我知道答案——你每次考我我都通过了,你不是相信我,你是不信都不行。”

而整个过程里,你没有泄露任何不该泄露的东西。在一个本就需要互不信任的系统里,说服对方的唯一方式不是让他相信你,是让他没办法反驳你。

# 密码学# 零知识证明# 区块链

Read Next