比特币白皮书精读笔记—工作量证明篇
本文为精读比特币白皮书系列课程笔记,文中摘录了比特币白皮书原文,并对原文进行翻译,说明和讲解。
To implement a distributed timestamp server on a peer-to-peer basis, we will need to use a proof-of-work system similar to Adam Back's Hashcash, rather than newspaper or Usenet posts.
为了在一个点对点的基础上执行一个分布式的时间戳服务,我们将需要使用一个工作量证明系统,类似Adam Back的哈希现金,而非报纸或新闻帖。
Adam Back,哈希现金发明者。哈希现金最早用于遏制网络上的垃圾邮件,后来被广泛用于网络安全领域。哈希现金所用函数的特征是很容易验证,但很难破解,是比特币算力证明的灵感之源。
哈希现金Hashcash的工作原理
在电子邮件的消息头中,增加一个哈希现金邮票Hashcash stamp,经过哈希处理之后,其含有的随机数若要“合法”,则其哈希值至少前n位必须是0。发送者要消耗大量算力才能获得一个哈希值前n位是0的随机数。这里举一个例子。 比特币白皮书精读笔记—工作量证明篇如果你发送一封带有Hashcash邮票的邮件,其消息头如上图所示,包含版本号,发件日期,寄送地址和随机数。这是一个16进制格式的随机数,是关键中的关键,你的电脑穷尽所能花费可能多达三个小时才能在亿万数据中找到这个随机数,现在把这个随机数用sha1算法进行哈希,就可以得到一个哈希值,可以看到这个哈希值前面有八个0,如果更改随机数中的任何一位就会发现哈希值的开头就不会是0。
收件人收到信件之后,只需要用同样sha1算法对这个消息头进行哈希,这个运算可能只需要花0.1毫秒便可得到哈希值,如果哈希值开头是八个0,则说明发送人一定是经历了亿万次运算才找到这个随机数。耗费如此多的时间和能量,发件人值得信任,垃圾邮件不会花费如此多的时间精力来获得合法随机数,也证明这封信不是垃圾邮件。
为了防止生成的合法随机数被其他人重复使用,同样要防止双重支付的问题。
生成Hashcash邮票需要带一个日期,这样可明确其它时间的Hashcash是非法的。另外Hashcash的接收端还要实现一个double-spending(双重支付)数据库,用来记录邮票生成的历史信息,这一思想和比特币的核心思想有很多共通之处。
比特币的工作量证明本质上也是利用了单向散列函数如sha,去计算出一个带随机数的字符串的哈希值,并且指定哈希值符合一定规律才可以结束计算。最先完成计算的人全网广播,而其他人很容易就可以验证计算结果是否正确。
因为这种计算随机数的数学题目本质就是个概率问题,比拼的就是大家每秒中可以计算的次数,计算的次数越多,就越有更大的概率获得合法的结果。
所以最终矿工们争夺的就是算力资源,谁手中拥有更多的矿机算力,谁就有更大的概率获得对应区块的奖励。
The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits.
工作量证明涉及到找(合法的)随机数,当它被类似于sha-256算法哈希处理之后,哈希值以很多0字符开头才算合法。
The average work required is exponential in the number of zero bits required and can be verified by executing a single hash.
平均需要的工作量随着所需的0字符数量的增加是呈指数级别增长的,并且可以通过执行一个哈希来验证。
无论运算需要的算力有多大,验证都很简单。只需要根据矿工提供的随机数进行一次哈希验算,然后判断哈希值前的0字符数量是否符合要求即可。验证需要消耗和算力相比解题需要的算力可以忽略不计。 比特币白皮书精读笔记—工作量证明篇For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits.
对于我们的时间戳网络来说,我们用给区块增加一个随机数的方式执行工作量证明,直到一个能给出区块哈希值要求的0字符合法随机数出现。
Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work.
一旦算力被花费在满足工作量证明上,除非所有工作重来一遍,否则区块是无法被更改的。
As later blocks are chained after it, the work to change the block would include redoing all the blocks after it.
因为后面的区块链接在它后面,更改区块需要将它后面的所有区块重新做一遍。
如果要对以往的区块进行更新,因为后面的区块包含了它的哈希值,所以必须对后面所有的区块进行更改,前面的篡改才能真实有效。
The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it.
工作量证明也解决了大多数人决策的代表问题。如果是一个IP一次投票,那投票结果很容易被能聚集大量IP地址的人左右,这明显不公平。工作量证明一定不是one IP one vote,而是one CPU one vote,一个算力一次投票,大多数决策由投入最大工作量的最长链所代表。
IP地址分配是一个中心化问题,而CPU是无法进行中心化控制的,因为大多数电脑分布在普通人手中。每台电脑的cpu算力是有限的,这样可以防止一个人集中大量的cpu资源。
但是,中本聪当时没有考虑到专业矿机的出现,导致大量算力集中到了少数人手中,所以后来的竞争者,如ETH,通过优化GPU显卡,解决了专业矿机导致的算力集中问题。
专业矿机的出现让普通人通过CPU挖矿变得几乎不可能,而矿机经过数年发展已经逐渐被少数人控制。
If a majority of CPU power is controlled by honest nodes, the honest chain will grow thefastest and outpace any competing chains.
如果大部分的算力是由诚实节点控制的,诚实链条会增长的最快,而且可以超过其它的链条。
To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes.
如果要更改过往的区块,攻击者需要将这部分区块的工作量证明重新来过,而且要将其后区块的工作量证明都重新来过,还需要赶上并超过诚实节点。
We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added.
我们将随后展示随着后续区块的增加,一个缓慢的攻击者赶上的概率会呈指数级别降低。
To compensate for increasing hardware speed and varying interest in running nodes over time,the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases.
为了弥补不断增加的硬件速度以及随着时间推移,在节点运行上的利益变化,工作量证明机制难度将由一个变化的均值决定,该均值即每小时出现区块数量的平均值。
如果区块产生的过快,难度就会增加。通过均值调整,保证每个区块产生的时间在十分钟左右。
POW利用了信息安全的另一个特点,就是安全和成本相关性,这个世界没有绝对安全一说。比特币的系统利用了其中两个可管理与攻击成本,通过原文“随机散列值以一个或多个0开始,随着0的数量上升,解题所需要的工作量将呈指数增长”实现通过增加成本来提升安全性,这属于经济学原理。
“硬件的运算速度在高速增长,且节点参与网络的程度会有所起伏。”
由于摩尔定律,可能未来的海量运算能力会很便宜,以前需要计算一天的工作量可能1秒就能完成;中本聪的解决方案非常巧妙,算力的增长会让区块生成的数据加快,那我们就要让区块的增长和计算难度相关。