比特币白皮书 Bitcoin: A Peer-to-Peer Electronic Cash System

摘要

纯粹的点对点电子现金将允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名提供了部分解决方案,但是如果仍然需要可信的第三方来防止重复开销,那么主要的好处就丧失了。我们提出了一个使用点对点网络解决双花问题的方案。
网络时间戳通过将事务散列到基于散列的工作证明的持续链中,形成不重新进行工作证明就不能更改的记录。最长的链不仅可以作为所见证的事件序列的证据,而且可以证明它来自最大的CPU功率池。只要大部分CPU能量是由不合作攻击网络的节点控制的,它们就会产生最长的链并超过攻击者。网络本身需要最小的结构。消息以最佳方式广播,节点可以随意离开和重新加入网络,接受最长的工作证明链作为它们离开时发生的事情的证据。

一。介绍

互联网商业几乎完全依赖金融机构作为可信第三方去处理电子支付。虽然针对大多数交易来说,这个系统还算不错,但,它仍然被基于信任的模型所固有的缺陷所拖累。完全不可逆转的交易实际上并不可能,因为金融机构不能避免仲裁争议。仲裁成本增加了交易成本,进而限制了最小可能交易的规模,且干脆阻止了很多小额支付交易。除此之外,还有更大的成本:系统无法为那些不可逆的服务提供不可逆的支付。逆转的可能性,造成了对于信任的需求无所不在。商家必须提防着他们的顾客,麻烦顾客提供若非如此(如若信任)就并不必要的更多信息。一定比例的欺诈,被认为是不可避免的。这些成本和支付不确定性,虽然在人与人之间直接使用物理货币支付的时候是可以避免的;但,没有任何一个机制能在双方在其中一方不被信任的情况下通过沟通渠道进行支付。

我们真正需要的是一种基于加密证明而非基于信任的电子支付系统,允许任意双方在不需要信任第三方的情况下直接交易。算力保障的不可逆转交易能帮助卖家不被欺诈,而保护买家的日常担保机制也很容易实现。在本论文中,我们将提出一种针对双重支出的解决方案,使用点对点的、分布式的时间戳服务器去生成基于算力的证明,按照时间顺序记录每条交易。此系统是安全的,只要诚实节点总体上相对于相互合作的攻击者掌握更多的 CPU 算力。

二。交易

我们将一枚电子硬币定义为一个数字签名链。一位所有者将一枚硬币交给另一个人的时候,要通过在这个数字签名链的末尾附加上以下数字签名:上一笔交易的哈希(hash,音译,亦翻译为“散列值”),以及新所有者的公钥。收款人可以通过验证签名去验证数字签名链的所属权。

问题是,这个链条的接收者并不能确定,之前的拥有者没有双花(double-spend)这个硬币。通常的解决办法是引入一个中央信任机构,或者铸造厂,它来验证每一个交易都没有双花问题。每次交易过后,每个硬币都必须被回收到铸造厂重新铸造,只有从铸造厂发出的硬币才被认为是没有双花的。这种解决方案的问题在于,整个货币系统的命运完全决定于铸造厂拥有者的手中,因为所有的交易都需要经过他们,就像银行一样。

我们需要找到一个办法,让硬币的接收者完全可以信任:他收到的这个硬币,之前的拥有者们一定没有拿这个硬币进行过其他的交易。对我们来说,最早发生的交易才能算数,因此那些晚一些的交易是不被承认的。接收者要确认是否有其他的他不知情的交易存在,唯一的办法就是他需要知道这个硬币的所有交易。在铸造厂模型中,铸造厂掌握所有交易信息,他们决定了哪一个交易是先发生的。要想不依赖中心机构达到此目的,所有交易必须是公开声明的,并且需要一个系统,让所有的参与者对唯一的一条交易链认同。硬币的接收者需要知道,他所接收到的这个链条中每一个交易,都是大家所认可的最早发生的交易。

3. 时间戳服务器

我们的方案从一个时间戳服务器开始。时间戳服务器的工作是计算一个被打上时间戳区块的hash值,并将该值广泛传播,例如发表到报纸上,或者Usenet帖子中。时间戳证明了这个数字区块在当时肯定是存在的,因为计算了其hash值。所有的时间戳将其之前的时间戳都包含在hash值中,按照这个规则,形成一个链条,链条每新增一个时间戳,都是之前时间戳的加强版,如图3-1。

4. 工作证明(Proof-of-Work,POW)

在实现基于点对点的分布式时间戳服务器的时候,我们不能使用报纸或者Usenet帖子,而使用一种工作证明系统,类似 Adam Back's Hashcash [6]。这个工作证明的工作方式是扫描一个值,其hash值(例如SHA-256)是由若干个0 bit开头的。这个证明的工作量和开头0 bit的要求数量成指数关系,而验证它只需要做一次hash计算。

在时间戳网络中,我们通过不停地增加区块中一个数值来进行POW,直到满足了要求的0 bit的数量为止。一旦这个要求被满足,那么这个区块即不能被篡改,除非重新进行一遍工作证明。由于链条中后续的区块都是根据当前区块计算而来,因此要改动当前区块,一定得重新计算后续所有的区块。

这种工作证明同时也使货币链条代表了多数人的决定。如果多数投票是建立在一个IP一张票的方案上,那么IP资源的持有者就会拥有决定权。工作证明本质上是一个CPU一张选票的。最长的链条代表了大多数人的意见,因为最长的链条意味着最多的工作证明投入。如果大多数CPU都是忠实的节点,那么忠实的链条就会增长最快,打败其他竞争的链条。要想更改链条中过去的一个区块,攻击者需要重新对该区块以及其后面所有区块做工作证明,这样才能赶上忠实链条。后面我们将会展示,一个落后的攻击者赶上忠实链条的可能性,会随着链条长度的增长,成指数递减。

为了补偿计算机硬件计算速度的增加,以及人们对运行服务器节点兴趣热度的变化,工作证明的难度会进行调节,以保证每小时产生的区块数量和预期值近似。如果区块数量过多,那么就增加POW的难度。

5. 服务器网络

运行服务器网络按照下面几个步骤进行:

(1) 新的交易被广播到所有的节点;
(2) 每一个节点都将新的交易加入一个区块中;
(3) 每一个节点都努力寻找该区块的工作证明;
(4) 当一个节点找到工作证明后,它将该区块广播到所有其他节点;
(5) 其他节点对接收到的区块进行验证,确定其中的所有交易都是合法的,并且没有被花费;验证通过后,接受该区块;
(6) 接受该区块之后,节点们将这个区块加入到链条的尾部,将该区块的hash值作为作为Prev Hash(如图4-1)。

节点们都认为最长的链条才是正确的链条,因此它们都会在该链条上面工作。如果两个节点同时传播一个交易的两个不同版本区块时,这两种区块都可能被一部分节点作为最先到达的区块而被接受。此时,节点们会在先到达的链条上工作,而将后到达的链条保存起来以免后者后来成为最长链条。这种局面会在下一个工作证明找到时被打破,因为那时有一个链条将会胜出;那些工作在另一个链条的节点就会转移到最长链条工作。

新的消息并不一定要被广播到所有的节点。只要它达到足够数量的节点,那么该消息很快就会形成区块。区块的广播也允许部分丢失;如果一个节点没有收到一个区块的广播消息,当下一个区块到来时该节点便会知道他之前有过缺失,从而请求补偿。

6.激励

按照约定,一个链条的第一笔交易是一类特别的交易,其创造了一个新的硬币,该硬币被链条第一个区块的创建者拥有。这个约定,对节点在服务器网络中工作产生了激励,同时也解决了新硬币发布方法,因为并没有一个中心机构来发布更多的硬币。硬币数量的稳定增长,意味着掘金者向系统中添加更多的掘进资源。具体来说,是指CPU时间及其消耗的电力。

另一方面,交易手续费也可以产生激励效果。如果一个交易的输出值小于其输入值,那这个差值就是交易手续费,也就是包含该交易区块的激励值。当某一天,硬币总量不再发生变化时,那么系统的激励手段将会完全变成交易手续费,并避免通货膨胀的影响。

激励手段也可以估计节点们保持忠实。当一个贪婪的攻击者有能力掌握大多数的CPU资源时,他需要决定是用这些CPU资源来防止他人骗取他的交易,还是用其产生挖掘更多的硬币。攻击者会发现,按照合法规则来出牌他可以有更多的盈利;这些规则决定,与其推翻当前系统,还不如挖掘更多新的硬币来的划算。

7. 回收硬盘空间

当一个链条中的区块数量足够多时,之前的交易可以被舍弃掉,以节约硬盘资源。为了在不打破区块hash值得前提下完成该功能,我们将所有交易都hash到一个 Merkle Tree [7][2][5] 中,只有树的根节点才会被放入当前区块的hash。老的区块作为子节点被填入这棵树中;树的内部节点不需要存储。

一个没有交易的区块头大小为80 bytes。假设每10分钟产生一个区块,那么一年可以产生 80bytes624*365=4.2MB 大小的数据。2008年,个人计算机内存大小主流为2GB,根据摩尔定律每年按照1.2GB速度增长,可以看到,即使将区块头直接放在内存中,也不会是个问题。

8.简化的支付验证

并不需要运行一个完整节点来验证一次交易。一个用户只需要持有一份最长链条区块头的备份即可;有了这个备份,他可以询问其他节点,直到他被其他节点确信是最长链条;同时也可以用这个备份获取Merkle Tree上该交易对应区块的链接。用户无法自己确认这个交易,但是通过链条上的一环,用户可以看到网络节点接受了这个交易。

只要整个网络是由忠实节点做主导,这种验证就是可靠的;但是当一个攻击者拥有过量资源时,其会变得很危险。因为网络中的节点可以验证支付,那么攻击者就可以随意捏造一个交易,并使用其大量节点资源对该交易进行验证。一种应对方案是让用户接受来自节点的报警信息,当节点发现了非法区块时,其向用户报警并促使用户下载完整的区块以及被报警的交易,已确定不一致性。建议那些经常被支付的公司建立一些自己的节点,以保证更多的安全性和更快速的验证。

9. 整合和分割

虽然可以对每个硬币分别处理,但是为每一分钱都创建一个新的交易是不明智的做法。为了使交易金额可大可小,交易包含了多个输入和输出。通常,输入要么是一个金额较大的交易值,要么是若干个金额较小的交易值;输出最多有两个:一个是接收金额,另一个是找零,找零将会退回到付款者。

需要指出的是,这种扇出并不是什么问题:一个交易依赖其他多个交易,而它们又依赖更多交易。完全没有必要将一个交易的所有历史都抽取出来。

10. 隐私

传统的银行模型通过对交易双方信息的保护,达到了一定程度的隐私效果。但是在本系统中,所有的交易都需要被公开,因此这种传统方法不再奏效。但是,我们通过在另一个地方切断信息流的方法来达到目的——保持公钥的匿名。公众可以看到某个人将一定数量的硬币发送给了另一个人,但是他们完全不知道这两个人究竟是谁。这有点像股票交易,交易时间和金额、以及“tape”都是公开的,但是交易双方身份无法知道。

为构造额外的一座防火墙,每次交易都应该生成新的密钥对,以防止多笔交易都联系到相同的个体。但是,由于多重输入交易的存在,这种联系是不可避免的。因为多重输入意味着,这些所有输入都是来自同一个用户。而当这些输入某一个key对应的用户被曝光之后,其牵连的其他很多交易,也会被曝光出来。

11. 计算

我们假设该场景,一个攻击者试图产生比当前忠实链条更长的链条。即使这个目的达成,也并不意味着系统可以被随意篡改,比如随便制造数值或者随意从其他账户中提取硬币。节点不会接受一个非法交易当做付款;忠实节点永远不会接受任何包含非法交易的区块。一个攻击者能做的,只是改动他自己最近的一次交易,拿回他所花掉的硬币。

忠实链条和攻击者链条这件的比赛可以被看做是 Binomial Random Walk。成功的事件是忠实链条完成一次工作证明,将其链条长度加1,相对攻击者链条的领先长度也+1;失败的事件是攻击者链条加1,其相对忠实链条的长度差-1.

在一个确定的长度差下,计算攻击者追赶上忠实链条的概率,和Gambler's Ruin(赌徒破产问题)问题相似。假设一个赌徒背负一定数量的赤字,其贷款金额无限,并且尝试次数无限。我们来计算其达到收支平衡的概率,也就是攻击者链条赶上忠实链条的概率:

p=忠实链条发现下一个区块的概率
q=攻击者链条发现下一个区块的概率
qz=攻击者赶上z个区块的概率

我们假设p>q,那么攻击者赶上的概率会随着区块的增加呈指数下降。因为概率本来就低,因此攻击者的机会随着他落后的越来越多而变得更加渺茫。
接下来,我们来计算一个交易的接收者需要等多长时间,才能保证付款者已经无法对此次交易进行篡改了。假设付款者是一个攻击者,他希望接收者相信他已经付款一段时间了,然后修改交易将硬币返回到自己手中。接收者会收到警告,但是付款者希望此时已经太晚。
接收者产生一对新的密钥对,并在签名交易之前一会将公钥交给付款者,这可以防止付款者提前准备好一个区块链条。当交易被发出时,付款者开始生产一个和忠实链条平行的非法链条,其包含他篡改后的交易区块。
接收者保持等待,直到此次交易被添加到链条中,并且z个新的后续区块也被添加进来。他不知道攻击者此时已经完成到什么程度,但是假设忠实区块按照平均速度被添加,那么攻击者的可能进度会是一个Poisson分布,并且期望值为:

为了计算攻击者当前赶上的概率,我们将其可能达到的每一种程度的Poisson密度和从该程度开始能够在当前赶超的概率相乘:

重写式子以避免出现无限级数:

用C代码实现:

运行一些测试用例,我们会发现,最终的概率会随着z值的增长呈指数下降:

为使概率在0.1%以下,下面是z的取值:

11-7

12.结论

我们介绍了一种不基于信任的电子交易系统。我们从一个使用电子签名的硬币框架开始,该框架让硬币拥有者具有绝对的控制权,但是该框架不能够解决硬币的双花问题。为解决双花问题,我们介绍一种点对点的网络,该网络使用工作证明来记录一系列公开的交易信息;只要网络中忠实节点的CPU运算能力大于攻击者节点的运算能力,那么这些交易就无法被攻击者所更改。这个网络结构简单,有很强的鲁棒性。所有节点可以同时工作,而不需要过多的协调。节点们不需要被标记出来,因为网络中的消息并不会定点发送,它们只会尽量散步到多的节点即可。节点可以随时离开和加入网络,通过工作证明,它们可以轻易知道在它们离开时发生了哪些交易。通过接受合法的区块,以及拒绝不合法的区块,每个节点完成了根据CPU资源的投票。任何必要的规则或者激励都可以在这个共识规则中执行。



作者:sparrow321
链接:https://www.jianshu.com/p/04276da48228
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发布了422 篇原创文章 · 获赞 256 · 访问量 56万+

猜你喜欢

转载自blog.csdn.net/qq_32146369/article/details/105180665