首页
论坛
专栏
课程

[转帖]区块链的来源

2018-5-3 21:22 1126

[转帖]区块链的来源

2018-5-3 21:22
1126
原文地址: https://mp.weixin.qq.com/s/Wbrtq1GALda1DsPURSAN-g

翻译自《Bitcoin and Cryptocurrency Technologies》

比特币的另一个关键组成部分是区块链,区块链作为账本安全地记录了所有的比特币交易。区块链背后的思想也是很早就被提出了,可以追溯到1991年Haber和Stornetta的一篇文章。他们并没有给出一种数字货币方案,而是给出了对数字文件进行安全时间戳操作的方法。时间戳操作是为了给出文件生成的大致时间。更重要的是,时间戳准确地表述了这些文件的创建顺序:时间戳能够反映出来一个文件是否在另一个文件之前生成。对于安全性而言,文件的时间戳是不能在事后再更改的。


在Haber和Stornetta的方案中,有一个时间戳服务来接收客户端发送的文件,并为其进行时间戳操作。当服务器收到文件时,它对文件、当前时间,以及链接或指向上一个文件的指针进行签名,并根据签名信息发布一个“证书”。这里的指针是一种特殊类型的指针,它指向一块数据而不是一个位置。这意味着,如果对应的数据发生了变化,那么指针也就自动失效了。


这样,每个文件的证书就保证了前一个文件内容的完整性。实际上,你可以递归地进行论证:每个证书实际上确定了到这个文件为止的所有文件和证书的历史记录。如果我们假设系统中的每个客户都至少记录了一些证书——客户自己的文件的证书,以及客户文件之前的证书和后续文件的证书——那么,参与者就可以共同确保在文件签名之后,历史记录将无法被更改。尤其要注意的是,文件的相对顺序是不会发生变化的。


图 1: 时间戳链.在为文件创建证书时,时间戳服务器会将文件本身,指向上一个文件的证书的哈希指针,以及当前的时间放在一起进行签名。

后来,又出现了对于性能的改进措施:我们不再需要单独链接每个文件,而是将这些文件放到不同的区块中,再把这些区块链接起来。每个区块中的文件会以树结构而不是线性结构被再次链接在一起。在验证某个文件是否出现在系统历史记录的某个时间点时,这种方式可以减少所需要的检查的数量。以图示来表示的话,这种混合方案看起来如图2所示。


图 2: 高效的时间戳链。箭头表示哈希指针,点画线表示时间间隔

我们会在第3章看到,这个数据结构组成了比特币区块链的骨架。比特币以一种很精巧,也很重要的方式对其进行了改进:使用Hashcash类型的协议来延缓区块添加到链中的速度。这项改进对比特币的安全模型产生了深刻而有利的影响。事件由一组称为“矿工”的不可信节点,而不是由可信服务器进行记录。对区块的追踪记录并不依赖于普通用户,而是由矿工来完成的。任何人都可以通过解决计算难题来创建区块,从而成为一名矿工。比特币也去掉了签名,只依赖于hash指针来确保数据结构的完整性。最后,在比特币中实际的时间戳并不那么重要,系统的重点是以一种防篡改的方式记录交易的相对顺序。事实上,比特币中的区块不是按固定的周期创建的。系统确保平均每10分钟创建一个新的区块,但在连续两个区块之间的时间跨度很大。


从本质上说,比特币把两种思想进行了组合:使用计算难题控制新货币单元的创建,和使用安全时间戳记录交易帐、防止重复消费。在比特币之前也有一些不成熟的方案组合使用了这两种思想。第一个就是由Wei Dai在1998提出的,被称为b-money的方案。在b-money中,任何人都可以使用一个类似于hashcash的系统来创建货币。b-money中的p2p网络,和比特币中的网络有点类似。每个节点都会维护一个账本,但这个账本和比特币区块链中的统一账本并不相同。每个节点都有自己的账本,来记录所有人的账户余额。


Bitgold是一个由Nick Szabo提出的类似方案。Szabo说,他早在1998年就提出了Bitgold的思想,但是直到2005年才抽出时间发表在博客上。我之所以提到这一点,是因为纽约时报记者Nathaniel Popper所宣扬的一个小阴谋论。Nathaniel Popper写过一本非常棒的,关于比特币历史的书。Popper指出,在Satoshi发布比特币白皮书后,博客文章的时间戳被改变了,这使得Bitgold看起来像是在比特币发布大概两个月后才写的。像其他许多观察家一样,Popper认为Szabo可能就是Satoshi。他认为时间戳的变化证明了,Szabo/Satoshi试图在掩盖他先于比特币发明了Bitgold这件事。


这个解释存在的问题在于,如果你真的读博客文章的内容,Szabo是在1998年就有了非常清晰的想法,他不想改变那些日期。因此,一个更合理的解释是,在比特币推广了类似的想法后,他只是把这个帖子推到了博客的顶端,以确保人们意识到他先前的提案。


比特币与b-money和bitgold有几个重要的差异。在这些提案(方案)中,计算问题直接用于铸币。任何人都能解决难题,而解决方案本身就是一种单位货币。在比特币中,问题解决方案本身并不构成货币。它们是用来保护区块链,并间接导致在限定的时间内发行货币。其次,b-money和Bitgold依靠时间戳服务来签署货币的创造和转移。比特币,就像我们看到的,不需要可信时间戳,只是试图保护块和交易的相对顺序。


最后,在b-money和Bitgold中,如果在服务器或节点间的分类账目存在分歧,并没有一种明确的方法解决它,在所有作者的著作中少数服从多数似乎是一种潜规则。但是,因为任何人都可以设置一个节点或隐藏在不同的身份后面的一百个节点——这些机制不是很安全,除非有一个集中的看门人控制网络的入口。相反,在比特币中,攻击者要改变历史,必须以比其他参与者更快的速度解决计算难题。这不仅是更安全的,也使我们能够量化系统的安全性。


b-money和Bitgold是非正式的提案,b-money是在邮件列表中张贴出来的而Bitgold是一系列博客文章,既没有开始执行,也没有直接实现。与比特币白皮书不同的是,没有完整的规范或任何代码。这些提案掩饰了可能解决或可能无法解决的问题。第一,正如我们已经提到的,是如何解决关于分类账的分歧。另一个问题是为铸造单位货币该设置多难的计算难题。由于硬件在一定的计算能力下会随着时间的推移而变得更加便宜,因此比特币采用了一种周期性地自动调整难题难度的机制。b-money和Bitgold不包括这样一种机制,如果创建一个新的硬币变得非常容易,从而可能带来一个硬币失去价值的问题。


[公告] 防守篇征题进行中!看雪2020 KCTF春季赛防守方征题中 !

最后于 2018-5-3 21:23 被sqc_zz编辑 ,原因:
最新回复 (1)
BlackJZero 2018-5-4 08:36
2
0
游客
登录 | 注册 方可回帖
返回