通往比特币的道路上到处充斥者失败的尝试。我已经编制了大约一百个密码支付系统,无论是电子钱包还是信用卡为基础的技术,在某些方面它们是非常著名的。有些是已经得到了很好的学术引用,有些则是实际部署和测试的系统。这份名单上所有的名字,有可能你只认识一个——Payply。而Payply存活的唯一原因,仅仅是它迅速转离了原来以手持设备密码支付为核心的想法!
从这段历史中可以学到很多东西。比特币的想法从何而来?为什么有些技术存活了下来,而另一些则会死亡?复杂的技术创新要成功地商业化需要些什么?如果不出意外,这个故事会让你欣赏到,我们最终拥有的一个真正的、有效的互联网付款机制是多么地引人注目。
1.传统金融的安排
回溯历史,在有政府和货币之前,一个为获取货物而运作的系统是以物易物。比方说,Alice想要一个工具,Bob需要药品。如果他们恰好都有对方需要的东西,那么他们可以交换,两者都能满足他们的需要。
另一方面,假设Alice有食物,她希望通过交换得到一个工具,然而Bob拥有一个工具,但没有食物的需求,反而他需要药物。Alice和Bob不能相互交易,但如果有第三个人,卡罗尔,她有药物,想交换得到食物,那么就有可能安排三方交易,每个人得到他们所需要的。
当然,它的缺点是需要协调——组织一群人在同一个时间、同一个地点,让他们的需求达成一致。为了解决协调的问题,出现了两个系统:信贷和现金。历史学家、人类学家和经济学家对这两者哪一个是最先发展起来的起了争论,但这对我们的目的无关紧要。
在一个基于信用的系统中,上面例子中的Alice和鲍伯将能够与对方进行交易。鲍伯会给Alice这个工具,Alice则欠鲍伯一个人情。换句话说,Alice有个债务,她需要在未来的某个时候与鲍伯和解。Alice的物质需求现在已经得到满足,但她想要取消债务,所以这是她的新“希望”。如果Alice在未来遇到卡罗尔,Alice可以用食物交易卡罗尔的药物,然后再返回到Bob处,给Bob药物并取消债务。
另一方面,在以现金为基础的系统中,Alice会从Bob那里购买工具。后来,她可能会把食物出售给卡罗尔,卡罗尔则能把他的药物卖给Bob,以此来完成这一循环。这些交易可以以任何顺序发生,只要确保每笔交易中的买方手头有现金。最后,当然,这就像钱从未转过手一样。
没有哪个系统更胜一筹。基于现金为基础的系统,需要在无交易发生的情况下,初始分配一些“自举”现金。基于信用为基础的系统不需要引导,但缺点是任何欠了债务的债权人都承担了一些风险,债务人有可能永远不会回来偿还债务。
现金也能让我们精确地知道某物的价值。假如你是物物交换,很难说一个工具的价值超过了药物,或者药物的价值超过了食物。现金让我们用数据来谈论价值。这就是我们今天使用混合系统的原因——甚至当我们使用信用卡,我们依旧用它所需的现金来度量债务。
这些想法的出现有很多背景,尤其是用户在线交易某种虚拟物品。例如,对等(P2P)文件共享网络,必须处理好“不速之客”的问题,也就是那些下载了文件却没有反过来共享文件的用户。虽然可以交换文件,但依旧有协调的问题:寻找谁真正拥有你想要的文件,还有希望你有那个确切的文件。在MojoNation项目和Karma学术建设中,用户必须初始分配一些虚拟现金,以便他们接受文件时支付,发送文件副本给其他用户时获得报酬。在这两种情况下,一个或多个中央处理器帮助跟踪用户的余额,并提供内部货币与传统货币之间的兑换服务。虽然MojoNation没有存活足够长时间来实现这样的交换,它却成为当今使用的一些协议的知识产权祖先:比特流BitTorrent和开源分布式文件储存系统Tahoe-LAFS.
2.在线信用卡的麻烦
就基本概念这一点,我们可以将大量的电子支付方式分成信用和现金两堆。比特币显然是在“现金”堆,但让我们先看看另一个。
信用卡交易是当今网络上使用的最主要支付方式。如果你曾经从Amazon这样的在线卖家那里买过东西,你就知道这个安排是如何进行的。你输入你的信用卡详细信息,把它发送到Amazon,然后亚马逊转发这些信用卡详细信息,并与“系统”—— 涉及处理器,银行,信用卡公司和其他中介的金融系统进行交谈。
另一方面,如果你使用像PayPal这样的东西,你所看到的就是一个中介架构。在你和卖方之间有一家公司,你将信用卡信息发送给这个中介,该中介批准交易并通知卖方。每一天结束时,中介会与卖方结平账目。
你从这个架构中得到的好处是,你不必向卖家提供你的信用卡详细信息,这可能是一种安全风险。你甚至不需要让卖家知道你的身份,这很好地保护了你的隐私。它的不足是你失去了直接与卖家简单互动的机会。你和卖家可能不得不在同一个第三方机构都拥有账户。
今天,我们大多数人都乐于在网上购物时提供信用卡信息,或者至少我们勉强接受。我们也习惯于收集有关网上购物和浏览活动的数据公司。但在20世纪90年代,网络是个新新事物,协议级加密标准正在出现,这些企业使消费者深感不安和犹豫。特别是,通过不安全的渠道将信用卡信息交给不知名的网络供应商被认为是疯狂的。在这样的环境下,人们对中介架构产生了浓厚的兴趣。
FirstVirtual是一个早期的支付中介,它成立于1994年。顺便说一下,他们是最早建立纯粹虚拟办公室的公司之一,员工遍布全国,通过互联网进行沟通,因此获得了这个名字。
FirstVirtual提出的系统有点像PayPal当前的系统,但在它先于Paypal之前很多年。作为用户,你要注册并提供你的信用卡详细信息。当你想要从卖家那里购物时,卖家联系FirstVirtual请求所要求付款的详细信息,FirstVirtual将与你确认这些信息,你的信用卡则会在你批准后付款。但有两个细节很有趣。首先,所有这些通信都发生在电子邮件上;当时的Web浏览器刚刚开始普遍支持像HTTPS这样的加密协议,而多方性的支付协议也增加了其他的复杂性。(其他中介机构将信息编码到URL中或在HTTP之上使用自定义的加密协议)第二,用户有三个月的时间来质疑这笔费用,商人则只能在三个月之后收到钱!今天的商家能立即得到报酬,但是,仍然有用户提出退款或对信用卡对账单存有争议的风险。如果发生这种情况,商家将不得不将付款退还给信用卡公司。
在90年代中期,出现了一种称之为集合架构(SET)与这些中介架构进行竞争。SET即避免了用户向商家发送信息卡信息的需要,同时还免除了用户不得不在第三方进行注册的麻烦。在SET中,当你准备购买时,你的浏览器会将你的交易细节传送给你计算机上的购物程序,该购物程序将你的信用卡信息加密,以便除了第三方没有人可以解密它。以这种方式加密了你的数据后,你就可以放心的将其发送给卖家。卖家机械地将加密数据转发给第三方,连同他们自己对交易细节的看法。第三方揭秘你的数据,当你的想法与卖家的想法相符时才批准交易。
SET是一个由VISA和万事达主导,当今诸多技术巨头:Netscape、IBM、Mircrosoft、Verisign和RSA参与开发的标准。它是一个规范总括,一统了几个现有提议。
有一家采用SET的公司被称为CrberCash,在很多方面这是一个有趣的公司。他们除了处理信用卡支付,还有一款名为CyberCoin的数字现金产品。这是一个小额支付系统,用于支付例如用几美分来阅读在线报纸的交易。这意味着你的CyberCoin账户任何时候,都可能不会超过10美元。然而,有趣的是,他们能够为每个账户获得最高达10万美元的美国政府(FDIC)保险。
回顾过去,还有更多故事。当CyberCash运行时,加密技术被认为是一种武器,美国政府限制了它的出口,现在已被放弃。这意味着不能将有意义的加密软件提供给其他国家的用户下载。然而,CyberCash能够得到国务院对他们软件的特别豁免权。政府的观点是,从CyberCash的软件中提取加密技术,将比从头开始编写密码更难。
最后,CyberCash成为少数几家受到Y2K攻击的公司,造成了他们的支付处理软件对用户进行双重收费。后来,他们在2001年破产。他们的知识产权后来由Verisign收购,然后他转过身卖给了现在的Paypal。
为什么SET没有起作用?根本问题与证书有关。证书是一种安全地将加密身份(即公钥)与真实身份相联系的方法。它是一个网站需要从Verisign这样被称为认证机构的公司获得,为了展示浏览器安全的协议(通常用锁定的图标表示)。CyberCash和SET决定不仅系统中的处理器和商家必须获得证书,所有用户也必须获得证书,不然网站就不能安全的使用。获得证书就像纳税一样可爱,这样的系统注定是一场灾难。过去几十年,主流用户对任何需要最终用户证书的系统都表示了坚定和一致的“否定”,而这些提案现在已经被归为学术论文。Bitcoin通过避免现实生活中的身份验证,巧妙地避开了这个恼人的问题。在比特币中,公钥本身就是用户所知的身份,我们将在第1章中讲述。
在90年代中期,当SET被标准化时,万维网联盟也在考虑金融支付的规范化。他们想通过扩展HTTP协议来实现这一点,以便用户不需要额外的软件来进行交易,只需使用浏览器即可。事实上,他们有一个关于如何扩展协议的一般性建议,以及他们在付款中使用的一个用例。这从来没有发生过,整个扩展框架从未部署在任何浏览器中。2015年,差不多二十年后,W3C宣布它想再次尝试它,且把比特币纳为标准化的一部分。然而,不管过去如何失败,我都不会屏住呼吸。
3.从信用到(加密)现金
现在让我们转到现金。我们先前比较了现金和信贷,并指出现金需要“自举”,但好处是它避免了买家拖欠债务的可能性。现金还有另外两个优势。第一个是更好的匿名。由于你的信用卡是以你的名义发行的,因此银行可以追踪你的所有支出。但当你用现金付款时,银行没有看到,而卖方也不需要知道你是谁。第二,现金可以在不需要第三方批准的情况下启用离线交易。也许后面他们还要去像银行这样的第三方存钱,但那就没有那么麻烦了。
比特币不完全具备这两个属性,但足够接近,这已经相当有用了。比特币并不像现金那样匿名。你不需要用你的真实身份来支付比特币,但可能你的交易可以通过巧妙的算法与公共交易账簿捆绑在一起,然后如果你不小心,它进一步与你的身份相关联。我们将在第6章中讲述比特币匿名背后凌乱而迷人的细节。
比特币不能以完全离线的方式工作。好消息是,它不需要中央服务器,而是依靠一个具有弹性、互联网本身方式的对等网络。在第3章中,我们将讨论“绿色地址”和小额支付等技巧,这些技巧让我们在某些情况下,或者一定条件下做离线支付。
最早将加密技术应用于现金的想法来自于1983年的大卫·肖姆(DavidChaum)。我们通过物理比喻来理解这一点。假设我开始分发一些附有我签名的纸,上面写着:“这张票据的持有者可以把它兑换成一美元”。人们如果相信我会遵守我的承诺,并考虑我的签名是不可伪造的,他们就可以像纸币一样传递这些纸张。事实上,纸币本身就是从商业银行签发的期票开始的。只有在最近的历史中,各国政府才着手集中货币供应,并要求银行合法赎回票据。
我可以用电子化的数字签名做同样的事情,但这会遇到恼人的“双花”问题——如果你收到一个代表虚拟现金单位的数据,则可以制作两个(或更多)副本,并将其传递给不同的人。为了更好的说明这一点,让我们稍微延伸一点,假设人们可以复制出完美的副本,而我们却无法分辨出来。这个世界的双花问题能被我们解决吗?
这里有一个可能的解决方案:把唯一的序列号放在我发出的每一个票据中。当你从某人那里收到票据时,请检查我的签名,你也可以打电话给我,询问该序列号的票据是否已经花了。在我说“不”的情况下,你接受这笔票据。我将在我的分类账上把这些序列号记录为已使用,如果你尝试花费该票据,则无法使用,因为收件人会打电话给我,我会告诉他们该票据已经使用。你需要做的就是定期为我带来你收到的所有票据,我将向你发送相同数量的新票据,并附上新的序列号。
这样方案完全OK。这在现实生活中很麻烦,但是我提供了一个简单的数字服务器来完成序列号的签名和记录。唯一的问题是,它不是真的现金,因为它不是匿名的——当我发给你票据的时候,我可以把序列号和你的身份对应起来,同时当别人兑换它时我可以做同样的事。这意味着我可以追踪你所有花钱的地方。
这就是Chaum的创新所在。他想通了如何既保持系统的匿名性,又可以通过发明以下等效的程序来防止双花问题:当我向你发出新的票据时,你来挑选序列号。你把它写在纸上,盖住它使我看不到。然后我会签署它,仍然无法看到序列号。这在密码学中被称为“盲签”。根据爱好选择一个长的、随机的序列号,以确保它很有可能是独一无二的。我丝毫不必担心你会选择一个已经被选中的序列号,你这样做只能在结算中发送你自己,最终会出现一个不能花费的票据。
这是第一次重要的数字现金提案。它有效,但仍然需要由一个中央权威机构(如银行)运行的服务器,并且需要每个人都信任该实体。此外,每个交易都需要这个服务器的参与才能完成。如果服务器暂时关闭,付款就会中断。几年后,在1988年,Chaum与另外两家密码学家Fiat和Naor合作提出了离线电子现金。最初看来这是不可能的:如果你尝试在两个不同的商店使用相同的数字票据或硬币,除非他们连接在相同的支付网络或中央机构,否则如何阻止他们?
这个聪明的想法是停止考虑如何阻止双重支付,而是当商家重新连接到银行服务器时把重点放在检测它。毕竟,这就是为什么即使天空中没有网络连接,你还可以在飞机上使用你的信用卡的原因。当航空公司能够重新连接到网络时,交易就会开始处理。如果你的卡被拒绝,你将欠该航空公司(或你的银行)的钱。如果你想到这一点,相当多的传统金融就是基于发现错误或损失的想法,来试图追回钱或惩罚犯罪者。如果你写一张个人支票,他们不能保证金额实际上在您的帐户,但如果支票跳票他们就会去找你。可以想象,如果离线电子现金系统得到广泛采用,法律体系就会认识到双重消费是一种犯罪行为。
Chaum,Fiat和Naor的检测双重支出的想法是一个复杂的加密艺术。在高水平上,它是这样实现的:发给你每个数字硬币都会对你的身份进行编码,除了你和银行之外,没有人可以解码它。每次你花你的硬币时,收件人将要求你对编码的一个随机子集进行解码,他们将保持这一记录。这种解码不足以让他们确定您的身份。但是,如果你双重消费,最终两个收件人都会去银行兑现他们的票据,当他们这样做时,银行可以把两块信息放在一起,以极大的概率对你的身份进行完全解码。
你可能想知道是否有人可以在系统中陷害你成为双重消费者。你和我一起花了一枚硬币,然后我转过身去,试图双重消费(不用银行兑换,直接用我的身份编码获得一个新的硬币)。这将不会起作用——新的收件人将要求我解码一个随机的子集,这几乎肯定不会与为你解码的子集相同,所以我将无法执行他们的解码请求。
多年来,许多密码学家已经看到了这种结构,并以各种方式对它进行了改进。在Chaum-Fiat-Naor的方案中,如果一枚硬币价值100美元,而您想要购买的成本仅为75美元,那么根本没有办法把这个硬币分成75美元和25美元。你唯一可以做的是回到银行,花费$ 100硬币,并要求一个$ 75硬币和一个$ 25硬币。但是Okamoto和Ohta的一篇文章使用“Merkle trees”来创建一个允许您细分硬币的系统。Merkle trees也将出现在比特币中,我们将在第1章中讲述他们。Chaum-Fiat-Naor的方案同时也为提高支付效率留下了很大的空间。特别的是,方案中应用的非零知识证明(最著名的由Brands、Camenisch, Hohenberger、Lysyanskaya发明),非常的富有成效。非零知识证明也已经应用在比特币中,我们将在第6章中看到。
回到Chaum:他商业化了他的想法,于1989年组建了一家名为DigiCash的公司,可能是最早试图解决在线支付问题的公司。他们比我们刚刚讨论的诸如FirstVirtual、CyberCash等早五年时间。Digicash系统中的现金叫做Ecash,他们还有一个叫做cyberbucks的系统。几家美国的银行和至少一家芬兰的银行实际实施了他们的方案。这是在二十世纪九十年代,早于比特币很久很久,这可能会让将银行视为科技恐惧症,反创新的庞然大物的比特币爱好者异常的惊讶。
Ecash是基于Chaum的协议。客户是匿名的,所以银行无法追踪他们是如何花钱的。但是,ecash的商家并不是匿名的。他们必须在收到货币后立即换回硬币,所以银行知道他们什么时候做了什么等等。
图中显示了这个软件的界面。正如你看到的,它显示了你的余额以及你从银行发给你的所有硬币。既然没有办法分割你的硬币,银行会向你发出一整套硬币,价钱分一美分、两美分、四美分等等(以2为倍数)。这样,你(或者代表你的软件)就可以选择一套硬币来支付交易的确切金额。
当你想要交易的时候,比如说你想要向非盈利组织EPIC捐款,你需要点击一个会带你到Digicash网站的捐赠链接。然后,将打开一个反向Web链接回到你的计算机,这意味着你的计算机必须能够接受传入的链接并充当服务器。你必须拥有你自己的IP地址,且你的ISP将不得不允许传入链接。如果连接成功,ecash软件会在你的计算机上启动,你可以批准交易并支付现金。
Chaum拥有Digicash技术的几项专利,特别是其使用的盲签方案。这是有争议的,它阻止了其他人使用相同的协议开发电子货币系统。一大堆密码学家们就此挂上了所谓的Cypherpunks邮件列表来替换它。Cyperpunks是日本Satoshi Nakamoto后面向世界宣布的Bitcoin邮件列表的前身,这不是巧合。我们会在第7章谈论Cypherpunk运动和比特币的根源。
解密高手破译ecash实现的一个版本的电子货币被称为magicmoney。它确实违反了专利,但被广而告之仅用于实验用途。这是一个有趣的软件,它的界面是基于文本的。你可以通过电子邮件发送交易。你只需将交易复制并粘贴到你的电子邮件中,然后将其发送给其他用户。希望你最好使用了端到端电子邮件加密软件(如PGP)来保护传输中的交易。
后来,Ben Laurie和其他很多人一起发展了一个叫Lucre的提案。Lucre试图以非专利-作保的方式取代ecash中的盲签方案,系统其他部分大致相同。
另外,伊恩·戈德伯格(Ian Goldberg)提出了一个提案试图解决不能分割硬币来找零的问题。他的想法是,如果商家还有一些硬币,那么他们可以向你发回硬币,以便你没有多余零钱时可以多支付,然后收到商家发回的硬币。但请注意,这引入了匿名问题。正如我们以前看到的那样,在ecash中,发送者是匿名的,但商家不是。当商家发回现金时,从技术上来说他们是发件人,所以他们是匿名的。但是你,作为必须将这笔现金退回银行的人,不是匿名的。没有办法设计这个系统而不破坏试图购买商品的用户的匿名性。所以,戈德伯格提出了一个提案,其中有不同类型的硬币来允许交易的发生,允许你改回去,并保持你的匿名。
现在我们来看看,为什么DigiCash失败了?DigiCash的主要问题是很难说服银行和商人采用它。既然没有很多商家接受ecash,用户当然也不想要它。更糟糕的是,它不支持用户和用户的交易,或至少支持的不是很好。它真正集中在用户对商家的交易上。因此,如果商人不在船上,就没有其他方法可以引导人们对系统感兴趣。所以一天结束时,DigiCash失败了,信用卡公司胜利了。
作为附注,比特币允许用户到商家和用户到用户的交易。实际上,协议没有与用户的概念分开的商家概念。对用户到用户的交易的支持可能有助于比特币的成功。从一开始就有一些事有助于你的比特币:把它发送给其他用户,社区试图鼓励对比特币的支持,让商家接受它。
在公司的后几年里,DigiCash还试用了防篡改硬件,试图防止双重支出,而不是仅仅检测它。在这个系统中,你会得到一个通常被称为钱包或某种卡片的小型硬件设备。该设备将跟踪您的余额,当您花费时余额减少,充值是余额增加。设备最关键的是,应该没有物理或数字的办法进入并篡改其计数。所以如果这个计数变为零,那么这张卡就停止支付,直到它被重新加载为止。
图中显示了Mondex系统的用户端。有一个智能卡,一个钱包单元,他们都可以加载现金。如果您想进行用户之间的交易,那么提供者的用户将首先把卡片放入钱包中,并将钱从卡上转移到钱包上。然后接受者会将他们的卡片插进钱包中,你将钱移到第二张卡上。这是一种匿名交换数字现金的方法。
Mondex在一些社区试用了他们的技术。一个社区恰好是一个非常接近我长大的城市:圭尔夫,安大略。你可能已经猜到它并没有真正流行起来。Mondex卡的一个主要问题是它和现金极像——如果你失去他们或被盗,钱就丢失了。更糟糕的是,如果卡片有某种故障,读卡器不读取,则无法确定该卡是否有结余。在这些情况下,Mondex通常会cover成本,他们会假设卡被加载,并向用户赔偿了这笔钱。当然,这可能会使公司损失很多钱。
此外,钱包笨重而反应缓慢,用信用卡或现金支付要快得多。零售商也讨厌有几个付款终端,他们只想要一张信用卡。所有这些因素加在一起导致了Mondex的失败。
然而,这些卡是智能卡,这意味着它们上面具有小型微控制器,并且该技术已被证明是成功的。在今天的许多国家,包括加拿大在内的每一张信用卡和每一张借记卡现在都拥有智能卡技术。但它用于不同的目的。它不用于防双花问题,因为它不是一种基于现金的技术,因此不会出现这个问题。银行而不是你的信用卡,随时监控着你的余额或可用信用。相反,芯片是用于认证的,也就是证明你知道和你的帐户相关联的PIN。但是,Mondex这一技术很久之后才被银行业广泛采用。
4.凭空铸造的钱币
在DigiCash系统中,如果您有一个价值100美元的数字现金,那么凭什么它值100美元?答案很简单:为了获得价值100美元的ecash,你必须从你的银行帐户中拿取100美元,并将其发送给正在发行你的电子现金的银行。但是,关于如何做到这一点,人们提出了一系列不同的建议,而不同的公司采取的做法也不同。一个牵强的可能:如果一个国家的政府实际授权了创造数字现金的服务,让钱币凭空出现,那又怎么样?那就是NetCash背后的想法,尽管它从未实践过。一个不一样的系统e-Gold将一堆黄金放在金库中,并发行对应价值的数字现金。另一家名为Digigold的公司并没有完全由黄金支撑,而只是获得了部分储备。
所有这些想法最终都会将数字现金的价值与美元或商品挂钩。如果美元的价值上涨或下跌,你的数字货币持有量的价值将随之而变。一个完全不同的可能性是允许数字现金是自己的货币,独立于任何其他货币发行和估价。
要创建一个可能获得真正价值的自由浮动数字货币,你需要设计一些稀缺的东西。事实上,稀缺性也是黄金或钻石被用作货币支持的原因。在数字领域,实现稀缺的一种方法是设计一套系统,使得铸币需要一段时间的破解才能成功解决计算问题(或“拼图”)。这就是比特币“采矿”中发生的事情,我们将在第5章讲述。
基本思想是——用计算解决一些具有一定价值、相当古老的数字对象谜题。1992年,密码学家Dwork和Naor首先提出了一个潜在的回复垃圾邮件的解决方案。你每次发送电子邮件,你的电脑必须解决一个需要几秒钟解决的难题,那该怎么办呢?为了执行这一要求,接受者的电子邮件程序会简单地忽略没有解决计算难题的电子邮件。对于一般用户而言,发送电子邮件不是一个很大的障碍,因为你不经常发送电子邮件。但是,如果你是垃圾邮件发送者,你正在尝试一次性发送数千或数百万封电子邮件,解决这些计算难题可能会变得令人望而却步。一个类似的想法后来被亚历山大(1997年)独立发现,提出了一个名叫哈希凯什(Hashcash)的东西。
这些计算谜题需要具有一些特定的属性才能成为有用的垃圾邮件威慑工具。首先,垃圾邮件发送者不可能解决一个谜题,却将解决方案附加到他发送的每封电子邮件中。为了确保这一点,电子邮件中的谜题应该是特定的:它应该取决于发件人和接收者、电子邮件的内容以及发送的大致时间。其次,接收者应该能够轻松地检查拼图解决方案,而无需重复解决难题的过程。第三,每个谜题应该完全独立于其他谜题,在某种意义上,解决一个谜题并不会减少解决任何其他谜题所需的时间。最后,随着时间的推移硬件在不断改善,解决任何给定的计算难题会变得更快更便宜,接受者要能够接受调整他们的谜题解决方案的难度。这些属性可以通过使用加密哈希函数(Hash fuctions)设计谜题来实现,我们将在第1章中研究。
比特币使用与Hashcash基本相同的计算难题,但有一些小的改进。比特币比Hashcash做的还要多,毕竟Bitcoin需要一本书来解释!我只提到这一点,因为Hashcash发明家亚当·本德(Adam Back)说:“比特币是控制通货膨胀的哈什凯什。”我认为这有一些夸张。这就像说:“特斯拉只是电池装在轮子上一样。”
就像密码学中的其他好主意一样,许多计算谜题旨在实现略微不同的属性。一个来自Rivest和Shamir的提案,RSA密码系统的R和S就来自于他们。请注意,在Hashcash的设计中,你解决一些难题的成本仅仅是个人成本的总和。这与政府造币的成本结构不同。如果你考虑到纸币的防伪技术,获取所有设备,创建安全特性等方面都有巨大初始成本。但是一旦他们完成了所有这些工作,他们的成本就会下降,印制一张纸币或一百张纸币并没有什么太大的区别。换句话说,铸造纸币具有巨大的固定成本,但边际成本较低。Rivest和Shamir想要设计出可以模拟这些属性的计算谜题,以便铸造第一枚硬币在计算上具有很大的挑战性,但铸造后续硬币便宜得多。他们的提案也使用的哈希功能,但是以不同的方式。我们不会了解他们解决方案的细节,但他们试图解决的问题在很大层次上是非常有趣的。
为什么Hashcash没有达到防止垃圾邮件的预期目的呢?也许垃圾邮件只是一个不够大的待解决问题。对于大多数人来说,垃圾邮件只是一个滋扰,而不值得他们花费他们的计算周期来打击。我们今天的垃圾邮件过滤器可以很好地将垃圾邮件从我们的收件箱中删除。也有可能Hashcash实际上不会阻止垃圾邮件发送者。特别是,大多数垃圾邮件发送者今天使用“僵尸网络”发送他们的垃圾邮件,他们使用恶意软件控制大量其他人的电脑。他们也可以用这些电脑来收获Hashcash。也就是说,使用计算谜题来限制对资源的访问仍然只是一个想法。你可以在一些替代网络协议的建议中看到它,例如MinimaLT。
5.记录分类帐中的所有内容
Bitcoin的另一个重要组成部分是区块链:所有比特币交易都被安全地记录下来的分类帐。区块链背后的想法相当古老,可以追溯到Haber和Stornetta在1991年的一篇论文中。他们提议的是一种安全时间戳的数字文档,而不是数字货币计划。时间戳的目的是给出一个文件大致产生时间的概念。更重要的是,时间戳准确地传达了这些文档的创建顺序:如果在另一个文件之前存在,则将在时间戳上反映出来。安全属性要求文档在事后的时间戳不能更改。
在Haber和Stornetta的方案中,有一个将客户文档发送到时间戳的服务。当服务器接收到文档时,它会将文档与当前时间以及链接,还有指向上一个文档的指针一起签署,并发出带有该信息的“证书”。这里所说的指针是一种特殊类型的指针,它指向的是一个数据而不是一个位置。这意味着,如果这里所说的数据发生更改,指针就会自动失效。在第1章中,我们将研究如何使用散列函数(Hash functions)创建这样的指针。
这样做是用每个文档的证书确保前一个文档内容的完整性。实际上,你可以递归地应用此参数:每个证书基本上修复了文档和证书的全部历史记录直到这一点为止。如果我们假设系统中的每个客户端至少记录几个证书——他们自己的文档证书以及上一个和后续文档的证书,那么所有参与者可以一起确保在事实之后不能更改历史记录。特别的是,文件的相对排序得到保留。
要为文档创建证书,时间戳服务器包括一个指向上一个文档证书的哈希指针,当前时间,并将这三个数据元素签名在一起。
后来的一篇文章对效率提出了一个改进:我们可以将它们收集到区块中并将链接块链接在一起,而不是单独链接文档。在每个块中,文档将再次以树形结构链接在一起,而不是线性结合。这减少了验证特定文档出现在系统历史记录中某个特定点所需的检查量。视觉上,这种混合方案如图所示。
我们将在第3章中看到,这个数据结构形成了比特币区块链的骨架。比特币改进了一个微妙但重要的方式:使用Hashcash-esque协议来延迟新块添加到链中的速度。此修改对Bitcoin的安全模型有着深远而有利的影响。Bitcoin不再需要可信服务器;相反,事件由被称为“矿工”的不可信节点集合记录。每个矿工跟踪块,而不是依靠普通用户来完成。任何人都可以通过解决计算谜题来创建块成为矿工。比特币也摆脱了签名,只依靠散列指针(hash pointers)来确保数据结构的完整性。最后,实时的时间戳在比特币中也并不重要,系统的亮点是以防篡改的方式记录事务的相对顺序。事实上,比特币块并不是按固定的时间表创建的。该系统确保平均每10分钟创建一个新的区块,但连续块之间的时间有相当大的变化。
本质上,比特币结合了计算谜题的想法来规范新货币单元的创造,并以安全的时间戳来记录分类账上的交易,同时防止双花问题。早些时候,较不复杂的提案结合了这两个想法。第一个叫做b-money,由魏代于1998年所创造。在b-money中,任何人都可以使用hashcash的系统来创造货币。同时有一个像比特币一样的对等网络(p2p网络)。每个节点都维护一个分类帐,但它并不是比特币区块链中的全局分类帐。每个节点都有自己的分类帐,它考虑的是每个人的平衡。
另一个叫做Bitgold的类似提案是由Nick Szabo创造的。Szabo说他早在1998年就有了Bitgold的想法,但直到2005年才开始共享出来。我之所以提到这一点,是因为有一个小阴谋论被纽约时报记者Nathaniel
Popper所宣传,他写了一本非常好的关于比特币历史的书。波佩尔指出,在Satoshi发布了Bitcoin白皮书之后,网志的时间戳已经改变,因此Bitgold的提案看起来像是在比特币发布后大约两个月写的。波普尔和许多其他观察家认为的那样,Szabo可能就是Satoshi,他引用时间戳变化作为Szabo / Satoshi试图掩盖他在知道Bitcoin之前已经发明了Bitgold事实的证据。
这个解释的问题是,如果你真的读了博客的内容,Szabo在1998年是非常明确的有了这个想法,他不想去改变这些日期。因此,一个更合理的解释是,在比特币推广了类似的想法后,他只是把这个帖子顶到了博客的顶端,以确保人们知道他先前的提案。
比特币与b-money和Bitgold有几个重要的区别。在这些提案中,计算谜题直接用于发行货币。任何人都可以解决一个谜题,解决方案是一个单位的钱本身。在比特币中,谜题解决方案本身并不构成钱。它们被用来固定区块链,且只能在有限的时间间接导致铸币。其次,b-money和Bitgold依靠在创建或转移资金时签署的时间戳服务。我们已经看到,比特币不需要可信的时间戳,只是尝试保留区块和交易的相对顺序。
最后,在b-money和Bitgold中,如果服务器或节点之间对分类帐有不同意见,则没有明确的解决方法。在两个作者的著作中,让多数人作出决定似乎是含蓄的。但是,由于任何人都可以设置一个或多个隐藏在不同身份的节点——这些机制不是很安全,除非有一个集中的看门人控制着网络的入口。相反,在比特币中,攻击者要改变历史,他们必须以比其他参与者更快的速度解决计算谜题。这不仅更加安全,而且还量化了系统的安全性。
b-money和Bitgold是非正式的提案——b-money是邮寄名单上的一个帖子,Bitgold是一系列博客文章。既没有起飞,甚至没有实施开来。不像比特币白皮书,他们没有一个完整的规范或任何代码。这些提案掩盖了可能或不可能解决的问题。第一,正如我们已经提到的,如何解决分类帐的分歧。另一个问题是确定计算难题对于打造货币单位是多么困难。由于硬件在一定的计算能力下会随着时间的推移而变得更加便宜,因此Bitcoin采用了一种周期性地自动调整谜题难度的机制。b-money和Bitgold不包括这样的一种机制,这可能会导致问题,因为硬币可能会变得非常容易地创建而失去价值。
6.中本聪的暗示
你可能会知道Satoshi Nakamoto是比特币创始人采用的假名。虽然他的身份仍然是一个谜,他却在比特币的早期广泛传播。让我们用这个来挖掘一些问题,比如当他开始创造比特币时,他在多大程度上受到先前我们所看到的想法的影响,以及是什么激励了他。
Satoshi说,他在2007年5月左右开始编码比特币。我选择相信他,他是匿名的事实并不是他会说谎的理由。他于2008年8月注册了http://bitcoin.org域名。当时他开始发送私人电子邮件给一些他认为可能对该提案感兴趣的人。然后在2008年10月稍后,他公开发表了一份描述协议的白皮书,不久之后,他发布了比特币的初始代码。然后他在那里逗留了大约两年,其间在论坛上张贴了大量的信息,给很多人发送了电子邮件,并回应了人们的关注。在编程方面,他提交了一些补丁。他与其他开发人员一起维护源代码,并在出现问题时进行修复。2010年12月,其他人已经缓慢接管了项目的维护,然后他停止了与他们沟通。
我一直把Satoshi Nakamoto称为“他”,但是我没有理由相信Satoshi是个男人,而不是女人。我只是因为Satoshi是一个男性的名字而使用男性代词。我也认为他是一个单身汉。有一种理论认为,Satoshi Nakamoto可能是一个个体的集合。我不买这个理论的帐——我觉得Satoshi可能只是一个人。原因是,如果我们考察Satoshi假名进行的所有在线互动,以及Satoshi回复电子邮件和修补代码的两年时间,很难想象这可能是多人共享用户帐户和密码,以类似的风格和声音作出回应,并确保彼此没有矛盾。这似乎是一个更简单的解释,至少这部分Satoshi的活动是由一个人完成的。
此外,从他的著作和补丁中可以清楚地看出,这个个体理解了比特币及其所有设计方面的全部基础代码。所以假设同一个人写了原始代码库和白皮书是非常合理的。最后,Satoshi可能对原始设计有帮助。但是,在比特币发布之后,我们可以看到Satoshi很快把他收到的其他人的任何帮助归功于我们大家。如果他得到了别人的帮助,却误导我们是自己发明的东西,那就太不好了。
接下来,我们可能会问自己:“Satoshi对于ecash的历史知道些什么?” 为了更好地理解这一点,我们可以先看看他在白皮书中引用的内容,以及早期版本的Bitcoin网站上的参考资料。在白皮书中,他引用了一些关于基本密码学和概率论的论文。他还引用了我们早些时间看到的时间戳工作,因此认为他基于这些参考文献进行区块链设计是很自然的,因为他们是如此的相似。他还引用了Hashcash提案,其计算谜题与Bitcoin中使用的方案非常相似。他也提到了b-money。 后来,他在网站上还添加了对Bitgold的引用,以及Hal Finney的一个计划来重用计算谜题的解决方案。
但是,如果看一看早期与Satoshi Nakamoto对应的人发布的电子邮件,我们发现B-money的提案实际上是按照Adam Back的建议添加的。Satoshi然后通过电子邮件与创建b-money的魏代联系,显然魏代是那个告诉他Bitgold的人。所以这些提案并不是来自原始设计的灵感。他后来和Hal Finney通信了很多,这对于他为什么引用Finney的作品至少在网站上是一个合理的解释。
基于此,在创建比特币时以下似乎是可信的:ecash历史上的Hashcash和时间戳是Satoshi知道或认为唯一与比特币相关的事。然而,在他了解b-money和Bitgold之后,他似乎更赞赏他们之间的相关性。2010年年中,维基百科上Bitcoin的文章被标记为维基百科编辑已删除,因为他们认为这不值得一提。Satoshi和其他人之间有一些关于如何写Bitcion的讨论,以便维基百科接受它。为此,Satoshi提出了比特币的这种描述:“比特币是对1998年以魏代为主的Cypherpunk进行的b-money提案和Nick Szabo的Bitgold提案的实施。所以,Satoshi在这点上确实把Bitcoin定位为这两个想法的延伸,或者作为对两个现有系统有效解释的一个很好的实施。
但是,其他的所有的呢——比如我们看过的Chaumian的ecash计划和信用卡提案呢?在设计比特币时,Satoshi是否知道任何关于这些的历史呢?很难说,他没有任何迹象表明知道这个历史,但同样可能因为他们与比特币无关而没有提到这一点。比特币使用了完全不同的分散模型,所以没有理由去关注那些失败的旧集中式系统。
Satoshi自己就这样做了,他在比特币论坛上的一个帖子提到了Chaumian的ecash。在写另一个名为http://opencoin.org的提案中,他指出,他们似乎是在谈论旧的Chaumian中央造币厂的东西,但也许只是因为这是唯一可用的。也许他们会对新的方向感兴趣。许多人自动将电子货币视为失败的,因为自1990年代以来所有的公司都失败了。我想这很明显,这些中心化系统的中央控制性注定了他们的结局。我认为这是我们第一次尝试分散的、不信任的系统。这给了我们一个很好的了解Satoshi对早期提案的看法,特别是他是如何认为比特币是不一同的。比特币的分散化确实是一个定义的特征,这使它与我们所看到的几乎所有的东西不同。
Satoshi的另一个有趣的引语表明,他可能不是一个学术界人士。大多数学术研究者在构建系统之前,会在思考想法时立即写下来。Satoshi说他采取了相反的做法:“我其实使比特币倒退了。在说服我自己可以解决所有问题之前,我必须写下所有代码,最后我才去写这篇论文。我想我将能够尽快发布代码,而不是写一个详细的规范。”
由于Satoshi有一些神话,值得一提的是,他像其他人一样犯了错误,在未来这不是一个完美的神话。在原始的比特币代码以及其设计中,存在着错误和可疑的设计选择。例如,有一个功能可以将bitcoins发送到从未被抓取到的IP地址,回想起来,这真是一个坏主意。当他描述比特币对什么有用的时候,他的脚本集中在互联网上使用它的想法。这个场景当然是Bitcoin的核心,但它并不是唯一的。例如,他并没有指出进入咖啡店的愿景,并且可以用比特币支付咖啡。
最后一个问题我们会问自己,我们从数字货币的历史中了解到的是有色的。“为什么Satoshi保持匿名?”,这有很多可能的原因。首先,这可能只是为了乐趣。许多人匿名写小说,像Banksy这样的涂鸦艺术家也保持匿名。事实上,在当时Satoshi参与的社区、Cypherpunk社区以及加密邮件列表中,人们常常以匿名方式发布。
另一方面,Satoshi的选择可能会有法律上担忧的考虑。两家美国公司“Liberty
Reserve”和“e-Gold”都面临洗钱的法律问题。2006年,自由储备金的创始人之一逃离了美国,担心他会因洗钱罪被起诉。另一方面,e-Gold的创始人则留在了美国,其中一人实际上被起诉,并最终对指控承担了罪责。这些有罪的入狱恰恰在Satoshi设立比特币网站,并开始向他人通过电子邮件发送他提案之前。也就是说,许多人发明了ecash系统,没有人不害怕法律或选择保持匿名的。所以这可能是原因,也可能不是。
这也是值得回忆的,ecash的某些方面获得了专利,Cypherpunk运动的成员关心由于这些专利而实施ecash系统。事实上,cypherpunks邮件列表中的一个帖子提出,一组匿名编码器实施ecash,以防如果有人要起诉,他们将无法找到编者。很难想象比特币会因为设计有所不同而违反了ecash专利,但是Satoshi则更加谨慎。或者灵感只是来自cypherpunk社区的匿名编码器的想法。
最后一个原因可能是人身安全。我们知道,Satoshi早期的矿业有很多比特币,由于Bitcoin的成功,这些现在值很多钱。我认为这是一个合理的理由。毕竟,选择匿名不是一次就能做出的决定,而是你一直在做的事情。也就是说,这可能不是Satoshi最原始原因。Satoshi第一次使用Satoshi Nakamoto,他甚至没有发布白皮书或比特币的代码库,很难想象他有什么想法会像现在一样成功。事实上,在早期的许多时刻,Satoshi对Bitcoin的前景乐观而谨慎。他似乎已经明白许多以前的努力失败了,比特币也可能会失败。
7.结语
如果你认为所有失败的企业都试图做到这一点,比特币的成功是非常了不起的。比特币有几个显著的创新,包括区块链和支持用户之间的交易的分散式模型。它为用户提供了实用但不完美的匿名级别。在第六章中,我们将详细介绍比特币的匿名性。在某种意义上,它比DigiCash中强大的匿名性弱,但在另一个意义上说它更强。那是因为在DigiCash中,只有这些钱的发送者才能保持匿名,而不是商人。比特币给予发送者和商家(不管是用户还是商户)具有相同的匿名级别。
让我最后总结一些我们可以从比特币中学习的经验教训。第一个是面对困难不要放弃。仅仅因为人们在开发数字货币方面失败了20年,并不意味着没有一个系统能起作用。二是愿意妥协。如果你想要完美的匿名或完美的分权,你可能需要恶化你设计的其他领域。回过头来看,比特币似乎做出了正确的妥协。它缩小了匿名性,并要求参与者在线并连接到对等网络(p2p网络),但这被用户认为是可以接受的。
最后一个教训是通过数字获得成功。比特币能够建立一个充满激情的用户社区,以及汇聚愿意为开源技术做出贡献的开发人员。这是一种明显不同于以往的数字现金尝试,那些通常是由一家公司开发,唯一的技术倡导者是公司本身的雇员。比特币当前的成功在很大程度上要归因于充满活力的支持社区,他们推动了这项技术,让人们使用它,并让商人采用它。
本文来自火球财经,仅作分享,存在异议请联系平台删除。本文观点不代表刺猬财经 - 刺猬区块链资讯站立场。