详解比特币白皮书
Detailed Interpretation of Bitcoin White Paper
Master林
因为网上之前流传的有些许不准确的地方,所以自己又和国外在做区块链的朋友一起翻译了一遍,力求精准。
Bitcoin: A Peer-to-Peer Electronic Cash System
注:Cash(现金):指立即可以投入流通的交换媒介。它具有普遍的可接受性,可以有效地立即用来购买商品、货物、劳务或偿还债务。
摘要:A purely peer-to-peer version of electronic cash would allow online payments to be sent directlyfrom one party to another without going through a financial institution.
一个纯粹的点对点版本的电子现金 允许在线支付直接从一方发给另一方,而无需通过金融机构。
注:无需通过金融机构直接转账,这就是去中心化思想的由来。(再联想到标题的电子现金,我们日常使用现金购买物品,也没有通过银行这样的第三方机构,一手交钱,一手交货,即完成购买。)
Digital signatures(数字签名)provide part of the solution, but the main benefits are lost if a trusted third party(被信任的第三方机构) is still required to prevent(防止) double-spending.
数字签名提供了部分解决方案,但是如果任然需要第三方机构来防止双重支付问题的出现,那么它主要的好处也失去了价值。
注:中本聪想要这套系统没有第三方机构,全靠自身逻辑关系就能防止双重支付。
We propose a solution to the double-spending problem using a peer-to-peer network.
对于双重支付问题,我们提出了一个解决方案:运用点对点网络。
注:
double-spending,双重支付,在电子现金领域也被称为双花攻击,即指同一笔电子现金在两个以上交易中同时被花掉的欺骗行为。双花攻击一般有三种形式:
a.甲支付给乙的“同时”也支付给丙(或自己),给网络引入竞争攻击。
b.甲支付给乙(或自己)后预留交易记录,这笔交易未被确认前又支付给丙并立即获得交换利益,再用预留的交易记录覆盖。
c.甲拥有超过51%的算力(或者在中心化体系中,甲就是控制100%算力的中心),那么甲可以随意篡改、反悔已发生的记录。这就是传说中的51%攻击。
对于一个区中心化的数字货币,如果没有一个中心化机构,那么就很难确定一笔钱是不是已经被花掉,因此可能出现我既转给了A,也转给了B的情况。中本聪在设计比特币的时候,通过使用区块链盖时间戳并发布全网的方式,保证每笔币被支付后,不能再用于其他支付。
当且仅当包含在区块中的所有交易都是有效的且之前从未存在过的,其他节点才认同该区块的有效性。
但是由于比特币采用工作量证明的共识机制,双花攻击依然可能发生。如果A要发动双花攻击,进行交易1后并发送广播,网上其他节点都记录了这笔交易,但要生成6个区块后才能真正确定这笔交易已经成功。在交易1广播后,A却在自己的区块链记录了交易2,重复利用交易1的币。如果A掌握超过51%的算力,那么A可以很大几率的挖出之后的6个区块之后,然后再次广播,此时交易2会被判定为成功,而交易1则失败。也就是一笔钱花2次,但是交易1的收钱者最终并没有收到钱,蒙受损失,这就是所谓的双花攻击。当然,如果算力不够51%,也可以发动双花攻击,也有成功的可能。只是算力越低,发动双花攻击成功的几率会越越小。
点对点网络:对等式网络,P2P直接将人们联系起来,让人们通过互联网直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间服务器。P2P就是人可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。
一种对等(P2P)网络,其中互连节点(“对等”)彼此共享资源,而无需使用集中管理系统。
基于客户端- 服务器模型的网络,其中各个客户端从集中式服务器请求服务和资源。
The network timestamps(时间戳)transactionsby hashing them into an ongoing(不间断的)chain of hash-based proof(证明)-of-work, forming a record that cannot be changed without redoing the proof-of-work.
点对点网络做了如下内容:这个网络给每笔交易打上时间戳,并进行哈希计算,放进一条不断增长的基于哈希工作量证明的链,形成了一个不可改变的记录,除非重做这些工作量。
注:哈希加密 http://www.ttmd5.com/hash.php?type=9
SHA-256算法:
SHA-256算法的输入是最大长度小于264位的消息,输出是256位的消息摘要,输入消息以512位的分组为单位进行处理。算法描述如下。
(1)消息的填充:添加一个“1”和若干个“0”使其长度模512与448同余。在消息后附加64位的长度块,其值为填充前消息的长度。从而产生长度为512整数倍的消息分组,填充后消息的长度最多为264位。
(2)初始化链接变量:链接变量的中间结果和最终结果存储于256位的缓冲区中,缓冲区用8个32位的寄存器A、B、C、D、E、F、G和H表示,输出仍放在缓冲区以代替旧的A、B、C、D、E、F、G、H。首先要对链接变量进行初始化,初始链接变量存储于8个寄存器A、B、C、D、E、F、G和H中:
初始链接变量是取自前8个素数(2、3、5、7、11、13、17、19)的平方根的小数部分其二进制表示的前32位。
(3)处理主循环模块:消息块是以512位分组为单位进行处理的,要进行64步循环操作(如图所示)。每一轮的输入均为当前处理的消息分组和得到的上一轮输出的256位缓冲区A、B、C、D、E、F、G、H的值。每一步中均采用了不同的消息字和常数,下面将给出它们的获取方法。
上图SHA-256的压缩函数
(4)得出最终的Hash值:所有512位的消息块分组都处理完以后,最后一个分组处理后得到的结果即为最终输出的256位的消息摘要。
步函数是SHA-256中最为重要的函数,也是SHA-256中最关键的部件。其运算过程如图所示。
上图为SHA-256的步函数
根据T1、T2的值,对寄存器A、E进行更新。A、B、C、E、F、G的输入值则依次赋值给B、C、D、F、G、H。
Kt的获取方法是取前64个素数(2,3,5,7,……)立方根的小数部分,将其转换为二进制,然后取这64个数的前64位作为Kt。其作用是提供了64位随机串集合以消除输入数据里的任何规则性。
对于每个输入分组导出的消息分组Wt,前16个消息字Wt(0≤t≤15)直接按照消息输入分组对应的16个32位字,其他的则按照如下公式来计算得出:
The longest chain not only serves as proof of the sequence(顺序)of events witnessed, but proof that it came from the largest pool of CPU power.
最长的链不仅是充当见证序列的证明,还证明了它来自最大的CPU算力池。
As long as a majority of CPU power is controlled by nodes that are not cooperating to attack the network, they'll generate the longest chain and outpace attackers.
只要大部分由节点控制的CPU算力,没有合作起来进攻网络。那么他们将会生成最长的链并且算力超过攻击者。
注:说明系统安全性。
The network itself requires minimal structure.
这个系统本身需要的基础设施非常少。
Messages are broadcast on a best effort basis, and nodes can leave and rejoin the network at will, accepting the longest proof-of-work chain as proof of what happened while they were gone.
信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。
小结
Bitcoin: A Peer-to-Peer Electronic Cash System的关键:
1.建立一个去中心化的电子现金系统。
2.双重支付问题(信用问题)。
解决办法: