3.1
凭空铸造的钱币
在DigiCash系统中,如果您有一个价值100美元的数字现金,那么凭什么它值100美元?答案很简单:为了获得价值100美元的ecash,你必须从你的银行帐户中拿取100美元,并将其发送给正在发行你的电子现金的银行。但是,关于如何做到这一点,人们提出了一系列不同的建议,而不同的公司采取的做法也不同。一个牵强的可能:如果一个国家的政府实际授权了创造数字现金的服务,让钱币凭空出现,那又怎么样?那就是NetCash背后的想法,尽管它从未实践过。一个不一样的系统e-Gold将一堆黄金放在金库中,并发行对应价值的数字现金。另一家名为Digigold的公司并没有完全由黄金支撑,而只是获得了部分储备。
所有这些想法最终都会将数字现金的价值与美元或商品挂钩。如果美元的价值上涨或下跌,你的数字货币持有量的价值将随之而变。一个完全不同的可能性是允许数字现金是自己的货币,独立于任何其他货币发行和估价。
要创建一个可能获得真正价值的自由浮动数字货币,你需要设计一些稀缺的东西。事实上,稀缺性也是黄金或钻石被用作货币支持的原因。在数字领域,实现稀缺的一种方法是设计一套系统,使得铸币需要一段时间的破解才能成功解决计算问题(或“拼图”),这就是比特币“采矿”中发生的事情。
基本思想是——用计算解决一些具有一定价值、相当古老的数字对象谜题。1992年,密码学家Dwork和Naor首先提出了一个潜在的回复垃圾邮件的解决方案。你每次发送电子邮件,你的电脑必须解决一个需要几秒钟解决的难题,那该怎么办呢?为了执行这一要求,接受者的电子邮件程序会简单地忽略没有解决计算难题的电子邮件。对于一般用户而言,发送电子邮件不是一个很大的障碍,因为你不经常发送电子邮件。但是,如果你是垃圾邮件发送者,你正在尝试一次性发送数千或数百万封电子邮件,解决这些计算难题可能会变得令人望而却步。一个类似的想法后来被亚历山大(1997年)独立发现,提出了一个名叫哈希凯什(Hashcash)的东西。
这些计算谜题需要具有一些特定的属性才能成为有用的垃圾邮件威慑工具。首先,垃圾邮件发送者不可能解决一个谜题,却将解决方案附加到他发送的每封电子邮件中。为了确保这一点,电子邮件中的谜题应该是特定的:它应该取决于发件人和接收者、电子邮件的内容以及发送的大致时间。其次,接收者应该能够轻松地检查拼图解决方案,而无需重复解决难题的过程。第三,每个谜题应该完全独立于其他谜题,在某种意义上,解决一个谜题并不会减少解决任何其他谜题所需的时间。最后,随着时间的推移硬件在不断改善,解决任何给定的计算难题会变得更快更便宜,接受者要能够接受调整他们的谜题解决方案的难度。这些属性可以通过使用加密哈希函数(Hash fuctions)设计谜题来实现。
比特币使用与Hashcash基本相同的计算难题,但有一些小的改进。比特币比Hashcash做的还要多,毕竟Bitcoin需要一本书来解释!我只提到这一点,因为Hashcash发明家亚当·本德(Adam Back)说:“比特币是控制通货膨胀的哈什凯什。”我认为这有一些夸张。这就像说:“特斯拉只是电池装在轮子上一样。”
就像密码学中的其他好主意一样,许多计算谜题旨在实现略微不同的属性。一个来自Rivest和Shamir的提案,RSA密码系统的R和S就来自于他们。请注意,在Hashcash的设计中,你解决一些难题的成本仅仅是个人成本的总和。这与政府造币的成本结构不同。如果你考虑到纸币的防伪技术,获取所有设备,创建安全特性等方面都有巨大初始成本。但是一旦他们完成了所有这些工作,他们的成本就会下降,印制一张纸币或一百张纸币并没有什么太大的区别。换句话说,铸造纸币具有巨大的固定成本,但边际成本较低。Rivest和Shamir想要设计出可以模拟这些属性的计算谜题,以便铸造第一枚硬币在计算上具有很大的挑战性,但铸造后续硬币便宜得多。他们的提案也使用的哈希功能,但是以不同的方式。我们不会了解他们解决方案的细节,但他们试图解决的问题在很大层次上是非常有趣的。
为什么Hashcash没有达到防止垃圾邮件的预期目的呢?也许垃圾邮件只是一个不够大的待解决问题。对于大多数人来说,垃圾邮件只是一个滋扰,而不值得他们花费他们的计算周期来打击。我们今天的垃圾邮件过滤器可以很好地将垃圾邮件从我们的收件箱中删除。也有可能Hashcash实际上不会阻止垃圾邮件发送者。特别是,大多数垃圾邮件发送者今天使用“僵尸网络”发送他们的垃圾邮件,他们使用恶意软件控制大量其他人的电脑。他们也可以用这些电脑来收获Hashcash。也就是说,使用计算谜题来限制对资源的访问仍然只是一个想法。你可以在一些替代网络协议的建议中看到它,例如MinimaLT。
3.2
记录分类帐中的所有内容
Bitcoin的另一个重要组成部分是区块链:所有比特币交易都被安全地记录下来的分类帐。区块链背后的想法相当古老,可以追溯到Haber和Stornetta在1991年的一篇论文中。他们提议的是一种安全时间戳的数字文档,而不是数字货币计划。时间戳的目的是给出一个文件大致产生时间的概念。更重要的是,时间戳准确地传达了这些文档的创建顺序:如果在另一个文件之前存在,则将在时间戳上反映出来。安全属性要求文档在事后的时间戳不能更改。
在Haber和Stornetta的方案中,有一个将客户文档发送到时间戳的服务。当服务器接收到文档时,它会将文档与当前时间以及链接,还有指向上一个文档的指针一起签署,并发出带有该信息的“证书”。这里所说的指针是一种特殊类型的指针,它指向的是一个数据而不是一个位置。这意味着,如果这里所说的数据发生更改,指针就会自动失效。后续,我们将研究如何使用散列函数(Hash functions)创建这样的指针。
这样做是用每个文档的证书确保前一个文档内容的完整性。实际上,你可以递归地应用此参数:每个证书基本上修复了文档和证书的全部历史记录直到这一点为止。如果我们假设系统中的每个客户端至少记录几个证书——他们自己的文档证书以及上一个和后续文档的证书,那么所有参与者可以一起确保在事实之后不能更改历史记录。特别的是,文件的相对排序得到保留。
图4:链接时间戳。要为文档创建证书,时间戳服务器包括一个指向上一个文档证书的哈希指针,当前时间,并将这三个数据元素签名在一起。
后来的一篇文章对效率提出了一个改进:我们可以将它们收集到区块中并将链接块链接在一起,而不是单独链接文档。在每个块中,文档将再次以树形结构链接在一起,而不是线性结合。这减少了验证特定文档出现在系统历史记录中某个特定点所需的检查量。视觉上,这种混合方案如图5所示。
图5:有效链接时间戳。 箭头表示散列指针,虚线表示时间间隔。
这个数据结构形成了比特币区块链的骨架。比特币改进了一个微妙但重要的方式:使用Hashcash-esque协议来延迟新块添加到链中的速度。此修改对Bitcoin的安全模型有着深远而有利的影响。Bitcoin不再需要可信服务器;相反,事件由被称为“矿工”的不可信节点集合记录。每个矿工跟踪块,而不是依靠普通用户来完成。任何人都可以通过解决计算谜题来创建块成为矿工。比特币也摆脱了签名,只依靠散列指针(hash pointers)来确保数据结构的完整性。最后,实时的时间戳在比特币中也并不重要,系统的亮点是以防篡改的方式记录事务的相对顺序。事实上,比特币块并不是按固定的时间表创建的。该系统确保平均每10分钟创建一个新的区块,但连续块之间的时间有相当大的变化。
本质上,比特币结合了计算谜题的想法来规范新货币单元的创造,并以安全的时间戳来记录分类账上的交易,同时防止双花问题。早些时候,较不复杂的提案结合了这两个想法。第一个叫做b-money,由魏代于1998年所创造。在b-money中,任何人都可以使用hashcash的系统来创造货币。同时有一个像比特币一样的对等网络(p2p网络)。每个节点都维护一个分类帐,但它并不是比特币区块链中的全局分类帐。每个节点都有自己的分类帐,它考虑的是每个人的平衡。
另一个叫做Bitgold的类似提案是由Nick Szabo创造的。Szabo说他早在1998年就有了Bitgold的想法,但直到2005年才开始共享出来。我之所以提到这一点,是因为有一个小阴谋论被纽约时报记者NathanielPopper所宣传,他写了一本非常好的关于比特币历史的书。波佩尔指出,在Satoshi发布了Bitcoin白皮书之后,网志的时间戳已经改变,因此Bitgold的提案看起来像是在比特币发布后大约两个月写的。波普尔和许多其他观察家认为的那样,Szabo可能就是Satoshi,他引用时间戳变化作为Szabo / Satoshi试图掩盖他在知道Bitcoin之前已经发明了Bitgold事实的证据。
这个解释的问题是,如果你真的读了博客的内容,Szabo在1998年是非常明确的有了这个想法,他不想去改变这些日期。因此,一个更合理的解释是,在比特币推广了类似的想法后,他只是把这个帖子顶到了博客的顶端,以确保人们知道他先前的提案。
比特币与b-money和Bitgold有几个重要的区别。在这些提案中,计算谜题直接用于发行货币。任何人都可以解决一个谜题,解决方案是一个单位的钱本身。在比特币中,谜题解决方案本身并不构成钱。它们被用来固定区块链,且只能在有限的时间间接导致铸币。其次,b-money和Bitgold依靠在创建或转移资金时签署的时间戳服务。我们已经看到,比特币不需要可信的时间戳,只是尝试保留区块和交易的相对顺序。
最后,在b-money和Bitgold中,如果服务器或节点之间对分类帐有不同意见,则没有明确的解决方法。在两个作者的著作中,让多数人作出决定似乎是含蓄的。但是,由于任何人都可以设置一个或多个隐藏在不同身份的节点——这些机制不是很安全,除非有一个集中的看门人控制着网络的入口。相反,在比特币中,攻击者要改变历史,他们必须以比其他参与者更快的速度解决计算谜题。这不仅更加安全,而且还量化了系统的安全性。
b-money和Bitgold是非正式的提案——b-money是邮寄名单上的一个帖子,Bitgold是一系列博客文章。既没有起飞,甚至没有实施开来。不像比特币白皮书,他们没有一个完整的规范或任何代码。这些提案掩盖了可能或不可能解决的问题。第一,正如我们已经提到的,如何解决分类帐的分歧。另一个问题是确定计算难题对于打造货币单位是多么困难。由于硬件在一定的计算能力下会随着时间的推移而变得更加便宜,因此Bitcoin采用了一种周期性地自动调整谜题难度的机制。b-money和Bitgold不包括这样的一种机制,这可能会导致问题,因为硬币可能会变得非常容易地创建而失去价值。
区块链技术是比特币的底层技术,比特币是区块链的第一个应用。要想全面了解区块链技术,离不开对比特币的研究。wherein作为以区块链为基础架构的自治旅行社区,自然也就离不开对比特币的探索。
领取专属 10元无门槛券
私享最新 技术干货