原版前言
通往比特币的漫长道路
杰里米·克拉克(Jeremy Clarek)
在通往比特币的道路上,布满了无数失败的尝试。我收集了一份由约100个加密支付系统组成的名单。它们的技术基于电子现金(e-cash)和信用卡,在某些方面获得显著成就,见表0.1。其中一些是被广泛引用的学术研究成果,还有一些是已开发和测试过的实实在在的系统。在这份名单上,被大家所知的大概只有一个——贝宝(PayPal)。而贝宝之所以幸存,得益于它及时纠正了最初想在移动设备上进行加密支付这一想法。
这段历史会让我们吸取很多教训。比特币的想法从何而来?为什么一些技术成功了而另一些则一败涂地?如何成功地商业化那些复杂的技术创新?即便不去思考这些,它至少让我们明白,一个真实可行的基于互联网的支付体系是多么来之不易。
传统金融体系
设想在政府和货币出现之前,人们以物物交换的方式进行着交易。比如,爱丽丝(Alice)需要工具,鲍勃(Bob)需要药品。如果他们正好都有对方所需物品,就可以进行交换,满足各自所需。
但是,如果爱丽丝有食物,愿意拿食物换工具,鲍勃有工具但不需要食物,他想要药品。在这种情况下,爱丽丝和鲍勃就没法直接与对方交易。但是,如果有另一个人卡罗尔(Carol),他有药品,而且愿意拿药品换取食物。那么,这三个人就可以进行交易,各自获得所需物品。
表0.1 一些优秀的电子支付系统和构想
当然,难点在于协调,即组织一群供需匹配的人在同一时间、同一地点进行交易。为解决这一难点,出现了两个体系:信用和现金。二者哪个更早出现,历史学家、人类学家和经济学家们就此争论不休,但这对本书的讨论无关紧要。
在上面的例子中,在信用体系里,爱丽丝和鲍勃可以与对方交易。鲍勃给爱丽丝她所需的工具,得到一个人情。换言之,爱丽丝欠下一笔债务,未来终将偿还给鲍勃。爱丽丝的物质需求即刻得到了满足,但她希望尽快还清债务,因此,她又有了新的需求。然后,爱丽丝又遇到了卡罗尔,她可以用自己的食物交换卡罗尔的药品,然后把药品给鲍勃。这样,她就偿还了债务。
对比而言,在现金体系里,爱丽丝可以购买鲍勃的工具,然后把食物卖给卡罗尔,卡罗尔再把药品卖给鲍勃,完成整个闭环交易。只要每场交易的买方有充足的现金,这些交易就可以按任意顺序发生。当然,最终的结果是,看上去现金似乎从未易过手。
很难说这两个体系哪个更优越。现金体系首先需要现金分配来触发,否则交易无法发生。信用体系不需要这样,但债权人需要承担债务人不偿还债务的风险。
现金还可以让我们知道物品的准确价值。物物交换时,我们很难说工具和药品到底哪个更值钱。现金交易把物品的价值标上数字,这就是为什么我们现在将这两种体系混合使用,即便使用信用,我们依然用现金来衡量所需偿还的债务金额。
这些观点被应用于许多场合,特别是用户在进行虚拟物品的线上交易时。例如,在进行点对点(peer-to-peer)的文件分享时,我们就可能遇到吃白食的人,他们只下载,不分享。进行文件交易可能是一个可行的解决方案,但是如何找到两个相互需要对方文件的人是个协调上的难题。在一些项目如莫佐(Mojo Nation)和学术构想如卡玛(Karma)中,用户自动获得一定数额的虚拟货币。接收文件时,用户可以用虚拟货币支付费用;向其他用户发送文件时,赚取虚拟货币。无论是接收还是发送文件,一个或者多个服务器跟踪记录用户的账户余额,而且可以把虚拟货币兑换成真实货币。虽然莫佐项目在推出货币兑换功能之前就消失了,但它算得上是我们现在使用的比特流(BitTorrent,一种内容分发协议)和塔荷(Tahoe-LAFS,一种分布式数据存储方式)的鼻祖。
网络信用卡的弊端
许多电子支付方式都可以根据信用和现金这两个基本概念进行分类。比特币显然属于现金类,但我们先来谈谈信用类。
信用卡交易是目前主要的线上支付方式。如果你在亚马逊这样的网站购过物,那么你应该很清楚流程。首先,输入你的信用卡信息,点击发送,亚马逊收到这些信息后反馈给“系统”,这一系统包括信息处理器、银行、信用卡公司及其他中介。
然而,如果使用贝宝交易,那么你体验的就是中介式结构风格。你和卖家之间存在一个中介公司,你把信用卡信息发送给中介公司,中介公司核准交易并通知卖家,并在每个交易日结束时与卖家统一结算。
这一结构的优势是,你不需要提供给卖家你的信用卡信息,规避了安全风险。你也无须向卖家提供个人信息,保护了个人隐私。劣势在于,它增加了复杂性,你和卖家无法进行直接交流,都得在中介公司开设账户。
如今,我们已经习惯在网络购物时提交个人信用卡信息,至少已经勉强地接受了这一点。我们也习惯了网络公司搜集我们的网络购物及浏览历史。但在20世纪90年代,网络尚是新兴事物,数据加密协议刚刚兴起,消费者对这些问题深感担忧,对网络购物的安全性并不信任。特别是,通过一个不可靠的渠道,把自己的信用卡信息提交给不知名的网络商家,这在当时看来,几乎难以置信。在这种背景下,中介式架构在当时引发了诸多兴趣。
1994年,第一虚拟公司(First Virtue)成立。它是一家较早成立的中介支付公司,也是最早设立完全虚拟化办公室的公司之一。顾名思义,它的员工遍布全国,通过互联网沟通。
第一虚拟公司的支付体系与贝宝现在的体系类似,只是早于后者很多年。用户注册,提交信用卡信息。当用户进行网络购物时,商家把详细的支付信息发送给第一虚拟公司,第一虚拟公司与用户确认支付信息,确认无误后批准支付。其中有两个细节值得注意:第一,所有沟通都通过电子邮件。那时网页浏览器刚刚开始全面支持HTTPS等加密协议,多方参与增加了加密该支付的复杂性(其他中介采用把信息嵌入URL链接或者在HTTP上定制加密协议的方式)。第二,用户有90天的拒付期,3个月之后卖家才能收到货款。现在,卖家可以立即收到货款,但是消费者依然可以索回货款或者对信用卡账单提出申诉。在这种情况下,商家必须把货款退还给信用卡公司。
20世纪90年代中期,出现了一个较有竞争力的中介体系,我们称之为安全电子交易协议(Secure Electronic Transaction,简称SET)。在SET体系中,用户无须把信用卡信息提供给商家,也无须在中介公司注册账户。进行网络购物时,用户的浏览器会将交易和信用卡信息加密存储在电脑上的应用程序里,只有中介能够解密这些信息,甚至连商家都不能。这样,消费者可以放心地把加密过的信息发给商家。商家再把这些加密信息和它们自己的交易信息一同转发给中介。中介解密你的信息,与商家的交易信息进行对比,只有在双方信息一致的情况下,中介才会批准支付。
SET由维萨(VISA)、万事达以及多家当时重量级的科技公司开发而成,包括网景(Netscape)、IBM、微软、威瑞信(Verisign)和RSA(美国知名信息安全、加密数据公司)。它融合了多个方案,成为一个标准性体系。
一家叫网络现金(CyberCash)的公司采用了SET体系。这家公司在很多方面都很有趣。它们的产品除了处理信用卡支付交易之外,还包括一种叫作网络币(CyberCoin)的数字货币。这是一种小额支付系统,用于支付小额消费行为,比如,用户可以用网络币支付几美分在线阅读报纸的费用。这也就意味着,用户账户里的网络币余额一般都在10美元以内。但是,有趣的是,它们却能得到美国政府联邦存款保险公司(FDIC)对每个账户高达10万美元的投保金额。
更有趣的是,网络现金公司运行时,美国政府限制加密技术的出口,因为当时加密技术被认为是一种武器。当然,现在这种限制已被废除。但在当时,这也就意味着国外用户无权下载包含加密技术的软件。但是,网络现金公司得到美国政府的特批,国外用户可以下载它的软件。政府给出的解释是,从网络现金公司的软件中提取加密技术远比从头开发一套全新加密技术要难得多。
最后,许多人怀疑网络现金公司与其他为数不多的几家公司一起受到千禧虫感染(Y2K bug),向部分客户重复收费。2001年,网络现金公司破产,其知识产权被威瑞信收购,接着转卖给贝宝,贝宝屹立至今。
为什么SET体系行之有效?根本原因在于它的认证机制。认证就是把加密过的身份,即公钥(public key),与现实身份连接起来。网站要从像威瑞信这样的认证授权公司获得认证,用户的浏览器才会判定它是安全的(通常会显示一个锁形状的图标)。网络现金公司和SET体系认为,安全性比操作的便捷性更重要,因此,它们不仅要求服务商和商家,还要求客户也必须获得认证。获得认证的过程类似于报税一样烦琐,因此,这个系统简直是场灾难。几十年来,大多数用户都拒绝使用要求终端客户认证的系统,这种系统只会出现在学术论文里。比特币巧妙地避开了这一难题,而且无须用户的真实身份。比特币系统通过公钥本身来辨别用户身份。我们将在第1章探讨这个问题。
20世纪90年代中期,正当SET体系标准化时,万维网联盟(World Wide Web Consortium)也在探索如何将金融支付方式标准化。它们试图扩展HTTP协议,这样,用户不需要其他软件,通过浏览器就可以完成交易。事实上,它们对如何扩展HTTP协议提出了一个总体方案,也给出了一个用户支付案例。但这从未付诸实践,整个扩展框架并未应用于浏览器中。近20年后,2015年,联盟宣布重新考虑扩展计划,这次,比特币将成为该标准化进程的一部分。但是考虑到以往的失败教训,我对此并不乐观。
从信用到(加密)现金
现在该谈谈现金体系了。如前所述,将现金和信用进行比较,我们发现,现金体系需要启动自循环,但优势在于,它规避了买家拒不偿还债务的风险。此外,现金体系还有另外两个优势:第一,更好地确保了用户的匿名性。信用卡与个人信息绑定,因此,银行可以追查消费者的所有消费记录。但是,如果使用现金交易,就与银行无关,卖家也无须知道消费者的个人信息。第二,现金支持线下交易,无须致电第三方获得交易批准。也许交易完成后需要把钱存入银行,但这要容易得多。
比特币没有这两个特点,但具备两个类似的功能。它的匿名性比不上现金。用户在使用比特币支付时,无须使用自己的真实身份,但是,如果用户不够小心谨慎,可以借助公开的交易账目和聪明的算法查出用户的交易记录并最终查出用户身份。我们将在第6章展开这个复杂又有趣的比特币匿名性问题。
比特币并不完全支持线下交易。但优点是,它不需要中央处理器,而是依赖点对点网络,这种网络跟互联网一样具有很强的修复能力。我们将在第3章讨论“绿色地址”和小额支付工具,它们可以帮助我们在特定条件和特定情境下进行线下支付。
大卫·乔姆(David Chaum)在1983年最早提出把加密技术运用于现金上的想法。我们可以拿现实中的例子来帮助理解。比如,我向人们发放纸条,上面写着“拿到此条的人可以来我这里领取1美元”。假设人们信任我不会食言而且我的签名不可伪造,他们就可以像银行汇票一样流通纸条。事实上,银行汇票最初就是商业银行发放的支付承诺。只是到了近代,政府才开始介入,集中货币供给,用法律手段强制要求银行兑现票据。
我可以通过数字签名发放电子纸条,但那样的话,又会遇到一个“双重支付”(double spending)这一恼人的难题:收到表示一定金额的虚拟货币的数据时,人们可以复制该数据,然后传输给他人。假设人们的复制技术足够优秀,我们难以辨别哪些是初始数据,哪些是复制品,那么,我们能够解决“双重支付”的问题吗?
可能的解决方案是:我在发出的每份纸条上印上一串独特的序列号。当别人把纸条给你时,你检查一下我的签名,然后打电话给我,告诉我相应的序列号,询问印有这个序列号的纸条是否已被使用过。如果我告诉你没有,那你就可以放心地收下这个纸条。我会在账本上记录该纸条已被使用。你要做的是定期把收到的纸条交给我,我会再给你相同数量的印有新序列号的纸条。
这个方法是可行的。它在现实中施行起来颇为烦琐,但在网络上却比较简单明了,只要我设置一台服务器,用它来完成签名和序列号的记录工作。唯一的问题在于,因为难以匿名,它很难称得上是真正的现金。不管是发行还是兑现纸条,我都可以把序列号和个人信息一同记录在案。这也就意味着,我能够追踪你的所有消费行为。
乔姆提供了一个创造性解决方案。它不仅能够保护用户的匿名性,同时还杜绝了“双重支付”。它的方法是:我给你一张纸条,你把它的序列号记录下来,并且不要让我看见。然后我再签名,并不需要知道它的序列号。这在密码学里被称为“盲签”(blind signature)。选取一个较长、随机的序列号能够更好地保护你的利益,因为这样的序列号更有可能是独一无二的。我不必担心你选取一个使用过的序列号,因为这样你只会得到一个无效货币而遭受损失。
这是第一个真正意义上的电子货币方案。它虽然有效,但必须要有一个大家信任的中心机构管理运行的服务器。不仅如此,这个服务器还必须参与每笔交易。如果服务器停止工作,交易就不得不暂停。数年之后的1988年,乔姆与两位密码学专家阿莫斯·菲亚特(Amos Fiat)和摩尼·纳欧尔(Moni Naor)合作,提出线下电子货币的概念。乍看上去这似乎是不可行的:如果用户把同一个电子货币支付给两家没有连入同一个网络或与同一家中心机构合作的不同商家,它们怎么能够发现并阻止这种行为呢?
与其去预防双重支付,不如关注事后当商家重新连上银行服务器的时候如何察觉。这才是比较聪明的做法。乘坐没有网络连接的飞机时,如果你用信用卡消费,真正的转账是在航空公司重新连上网络之后才发生的。如果你的信用卡被拒付,你会欠航空公司(或你的银行)一笔钱。仔细想想,传统金融体系的很大一部分就建立在如何检测错误和损失这一基础之上,然后才是收回损失或惩罚失误方。如果你给某人开一张个人支票,他不会知道这笔钱是否真实存在于你的账户里,但当他去银行兑现时被银行拒绝,他会追究你的责任。类似地,如果线下电子货币系统被广泛应用,国家应该制定相关法律,规定双重支付属于犯罪行为。
为了检测出双重支付,乔姆、菲亚特和纳欧尔三人提出了一种复杂的加密机制。简而言之,这套机制可以达到以下目的:发行方在电子货币中以加密方式嵌入你的个人信息,除了你本人,包括银行在内的任何人都无法解密。你用电子货币消费时,接收方会随机挑选一部分密码要求你解密,并将之记录下来。这种解密的内容不足以暴露你的身份。如果你用同一份电子货币双重支付,当两个接收方都去银行兑现时,银行可以把两份解密的信息合在一起,最终几乎可以肯定知道你的身份。
你可能会担心,万一有人陷害我双重支付呢?比如,你支付给我一份电子货币,我不去银行兑现成有我身份加密的新数字货币,而是直接拿着你给的货币进行重复消费。不必担心,这是行不通的,因为我在用它支付时,接收方会要求我解密一段密码,这段密码与之前你解密的那段密码肯定是不一样的,因此,我无法完成这一解密任务。
多年以来,许多密码学家一直在研究并完善这一机制。在乔姆、菲亚特和纳欧尔提出的构想中,假设一枚电子货币价值100美元,如果你想买一个价格为75美元的物品,你没法把这枚货币分割成75美元和25美元。你只能去银行,把价值100美元的货币兑换成现金,再拿现金换取价值75美元和25美元的货币。但是,在一篇论文里,Tatsuaki Okamoto和KazuoOhta用梅克尔树(Merkle trees)建立了一个可以分割电子货币的系统。梅克尔树在比特币里还会出现,我们将在第1章遇到它。这个机制的效率还有很大的提高空间。特别是,这一机制采用了由史蒂芬·布兰德斯(Stefan Brands)在20世纪90年代,詹·卡姆实(Jan Camenisch)、苏珊·洪博格(Susan Hohenberger)、安娜·莉斯卡亚(Anna Lysyanskaya)在2005提出的“零知识验证”(zero-knowledge proofs),带来了很好的效果。在第6章,我们将看到,零知识验证也同样被运用于比特币体系中。
继续回到乔姆。为把自己的想法商业化,他于1989年创立数字现金公司(DigiCash),应该是第一家致力于解决线上支付问题的公司。数字现金公司比我们之前提过的第一虚拟公司和网络现金公司早了整整5年。数字现金系统使用的现金叫电子现金,另外,它们还有一个名为“网络资金”(cyberbucks)的系统。包括美国的几家银行和芬兰至少一家银行在内的数家银行,确实使用了这个系统。这可是远在比特币出现之前的20世纪90年代,可能会让一些比特币推崇者大吃一惊,因为他们认为银行是惧怕科技、抵制创新的庞然大物。
当你需要交易时,你点击一条由资金接收方发回的链接,跳转至数字现金网页,同时,会开通一条反向链接连回你的电脑。也就是说,你的电脑必须能够接收外部链接,就像一台服务器。你需要拥有自己的IP地址,你的网络服务提供商也必须允许外部连接。如果连接成功,电子现金软件会在你的电脑上运用,然后你再批准交易,进行付款。
乔姆的数字现金技术获得了几项专利,特别是它使用的盲签技术。外界对他的行为是有争议的,因为专利妨碍了其他人用该技术进一步开发电子现金系统。但是几位经常在一个叫“网络朋克”(cyberpunks)的邮件组里互动的密码学专家则另辟蹊径。著名的中本聪(Satoshi Nakamoto)第一次向全世界宣布比特币系统就是在一个邮件组里,它的前身就是网络朋克,这绝非巧合。我们将在第7章探讨网络朋克运动及比特币的起源。
网络朋克的几位密码学家开发出了一种名叫魔法货币(Magic Money)的类似于电子现金的产品。魔法货币虽然侵犯了电子现金的专利,但因为他们宣称它只用于实验目的,因此并未被禁止。魔法货币是一个很有趣的软件。它采用纯文本界面,你可以通过电子邮件发送交易信息,只需要把交易信息复制粘贴到电子邮件并发送给其他用户就可以了。当然,你需要使用PGP(Pretty Good Privacy,一种加密软件)等终端对终端的电子邮件加密软件,以确保信息在传输过程中的安全。
随后,本·劳里(Ben Laurie)在其他人的帮助下创立Lucre系统。该系统试图用一种非专利技术替代电子现金中的盲签,其他则与电子现金系统大致类似。
另外一个由伊恩·戈德堡(Ian Goldberg)提出的方案则试图解决无法分割电子货币换取零钱的问题。他的思路是:当你没有零钱而向商家支付了过多金额时,如果商家有货币,它会转回给你超额支付的部分。但是应该注意到,这一想法带来匿名性问题。如前所述,在电子现金系统里,付款人匿名而商家不匿名。但是当商家找零时,商家实际上成了付款人,因此他们是匿名的。从你收到商家的找零之后,你需要去银行兑现,这时,你又是不匿名的。这一系统无法确保用户的匿名性,因此,伊恩·戈德堡又重新设立了一个系统,在这个系统中有不同类型的货币,能够确保用户在匿名的情况下既能消费又能收到找零。
为什么数字现金最终失败了呢?主要原因在于它没能说服银行和商家使用它。因为使用这一系统的商家不多,用户也就不愿意用它。更糟的是,它并不或没有支持好用户和用户之间的交易,只侧重于用户和商家之间的交易。因此,商家不接受它,这个系统就很难激发其他人的兴趣。最终,数字现金败给了信用卡公司。
另外,比特币既支持用户和商家之间的交易,也支持用户和用户之间的交易。事实上,比特币体系并不把用户和商家区别开来。比特币的成功很大部分大概要归功于它对用户-用户间交易的支持。从一开始,每位比特币用户都可以发给其他用户,因而整个比特币社区都努力争取人们对比特币的支持,并促使商家也接受它。
数字现金公司的最后几年,它试图通过防侵入硬件来预防双重支付,不再把重心放在双重支付发生后的检测上。在这套系统里,有一种叫作钱包或者类似于卡片的设备。这个设备会记录你的账户余额。消费之后,余额减少;充值之后,余额增加。这个设备的用处是,没有人能够更改计数器数额,不管是通过物理手段还是电子技术。因此,当计数器归零时,倘若没有继续充值,用户都无法消费。
许多公司推出过带有防侵入硬件的电子现金系统。数字现金后来与一家叫CAFE的欧洲公司合作。另一家叫Mondex的电子钱包公司也是基于这个想法创立的,后来被万事达收购。维萨(Visa)也有类似的系统,名为维萨货币(VisaCash)。
在使用电子钱包时,使用者既持有一张智能卡片,又拥有一个“读卡器”(wallet unit),两者均可进行充值。使用者之间直接可以互相进行支付。支付方将智能卡插入读卡器中,钱即转入读卡器。接受方将卡插入读卡器,钱就转入第二次插入的卡里。这一过程交换的是数字货币,是匿名的交换流程。
Mondex公司在几个地方推广其技术,其中一个城市正好离我的家乡安大略省圭尔夫市不远。你大概已经猜到,这项技术并没有被广泛使用。主要原因是,电子Mondex卡片跟现金类似,一旦丢失或者被偷,钱也就丢了。更有甚者,如果卡片发生故障,或者读卡器无法读卡,就没法知道卡里余额是多少。这种事情真正发生时,Mondex公司一般会自担损失。它们会假定卡里有余额并赔偿用户损失,这自然是一笔不小的开支。
此外,这个系统里的钱包反应比较慢。用信用卡或现金支付要快得多。商家都不喜欢拥有太多支付终端,对它们来说,一个信用卡POS机就够了。多重原因加在一起导致了Mondex公司的失败。
尽管如此,Mondex公司的用户卡是有小芯片的智能卡片,这项技术事实证明是相当成功的。如今,在很多国家,包括我所在的加拿大,每张信用卡和借记卡都采用了智能卡片技术。它们的目的不是防止双重支付。非现金技术中不会存在双重支付的问题,因为银行而不是卡片记录你的账户余额和可用信用。智能卡片的目的是用于认证,也就是说,它为了证明你知道自己账户的PIN。虽然用途不同,早在银行广泛采用该技术之前,Mondex公司就已经开始运用这项技术。
凭空发行货币
如果你有一个价值100美元的电子现金,那怎么能够保证它的确价值100美元呢?数字现金给出的答案很简单:要想获得一个价值100美元的电子现金,你必须从你的银行账户取现100美元,交给发行电子现金的银行。但要实现这个目的可以通过不同的方式,不同的公司采取的方法也各不相同。设想一个小概率事件:如果一个政府授权某家银行发行电子货币,凭空创造新电子现金,会怎么样呢?网格现金(NetCash)就是基于这一假设创立的,但是它并未真正实施过。电子黄金(E-Gold)则采用一套完全不同的体系,它在保险库中存入一定量的黄金,根据黄金价格发行电子货币。一家名为数字黄金(Digigold)的公司并不完全依赖黄金,但也有部分黄金储备。
归根结底,这些方式都是使电子货币的价值随美元或某种特定商品的价值而浮动。如果美元价值上升或下降,你的电子货币价值就相应地上升或下降。另一种比较激进的方案,就是使电子货币自成体系,其他货币不会影响其发行和价值。
要想创造一种自由浮动并且具有真实价值的虚拟货币,必须要设计出某种具有稀缺性的东西。其实,正是因为黄金和钻石的稀缺性,它们才会成为货币的储备。在虚拟世界,你可以这样设计你的系统,即虚拟货币只有在需要花一段时间解决了一定的数学计算(或“谜题”)之后方可生成,这样就保证了稀缺性。比特币体系中的“挖矿”就是这样的,我们会在第5章详细探讨。
通过解决数学计算来赋予虚拟货币价值,这一想法并不新鲜。早在1992年,密码学家辛提亚·沃克(Cynthia Dwork)和摩尼·纳欧尔(Moni Naor)首次提出这种方案,用来降低垃圾邮件问题。设想你每次发送邮件时,计算机都不得不花几秒钟的时间解决一道数学计算题目。如果你没能附上题目的答案,收件人的邮箱会自动忽略你发来的邮件。对于普通用户,因为他们发送邮件的频率不高,不会带来太大麻烦。但对于想同时发送成千上万垃圾邮件的人来说,解决大量的数学计算几乎是不可能的。1997年,亚当·贝克(Adam Back)在一个名为哈希现金(Hashcash)的体系中采用过类似设计。
要想阻止垃圾邮件,这些数学计算必须具备一定的特性。第一,垃圾邮件发送者解出一道题目之后,不能把这个答案附在他发送的其他邮件上。为了做到这一点,每封邮件会对应一个数学计算题目,题目内容取决于发件人、收件人、邮件内容和发送时间。第二,收件人无须重复解题的烦琐过程,就可以轻松地检查发件人附上的答案。第三,题目之间应是相互独立的,也就是说,解决一道题目不会减少解决其他题目所需的时间。第四,随着硬件性能的提升,解决数学计算变得越来越快、越来越容易,收件人必须要调整他们收到的答案的难度。通过密码学中的哈希方程(hash functions)设计的题目可以满足以上要求,我们将在第1章学习它。
比特币使用的数学计算与哈希现金的基本类似,只是进行了微小的改进。比特币能做的比哈希现金多得多,毕竟,要解释比特币需要一整本书呢!我之所以提这些,是因为哈希现金的创始人亚当·贝克曾经说过:“比特币只是把哈希现金进行通货膨胀控制得到的延伸产品罢了。”我觉得这话有点过分了,就像说:“特斯拉只是在轮子上加上电池而已。”
正如密码学里任何一个优秀的想法一样,数学计算题目有许多变体,每个变体具有些微不同的特性。其中一个构想来自维莱特(Rivest)和夏马尔(Shamir),他们提出了RSA加密系统(RSA中的R和S分别为Rivest和Shamir的首字母)。研究哈希现金之后我们发现,解决一系列数学计算题目的成本就是解决单个题目的简单叠加。但政府发行货币时,成本可不是这么计算的。单是纸币上的防伪技术,政府就需要投入巨大的初始成本来购买设备,施加安全措施等。但是一旦研发出了防伪技术之后,成本就会降低,印一张货币和印一百张的成本差别并不大。换言之,发行纸币的固定成本很高,但浮动成本很低。维莱特和夏马尔想要设计的数学计算题目具有类似的成本结构,这样,发行第一个电子货币需要巨大的计算量,但接下来就会变得很简单。他们的设计也运用了哈希方程,但使用方式不同。我们不打算讨论他们的详细方案,但他们要解决的问题是非常有趣的。
人们为什么没有广泛使用哈希现金来阻止垃圾邮件呢?也许是因为垃圾邮件问题还没有足够严峻。对大多数人来说,垃圾邮件只是个恼人的小问题,并没有严重到他们愿意用计算机算力来解决它。现在,我们有了垃圾邮件过滤器,能够有效地阻挡垃圾邮件。另外一个可能的原因是,哈希现金无法真正阻止垃圾邮件。特别是,现在大多数垃圾邮件发送人通过僵尸网络,用病毒大量入侵他人电脑,批量发送垃圾邮件。他们也可以通过这些电脑来获取哈希现金。所以,通过数学计算进行限制的想法还在不断发展中。在一些替代网络协议的构想中,如小型LT协议(MinimalLT),我们还可以看到这一思路。
把一切信息都记录在数据库账本中
区块链是比特币的另一项关键技术,它像一个数据库账本,安全记录所有的比特币交易信息。区块链的理论基础由来已久,可以追溯到哈勃(Haber)和斯托尔内塔(Stornetta)在1991年开始发表的一系列论文。他们提出的不是虚拟货币体系,而是一种可以安全地对数字文件进行时间戳记录的方法。时间戳是为了记录文件创建的大概时间。更重要的是,时间戳可以准确反映文件创建的先后顺序:如果一份文件比另一份文件更早创建,可以从时间戳中看出来。时间戳的安全性体现在文件的时间戳一旦生成,无法更改。
用户发送文件时,哈勃和斯托尔内塔设计的体系能够向客户提供时间戳服务。服务器收到文件时,它会用当时时间和指向之前文章的链接或者指针作为签名,来签名该文件并产生包含签名信息的认证,见图0.1。这里所说的指针,指向的不是一个具体地址,而是一串数据。也就是说,如果该数据被更改了,那么这个指针也就自动失效。在第1章,我们将学习如何使用哈希方程来创建这种指针。
图0.1 链接的时间戳
注:要想对一份文件进行认证,时间戳服务器必须包括指向之前文件认证的哈希指针,当前时间和文件内容本身,并用这三条信息来对文件进行签名。
这种协议实现的效果是:每份文件的认证都确保了上一份文件内容的完整性。其实,反复运用这一理论:每次认证基本上都保障了这个认证点之前的所有文件和认证的完整性。假设这个系统中的每个用户都能记录包括自己的文件、之前和之后的文件的认证在内的几个认证信息,那么合起来,就可以确保整个文件系统不会被更改。特别是,文件的先后顺序被保存了下来。
随后的一篇论文提出了一个可以提升效率的方案:不必单独链接各个文件,而是把它们集合成块,然后在一条链中链接整个块。在每个块里,文件通过树状结构而非线性结构的方式相互链接。这一方法减少了在整个系统中查找特定文件所需的工作量。图0.2展示了这一混合而成的体系的工作方法。
图0.2 高效的链接时间戳
注:箭头表示哈希指针,点状垂直线表示时间间隔。
这一数据结构形成了比特币区块链的框架,我们在第3章可以看到这一点。比特币将它进行了微妙但至关重要的改进,它用一种类似于哈希现金的协议来降低在区块链里增添块的速度。这种改进对比特币的安全性带来了深远而有益的影响。比特币体系通过一群未被认证过的节点,即“矿工”,来记录事件,不再需要认证过的服务器。通过每个矿工而不是普通用户记录块的信息。任何人都可以通过解决数学计算,新建块,而成为一名矿工。比特币还舍弃了签名,只依靠哈希指针来确保数据结构的完整性。最后,真正的时间戳对比特币来说不是很重要,整个系统的意义在于根据先后顺序记录交易信息,并确保它不能被篡改。事实上,比特币块并不按固定时间表产生。在比特币系统里,平均每10分钟产生一个新的块,单相邻的两个块的时间间隔会有较大的差别。
比特币从根本上融合了用数学计算来控制新币的产生和用安全的时间戳来记录交易信息并防止双重支付这两种思路。在比特币之前,有人曾提出过,不这么成熟但也融合了这两种思路的方案。比如,戴伟(Wei Dai)在1998年提出的B币(b-money),任何人都可以通过一个类似于哈希现金的系统创造虚拟货币。它跟比特币类似,也有一个点对点网络。每个节点维护一个数据库账本,但它不同于比特币的区块链,并不记录全部交易信息。每一个节点都有它自认为是准确的记录每个人账户余额的账本。
尼克·萨博(Nick Szabo)还提出一个类似的方案,名为比特黄金(Bitgold)。萨博宣称他早在1998年就有了创建比特黄金的想法,但直到2005年才在博客上公开发布。我之所以提这件事,是因为《纽约时报》记者纳萨尼尔·波普(Nathaniel Popper)曾写过一本关于比特币历史的不错的书,他发现,公开发布比特黄金的那篇博文的发表时间被修改过,改成了中本聪正式发布比特币之后的两个月。他跟许多观察者一样,认为萨博就是中本聪,即使萨博否认。他认为,萨博修改博文发表时间就是证据,这样,后者就可以掩盖自己在比特币发布之前就已经发明了比特黄金这一事实。
但这一证据并不可信。仔细阅读博文,你就会发现,萨博明确表示自己在1998年就有了比特黄金的想法。他没有试图更改这些时间。更为合理的解释是,比特币开始流行后,他把那篇博文置顶,这样,人们就可以看到他在比特币之前就有了类似的构想。
比特币与B币和比特黄金有很多重要的不同之处。B币和比特黄金通过数学计算直接创造货币。任何人都可以解题,答案本身就是货币。但在比特币体系中,解决数学计算并不构成货币,只是确保区块链安全,间接地在有限时间里创造新货币。此外,B币和比特黄金靠时间戳给货币的创造和转账签名。但比特币不需要被认证过的时间戳,它只是用时间戳来保存区块和交易的先后顺序。
最后,如果服务器和节点对数据库账本的记录不符,B币和比特黄金并没有提供一个明确的解决方案。两位发明人所著文章暗示的解决方案是,由大多数人来决定到底哪个是对的。但是,因为任何人都可以用不同身份设置一个或一百个节点,这个解决方案并不可靠,除非有一个管理员来监管网络入口。比特币则恰恰相反,如果攻击者想更改数据,他必须要比其他所有人加起来的解决数学计算的速度还要快。这样就保证了安全性,还可以让我们量化直观地看到整个系统有多安全。
B币和比特黄金都不是正式发布的体系,B币是在一篇发表在邮件组的文章中提出的,比特黄金则是在几篇博文中提出的。二者未被真正实施和广泛应用。不像比特币白皮书,它们也没有给出详细设定或程序源代码。二者都涉及可能无解的若干问题。其一是前文讨论过的数据库账本不一致的问题。另外的问题是,如何设置创造新货币的数学运算的难度?具有同等运算能力的硬件随着时间的推移越来越便宜,针对这一问题,比特币采用了周期性自动调节运算难度的机制。B币和比特黄金没有这样的机制,因此,它们的货币会因为创造难度降低而贬值。
关于中本聪的猜测
你大概知道,中本聪是比特币创造者的化名。他的真实身份依然是一个谜团,但在比特币早期,他还是比较活跃的。我们可以从他留下的这些印记中,探讨一下他本人,比如说他是从什么时候开始研究比特币的?我们谈论过的那些早期构想对他有什么影响?是什么在激励着他?
中本聪说他从2007年5月左右开始编写比特币。他选择匿名并不表示他会在这一点事情上说谎,因此,我姑且相信他所说的。他于2008年8月注册域名bitcoin.org。同时,他开始给一些他认为可能会对比特币感兴趣的人发送邮件,阐述他的想法。2008年10月,他公开发表白皮书,解释比特币协议。此后不久,他又公开了比特币的源代码。随后两年,他在论坛上发布信息,与许多人写邮件交流,回答人们的关切。在编程方面,他对源代码进行了多次修改。他和几位开发人员一同维护源代码,修复补丁。2010年11月,别人逐渐开始接手比特币项目,而他却不再出现。
我用“他”来表示中本聪,但其实我并不知道中本聪到底是男性还是女性,只是因为中本聪是个男性名字而已。此外,我认为中本聪是一个人,而非一个团体。原因是,仔细研究中本聪所有的网络交流记录,在两年的时间里,一个团队里的多个人共用一个账号回复邮件,修改代码,保持风格、语气和内容一致,这简直难以想象。更为合理的解释是,展现在我们面前的中本聪的所有行为是由同一个人完成的。
此外,从他的文章和所打的补丁来看,这个人完全了解比特币的整套代码体系和设计细节。我们有理由相信源代码和白皮书由同一个人所写。最后,可能在一开始有人帮助过中本聪。虽然如此,比特币正式发布之后,我们可以看到,中本聪在得到帮助之后,会很快对其他有贡献的帮助者表示感谢。从这点性格来看,他应该不会在接受别人的帮助之后闭口不言,故意误导人们相信比特币是他一个人的作品。
我们可能会想:“中本聪知道电子现金的历史吗?”为更好地弄清楚这个问题,我们可以看看他在比特币网站上早期发布的白皮书里的引用和索引。在白皮书中,他引用了一些基本密码学和概率论的论文,也引用了我们之前所讨论的时间戳。因为比特币里的区块链与他所引用的内容相似度极高,自然而然地,我们会认为他有参考别人的区块链设计。他还引用了哈希现金,它的数学计算与比特币的非常类似。此外,他还引用了B币。随后,他又在网站上添加了比特黄金和一个由哈尔·芬尼(Hal Finney)设计的重复利用计算数学方案的参考索引。
但是,从与中本聪有早期交流的人公开的邮件来看,我们发现,B币是在亚当·贝克的提议下才加入比特币体系的。随后,中本聪给B币的创造者戴伟发邮件。从邮件中可以看出,是戴伟告诉了他比特黄金。因此,激发中本聪创造比特币的,并不一定是这些方案。他之后与哈尔·芬尼有过多封往来邮件,这可以解释他为什么在网站上或者其他地方引用了芬尼的成果。
基于上述信息,比较可信的推断是,在创建比特币体系时,中本聪只知道电子现金、哈希现金和时间戳,认为只有这些与比特币是相关的。然而,等他知道B币和比特黄金的时候,他才发现,这两个也与比特币有很大关系。2010年,维基百科主编认为比特币不值一提,准备删除比特币词条。中本聪跟另外一些人讨论如何编写比特币词条,好让维基百科接受它。中本聪建议这样描述比特币:“比特币是戴伟在1998年在网络朋克中所提到的B币构想和尼克·萨博提出的比特黄金的具体实现。”可见,中本聪这时确实把比特币看成二者的延伸或具体实施,以便更好地解释比特币的工作原理。
那么,中本聪创建比特币时,他知道其他体系吗?比如我们提过的乔姆的电子现金和信用卡方案。这个很难讲。我们找不到他了解它们的证据,但也有可能他虽然知道,但并未提及它们,因为它们与比特币无关。比特币采用了完全不同的去中心模式,没有理由去提已经失败了的中心化体系。
中本聪自己也表明了这一点。他在发表在比特币论坛里的一篇文章里,曾粗略地提了一下乔姆的电子现金体系。他当时正在写一篇关于opencoin.org的文章,他说他们似乎在“讨论老一套的乔姆中心造币体系,但也许是因为他们别无选择,也许他们会对新的方向感兴趣。20世纪90年代以来所有的虚拟货币公司全都失败了,这导致许多人对这一行业非常不看好。我希望,人们可以看到,这些系统之所以失败,显然是因为它们的中心化控制这一特性。我想我们正在首次尝试建立一个去中心化的非认证系统。”从这段话里,我们可以清晰地了解到中本聪是怎么看待之前的系统的,特别是,他认为比特币与它们是不同的。去中心化这一特性确实真正让比特币从其他虚拟货币脱颖而出。
中本聪写下的另一段话暗示他不是学术派人士。大多数学术研究者先有了构思,然后写下来,再把自己的构思付诸实施。中本聪说他的方式截然相反:“我在建造比特币时,其实是倒着来的。我必须写下所有代码,才能使自己相信我是可以解决任何问题的,然后我才写下理论。我认为我能在写出具体设计细节之前就可以公开代码。”
中本聪是一个神秘的人,值得一提的是,跟所有人一样,他也会犯错,也无法预测未来。比特币的源代码和设计中都存在很多漏洞和瑕疵。例如,比特币体系有一个可以向IP地址发送比特币的功能。虽然当时人们并未发现,但现在看来,这一设计十分糟糕。中本聪在构建比特币用途时,他主要侧重于比特币在互联网上的使用。这当然是比特币的主要用途,但并非唯一用途。他从未想过,可以去咖啡店用比特币付钱。
了解了虚拟货币的历史之后,我们可能还存在一个疑问:“为什么中本聪要匿名?”有许多可能的原因。首先,也许他就是喜欢这样。许多小说家都选择匿名,像班克西(Banksy)这样的涂鸦艺术家也一直不公开身份。其实,在中本聪活跃的网络朋克社区和密码学邮件组,大家都普遍采用匿名方式发表文章。
此外,中本聪选择匿名可能还有法律上的顾虑。自由储备(Liberty Reserve)和电子黄金(e-Gold)这两家美国公司都因为非法洗钱惹上了麻烦。2006年,自由储备的创始人之一担心被指控洗钱,逃离美国。电子黄金的创始人一直待在美国,但其中一位创始人被指控洗钱并最后认罪。这一事件正好发生在中本聪创建比特币网站并公开讨论比特币的前夕。纵然如此,许多人都创立过虚拟货币系统,没有人因为法律顾虑而选择匿名。所以很难说这到底是不是他选择匿名的根本原因。
值得注意的是,我们之前提过,电子现金的一些技术是有专利保护的。网络朋克运动担心实施电子现金系统会侵犯这些专利。事实上,有人曾在网络朋克邮件组发表文章,建议由一群匿名的程序员来架设电子现金系统,这样,即使侵权,也查不出是谁。但是,比特币的设计与电子现金的专利差别很大,很难判定比特币侵犯了它的专利权,也许中本聪选择匿名只是比较谨慎。又或者,他是受到网络朋克社区里程序员匿名的启发。
许多人认为中本聪选择匿名是出于个人安全方面的考虑。众所周知,他早期时挖矿获得大量比特币,时至今日,比特币的巨大成功也就给他带来了巨额财富。我认为这个原因是可能的。毕竟,选择匿名不是一时的决定,而是一贯的风格。尽管如此,这可能还不是他一开始就选择匿名的原因。当他首次使用中本聪这个化名时,他还没有发布白皮书和源代码,很难想象他那时就能够预测到比特币后来会取得如此巨大的成功。其实,在早期,中本聪对比特币的未来持乐观且谨慎的态度。他明白许多之前的尝试都失败了,比特币最终也可能失败。
结语
与之前的失败尝试相比,比特币的成功令人瞩目。它有许多优秀的创新,例如区块链和去中心化实现用户之间直接交易的模式等。它能够有效地确保用户的匿名性,虽然还做得不够完美。我们将在第6章详细了解保密性。比特币的保密性从某种意义上来说做得不如数字现金那么好,但从另一个角度来看,它的保密性要更强。因为在数字现金系统,只有消费者能够匿名,商家则不能。比特币为消费者和商家(不管是消费者还是商家)提供了同等程度的保密性。
把比特币和我们之前讨论过的虚拟货币系统进行对比,我学习到的经验教训是:第一,遇到困难时不要轻易放弃。20年来,人们在开发虚拟货币的道路上一直失败,但这并不意味着永远开发不出一套成功的体系。第二,要愿意折中妥协。如果你想把保密性和去中心化功能做到完美和极致,可能就必须牺牲其他的功能。回顾比特币的发展史,它找到了一个完美的平衡点。它的保密性不够完美,需要用户连接到点对点的网络,但用户愿意接受这样的设定。
最后,众志成城。比特币吸引了一批具有激情的用户和开发者,他们愿意为开源技术出一分力,这与之前由公司开发的虚拟货币很不一样,后者的支持者只是公司内部员工而已。比特币如今的成功很大一部分是因为它拥有一个庞大的生机勃勃的支持群体,他们共同推动科技的发展,招徕客户,说服商家采用它。
延伸阅读
一篇关于虚拟货币架构的综述,浅显易懂,侧重实践:
P.Wayner. Digital Cash: Commerce on the Net (2nded).Waltham,MA:Morgan Kaufmann,1997.
从密码学角度看电子现金系统(第一章)和微支付(第七章):
B.Rosenberg,ed. Handbook of Financial Cryptography and Security . Boca Raton,FL: CRC Press,2011.
虽然不是乔姆最早一篇关于电子现金的论文,但这篇是公认的最富有创造性的论文。它的模式成为后来类似论文竞相模仿的对象:
D.Chaum, A.Fiat, and M.Naor.“Untraceable Electronic Cash.” In CRYPTO 88: Proceedings of the 8th Annual International Cryptology Conference on Advances in Cryptology .London:
Springer Verlag, 1990.
运用现代密码学技术来提升乔姆-菲亚特-纳欧尔体系效率的论文有许多篇,这是其中最重要的一篇:
J.Camenisch, S.Hohenberger, and A.Lysyanskaya.“Compact E-cash:
Theory and Applications of Cryptographic Techniques,” 2005.
对金融市场和金融构想,包括对Mondex电子钱包体系进行的一些比较实用的安全性分析:
R.Anderson. Security Engineering , second edition.Hoboken, NJ: Wiley, 2008.
乔姆的电子现金构想的实施纲要:
B.Schoenmakers.“Security Aspects of the Ecash Payment System.” In State of the Art in Applied Cryptography .New York: Springer, 1997.
这两篇论文曾被中本聪在比特币白皮书中引用,被运用于比特币的设计中:
A.Back.“Hashcash—A Denial of Service Counter-Measure,”
2002.Available at hashcash.org/papers/hashcash.pdf.
S.Haber and W.S.Stornetta.“Secure Names for Bitstrings.” CCS, 1997.