注:此翻译草稿尚未完成,欢迎参与翻译工作。
原文:SoK: Research Perspectives and Challenges for Bitcoin and Cryptocurrencies, IEEE S&P 2015
作者:Joseph Bonneau , Andrew Miller, Jeremy Clark, Arvind Narayanan, Joshua A. Kroll, Edward W. Felten
翻译:张宇,刘文峰,秦超逸,马传旺 哈尔滨工业大学
摘要:首次详细阐述了比特币和许多相关加密货币与山寨币。指出了比特币设计中三个可分离的关键组件。绘制了设计空间,比较分析了共识机制、并发分配机制、计算难题和密钥管理工具。总结了比特币中匿名性问题,提出了一个评价框架来分析多种隐私增强方案。提出了对去中介化的新的理解。指出了并详细比较了三种通用去中介策略。
[P1]
拿关于比特币的两种相反观点做为靶子,来考虑这一问题。第一种观点是“比特币好用是在实践中,而非在理论上”。比特币社区信徒支持这一理念,并批评安全研究社区:没有发现比特币,没有立即认识到其创新性,并且如今仍然由于缺乏严格的理论基础而无视它。
第二种观点是,比特币的稳定性依赖于若干社会经济因素之间一种未知组合,这种组合无法被充分准确地建模,也无法产生对系统正确性令人信服的论证。面对这些困难,老练的安全研究人员可能避免将比特币做为研究主题。原因在于,考虑到谨慎的安全工程只用来设计一种系统,这种系统具备清晰的威胁模型以允许形式化的安全证明。
下面指出这些简单的观点错在何处。对于第一种观点,虽然比特币目前在实践中运行得令人吃惊地好,但一个研究重点就是明确为何如此,而不是盲目地接受非形式化论断。进一步地,理解比特币为何随着实践的变化而仍然好用也很关键。系统必须随着外部政治经济因素演化而改变,例如,交易量增长,以及作为系统设计的一部分,比特币矿工的奖赏会随着时间变化。一种论断是比特币已经从2009年运行到了2014年,所以会继续如此运行,这并不充分。当前尚未具备足够的认识来获得比特币仍将良好运行的可信结论。这是一个关键的研究挑战,需要从计算机科学理论中获得答案。
对于第二中观点,比特币填补了一个重要空白,其提供了一个虚拟货币系统,其中无任何可信方,在参与者之间也无预设身份。在这些限制下,在没有进一步假设的前提下,分布式系统中一般化共识是不可能的达成的。比特币假设理性(贪心)行为可以被建模,并且激励与之一致来保证共识算法的安全操作。在实践中,这些限制在理念上和技术上发挥作用,并且在该模型下比特币达成共识的方法极其令人吃惊,是一个基础性贡献。比特币的核心共识协议对货币之外的许多其他计算机安全问题有深远影响,例如分布式命名,安全时间戳和提交,公共随机量生成,以及许多金融问题,例如自强制(“智能”)合约,去中心化市场和订单,分布式自治体。简而言之,尽管比特币不容易建模,但值得给予相当大的研究关注,因为它可能构成实践上解决一些极度困难且重要问题的基础。
考虑这种二元对立,我们着手从比特币运营和发展的前六年以及许多衍生货币中总结出共同的知识。我们的目标是找到许多已经出现重大创新的领域,从新型支付协议到用户友好的密钥管理,以及找到比特币和未来加密货币中最重要的开放式研究挑战。
[P2]
感兴趣读者请阅读关于“第一波”加密货币研究的综述[15][95]。加密货币可追溯到1983年Chaum提出的“不可追踪支付”方案[28],其中银行发行盲签名硬币形式的现金。非盲的硬币在用户和商家之间转移,并在银行核实它们尚未被兑换过之后进行兑换。盲签名阻止银行将用户与硬币联系起来,提供了类似现金的不可连接性。
整个1990年代之中许多该方案的变体和扩展被相继提出。主要贡献包括,移除了购买时银行必须在线的要求[29],允许硬币被分割为更小的单位[92],以及改进效率[27]。一些创业公司,包括DigiCash[107]和Peppercoin[99],尝试将电子现金协议付诸实践,但最终在市场中失败。“第一波”加密货币研究中的方案都未得到显著发展。
作为比特币的一个关键组成部分,难度适当的“工作量证明”难题在1990年代初被提出[42],本来用于反垃圾邮件,但并未为此广泛部署[71]。许多其它应用紧随其后,包括一个公平彩票提案[51],为微支付铸币[100],以及阻止各种形式的拒绝服务攻击以及匿名网络中的滥用[10]。此后的Hashcash是一个数字微支付的替代方案(例如,NetBill[110]和Karma[121])。工作量证明也被用于检测分布式对等共识协议中的女巫节点[7],类似于当前比特币共识中的应用。
比特币的另一个必要元素是公开账簿,这令双重支付可被检测。在1990年代末所提出的可审计电子货币[105] [106]中,银行维护一个公开数据库来检测双重支付,并且确保硬币的有效性,但把全部有效硬币发布出来由于不可行而被去掉(取而代之,只有Merkle根被发布)。在1998年提出的B-money[36]是首个公开(尽管匿名)广播所有交易的系统。在密码朋克(Cypherpunks)邮件列表中被提出B-money只从学术研究社区收到了极小的关注。
在1990年代早期提出的智能合约[114]令参与者可以形式化的说明一个密码学强制协议,这预示着比特币的脚本能力。
在2008年,比特币被提出,并且一份以中本聪为笔名的白皮书被张贴到密码朋克邮件列表中[90],紧接着原始参考客户端的源代码被发布。比特币的创世块在2009年1月3日被挖出。比特币首次作为现金被使用是通过2010年5月的一笔交易,一名用户以1万比特币作为交换,为另一个人订了一份比萨饼外卖。自此,越来越多的商户和服务采用比特币,比特币价格普遍上升,于2013末达到每枚近1200美元的峰值。
比特币历史伴随着犯罪。流行的黑市网站丝路[30]在2011年2月至2013年10月间运营,直到最后被FBI逮捕并关闭。僵尸网络已经发现比特币采矿是额外的收入来源[57]。一份最近的美国联邦法庭案件涉及一个巨大的基于比特币的庞氏骗局[109]。在2014年,名为CryptoLocker的计算机病毒从受害者那里敲诈了数百万美元,该病毒加密受害者的文件并需要比特币赎金来释放解密密钥 [47]。由于盗窃[41]和交易所倒闭,许多用户的比特币已经丢失[86]。
这里阐述比特币的三个主要技术组件:交易(包括脚本),共识协议,以及通信网络。比特币极其复杂——这里的目标是以充分的技术深度来描述系统,使得后面可以对比特币相关文献评论和评价。特别地,三组件分解的关键好处是,通过分离可能独立变化的概念,来使得对所提出改造方案(第6、7节)的评价和系统化有意义。
**关于比特币的信息源:**由于缺乏权威正式的规范,比特币难以被定义。最初的比特币白皮书[90]是一份很好的比特币设计哲学概述,但其中许多重要的技术细节被省略或已经过时。参考实现bitcoind被认为是事实上的规范,更多知识散落在一系列“比特币改进提案”(BIP),论坛帖子,在线维基文章,开发者邮件列表,以及被记录下来的IRC讨论之中。我们将这些信息源系统化为一份精确的技术介绍,阐述被认为是独立设计决策下的若干系统组件。
比特币世界的状态表示为一系列称为交易的消息。在许多用途之中,交易发布主要是用来将货币从一个用户转移给另一个用户。需着重强调的是,巨大(正在增长中)的交易列表是比特币中唯一状态。不存在用户、账号余额或身份这些更高级概念的标记——这些都只存在于发布的交易列表之中。
[P3]
交易格式。 一个交易包含一个输入队列和一个输出队列。整个交易使用SHA-256来哈希,并且该哈希值最终作为其全局唯一的交易ID。交易以一个随意的二进制格式来表示;这是bitcoind作为事实上规范的一个早期的例子。
每个输出包含一个整数值来表示比特币货币数量。这个值的精度限制了货币单位被细分的程度;最小单位称为一个satoshi。按惯例,10^8个satoshi为货币的首要单位,称作一个“比特币”,标记为(比特币符号),BTC或XBT。
每个输出也包含一个较短的代码片段(采用一种特定的脚本语言),称为scriptPubKey,表示兑现交易输出的条件,包含在后续交易的输入之中。
交易脚本: 通常,scriptPubKey指明了一个ECDSA公钥的哈希值以及一个签名验证例程。这被称为一个“支付给公钥哈希值”(pay-to-pub-key-hash)交易,整个兑现交易必须用指定哈希值对应的密钥来签名。绝大多数的比特币交易是支付给公钥哈希值。通常将系统被描述为只具有这一种交易,尽管其它交易类型也可以。脚本语言是一种随意的、非图灵完备的堆栈语言,包含不到200个称为操作码的命令。操作码包含对密码学操作的支持——例如哈希数据和验证签名。与交易格式类似,脚本语言也只由bitcoind中的实现来规范。
交易输入为其之前的交易,由此前交易的哈希值和交易输出队列中的输出索引来标识。其中还必须包含一个代码片段来兑现交易输出,称为scriptSig。为了成功兑现此前的交易,scriptSig和scriptPubKey必须都使用同一个栈一个接一个地成功执行。对于支付给公钥哈希值交易,scriptSig其实就是一个完整的公钥(带有正确哈希值)和一个签名。
价值守恒。 除了需要每个交易的输入匹配一个此前交易的输出,以及两个脚本被成功执行,只有当交易满足基本限制时才有效。这个限制是,所有交易输出价值之和小于或等于所有输入价值之和。在第2-B2节中讨论一个例外:coinbase交易被用来创建新的货币单位。
从交易到所有权。 交易格式本身意味着若干有趣的属性。这里不存在拥有比特币的身份或个人账号的内在记号。所有权简单地意味着知道一个私钥能够构造一个签名,该签名兑现某个输出——个人拥有全部可兑现的比特币。在支付给公钥哈希值交易中,公钥哈希作为系统中的伪身份,被称为“地址”。无需真实世界名字或身份信息。
可以说,关于比特币交易格式没有什么深刻的创新。然而,考虑到之前的加密货币系统,使用一个脚本语言来说明兑现条件,以及交易可以说明整个系统状态,这两者并非是显而易见的设计选择,但却基本上已成为所有后续设计的标准。一些提案扩展了比特币交易的语义(通常通过增强脚本语言),而不改变任何其他组件。
如果在用户之间直接发送交易来传递资金,则基于交易的货币系统是不安全的。尽管签名会限制前一个交易的有效接收者在后续交易中引用它,但交易本身并没有限制Alice在发送给Bob和Carol的单独交易中两次兑换一些交易输入。孤立地看,两笔交易都是有效的。比特币采用了一种简单的方法来解决这种双重支付攻击:所有交易必须被发布在一个全局永久交易日志中,而且任何单个交易输出只能被一个后续交易所兑换。验证一个交易现在就需要验证交易的脚本,以及保证交易被成功发布到日志上。在比特币中,日志被实现为一串交易区块,每个区块包含前一个区块的哈希值,以此承诺该区块为其唯一祖先。这被称为区块链。
注意该设计仍然需要对于区块链内容的全局共识。如果Bob和Carol看见了两个不同的区块链,那么他们将易于受到双重支付攻击。一种解决方法是使用一个可信的中央权威来收集交易并把它们发布到签名的区块上。但这不是我们想要的,因为该权威可能拒绝发布某个交易(有效冻结用户财产),还可能完全离线,或者可能故意将区块链分叉来双重支付硬币。
中本聪共识。 比特币在区块链上通过去中心化的、伪匿名协议建立了共识,称为中本聪共识。这被认为是比特币的核心创新,或许是其成功的最关键要素。任何参与者可通过收集一个有效的待处理交易集合并将其形成一个区块,来尝试添加到区块链之上。核心要素是使用一个有挑战性的计算难题(通常被有点儿不恰当地称为“工作量证明”)来确定哪个参与者的区块将作为链中下一区块。
[P4]
选择一个新区块的过程很简单:第一个被声明的包含了一个计算难题的解的有效区块被认为是正确的。一旦收到它,其它参与者将开始寻找下一区块。如果一个声明的区块包含了无效交易,或者格式错误,那么所有其它参与者将拒绝它,并继续工作直到它们发现一个有效区块的解。在任意时刻,达成共识的区块链都是最长的那一条。通常情况下,这只是拥有最多区块的分支,但由于采矿难度可能在长叉之间有所不同,所以最长的链必须定义为预期产生难度最大的那个链。
可能两个有效解在近似相同的时刻被找到(依赖于网络延迟),导致一个包含两个相同长度链的临时分叉。此时矿工可以选择任意一个分叉。由于计算难题的随机性,一个区块链将最终扩展得比另一个更长,此时所有矿工应采用该链。
虽然比特币的原始规范只提供了最终达成共识的一个非正式论证[90],但后续工作证明,假设有一个有效和及时的广播信道,以及控制了大量算力的矿工忠实地遵循协议,则协议健壮,且网络将逐渐达成共识[46],[84]。 在第三节将进一步讨论。
区块链确认。 这种共识机制的渐进性意味着用户必须等待区块被发现,来确信交易被永久包含在区块链之中。在分叉期间,其中一个分支最终会在矿工聚集到另一个分支后被丢弃。虽然两个分支通常包含的交易大部分相同,但如果竞争分支中包含冲突交易,那么显然一个交易可能被包含在最长的链中,而若其他分支超过了这个链,则交易被撤销。在最坏情况下,这可以有效地实现双重支付攻击[12],[60]。
从理论上讲,用户永远不可能完全确定一个交易最终不会被一个非常深的分支去除[13],[70]。 然而,如果大多数矿工遵循默认协议,则用户可以推断交易以指数增长的可能性(参见第III-A节)最终落在最长链上,因为更多的确认块被发现。实际上,大多数比特币客户端在接受交易发布之前需要6个“确认”块。6个块的选择是随意的,它来源于参考客户端,并不是基于对深叉概率的任何分析。
深叉还可以用一种临时的方式来阻止。在任何有效的区块链中,默认比特币客户端带有硬编码的区块链前缀(检查点)。Laurie [70]认为,这些检查点证明比特币不是一个真正的去中心化协议,因为它们是以集中方式选择的。
激励正确的行为。 该协议的一个关键组件是,找到一个区块的参与者可以插入一个coinbase交易,该交易铸造了指定数量的货币并将其转移到其所选择的地址。因为参与者正在努力(实际上是竞赛)解决计算难题以换取金钱奖励,它们被称为矿工。这种称为区块奖励的新货币激励矿工只能在有效的区块上工作,因为无效的区块将被网络拒绝,并且其采矿奖励将不会存在于最终最长的区块链中。请注意,从矿工的角度来看,“有效”区块只是那些它们认为大多数其它矿工将接受和建立的区块,超出了其它任何有效性规范(未超出bitcoind实现)。
由于这种共识算法依赖于矿工的金钱回报,因此难以用于无可转让价值概念的系统中。在比特币中,最初是矿工收到所有新货币,没有其它货币创造机制。这并非绝对必要,但共识协议确实需要给予矿工一些奖励,否则它们没有动力找到有效的区块并解决计算难题。
采矿细节。 计算难题本身需要为SHA-256(一种密码哈希函数)找到部分预映像。具体来说,难题在于找到SHA-256哈希值小于目标值的区块(由交易列表,前一个块的哈希值,时间戳和版本号以及任意的nonce值组成)。这个难题常常被近似描述为找到以d个连续零位开头的哈希值。标准策略只是随机尝试nonce直到找到解(尽管这或许不是唯一策略[34])。
难题的随机性很重要;用非随机难题(真正的工作量证明),最强大的个体矿工可能会首先找到每一个区块。通过随机难题,每个矿工找到下一个区块的概率与其竞争算力所占份额成比例。
难题的难度经过校准使得平均每10分钟找到一个新区块。为了保持这一点,通过包含在前2016个块中的时间戳的一个确定性函数,每2016个区块或大约每两周调整一次难度。
[P5]
采矿奖励和费用。 区块奖励大小由固定时间表决定。 最初,每个区块创建50比特币。目前已经减半到25比特币,并且计划约每四年减半,直到约2140年,那时不再创造新比特币。
为了让货币创造能够逐渐关闭,矿工不仅从区块奖励中获利:它们也可以获得区块中所有输入和所有输出交易之间净值差异。 对于用户而言,输入值大于输出值的区块包含了支付给矿工的交易费。
迄今为止,交易费主要用于阻止过多小型交易(称为一分钱泛滥)过度使用网络,并且尚未提供超过1-2%的采矿收入[87]。费用值主要由参考客户端[87]中配置的默认值决定,少数用户选择支付更高的费用以令其交易被更快地发布。
采矿池。 在实践中,矿工们通常在矿池中合作[102],通过与其它矿工共享回报来降低收入差异。矿池通常由一个管理器负责管理,其只收取一小笔管理费,从所有参与成员找到的有效区块中收集采矿奖励,并按照它们代表矿池进行的工作量比例分配奖励。参与的矿工通过发送以大量零(d'= 40)开头、非有效的近似区块来证明(概率上地)已完成的工作量。由于风险分担,矿池成员回报差异较小,代价是预期收入小幅下降以支付管理费。
尽管原始协议未描述矿池,且可能也未预料到,但自2013年以来大部分采矿能力已组织为矿池。许多公式被用于矿池成员之间收入分配,以鼓励忠诚度、尽量减少“跳池”,对新成员友好[102]。有几种低延迟通信标准协议应用于池操作员到成员[94]以及不同池的操作员之间[32],[74]。尽管最受欢迎的矿池为集中管理,但也有采用p2pool协议的临时池[122]。
比特币最后核心部分是通信网络。从本质上讲,它是一个去中心化、临时、对等广播网络,用于宣布新交易和区块。一般来说,这是三个组件中创新最少的,且几乎没有山寨币对此做出重大改变。
对共识的影响。 网络性能和稳定性对共识协议有重要影响,原因有两点。首先,一个区块被发现时刻与被所有其他节点接收时刻之间的任何延迟都会增加临时分叉可能性。对于频繁分叉的担忧促使在原始设计中选择10分钟为块创建时间。其次,一个能够控制大部分网络的恶意矿工可能会试图优先广播自己的区块,增加其“赢得”分叉的可能性,从而提高预期采矿回报。同样,任何能够审查网络的一方都可以选择性地阻止传输并冻结资产。因此,拥有一个去中心化(符合其总体设计)、低延迟、难以审查或拖延的广播网络是非常重要的。
网络拓扑与发现。 任何节点都可以通过连接到一些随机的其他节点来加入网络。 默认情况下,每个节点尝试建立8个外出连接,并准备接收最多125个进入连接。NAT之后的节点(如移动客户端)无法接收进入连接。加入网络的对等体最初需要一个找到其它对等体的方法。像许多其它对等网络一样,比特币通过使用专用目录服务器或“种子节点”来实现这一目标,其身份被硬编码到参考客户端中; 此后,每个节点维护它所知道的对等地址列表。
对等体还通过其它两种机制传播彼此信息:首先,当一个节点建立一个新的外出连接时,它会触发一系列包含其连接信息的中继消息;其次,在收到进入连接时,节点向其对等方询问一部分已知地址列表。这种机制构建了一个连接良好的随机网络,具有低节点度和低直径,适合通过扩散快速广播信息[38],[61]。
通信协议。 新区块和待处理交易通过洪泛广播到整个网络。无论何时第一次听到它们,节点都会将包含新区块或待处理交易的哈希值的INV消息发送给所有对等节点。如果对等体尚未见过它们,则可以通过请求这些块或交易的全部内容来做出响应(通过GETDATA消息)。默认情况下,节点只会转发一次新数据,以防止无限传播;只传递交易和有效区块;在临时分叉中发现两个区块时只传递第一个听到的区块;不会广播与已发送的待处理交易相冲突(双重支出)的待处理交易。这些限制都是性能优化,旨在限制网络上数据——不符合规范的节点可能会中继无效或冲突数据,这要求所有节点独立验证所有接收到的数据。
[P6]
中继政策。 默认情况下,比特币节点只会中继交易和区块,以满足一般交易有效性规则所允许的更严格的验证规则。其目标是防止各种拒绝服务攻击——这是经典的鲁棒性原则“对发送的内容保守,对接受的内容宽松”的一个应用。例如,默认节点只传递包含特定类型脚本的交易,这些类型只属于所有标准交易类型中一个极小的白名单。这项政策的意义在于用户希望,在区块链中包含非标准交易的用户不能使用通常的比特币网络,而需直接联系一个经过同意的矿工。另一个例子是,默认节点每分钟拒绝了超过数千笔低于0.001比特币的交易,作为对一分钱泛滥的防御。
[P6]
比特币的稳定性已经有了许多模糊或矛盾的定义,但一种被广泛采纳的定义是在系统规模不断增长以及遭受参与者新型攻击的情况下,系统依旧能够运转来支撑功能正常的货币。接下来依次考虑比特币各个组件的稳定性概念。尽管目前在强假设下稳定性是存在的,但比特币稳定性的条件究竟什么仍是一个开放问题。
(交易有效性规则定义了该用什么规则来验证交易数据,以及客户端如何处理失效验证。)
比特币生态系统中参与者如何对交易有效性规则如何达成共识,被分析得尚不充分。基本理念是这些由中本聪制定的规则将一成不变,我们称之为权威主义(canonicalism)。这已经调解了某些特定规则的不一致情况,例如,在原始OP_CHECKMULTISIG操作码中的一个良性错误已经被作为规范所保留。
然而,权威主义不能够完全解释当前的比特币规则,因为规则已经进行了一些改变来增加新的特性(例如pay-to-script-hash[2])。同时为了修复某些错误也修改了一些规则,最有代表性的例子是2013三月移除了一个限制区块大小的错误。由于新的更大的区块被为打补丁的客户端所拒绝,而导致了一个分叉。为解决这个问题,更新的客户端放弃了一个具有24个区块的分叉,并且为了老客户端更新,在两个月时间窗内临时停止包含更大的区块[1]。最终错误修复胜出,未打补丁的客户端最终被排除,尽管它们实现了权威规则。
比特币本身没有对更新交易有效性规则的过程做出规范。没有矿工的一致同意,任何改变都可能造成系统永久分叉,不同的群体认为的最长区块链反映了它们对真正规则的解释,而不考虑其相对于区块的长短。这样就不清楚哪个版本才是真正的“比特币”。因此虽然比特币被认为是完全去中心化系统的观念很流行,改变规则(或消除歧义)的需求意味着,它本身需要一定程度的治理来维持现实世界中关于哪条区块链才是比特币的共识[48],[64]。
当前,实际的治理是由维护bitcoind的比特币核心开发者和比特币基金会提供的。后者提供了基本组织结构并用募集的少量资金支持开发团队。与许多早期的互联网协议一样,除了大致上的共识之外,目前还没有正式的决策过程。
假设对交易有效性规则达成了共识,已经有各种努力来描述为维护比特币稳定而需保持的共识协议属性。我们将已经提出的多种分析结果进行系统分析,并概括出五个基本的稳定性属性:
- 最终共识: 在任何时候,所有合规的节点都会认同一个前缀,其会变成最终有效区块链。我们不能要求任意时刻的最长链都完全是最终区块链的前缀,因为可能由于临时分叉导致区块被丢弃(过期)。
- 指数收敛: 产生深度为n的分叉的概率是O(2^-n)。这给予用户高度信心,因为一个简单的“k次确认”规则最终会确保它们的交易以高置信度被永久包含在区块链中。
- 活性: 新的区块将会持续被添加,并且带有适当费用的合法交易会在一个合理的时间内被包含在区块链中。
- 正确性: 在最长链中的所有区块最终会只包含有效的交易。
- 公平性: 从期望上看,矿工挖出的区块数量与它的计算资源成正比(假设它们选择合有效区块)。
如果上述所有属性都满足,我们就认为系统是稳定的,但是不确定上述所有都必要。货币的用户可能不关心公平性,但通常假设是满足的,公平性缺失会导致许多矿工停止参与,这最终会威胁到其它属性。
活性也许是最难定义的属性,并且据我们所知还没有令人信服的正式定义。很明显,我们希望任何愿意付费的人都能使用网络,但是目前还不清楚在交易成本和包含时间方面的确切要求。严格的活性同时也意味着反审查性,这也许是不需要的甚至是不相要的,但这也经常被认为是比特币的一个核心属性。
令人惊讶的是,正确性事实上不是一个功能正常货币所需要,因为参与者能够简单的忽视最长链中任意无效交易。然而,正确性使SPV客户端具有重要的性能优势,因为它们只验证工作量证明,而不验证交易。(第四-A节)
[P7]
激励兼容性和博弈论。 中本聪最初认为比特币会保持稳定,只要所有矿工都会遵循它们的经济激励[90],该性质称为“激励兼容性”。激励兼容性没有在比特币或加密货币背景下被正式定义过;这个术语的流行源于直觉上的吸引力和营销价值。我们能够认为合规的矿工的策略遵循默认的挖矿规则(见第二-B2节)。在博弈论中,如果普遍的服从被证明是纳什均衡,这将意味着比特币的激励兼容性,因为没有任何矿工会有任何激励去单方面改变策略。这意味着如果存在其他平衡就会出现弱稳定性概念;如果普遍的服从是唯一的均衡就会有强稳定性的概念。如果不合规的策略占支配地位,则必须研究由此产生的策略均衡是否会导致共识协议的稳定性。
假设矿工的目的仅是获取名义上的比特币,讨论比特币稳定性的已知的结果。
简单的多数服从可能不会确保公平性。 一个有趣的非服从的采矿策略是“临时区块隐瞒”[11],[45],[46],其中矿工在发现新区块后先将其保密。如果矿工发现自己超过了已知最长链两个区块,那么它可以有效地挖矿而不会遭到反对,直到其余网络节点快追上它而与之相距一个区块时,此时发布保留的区块。如果一个矿工控制超过三分之一的总算力,这一策略将优于那些合规的矿工,因为两者对立时,会有更高份额的挖矿奖励。它也对那些有着较低采矿能力的攻击者有利,这取决于矿工们如何选择几乎同时宣布的区块。有着优势网络位置的攻击者能够更快的宣布它们隐瞒的区块,这证明了稳定性依赖于对网络通信的假设。
这些结果表明,普遍合规对于多种采矿能力分布来说并非纳什均衡,包括一些已经在实际中发现的分布,目前没有证据表明有自私的采矿攻击发生,且依旧无法知道在给定的临时区块隐瞒策略下存在什么均衡。如果临时区块隐瞒被执行,这将会破坏公平性。
在完美信息的情况下,多数服从是一个均衡。 Kroll等[64]分析了一个简化模型,在其中矿工有所有已观测到的区块完美信息(排除任何隐瞒)。在该模型中,普遍的合规是纳什均衡(尽管非唯一),意味着比特币是(弱)稳定的。
多数合规意味着收敛,共识和活性。 如果大多数矿工表现得合规,就会迅速出现一条最长的(正确的)链。原始比特币论文将一种恶意矿工建模为二项随机分布,该种矿工通过“更快地生成另一条链来超过诚实的链”来反转交易,并指出攻击者最终会在与其他网络的竞争中失败。Miller与LaViola[84]以及Garay等[46]提供了更详细的形式化证明,若大多数矿工遵循服从策略,并且通信延迟与发现区块的期望时间相比足够低,那么无论非合规的矿工有何种策略,所有矿工最终会同意一个日益增长的交易历史前缀。这足以在网络和其他假设的基础上,以确切规模的大多数来确保所有稳定属性,除了公平性(由于可能的临时隐瞒)。
对单个大矿工来说,稳定性无法保证。 众所周知,一个控制了多数计算资源的非合规矿工能够破坏公平性。通过忽略其它矿工发现的区块,大矿工让自己的链成为最长链来得到所有挖矿报酬。大矿工能够选择通过拒绝区块或进行分叉来破坏活性。最终,大矿工能够通过在区块链中加入任意长度的分叉来破坏收敛性和最终共识,通过这种手段来进行交易反转或双重支付。这些策略都可以导致名义上的盈利,但因为这些行为是可检测的,所以不能成为一个理性矿工的长期兴趣。
矿工之间进行勾结对稳定性的影响未知。 即使不存在大矿工,小矿工们能够通过互相勾结为控制大多数采矿能力的团伙,然后可以效仿单个大矿工的策略。但无法知道团体内部是否稳固、成员是否会变节以及其它矿工是否会提出更有利的条件来组成一个新的团伙。矿池可能会成为一项形成团伙的技术机制;矿工选择矿池和池间迁移的动态规律尚未研究。对于矿工是否或如何通过补偿性支付来鼓励它人加入团伙也尚未被严谨地分析。
[P8]
采矿报酬衰减对稳定性的影响未知。 所有结果都基于一个简化的模型,在该模型中每个区块都有固定不变的报酬。矿工的收入从区块报酬转变的交易费的转变将会令该模型失效,需要一个更复杂的模型将可用交易费的分配考虑进去。据我们所知,目前没有关于交易费对稳定性的影响的彻底分析,包括没有采矿报酬的最终状态或者交易费成为不可忽略收入来源的中间状态。
对于比特币在现实中观察到的稳定性,比特币占优效用模型并没有为其提供令人信服的理由(更不用说保证它在未来的稳定性),这是因为在现实中缺乏观测到的攻击行为,尽管大矿池能够通过不遵守规范来获利。在现实中,矿工不仅仅想获取名义上的比特币,更重要的是想获取真实的利益。为建模这个需求需要为矿工开发一个效用函数来整合它们所赚的比特币以及如何将这些比特币转换为真实世界的价值或其它货币。矿工的策略会影响它们将比特币财富转变为现实世界价值的能力,将其分为以下三个因素:
流动性限制。 当前用比特币交换外部货币的流动性较低,因此攻击者可能获得大量的比特币,但无法将它们全部转换为外部价值,或只能以较低汇率兑换。
面对攻击时的汇率。 一些非合规策略,特别是以一种可见方式影响稳定性的,可能会破坏比特币的公信力,进而降低比特币短期的需求。在现实中,当系统出现技术故障时会使得汇率降低[72]。当使用某种策略快速赚取大量名义上的比特币时,一旦被发现也会导致汇率的骤降。因此在汇率做出反应之前很难套现,特别是在上述流动性受限情况下。
在比特币占优的采矿奖励中的长期权益。 多数大型矿工都有额外的兴趣来长期维持比特币的汇率,因为它们在无流动性的采矿硬件中投入了大量资产,如果汇率降低这些资产将会贬值。如果矿工们预计它们将在未来以低边际成本维持采矿能力份额(例如,如果它们运营成本中很可观的一部分是用于购买设备),那么它们将会避免那些虽然能够赚取更多比特币,但降低了未来采矿奖励预期价值的策略。注意,只要没有一个可以让矿工们卖掉未来预期采矿能力的有效市场,即使一个矿工能够将盗取的比特币在公众反应之前很快地套现,这也只是一个有限的因素。
中本聪大致描述了一个版本的论述[90],淡化了大矿工攻击的可能性,原因是这会导致系统(以及汇率)的永久性破坏,而且遵循规则(合规策略)随着时间会更加有利可图。在实践中,GHash.IO矿池在2014年6月中一段时间内超过了比特币网络算力的50%,并且公开承诺会在未来限制算力以避免损害系统公信度。
不幸的是,汇率难以通过博弈论模型来进行预测,因为它本身取决于人类判断和市场信心。对汇率和现实世界效用函数的作用进行更形式化地建模是一个重大的开放性问题。
对于效用不单纯来自于采矿奖励的矿工,至少有两个优势策略已经被分析。
金手指攻击。 如果一个大矿工的目标明显是破坏比特币的稳定性以及其作为货币的效用,那么它很容易做到。Kroll等[64]介绍了这种模型,并称其为金手指攻击。举例来说,一个想要破坏比特币来避免与本国货币竞争的国家,或者一个大量投资了竞争货币的个人,会有动机去发动这种攻击。或许尚存争议,这些攻击已经通过“将山寨币扼杀在摇篮里”被观察到,比特币矿工成功地对具有低采矿能力的竞争货币进行了深度分叉攻击。如果一个成熟的期货市场出现,则矿工可以在比特币汇率上做空(空头),那么金手指攻击将直接有利可图。
贬低分叉(Feather-forking)。 Miller[82]提出了该策略,其中一个矿工企图制定一个(被贬低的)交易黑名单。该矿工公开承诺,如果在黑名单上的交易被包含在区块链中,则将进行报复,方法是忽略包含目标交易的区块并建立分叉。最终攻击者或者超过主分支并获胜,或者落后主分支k个区块,这时攻击者会让步。一个具有低于一半矿力的攻击者从期望上来说会损失金钱,但同时也会有一定概率阻止一个上了黑名单的交易。
然而,如果一个攻击者令人信服地严肃表明了报复性攻击决心,那么其他矿工将会避开目标交易,因为如果攻击者进行报复,那么它们预期也将遭受损失。因此攻击者可能会在不花费实际成本的情况下强制执行其黑名单,只要所有其它矿工相信,一旦敢试,则攻击者会进行代价巨大的贬低分叉报复。
[P9]
矿池依靠参与者发现并提交有效区块,但易于受到参与者的影响。参与者可能提交部分份额以换取津贴,却隐瞒有效区块来降低矿池的收益。这种攻击方式早已为人知,而且似乎该方式是自我毁灭的,因为除了其他矿池成员,隐瞒区块的参与者也在降低自己的收益。然而,一个大型矿工或矿池可以通过使用其部分算力渗透进其它矿池中,但保留有效区块,来获取实际收益。这么做的好处是用于渗透的算力不会导致挖矿难度增加(由于区块没有被发布),却会获取额外收益。对于在很大范围内的攻击者和被渗透矿池所具有采矿能力,该策略对大型矿工或矿池来说是有利的。
Eyal [44]对该攻击进行了扩展并指出,在任何两个矿池之间博弈是一个重复囚徒困境,在两个矿池都攻击时为纳什均衡,但在有一者不攻击时为帕累托均衡。这种攻击如果大范围实施会被统计检测发现,在现实环境中已经至少发现一次在2014年6月针对Eliguis矿池的攻击。然而,聪明的攻击者会通过使用多个参与者地址来轻易地混淆攻击。虽然相继提出了多种对策,但都没有被认真研究或部署。由于重复囚徒困境,矿池之间有可能通过带外通信和报复威胁来避免相互之间进行攻击。
几乎所有对比特币的分析都假设对等层功能如下,大多数参与者会在合理的时间范围内知道几乎所有的可用协议状态信息。然而,Babaioff等[8]证明在对等层中信息传播并不永远都是激励兼容的。目前还不清楚参与者是否将对等网络的充分价值内化成一种公共利益,以证明传播信息的机会成本是合理的,或者在实际环境中观察到的信息传播均衡(人们愿意参与对等协议)是否不稳定,最终可能会崩溃。
Johnson等[59],[68]研究参与者是否或在什么时候被激励去向他人发动网络层拒绝服务攻击。他们得出的结论是,矿池有动机发动攻击,大矿池比小矿池更容易受到攻击,且大矿池比小矿池更有动机进行攻击。对矿池的DOS攻击在现实中经常被发现,因此这一理论分析具有实案支撑[20]。其它工作进行了测量和模拟研究来确定信息传播的动态性和时间尺度[38], [40]。
[P9]
由于比特币的普及,使得密钥的管理变得尤为重要,因为一旦密钥丢失或被妥协,用户可能会遭受货币损失。因此有必要对可用安全进行研究。
由于每个客户端都维持一个区块链的完整副本,这会导致移动设备上的负担加剧。通过一个简单的观测可以得到一个更加轻量级的替代办法:假设多数节点都只在合法的链上挖矿(正确性),则客户端只需要验证工作量,并且相信最长的链只包含合法的交易。SPV证明[90]使得不可信的节点能够有效地向轻量级客户端证明一个交易已经被包含在商定的历史中。
SPV已经在BitcoinJ库中实现,并使用在移动的比特币客户端。SPV确认需要处理日益增长的POW解决方案链,但可以对其进行优化,比如只从检查点开始。SPV还带有隐私方面的考虑,因为它需要揭露客户端感兴趣的一系列地址(见第7节和[49])。
比特币依赖于公钥加密体系,开发者们尝试了多种解决方案去解决密钥的存储和管理问题。Eskandari等[43]提出了一套比特币密钥管理接口的评估准则,并总结出当前的工具使用了复杂的隐喻,这些隐喻不能充分显示密钥管理行为的含义。
将密钥存储在设备上。 这是一种最简单的方法,但是密钥可能被恶意软件窃取 [75]。一些客户端将改变发送给新创建的比特币地址,这在当前密钥池每次用尽时(通常没有任何用户接口表示其发生)需要一个新的备份,而其它客户端将变化发送给起源地址或者从一个随机种子中获得派生密钥。
[P10]
分离控制。 为了避免单点失效并加强安全性,比特币可以使用k-out-of-n多重签名。另一种解决办法是,资金可以存在一个单一的密钥下,但是这个密钥的分片可以使用门限加密在n个参与方之间分配[50]。
有密码保护的钱包。 比特币客户端允许密钥池文件(钱包)使用用户密码进行加密。有密码保护的钱包可能会误导用户,让他们相信密码本身可以让它们在新设备上访问它们的资金。
口令派生的钱包。 密钥池能够通过用户指定的secret得到,如果secret被记住则跨设备使用变为可能。对常见/弱密码的彻底搜素是可能的——彩虹表已经发现了区块链上那些没有被恰当保护的比特币地址。此外,如果忘记密码会导致账户内资金无法回收。
离线存储。 钱包被存储在离线的被动便携设备中,例如一张纸或u盘。然而,在密钥池耗尽的时候它也必须更新,这个过程有可能被偷取。而且,当离线钱包将密钥装载到设备中时也易受到恶意软件的攻击。
气隙存储和硬件存储。 气隙存储是离线存储的一种特例,不同点在于持有密钥的设备能够执行计算,例如对交易进行签名。气隙设备能够保证不直接将密钥暴露出来。硬件安全模块对气隙进行仿真,通过隔离密钥与持有设备,只通过签名的方式暴露。
托管钱包。 第三方web服务通过标准web授权机制提供提供密钥存储,管理和交易函数。这与传统的网上银行类似,但是需要可信的主机。许多盗窃[41]和破产[86]事故已经被报道,包括40个事故涉及1000比特币的损失。
[P10]
我们现在将注意力转向已提出的对比特币的更改和扩展。在本文的其余部分中,我们将对已提出的更改进行评估和比较。在本节中,我们将讨论实施更改的可用机制。
我们可以将改变分以下级别:
•硬分叉。 如果协议改变使得在以前规则下被认为无效的交易或区块变为有效的,则这种改变需要一个硬分叉,例如增加区块奖励,更改固定区块大小限制,或添加新的操作码。如果矿工更新到新协议,他们可能会产生被其它节点拒绝的区块,从而导致永久性(因此是“硬”)分叉。涉及硬分叉的变化因此需要几乎一致同意才能在实践中进行尝试。
•软分叉。 与硬分叉相比,软分叉改变与现有客户向后兼容;通常这涉及区块或交易被认为是有效的条件限制。这种变化只需要大多数矿工的支持来升级,因为老客户端会继续认为它们的区块是有效的。没有升级的矿工可能会生成被网络中其它矿工认为无效而忽略的区块,这样浪费了计算工作,但它们始终会重新加入大多数矿工发现的最长链。这使得引入软分叉改变比硬分叉更安全。在某些情况下,可以使用软分叉将新操作码引入脚本语言。这是可能的,因为当前有几个未使用的操作码被解释为无操作;包含这些操作的交易输出可能会让其可被任何人花费,因此通常被避免。然而,如果在这个操作码所指示的条件下,矿工决定拒绝不满足条件的交易,那么这些操作码中的任何一个都可以被赋予新的语义。这是对可接受交易集合的一个严格缩减,因此只需要一个软分叉。回想起来,最初将所有未使用的操作码定义为空操作确实明智,这为通过软分叉引入新的改变提供了最大的灵活性。
中继策略更新。 回想第II-B3节,节点对会传递的交易比实际接受为有效的交易实施更严格的策略。改变这个策略或通信网络的其他方面需要最少的协调,因为它们通常可以通过通告协议版本号来以向后兼容的方式完成。默认中继策略已经多次更改,以添加新的标准交易类型,例如多重签名交易。
[P11]
由于在没有硬分叉的情况下改变比特币的限制,数百种被称为山寨币的衍生系统已经伴随替代设计方法而出现。许多这种系统都了继承了比特币的代码库并保留了大部分功能,尽管一些系统(如Ripple)是完全独立的设计。山寨币必须发起货币的初始分配以吸引用户参与,这可以通过几种方式实现:
· 新的创世块。 山寨币可以简单地从头开始一个新的区块链,与早期的比特币类似,为初始矿工分配资金。加密货币社区对这种方法有所警惕,因为有一波山寨币被启动,其创始人希望通过早期采矿来套现。
· 分叉比特币。 为了避免对其创始人给予特权,一个山寨币可能会故意选择在某个时间点分叉比特币,以接受之前的交易历史和资金所有权。比特币所有者将继续在原始系统中使用比特币,并在创建时加上相同数量的新货币。从技术上讲,这将像硬分叉一样运作,只是未声称该分叉是合法的比特币区块链。有趣的是,这种方法似乎没有被认真地尝试过。
· 焚烧证明。 比较流行的继承比特币分配的方法是焚烧证明[113],其中用户必须可证明地摧毁一定数量的比特币。通常将比特币中的资金转移到一个特殊地址,该地址的私钥不能被找到,比如哈希全为零的密钥。这种做法的缺点是永久性地降低了流通中比特币数量。
· 锚定侧链。 最近,一些有影响力的比特币开发者[9]提出了侧链,可以转移并最终兑换比特币。添加从侧链赎回货币的验证规则将需要至少一个比特币软分叉。
山寨币还必须与比特币竞争矿工(并避免比特币矿工进行金手指攻击),在货币达到非零汇率之前这可能很难。一种流行的方法是合并采矿,即如果根被包含在有效的比特币块中,则山寨币接受该区块,从而使比特币矿工能够在没有执行任何额外工作的情况下挖掘山寨币的区块。这可以为山寨币快速提供比特币的全部采矿能力,因为许多比特币矿工现在合并开采大量山寨币以获得额外奖励。 但是,它排除了山寨币采用不同于比特币计算难题的可能。
[P11]
比特币的共识协议一直是其争议最大的组件,由于关于稳定性的开放问题(见第III-B节),对协议的性能和可扩展性的担忧[112],以及关于计算难题浪费资源的担忧。本节评估替代共识方案。注意在每种情况下,所提出改变对稳定性的影响都是未知的,替代方案很少定义任何特定稳定性属性。
通常情况下,替代共识方案旨在解决比特币的一些具体问题,并希望比特币的稳定性论证能够保持。然而,比特币本身缺乏关于稳定性的稳固模型,这可能是一个不稳定的假设。
比特币的共识协议包含许多基于初始猜测而被硬编码的“魔术常量”。几乎所有山寨币都至少有一些参数不同,但这些修改往往是有争议的,我们对于如何选择这些参数以及它们如何影响稳定性只有几个明确的指导原则。
区块间隔时间和难度调整窗口。 比特币会自动调整其计算难题的难度,令解以10分钟间隔(平均而言)被找到。此设置主要受网络延迟限制;如果找到解的速度太高,那么矿工在传播区块之前经常会发现冗余区块。另一方面,较慢的区块速度会直接增加用户需要等待交易确认的时间。比特币的设置令所有帐户都保守;所有我们知道的山寨币具有相同或更快的速度(第二流行的系统Litecoin速度快四倍)。有许多建议修改通信网络的各个方面以减少延迟,从而可以安全地减小这个参数[38],[73],[112]。
[P12]
货币政策。 比特币共识协议通过新货币铸造速度以及预先安排的速度变化来有效地制定货币政策。通过强制限制货币数量,比特币实际上有一个通货紧缩的货币政策,导致多个经济学家预测系统最终会因为通货紧缩螺旋而不稳定。没有人愿意花比特币,因为囤积比特币被认为更有利可图[52],[65]。硬币发行是变化最广的参数之一:例如,在Dogecoin中,通胀率将无限期地持续调和下降,但在freicoin[116]中,通胀率永远保持不变。
Miller等[85]为比特币兼容的工作量证明方案提出了一种形式主义,称为“刮奖式”难题,其基本上必须能够分解为单独的尝试。该属性通常被称为“无进展”。这保证了每个区块的创建者都是根据计算能力的加权随机样本来选择的,即使是很小的参与者也能够获得与其贡献成比例的奖励,并且连续难题的解之间的时间足够大,使得解能够传播。无进展性是必要的,但不足以使共识协议达到公平。比特币的SHA-256难题是无进展的,但许多其它构造都也是可能的。
抗ASIC难题。 虽然比特币采矿最初使用通用处理器来执行,但采矿竞争导致了朝着更强大且节能的定制硬件的稳步发展。如今ASIC占据了绝大部分的比特币算力。Taylor就大规模高效计算SHA-256的技术挑战提供了一个很好综述,并估计当今的ASIC的效率已经处于理论限制的一个数量级之内[115]。
由于大多数系统参与者都不拥有ASIC,因而根本不会执行任何挖掘工作,这导致比特币挖掘偏离其核心的民主价值(即“一CPU一票”[90])。许多关于抗ASIC采矿难题的建议已经被提出。理想情况下,抗ASIC难题可以使用商用硬件有效解决,而定制硬件仅有微小的性能提升。到目前为止,所采用的主要方法是设计需要高效访问大容量内存的“内存困难”难题。目前,最流行的内存困难难题(用于Litecoin和Dogecoin等)是最初设计用于防破解口令哈希的scrypt哈希函数[96]。在2014年之前,还不知道是否有可能设计出计算上内存困难,但验证上内存容易的难题。Tromp的布谷鸟循环难题[117]似乎对这个问题给出了肯定回答。
如果ASIC抗性是可能的,那么它仍然是一个重要的公开问题。例如,挖掘scrypt的ASIC已经在市场上推出,并且性能提升可与SHA-256 ASIC相媲美。也不清楚ASIC抗性是否可取。ASIC意味着从商品设备窃取计算的僵尸网络不再能够与现代采矿设备竞争[57]。正如第III-B2部分所讨论的,大型矿工也可能具有更强的遏制攻击的能力[23],因为它们依赖未来比特币计价的采矿奖励来回收它们对用途特殊而无其它价值的ASIC的投资。
有用的难题。 通过计算难题达成共识似乎在计算能耗和用于制造采矿设备的能源和资源方面都是浪费的。如果在利用工作量达到某种额外目的时,还可以获得相同的安全级别,则可以避免一些浪费。Becker等[14]也认为,比特币最终可能会受控于支配了世界能源供应的现实世界实体。
一个常见的建议是将搜索功能用于科学研究应用程序,例如流行的Folding@ Home[67]项目。对于有用的难题来说,一个挑战是它们必须在没有可信方的条件下被自动生成并验证,否则这个可信方可能会选择他们已领先的难题。Kroll等[64]进一步认为,任何有用的谜题都必须产生纯粹的公共福利,否则它可能会将节省下来的工作量增加到挖掘的工作量上,从而抵消了任何节约效果。
Primecoin[62]引入了第一个在成功的山寨币中有用的难题。这种难题要求找到具有数学兴趣的大素数序列,这可用作密码协议的参数。Miller等[83]提出了一个整合可检索性证明的难题,因此挖掘需要存储大型公共数据集中的一部分。特别地,如果公共数据集对比特币网络本身有用(例如区块链历史),则该方法提供额外的激励来为网络贡献资源。
不可外包难题。 大型矿池的规模[78]及其勾结形成价格操纵团伙的潜力都在持续增长,这促使了不可外包难题的设计。池中成员本身并不相互信任;取而代之的是,联盟之所以能成功是因为成员很容易证明它们正在进行采矿工作,如若成功,则向池管理者支付报酬。Miller等[85]以及Sirer和Eyal [111]提出了“不可外包”难题,以确保任何从事采矿工作的节点在发现区块时都可以自己索取奖励,从而遏制矿池的强制机制并使得匿名参与者之间不太可能形成大型矿池。
[P13]
在较高的层面上,工作量证明难题的存在依赖于花费资源来进行采矿。与其让参与者用财富换取计算资源来采矿(以换取采矿奖励),如不简单地让他们直接用财富来换取选择区块的能力。推动全局历史的参与者不再是按照算力加权来随机选择的,而是按照当前的财富份额加权。这种方法可以称为虚拟采矿。有时也被称为“权益证明”[98]。
虚拟采矿提供的主要好处有两点:首先,攻击者获取足够数量的数字货币可能比获取足够强大的计算设备更困难。其次,通过避免消耗实际资源(即计算周期),现实世界资源不会被浪费。迄今为止提出的虚拟采矿有几种变体,变化主要在于根据拥有货币数量来确定选择下一区块的资格的标准:
币龄证明。 Peercoin[63]提出通过证明拥有一定数量的货币来采矿,而所有权通过发布交易(可能对自己交易,此时硬币不会丢失)来证明。每个货币的数量都通过其“币龄”,即自上次硬币转移以来的时间,来加权。
存款证明。 Tendermint [66]中采矿参与者需要将金币存入一个时间锁定的债券账户,在此期间不能转移。
焚烧证明。 Stewart[113]提出通过毁坏硬币(将它们发送到一个不可花费的地址)来采矿。
活跃证明。 Bentov等[20]提出,每个硬币所有者默认进入一个采矿抽奖;周期性地,来自信标(例如,产生自从网络上发生的交易)的随机量被用于从系统里所有硬币中随机选择一个;获胜硬币的当前所有者必须在一段时间内以签名消息作出回应。
尚未对模型假设进行任何形式化来允许虚拟采矿系统实现安全性,或在相同设置下将虚拟采矿系统与计算难题进行比较。Poelstra[97]对民间观点进行了综述,这些观点认为消耗外部资源(即燃烧能量)对于区块链安全是必要的,因此虚拟采矿方案本质上不可行。中心论点——被认为是“无权益”问题——是虚拟采矿容易受到无代价的模拟攻击;构造一个具有不同货币分配的历史视图并不需要花费任何代价。针对虚拟采矿的稳定性提出一个严格的论证或者反驳仍是一个开放问题。
虽然比特币的去中心性已被证明是一个有效的卖点,并且在社区的许多人中是一个被强烈捍卫的原则,但如果能够依靠(少量)指定权威来接收、排序并签名交易,那么共识就会极其简单。这将一次性地使得稳定性假设更容易被推断出来,并消除对浪费计算的担忧。Laurie[69]首次提出使用指定的权威列表和标准拜占庭共识协议。
类似于大型比特币矿工因其在未来汇率的权益而没有攻击动机的论点,如果权威通过诚实行事赚取小额收入,他们就不会有行为不端的动机。类似的观点也可用于分配新的资金用于权益证明的解(Laurie的最初提案[69]建议在权威中抽签)。对这些权威的信任可受到进一步限制,通过使用互不信任的权威[69],利用社交网络来选择可信权威[108],或者授权硬币所有者在每次花钱时选择其可信权威[24]。Ripple[108]是部署了该模型的少数几个山寨币之一;然而,其稳定性的论点本质上未被证明。
[15]
比特币只提供了有限的不可关联性:用户能够创建一个新的假名。由于区块链的公开特性,使得能够追溯货币的流向并知道货币属于某个账户。在这一节我们讨论比特币用户的隐私威胁并提出加强隐私保护的设计。
不可关联性的强弱很大程度上取决于实现细节,我们可以称之为使用习惯。比如商家可以为每笔交易生成一个新的支付账户地址,以至于无法在区块链上关联这些交易。相比之下,顾客可能需要从多个账户地址中取钱去完成支付,这样就可以将其关联。对手可以利用这些使用习惯去将多个账户关联到同一实体上。
[P14]
利用关联可以将账户地址进行聚类,这是交易图分析的一个实例。但一个严重的问题是,随着时间的推移,实现会发生变化,这会导致假阳性率的提高进而降低准确度。新的关联方法会产生。例如,多重签名地址在隐私方面存在并非有意的负面效应,由于在一个变化地址中多重签名结构可以匹配到发送地址,即使密钥也变化。
为了去匿名化,对手必须将地址簇与现实中的实体关联,Meiklejohn等人成功将地址簇与在线钱包、商人和其他服务提供者关联起来,因为很容易通过与他们产生互动来获取与他们相关联的至少一个地址。对于识别普通用户,作者认为对于具有传唤权的当局来说,这可能很容易,因为大多数流量都通过这些集中的服务提供商。否则,对手会由于那些中心化的流(在线钱包和其他将用户的货币混合在一起的服务)而降低去匿名化的精度。
网络去匿名化。 其他去匿名化努力的主要目标是P2P网络。节点在广播交易时会泄露IP地址。因此使用匿名网络对隐私保护很重要。然而,Biryukov等人指出DoS攻击能够使Tor的出口节点与比特币网络断开连接。比特币的P2P层是否能够更好的利用Tor,或者是否能够开发一个专用的匿名网络,这还有待研究。最后,当前的SPV实现提供了有限的匿名性,这是由于难以私下检索客户端感兴趣的交易列表。
建议主要分为三类。下表从5个安全和部署的性质对多个方案进行对比。
P2P。 在P2P混合协议中,许多比特币持有者共同创建一系列交易,在这些交易中对比特币的所有权进行秘密排序,使得参与者在集合中保持匿名。这一过程可能在不同用户之间重复,进而增强匿名性。CoinJoin实现了该方案,多个用户共同创建一个标准比特币交易,每个用户都有一个输入,输出被每个用户所控制,以至于外部无法将输入与输出关联起来。如果输出中没有包含某个用户的输出地址,则任何用户都有权拒绝对交易签名,这么做能防止小偷但会使得易受到DoS攻击的影响。该方案没有提供内部的不可关联性,但可以通过变换Tor虚电路或其他方法解决。CoinShuffle解决了内部的不可关联性,它通过mix协议去创建CoinJoin交易,同时也通过识别中断的用户来部分防止DoS攻击。
两个更早期的协议实现了与CoinJoin相同的性质,其中一个基于shuffling network,另一个基于fair exchange,但是这两者都仅限于双方的混合。为了解决寻找混合同伴的困难,Xim提出了一个寻找mix同伴的去中心化协议,使用三阶段向矿工提供费用来防止DoS攻击
分布式mix网。 在Mixcoin中,存在一个第三方mix,通过该第三方进行等量的货币交换进而得到其他用户提交的货币。这提供了外部匿名和部分内部匿名,因为只有第三方能够知道输入和输出的关联,而用户不知道。由于第三方可能进行比特币的偷取,因此需要第三方签署担保。虽然该协议的担保和其他特点没有被部署,但是它是实践中最常用的第三方mix协议
Blindcoin扩展了Mixcoin,使用blinded tokens,类似与Chaum原本提出的e-cash,这阻止了一个诚实但好奇的mix知道输入和输出的映射关系,并且具备了完整的内部不可关联性,代价是需要两个额外的交易去发布并赎回blind tokens。
[P15]
有完整的不可关联性的其他加密货币。 Zerocoin通过使用类似比特币的基础货币和零币来进行交易。用户只使用基本货币进行交易,但是可以将基础货币与零币进行互换。这提供了强不可关联性,且解决了小偷和DoS攻击的问题,不依赖于除了矿工之外的其他实体。然而,它与比特币不相互兼容,只能作为其他货币进行实现。PinnochioCoin是另一种类似的方式,使用的是不同 加密构建方式。
Zerocash是一个更强的匿名方案,Zerocash是一种特殊的零知识证明方式,叫做SNARKs,这种方式不会泄漏任何关于数量和接收者的信息。SNARKs是一种新的加密原语,但目前为止没有在现实中部署,且初始时需要一个可信方生成密钥参数;然而最近的研究工作显示可以部署在多个互不信任方之间。
CryptoNote是一个加密的mix协议,使用环签名,环签名已经成为一些注重隐私的加密数字货币的基础。用户们可以通过提供一个由其选择的k个硬币(可能尚未花费)的集合上的一次环签名来发送一个硬币,这个硬币集合的功能是作为一个匿名集。一次性确保了在发生双重支付时能够关联到个人上。交易的大小与k呈线性关系,k是单个交易的匿名集的大小。这种方式与Zerocoin和Zerocash相比性能更强但匿名性较弱。
[P15]
尽管比特币可以简单地描述为一种数字货币,但矿工强制执行脚本语言的力量使得两个或更多互不信任的各方之间进行许多其他类型的交换成为可能,否则将需要一个可信中介。用术语“去中介”来指代一种交易设计的通用过程,这类交易消除了对可信中介的需求。
比特币是一个可扩展平台的程度往往被夸大了。脚本语言仍然受到高度限制。但是,许多协议都是针对去中介化而设计的,这可以通过比特币当前的交易语义来实现。我们确定了三种通用的去中介化策略:
原子性。 在许多情况下,通过直接使用区块链提供的功能,以及交易是原子的,即在多方签名之前无效,一个所需的安全属性可以被强制实现。CoinJoin[79]就是一个简单的例子,直到参与各方签字后,硬币才能交换。另一个例子是Hearn的“连续微支付”协议[55],该协议有效利用了带外信道,允许一方授权对资金的几乎连续的缓慢释放(例如,每秒一分钱的几分之一)以换取一些计费服务,如互联网接入。付款人可以通过停止签署更多交易随时终止协议,此时只有一笔交易需要发布到区块链。另一个巧妙的协议是Nolan的原子交叉链交换协议,它允许用户通过两个相连交易和原子安全性在两个山寨币之间交换货币[91]。
抵押物。 在其他情况下,如果所需的安全属性不能直接强制,比特币可以通过发布只有在正确行为的情况下才退还的存款或债券来提供可接受的补救。Andrychowicz等的多玩家抽奖协议是这种方法的例子[5]。N方的每一方都会下注k枚比特币,并且一方(随机选择)赢取kN枚币。为了保证作弊的玩家不会通过先获悉结果并有选择地放弃协议来破坏游戏,每个玩家都必须存放kN^2枚币。如果任何参与者中止协议,将放弃其存款,以此来补偿其他人可能赢得的最高金额。这种方法不限于抽奖,事实上可以为任意多方计算提供一个公平的概念[19]。
可审计性。 即使比特币不用于对抗不诚实方的即时补救措施,它仍然可以在提供不诚实方的有罪证据方面发挥关键作用。一个例子是绿色地址[58],其中拥有众所周知的公钥的支付处理器承诺永远不会签署无效或冲突的交易。从绿色地址接收交易的用户可能会在等待其被包含在区块之前,接受该交易(即做出不可撤销的决定)。 如果在某个时候交易被在区块链中发布的冲突交易所抢占,用户就获得很容易被检查的服务器作弊证据。Mixcoin使用了类似技术[26],其中半可信任方提供签名保证书,这些保证书与区块链一起将提供无可辩驳的不当行为证据。
扩展比特币的另一种方法是将其仅用作任何人都可写入的全局只追加日志。
[P16]
安全时间戳。 因为区块链是(除去分叉)只追加的,它可以立即用作安全时间戳服务[31],这在各种安全协议中很有用。任意数据可以通过多种机制写入区块链——社区更喜欢使用一个小的可证明不可支付的脚本,其中数据被含有在一个不使用的变量中。多种服务从用户收集数据并将Merkle根发布到区块链,允许任何人对任意数据赋予时间戳。
数字令牌:彩色币。 由于数据可以写入单独的交易中,因此可以用“颜色”标记某些交易。这可以实现一种称为彩色币的协议[103],该协议定义了一组规则(不由矿工强制执行)将颜色从输入交易中转移到输出交易。硬币最初可以通过包括一个特殊签名来着色,该签名可以来自任何为某些应用发布颜色的可信权威。这允许创建任意的令牌,可以在令牌之间或者与普通无色比特币进行交易。彩色币已被提出用于许多应用,例如交易股票或产权。由于比特币矿工不强制执行彩色币协议规则,因此验证交易的颜色需要从区块链中扫描所有祖先交易(排除SPV(简单支付验证)证明)。
彩色币利用区块链的历史追踪功能作为其特性。一般而言,据观察,每笔交易输出都有独特的祖先历史,这对不同的用户可能有意义。这意味着从长远来看,比特币不能保证是可替代的[89]。
覆盖协议:Mastercoin。 一个更加灵活的方法是使用比特币的共识机制,但是定义完全不同的交易语法(使用任意有效性规则)在区块链上写成任意数据。请注意,由于比特币矿工不知道新的交易类型,此设计失去了由比特币的共识机制所通常提供的正确性属性。因此,无效的覆盖交易可能会发布,并且需要被覆盖系统中的参与者所忽略。SPV证明也是不可能的,因为用户必须验证整个覆盖交易历史。两个著名的系统是Counterparty [39]和Mastercoin [123],它们定义了大量用于交易数字资产和合同的额外交易类型。
比特币脚本语言是有意地限制的;实际上,原源代码包含构造更通用的语言的能力,但大多数操作码被标记为不可用。在我们论文的完整在线版本中[25],我们解释和评估了诸如Namecoin [76]或Ethereum [125]等多种提案,以扩展比特币的功能,为去中介化提供更通用的平台。
[P16]
我们基于学术和(大量碎片式的)在线文献对比特币的全面分析显示了在实用加密货币设计上的一次新思想的复兴。该领域是计算机安全社区面临的长期挑战。创新不仅限于新的加密货币协议设计,还涉及计算机安全、分布式系统、硬件设计和经济学等诸多领域。这是一个丰富而深刻的领域,并且不应该因为许多想法不是来自传统的计算机科学研究机构而被简单忽视。
然而,尽管我们的知识有了长足发展,但我们的理解仍然不足。一个简单的事实证明了这一点:鉴于有机会从头开始设计一种货币,但不清楚与比特币的重大差异应该是什么,或者它们在实践中会产生什么影响。这并不是说比特币是完美的,因为它的许多设计毛病已经表明了这一点。还有几个领域,例如匿名,明显优越的设计已经被提出。然而,对于基本的稳定性和效率而言,目前还不清楚是否有可能设计一种对比特币有所改进的、替代的、去中心化式共识系统。相关文献甚至没有提供足够的工具来评估比特币本身在哪些经济和社会假设下会保持稳定。同样,为设计具有新功能的去中介协议,目前尚不清楚如何扩展比特币的功能而不会破坏其观察到的稳定性。
总体而言,我们根本没有一个具有足够预测能力的科学模型来回答有关比特币或相关系统如何在不同参数或不同环境的工作的问题。尽管比特币社区偶尔有人对的计算机科学学术研究存在疑虑,但我们主张研究应该扮演一个重要角色,而不是简单地“让市场决定”。今天对于为何比特币比山寨币更成功,很难评估其在于具体的设计选择,还是在于先发优势。
比特币是一种罕见的实践似乎走在了理论前面的案例。我们认为,研究社区有巨大的机会来解决我们已经给出的关于比特币的许多开放性问题。