卷 I · 分家CH 01深度 1/23

你不必看完就能确信

同事把一份报表推过来,说「我算过了,没问题」。你现在只有两个选择:信他,或者自己重算一遍。人类几乎所有的协作——审计、代码评审、论文复现、区块链上每一个节点——都卡在这个二选一上。这本书讲的是第三个选项:他给你一份几十字节的东西,你花几毫秒看一眼,然后你知道他没算错。不是相信,是知道。

验证 ≠ 执行跨领域对照表70 万倍

◻ 本章先赊三条

这三句话你现在没有任何理由相信。先记在账上,这一章末尾结账。

第一条。确认一件事做对了,可以比把这件事重做一遍便宜得多——而且这跟「这件事本身好不好算」无关。 第二条。「零知识证明」这个名字里,最不重要的部分恰恰是「零知识」 第三条。这件事的核心机制,是一个你从小学就会、而且一直觉得它不太靠谱的动作:抽查。

二选一

先把问题摆清楚。有人向你断言一件事,你想确认它是真的。历史上你只有两条路:

路 A:相信他。
        代价 = 0
        风险 = 他可能在骗你,也可能只是算错了

路 B:自己重做一遍。
        代价 = 和他做这件事一样大(有时更大,因为你还得先搞懂他在做什么)
        风险 = 0

整个现代社会都是这两条路的各种混合。会计师事务所存在,是因为公司让每个股东各查一遍账不现实,于是大家合伙雇一个人替所有人走路 B,然后所有人对这个人走路 A。代码评审是同一个结构:你没法把同事写的每一行都在脑子里跑一遍,于是你抽着看,然后走路 A。

比特币的做法最极端,它拒绝走路 A:网络上每一个节点,都把每一笔交易从头到尾重新执行一次。这是它安全的来源,也是它慢和贵的来源——全世界几万台机器在算同一件事,算出同一个答案,然后互相点头。

这本书讲的是路 C。

◆ 路 C

他做完这件事之后,附送一份很短的东西(几十字节到几十 KB)。你拿到它,做一点很少的工作(毫秒级),然后你就可以确定:他没算错。他要是算错了、或者故意改了一个数,你会以压倒性的概率当场发现。

而且——这是顺带的——你从那份东西里学不到他手里的任何秘密。他可以证明「我知道这个账户的密码」而不告诉你密码,证明「我算的这一百万笔交易全合法」而不告诉你这一百万笔是谁转给谁。

先分清两件事:找答案难,和查答案难

有人会说:这不新鲜啊,找一个大数的两个因数很难,但验证乘积对不对很容易。这确实是真的,而且可以当场量:

N = 999985999949(40 比特,两个素数相乘)

  试除法把因数找出来      30.2 毫秒
  验证 p × q == N          0.0434 微秒
  ────────────────────────────────────
  差了                     695555 倍

但这件事有个名字,叫 NP,是 1970 年代的常识,不是这本书的内容。它说的是「答案可能很难,但一个已经给你的答案很容易」。

这本书要说的是更过分的一件事。请注意下面这个区别,这是整本书最重要的一句话

NP 给你的这本书给你的
他给你什么那个答案本身(因数、数独的解、密码)一份和答案无关的短证明
你要做多少工作O(n)O(1) 或 O(log n)
你学到了什么他的全部秘密只有「这句话是真的」
验一份一百万步的计算你得把这一百万步都看一遍你看几十次哈希,然后走人

NP 只保证「查比找便宜」,不保证「查比重做便宜」。给你一道数独的解,你要确认它对不对,仍然得把 81 个格子、27 组行列宫全部检查一遍——这个工作量和「解题」比是小了,但它和「题目大小」还是成正比的。而这本书里的验证者,工作量和题目大小几乎脱钩。一百万步和一万亿步,他做的活一样多。

这就是那个词:简洁(succinct)。它比「零知识」重要得多。

✎ 术语正名

工业界最常用的那个词是 zk-SNARK。把它拆开,四个字母各是一件事,而中文世界只翻译了最不要紧的那一个:

  • zk(zero-knowledge,零知识):你除了「这句话是真的」以外,什么也没学到。——最出名,工程上最不重要,很多系统甚至不需要它。
  • S(Succinct,简洁):证明很短,验证很快,且几乎不随被证的计算变长。——这才是它今天有用的原因。
  • N(Non-interactive,非交互):不需要你和他来回问答,他生成一个文件,谁都能验。
  • ARK(ARgument of Knowledge,知识论证):注意是 argument(论证)不是 proof(证明)——它只对算力有限的骗子成立。第 2 章会说清楚这个区别值多少钱。

所以这门技术更诚实的中文名应该是「简洁论证」。「零知识」这三个字之所以垄断了这个领域的名声,很大程度上是因为它听起来最像魔法。

那张对照表

学一样东西值不值,看它学完之后会不会改变你看别的东西的方式。这一门的检验方式很直接:下面每一行都是一个「所有人都以为只能这样」的场景。

场景你以为它是 X其实它是 Y
零知识证明加密技术的一种,用来藏东西验证技术的一种。它和保密的关系,就像压缩和备份的关系——沾边,但不是一回事
区块链为什么慢共识算法慢、TPS 不够因为所有人都在重算同一件事。共识只是决定顺序,真正的浪费是执行被复制了几万份
财务审计抽查凭证 + 相信事务所的职业操守一个「抽查凭什么算数」的问题。今天的抽样审计之所以能抓到人,靠的是造假者不知道你会抽哪一张——和这本书是同一个原理,只是没有那一步编码
论文复现别人下载你的代码,重跑一遍「验证 = 重做」的又一个实例。如果作者能附一份「我确实在这份数据上跑出了这个数」的证明,复现危机的一半会变成一个工程问题
你把模型扔给云厂商信任它真的用 H100 跑了你要的那个模型今天你没有任何办法查。可验证计算就是要把这件事变成可查的(第 21 章)
出示身份证为了证明「我成年了」,只好把整张证件给对方你想说的是 1 比特,实际给出去 30 多比特——足够在十四亿人里唯一定位你(第 20 章)
选举计票要么信选管会,要么全部重数同一个二选一。「端到端可验证投票」是这套思想在政治学里的分支
可复现构建你自己编译一遍,对比哈希值路 B 的一个精致版本:为了不信任发布者,全世界重复了同一次编译几百万遍

这张表就是这本书的售后承诺。读完之后,你再看到「所有人都要重做一遍」这种结构,会先问一句:这里能不能改成一个人做、其他人抽查?

这本书的形状

上面那张图是这本书的母题,每一章都会以不同的内容再画一次。它只表达一件事:上面那条长带子是「把事做完」,下面那三支箭是「确认它做对了」。整本书就是在回答一个问题——那三支箭凭什么能代替这条带子。

答案分三步,正好是这本书的前三卷:

  1. 先让对方把话钉死(卷 I)。他必须在看到你要抽哪一格之前就把整条带子固定住。顺序反过来,一切归零。
  2. 再让抽查变得有意义(卷 III)。原始的带子上,改一格只污染一格,抽查抓不住——这是第 3 章要给你的第一个坏消息。真正的魔法是把带子改写成一种「改一格就会污染几万格」的形式。
  3. 顺手把内容盖住(卷 II)。做完前两步之后,你会发现证明者其实不需要让你看见格子里装的是什么——他只需要让你确信格子之间的关系成立。零知识就是从这个缝里长出来的。
⌨ 自己跑一遍

先亲手感受一下「查」和「找」的差距。这是全书最原始的例子,一行 Python:

import time

N = 999985999949            # 两个素数的积,40 比特

t = time.perf_counter()
d = 2
while d * d <= N:           # 试除法:从小到大挨个试
    if N % d == 0:
        break
    d += 1
find = time.perf_counter() - t

t = time.perf_counter()
for _ in range(1000):
    ok = (d * (N // d) == N)   # 验证:一次乘法
verify = (time.perf_counter() - t) / 1000

print('找出因数 %.1f 毫秒' % (find * 1000))
print('验证一次 %.4f 微秒' % (verify * 1e6))
print('差 %d 倍' % round(find / verify))

本机跑出来是 30.2 毫秒0.0434 微秒,差 695555 倍。把 N 换成一个 80 比特的半素数,左边会跑到你等不下去,右边纹丝不动。

但记住这一章的核心区别:这个例子里,验证者拿到的是答案本身(那个因数)。这本书要做的是把这个 d 也藏起来,同时让验证依然成立——而且当被验证的东西是「一百万步计算」而不是「一次乘法」时,验证的工作量还是不涨

python3 -c "N=999985999949;d=2 while d*d<=N and N%d: d+=1 print(d, N//d)"

在线跑:python.org/shell,纯标准库。这本书后面所有的代码也都是零依赖的。

▸ 在现实里
  • 以太坊现在正在把自己改成这个样子。2026 年的路线图里有一条叫 L1-zkEVM:验证者不再需要跑一遍区块里的全部交易,而是验一份证明。过去一年里,为一个主网区块生成证明的时间从约 16 分钟压到了约 16 秒,成本降了 45 倍(以太坊基金会 2026 年公布的数字)。这是路 C 第一次真的落到一个几千亿美元级别的系统上。
  • 你手机上的每一次 HTTPS 握手。服务器向你证明「我持有这个域名证书对应的私钥」,而它没有把私钥发给你。这是一个非常朴素的零知识思想的应用——第 8 章会说明,数字签名本来就是一份零知识证明,只是从来没人这么介绍它。
  • 报税。你想证明「我的收入低于某个门槛,够资格申请这项补贴」,今天的做法是把完整的收入流水交给对方。这是那张对照表里「出示身份证」那一行的成人版。
  • 一个反例,同样值得记住。你在餐厅点菜,服务员复述一遍你点的东西。这也是「验证比重做便宜」——重做是重新点一次菜,验证是听一遍。人类日常里到处是这种廉价验证,只是我们从没把它当成一门技术。
✗ 这个直觉是错的

「零知识证明是一种加密。既然它能藏住秘密,那它大概就是某种高级的加密算法。」

不加密任何东西。加密解决的是「怎么让第三方看不懂这段内容」,而这里的问题是「怎么让第三方相信一句话」。两者用到一部分共同的数学工具(有限域、椭圆曲线、哈希),但目标正交。

一个最直接的证据:这本书里那台最厉害的证明系统,可以完全不含「零知识」这条性质。以太坊的 zk-rollup 里,绝大多数交易数据是公开的——大家都能看到谁转给了谁,证明只是用来省掉重算。它们仍然叫 zk-rollup,纯粹是名字叫顺了。

正确的心智模型是:这是一门关于「检查」的学问,恰好还附赠了一个隐私开关。把开关关掉,机器照常运转,而且更快。这也是为什么这本书叫《抽查》,不叫《零知识》。

✓ 结账

这一章的一句话

「把一件事做完」和「确认它做对了」是两笔可以分开定价的账;一旦分开,很多「所有人都必须重做一遍」的结构就可以塌缩成「一个人做,其他人抽查」——而秘密不外泄,只是这条分家线上顺手带来的副产品。

下一章我们把「证明」这件事本身拆开。它其实是三条性质拼起来的:诚实的人一定能过、骗子几乎一定过不去、验证者什么也学不到。这三条互相之间没有任何蕴含关系——你可以造出一台机器,它满足其中任意两条而不满足第三条,而且三种坏法完全不同。其中最有意思的一种坏法是:一台永远只回答「通过」的验证器,是完美满足零知识的。