原标题:SoK: Research Perspectives and Challenges for Bitcoin and Cryptocurrencies
翻译:Johnny
来源:https://ieeexplore.ieee.org/document/7163021
译者按:原文为在2015年5月的IEEE安全与隐私研讨会上提交的一片比特币与加密货币的研究综述。以工程技术的角度深入探讨了加密货币的特性,是对2015年前的技术研究的系统总结。文章篇幅比较大,部分翻译采用了谷歌翻译,可能有不准确的地方。但是作为对加密货币研究入门,这篇很有价值。
比特币和加密货币的研究前景和挑战
作者:Joseph Bonneau,Andrew Miller,Jeremy Clark,Arvind Narayanan,Joshua A. Kroll,Edward W. Felten
摘要:
比特币已成为历史上最成功的加密货币。在2009年悄然推出的两年内,尽管仅对系统设计进行了粗略的分析,但比特币的经济价值却增长了数十亿美元。从那时起,越来越多的文献确定了系统的隐藏但重要的特性,发现了攻击,提出了有希望的替代方案,并指出了未来的挑战。同时,一个庞大而充满活力的开源社区已经提出并部署了许多修改和扩展。我们提供了第一个系统的博览会比特币和许多相关的加密货币或“ altcoins”(山寨币)。利用分散的知识体系,我们确定可分离的Bit coin设计的三个关键组成部分。这样可以对比特币进行更深入的分析” 的特性和未来的稳定性。我们绘制了许多建议的修改的设计空间,为替代共识机制,货币分配机制,计算难题和关键管理工具提供了比较分析。我们调查比特币中的匿名性问题,并提供一个评估框架来分析各种增强隐私的提案。最后,我们对术语“去中心化”协议提供了新的见解,从而消除了在一组有趣的应用程序中对可信中介的需求。我们确定了三种通用的Disinter调解策略,并提供了详细的比较。和密钥管理工具。我们调查比特币中的匿名性问题,并提供一个评估框架来分析各种增强隐私的提案。最后,我们对术语“去中心化”协议提供了新的见解,从而消除了在一组有趣的应用程序中对可信中介的需求。我们确定了三种通用的Disinter调解策略,并提供了详细的比较。和密钥管理工具。我们调查比特币中的匿名性问题,并提供一个评估框架来分析各种增强隐私的提案。最后,我们对术语“去中心化”协议提供了新的见解,从而消除了在一组有趣的应用程序中对可信中介的需求。我们确定了三种通用的Disinter调解策略,并提供了详细的比较。
第一节
为什么比特币值得研究
考虑稻草人形式的关于比特币的两种相反观点。首先是“比特币在实践中起作用,但在理论上却没有。” 有时,比特币社区的忠实拥护者拥护这一理念,并批评安全研究社区未能发现比特币,没有立即意识到它的新颖性,由于缺乏严格的理论基础,今天仍将其驳回。
第二种观点是,比特币的稳定性依赖于社会经济因素的未知组合,而这种组合很难以足够的精确度进行建模,无法为系统的健全性提供令人信服的论据。鉴于这些困难,经验丰富的安全研究人员可能会避免将比特币作为研究主题,因为它是审慎的安全工程,只设计带有准许正式安全证明的精确威胁模型的系统。
我们打算显示这些简单的观点在哪里失败。
首先,我们认为,尽管到目前为止,比特币在实践中的表现出乎意料地出色,但在准确地确定为什么这已经成为可能,超越了盲目接受系统最初提案中提出的非正式论点的可能性。此外,至关重要的是要了解随着实践的改变,比特币是否仍将“在实践中起作用”。我们预计外部政治和经济因素会演变,如果交易量扩大以及何时交易规模扩大,系统必须改变,并且作为系统设计的一部分,比特币矿工的货币奖励的性质将随着时间而改变。仅仅说比特币从2009年到2014年就已经起作用并因此将继续下去是不够的。我们尚未有足够的理解来自信地得出结论,比特币将在实践中继续发挥良好的作用,这是一项至关重要的研究挑战,需要计算机科学理论的洞察力。
从第二种观点来看,我们认为比特币通过提供一种虚拟货币系统来填补一个重要的利基市场,该虚拟货币系统没有任何受信方,并且参与者之间没有预先设定的身份。在这些约束下,不可能实现分布式系统中共识的一般问题[7],[93]无需像比特币这样的前提就可以建模理性(贪婪)行为,并且可以调整激励措施以确保共识算法的安全运行,因此无需进一步的假设。然而,这些限制实际上在哲学和技术上都非常重要,并且比特币在该模型内达成共识的方法令人深感惊讶,并且是一项根本性的贡献。比特币的核心共识协议对货币1以外的其他许多计算机安全问题也具有深远的影响例如分布式命名,安全时间戳和承诺,公共随机性的产生,以及许多财务问题,例如自我执行(“智能”)合同,分散市场和订单簿以及分布式自治代理。简而言之,即使比特币不容易建模,它也值得相当多的研究关注,因为它可能构成解决极其困难和重要问题的实际解决方案的基础。
考虑到这种二分法,我们着手从比特币运营和发展的前六年以及其许多派生的加密货币中总结出集体知识。我们的目标不仅是突出显示已经发生重大创新的许多领域,从新颖的支付协议到用户友好的密钥管理,还要凸显比特币和未来加密货币面临的最重要的开放研究挑战。
第二节
比特币概述
A.情境化的历史
我们将感兴趣的读者介绍给有关加密货币研究“第一波”的现有调查[15],[95]。简而言之,加密货币的历史可以追溯到1983年Chaum提出的“不可追溯的付款” [28],该系统涉及以盲目签名的硬币形式由银行发行的现金。未盲目代币在用户和商人之间转移,并且在银行确认之前未兑现后可赎回。盲签名防止银行将用户链接到硬币,从而提供类似于现金的不可链接性。
在整个1990年代,提出了该方案的许多变型和扩展。重要的贡献包括消除银行在购买时在线的需求[29],允许将硬币分为较小的单位[92]和提高效率[27]。包括DigiCash [107]和Peppercoin [99]在内的数家新兴公司试图将电子现金协议付诸实践,但最终在市场上失败了。这个“第一波”加密货币研究的任何方案都没有实现重大部署。
1990年代初期,人们提出了一个比特币的关键构建块,即中等难度的“工作量证明”难题,以对抗电子邮件垃圾邮件[42],尽管它从未广泛用于此目的[71]。随后出现了许多其他应用程序,包括关于公平彩票的提案[51],为小额支付铸造硬币[100]以及防止匿名网络中各种形式的拒绝服务和滥用[10]。后者Hashcash是使用数字小额支付的一种替代方法(例如NetBill [110]和Karma [121])。工作量证明还用于检测分布式对等共识协议中的sybil节点[7],类似于当前在比特币共识中的用法。
比特币的另一个基本要素是公共账本,使得双重支出可被检测到。在1990年代后期提出的可审计电子现金[105],[106]中,银行维护了一个公共数据库以检测双重支出并确保硬币的有效性,但是,发布了整套有效硬币的想法被驳回了不切实际(仅发布Merkle根)。1998年提出的B-money [36]似乎是所有交易都是公开(尽管匿名)广播的系统。在Cypherpunks邮件列表中提出的b-money受到学术研究界的关注很少。
1990年代初提出的智能合约[114]使各方能够正式指定可加密执行的协议,预示着比特币的脚本功能。
2008年,比特币被宣布,以中本聪(Satoshi Nakamoto)笔名撰写的白皮书被发布到Cypherpunks邮件列表[90]中,随后迅速出现原始参考客户的源代码。比特币的创世区块是在2009年1月3日左右开采的。2比特币作为一种货币的首次使用被认为是2010年5月的交易,其中一位用户订购了另一批比萨饼以换取10,000枚比特币。此后,越来越多的商家和服务采用了比特币,价格普遍上涨,在2013年底达到约1200美元/比特币的峰值。
比特币的历史也因其与犯罪的关联而变得色彩斑colored。颇受欢迎的黑市网站Silk Road [30]于2011年2月至2013年10月运营,当时被联邦调查局(FBI)查封并关闭。僵尸网络发现比特币采矿是一种补充性收入来源[57]。当前美国联邦法院案件涉及一个基于比特币的庞氏骗局[109]。2014年,一种名为CryptoLocker的计算机病毒通过加密受害者的文件并要求比特币赎金来释放解密密钥,从而从受害者那里勒索了数百万美元[47]。由于盗窃[41]和交易所崩溃[86],许多用户的比特币已经丢失。
B.技术概述
我们介绍了比特币的三个主要技术组成部分:交易(包括脚本),共识协议和通信网络。比特币极其复杂,我们的目标是向系统提供足够的技术深度,以使有关比特币的文献能够在本文的后续部分中进行审查和评估。特别地,我们的三部分分解的一个主要好处是,它通过“脱钩”的概念(可以独立更改)来评估和系统化建议的变更(第六和第八节)。
比特币的信息来源。比特币可能很难定义,因为没有权威的正式规范。原始的比特币白皮书[90]很好地概述了比特币的设计理念,但是许多重要的技术细节被忽略或过时。参考实现比特币被认为是事实上的规范,其进一步的知识分散在一系列“比特币改进提案”(BIP),论坛帖子,在线Wiki文章,开发人员邮件列表和已记录的IRC讨论中。3我们将这些资源系统化为精确的技术介绍,并提出了我们认为是独立设计决策的系统组件。
1)事务和脚本
比特币的世界状态由一系列称为交易的消息表示。在其他可能性中,最重要的是发布交易以将货币从一个用户转移到另一个用户。重要的是要注意,大量(且不断增长)的交易清单是比特币中的唯一状态。没有内置概念,例如用户,帐户余额或身份等高级概念,它们仅在可以从已发布交易列表中推算的范围内存在。
交易格式。事务包含输入数组和输出数组。整个事务使用SHA-256 4进行哈希处理,并且此哈希最终5用作其全局唯一的事务ID。事务使用临时二进制格式表示;这是比特币是事实上的规范的重要细节的早期示例。
每个输出都包含一个整数值,该整数值表示比特币的数量。该值的精度限制了可以细分货币单位的程度;最小的单元称为聪。按照惯例,10 8 satoshis被认为是货币的主要单位,称为一个“比特币” 6,并表示为B,BTC或XBT。
每个输出还具有称为scriptPubKey的简短代码段(采用特殊的脚本语言),该脚本段表示可以兑换交易输出的条件,即作为输入包含在以后的交易中。
交易脚本。通常,scriptPubKey指定ECDSA公钥的哈希值和签名验证例程。这被称为“支付到发布密钥哈希”交易,整个赎回交易必须使用具有指定哈希的密钥进行签名。绝大多数的比特币交易都是通过支付到酒吧的钥匙哈希来支付的,并且通常以唯一的可能性来描述系统,尽管其他交易类型也是可能的。脚本语言是一种特殊的非图灵完整堆栈语言,具有少于200个称为操作码的命令。它们包括对加密操作的支持,例如,哈希数据和验证签名。与事务格式一样,脚本语言仅由其在bitcoind中的实现指定。
事务输入通过其事务哈希和该事务的输出数组中的输出索引来引用先前的事务。它们还必须包含一个代码段,该代码段“赎回”该事务输出,称为scriptSig。为了成功兑换之前的事务,scriptSig和scriptPubKey必须都使用同一堆栈一个接一个地成功执行。对于付款到发布密钥哈希交易,scriptSig只是一个完整的公共密钥(具有正确的哈希)和签名。
价值守恒。除了要求每个事务输入与先前的事务输出匹配以及两个脚本成功执行的要求外,仅当事务满足以下基本约束时才有效:事务必须满足所有事务输出的值之和小于或等于该总和所有输入的值。我们讨论了一个例外,第II-B2:coinbase用于创建货币的新的单位交易。
从交易到所有权。就其本身而言,这种交易格式意味着几个有趣的属性。没有“拥有”比特币的身份或个人账户的固有概念。所有权只是意味着知道一个私钥,该私钥能够做出可以赎回某些输出的签名-个人拥有尽可能多的比特币可以赎回。如在pay-to-pub-key-hash交易中指定的,公钥散列有效地充当系统内的假名,并称为address。不需要真实世界的名称或标识信息。
可以说,关于比特币交易格式的创新很少。但是,使用脚本语言指定兑换标准以及实现事务可以指定系统的整个状态的认识是给定先前加密货币系统的非显而易见的设计选择,而这两种选择在实质上所有后续设计中都是标准的。一些提议扩展了比特币交易的语义(通常通过增强脚本语言),而无需更改任何其他组件。
2)共识与采矿
如果直接在用户之间发送交易以转移资金,则基于交易的货币系统将是不安全的。尽管签名将仅限制前一个交易的有效接收者在有效的后续交易中引用该交易,但交易本身并没有限制Alice在发送给Bob和Carol的单独交易中两次赎回某些交易输入的功能,孤立地显示为有效。比特币采用一种简单的方法来解决这笔双重支出攻击:所有交易必须在全局的永久交易日志中发布,并且任何单独的交易输出只能在随后的一项交易中兑现。现在,验证事务需要验证事务的脚本,并确保将其成功发布到日志中。在比特币中,日志被实现为一系列交易区块,每个交易区块都包含前一个区块的哈希,并将该区块作为其唯一的前身。它被称为区块链。
请注意,这种设计仍然需要就区块链的内容达成全球共识。如果鲍勃和卡罗尔看到两个不同的区块链,它们将很容易受到双重支出攻击。一种解决方案是使用受信任的中央机构来收集交易并将其发布在已签名的块中。但是,这是不可取的,因为该机构可能拒绝发布某些交易(有效冻结用户的资产),可能会完全脱机,或者可能会故意分叉区块链以双重花费硬币。
中本聪共识。比特币通过称为Nakamoto共识的去中心化匿名协议在区块链上建立共识。这可以被视为比特币的核心创新,也许是其成功的最关键因素。任何一方都可以通过收集一组有效的未决交易并将它们形成一个块来尝试添加到链中。核心要素是使用具有挑战性的计算难题(通常会给出轻微的误称工作证明 7)来确定哪一方的区块将被视为链中的下一个区块。
选择一个新块的过程很简单:第一个已公布的包含对计算难题的解决方案的有效块被认为是正确的。听到此消息后,其他参与者将准备开始寻找后续行动。如果宣布的区块包含无效交易或格式错误,则所有其他参与者都将拒绝该交易并继续工作,直到找到有效区块的解决方案为止。在任何给定时间,共识区块链都是“最长”版本。通常,这只是具有最多块的分支,但是由于长叉之间的挖掘难度可能会有所不同,因此必须将最长的链定义为预期生产难度最大的分支。8
也有可能在大约同一时间找到两个有效的解决方案(取决于网络延迟),这将导致出现一个临时分支,在此期间有两个等长链。在这种情况下,矿工可以选择其中一个叉子。由于计算难题的随机性,一个区块链最终将比另一个区块链进一步扩展,届时所有矿工都应采用它。
虽然比特币的原始规范仅提供了一个非正式的论点,即最终的共识将出现[90],但后续工作证明,假设有效且及时的广播频道,并且控制大多数计算能力的矿工忠实地遵循该协议,该协议既健壮又网络逐渐达成共识[46],[84]。我们将在第三节中进一步讨论。
阻止确认。这种共识机制的渐进性质意味着,用户必须等待找到区块才能对交易永久包含在区块链中获得高度信心。在分叉期间,矿工在另一个分支上汇合后,其中一个分支最终将被丢弃。尽管两个分支通常都包含大多数相同的事务,但是如果冲突的事务包含在竞争分支中,则一个显然可以包含在最长的链中,但是如果另一个分支超过了该分支,则该链将被撤销。在最坏的情况下,这可以有效地引发双重消费攻击[12],[60]。
从理论上讲,用户永远无法完全确定事务最终不会被非常深的分支[13],[70]删除。但是,如果大多数矿工都遵循默认协议,则用户可以推断出,随着发现更多的确认区块,交易最终可能会以最长的链条成倍增长(请参阅第III-A节)。实际上,大多数比特币客户在接受发布交易之前需要6个“确认”块。6个块的选择是任意的,它来自参考客户端,而不基于对深叉概率的任何分析。
还可以通过在默认的比特币客户端中包含硬编码的区块链前缀(检查点)来临时阻止深叉,客户端需要在任何有效的区块链中使用该默认比特币客户端。Laurie [70]认为,这些检查点表明,比特币不是真正的去中心化共识协议,因为它们是以集中方式选择的。
激励正确的行为。该协议的一个关键组成部分是,找到区块的参与者可以插入一个硬币库交易,铸造指定数量的货币并将其转移到他们选择的地址。因为参与者正在努力(实际上是在竞赛)来解决这个计算难题,以换取金钱上的回报,所以他们被称为矿工。这种新的货币,称为块奖励,激励矿工只在有效区块上工作,因为无效区块将被网络拒绝,并且最终最长的区块链中将不存在他们的挖矿奖励。请注意,从矿工的角度来看,“有效”区块只是他们认为大多数其他矿工将接受并建立的区块,胜过任何其他有效性规范(比特币实现之外没有其他规范)。
由于此共识算法依赖于矿工的金钱报酬,因此无法轻松地在没有可转让价值概念的系统中使用。在比特币中,矿工最初会获得所有新货币,并且没有其他允许的货币创造机制。这不是严格必要的,但是共识协议确实要求向矿工颁发一定的奖励,否则他们就没有动力寻找有效的区块并解决困难的计算难题。
挖掘细节。计算难题本身需要找到SHA-256(加密哈希函数)的部分原像。具体来说,难题是找到一个SHA-256哈希小于目标值的块(由事务列表,前一个块的哈希,时间戳和版本号以及任意随机数组成)。这个难题通常被描述为找到一个以d连续的零位。9标准策略只是尝试随机随机数10,直到找到解决方案为止(尽管这可能不是唯一的策略[34])。
这个难题的随机性很重要。使用非随机谜题(真实的工作量证明),可以预期最有能力的个体矿工首先找到每个区块。使用随机拼图,每个矿工将有可能找到与其竞争计算能力的份额成比例的下一个区块。
拼图的难度经过校准,因此平均每10分钟发现一次新方块。为了维持这一点,难度通过确定性的前2016个区块中的时间戳函数,每隔2016个区块或大约每两周调整一次难度。11
采矿奖励和费用。块奖励的大小由固定的时间表确定。最初,每个块创建B50。此后已减半至B25,并计划大约每四年减半,直到大约2140,此时将不再创建新的比特币。
为了减少这种货币创造的负担,矿工不仅可以从大宗交易中获利:还可以要求矿工索要该大宗交易中所有输入交易和所有输出交易之间的净差额。对于用户而言,输入值大于输出值的区块因此包括支付给矿工的交易费。
迄今为止,交易费主要用于阻止许多小额交易对网络的过度使用(称为“ 便士泛滥”),从来没有提供超过采矿收入的1-2%[87]。费用值主要是由参考客户端[87]中配置的默认值确定的,少数用户选择支付更高的费用以更快地发布其交易。
矿池。在实践中,矿工经常在矿池中 合作[102],以通过与一组其他矿工共享奖励来降低其收入差异。矿池通常由经理管理,经理需要支付少量费用,即可从所有参与成员发现的有效区块中收集采矿奖励,并根据成员代表矿池完成的工作量将资金分配给成员。参与的矿工通过发送散列以大量零开头的“近区块” 份额来证明(概率地)他们完成的工作量(例如d′=40),但不是有效的比特币区块。池成员由于风险共担而获得的报酬差异较小,以换取预期收益的小幅下降以支付经理的费用。
尽管原始协议中未描述池,并且可能未曾预料到,但自2013年以来,大多数采矿权已组织到池中。为了鼓励忠诚度并最小化“跳槽”,同时仍对新成员友好[102],已经使用了许多公式来划分池成员之间的收入。从池操作员到成员[94]以及不同池的操作员之间的低延迟通信也有几种标准协议[32],[74]。虽然最流行的池是集中管理的,但也有使用p2pool协议的临时池[122]。
3)点对点通讯网络
比特币的最终核心组件是其通信网络。从本质上讲,它是一个分散的,临时的对等广播网络,用于宣布新交易和提议的区块。通常,这是这三个组件中创新性最低的,很少有山寨币进行了实质性的更改。
对共识的影响。网络的性能和稳定性对共识协议有重要影响,原因有两个。首先,在发现一个块与所有其他节点接收到该块之间的任何等待时间都会增加临时分叉的可能性。对分叉的恐惧促使人们选择10分钟作为原始设计中的块创建时间。其次,能够控制网络大部分内容的恶意矿工可能会尝试偏爱自己块的广播,从而增加其块“赢得”分叉的可能性,从而增加了预期的挖矿奖励。同样,能够审查网络的任何一方都可以有选择地阻止传输并冻结资产。因此,对于比特币而言,拥有分散的广播网络(适合其总体设计),低延迟,
网络拓扑和发现。任何节点都可以通过连接到其他节点的随机样本来加入网络。默认情况下,每个节点尝试建立8个传出连接,并准备接收最多125个传入连接。NAT后的节点(例如移动客户端)无法接收传入连接。最初加入网络的对等方需要一种方法来了解其他对等方。像许多其他对等网络一样,比特币通过使用专用目录服务器或“种子节点”来实现此目的,其身份被硬编码到参考客户端中。此后,每个节点维护一个其知道的对等地址列表。
对等方还通过其他两种机制传播彼此的信息:首先,当节点建立新的传出连接时,它会触发一连串的中继消息,其中包含其连接信息。其次,在收到传入连接后,节点会从其已知地址列表中向对等节点请求样本。这种机制建立了一个连接良好的随机网络,其程度低而直径小,适合通过扩散快速传播信息[38],[61]。
通信协议。通过泛洪将新的块和未决的事务广播到整个网络。节点在第一次听到它们时,便向所有对等节点发送INV消息,其中包含新块或未决事务的哈希值。对等方可以通过请求这些块或事务的全部内容来响应(如果尚未看到它们的话)(通过GETDATA消息)。默认情况下,节点仅转发一次新数据,以防止无限传播。仅中继有效的交易和区块;仅在临时分叉中找到两个块时才中继他们听到的第一个块;并且不会广播与已发送的待处理交易发生冲突(双花)的待处理交易。这些限制是性能优化,旨在限制网络上的数据-不兼容的节点可能会中继无效或冲突的数据,要求所有节点独立地验证接收到的所有数据。
接力政策。默认情况下,比特币节点仅中继满足比常规交易有效性规则所允许的更严格的验证规则的交易和块。目的是防止各种拒绝服务攻击-经典鲁棒性原则的应用“对发送的内容保持保守,对接收的内容保持自由”。例如,默认节点仅中继包含非常狭窄的标准事务类型白名单中包含脚本的事务。该政策的含义是,希望在区块链中包含非标准交易的系统用户无法使用正常的比特币网络,而需要直接联系一个可采的矿工。12 另一个例子是,默认节点拒绝转发每分钟低于B0.001的几千笔交易,作为一分钱的防御措施。
<未完>