查看原文
其他

Web3圣经——“比特币白皮书”问世14周年,90%人能懂的解读版(3万字)

稻穹思 传DAO士 2022-11-29
没有好问题,就没有好答案:
为什么比特币也曾出现中心化设计?
为什么曾被黑客攻破的比特币却最安全?
中本聪想象的比特币未来是怎样的?
中本聪的世界观是什么?
比特币为什么是几十年智慧的结晶?
—— 白皮书翻译:吴忌寒,解读:稻穹思 ——
今天是比特币白皮书发布14周年纪念日,重读比特币白皮书,再看看“数字货币简史”,你一定会别有一番收获。

2008年10月31日 14:10(美国时间),中本聪(Satoshi Nakamoto)在metzdowd.com的密码学邮件组列表中发表了比特币白皮书《比特币:一种点对点的现金支付系统》。

从此,开启了数字货币和区块链技术的新天地,催生了 Web3 的整个生态发展。

中本聪创建的比特币汇集了许多数学和软件概念。创建至今,比特币实验从未停止,一直在持续进化并定期更新。迄今为止,比特币已经证明了它的实用性,并掀起了金融和货币行业的革命,尤其是电子支付系统,因此在世界范围内广为接受。比特币自身能否存活到2140年比特币开采完的那一天尚未可知,但是,分布式、点对点以及非中心化限量供应货币的理念将永远留存。

为什么这篇论文人人读了都会有收获?

虽然中本聪在2011年后销声匿迹,但白皮书中涵盖了中本聪最希望传递的世界观,对于每一个区块链入门者都是必读。

即便对于不认可比特币的人来说,这个白皮书也值得看看,思考下:为什么一篇白皮书加上软件,从一个小社区的自发行动,就造成了如今万亿美元的Web3基础,创始人初心和本质是什么?

对希望提升自己的人来说,学习高手的思维模型和逻辑,也是建立自己思想体系的台阶。

不忘初心,才能坚定信念,继续前进。

本文引用的中文版白皮书翻译者是吴忌寒,他是首位把中本聪白皮书翻译成中文的人,他的译本是目前最广为流传的版本。

2009年,23岁的吴忌寒从北大毕业,获得心理学和经济学双学位,进入了华兴资本做风险投资。

2011年5月,一次偶然的机会让吴忌寒发现了比特币。吴忌寒花了三天的时间,去研究比特币的底层技术逻辑。据此,他做出判断,比特币要么能上涨数百倍,要么归零。于是,吴忌寒发挥自己做投资的优势,向亲戚朋友募集了10万元,在淘宝和门头沟交易所换成了比特币,当时比特币的价格大概10美元1个。2013年,比特币飙升至900美元。

那时候,全世界的人交流比特币,都是在一个叫 Bitcointalk 的论坛,比特币的发明人中本聪也在这个论坛,和全世界的开发者交流。吴忌寒主动申请,成为了 Bitcointalk 论坛中文版的版主。

2011年8月, 他联合科幻作家长铗一起创立了网络媒体巴比特,当年底,他翻译了比特币白皮书。

2012年,烤猫在深圳成立比特泉,吴忌寒投入全部身家(1500个比特币),成了三大股东之一。

2013年,烤猫矿机独步武林,每月能挖出几万枚比特币,吴忌寒陡然而富,身价过亿。尝到挖矿的甜头后,吴忌寒决定自己搞矿机,于是找到清华毕业的詹克团一起创办了比特大陆。

在2014年底,吴忌寒在一次采访时,坦言为什么要翻译白皮书和宣传比特币:”主流中文社区对比特币的评析和解释其实都是偏悲观的,他们不太能够理解一种总量受限的货币对公众所具有的意义和价值,他们普遍会将比特币视为一种金字塔的游戏,或者说一种传销的陷阱。这个时候,如果有人能够很好地诠释出比特币的经济价值,同时能够向公众解释出它的基础技术原理,在当时而言会显得比较稀缺。我们也感到了一种责任,需要站出来,去把一些事情讲明白。”

传稻士社区也有同样的理念,考虑到直接读白皮书,由于太多术语和理论,限制了理解,因此做了详细解释,并讲述了关键人物和比特币开发简史。

吴忌寒

摘要(Abstract)

本文提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。虽然数字签名(Digital signatures)部分解决了这个问题,但是如果仍然需要第三方的支持才能防止双重支付(double-spending)的话,那么这种系统也就失去了存在的价值。

我们(we)在此提出一种解决方案,使现金系统在点对点的环境下运行,并防止双重支付问题。该网络通过随机散列(hashing)对全部交易加上时间戳(timestamps),将它们合并入一个不断延伸的基于随机散列的工作量证明(proof-of-work)的链条作为交易记录,除非重新完成全部的工作量证明,形成的交易记录将不可更改。最长的链条不仅将作为被观察到的事件序列(sequence)的证明,而且被看做是来自CPU计算能力最大的池(pool)。

只要大多数的CPU计算能力都没有打算合作起来对全网进行攻击,那么诚实的节点将会生成最长的、超过攻击者的链条。这个系统本身需要的基础设施非常少。信息尽最大努力在全网传播即可,节点(nodes)可以随时离开和重新加入网络,并将最长的工作量证明链条作为在该节点离线期间发生的交易的证明。

【稻穹思解读】:

这段摘要其实就是中本聪发邮件的正文,虽然很短,却把WHY、HOW讲得很清楚,可以快速了解到中本聪的思维模型和体系框架。

WHY 为什么需要电子现金系统?

在基于数字签名方式形成的电子现金系统中,必须依赖于银行等第三方的支持才能防止双花,这样就可能导致许多问题:1)系统是否稳定可靠依赖于第三方,难以扩展。2)中心化机构还存在信任危机。举个例子,在特定情况下,信用卡公司允许买方撤回或逆转交易,因此,卖方收到的交易不会是永久有效的。而比特币能够移除第三方,让支付变得更可靠,且是不可逆转的。

所以,本文提出了一套创新的方案:基于P2P网络的电子现金系统,能让收付方无须经过金融机构直接交易。

HOW 如何利用P2P网络解决双花问题呢?

本质上是个记账方式,用一张大家共同维护的大表来及时、准确地记录所有发生的交易。

怎么避免坏人利用规则来修改记账记录呢?

在美剧《硅谷》第五季最后一集中,劳里投资了一个“恶棍”团队,并对“Pied Piper“系统发动了“51%算力攻击”,希望控制 Pied Piper 的整个网络。具体请参考 美剧《硅谷》中的51%攻击是什么?用算力来控制 Web3 的应用会发生吗?

美剧《硅谷》第五季截屏

所谓51%攻击,就是说在分布式网络中,当坏人的算力超过总算力的51%了,坏人就能搞事情。也就是存在好人和坏人两派的算力博弈,假如所有人都是为了利益最大化而选择的,怎么去影响两派的算力博弈呢?

在中本聪的设计中,有两个关键点:1)把交易记录放到链上,需要有足够的算力才能获得记账权,给交易信息加上时间戳再经过哈希后,放到链上。2)以最长的链作为全网共识,如果一个链长,那说明记录的事件就多,需要的工作量就越大,代表这些链来自拥有最大CPU算力的工作证明。

只要P2P网络的主要CPU算力不合谋对网络发起攻击,自然就有最大的算力,那正常生成的链速度就会比攻击者更快,会生产最长的链,以及最多的事件记录。

如何避免大部分节点不会因为利益产生合谋来攻击呢?

作者通过概率计算,揭露了一个事实,靠合谋算力来攻击,成功率很低,而且获益窗口很短,就算能赚钱,也不如诚实地挖矿和记账赚得更多。

因此,他相信P2P网络中的大部分节点不会出现共同合谋操控链的生成的情况。诚实的节点将会生成最长的、超过攻击者的链条。

怎么保证节点不会因为故障或掉线造成系统不可靠的问题?

这其实是个容错问题,在分布式系统中是个难题。

在中本聪设计的系统中,网络中的消息按照最大努力进行广播,节点任意加入或者退出,并且在每次重新加入时,接受上次离开期间最长的工作量证明链,也就是具备完整的信息。

总之,因算力博弈,攻击者难以造假,且所有节点都有完备的信息,当然就不会出现因为虚假交易造成双花问题。而且,所有参与的节点出现故障也不会影响网络的稳定,这样也就难以被监管和被追踪。

名词解释:

1.数字签名(Digital signatures)

密码学签名是一个让人可以证明所有权的数学机制。对于比特币来说,一个比特币钱包和它的私钥通过一些数学魔法关联到一起。当你的比特币软件用对应的私钥为一笔交易签名,整个网络都能知道这个签名和已花费的比特币相匹配。但是,世界上没有人可以猜到你的私钥来窃取你辛苦赚来的比特币。

详情请参考 文科生也必须看得懂的非对称加密算法原理和简史,加密钱包中的公钥和密钥到底啥关系?

2.双重支付(double-spending)

双重支付(double-spending)问题是指如果一个不怀好意的用户试图将比特币同时支付给两个不同的收款人。比特币挖矿和块链将就两笔交易中那笔获得确认并被视为有效在网络上达成一致。

也就是说,一笔钱花了2次,其中有一次被确认,另一次当然就是诈骗。

举个例子来解释。

假如某攻击者花费一笔虚拟货币购买了一件商品,通过51%攻击使得该笔虚拟货币进行了2次花费,最终黑客既没有花费虚拟货币,也得到了相应商品,具体攻击流程如下:

  1. 黑客先向商家支付了10个虚拟货币。

  1. 同时,将这10个虚拟货币发送给了自己另一个账户。

  1. 当购买商品那笔交易被确认后,将会被打包区块中,这10个虚拟货币到了商家的账户,商家将商品按照约定发送给黑客。

  1. 此时,攻击者发起51%攻击,将步骤(2)中转到自己另一个账户的那笔交易打包进另一个非购买商品那条链上的区块。

在步骤(4)的区块之后重新组合一条链,由于黑客拥有超过全网其余矿工的算力,那此黑客将能组合出一条最长的合法链,而矿工也将从这条链后面继续挖矿,之前的区块就将被丢弃,商家账户收不到那10个虚拟货币。

3.随机散列(hashing)

Hash,一般译为“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。2001年,SHA-2发布,这个系列算法中包括目前应用最广的SHA-256算法,这也是比特币最终采用的哈希算法。这是当时被公认为最安全最先进的算法之一。

例如:用SHA-256 散列算法,可以把123456转化为一个256个字母的字符串,SHA-256(123456)=8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92,也可以把100万字的书,用这个方法来转化为一个256个字母的字符串。而且,在100万字的书中改一个标点符号,生成出来的256位字符结果差异就很大。

1.简介(Introduction)

互联网上的贸易,几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息。虽然这类系统在绝大多数情况下都运作良好,但是这类系统仍然内生性地受制于“基于信用的模式”(trust based model)的弱点。我们无法实现完全不可逆的交易,因为金融机构总是不可避免地会出面协调争端。而金融中介的存在,也会增加交易的成本,并且限制了实际可行的最小交易规模,也限制了日常的小额支付交易。并且潜在的损失还在于,很多商品和服务本身是无法退货的,如果缺乏不可逆的支付手段,互联网的贸易就大大受限。

因为有潜在的退款的可能,就需要交易双方拥有信任。而商家也必须提防自己的客户,因此会向客户索取完全不必要的个人信息。而实际的商业行为中,一定比例的欺诈性客户也被认为是不可避免的,相关损失视作销售费用处理。而在使用物理现金的情况下,这些销售费用和支付问题上的不确定性却是可以避免的,因为此时没有第三方信用中介的存在。

所以,我们非常需要这样一种电子支付系统,它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。杜绝回滚(reverse)支付交易的可能,这就可以保护特定的卖家免于欺诈;而对于想要保护买家的人来说,在此环境下设立通常的第三方担保机制也可谓轻松加愉快。

在这篇论文中,我们(we)将提出一种通过点对点分布式的时间戳服务器来生成依照时间前后排列并加以记录的电子交易证明,从而解决双重支付问题。只要诚实的节点所控制的计算能力的总和,大于有合作关系的(cooperating)攻击者的计算能力的总和,该系统就是安全的。

【解读】:

在第1节中,详细解释了创建数字货币的原因,为什么需要有一种点对点电子货币交易系统?

首先,中本聪提出了假设的用户痛点,也指出了比特币的应用场景。这就是比特币诞生的必要性。

现在的交易系统,在电子支付方面有4个问题:

1 增加了交易成本

金融中介处理交易有成本支出,并且它要谋求利润,因此增加了交易成本。银行的交易手续费、年费、第三方支付平台的手续费等都是这样的交易成本。

2 限制了最小交易规模

比如跨境转账、汇兑都有最小金额限制,股票交易有最小单位。

3 欺诈难以避免

由于交易是可逆的,有退款退货的情形。那么就能通过篡改信息,拿到退款后不退货,从而实现欺诈。

实际上这些欺诈中也有正常诉求,其实是难以完全避免的,各家电商都有一定比例。

4 个人隐私问题

在中心化交易网络中,平台为了避免卖家、买家之间的欺诈行为,做了很多工作来保障交易网络,其中就有获取用户信息这一项,包括手机号、住址、银行卡账户信息等。但这样,又带来了隐私问题,很多信息其实跟某些交易无关。隐私信息一旦泄露或被滥用,会有其他严重后果。

理想的电子现金系统应该具有哪些特征?

(1) 独立性。电子现金的安全性不应该依赖第三方中介。

(2) 安全性。要能防止欺诈。即便是小的漏洞,也可能造成巨大损失。

电子现金系统要能防止复制、重用以及伪造。比特币里有一个词叫“双花(double spending)”,指的就是把一笔钱花出去两次

(3) 隐私性。电子现金用户的隐私需要保护,其他人不应知道不必要的个人信息。

(4) 可转账。现金可以转账至其他用户。

(5) 现金可拆分。可以拆分为许多更小面值的现金。

中本聪提出的方案是什么?

1.它基于密码学原理而不基于信用,使得任何达成一致的双方,能够直接进行支付,从而不需要第三方中介的参与。

2.杜绝回滚(reverse)支付交易的可能,通过时间戳来按顺序记录完整信息账本,因为其难以被篡改,避免欺诈而造成双花。

3 基于点对点网络来记录和传播交易账本,通过允许单个节点与其他节点直接交互,每个用户都在传播用户交易信息,保证了系统的稳定性,随时接入的方便性。

2.交易(Transactions)

我们定义,一枚电子货币(an electronic coin)是这样的一串数字签名:每一位所有者通过对前一次交易和下一位拥有者的公钥(Public key) 签署一个随机散列的数字签名,并将这个签名附加在这枚电子货币的末尾,电子货币就发送给了下一位所有者。而收款人通过对签名进行检验,就能够验证该链条的所有者。

该过程的问题在于,收款人将难以检验,之前的某位所有者,是否对这枚电子货币进行了双重支付。通常的解决方案,就是引入信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验,以防止双重支付。

在每一笔交易结束后,这枚电子货币就要被造币厂回收,而造币厂将发行一枚新的电子货币;而只有造币厂直接发行的电子货币,才算作有效,这样就能够防止双重支付。可是该解决方案的问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造币厂的确认,而该造币厂就好比是一家银行。我们需要收款人有某种方法,能够确保之前的所有者没有对更早发生的交易实施签名。从逻辑上看,为了达到目的,实际上我们需要关注的只是于本交易之前发生的交易,而不需要关注这笔交易发生之后是否会有双重支付的尝试。为了确保某一次交易是不存在的,那么唯一的方法就是获悉之前发生过的所有交易。

在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布(publicly announced)[1] ,我们需要整个系统内的所有参与者,都有唯一公认的历史交易序列。收款人需要确保在交易期间绝大多数的节点都认同该交易是首次出现。

【解读】:

第2节先定义了电子货币,电子货币是就是一串数字签名。而电子货币的交易是通过对数字签名的核验来实现的。

为什么需要所有者和下一个拥有者的两个签名呢?

因为在区块链网络上交易,先要证明钱是你的,然后你还要证明这钱花出去后,钱归收款方了。所以,用交易哈希加上双方签名验证的一个记录,跟之前的记录吻合,就能对账。

另外,收款人如何确认该数字货币的所有者是否曾花过这笔钱?

其实很简单,列出所有该数字货币的参与者序列,这样一条交易链上就能分析发现。而且,这个完整交易链信息会通过广播方式来让所有人都知道。

为什么中本聪想到了这样的方案?

中本聪像给学生讲课一样,不厌其烦地告知了他的思维模型。(划重点!)

要避免双花问题,最简单的做法就是让一笔数字货币只能用一次,第二次当然也就花不出去了。

在中本聪的思想实验中,有一个虚拟货币的造币厂。

物理世界的造币厂

在“造币厂模型”中,有一个信得过的第三方权威,或者类似于造币厂(mint)的机构,来对每一笔交易进行检验,以防止双重支付。在每一笔交易结束后,这枚电子货币就要被造币厂回收,并发行一枚新的电子货币;而只有造币厂直接发行的电子货币,才算作有效,这样就能够防止双重支付。

采用这套方案,一个电子货币只能用一次,当然无法实现双花。问题在于,整个货币系统的命运完全依赖于运作造币厂的公司,因为每一笔交易都要经过该造币厂的确认,而该造币厂就好比是一家银行。

怎么办呢?

中本聪提出了更好的方案,在这个模型上做简化,去掉第三方。

他的思路是:为了确保避免存在的虚假交易,那么唯一的方法就是获悉之前发生过的所有交易。在造币厂模型里面,造币厂获悉所有的交易,并且决定了交易完成的先后顺序。如果想要在电子系统中排除第三方中介机构,那么交易信息就应当被公开宣布,所以需要整个系统内的所有参与者,都有唯一公认的历史交易序列。

假如在交易期间,绝大多数的节点都认同该交易是首次出现,考虑到合谋所需要的算力难度,这样的交易记录是真实的。那么,收款人就能够确保之前的所有者没有对更早发生的交易实施签名,当然也避免了被欺诈。

从某种意义上说,比特币实现了最早的智能合约。因为任何花费比特币的行为都可以看做是一个合约:其中一方提供一定数量的比特币并且约定好条款;另一方只能在提供满足这些条款的证据时,才能花费合约中被锁定的比特币。之所以称之为“智能”合约,也是因为它仅需要由比特币网络矿工来自动确认和执行。

比特币底层采用了一个很特别的交易模型设计,即 UTXO(Unspent Transaction Outputs) 模型。

每一个比特币交易主要包括两部分:输入记录和输出记录。

每条输出记录主要包括的信息:

  • 此输出中包含的比特币数量;

  • 一段脚本代码,通常称为锁定脚本;

每条输入记录主要包括的信息:

  • 对前一个交易输出部分的引用;

  • 一段脚本代码,通常称为解锁脚本;

假设有人成功发给我一个比特币,那么在链上就存在一条历史交易记录 TX_1。它的输出记录中有一条(记为 TX_1_OUT_1 )包含了数量为 1 的比特币以及一个只能由我的私钥才能“开启”的“锁”(锁定脚本)。也正是由于这把“锁”的存在,别人才无法使用这个比特币。

现在我想把这个比特币转给另外一个人,那么需要构建一个新的交易记录 TX_2。它的输入记录中包含了对之前交易输出 TX_1_OUT_1 的引用,以及一段由我的私钥签名过的“钥匙”(解锁脚本);输出记录(记为 TX_2_OUT_1 )中则包含了比特币数量 1,以及一个只有接收人才能“开启”的“锁”(另一个锁定脚本)。

这个新的交易 TX_2 被我发送给矿工,且只有通过了矿工对解锁脚本有效性的验证后,这笔交易才会被记录到链上账本中。此时也意味着我完成了一个接收+花费比特币的典型场景。

此时,输出 TX_1_OUT_1 由于被 TX_2 中的输入成功使用,会被系统被标记为已花出。如果尝试利用它再次构建交易,会被矿工认定为“双花”从而拒绝。与之相对,输出 TX_2_OUT_1 由于尚未被任何输入使用,故被称为未花费输出(即 UTXO)。

所以,可以这样比喻比特币的流转:每一个输入指向了前一个交易输出,当且仅当它能提供合适的“钥匙”打开前一个输出上的“锁”时,才能移动其中包含的比特币到新的输出。谁拥有输出的这个“钥匙”,谁就拥有其中的比特币。

3.时间戳服务器(Timestamp server)

本解决方案首先提出一个“时间戳服务器”。时间戳服务器通过对以区块(block)形式存在的一组数据实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样[2][3][4][5] 。显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一个链条(Chain)。

【解读】:

第3节解释了“时间戳服务器”。

时间戳,最早指的就是一个物理的橡胶戳,扣到一个文件上表示这个文件的发布要早于时间戳上的当前时间,以前发信用邮票,上面会盖上时间戳。

但是这里,其实是数字时间戳,就是拿到计算机生成的一个时间,给数据块加上时间标记,用于标识数据和时间的关系。

为了保证时间戳的权威性。传统的时间戳服务器都是采用了基于信任的中心化处理方案,由政府和公司信誉做背书。这个方案肯定是不适合比特币的。

比特币是在一个去中心化的网络上,确定交易的先后顺序是非常有挑战的事情。

这里讲述了时间戳服务器的实现原理。把当前数据块的哈希值打上时间戳后,发布到网络中。这就证明了在标识的时间下,这个数据是真实存在的。每一个时间戳对应的数据块中,包括了前一个数据块的时间戳随机散列值,这样,就形成了交易数据链。

经过 PoW 算力竞争,每过大概十分钟之后,下一个区块会被创建出来,让整个区块链的长度加一。区块链是一个单向的链条,这样,只要拿到一个区块的哈希,就能知道这个区块在区块链上的排序位置,就能确定它和另一个区块哪个在前哪个在后。只要包含在前面区块的交易,就认为比之后的交易出现的早。

不过,这里的这里的时间戳并不是精确的交易时间,只是为了方便大家知道里面的各个交易的一个大概发出的时间而已。比特币规定区块时间戳的误差允许在两小时范围之内。

而且,这个顺序跟交易真正的发起时间无关。同时区块顺序甚至也不一定跟区块的时间戳顺序一致,比特币区块链上允许出现在后面的区块的时间戳时间反而比之前的区块早。

为什么会这样设计呢?

首先,不能根据交易时间戳来确定。因为每个人的计算机的时间不一定准确,并且也不能防止造假。所以比特币的一笔交易对应的底层数据中,是不包含时间戳的。每个用户进行交易的时候,把交易签名后就会公布到网上。于是网上就会形成一个交易池,表示很多交易组成的没有任何排序的一个集合。

每个节点收集到足够的交易之后,会制作一个区块,区块是有时间戳的。由于网络传播信息不均匀,其他节点未必能同时看到这个区块,也无法就这个时间戳的准确性达成共识,所以区块时间戳其实也不适合作为判断交易先后的依据。

因此,这篇创世论文里面说的“时间戳”本质上是带有顺序值的区块哈希,为了保证区块的先后顺序。

4.工作量证明(Proof-of-Work)

为了在点对点的基础上构建一组分散化的时间戳服务器,仅仅像报纸或世界性新闻网络组一样工作是不够的,我们还需要一个类似于亚当•柏克(Adam Back)提出的哈希现金(Hashcash)[6] 。在进行随机散列运算时,工作量证明机制引入了对某一个特定值的扫描工作,比方说SHA-256下,随机散列值以一个或多个0开始。那么随着0的数目的上升, 找到这个解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。我们在区块中补增一个随机数(Nonce),这个随机数要使得该给定区块的随机散列值出现了所需的那么多个0。我们通过反复尝试来找到这个随机数,直到找到为止,这样我们就构建了一个工作量证明机制。只要该CPU耗费的工作量能够满足该工作量证明机制,那么除非重新完成相当的工作量,该区块的信息就不可更改。由于之后的区块是链接在该区块之后的,所以想要更改该区块中的信息,就还需要重新完成之后所有区块的全部工作量。

同时,该工作量证明机制还解决了在集体投票表决时,谁是大多数的问题。如果决定大多数的方式是基于IP地址的,一IP地址一票,那么如果有人拥有分配大量IP地址的权力,则该机制就被破坏了。而工作量证明机制的本质则是一CPU一票。“大多数”的决定表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。如果想要对业已出现的区块进行修改,攻击者必须重新完成该区块的工作量外加该区块之后所有区块的工作量,并最终赶上和超越诚实节点的工作量。我们将在后文证明,设想一个较慢的攻击者试图赶上随后的区块,那么其成功概率将呈指数化递减。另一个问题是,硬件的运算速度在高速增长,而节点参与网络的程度则会有所起伏。为了解决这个问题,工作量证明的难度(the proof-of-work difficulty)将采用移动平均目标的方法来确定,即令难度指向令每小时生成区块的速度为某一个预定的平均数。如果区块生成的速度过快,那么难度就会提高。

【解读】:

比特币的去中心化共识进程要求网络中的节点不断尝试将交易打包成“区块”。网络被设计为大约每十分钟产生一个区块,每个区块包含一个时间戳、一个随机数(Nonce)、一个对上一个区块的引用(即哈希)和上一区块生成以来发生的所有交易列表。这样,就创建出了一个持续增长的区块链,它不断地更新,从而能够代表比特币账本的最新状态。

问题是,每个节点都想要完成打包记账,从而获得奖励。谁能获得记账权呢?

只有提供了工作量证明的矿工才能获得记账权。

第4节解释了工作量证明的原理。中本聪提到了一个叫HashCash(哈希现金)的工作量证明方式。

1997年,亚当.贝克(Adam Back)发明了HashCash方法,不过,当时这个算法并不是用来奖励矿工,而是用于反垃圾邮件。

为什么要用这个办法反垃圾邮件呢?

那是在Web1时代,邮件是最主要的互联网应用,许多广告是通过发邮件来触达用户的。因为是未经用户允许的广告邮件,也被称为垃圾邮件。因为当时的技术还难以过滤,也不能拒收,很快就把容量不大的邮箱给占满了,删除这些邮件也耗费大量的精力。急需一个方式来解决这个问题。

亚当.贝克的垃圾邮件过滤方案原理很简单:只接受符合某种条件的邮件。

他的设计是:在发送邮件时,需要花费一定量的时间来做计算,解决一道密码题,并在邮件中附上正确答案。邮件接收方接受邮件时,先检查密码题的答案是否正确,如果不正确则认为是垃圾邮件,将其过滤掉。

具体实现方式,是需要寻找一个答案,能让基于内容+答案的计算,得出一个符合要求的哈希值(如以6个0开头的哈希值)。然后将答案附在邮件请求头。

对于邮件发送者来说,寻找答案没有捷径,只能暴力不断的计算;而对邮件接收者来说,只需进行一个哈希计算便可以验证邮件的有效性:如哈希值不符合条件,则邮件为垃圾邮件,忽略。

如果你只是发送一封或几封电子邮件,这个计算过程对你来说几乎是没有感知的。但如果你是一个恶意的垃圾邮件发送者,想要发送数以百万计的垃圾邮件,那么时间和处理的消耗就会突然变得巨大。所有这些计算消耗都需要电力,这样支付电费的很高,成本可能就不合算了。也就自然减少了垃圾邮件。

但是,每封邮件内容一样,如果一旦找到正确的哈希数字,是否可以一直使用它来群发邮件呢?

为了防止这个问题,Hashcash 要求哈希数字必须包含一个时间戳。它代表了这个答案是在什么时候被计算出来的,如果超过一定的时限,这个答案将作废。这样,即便答案正确,时间戳有问题,戳记也不是合法的。

具体来说,Hashcash 让机器在发邮件的时候,需要在发送邮件的数据头部里加入一个字符串“X-Hashcash” ,这个字符串长这个样子:

1:bits:date:resource:ext:salt:suffix

“X-Hashcash” 其实就是提交答案的戳记,它包括 7 个域:

1 - 版本号(版本 0 更简单,但是有一些局限性)。

bits - 声明的比特值。如果戳记没有真正地使用声明的前导零比特进行散列,那么它就是非法的。

date - 时间戳。可以认为当前时间之后的戳记以及那些在很久以前的戳记是非法的。

resource - 戳记是为哪个资源而生成。可能是一个电子邮件地址,但是也可能是一个 URI 或者其他命名的资源。

ext - 特定应用程序可能需要的扩展。任何附加的数据都可以放置在这里,但是,在到目前为止的使用中, 这个域通常是空的。

salt - 将该戳记与其他所有人为相同的资源在同一日期生成的戳记区别开来的随机因子(salt)。例如,两个不同的人可以合情合理地在同一天向我的同一个地址发送电子邮件。如果他们每个人都使用一个随机因子,那么完整戳记将是不同的。

suffix - 后缀是算法真正起作用的部分。假定给出了前 6 个域,为了生成一个通过期望数目的前导零数字进行散列的的戳记,发送者必须尝试很多连续的后缀值。

为啥这个反垃圾邮件的算法,用了 Cash 这个词呢?

因为 HashCash 中,采用了“造币厂”的隐喻,来代表“代价函数(cost-function)”生成一个通证。你想一下,在生活中,造出一枚硬币,或者印出一张钞票,是不是也是一件不容易的事情?但是验证钞票的真伪,其实要比造出钞票,容易许多。

代价函数的特点就是,要计算出结果工作量较大,但是要验证起来很容易。具体而言,就是代价函数让发起请求的人,算出一个“token”出来。

2004 年,Hal Finney 基于贝克的 HashCash, 创造了可重复使用的工作量证明(RPOW),也就是现在区块链中工作证明的模型。

1) 比特币采用 SHA256 做哈希运算,平均的工作量与0比特位的数量指数级增长。

SHA256 算法是输出256位的hash函数,目前还未出现针对 SHA256 算法的有效破解方法。

工作量证明过程中不断尝试变换nonce进行SHA256的计算,为了找到一个指定前面有一定数量000的值(比如:0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)。

前面要求的0越多,那么表示计算难度越大。这也是比特币难度一直在提高的原因。

2) 为了时间戳的考虑,在计算每一个块的哈希值的时候,增加了一个随机数(nonce)。随机数每次加1,生成哈希值,检查是否满足前缀是若干个0的要求。CPU需要做大量计算才能得到满足要求的解。如果区块的内容修改,那就需要重新计算,找到满足条件的哈希值。

具体实现时,在bitcoin中,一个区块由区块头和区块中包含的交易列表组成(大小为1M)。

区块头大小为80字节,由这些元素组成:

4字节的版本号。

32字节的上一个区块的散列值。

32字节的Merkle Root Hash,体现区块头和区块中的交易的关系,区块中包含的交易列表,通过Merkle Tree算法生成Merkle Root Hash。

4字节的当前难度值。

4字节的随机数(nonce)。

3) 工作量证明还解决了一个“集体决策”的“大多数”问题。在网络中,到底用什么来代表“大多数”?如果用一个IP地址代表一票,那有很多IP地址的人可以操纵结果。于是作者采用了“一个CPU一票”的方式来代表大多数的意见。因为链的生成是需要工作量的,于是最长的那一条链,必然就拥有最多的工作量,也就是代表大多数人的意见。而工作量其实就是由CPU来计算的,于是这样就落实了一个CPU一票的精神。这里作者的逻辑就是,选择一个相对有难度的指标,计算工作量,然后把大多数人的工作量攒在一起,这就形成了一个共同的意见。不过作者没有料到的是,早就已经用GPU和专门的芯片来替代CPU了。

可以看到,中本聪在设计比特币的时候,就是想用CPU分散的方式,形成没有人能操纵网络的结果。

但比特币发展至今,由于挖矿成本越来越高,越来越多的算力掌握在少数人的手里,但由于其严密的设计,不断增加的难度,要想实现51%的攻击,依然是非常难的事情。这一点,可以在第11节的概率计算中说得更明白。

4) 如果大部分的CPU算力在好人手里,那大家齐心协力一起算,工作的积累就会很快,链的增长速度超过其他链。如果有攻击者想要修改一个过去的块,则要把这个块之后的其他所有块都重新算一遍。考虑到新区块还在继续产生,这样既要补老作业,又要快速完成新作业,所需要的算力是非常大的,而且难度值还会动态调整,让攻击成功率变得极低。

5) 另外,出于控制比特币总量的综合考虑,块增加的速度会不断调整,如果增加速度太快了,计算工作量的难度会增加。

难度值(difficulty)最为关键的作用就是决定了比特币网络中,矿工需要经过多少次hash运算才能获得记账权生成区块,进而获得区块奖励(铸币交易奖励最开始是 50 个比特币,每21万个区块(大约四年)削减一半,现在是 6.25 比特币)。

比特币网络中,区块产生的平均速率是10分钟一个,每经过2016个区块后,节点按照公式:新难度值 = 旧难度值 * ( 过去2016个区块花费时长 / 20160 分钟 )调整难度值。以此来控制区块的平均产生时间,如果产生区块速率比10分钟快,那么增加难度值,比10分钟慢就降低难度。

所有,比特币挖矿所需的算力并不是无意义的资源浪费,而是维护网络安全、保证正常交易、产出比特币的前提。而被诟病的效率问题(至少十分钟的交易确认时间)在一定意义也是为了安全。

当然,基于工作量证明的机制,让现在运营比特币网络的能耗确实过于浪费资源,于是有新的挖矿机制开发出来,以太坊就是从 PoW 挖矿转到了权益证明 PoS(Proof of Stake)挖矿。

要让比特币正常的运作,破解难度较大的工作量证明是前提,这样,那些试图创建欺骗性交易链的人才无法成功,因为要拿到51%的算力,成本是巨大的,还不如老老实实挖矿或记账赚钱。

诚实赚钱是否获利更多?跟第6节“激励”有关。

5.网络(Network)

运行该网络的步骤如下:

1) 新的交易向全网进行广播;

2) 每一个节点都将收到的交易信息纳入一个区块中;

3) 每个节点都尝试在自己的区块中找到一个具有足够难度的工作量证明;

4) 当一个节点找到了一个工作量证明,它就向全网进行广播;

5) 当且仅当包含在该区块中的所有交易都是有效的且之前未存在过的,其他节点才认同该区块的有效性;

6) 其他节点表示他们接受该区块,而表示接受的方法,则是在跟随该区块的末尾,制造新的区块以延长该链条,而将被接受区块的随机散列值视为先于新区快的随机散列值。

节点始终都将最长的链条视为正确的链条,并持续工作和延长它。如果有两个节点同时广播不同版本的新区块,那么其他节点在接收到该区块的时间上将存在先后差别。当此情形,他们将在率先收到的区块基础上进行工作,但也会保留另外一个链条,以防后者变成最长的链条。该僵局(tie)的打破要等到下一个工作量证明被发现,而其中的一条链条被证实为是较长的一条,那么在另一条分支链条上工作的节点将转换阵营,开始在较长的链条上工作。所谓“新的交易要广播”,实际上不需要抵达全部的节点。只要交易信息能够抵达足够多的节点,那么他们将很快被整合进一个区块中。而区块的广播对被丢弃的信息是具有容错能力的。如果一个节点没有收到某特定区块,那么该节点将会发现自己缺失了某个区块,也就可以提出自己下载该区块的请求。

【解读】:

第5节可以看成是分布式网络中各节点的运作程序,也就是区块链的运行机制——产生全网公认的交易序列的共识机制。

要理解本节的重要性,需要先明白分布式网络的容错问题。关于分布式网络的容错性,有一个划时代的好问题——拜占廷将军问题(Byzantine Generals Problem),也被称为“拜占庭容错”。

提出这个问题的莱斯利·兰波特(Leslie Lamport)因其在分布式系统方面的工作在2013年获得了图灵奖。

莱斯利·兰波特

为什么叫“拜占廷将军问题”这个名字呢?这跟描述这个问题的故事有关。

1982年,兰波特说了个很简单的故事,却困扰了计算机科学家们数十年。

拜占庭帝国即东罗马帝国,位于现在的土耳其,因为拥有巨大的财富,周围10个邻邦垂诞已久,对其发起了攻击。

强大的拜占庭将军协商一同围攻一个敌人。n个将军包围着这个敌人,他们需要协商一个一致的时间,同时对敌人发起总攻,才能确保战争的胜利。但其中一些背叛的将军可能会通过发送错误的消息造成混乱,干扰忠诚的将军同时发起总攻。如果同时发起进攻的将军数量少于m个,可怕的后果就是,拜占庭将军不仅不足以歼灭敌人,反而有可能被敌人歼灭。怎样才能保证至少有m个将军在同一时间一起发起进攻呢?

拜占庭将军问题,实际就是解决公共P2P网络如何实现信任。

现实世界中,在互联网世界由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为,是有可能发生的。

中本聪设计的比特币系统的解决方案有两个关键:

1、工作量证明;

同一时间只有一个节点记账(谁算对了谁记账,解决了记账权的问题),那如何保证他记账是准确的呢?因为所有流水帐是公开透明的,大家都能在网络上查到。如果某个叛徒想恶意破坏,除非有51%的“同盟”一起帮他。

2、奖励机制。

奖励:如何能保证节点都来记账呢?系统给出奖励,谁来记账给谁奖励比特币(记账奖励),谁验证交易给谁验证奖励(验证奖励),这样节点就有动力去不停的记账和验证了,这样就共同构建了一个健壮的比特币网络。

在比特币网络中,任何节点都可以出错,不影响比特币体系的正常工作。

虽然在分布式网络的工作步骤中,有两个内容需要向全网进行广播,但并不要求全网的节点都接收到。一个交易信息只要抵达足够多的节点,就可以被整合进一个区块中。即便一个区块没有被某些节点接收到,它也可以在后续被该节点请求下载。这样的容错设计使得网络能稳定运行,在同一时间,只要有足够的节点在工作就可以了。

怎么能确保网络上足够多的节点呢?

这就需要有足够的激励。

6.激励(Incentive)

我们约定如此:每个区块的第一笔交易进行特殊化处理,该交易产生一枚由该区块创造者拥有的新的电子货币。这样就增加了节点支持该网络的激励,并在没有中央集权机构发行货币的情况下,提供了一种将电子货币分配到流通领域的一种方法。这种将一定数量新货币持续增添到货币系统中的方法,非常类似于耗费资源去挖掘金矿并将黄金注入到流通领域。此时,CPU的时间和电力消耗就是消耗的资源。

另外一个激励的来源则是交易费(transaction fees)。如果某笔交易的输出值小于输入值,那么差额就是交易费,该交易费将被增加到该区块的激励中。只要既定数量的电子货币已经进入流通,那么激励机制就可以逐渐转换为完全依靠交易费,那么本货币系统就能够免于通货膨胀。

激励系统也有助于鼓励节点保持诚实。如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的CPU计算力,那么他就面临一个选择:要么将其用于诚实工作产生新的电子货币,或者将其用于进行二次支付攻击。那么他就会发现,按照规则行事、诚实工作是更有利可图的。因为该等规则使得他能够拥有更多的电子货币,而不是破坏这个系统使得其自身财富的有效性受损。

【解读】:

第6节介绍了激励机制,这是P2P网络的重点问题。

只要是去中心化,就会面对激励机制问题。为什么呢?

因为你让别人来干事情,首先需要回答,我为什么要做这些事情,对我有什么好处?

另外,总有人想通过不诚实的操作来快速搞钱,而一套优秀的激励机制能来激励大家好好干,别搞事。假如不诚实的操作能得到更多激励,每个人根据自己的利益最大化独立行事,最后这个网络就会被破坏。

如果一个攻击者组织了超过诚实节点的算力,就面临这个选择:要么选择用于欺诈其他所有人,于是可以用双花来搞钱,但是也不能天天搞。要么就是用来挖新币。假如算下来,是挖新币划算,对自己有利。

有了 PoW 和激励机制,也就出现了矿工经济模型。

比特币对做记账工作的人提供了激励,只要节点诚实记账,就可以获得比特币奖励,这个奖励包括两部分:新增发的比特币和交易费。激励机制使得节点更倾向于诚实地记账,而不是篡改账目,破坏系统。

由于比特币价格在近十多年上涨了上万倍,比特币挖矿一直都很有吸引力。已经有大量的算力被投入到新区块的解锁中,他们都希望因此获得比特币作为回报。与此同时,这种激励机制也有助于节点保持诚信,与颠覆这个系统相比,诚实工作产生的收益反而是更高的。

矿机

这个激励系统创建了一个共享经济系统。用户将自己手中的计算资源加入比特币网络,为比特币交易网络的正常运行提供保障,他们也获得了报酬。这些记账者,也就是矿工,成为了比特币的忠实拥护者,忠诚信仰者。这是比特币冷启动后、快速扩散到全球的一个关键因素。

PoW 本质上是一种算力的公开比赛,所有矿工公平竞争一个区块的挖矿权,每个矿工遵循一个规则,对候选的区块进行Hash运算,当运算Hash值小于当前难度系数,就认为该矿工提供的候选区块满足条件,可以广播到全网验证并确认。区块链以最长的确认的区块主链作为链的基础,分叉会被抛弃,因此谁最先真实计算出来这个块的Hash,谁就成为这个块的矿工,矿工享受这个出块周期的收益,获得特点数量的价值奖励。

强者胜出它的核心是Hash运算,谁的Hash运算更快,谁就更有可能挖掘出新的区块,获得更多的经济利益。所以,在Bitcoin的发展过程中,挖矿设备不断在更新换代,其动机就是为了更快地进行Hash运算。

回顾挖矿历史,比特币挖矿总共经历了五个时代:CPU挖矿→GPU挖矿→FPGA挖矿→ASIC挖矿→大规模集群挖矿。挖矿芯片更新换代的同时,带来的挖矿速度变化是:CPU(20MHash/s)→GPU(400MHash/s)→FPGA(25GHash/s)→ASIC(3.5THash/s)→大规模集群挖矿(3.5THash/s*X)

而本文译者吴忌寒在2013年所创建的比特大陆,在这场挖矿“军备”大赛中大赚特赚。在比特币挖矿公用ASIC芯片方面独居鳌头。按2022年10月27日收入计,比特大陆是全球最大的基于ASIC的加密货币矿机公司,占全球74.5%的市场份额。

大规模集群挖矿

由于挖矿芯片也能用于人工智能,现在比特大陆更是将本身定位为人工智能芯片公司,专门设计AI芯片,展露其更大的野心。

7. 回收硬盘空间(Reclaiming Disk Space)

如果最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。为了同时确保不损害区块的随机散列值,交易信息被随机散列时,被构建成一种Merkle树(Merkle tree)[7] 的形态,使得只有根(root)被纳入了区块的随机散列值。通过将该树(tree)的分支拔除(stubbing)的方法,老区块就能被压缩。而内部的随机散列值是不必保存的。

不含交易信息的区块头(Block header)大小仅有80字节。如果我们设定区块生成的速率为每10分钟一个,那么每一年产生的数据位4.2MB。(80 bytes * 6 * 24 * 365 = 4.2MB)。2008年,PC系统通常的内存容量为2GB,按照摩尔定律的预言,即使将全部的区块头存储于内存之中都不是问题。

【解读】:

第7节说的是怎样卸掉历史包袱的设计。

随着网络的不断扩张,比特币交易的处理速度可能会减慢。如果区块一直增长,会不会占有太多的磁盘空间?

比特币的创造者也预料到了“修剪”区块链的必要性,设计了磁盘回收机制,通过在merkle树中删除分支以节省存储空间。

具体原则是抛弃部分老的交易数据。

具体方法就是,如果最新交易已经在足够多的块里,更早的交易数据可以丢弃,以节省存储空间,但是为了不影响哈希值的结果,交易以Merkle树的方式存储,在区块中仅存储了根哈希值。其下的子节点可以直接裁剪掉,不需要存储。

然而,这种方法在实际应用过程中存在很多问题,因为没有人能够保证需要压缩的区块里不存在对于其余区块来说非常重要的信息。所以,现在还没执行这样的操作。

目前,如今,完整的下载比特币所有的区块数据,也就是运行一个全节点,需要200GB以上的空间,但这对动辄上T的硬盘而言,存储量不算太大,这仍然是一个低优先级问题。

名词解释:

Merkle树

Merkle树也叫哈希树,是密码学里常用的数据结构。这种树的每个叶子节点,都是某个数据块的哈希值;每个非叶子节点,都是子节点的哈希值。所以这就是一个层层向上哈希归并的数据结构,数据的完整性层层锁定,底层(叶子节点)数据的任何变动,都会逐级向上传递到其父节点,一直到Merkle树的根节点使得根节点的哈希值发生变化。

区块链中每个区块都会有一个 Merkle 树,它从叶子节点(树的底部)开始,一个叶子节点就是一个交易哈希。叶子节点的数量必须是双数,但是并非每个块都包含了双数的交易。如果一个块里面的交易数为单数,那么就将最后一个叶子节点(也就是 Merkle 树的最后一个交易,不是区块的最后一笔交易)复制一份凑成双数。从下往上,两两成对,连接两个节点哈希,将组合哈希作为新的哈希。新的哈希就成为新的树节点。重复该过程,直到仅有一个节点,也就是树根。根哈希然后就会当做是整个块交易的唯一标示,将它保存到区块头,然后用于工作量证明。

8.简化的支付确认(Simplified Payment Verification)

在不运行完整网络节点的情况下,也能够对支付进行检验。一个用户需要保留最长的工作量证明链条的区块头的拷贝,它可以不断向网络发起询问,直到它确信自己拥有最长的链条,并能够通过merkle的分支通向它被加上时间戳并纳入区块的那次交易。节点想要自行检验该交易的有效性原本是不可能的,但通过追溯到链条的某个位置,它就能看到某个节点曾经接受过它,并且于其后追加的区块也进一步证明全网曾经接受了它。

当此情形,只要诚实的节点控制了网络,检验机制就是可靠的。但是,当全网被一个计算力占优的攻击者攻击时,将变得较为脆弱。因为网络节点能够自行确认交易的有效性,只要攻击者能够持续地保持计算力优势,简化的机制会被攻击者焊接的(fabricated)交易欺骗。那么一个可行的策略就是,只要他们发现了一个无效的区块,就立刻发出警报,收到警报的用户将立刻开始下载被警告有问题的区块或交易的完整信息,以便对信息的不一致进行判定。对于日常会发生大量收付的商业机构,可能仍会希望运行他们自己的完整节点,以保持较大的独立完全性和检验的快速性。

【解读】:

在第8节,中本聪提出了一种折衷优化策略,让比特币实用性更强,也提出了防止攻击策略。

由于比特币网络中所有产生的交易都要打包进区块中,一个区块中包含几百上千笔交易是很常见的。由于比特币的去中心化特性,网络中的每个节点必须是独立的,也就是每个节点必须存储一个区块链的完整副本

如今,完整的下载比特币所有的区块数据,也就是说,运行一个全节点,需要200GB以上的空间。

问题来了,假如验证一个交易的有效性,下载和存储数据就有这么高的门槛。必然会限制应用。怎么办呢?

中本聪早就预见到了这种情况,他提出了一个巧妙的简化方法,比特币的各个节点可以没有全网节点的所有信息的情况下,验证支付的有效性,这样可以节省资源与空间。节点只需要存一份最长链的节点的块头数据即可。而如果想要获得最长的头节点,只需要向网络节点请求,直到得到最长的链即可。这样一来,节点就获得Merkle树的结构,知道一个交易被时间戳打包到哪个块中。节点自己无法验证这笔交易,但是知道这笔交易在链上的具体位置,可以确认网络节点已经接受了这笔交易,而且后续的块更是进一步确认了这笔交易。

既然做了简化,必然会有代价,所以这种验证在安全性上会有一些折扣。

正常情况下,只要诚实节点控制了网络,验证就是靠谱的。但是如果攻击者拥有更多的算力,这种验证就比较弱。如果攻击者拥有更多的算力,那就可以伪造出交易记录。

怎么避免被攻击呢?

中本聪提出了应对攻击的策略,先警告,再增强验证。如果节点发现无效区块,就会发出警告,让比特币客户端软件下载所有的节点数据,对不一致的区块进行验证。对于频繁交易的商业应用,通常会下载全部数据,这样验证更安全,也更快。

名词解释:

交易确认

交易确认意味着一笔交易已经被网络处理且不太可能被撤销。当交易被包含进一个区块时会收到一个确认,后续的每一个区块都对应一个确认。对于小金额交易单个确认便可视为安全,然而对于比如1000美元的大金额交易,等待6个以上的确认比较合理。每一个确认都成指数级地降低交易撤销的风险。

9.价值的组合与分割(Combining and Splitting Value)

虽然可以单个单个地对电子货币进行处理,但是对于每一枚电子货币单独发起一次交易将是一种笨拙的办法。为了使得价值易于组合与分割,交易被设计为可以纳入多个输入和输出。一般而言是某次价值较大的前次交易构成的单一输入,或者由某几个价值较小的前次交易共同构成的并行输入,但是输出最多只有两个:一个用于支付,另一个用于找零(如有)。

需要指出的是,当一笔交易依赖于之前的多笔交易时,这些交易又各自依赖于多笔交易,但这并不存在任何问题。因为这个工作机制并不需要展开检验之前发生的所有交易历史。

【解读】:

第9节讲的是比特币支付中,如何把一笔钱拆开使用,或者把不同币值的钱组合起来使用。

比特币交易的处理单位,比特币的交易并不是一枚比特币一次交易,而是可以无限切割、无限组合的

在实际交易中,可以将比特币划分成更小的单位——Bit,它代表比特币可分割的最小单位,是一个比特币的十亿分之一。1聪 = 0.000,000,01 比特币。

不过,现在大家都用 SAT(聪)来替代Bit,这是对中本聪(Satoshi)的致敬,也避免了Bit的误解。

例如,一笔交易的金额可以是2.00100203枚比特币。

如果将来平均单笔交易规模减小到一定程度时,甚至可以拆分到更小的单位。

为什么需要拆解为这么小的单位呢?

中本聪的铁粉和比特币的早期贡献者哈尔·芬尼曾说:“我估计目前全球家庭财富总额在100万亿美元到300万亿美元之间。比特币总共有2100万枚,那么每枚比特的价值约为1000万美元。”,按1000万美元的十亿分之一来说,1聪也就是对应1美分。当然,芬尼过于乐观了,在比特币之后,出现了上万种虚拟货币,计算模型当然也就变了。

许多人印象中,以为比特币是一个虚拟物品,就好像是一个字符串,或者一个NFT“小图片”,对其能被无限分割,感到不解。

其实,每枚比特币并不对应到一个虚拟物品,比特币对应的资产是账簿。

比特币采用 UXTO 的方式记账,即所有未花费的交易输出是用户所拥有的钱。在比特币记账系统中,包含交易输入和交易输出两部分,可以类比为一个人的收入和支出。

为了支持币值的拆分与合并,一笔交易支付可以包含多个输入与输出。比如,我得到一大笔钱,要么这笔钱是一次性全额付给我的,这是一个单一的输入,要么是分多期每期小额付给我的,这是多次小额的输入。而这笔钱的输出有两种,一种就是支付出去,不管我足额支付,还是不足额支付后续继续补齐,都算是支付出去,输出这笔钱;而另一种,就是对方给我多了,我给对方找零,也是从我这输出出去。这种就是支付加找零两种行为。

对于支付中“扇出”的情况,作者认为没有必要把交易的所有历史记录抽取出来,因为不影响交易。

由此可以看出比特币记账方式的优点有:一,交易可追溯,在比特币记账系统中,每一笔交易输入都有来源可以追溯,

名词解释

扇出就是指一笔交易依赖与多笔交易,然后这些交易又有更多的依赖关系,如此级联。

扇入(fan-in)和扇出(fan-out),这两个本来是指电子元件的输入端和输出端的结构,在数字电路中,如果一个电路门,需要依靠其他门的输出作为输入,就会称为“扇入(fan-in)”,如果一个电路门的信号,输出到其他门作为输入,就叫“扇出(fan-out)”。

在软件领域里面,扇出(fan-out)是一个模块调用多个模块的形式,扇入(fan-in)就是多个模块调用一个模块。就是说,当一笔交易依赖其他几笔交易时,比较形象的就像一个模块在调用几个模块,所以它用了扇出(fan-out)这个词。

10.隐私(Privacy)

传统的造币厂模型为交易的参与者提供了一定程度的隐私保护,因为试图向可信任的第三方索取交易信息是严格受限的。但是如果将交易信息向全网进行广播,就意味着这样的方法失效了。但是隐私依然可以得到保护:将公钥保持为匿名。公众得知的信息仅仅是有某个人将一定数量的货币发所给了另外一个人,但是难以将该交易同特定的人联系在一起,也就是说,公众难以确信,这些人究竟是谁。这同股票交易所发布的信息是类似的,股票交易发生的时间、交易量是记录在案且可供查询的,但是交易双方的身份信息却不予透露。作为额外的预防措施,使用者可以让每次交易都生成一个新的地址,以确保这些交易不被追溯到一个共同的所有者。但是由于并行输入的存在,一定程度上的追溯还是不可避免的,因为并行输入表明这些货币都属于同一个所有者。此时的风险在于,如果某个人的某一个公钥被确认属于他,那么就可以追溯出此人的其它很多交易。

【解读】:

第10节说明了比特币交易信息的隐私模型。在比特币系统中,任何一个人都可以查询到一个公钥的比特币资产及交易历史,因为比特币的每笔交易都是要向全网广播的。但一个公钥并没有其他任何身份信息,如姓名、身份证、手机号等。没有人或机构能够查询到一个人的比特币资产,也无法查询到他做的交易。除非他这个身份所关联的公钥被人知道。

这个机制出现了如下结果:

1)公众得知的信息仅仅是有某个人将一定数量的货币发所给了另外一个人,但是难以将该交易同特定的人联系在一起,也就是说,其他人无法知道交易双方究竟是谁。

2)如果只有公钥,即便知道这个账户可能会被用于洗钱或者犯罪,监管机构对交易是无法监管的。因此,目前在很多数字资产交易所,需要交易者登记个人真实信息,也就是KYC(Know Your Customer),这样才符合政府监管的需要。

隐私是加密货币交易最具价值的优势所在。而事实证明,比特币并不像很多用户希望的那样具有较高的私密性,这就催生了更多以隐私为中心的竞争币的诞生。

但是,这样做的用户体验不够好,如果用户忘记了密码,就永远无法找回私钥,那么资产将永远冻结。在比特币系统里面,没有忘记密码功能,不能通过提供身份证明来重置密码。

比特币白皮书中还提到,用户可以采用其他方式防止被追踪,每一笔交易应该生成一对新的公私钥对,这样就不会在不同的交易中,定位到相同的身份。

对于多笔输入交易的情况,关联到一个身份不可避免。这样会带来一个风险,如果一个公钥被对应到某一身份,那该公钥对应到的其他的交易,也能对应到同一个人。

粉尘攻击,就是这样做的,通过赠送小额数字货币,在其被合并支付的时候,可以被追踪,通过多笔交易,就能从公钥地址推测一个人的真实身份。比如,某个人用带有粉尘货币的加密货币买了NFT,后来在Twitter的账号上挂上这个NFT。

具体详情可以参见粉尘攻击。

11.计算(Calculations)

设想如下场景:一个攻击者试图比诚实节点产生链条更快地制造替代性区块链。即便它达到了这一目的,但是整个系统也并非就此完全受制于攻击者的独断意志了,比方说凭空创造价值,或者掠夺本不属于攻击者的货币。这是因为节点将不会接受无效的交易,而诚实的节点永远不会接受一个包含了无效信息的区块。一个攻击者能做的,最多是更改他自己的交易信息,并试图拿回他刚刚付给别人的钱。诚实链条和攻击者链条之间的竞赛,可以用二叉树随机漫步(Binomial Random Walk)来描述。成功事件定义为诚实链条延长了一个区块,使其领先性+1,而失败事件则是攻击者的链条被延长了一个区块,使得差距-1。攻击者成功填补某一既定差距的可能性,可以近似地看做赌徒破产问题(Gambler’s Ruin problem)。假定一个赌徒拥有无限的透支信用,然后开始进行潜在次数为无穷的赌博,试图填补上自己的亏空。那么我们可以计算他填补上亏空的概率,也就是该攻击者赶上诚实链条,如下所示[8] :

p = 诚实节点找出下一个区块的概率

q = 攻击者找出下一个区块的概率

qz = 攻击者最终消弭了z个区块的落后差距

假定p>q,那么攻击成功的概率就因为区块数的增长而呈现指数化下降。由于概率是攻击者的敌人,如果他不能幸运且快速地获得成功,那么他获得成功的机会随着时间的流逝就变得愈发渺茫。那么我们考虑一个收款人需要等待多长时间,才能足够确信付款人已经难以更改交易了。我们假设付款人是一个支付攻击者,希望让收款人在一段时间内相信他已经付过款了,然后立即将支付的款项重新支付给自己。虽然收款人届时会发现这一点,但为时已晚。收款人生成了新的一对密钥组合,然后只预留一个较短的时间将公钥发送给付款人。这将可以防止以下情况:付款人预先准备好一个区块链然后持续地对此区块进行运算,直到运气让他的区块链超越了诚实链条,方才立即执行支付。当此情形,只要交易一旦发出,攻击者就开始秘密地准备一条包含了该交易替代版本的平行链条。然后收款人将等待交易出现在首个区块中,然后在等到z个区块链接其后。此时,他仍然不能确切知道攻击者已经进展了多少个区块,但是假设诚实区块将耗费平均预期时间以产生一个区块,那么攻击者的潜在进展就是一个泊松分布,分布的期望值为:

当此情形,为了计算攻击者追赶上的概率,我们将攻击者取得进展区块数量的泊松分布的概率密度,乘以在该数量下攻击者依然能够追赶上的概率。

化为如下形式,避免对无限数列求和:

写为如下C语言代码:

#include <math.h> double AttackerSuccessProbability(double q, int z) { double p = 1.0 - q; double lambda = z * (q / p); double sum = 1.0; int i, k; for (k = 0; k <= z; k++) { double poisson = exp(-lambda); for (i = 1; i <= k; i++) poisson *= lambda / i; sum -= poisson * (1 - pow(q / p, z - k)); } return sum; }

对其进行运算,我们可以得到如下的概率结果,发现概率对z值呈指数下降。

当q=0.1时 z=0 P=1.0000000 z=1 P=0.2045873 z=2 P=0.0509779 z=3 P=0.0131722 z=4 P=0.0034552 z=5 P=0.0009137 z=6 P=0.0002428 z=7 P=0.0000647 z=8 P=0.0000173 z=9 P=0.0000046 z=10 P=0.0000012 q=0.3 z=0 P=1.0000000 z=5 P=0.1773523 z=10 P=0.0416605 z=15 P=0.0101008 z=20 P=0.0024804 z=25 P=0.0006132 z=30 P=0.0001522 z=35 P=0.0000379 z=40 P=0.0000095 z=45 P=0.0000024 z=50 P=0.0000006

求解令P<0.1%的z值:

为使P<0.001,则 q=0.10 z=5 q=0.15 z=8 q=0.20 z=11 q=0.25 z=15 q=0.30 z=24 q=0.35 z=41 q=0.40 z=89 q=0.45 z=340

【解读】:

第11节看起来很难懂,主要是讲述了比特币的防御机制,推演了攻击者成功的概率,当比特币系统运行的时间越长,区块链越长,攻击者的成功概率指数级下降的,无限趋近于零

中本聪还写了C语言代码,通过对攻击者的成功攻击概率进行计算,用数学证明了比特币具有安全性的原因。让人信服。

确实,迄今为止,还没有人成功实现对比特币系统的攻击。

中本聪认为,攻击者要让错误的账本被接纳,不仅算力要强,还必须行动迅速。否则就会落后于其他节点,那么其逆转交易的可能性几乎为零。

最坏的情况是,如果攻击者生成区块链的速度大于诚实节点,系统也不是可以随意更改的,例如凭空捏造一枚币,或者侵占他人钱币,这些是做不到的。网络节点不会接受这样的交易,诚实节点永远不会接受包含这样的交易的块。攻击者只能修改自己的交易,把花出去的钱,改回来。也就是通过双花来诈骗。

2018年5月,比特币黄金(BTG,Bitcoin Gold)区块链遭受了51%的首次攻击,损失超过1800万美元。BTG是比特币协议的一个分支,但是它没有使用SHA256共识算法,而是利用Equihash算法的一种变体(Equihash 144、5或“ Zhash”),这样更方便用GPU进行挖掘。Bitcoin Gold的创造者认为,创建一个可以用GPU(而不是ASIC设备)开采的比特币分叉会更加去中心化。

黑客控制了BTG网络上51%以上的算力,控制算力期间,把一定数量的BTG发给黑客自己在交易所的钱包,将在分支A上记账。同时,又把这些BTG发给另一个黑客所控制的钱包,将在分支B上记账。

等在分支A上的交易被确认后,黑客立马卖掉BTG,拿到现金。随后,攻击者在分支B上进行挖矿,由于其控制了51%以上的算力,很快分支B的长度就超过了分支A的长度,分支B就会成为主链,分支A上的交易就会被回滚恢复到上一次的状态。攻击者之前换成现金的那些BTG又回到了自己手里,造成了交易所的损失。这样,攻击者就凭借50%以上的算力控制,实现了同一笔加密货币的“双花”。

BTG 当时是全球第27大加密货币,流通市值为 50 亿人民币。BTG 还被要求赔偿交易所 Bittrex 的损失。从那时起,BTG 的流通市值增长就慢下来了,目前在加密货币中排名 108 名。

看起来,没有沿用中本聪的算法是在这次攻击遭遇损失的原因之一,为什么BTG要修改算法呢?

据 BTG 的联合创始人雷戈霍说,BTG 社区只是想以它认为更接近中本聪在白皮书中设想的方式“一个CPU,一张门票”来实现比特币。它是为日常使用而设计的,允许个人使用 GPU 进行开采。所以,这个 Equihash 算法把 ASIC 矿机拒之门外,让其不能在 BTG 网络上挖矿。

遵循白皮书的原意,可以看成原教旨主义者,显然, BTG 在激励的万币齐发的竞争中,光靠这一点并不能成功。

12.结论(Conclusion)

我们在此提出了一种不需要信用中介的电子支付系统。我们首先讨论了通常的电子货币的电子签名原理,虽然这种系统为所有权提供了强有力的控制,但是不足以防止双重支付。为了解决这个问题,我们提出了一种采用工作量证明机制的点对点网络来记录交易的公开信息,只要诚实的节点能够控制绝大多数的CPU计算能力,就能使得攻击者事实上难以改变交易记录。该网络的强健之处在于它结构上的简洁性。节点之间的工作大部分是彼此独立的,只需要很少的协同。每个节点都不需要明确自己的身份,由于交易信息的流动路径并无任何要求,所以只需要尽其最大努力传播即可。节点可以随时离开网络,而想重新加入网络也非常容易,因为只需要补充接收离开期间的工作量证明链条即可。节点通过自己的CPU计算力进行投票,表决他们对有效区块的确认,他们不断延长有效的区块链来表达自己的确认,并拒绝在无效的区块之后延长区块以表示拒绝。本框架包含了一个P2P电子货币系统所需要的全部规则和激励措施。

【解读】:

结语中,再次综述了一个不需要信用中介的分布式支付网络的设计要点:

1 通过一套防御机制,让攻击者的攻击难度变得很大,从而让系统很可靠。

2 通过一套协作机制,让单个节点加入到网络很容易,协同很简单。确实,在早期,对矿工要求很低。2013年,很多人买台矿机在家挖矿,一个月就能挖出几个比特币。不管矿工在哪里,在线多久,计算能力差异如何,都可以参与到网络中。这样是促进了一个分布式系统的快速冷启动。

3 系统还有足够的激励措施,让诚实的矿工有利可图,让攻击者不如把算力转为贡献。这样,让这个网络一开始就进入到正循环,每个参与者都能得到利益。

言外之意,我设计的这个系统防御强、激励大、协作简单,已经很完美了,来加入我这个项目吧。

确实很多人加入进来了,随着共识的形成,比特币从“空气币”开始有了价格。下面是一张来自于bitcoinmarket.com的比特币交易数据图,这是世界上第一家比特币交易所,现已停止营业。可以看到,一枚比特币的价值在很短的时间内就从10美分涨到了1美元。中本聪在网络论坛发表最后一篇文章时,每笔比特币的交易价大约是25美分。而比特币最高价格是2021年11月10日的68928.9美元,在中本聪隐身后,上涨了255712倍,催生了无数新贵。

目前估计有100万以上的矿机在为比特币网络服务。

2022 年 8 月 2 日,Bitcoin Magazine 在社交媒体上表示,2100 万枚比特币总量中的 90.17% 现已被开采,当前市场中的流通量为18935587枚,流通市值为7094.08亿美元。在接下来的 118 年里,只剩 9% 的余量比特币可以被开采,之后就只能靠记账赚钱了。

参考文献

[1] W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.

[2] H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimal trust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.

[3] S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no2, pages 99-111, 1991.

[4] D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital timestamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.

[5] S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.

[6] A. Back, "Hashcash - a denial of service counter-measure,"

http://www.hashcash.org/papers/hashcash.pdf, 2002.

[7] R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and

Privacy, IEEE Computer Society, pages 122-133, April 1980.

[8] W. Feller, "An introduction to probability theory and its applications," 1957.

【解读】:

参考文献共有8篇,说明了比特币是站在巨人的肩膀上设计出来的。准确来说,比特币是几十年来许多人研究和开发的结晶。中本聪就像一个出色的乐高玩家,将这些乐高积木整合在一起,设计了比特币网络及其共识协议。

比特币奇思妙想地将数字签名、工作证明、公钥密码学、哈希函数、时间戳、区块奖励、交易费、采矿难度调整、默克尔树以及由独立节点运行的点对点网络的概念结合起来。这种独特的结构使双重消费问题得到解决,并出现了有史以来最健全的货币形式。

这8篇文章的贡献者中有哪些牛人呢?

1 W. Dai

排在第一的是 W. Dai 的"b-money",W. Dai是谁,凭什么排第一?

W. Dai全称是 Wei Dai,他是个美籍华人,中文名也许是戴伟,毕业于美国华盛顿大学计算机专业,辅修数学,他曾在微软的加密研究小组工作,参与了专用应用密码系统的研究、设计与实现工作。共同创立了Bitvise,在开源库Crypto ++的发明者领域具有重要影响。

在读大学期间,戴伟就开始着迷于蒂姆 · 梅的密码无政府主义,很自然地,他很快就成为了传奇组织 Cypherpunk (密码朋克)的一份子。因为他认为数字世界应该成为一个真正的自由世界。这一点在 b-money 论文的第一段就可以看出来,戴维说:“暴力将会被避免,因为你根本找不到参与者的真实姓名和肉身位置。”

Wei Dai 的文章中探讨了没有政府和可信实体的合作是如何实现的。因为这篇文章不容易找到原文和翻译版,我们这里多说说。

"一个社区是由其参与者的合作来定义的,而有效的合作需要一种交换媒介(货币)和一种执行合同的方式,"Dai写道。"传统上,这些服务是由政府或政府赞助的机构提供的,而且只针对法律实体。在这篇文章中,我描述了一个协议,通过这个协议,这些服务可以提供给不可追踪的实体,也可以由其提供。"

b-money 是 1998 年戴维在密码朋克邮件列表中发表的一个方案书(proposal),也就是说只有文字描述,没有代码实现。其设计目标是一种无法被强势组织控制的数字货币,是一个匿名,分布式电子现金系统。这篇论文中很大篇幅都是聊如何生产加密货币的。

首先,全网认可一个难度足够的数学题。注意,论文里强调,这道题的答案必须是没有任何实际价值的。换句话说,算题的工作量必须纯粹是一种能源消耗,纯粹是为了把钱烧掉。第二步,想要获得加密货币的人投入硬件资源去算这道题的答案,最后得到的结果就是一串数字,也就是 POW 工作量证明。第三步,算出答案来的人就可以广播 POW 到全网,每个网络节点验证 POW 之后,都在自己的账本上给这个人的账户上充值跟被烧掉的钱价值相当的加密币。

交易过程。b-money 采用的是分布式记账的方式来追踪加密货币的交易。发送方和接收方都没有真实姓名,都只是公钥。发送方用私钥签名,然后广播交易到全网。每个网络节点都会保留一个包含所有人的交易记录的大账本。注意,这里有一个跟比特币的差别:b-money 中,交易是通过 Contract 来实现的,每一个 Contract 都需要有仲裁人参与。

十年后,也就是2008 年,中本聪开始着手撰写比特币白皮书时,曾向英国密码学家 Adam Back 询问了他对 Hashcash 的一些疑问,Adam Back便向他推荐了同为密码学家的戴维及他的 b-money。研究过 b-money 后,中本聪给戴维发了一封邮件:邮件大意是:“读了你关于 b-money 的论文,我很感兴趣。我准备发表一篇论文,这篇论文把你的想法拓展成了一个完全可行的系统。Adam Back 注意到了我们两篇论文的相似之处,然后把你的网站介绍给了我。”

所以,说在中本聪开始构想比特币时,有了自己的思考,也从 b-money 的白皮书中得到启发。

Wei Dai (戴伟)

在比特币创世币挖出的第二天,即2009 年 1 月 10 日,中本聪发了邮件给戴伟(Wei Dai):

“我认为比特币几乎实现了您打算在 b-money 论文中解决的所有目标。”

可以说,b-money是一个设计蓝图,虽然没有具体实现,但这个框架启发了中本聪。

从具体细节上来讲,b-money 还有很多地方跟比特币有巨大的差异。首先 b-money 中也没有链的概念,每个节点都是只是尽量去收集网络上的交易,并保存到自己的机器上。比特币通过链,让后来区块的安全去累加加固以前区块的安全,是非常厉害的安全思路。第二,对于如何控制发行总量也没有明确的规定。b-money 的思路非常的单纯,就是用钱换加密币,所以不设置总量上限似乎也是合理的,但是比特币的总量恒定,其实是非常强的一种激励机制,保证了网络能够迅速落地,b-money 的激励机制是缺失的。第三,b-money 没有实现分布式网络上的时间戳服务器,也就是说不能对交易进行排序,这也是跟比特币的巨大差距。当然,上述三个问题,从 b-money 基于信任的模式看来,也可能都不是问题了。

总之,b-money 跟比特币差距还是很大的。戴伟本人也说,我怀疑中本聪根本没有事先看过我的论文,他是完成比特币之后才发现的 b-money ,然后致敬我一下而已,我对比特币的贡献是非常有限的。

不过,戴伟显然是过于谦虚了。Wei Dai 的影响力远远超出了比特币。

以太坊的最小单位设置为 Wei:1 ETH = 1,000,000,000,000,000,000 Wei(10的18 次方Wei)

当今加密货币市场市值排名第五的稳定币是 DAI,名字也是来自于这位密码学家的名字。

2 H. Massias, X.S. Avila, and J.-J. Quisquater

第二个参考文献是三个人写的。

Jean-Jacques Quisquater是比利时鲁汶天主教大学(UCL)教授。他曾获得了美国计算机科学博士学位。奥赛大学 (法国LRI)和Limoges的荣誉博士学位。他目前是UCL加密小组的负责人,该小组由20位有关密码学的研究人员组成。Quisquater博士在国际会议和期刊上发表了约200篇有关密码学,安全性,智能卡和图论的论文,并拥有20项专利,其中包括所谓的用于商业识别的GQ协议。

Jean-Jacques Quisquater

这篇论文《设计一个具有最小信任要求的安全时间戳服务》(Design of a secure timestamping service with minimal trust requirements)探讨了如何用时间戳来减少系统中的信任要求。

"我们将'数字时间戳'定义为数字证书,旨在保证通用数字文件在某一时间的存在,"作者写道。"有两个系列的时间戳技术:那些与受信任的第三方合作的技术和那些基于分布式信任概念的技术。基于受信任方的技术依靠的是负责发布时间戳的实体的公正性。基于分布式信任的技术包括使文件有日期并由一大批人签署,以说服验证者,我们不可能破坏所有的文件。"

除了这篇外,第3,第4这两篇参考文献也都是关于时间戳的,这对于比特币网络的运作及其有序的区块历史来说是非常重要的,也是帮助解决双重消费问题的关键。此外,时间戳证明了数据在某个特定时间的存在。

Xavier Serret Avila 现在是西班牙公司 Fintech的CTO,曾获得西班牙加泰罗尼亚理工大学硕士,也曾经是UCL加密小组的成员。

Xavier Serret Avila

Henri Massias 这个人很神秘,找不到任何信息。

3 S. Haber,W.S. Stornetta and D. Bayer

美国密码学家斯图尔特·哈勃(Stuart Haber)和斯托尔内塔(W.S. Stornetta)联合撰写的的三篇论文独占3个席位,成为被中本聪引用最多的论文作者。

哈勃(左),斯托尔内塔(右)

在1980年拉尔夫·默克尔发明了默克尔树之后,斯图尔特·哈勃(Stuart Haber)和斯托尔内塔(W.S. Stornetta)于1991年在“密码学期刊”(Journal of Cryptology)联合发表了一篇题为《如果给数字文档加盖时间戳》(How to time-stamp a digital document)的论文。在这篇论文中,哈勃提出了一种给数据加盖时间戳的方法,使得用户无法向前或向后篡改文档时间,即使在时间戳服务器合谋的情况下也不能。同时,在论文中,他指出,能够对于输入的“种子”产生无法与随机序列分辨开的数字序列的“安全的伪随机数生成器”(secure pseudorandom generator)对于实现分布式信任是很关键的。而且可以证明,只要单向函数(比如哈希函数)存在,那么这样的伪随机数生成器就是存在的。而所谓安全的伪随机数生成器,是指除了随机选择之外,没有更快的方法来找到一个“种子”。

在论文中,哈勃和斯托尔内塔提出了由一群节点共同把一个伪随机数种子作为加盖到文档的时间戳,并以此防范节点合谋篡改时间戳。从哈勃的“种子”里,我们就能看到比特币工作量证明的影子。同时,哈勃在论文中给出了每个时间戳相关信息中都要包含上一个时间戳相关信息的哈希,从而形成了哈希的链条。这被认为是最早的区块链链式结构的雏形。

比特币利用了链接散列数据的想法,使篡改记录而不留下蛛丝马迹的做法变得不切实际。

1993年,戴夫·拜尔(David Allen Bayer)哈勃和斯托尔内塔又在“系列II:通信、安全和计算机科学中的方法”发表论文《改善数字时戳的有效性和可靠性》(Improving the Efficiency and Reliability of Digital Time-Stramping)。在这篇论文中,他们在其中探索了一种方法,"在减少存储和所需计算的同时,实现每个时间戳事件的宣传效果的指数级增长"。默克尔树(Merkle Trees)也是比特币如何在区块中存储交易数据的核心,并允许通过验证节点进行快速支付和区块验证。

戴夫·拜尔(David Allen Bayer)是美国数学家,哥伦比亚大学巴纳德学院的数学教授。

戴夫·拜尔

1997年,哈勃和斯托尔内塔的论文《比特信息串的安全命名》(Secure Names for Bit-Strings)被“ACM计算和通信安全第4届会议论文集”收录。在该论文中,哈勃提出了给任意比特币信息串(包括任何数字文档)“命名”的方法,使用可验证的密码学哈希函数,组织成一个持续增长的无环图,每一个比特信息串所在的位置都是永恒不变的,并且独立于任意给定的哈希函数的使用寿命(因为随着时间流逝,哈希函数会遭遇被破解的黑天鹅)。这已经非常接近后来比特币区块链的数据结构了。

中本聪利用 "比特字符串的安全名称 "将哈希函数与默克尔树相结合,使完整性验证更容易。

4 Adam Back

1997年,英国的密码学专家亚当·贝克(Adam Back)发明了HashCash方法,也就是第一代 PoW(Proof of Work,工作量证明)算法,具体的算法设计和实现,已经完全覆盖了后来比特币所使用的 PoW 机制。

亚当·贝克

Adam Back 的 《Hashcash--拒绝服务的反措施》(Hashcash - a denial of service counter-measure)被中本聪引用,并被用来实现比特币的工作证明(PoW)系统--比特币共识模型的核心。

2004 年,Hal Finney 基于贝克的 Hashcash, 创造了可重复使用的工作量证明(RPOW),也就是现在区块链中工作证明的模型。

贝克在加密货币世界中享有盛誉。除了担任加密货币公司 Blockstream 的首席执行官外,自加密货币开始以来,他就一直活跃在比特币领域。

5 R.C. Merkle

Ralph Merkle

瑞夫·查尔斯·默克尔(Ralph C. Merkle)就是《密码学新方向》的两位作者之一Hellman的博士生(另一位作者Diffie是Hellman的研究助理),实际上他也是《密码学的新方向》主要作者之一,只是因为当时是博士生,没有收到发表这个论文的学术会议的邀请,才没能在论文上署名,也因此与40年之后的图灵奖失之交臂。

Ralph Merkle(左)、Martin E. Hellman(中)、Bailey W. Diffie(右)

1980年,Ralph Merkle 提出了默克尔树(Merkle-Tree)这种数据结构和相应的算法,这也是比特币中引入用来做区块同步校验的重要手段。

这篇被引用的论文《公钥密码系统协议》 (Protocols for public key cryptosystems)探讨了公钥分配的方案和数字签名的协议,它说这是 "从一个中央来源广播且必须由许多单独的接收者确认的认证信息的理想方法"。

数字签名使比特币用户能够证明交易产出的所有权,并以匿名的方式花费,同时允许其他节点快速验证这种花费的有效性。

6 W. Feller

威廉·费勒(W. Feller)是克罗地亚裔美籍数学家,20世纪最伟大的概率学家之一。

威廉·费勒

他的著作《概率论及其应用》(An introduction to probability theory and its applications),出版于1957年,是个数学经典教材,为什么被中本聪引用呢?

因为中本聪用第11节的数学计算,分析了攻击者成功的概率是很低的,假如某个攻击者控制了很多算力,与其做成功率非常低的攻击者,还不如诚实地挖矿和记账赚到更多,这样也就从数学上证明了系统的可靠性。实际上也确实如此。

读后感

如果只是读这个白皮书,再看近10多年的发展,我们会觉得中本聪是个天才。因为后续的系统几乎都是按这个设计来进行的,非常成功。他到底是怎么做到的呢?

其实,在发出白皮书的一年多之前,中本聪就已经开始开发比特币了。

在白皮书发布后,尽管其具有创新性,但比特币并没有立即引起人们的热情。

因为,在密码朋克的邮件列表上的许多人曾看到了太多的电子现金实验,来去去去,而没有任何真正的成功。

而且,这个新提议也存在一些令人担忧的问题:比特币交易不是即时的,具有强大计算能力的对手可能会使系统无法承受(也就是所谓的洪水攻击),并且该解决方案似乎没有很好的可扩展性。

乐观主义者哈尔.芬尼给出了积极的回应。“比特币似乎是一个非常有前途的想法,”芬尼在邮件列表中回答。“我喜欢基于安全的假设,即诚实参与者的CPU能力要大于攻击者的能力。…… 我也确实认为,以不可伪造令牌的形式存在潜在价值,其生产率是可预测的,不会受到腐败党的影响。”

哈尔 · 芬尼行动上也非常积极。他是第一批下载比特币软件的人之一,在比特币创世币挖出的第三天,也就是2009年1月11日,中本聪向他转账了10 BTC。同时,他也是除中本聪之外第一个开始比特币挖矿的人,按照其自述,大概挖了几千个比特币之后就停止了挖矿。

哈尔 · 芬尼

天妒英才,哈尔 · 芬妮在2009年得了渐冻人症(类似霍金的疾病),并于2014年去世。

在中本聪独自完成了第一版比特币软件后,这个白皮书才真正得到了广泛关注,获得了社区的支持,一些开发者们一起来参与,开发了比特币的早期软件版本。

在发布白皮书1年后,中本聪功成身退,成为传奇。

让我们再来看看比特币软件的开发过程吧。

比特币软件的开发过程

2007 年早期。中本聪开始开发比特币。这个点对点的电子现金系统没有受信任的地方。整个系统完全由用户运行的软件来控制。

在发布了白皮书后,有贡献者加入了中本聪的工作。除了软件的开发,这些新来的贡献者还为软件添加了 Linux 和 maxOS 操作系统的支持。到了 2010 年夏天,中本聪给软件做了一些关键的修改。比如,引入了 “检查点” 作为一项安全措施,来对抗传播低难度链的攻击。使用了这些检查点的节点会拒绝那些特定高度与特定区块不符的链。检查点是由中本聪独自硬编码的,理论上来说,这让中本聪可以自己决定整个网络要跟随哪条链。

加入检查点的几天后,中本聪在版本 v0.3.3 的软件中放出了第一个共识机制变更。中本聪敦促用户升级。在接下来一个月里,多个小版本更新陆续放出。

2010年8月15日,一位黑客利用了一个bug,成功地攻击了比特币网络,比特币面临崩溃的威胁。

这个bug的产生原因很简单,如果比特币交易的输出太大,以至于在汇总时溢出,那么用于检查比特币交易的代码就无法工作。黑客在一次交易中创造的比特币超过了这个上限,无中生有生成了1844.67亿比特币。

早期的比特币开发者Gavin Andresen和中本聪一起,迅速解决了这个问题。

在事故报告3小时内,发布0.3.1版的比特币,该版本阻止了未来通过该漏洞编造比特币,创建了新的区块链来修复漏洞,清除了1844.67亿比特币,也就是创建了硬分支。

由于硬分叉,当时出现了两个不同版本的比特币。中本聪密切监控着相互竞争的区块链,告诉用户和矿工要重组带有溢出错误交易的区块,并敦促矿工不要挖“坏链”,因为这样做会让“好链”花费更长的时间才能成为主链。

据中本聪说,事故发生仅仅19个小时后,“好链”就成为了主导链。坏链仍然存在,延至第二天还扰乱了一些用户,但最终,0.3.1版产生的好链变成了今天大家都在使用的比特币区块链。

这也是区块链历史上唯一的一次被黑客成功攻击。

一周以后,中本聪加入了一个警报系统,来提醒节点运营者网络中出现的类似 bug 和问题。这个警报系统有一个安全模式。这个安全模式一旦触发,就会禁用整个网络的所有关于货币处理的 RPC 方法。只有中本聪能够用一个私钥签名来创建有效的网络警报。一些用户开始提出质疑:如果其他人,比如某个政府,拿到了这个私钥,那网络会变成什么样呢?

这个时候,中本聪对比特币网络有太大的权力。但大家主要担心的不是中本聪会变坏、会摧毁整个网络,而是一个去中心化的网络中不应该存在一个单点故障。

到了 2010 年 10 月,中本聪在 bitcointalk 论坛上发布了他的最后一个帖子,宣布移除这个安全模式。中本聪在他最后留下的电子邮件之一里面写道:“我准备去做别的事情去了。有了 Gavin 和大家,这个项目会得到很好的维护。”

“I've moved on to other things, It's in good hands with Gavin and everyone.”

一些人认为,中本聪离开比特币世界,是他最伟大的贡献之一。

几乎同一时间,整个开发流程从 SVN 转移到了 GitHub 上。BlueMatt、sipa、laanwj 和 gmaxwell 加入了这个项目。在 2011 年中,BIP(比特币升级提议)流程应运而生。在 2011 年的最后一个季度和 2012 年的第一个月,社区讨论了允许交易的接收者指定花费条件的多个提案。由此,P2SH 交易引入了比特币。

在 2012 年末,比特币基金会(Bitcoin Foundation)宣告成立,其模仿的是 Linux 基金会。

十年间,比特币的开发文化沧海桑田,从围绕中本聪的高度中心化,变为围绕几千名 GitHub 贡献者的去中心化。

中本聪的钱包里有多少钱?

谁是中本聪?也许是个永远的谜。

位于匈牙利布达佩斯的中本聪实体雕像

也许你很好奇,中本聪有多少比特币呢?

以太坊创始人V神持有大量以太币,有人以粗略估计其拥有的股权,以及持有的数字货币,算出他的净资产约为1亿美元。

有人说中本聪有100万个比特币。但一家以严谨著称的机构 Bitmex Research指出:虽然2009年有强有力的证据证明存在一个占主导地位的矿工,但我们认为,这个证据并没有大家想的那么充分。就算这是真的,这个证据也只能说明,这个占主导地位的矿工挖出的比特币数量明显少于100万个。比较合理的估计大约是60万-70万个比特币。

这个矿工是不是中本聪本人,并没有任何证据,但这些比特币从未动过。

从披露的中本聪比特币钱包地址看,一共只有68.55个BTC,目前价值141万美元。(钱包地址:1PTFYUG6nCzRrByoRfGT5kefUNuZjNF84o

最初时,该地址内只有50 BTC,后来一些爱好者不断地往该地址内转入少量BTC,以此表达对中本聪的敬意。

目前有3509笔转入交易,都是仰慕中本聪的粉丝们转的。而转出次数为0,也就是说,其中的比特币从未被用过。

有理由相信,中本聪不止一个钱包地址,但到底他有多少比特币,永远是一个谜。即便他真有100万比特币,也与他的贡献匹配。

人类需要更好的协作机制,在未来的虚实结合的元宇宙世界,需要新规则。天下大势,浩浩荡荡,顺之者昌,逆之者亡。

重读白皮书和重温比特币开发史,不仅是回顾过去,也是展望未来。

传稻士社区:读完了,请你思考下列问题:
1 有人反对 All in Web3 的做法,认为“杠铃策略”更合适,也就是极端保守+极端激进,你怎么看?
2 在2017年出现了许多比特币的分叉币,为什么同样的代码却无法出现重复比特币一样的成功?
3 如果中本聪最终被发现了真实身份。之后,他会遭遇什么事情?

关注传DAO士,获得更多Web3有关的知识

推荐学习《芝麻开门吧,Web3入门10日谈》系列,包括10个主题,请持续关注。
1 加密货币 2 数字钱包 3 区块链 4 NFT 5 DAO
6 Web3 7 GameFi 8 DeFi 9 虚拟人 10 元宇宙

需要白皮书的最完整版本,请加入到社区中索取飞书文档。另外,还将会不断更新的解读发到传稻士社区。
假如你对Web3有兴趣,或需要跟DAO这种组织方式相关的知识,请去“传DAO士”社区索取,一群研究DAO实践DAO的人等着你,点“查看原文”看社区介绍。
欢迎扫码申请加入“传DAO士”社区,提高认知,结交志同DAO合的好友。
长按扫码!加微信
参考:
比特币白皮书原始版本:
https://bitcoin.org/bitcoin.pdf
比特币白皮书吴忌寒翻译版 
https://www.sohu.com/a/351211414_120095403
比特币白皮书PDF中文版 (翻译者 shdxiang)
https://bitcoin.org/files/bitcoin-paper/bitcoin_zh_cn.pdf  
比特币智能合约入门(1)
https://blog.csdn.net/freedomhero/article/details/106801904?spm=1001.2014.3001.5502
干货 | 不完整比特币开发史(上):简述 
https://mp.weixin.qq.com/s/1-nlcyeqeQkjPDkonbXp9Q
干货 | 不完整比特币开发史(下):时间线 
https://mp.weixin.qq.com/s/eMHx56r7BCba8KnenYdTJQ
万字长文 | 比特币白皮书精读详解 
https://mp.weixin.qq.com/s/eYCbAD_tPG9PmuFE1LvCWA
戴维的 B-money https://zhuanlan.zhihu.com/p/52756877
比特币白皮书问世13周年
https://www.jinse.com/news/blockchain/1170263.html
北大才子吴忌寒,一年赚50亿,他是如何成为一代矿霸的?
https://zhuanlan.zhihu.com/p/383512155

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存