抽查
一本关于零知识证明的小书。
这个名字骗了很多人。「零知识证明」听起来像是一门关于藏东西的技术,于是大部分介绍都从「山洞里有一扇魔法门」开始,讲完你会觉得:哦,一种高级点的密码验证。
但真正把这门技术从论文里推出来的,是另一半——那个「证明」。它让确认一件事做对了,第一次可以比把这件事再做一遍便宜得多。以太坊今天验证一个区块的全部执行,不再需要每个节点各跑一遍;16 分钟的证明时间已经压到 16 秒,而验证只要几毫秒。秘密不泄露,只是这条分家线上顺手带来的副产品。
怎么做到的?答案就是书名:抽查。但抽查平时是不算数的——一份一千零二十四步的记录,作弊者只改一格,你随手戳三格抓住他的概率是 0.29%。这本书讲的是中间那一步魔法:先把记录改写成一种「错一处就错一大片」的形式,然后同样戳三格,抓住的概率变成 99.9996%。
把一件事做完,和确认它做对了,是两笔可以分开定价的账。这在人类历史上大部分时候都不成立——想知道账本对不对,你只能把账重算一遍;想知道这段代码跑出来的结果对不对,你只能自己再跑一次。
零知识证明打破的就是这一条。而它用的手段朴素得让人意外:把要检查的东西改写成一种「改一个字就会改到几乎所有地方」的形式,然后随机戳几下。戳中的概率不是靠运气堆上去的,是靠改写把作弊的痕迹摊到了全篇。
「不泄露秘密」是这套机制的第二个结论,不是第一个。这本书按重要性排序,所以它排在卷 II 的中间,而不是开头。
这本书里能拿到的几个数
| 第几章 | 数 | 它推翻了什么 |
|---|---|---|
| 03 | 4714 格 | 一份 1024 格的记录,作弊者改了 1 格。你要抽到 99% 的把握,得抽 4714 格——比整份记录还长 4.6 倍。朴素的抽查不但没用,还比重做更贵 |
| 06 | 2 条记录 | 同一个人,对两个不同的挑战都答对了,我就能当场把他的私钥算出来。这不是攻击,这是「知道」这个词的定义 |
| 07 | 距离 = 0 | 真证明者产生的 121 条问答记录,和一个完全不知道秘密的模拟器产生的 121 条,逐条一模一样,总变差距离精确为 0。这就是「零知识」的严格意思 |
| 09 | 100% 接受 | 哈希里少放一个参数,我拿 Alice 的合法证明当场改出一个她自己都不知道私钥的公钥的合法证明。把那个参数塞回去,同一手法立刻失效 |
| 11 | 0.29% → 99.9996% | 全书的招牌。同一处作弊,同样抽三格。中间那一步只是「把 1024 个数看成一条曲线,再把曲线画长 64 倍」——错的格子从 1 个变成 64513 个 |
| 12 | 58× | 验一个 512×512 的矩阵乘法,不重算,快 58 倍,错判概率上界 3.55 × 10⁻¹⁵。这一章里没有任何密码学——「验证比执行便宜」本身跟加密无关 |
| 14 | 164× / 2.3× | 本机实测:证明一段 8192 步的计算,比直接跑它慢 164 倍;而验证那份证明,比直接跑它快 2.3 倍,且工作量只随长度按对数增长。「简洁」不是省了力气,是把力气搬给了另一个人 |
| 17 | 184× | 我亲手数了一遍:一个 SHA-256 电路要 33512 条约束(它算出的哈希值与 node:crypto 逐位相同);换成为算术而生的 MiMC,同一件事 182 条。递归证明就是踩在这个倍数上站起来的 |
| 19 | 1000 → 1.6 | 混币池里有 1000 个人,你存完 10 分钟就取——有效匿名集只剩 1.6 人。零知识保证协议不泄露,它管不了你什么时候点的那个按钮 |
| 22 | 漏 8 条 | 数独电路少写 8 条约束,一份正中间填着 12 的「数独解」通过了全部 1612 条约束,证明合法,验证者看不出任何异常 |
这些数字全部是生成这本书时在本机现算的。能和现成实现对照的地方都对照了:书里那台 SHA-256 电路算出来的 ba7816bf… 和 node:crypto 逐位相同;那条低度扩展的「相同格子只剩 1023 个」是把 65536 个点全部枚举了一遍数出来的,不是估的;Schnorr 那几章跑的是真的 secp256k1 曲线,那份伪造的证明是真的被验证器接受了。书里没有一个手写的数。
配套的验证器会把这本书重算一遍:3383 项断言,其中 142 处是「正文里印的数字 ↔ 独立重写一遍的算法」逐条交叉核对——算法一改而正文没跟上,验证器立刻变红。此外每一页都用 jsdom 真的加载一遍,检查母题图里没有 NaN、每个代码块都被高亮、每章的贯穿组件都在。
目录
分家
SPLIT把一件事做完,和确认它做对了,是两笔完全不同的账。这一卷把这两笔账分开,然后指出:这门技术真正的主角是抽查,而抽查平时是不算数的。
对答
EXCHANGE最小的那台证明机器只有三步:我先押注,你再出题,我再作答。这一卷把它拆开,直到「他知道」和「没泄露」这两句话都有了可以计算的严格意思。
摊开
SPREAD从「我知道一个数」到「我跑对了一整段程序」。这一卷是全书的技术核心,也是那个招牌数字出现的地方——而它靠的不是密码学,是一条关于多项式的、初中生也能验证的事实。
压短
SHRINK「简洁」这个词掩盖了一笔巨大的转账。这一卷把账算清楚:验证省下的每一分力气,证明者都要还,而且是三位数地还。然后看这笔账怎么被搬到无穷远。
落地
LAND这门技术今天真正在做的三件事。第一件和隐私毫无关系,第二件比大多数人以为的脆弱得多,第三件正在把「出示证件」这个动作整个换掉。
余账
LEDGER最后一卷讲这门技术不能做什么。证明成立,不等于你想的那件事成立——中间有两处断裂,两处都不在密码学里。然后把全书赊的账结清。
写给谁
写给这样的人
- 会写代码,但没系统学过密码学。你知道哈希是什么、大概知道公钥私钥是干嘛的,但从来没弄明白「零知识证明」到底证的是什么、为什么证明可以比原计算短、以及那个「可信设置」为什么值得那么多人紧张。
- 数学不怕,但要从直觉进入。书里会出现有限域和多项式,但每一样都是先说清楚「我们要它满足哪几条」,再推出「所以只能长这样」。没有一个公式是空降的,也没有一个术语是不解释就用的。
- 对「世界怎么运转」感兴趣。这一门尤其明显:学完你会在数据库审计、云计算信任、身份证件、投票、甚至「怎么向别人证明一件事」这种日常动作里,看见同一台机器。
- 看过一堆「阿里巴巴山洞」的科普,仍然不知道 zk-SNARK 到底是怎么回事。这本书的第 3 章就会告诉你,山洞那个故事讲的其实是另一件事,而它跟今天工业界用的东西关系不大。
不打算做的事
- 不做严格证明。书里所有的「因此」都可以在纸上补严,但补严不在这本书的范围里。要严格版,第 23 章给了书单和论文。
- 不教你写 Circom 或 Halo2。这本书讲的是「为什么这样能行」,不是某个框架的 API。学完再去看那些工具,你会知道每个概念对应书里的哪一章。
- 不在页面里塞交互 Demo。每章末尾给你一段几十行、能直接粘进 Node 或 Python 的代码,和一张已经跑出来的结果表。你自己的机器比这个页面强得多。
- 不假装这门技术已经成熟。第 15、22 章会花整整两章说它今天还靠什么撑着、以及事故都出在哪儿——答案是:几乎从来不在密码学里。
怎么读这本书
三条建议
- 卷 I 别跳。它只有四章,而后面十九章全部建立在第 3 章那个「抽查平时不算数」的结论上。如果你在第 11 章觉得那个招牌数字只是「哦,编码嘛」,八成是第 3 章没有真的读进去。
- 每章开头有一个「◻ 本章先赊三条」。那是这一章要你先记账的三句话——现在你没有理由相信它们。章末的「✓ 结账」会逐条兑现,兑不了的会明确写「这笔滚到第几章」。
- 这个赊账/结账的组件本身就是这本书的自指演示。整本书讲的就是「怎么把『你信我』换成『你可以核对我』」,那这本书自己每一章也该示范一次。到第 23 章,你会拿到一张完整的账单,包括还不清的那几笔。