比特币:一个点对点(Peer-to-Peer)电子货币系统
摘要
一个完全通过点对点(P2P)技术实现的电子货币系统,不需要第三方的金融机构提供服务的情况下,交易双方可以通过线上完成支付。
没有三方金融机构的支持,数字签名等加密手段可以为这个系统提供安全性保证,但是我们怎么解决“双花”问题呢?
方案如下:系统将交易盖上时间戳,取哈希值,添加到一个持续延伸的链上作为交易记录,链的增长机制是基于哈希的工作量证明(POW),除非重做全部的工作量证明,形成的记录将不可更改。最长的那条链,不仅作为系统中发生的一系列交易事件的见证和记录者,还能证明这条链拥有系统中最强的算力。只要系统中拥有全网多数算力的几点没有合伙来颠覆系统,那他们就能保证最长的链不会被攻击者控制。这个系统本身需要的基础设施非常少。信息能尽最大的努力在全网传播即可。所有的节点可以随时加入或者下线,重新加入后,只需要信任最长链即可。
简介
互联网上的贸易只能依赖几个大金融机构提供的电子支付服务来完成交易,这中模式在多数情况下是可靠的,但是互联网与生俱来的信任问题,给线上支付带来极大的安全隐患。人们无法实现完全不可逆的交易,金融机构无法避免的要调节纠纷,中介的存在导致交易成本增加,并且限制了实际可行的最小交易的规模,也就切断了日常小额线上交易的路。并且潜在的资金损失的风险还在于,很多商品是无法退货的,如果缺少不可逆的支付机制,线上交易将受到极大制约。因为潜在的退款可能,就需要交易方相互信任。由于商家需要降低风险,会向客户索取完全不必要的个人信息。在现实市场贸易中,一定比例的骗子的存在是不可避免的,相关损失会被计入到销售支出中。这些交易中的额外支出,在线下钱物交换的交易中,是可以避免的。
所以我们非常需要这样一个电子支付系统,基于密码学原理,而不是基于信任,剔除信任问题,使得任何达成一致的交易方,能否直接进行支付,而不需要第三方中介的支持。杜绝回滚交易的可能,这样可以保护特定的卖家(电子书等)免于欺诈。对于建设第三方担保机制来保护买家也相对容易。这篇论文中,我们提出一种通过点对点(P2P)分布式的时间戳服务器,来生成按照时间先后顺序排列电子交易记录,来解决“双花”问题。在这个系统中,只要诚实的几点控制的算力总和,大于攻击者算力,该系统就是安全的。
交易
我们定义一枚数字货币是一串数字签名,持有这通过对前一次交易做哈希签名,并将下一位拥有这的公钥添加到签名尾部,电子货币发送给下一位所有者。收款人可以通过签名进行检验,就能验证该链条的所有者。
这个交易过程存在一个问题,收款人难以验证付款人是否对这么货币进行了“双花”。通常来说,需要引入可信的第三方验证,或者说造币厂,来检验每笔交易的“双花”问题。每次交易后,货币要重新到造币厂,生成新的货币,只有造币厂直接发行的货币才算有效,这样就能防止“双花”。可是这有带来一个新的问题,整个系统的命运本中心化的造币厂掌控,因为每一笔交易都要通过造币厂的确认,造币厂就变成了银行。
![](https://img.haomeiwen.com/i1187653/02e12ed5d8a90cba.jpg)
我们需要确保之前的持有人没有对更早的交易实施签名,那么,实际上我们需要关注的只是本交易之前的交易,而不需要惦记着这笔交易发生之后,是不是存在“双花”问题。为了确定某一次交易是不是存在,唯一的方法就是获悉之前发生过的所有交易。在造币厂模型中,造币厂能获悉所有交易,然后明确交易到达的先后顺序。在排除可信中介的基础之上,所有交易信息公开发布,才能实现,我们需要整个系统中的所有参与者公认一个唯一的历史交易序列。收款人需要确保在交易期间,多数的节点都认同改交易首次出现。
时间戳服务器
时间戳服务器通过一区块(可以理解为JSON串)形式存在的一组数据进加上时间戳取哈希,并将哈希值进行广播。就像在报纸或者世界新闻组网络中发表文章一样。时间戳能够证明数据在时间戳所记录时刻是确定存在的,因为只有在该时刻存在了才能获取相应的哈希值。每个时间戳都将前一个时间戳纳入到子哈希计算中,这样就形成了一个链条,而每一个随后的时间戳,都是对之前的时间戳证明进行强化。
![](https://img.haomeiwen.com/i1187653/f12a295541ff2c79.jpg)
工作量证明
为了在点对点的基础上,构建一个分布式的时间戳服务器系统,仅仅想报纸那样的模型工作是不够的,我们需要一个类似于Adam Back提出的HashCash那样的工作量证明(proof-of-work aka POW)机制。工作量证明的机制是,对某一个特定值进行扫描,比方说SHA-256下,哈希值以一个或者多个0开始,那么随着0数目的增多,找到这个解需要的工作量呈指数级增长,但是检验结果仅仅需要一次哈希运算。
在我们的时间戳系统中,我们在区块中补增一个随机数,这个随机数要使得区块的哈希之中出现给定的0的个数。一旦CPU完成了工作量证明,那么除非重写完成相对的工作量,那该区块的信息就不可更改了。由于之后的区块是链接在该区块上的,要想修改该区块中的信息,就需要重新完成之后左右区块的全部工作量。
![](https://img.haomeiwen.com/i1187653/9d7a37f6c0c3ccae.jpg)
POW还解决了在集体投票时,谁是大多数的问题。如果觉得大多数的方式基于IP,一个IP地址一票,那么有人拥有分配大量IP的权利的话,就破坏了这个投票机制。而POW的本质是一CPU一票。大多数的决定,表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU是诚实的节点控制,那么诚实的链条将以最快的速度延伸。如果攻击者相应对已有的区块进行修改,那攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,最终赶上并超越诚实节点的工作量。
由于硬件的高速发展,算力也跟随提升,并且节点可能随时参与或者退出。为了保证工作量证明花费的时间相对稳定,工作量证明的难度将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一预设的平均数。如果区块生成的速度过快,那么难度就会提高。
翻译论文很累,接下来几章会慢慢更新,英文好的同学可以自己解决。
网友评论