LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 深度 | 一文详解比特币的学术谱系

深度 | 一文详解比特币的学术谱系

2020-04-14 以太坊爱好者 来源:链闻

如果你读过比特币新闻报道,并且熟悉密码学领域的学术研究的话,你应当会留下这样的印象:自 David Chaum 起,学术界对数字货币展开了长达数十年的研究,却未能取得商业上的成功,因为整个数字货币系统需要一个类似银行的中心化服务机构加以控制,事实上没有一家银行对此感兴趣。比特币则另辟蹊径,提出了创建无需银行的去中心化加密货币的想法,数字货币终于迎来了成功。人们普遍认为,神秘的比特币之父中本聪并非学术界人士,比特币与之前的学术设想毫无相似之处。

为反对上述观点,本文特别列出了图 1,显示比特币用到的所有技术几乎都源自 20 世纪 80 和 90 年代。笔者并非有意贬低中本聪的贡献,而是要指出他也是站在巨人的肩膀上。通过对比特币概念的溯源,我们可以专注于中本聪在洞察力上的真正飞跃——他是如何通过某种准确且复杂的方式将这些技术结合起来的。这有助于解释为什么比特币这么晚才诞生。已经熟悉了比特币运作原理的读者或许能从这些历史回顾中获得更深刻的理解。(请参见 Arvind Narayanan 等人所著的《比特币和加密货币技术》作为入门读物 36。)比特币的学术史也作为一项案例研究,展示了学术界人士、外部研究人员和相关从业人士之间的关系,并分享了三方如何互相受益的经验之谈。

账本

如果你有一个安全的账本,将它应用于数字支付系统的过程很简单。举例来说,如果 Alice 通过 PayPal 发送 100 美元给 Bob ,PayPal 会从 Alice 的账户取出 100 美元,并记入 Bob 的账户。传统的银行业大致上也是这么操作的,只不过因为银行之间的没有一个统一的账本而变得复杂了。

账本的概念是理解比特币的基础。账本可以记录系统中发生的所有交易,向系统中所有参与者公开,并且受到他们的信任。比特币将这种记录支付情况的系统转化成了一种货币。然而在银行业中,账户结余代表户主可以从银行取出的现金,那么一单位的比特币代表什么?暂且将它理解为具有内在价值的交易物。

如何在一个类似于参与者不信任彼此的互联网环境中构建一个账本?让我们先从简单的部分开始:如何选择数据结构。我们期望这个账本能满足几个属性。这个账本应该是不可更改的,或者更确切来说,是只能_添加_ :只能添加新的交易,不能删除、修改或重新排序已有的交易。此外,还应该有方法随时获取账本状态的简洁化 加密摘要。摘要是避免存储整个账本的短字符串,如果账本遭到任何篡改,摘要也会随之改变,因此篡改会被发觉。之所以要满足上述属性,是因为这个账本不同于存储在单一机器上的普通数据结构,而是由一组互不信任的参与者共同维护的_全球_ 数据结构。另一种实现去中心化数字账本的方法 7,13,21 是由多位参与者维护本地账本,并由查询这组账本的用户解决账本间的冲突。

链接型时间戳

比特币的账本数据结构借鉴自 Stuart Haber 和 Scott Stornetta 于 1990 年至 1997 年间撰写的一系列论文(其中 1991 年的论文是与 Dave Bayer 合著的),只做了少数改动。这是中本聪在比特币的白皮书中亲口所述。 Haber 和 Stornetta 解决了文件时间戳的问题——他们旨在创建一个“数字公证”服务。对于专利、商务合同等文件来说,所有者想要确保文件创建于特定时间点,而不是后来才创建的。他们定义的文件概念很广,而且可以是任何类型的数据。顺带一提,他们在论文中确实提及金融交易是一种潜在应用,不过并未当作重点。

概述一下 Haber 和 Stornetta 的论文可得,文件是处于不断创建并广播中的。每份文件的创建者确认创建时间并签署文件、文件的时间戳以及上一个被广播的文件。上一个文件已经由之前的创建者签署了,因此这些文件形成了一条带有时间指针的长链。外部用户无法改变带有时间戳的消息,因为该消息是由创建者签署过的,就算创建者想要改动它,必须连同后面链接的消息一起改动。因此,如果一个可信的来源(例如,另一个用户或某个专门的时间戳服务)将某个东西添加到了链上,到这个东西为止的整条链会被锁住,无法进行更改,并且暂时定下顺序。此外,假设这个系统会拒绝带有不正确的创建时间的文件,按理可知这些文件的创建时间至少不会晚于其时间戳所示的时间。无论如何,比特币只是借鉴了 Haber 和 Stornetta 的研究成果中的数据结构部分,在此基础上新增了工作量证明机制,重新设计了数据结构的安全属性。关于工作量证明机制,我们会在后文中讲解。

在后续论文中,Haber 和 Stornetta 引入了能提高数据结构的效率的想法(其中一些想法在第一篇论文中已有提及)。第一,文件之间的链接可以通过哈希值而非签名创建;哈希值计算起来更加简单迅速。这类链接称为哈希指针。第二,不同于将文件一个个连接起来——如果同一时间创建出了很多文件,这种方式会变得很低效——可以将这些文件打包进不同的批量或数据块,每个数据块里的文件都共享同一个时间戳。第三,每个数据块中的文件可以由哈希指针创建的二叉树(即默克尔树),而非一条线性链相连接。顺带提一下,在 Haber 和 Stornetta 的第一篇论文发表之后不久, Josh Benaloh 和 Michael de Mare 分别于 1991 年引入了上述 3 个想法。

默克尔树

比特币本质上使用的是 Haber 和 Stornetta 于 1991 和 1997 的论文中撰写的数据结构,如简化版的图 2 所示 (中本聪当时可能不知道 Benaloh 和 de Mare 的研究成果)。当然,比特币用交易代替了文件。在每个区块(实质即上文所说的数据块)的默克尔树中,叶节点都是交易,且每个内部节点都包含两个指针。这种数据结构有两大重要属性。第一,最新区块的哈希值充当摘要。对任意交易(叶节点)的改变都必然将变化传导至交易所在区块的根节点,以及后续区块的根节点。因此,如果你知道了最新区块的哈希值,就可以从你并不信任的数据源下载剩余账本,并验证它是否有过变化。一个类似的观点确立了数据结构的另一大重要属性——任何人都可以高效地向你证明某个交易是否包含在账本中。这个用户只需向你发送这个交易所在区块中的少量节点(这就是默克尔树的意义),以及后续每个区块所需的少量信息。性能和可扩展性的提高非常需要高效证明交易是否包含在区块内的能力。

顺便一提,默克尔树是以非对称密码学先锋 Ralph Merkle 命名的,他在 1980 年的论文中提出了这一想法 33。他当初预期的应用是为公共的数字证书目录生成一个摘要。例如,如果一个网站向你出示证书,它还会出示一个简短的证明,证明这个证书确实存在于全球目录。只要你知道目录中证书的默克尔树的根哈希值,你就可以高效地验证这个证明。按照密码学领域的标准来看,这个想法已经算不上新颖了,不过它的力量直至最近才得到重视。它处于近期实现的证书透明化系统的核心 30。 一篇 2015 年的论文提出了 CONIKS ,将公钥目录的想法应用于端到端的加密邮件 32。新型加密货币以太坊提供的主要账本功能之一就是高效地验证部分全球状态。

比特币可能是 Haber 和 Stornetta 提出的数据结构在现实世界中最著名的实例,不过不是第一例。至少有两家公司提供文件时间戳服务 ——Surety 始于 20 世纪 90 年代中期,而 Guardtime 始于 2007 年。这两种服务发生了有趣的转变,因为 Bayer、Haber 和
Stornetta 5 提出了一个想法,即腾出报纸上的一个广告位定期发布默克尔根。图 3 显示了 Guardtime 在报纸上发布的默克尔根。

拜占庭容错

当然,不受中心权威实体控制的互联网货币需要满足更严格的要求。分布式账本不可避免会出现分叉,这意味着一些节点会认为区块 A 是最新的,另一些节点会认为区块 B 是最新的。一个原因可能是有作恶者试图扰乱账本的运作,另一个原因可能仅仅是网络延迟,导致不同的节点在无意识的情况下近乎同时生成区块。正如 Mike Just 在 1998 年的论文中所述,仅仅依靠链接型时间戳不足以解决分叉问题。

另一个研究领域容错型分布式计算已经研究过这一问题,不过用的名称不同,其中包括 状态复制。一种解决方案是允许一组节点按照相同的顺序应用相同的状态转换——通常来说,确切的顺序并不重要,只要所有节点保持一致就好。对于数字货币来说,要复制的状态是一组余额表,交易代表的是状态转移。图灵奖得主 Leslie Lamport 在 1989 年发表的论文中提出了包括 Paxos 在内的早期解决方案。他提出使用状态复制的方法避免通信信道不可靠或是少数节点可能出现某些“现实”故障——如永久离线或是首次离线后重启并发送过时消息——的问题。后续的文献讨论了更加不利的环境和效率权衡关系。

一项相关工作研究了网络可靠性高的情况(消息发送延时不超过一定范围),然而其对“错误”的定义扩大成了 _任何_背离协议的情况。这类拜占庭错误包括自然发生的错误和恶意设计的行为。早在 1982 年,Lamport 与 Robert Shostak 和 Marshall Pease 就在其合著的论文中首次研究了这类错误。 之后直到 1999 年,Miguel Castro 和 Barbara Liskov 发表了一篇具有里程碑意义的论文,介绍了 PBFT (实用拜占庭容错算法)的概念,同时解决了拜占庭错误和不可靠网络的问题。与链接型时间戳相比,关于容错的学术文献数量庞大,而且囊括了数以百计的 Paxos 和 PBFT 等开创性协议的变体和优化版本。

在最初的白皮书中,中本聪并没有引用这类文献或是使用相关术语。他使用了一些概念,作为他的协议中共识机制的参考,并考虑了攻击者以及加入和离开网络的节点的故障问题。相比之下,他明显依赖于链接型时间戳(以及下文将要论述的工作量证明)的文献。在邮件列表讨论中被问及比特币与拜占庭将军问题的关系(需要拜占庭容错来解决的思维实验)之时,中本聪坚称采用工作量证明模式的区块链可以解决这一问题。

在接下来的几年,其他学者已经从分布式系统的角度研究了中本聪的共识机制。这些研究仍在推进中。一些学者表示比特币的属性非常脆弱,而另一些学者认为拜占庭容错视角无法公正评价比特币的一致性 40。另一种方法是定义已经过充分研究的属性的变型,并证明比特币满足这些变型。这些定义最近经过了大幅改进,在更为现实的消息传递假设下,变成了一种更为标准的一致性定义。然而,所有这些研究成果都建立在参与者行为“诚实”(即符合协议)的前提之下,然而中本聪建议诚实的行为是通过经济激励来实现的,无需对此进行盲目假设。关于中本聪的共识算法可以起到激励作用的分析不适用于过去的容错系统模型。

工作量证明

实际上,所有容错系统都假设系统中绝大多数(例如,超过 2/3
的)节点都是诚实且可靠的。在一个开放式的点对点网络中,节点无需注册,而且可以自由加入退出。因此,作恶者可以发起 女巫攻击
,创建多个马甲节点,破坏整个系统的共识保障。 John Douceur 14 于 2002 年正式提出了女巫攻击,并指出利用 工作量证明
的密码学模型来缓解这一问题。

起源

要了解工作量证明,先得从源头讲起。Cynthia Dwork 和 Moni Naor 15 在 1992 年最先提出了工作量证明的雏形。其目的是阻止垃圾邮件。要注意的是,垃圾邮件、女巫攻击和拒绝服务这些问题都是大同小异的,作恶者会将普通用户所造成的影响在网络中放大数倍。工作量证明能够同时抵御这三种攻击。根据 Dwork 和 Naor 的工作量证明设计,发件人在发送邮件的同时只有附上已完成适量计算的证明(即,工作量证明),收件人才会处理这封邮件。一台普通的计算机大概需要几秒钟的时间来完成工作量证明。因此,这不会给普通用户造成困难,然而想要发送 100 万封垃圾邮件的人如果使用的是相同的硬件设备,则需要几周时间。

要注意的是,工作量证明_实例_(也称作 难题)应该针对不同的邮件和收件人有所区别。否则,垃圾邮件发送者会向同一个收件人发送不同的邮件(或者向不同的收件人发送同一封邮件),其成本等同于向一个收件人发送一封邮件。第二个重要的属性是,收件人只需承担极少的计算量,即,无论这些难题计算起来有多难,验证计算结果正确与否应该很容易。此外,Dwork 和 Naor
提出了带有陷门(trapdoor)的函数,陷门由中心实体掌握,可以免去解决难题所需的工作量。一种可行的陷门应用是让中心实体无需成本就可以批准邮件的发送。 Dwork 和 Naor 提出了三种满足上述属性的候选难题,它引入了一个全新的领域,我们之后会提到。

Hashcash

还有一种非常类似的想法叫作 hashcash,是由博士后研究员 Adam Back 于 1997 年提出的,那时他是密码朋克社区的一员。密码朋克聚集了一群激进分子,他们反对政府和中心化机构集权,力图通过密码学进行社会和政治改革。回顾过去,他首先发布了
hashcash 软件,在 5 年之后的 2002 年又发布了互联网草案(标准化文档)和一篇论文。

Hashcash 比 Dwork 和 Naor 的想法要简单得多:它没有陷门和中心机构,而且仅使用哈希函数而非数字签名。它基于一则简单的原理:

哈希函数是一种为了达成某些实用目的的随机函数,这意味着如果要找到一个能让哈希函数得出特定输出值的输入值,唯一的方法是尝试多个输入值,直到得出期望的输出值为止。进一步来说,要找到对应任意一组输出值的输入值,唯一的方法是将不同的输入值依次代入哈希函数进行运算。因此,如果我让你找到一个输入值,它对应的(二进制)哈希值是 10 个零开头的,你必须尝试很多输入值,然后发现每个输入值满足条件的概率是 1/210 ,这意味着你必须依次尝试 210 个输入值,约等于 1000 则哈希计算。

从 hashcash 的字面意义可知,Back 将工作量证明视作一种货币形式。 他在个人主页上将其定位为 DigiCash 的替代方案。DigiCash 是 David Chaum 提出的一种银行向用户发行不可追踪的数字货币的系统 3 。为了更加突出数字货币的货币特征,Back 甚至在技术设计上做出了妥协。后来,他发表评论称比特币是由 hashcash 衍生而来。不过,Hashcash 根本算不上是货币,因为它无法抵御双花攻击。Hashcash 代币无法进行点对点交易。

于此同时,从学术角度来看,研究人员发现除了防止垃圾邮件之外,工作量证明还有很多应用场景,如抵御拒绝服务攻击 25、确保网站分析的完整性、及对口令猜测实行网络限速等。顺带一提,工作量证明 这一术语首次出现于 Markus Jakobsson 和 Ari Juels 在
1999 年撰写的一篇论文里,作者在撰文之前对工作量进行了详尽的调查。要注意的是这些研究人员似乎毫不关心 hashcash
,而是聚焦于基于哈希的工作量证明,这在 Eran Gabber 等人以及 Juels 和 Brainard 所著的论文中有所介绍。(直到这些论文发表很久之后,本段提到的许多名词才成为标准术语。)

工作量证明和数字货币:两难困境

你或许知道工作量证明最初作为抵御垃圾邮件的手段并不成功。一个可能的原因是不同设备的解题速度差异显著。这意味着垃圾邮件制造者只需小小地投资一把定制硬件,垃圾邮件的制造速度就能提升几个数量级。

从经济学角度来说,生产成本的不对称性会自然而言地带动交易的发展,即工作量证明解决方案的市场。然而,这是一种两难困境,因为需要一种有效的数字货币。缺乏这样一种货币确实是影响工作量证明激励的首要因素。一种原始的解决方案是将难题的解作为货币,正如 hashcash 所做的那样。

在比特币的白皮书发表之前,有两篇文章提出了更加符合上述思路的解决方案,分别是 b-money 和 bit gold 这两种概念。上述两种方案提供了时间戳服务(通过工作量证明)来创造货币,一旦货币被创造出来,就同意转账。如果各服务器或节点对账本存在分歧,没有明确的解决之法。这两篇文章似乎都暗示了采取多数决的机制,不过由于女巫攻击的存在,这些机制的安全性都不高,除非针对网络入口设置一个把关人(gatekeeper)或是通过工作量证明抵御女巫攻击。(见下方注解)

抗女巫攻击的网络

John Douceur 写过一篇关于女巫攻击的论文。他提出的解决方案是要求所有加入拜占庭容错协议的节点解决哈希难题。如果一个节点伪装成 N 个节点,是不可能及时解决 N 个难题的,假身份会被清除。不过,恶意节点依然比没有伪造身份的诚实节点有优势。John 后续在 2005 年又写了一篇论文,指出诚实节点可以模仿恶意节点的行为,根据自己的算力尽可能多地虚报身份。如果这些虚拟身份都实行拜占庭容错协议,“故障节点的占比不能超过 f %”的设想可以替换成“故障节点的算力占比不能超过总算力的 f %”的设想。因此,不再需要对身份进行验证,而且开放的点对点网络可以运行拜占庭容错协议。比特币采用的也是同样的想法。然而,中本聪提出了一个更深层次的问题:什么能够激励节点花费大量算力进行工作量证明?解决这一问题需要再一次的飞跃:数字货币。

集大成者

理解了这些包含比特币设计内容的项目,就能真正欣赏中本聪的天才之处。比特币出现之后,首次将难题的解与数字货币分离开来,仅仅将它们用来维护账本。解决工作量证明难题是由名为“矿工”的专门实体负责的(不过中本聪没有想到挖矿的专业化程度会变得这么高)。

矿工一直在竞争寻找下一个难题的解;每个矿工都要解决一个略有不同的难题,成功的概率与该矿工控制的那部分全球算力成正比。解出难题的矿工基于串联起来的时间戳向账本贡献下一组(区块)交易。作为提供账本维护服务的奖励,贡献区块的矿工会得到新铸造的货币。如果有矿工贡献的交易或区块是无效的,则会遭到贡献后续区块的多数矿工的抵制,导致不良块得不到有效的区块奖励。这样一来,在货币激励之下,矿工会确保彼此都遵守协议。

比特币巧妙地帮助了以工作量证明创造货币的机制免受双花问题的影响,因为它不为难题的解本身赋予价值。实际上,难题的解之所以不具有经济价值,是因为以下两个因素:出块所需的工作量是一个浮动的参数(与全球算力成正比),而且每个块发行的比特币数量也不是固定的。区块奖励(铸造新比特币的方式)被设置成每 4 年减半(2017 年,比特币的区块奖励从最开始的 50 个比特币降到了 12.5 个比特币)。比特币还纳入了另一个奖励机制——交易的发送者要支付矿工挖矿的服务费。交易费和矿工奖励预期将由市场决定。

中本聪的天才之处不在于比特币使用的任何一个组件,而是在于将这些组件巧妙地结合起来为整个系统注入活力。时间戳和拜占庭容错协议的研究者没有想出激励节点诚实的机制,直到 2005 年才想到使用工作量证明来代替身份。相反,提出 hashcash、b-money 和 bit gold 构想的研究人员没有融入共识算法来防止双花问题。在比特币系统中,安全的账本是防止双花问题并保障比特币的货币价值的必要条件。有价值的货币是奖励矿工的必要条件。反过来,强大的算力又是保障账本的安全性的必要条件。否则,作恶者可以聚集
50 % 以上的全球算力,使其生成区块的速度超过剩余网络,从而发动双花攻击,有效覆写历史,倾覆整个系统。因此,比特币是一个独立的系统,循环依靠上述三个组件。中本聪面对的挑战不仅在于设计,还在于说服最初的用户和矿工社区一起跨入未知领域——最初,一份披萨价值 1 万个比特币,全网的算力还不到如今的万亿分之一

作者:Arvind Narayanan & Jeremy Clark
翻译 & 校对:Elisa

来源链接:queue.acm.org

—-

编译者/作者:以太坊爱好者

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...