比特币白皮书注释导读:逐节解析全部十二章
中本聪 2008 年比特币白皮书的逐节导读——每一节在论证什么、为什么这样设计、以及它建立在哪些前人工作之上。
2008 年 10 月 31 日,中本聪把《Bitcoin: A Peer-to-Peer Electronic Cash System》发到 Cryptography 邮件列表。全文九页,八条参考文献,标题页上没有任何机构署名。本文逐节导读:这一节在论证什么、设计为什么长成这样、以及它依赖了哪些前人工作。
建议对照原版 PDF 阅读。论文本身半小时能读完,下面的注释默认你手边开着它。我们以转述为主,只在少数值得逐字推敲的地方引用原文短语。
论文要解决的问题
摘要用一句话交代了目标:在线支付直接在双方之间发生,不经过金融机构。后面的全部内容都服务于同一个障碍——双花。数字货币如果只是数据,持有者就能把同一份钱花两次。此前所有系统都靠一个可信方记账来解决:Chaum 的 ecash 有银行,Hal Finney 的 RPOW 有一台跑在防篡改卡上的服务器。白皮书的贡献,是在没有这样一个角色的前提下让账本保持诚实。
第 1 节 引言
中本聪没有从意识形态入手,而是从商业成本切入:调解纠纷抬高交易成本,划出了实际可行的最小支付金额,也让"不可逆服务收取不可逆付款"变得不可能。商家不得不向客户索取超出必要范围的信息,一定比例的欺诈被当作不可避免而接受下来。
这个切入角度很重要。这不是一份宣言,而是一篇论证"密码学方案比法律方案更便宜"的工程论文。后来附着在比特币身上的政治意涵,是两个月后随创世区块的 coinbase 留言一起到来的,不在这份文档里。
第 2 节 交易
一枚币被定义为一条数字签名链:每一任持有者对"上一笔交易的哈希 + 下一任持有者的公钥"签名。任何人都能验证所有权链条。中本聪明说,这部分很容易。
难的地方说得很直白:收款方无法确认付款方没有把这枚币花过第二次。惯常的答案是设一个造币厂逐笔核验,但这等于把可信第三方请了回来——而且,用中本聪的话说,整个货币体系的命运就此系于运营造币厂的那家公司。于是需求被精确化为:收款方需要一个证明,证明在每笔交易发生的时刻,多数节点都认可它是最先收到的那一笔。这一句话,就是后面十节要实现的规格说明。
第 3 节 时间戳服务器
这里接上了它最重要的祖先。时间戳服务器的做法是:对一批待戳记的数据取哈希、广泛公布该哈希,并让每个新时间戳都包含前一个时间戳,从而形成一条链,每个新戳都在加固它前面的所有戳。
这就是 Haber 与 Stornetta 的设计,此处的引用括号是 [2-5]——连续四条,其中三条是他们的。他们 1991 年发表于《Journal of Cryptology》的论文提出的正是这种哈希串联,1993 年他们与 Dave Bayer 合作的论文又加入了默克尔树。中本聪那句"每个时间戳把前一个包含进自己的哈希,形成链条,后来的每个戳都强化之前的戳",几乎就是对他们工作的概括。他们做成了什么、留下了什么没解决,见我们的 Haber 与 Stornetta 导读。
论文还提到一种更早的做法:把哈希登在报纸或 Usenet 上。Haber 与 Stornetta 创办的 Surety 公司,做的就是这件事。
第 4 节 工作量证明
要在点对点网络上实现分布式时间戳服务器,出块必须是昂贵的。机制取自 Adam Back 的 hashcash,即第 [6] 条引用:不断扫描 nonce,直到区块的 SHA-256 哈希以要求数量的零比特开头。生成很难,验证只需一次哈希。
本节有两个决定承载了比特币的大部分重量。第一,修改一个旧区块,就得重做它以及它之后所有区块的工作量证明——历史由累积的能量保护,而不是由访问权限保护。第二,中本聪否定了"一 IP 一票"(任何能分配大量 IP 的人都能颠覆它),转而采用论文所说的"一 CPU 一票"。把基于身份的投票换成基于成本的投票,正是系统能抵抗女巫攻击的原因:当影响力用哈希计量时,造一千个假身份什么也买不到。
按固定平均出块速率调整的动态难度目标,是比特币在 hashcash 之上的增补。Back 的凭证成本是固定的,而比特币需要一套能扛住硬件进步的发行节奏。
第 5 节 网络
六个编号步骤定义了整个协议:广播交易、把交易收集成块、为区块寻找工作量证明、找到后广播区块、只在块内所有交易有效且未被花费时才接受、并通过在其上构建下一个区块来表达接受。
冲突处理规则只有一句:节点始终认为最长的链是正确的,并持续在其上延伸。中本聪补充说,节点容忍消息丢失——漏掉一个区块的节点会在收到下一个区块时发现并索取。网络层被刻意设计成不可靠、尽力而为,这个决定经受住了时间考验。
第 6 节 激励
每个区块的第一笔交易创造归出块者所有的新币。这一下解决了两个问题:无需权威机构就把初始供应分发出去,同时为第 4 节所说的安全性买单。
本节结尾的论证是:一个算力超过诚实网络总和的贪婪攻击者,会发现遵守规则更有利可图——挖矿收益让他拿到比其他所有人加起来还多的新币,而攻击则会损害自己持币的价值。这是一个经济学论断而非密码学论断,网络安全最终就建立在它上面,它也是全文争议最大的一段。
中本聪还指出,当发行结束后,激励可以完全转向交易手续费。比特币后来所有关于手续费市场的争论,源头都在这句话。
第 7 节 回收磁盘空间
旧交易可以丢弃,只在区块头保留默克尔树根——即 Merkle 1980 年的哈希树,第 [7] 条引用。论文给出的算式是:不含交易的区块头约 80 字节,每小时六个块,一年约 4.2 MB。
第 8 节 简化支付验证
只保存区块头的用户,可以通过索取默克尔分支来验证某笔交易已被打包。正是这个设计让轻钱包成为可能,此后每一个手机比特币钱包都是这两页纸的实现。中本聪对权衡说得很明确:SPV 的可靠性以诚实节点控制网络为前提,频繁收款的商家仍然应该自己跑全节点。
第 9 节 价值的合并与拆分
交易可以有多个输入,通常最多两个输出——一个付款、一个找零。这就是 UTXO 模型,只用一小段就描述完了,而它是比特币与以太坊这类账户模型系统之间最深的结构性差异。
第 10 节 隐私
银行靠限制信息访问获得隐私,比特币做不到,因为所有交易都是公开的。于是它在另一个位置切断信息流:公钥保持匿名。中本聪把这类比为证券交易所的"行情带"——成交时间和规模公开,但不告诉你交易双方是谁。他也承认残留风险:多输入交易必然暴露这些输入属于同一持有者。此后二十年的链上取证行业,就建立在这个泄漏点上。
第 11 节 计算
数学核心。攻击者的链与诚实链之间的竞赛被建模为二项随机游走,等价于赌徒破产问题,引用 Feller 的概率论教科书作为第 [8] 条参考。攻击者的进展服从泊松分布,论文据此计算了经过 z 个确认后攻击者仍能追上的概率,结果是该概率随 z 指数下降。本节里那段 C 代码,是全文唯一的源码。
流传甚广的"六个确认"惯例就源自这里——不是论文的直接结论,而是读者从它那张概率表里读出来的。
第 12 节 结论
一段话重述整个系统:一个结构极简的节点网络,用工作量证明记录一份在计算上难以更改的公开历史。中本聪强调,节点之间几乎不需要协调,不需要身份认证,可以随时离开和重新加入。
八条参考文献
这份书目是比特币思想来源最短的一张地图:[1] 戴伟的 b-money(1998);[2] Massias、Serret Avila 与 Quisquater 的安全时间戳服务(1999);[3] Haber 与 Stornetta 的1991 年时间戳论文;[4] Bayer、Haber 与 Stornetta(1993);[5] Haber 与 Stornetta 关于比特串安全命名的论文(1997);[6] Adam Back 的 hashcash(2002);[7] Ralph Merkle 的 Protocols for Public Key Cryptosystems(1980);[8] William Feller 的《概率论及其应用导论》。
八条里有三条是 Haber 与 Stornetta。Nick Szabo 的 Bit Gold 不在其中——中本聪后来在别处提到过它,但白皮书里没有。所有前比特币设计的横向对比,见前比特币数字现金文献。
白皮书里没有的东西
值得单独说明,因为不少文章把这些安在了白皮书头上:它从未提到 2100 万枚的总量上限,从未把 "blockchain" 当作一个名词使用,也完全没有涉及智能合约、矿池或钱包。总量上限出现在源代码和中本聪 2009 年 1 月的发布公告里;"block chain" 这个复合词是 2009 年及之后在社区使用中逐渐固定下来的。