数字货币:比特币数据报告与操作指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2

比特币协议与发展

(一)比特币协议概述

比特币的本质是一种协议,在中本聪的论文中提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何金融机构。虽然数字签名部分解决了这个问题,但是如果仍然需要第三方的支持才能防止双重支付(double-spending),那么这种系统也就失去了存在的价值。

中本聪提出一种解决方案,使现金系统在点对点的环境下运行,并防止双重支付问题。该网络通过随机散列(hashing)对全部交易加上时间戳(timestamp),将它们合并入一个不断延伸的基于随机散列的工作量证明(proof-of-work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。最长的链条不仅将作为被观察到的事件序列(sequence)的证明,而且被看作是来自CPU计算能力最大的池(pool)。只要大多数的CPU计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(node)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。

(二)比特币协议特点

通过比特币的协议,我们可以发现比特币的价值远不止货币本身,因为它构建的是货币的互联网协议。

大部分人只知道作为数字货币的比特币,而真正有着深远意义的是作为潜藏协议的比特币,它还有着封装并分发合约的功能。

比特币封装了以下四项基本技术。

电子签名:无法伪造,允许一方安全地核实同另一方的交易。

点对点网络:如同BitTorrent和TCP/IP一样,几乎无法摧毁,无须强大中央机构的维护。

Proof-of-Work(工作量证明):可以防止用户一分钱花两次,同时还无须中央机构来验证交易是否有效。Bitcoin为矿工设立了奖励机制,他们利用算力强大的计算机,来完成验证交易是否有效的工作。矿工可以从这种活动中获得新的比特币作为奖励,任何有足够算力的人都可以参与挖矿,并获得奖励。

分布式总账:在每一个比特币钱包中,你都能查到整个比特币系统的每一笔交易记录。区块链意味着任何人都可以去检验某项交易是否发生过。

通过这四项基础技术,比特币具有了很多特点,它是稀缺的(中央银行没法滥发货币)、持久的(不会像金子一样降解)、便携的(可以以电子或者只是你脑中的数字的形式存储、传播)、可分的(一个比特币可以分成一亿份或更多)、可证实的(每个人的区块链里都能查到)、易存储的(记在纸上或者电子介质上都行)、可替代的(每个比特币都一样)、难以伪造的(几乎不可能破解),可被广泛使用,许多互联网技术人才正在花时间不断改善比特币。

对于比特币的未来,人们还有各种各样的担心,比如加密算法的安全性、交易速度、区块链的大小、交易的不可逆性、被盗或者被黑的可能性。所有这些都是可以被第三方服务和协议升级解决掉的。不妨把现在的比特币协议看作Bitcoin 1.0,就像曾经的HTTP 1.0一样,它会从最初只有简单文字和图片的浏览器演化成现在的互联网,以后也会有更丰富的比特币世界。

相较于现在的英镑或者美元,比特币有很多明显的优势,上文已经提到不少。但更重要的是,比特币这套协议可以支持当下不可能实现或者实现昂贵且需要强力第三方的金融交易服务。

比特币自带有脚本语言,不单支持“把钱从X汇给Y”这种交易,还可以要求N方中的M方同意,才能使交易完成。举个例子,设定一项遗嘱,只有当大部分继承人同意他们的父母已经过世时,该遗嘱才会生效,完全不需要任何律师;或者只有当三方受信签名中有两方同意才能批准某项支出;或者一项Kickstarter上的众筹计划,只有多数支持者同意达到某项指标时,钱才会支付给发起人。所有这些案例中,仲裁者自己都是不能拿走钱的,他们只能批准或者驳回某项交易。

当然,脚本语言也能支持基于其他参数的交易。比如基于时间的交易,可以衍生出自动抵押贷款、信托和津贴支出。基于随机数字的交易则可以是由第三方审计的抽奖。你还可以设计出智能财产,比如一种汽车电子钥匙,只要买方向卖方支付一笔钱,卖方的汽车钥匙就失灵,买方的钥匙开始工作,可以用来开车。使用场景如下:你的无人驾驶汽车在其他地方被堵住了,给邻居一点比特币,就可以借他的车一用。

每个人都有整个比特币的区块链的备份,也就都能够核实你的交易。你可以将任意一份文件加密,给个时间戳,放到区块链中,任何人都可以随时核准这份文件。如果你用自己的私钥给文件签名,其他方也用他们的私钥签名,这份文件就成了不可否认的共同署名的合同,可以彻底无视公证员的存在。还有Namecoin计划,解决了域名问题,或者P2P股票和博彩交易所(SatoshiDice),无须传统意义上的证券交易所就能买卖股票和分红。

最重要的是,比特币提供了开放的API接口,可以用于创造安全的、可编写脚本的电子现金交易。如同Web将出版平民化一样,比特币可以让构建新的金融服务更平民化。你可以用任意第三方或者代码本身来订立、修改或者执行电子合同,完全免费,快捷,不用担心伪造或者撤回。传统银行或者信用卡公司只会把自己的支付基础设施开放给几家公司,而比特币则向所有人开放。

比特币从最初的0.1版本后,由比特币开发团队不断进行维护和升级,根据市场的需求逐渐增加了一些新的功能,使得比特币协议更加完善。我们就最近的比特币协议升级情况来说明比特币的最新发展情况。比特币核心开发团队在2013年的第三季度中发布了两次协议升级——一次是计划升级,还有一次则是为了响应一个关键性错误,这个错误会阻止多个节点索引最新的比特币交易。

(三)Bitcoin 0.8.4

Bitcoin-Qt 0.8.4版本于2013年9月4日发布,包括了一些安全方面的改进。第一次更新解决Bloom Filters,紧凑数据结构,允许使用截断的数据块以节省磁盘空间,这是在Bitcoin-Qt 0.8.0中首次发布的。它们的实现,在不经意间创造了一个拒绝服务漏洞。被发现有两起攻击事件:有能力压倒比特币的节点的读/写能力,使他们落后于最新的块,并有能力压倒节点的消息导致比特币软件崩溃。虽然均未观察到大量次数的攻击,他们观察到是一些孤立的事件,但需要立即引起注意。

0.8.4版本解决的第二个问题是一个漏洞,该漏洞允许攻击者通过内存过载来让节点崩溃。该问题与存储交易的截断方式有关。当反序列化时,描述参数可能会和序列化(截断)版本出现冲突。如果攻击者针对特定的节点,他们可以发送给该节点无效序列化的交易数据,而将一个不同的、有效的版本发送到网络的其余部分时,无效的将变得有效。该节点与网络的其余部分保持一致时,交易将被拒绝。这种情况很难获得实际应用,因为它需要针对特定的节点,该节点必须是愿意接受零确认交易的。另外,攻击者如果能够通过网络发送恶意交易,将导致试图截断交易的客户端从网络上断开。

0.8.4版本的第三个更新是Bitcoin-Qt的RPC(远程过程调用)中密码尝试所用的固定时间算法。更新之前,攻击者通过精确衡量连接到受害者的电脑(通常是指在同一本地网络)的情况下,可以通过使用一个不正确的密码尝试测量的响应延迟来知道他们有多接近。这使攻击者在尝试猜解一个私钥时,能够减少猜测时间和尝试的次数。

(四)Bitcoin 0.8.5

Bitcoin-Qt的这一版本是通过紧急发布以解决严重bug的。运行Bitcoin 0.8.0或更高版本后,从2013年9月9日开始,有软件用户遇到数据库损坏错误,被要求花费数个小时来重新建立区块链索引,但这一措施被证明并不能解决问题。

产生这个问题是因为单一的交易块256818,使用负的版本号进入本来应该只有0或者1的字段中,从而导致运行数据库一致性检查时出现错误。该问题并未对比特币网络有任何重大影响,有问题的交易发生后,大多数节点和交易所在不重新启动的情况下可以保持软件继续运行。这个问题通过在交易中分配负版本号作为非标准情况得到解决,以防止出现问题复发。

(五)Bitcoin 0.9.0

预计比特币协议下一个重大更新将会是交易发起方式的显著改善。付款协议将会支持,允许用户请求比特币付款,能够实现除了“拉”外还可以使用“推”的方式支付。

目前正在引进一个新的协议,将允许商家通过HTTPS发起交易。他们可以使用X.509数字证书来签署支付请求,其中将会包含比特币地址,还包括支付方式及文字描述字段。接着用户作为对商家HTTPS请求的响应,可以回应发送一个交易。商家最终回复给客户以确认付款。

1.技术进步

(1)签署的交易

目前常见的做法是为每个客户新生成一个比特币接收地址,以确保资金可以关联到每个客户的账户。然而,由于支付请求的接收者需要验证请求者的真实性,这对商家发起交易提出了问题。为了解决这个问题,0.9版本将采用X.509数字证书签署付款申请。X.509数字证书经常被用来签署网站会话,它由一个中央权威机构发布给一个特定的部门。支付请求可以被持有这些证书的商户签署来证明该支付请求的真实性。

选择X.509数字证书而不是其他可替代数字证书的原因有两点。第一,它们简单并易于管理,免除了一些其他现有支付标准的不必要特性。第二,很多网站已使用X.509数字证书,它们有能力也有经验使用这个数字证书。

(2)额外的字段:界面友好的说明书和退款地址

一旦支付请求流行起来,用户可能需要过滤过多的请求,即使这些请求来自相同的发起人,来识别一个特定的交易。0.9版本计划允许一个描述字段,比如“3月的VPN服务”,用更多的细节来识别交易。

此外,人们可能会用托管的钱包支付,比如交易平台的一个账户,如果退款将不能提供一个可靠的地址。如果退款是发送回发出地址,有可能托管服务不能将转入的支付与接收者联系起来。提供一个退款地址的功能可以允许退款转移到与比特币发送地址不同的一个地址中,减轻前文所述的担忧。

(3)关注点

新功能的实现有两个关注点。许多用户对比特币的一个主要诉求是网络的去中心化。X.509数字证书是由中央发布的,因此信任它们的签名来源于证书发行者的可信度。虽然这种风险在交易中不会很普遍,但它确实增加了漏洞,因此大额交易最好不要使用这种交易方式。另外,很难检查吊销的证书。如果在线证书检查协议(OCSP)是离线的或被黑客击溃,有可能有假阳性的拒绝交易。

2.重大的改进

(1)易用性

新版本将会实现很多新功能,极大地改进不需要第三方参与的比特币的易用性。手工输入精确到小数点后八位的字符串给人们犯错留下了空间。使用请求支付功能可以让商家发送准确的交易数额给客户,而客户只需要简单地回应确认即可,无须复制或输入付款金额本身。

(2)定期付款

0.9版本的定期付款功能,虽然只有一个请求而不是直接的费用,将明显容易实现。订阅服务一直不愿意作为比特币一个支付功能来实施,是因为缺乏有定期账单的客户。

有两种方法可以利用这些变化保持订阅付款。如果在到期支付前几天发送一个支付请求,用户将被提醒支付服务,并手动处理该项交易。另外,钱包项目可以发展出采用预先批准的标准的自动支付请求,比如从特殊商户发出的支付请求或支付请求低于一个确定的临界值。自动编制账单在客户的同意下可以实现。

(3)争端解决

争端解决也将更加清晰。交易完成后,客户将会收到一份签署的收据。使用请求支付、交易ID和支付确认的对一个商家的证明付款将是微不足道的。在中介环境中使用第三方担保服务,交易双方将有明确的证据显示交易完成,因此可以发布第三方担保基金。

另外,如果客户发送付款给商家而商家不遵守其交易直到结束,一个公开可见的证据可以证明客户购买了商家的服务。为了维护自己在世界上的通过论坛和媒体的广泛的大众传播形成的声誉,商家会发现自己有义务履行他们的最终协议。

3.协议的影响

减少摩擦发起交易

用户无须填写烦琐的比特币地址或扫描QR码,不需要担心得到的付款金额是否正确。

争端解决会更容易

现在客户可以通过使用X.509证明他们直接支付给商家。商户可以在自由文本字段中根据特定的识别信息来区分产品和订单ID信息。

经常性收支将成为可能

用户将能够根据一定的要求和可信的程度来自动每月回应支付。该软件将可能有预设约束值以防止过度收费。

商家可以通过PaymentACK给用户发送即时反馈

这将允许进行一定程度的沟通,如Satoshi Dice确认损失交易,这在以前是块链上发生,将会移动到块链下。

图2-1 Bitcoin-Qt 0.9.0商户支付流程图