比特币白皮书译稿(全)

96
生猛老会计
2017.09.07 20:10* 字数 6350

中本聪的比特币白皮书译稿

翻       译:杨怀玉

比  特  币:点对点电子现金系统

作        者: 中本聪

电子 邮箱: satoshin@gmx.com

网        址: www.bitcoin.org

摘要

【摘要】一个完全地(使用)点对点的改进版电子现金,将支持一方直接发送给另外一方的在线支付方式,而无需通过金融机构。“数字签名”提供了部分解决方案,但如果还是需要一个被信任的第三方来防止“双重支付”,则丧失了其关键价值。我们提出的 “双重支付”问题解决方案是使用“点对点”网络。该网络使用“hashing(哈希)” 将交易打上“时间戳”,以此将所有交易合并为一个不断延展的基于哈希的“工作量证明”链条,构成(交易)记录。除非重建“工作量证明”,该记录不可能被篡改。最长的链条不仅作为被目击事件序列的证明,还(表明)该证明来自最大规模的CPU算力池。只要被节点所控制的大多数CPU算力没有协同一致攻击网络,那么他们将生成最长的链条,超越攻击者。此网络本身只需极少的基础设施。信息尽最大努力进行广播,节点可以随意离开或重新加入网络,其离线期间所发生(的所有交易),由其(补充)接收最长的“工作量证明”链条即可验证。

一、导言

互联网商业,逐渐发展成为几乎完全借助作为被信任第三方的金融机构来处理电子支付业务。然而,该系统即使目前运转良好,足以应付大多数交易业务,但它还是受困于其固有的“基于信任模式”缺陷的问题。(互联网商业中,)“完全不可逆交易” 并非真正可行,原因是会导致金融机构不能避免地卷入争端的调解。这种调解成本导致的交易成本增加,限制了可实现交易的最小规模,同时断绝了日常小额交易的可能性,而且还有一种更为广义的成本,即为不可逆服务而设计出来的不可逆支付能力将会减弱。伴随着(交易)撤销可能性的是信任需求扩张。(由于交易可能单方面撤销,)商人们必须对他们的顾客保持戒备,由此,为了获取更多的信息不断烦扰顾客,(即使该信息量)远超他们所需。甚至无可奈何地接受一定程度上的欺诈。(现实中),人们使用物理货币时,这些成本与支付的不确定能够避免,但(在互联网商业中),没有商家会通过一种没有信任方的信息渠道进行支付。

因此,一种以建立在密码学基础上的证明来替代信任的电子支付系统,就很有必要,该系统允许任何有交易意愿的双方直接相互交易,而不需要一个被信任的第三方。在计算上不可能撤销的交易将保护卖方不被诈骗,常规的第三方中间商亦能够轻松地实现对买方的保护。这篇论文里,我们提出一种双重支付问题解决方案,就是使用一种点对点分布式时间戳服务器,以生成可计算的、按时间的前后顺序排列的交易序列证明。只要诚实的节点共同控制的CPU算力,比协同操作的攻击者节点集团更多,这个系统就是安全的。

二、交易

我们规定电子货币等同于数字签名链。每一位所有者转移其电子货币给下一位,通过数字签署一个哈希,这个哈希是前一个交易的,和下一个所有者的公钥,和加在电子货币的末端。收款人能够通过核对签名来证明该链所有权。

问题当然就是收款人不能核实某个(货币)所有者没有“双重支付”该币。普通的解决方案是引入一个被信任的中心权威(机构),或铸币厂,以核对每一笔交易是否双重支付。每笔交易完成后,货币必须回收到铸币厂以发行新币,而且仅铸币厂发行的货币能够被信任不会“双重支付”。此方案的问题是整个货币系统的命运依赖于公司来运行铸币厂,导致每一笔交易不得不通过他们,就好象一家银行。我们需要一种方式,来帮助收款人知晓前任所有者没有签署任何更早的交易。为了我们的目的,最早的一笔交易是重要的,这样我们不必担心后来者试图“双重支付”。证实一笔交易是否存在的唯一方式,就是使得所有的交易都是可知的。在基于铸币厂的模式里,铸币厂是所有交易的知情者,而且清楚哪一笔最先到达。没有一个被信任方情况下,要达到这一点,交易必须公开广播,如此,则我们需要一个系统,该系统可使参与者对他们接收到(交易)顺序的单一历史达成共识。收款人需要证明每一笔交易的时点,大多数节点承认该交易为最先被接收的交易。

三、时间戳服务器

我们提出的解决方案始于一种时间戳服务器。时间戳服务器通过从被时间戳记的项目区块中提取哈希并广泛地传播该哈希来运转,类似在报纸上(广告)或在全球新闻网络发邮件。该时间戳验证数据在某一时点确实存在,显然,目的是加入到哈希中。每一个时间戳都包括前一个被加入到哈希中的时间戳,形成一个链条,因为每一条追加的时间戳补充其前一个时间戳。

四、工作量证明

要在点对点的基础上构建一个分布式时间戳服务器,我们将需要用到与亚当•贝克创造的“哈希现金”类似的“工作量证明”系统,而不是报纸或全球新闻网络邮件。在进行哈希计算时,该“工作量证明”引入对于某一个值的检索工作,比如运行SHA-256,该哈希值从某一数量的0字符开始。其(检索工作)所需的平均工作量是所需0字符数量的指数,而(检索工作结果)则能通过仅仅执行一次哈希计算来检验。对于我们的时间戳网络,我们在区块中(增补)某一随机数,(通过哈希计算,搜索)给定的区块哈希值所需的零字符串,直到找到一个值为止,以构建“工作量证明”机制。只要CPU(尽可能多的)算力被消耗在满足“工作量证明”机制上,则区块不能被修改,除非重新进行(所有)工作。由于下一区块链接其后,修改区块的工作量必须包括重建其后面的所有区块。

“工作量证明”机制也解决了代理作出大多数判断的人选确定问题。如果该“大多数”建立在“一个IP地址一张选票”的基础上,它将被破坏,因为每一个人都能够分配到很多IP。“工作量证明”实质上是“一个CPU一张选票”。最长的链条代表大多数判断,因为该链条拥有尝试投入进来的最大量“工作量证明”。如果CPU算力的大多数由诚实的节点控制,诚实的链条将以超过其他与之竞争链条的速度快速生长。为改变一个已完成区块,一个攻击者将被迫重建区块“工作量证明”,以及所有后接区块,然后追上,超过诚实节点的工作量。我们稍后将提及,由于随后区块持续增加,一个稍慢的攻击者追上的概率以指数级减少。随着时间的推移,计算机硬件速度的持续加快和运行节点的兴趣变化无常,为了应对上述情况,“工作量证明”机制的难度通过一种以设定每一小时产生区块的平均数量为目标的动态平均来调节,如果(区块)增长太快,难度将增加。

五、网络

运行网络的步骤如下所示:

1)新的交易向所有的节点广播。

2)每一个节点将新的交易纳入一个区块。

3)每一个节点努力为自己区块寻找一个具有一定难度的“工作量证明”。

4)当一个节点找到了“工作量证明”,它向所有节点广播该区块。

5)当且仅当区块里面的所有交易有效且之前从未发生时,(其他的)节点才接受该区块。

6)节点通过追加链条中的下一区块的工作以表示其对区块的接受,使用该被接受区块的哈希作为(下一区块的)前置哈希。

节点总是把最长的链条视为正确,并将持续延长该链条。如果两个节点在同一时点广播的下一区块描述并不一致,一些节点会率先接受其中一个或另一个区块。在此情况下,他们工作于率先被他们接受的区块,但保存另外分叉以防其变得更长。当下一个“工作量证明”被找到,以及一个分叉变得更长时,这种“平局”将被打破;工作在其他分叉上的节点最后将转到这个较长的区块。

新交易的广播并非一定需要到达所有的节点。只要他们到达多数节点,他们将在短时间内被纳入一个区块。区块广播亦对缺失的信息具有容错功能。如果一个节点没有收到某个区块,它将在接收下一区块,且意识到缺失了一个区块时,提出(相应)请求。

六、激励机制

根据规则,区块里的第一笔交易是一笔特殊交易,该交易产生一枚归属于区块创造者的新币。 这将增加节点支持网络的激励,并且提供一种方式来开始货币分配并进入流通,因此这是一种没有中心机构的发行方式。这种新货币数额持续稳定的增长类似于黄金矿工耗费资源来增加黄金流通。. 就我们来说,这类资源就是被耗费CPU时间和电力。

此类激励亦可见于交易费用。如果一笔交易的输出值低于其输入值, 其差额就是交易费,用以增加控制交易区块的激励价值。一旦一个预先设定的货币数量已经(全部)进入流通,该激励则全部转变为以交易费用(激励),并可完全地免除通货膨胀。

该激励还能有助于促使节点保持诚实。如果一个贪婪的攻击者有能力比诚实节点组织更多CPU算力,他将被迫进行选择,是通过欺诈以偷回其支付的款项(译者注:即双重支付攻击),还是通过(获取)生成的新货币。他应当会发现,按照规则行事更加有利可图,这样的规则有利于他比其他联合起来的每一个人获取更多的新货币,亦优于破坏系统以及损害自己拥有财富的有效性。

七、恢复磁盘空间

一旦一枚货币中的最后一笔交易被纳入了足够多的区块中,则能丢弃之前那些失效的交易以节省磁盘空间。为确保同时不破坏区块哈希,交易被随机散列(are hashed)在一棵 “梅克尔树(Merkle Tree)”上,仅仅将其“根节点(root)”置入该区块哈希中。只需剪除此树的其他分枝,先前的区块则能够被压缩。内置的哈希无需保存。

一个不含交易(信息)的区块首部大约是80 字节(bytes)。如果你希望在每10分钟左右生成一个区块,则每年约(需空间)4.2MB (80B×6×24×365=4.2MB)。鉴于计算机系统在2008年通常以随机附带2GB存贮空间出售,而且摩尔定律(Moore’s Law)预示现在的增长速度是1.2GB每年,则即使区块首部必须永久保存,存贮(空间)亦不成问题。

八、简化的支付验证

在不运行覆盖全网全部节点情况下,支付验证也是可能的。用户仅需保留一个最长“工作量证明”链条的区块首部备份,由此,他能够通过质询网络中节点,直到他确信拥有最长的区块链,从而达到通过“梅克尔树”分支将交易连接到被打上了时间戳的区块的目的。他无法自行检查交易,但通过连接到链条的某一位置,他能够看到一个网络节点已经接受了该笔交易,而且,在之后的追加区块,进一步证实了这个网络已经接受了该笔交易。

此时,只要诚实节点控制网络,则验证是可靠的,但是,如果该网络被攻击者压服,则非常容易遭受攻击。虽然网络节点能够自己验证其交易,只要该攻击者能够继续压制该网络,简易方法将被攻击者伪造的交易所愚弄。必须采取一种针对性保护策略,以接收当网络节点发现无效区块时发出的报警信号,并提示用户软件下载整个区块及被报警交易,以确认其不一致。出于更加自主的安全保障和更快的验证考虑,接受大量日常频繁支付的商业机构很可能仍然希望运行他们自己的节点。

九、价值的合并与分割

尽管处理单个货币是可以的,但为了一次转让中的每一个货币而将一笔交易分割开来,将会变得很不便利。为允许价值进行分割和合并,交易包括多次输入及输出。通常地,要么是一个来自前一笔更大交易的单一输入,要么是合并了更小金额(交易)的多次输入,输出则至多只有两笔:一笔用来支付;另一笔找零(如果有的话,全部退回购买者)。

这时需要注意的是输出端,那里一笔交易依赖于多个交易,这些多个交易又依赖于更多的交易,这并无问题。从来不需要提取一个完全独立的交易历史备份。

十、隐私

传统的银行业务模式通过限制关联方获取数据入口和被信任的第三方来构建隐私等级。公开广播所有交易的必要性阻碍了这种方法施行,但是隐私还是可以通过在其他地方隔断信息流来保证:使用匿名持有的公钥。公众可以看见某人支付某金额给另外一人,但没有信息将此交易连接到任何人。这与股票交易所发布信息的方式类似,那里个人交易的时间和规模,即“报价”,是公开的,但不会告诉谁是交易方。

作为一个补充防火墙,一对新的钥匙被用于每一笔交易,以阻止他们连接到一个普通的所有者。有些连接还是不可避免,原因是多次输入的交易,必然会泄露出他们的输入来自相同的所有者。真正的危险是如果所有者的私钥被泄露,连接将会泄露属于此同一所有者的其他交易。

十一、计算

我们设想一个场景:一个攻击者试图比诚实链条更快地生成一个替代链条。即使其技术高超,还是无法做到突然侵入系统随心所欲地篡改,诸如无中生有地创造价值或者掠夺从未归属于他的财富等。节点将不会接受一笔无效的交易作为支付,而且,诚实的节点亦将不接受包含该无效交易的区块。一位攻击者仅能试图篡改一个他自己的交易,以收回最近消费的金钱。诚实链条和攻击者链条之间的竞赛可以描述为“二叉树随机漫步(Binomial Random Walk)”。成功事件为诚实链条延展一个区块,则增加领先,是为“+1”;失败事件则是攻击者的链条延展一个区块,则缩减差距,是为“-1”。攻击者从一笔给定的亏损迎头赶上的概率与“赌徒破产问题”类似。假设一个赌徒,拥有无限透支信用,(他)从一笔亏损开始,可以进行无限次数的测试以试图达到盈亏平衡点。我们能够计算他可能达到盈亏平衡点,或者攻击者赶上诚实链条的概率,如下所示:

p=诚实节点找到下一区块的概率

q=攻击者找到下一区块的概率

qz=攻击者在Z区块后赶上的概率

我们给定一个假设,p>q, 随着攻击者不得不赶上的区块数量不断增长,其概率呈指数级下降。由于胜算与其相悖,如果他无法幸运地在早期取得突飞猛进,则将被远远地甩在后面,他篡改(的可能性)将变得微乎其微。我们现在考虑在充分确定付款人不能修改交易之前,此笔新交易的收款人需要等待多长时间。我们假设这位付款人是攻击者,他想让收款人相信当时已经支付了,过一段时间后,将其改换为支付给他自己。事情发生时,会惊动收款人,但这个付款人希望是为时已晚。收款人生成一对新的密钥,将公钥给予付款人,并在签署前预留较短时间。如此将阻止(下述事情)发生:付款人通过连续不断地工作,提前准备区块链,直到他非常幸运地到达足够远的前方,(即其区块链长度超过诚实区块链长度),然后执行该交易。一旦该交易发送,不诚实的付款人在一条包含一项他的交易替代版本的并行的链条上秘密开始工作。收款人等到该笔交易已经纳入了一个区块,且已有 Z个区块连接在后。他并不知道攻击者已经制造增长(区块)的确切数量,但假设诚实区块在每一区块上预期耗费的时间的均等,攻击者区块潜在增长将呈“泊松分布”,期望值为:

为了获取攻击者追赶上的概率,我们将攻击者取得进展区块数量的泊松分布的概率密度,与在该数量下攻击者依然能够追赶上的概率相乘:

转换为以下形式,以避免无穷数列求和……

转换为C语言代码……

运行结果,我们能够看到概率 Z 值呈指数级下降。求解,令 P 少于0.1%时的Z值……

十二、结论

我们提出一个无需借助信任的电子交易系统。我们一开始,(即介绍了)基于数字签名生成货币的普通框架,(该框架)提供强有力的所有权控制,但无法完全防止“双重支付”。 为解决此问题,我们提出一种点对点网络,(该网络)运用“工作量证明”来记录一个公共的交易历史,对攻击者来说,如果(该点对点网络的)大多数CPU算力由诚实节点控制的,则篡改(记录的行为)很快变成在计算上是不可实现的。该网络因其简单随意的拓扑结构而粗壮皮实。节点只需很少的协调即可协同工作。他们无需辨认(身份),因为(交易)信息无需路由(routed)到某些特定区域,仅需尽最大努力传播即可。节点能够随时离开和重新接入网络,其离线期间所发生所有交易,由其(补充)接收“工作量证明”链条即可验证。他们以CPU 算力投票,并以努力延展有效区块和拒绝在无效区块后延展方式来表达他们的意见,即是否接受某区块的意见。通过这种共识机制,任何必需的规则和激励都能够被强制执行。

参考文献

[1] W.Dai(戴伟),《B币》,http://www.weidai.com/bmoney.txt, 1998年。

[2] H. Massias, X.S. Avila, and J.-J. Quisquater, 《只需最小信任的安全时间戳服务器设计》,比荷卢经济联盟第二十届信息理论学术报告会,1999年5月。

[3] S. Haber(哈勃), W.S. Stornetta(斯托尔内塔),《如何对数字文件进行时间戳记录》,《密码学期刊》, 1991年第2期(总第3期),第99-111页。

[4]D. Bayer(拜尔), S. Haber(哈勃), W.S. Stornetta(斯托尔内塔), 《提升数字时间戳的效率和可靠性》,《序列二:通讯安全及计算机科学之理论》(1993年),第329-334页。

[5] S. Haber(哈勃), W.S. Stornetta(斯托尔内塔),《字符串安全命名》,国际计算机学会第四届年会关于计算机和通讯安全的会议记录,第28-35页,1997年4月。

[6]A.Back(亚当•贝克),《哈希现金——拒绝服务攻击之反制方案》,http://www.hashcash.org/papers/hashcash.pdf, 2002年。

[7]R.C.Mekle(梅克尔),《公钥密码系统协议》,电子与电气工程师学会,1980年安全与隐私学术报告会会报,第122-133页,1980年4月。

[8] W. Feller(威廉•费勒),《概率论及其应用介绍》(1957年)。

007作业集
Web note ad 1