1. 设计起源
美国有美国的文化,中国有中国的文化,一样东西的诞生必然有其文化和背景基础。学习先进技术与理念也需要一定程度上对其背景与起源有所了解。
中本聪研究所的文献列表上面有一句话写得很好:
Bitcoin was not forged in a vacuum. These works serve to contextualize Bitcoin into the broader story of cryptography and freedom.
比特币不是在真空中创造的。基于这些工作(文献列表中的所有论文)使比特币融入到了更广泛的密码学和自由的历史之中。
1.1. 背景
下面主要来自长铗发表在8bit上的文章:
关于密码朋克
追求一个匿名的独立的数字货币、可以保护买家和卖家的隐私的梦想在比特币诞生很早以前就开始了,不管福布斯、无线、大西洋等杂志多少次宣布这个梦想的讣告,但它还离真的死去还远着呢。
追求创造一个独立的数字货币的思想始于1992年,蒂莫西·梅,一个退休的物理学家,邀请一群朋友到他加州圣克鲁斯的家里讨论刚刚诞生的互联网与隐私。在过去的十年里,威菲·迪菲的公钥加密和菲尔·齐默尔曼的PGP加密已经被证明用于控制数字信息访问权方面很有效。由于世界各国政府担心失去对权力与信息的控制,开始威胁要禁止这些加密工具被公众使用。
梅和他的朋友们所做的正是政府所担心的,他说:“正如印刷术改变中世纪社会权力结构,削弱了行会权力,加密法也将从根本上改变企业的性质和政府对经济行为的干预。”在这次会议结束时,这个小组为自己取了个名字:密码朋克,就像是捍卫数字世界公民隐私的超级英雄。短短一周后,联合创立人埃里克·休斯就写了个程序,可以接收加密邮件,擦除所有身份标记,并将它们发送回用户列表,当你签名后,你会得到休斯的回信。
密码朋克认为隐私是一个好东西,并希望能在更多的领域保护个人隐私。密码朋克认识到那些想要保护个人隐私的人必须创造自己的加密法,而不是使用政府、公司或大型公共机构免费提供的加密工具。
1.2. 中本聪及比特币的开发
以下翻译自wiki, 引文标号代表wiki原文中的索引链接标号
1.2.1. 历史
在P2P Foundation 的个人资料信息中,中本聪自称是一个人住在日本,出生于1975年4月5日。[3]猜测中本的真实身份大多集中在一些密码学和计算机科学的非日本血统的专家,生活在美国和欧洲。[4] Satoshi Nakamoto也创建了bitcointalk论坛,在2009年以假名satoshi发布了第一条消息。[5]
1.2.2. 比特币的开发
在2008年10月,中本发表了一篇论文[6] [7]处的metzdowd.com加密邮件列表中[8]描述的比特币数字货币。它被命名为“比特币:对等电子现金系统”。2009年1月,Nakamoto发布了第一款启动网络的比特币软件和比特币加密货币的第一批单位,称为比特币。[9] [10] Satoshi Nakamoto于2009年1月9日在Sourceforge发布了0.1版比特币软件。
Nakamoto声称,编写代码的工作始于2007年。[11]比特币的发明者知道,由于其本质,核心设计必须能够支持广泛的交易类型。实施的解决方案从一开始就通过使用谓词 脚本启用了专用代码和数据字段。[12]
Nakamoto创建了一个域名为bitcoin.org的网站,并继续与其他开发者合作开发比特币软件,直到2010年中。在此期间,他将源代码存储库和网络警报密钥的控制交给了Gavin Andresen,[13]将几个相关的域转移给了比特币社区的各个知名成员,并停止了他参与该项目。在他离开和移交前不久,Nakamoto自己对源代码进行了所有修改。
发明人在第一块开采的矿区留言中写道:“泰晤士报2009年1月3日在第二轮救助银行的边缘”。文中提到2009年1月3日发布的“泰晤士报”的标题。这是一个有力的迹象表明,第一个区块是在此日期之前开采的。[14] 2009年1月3日,发生区块的时间戳为格林威治标准时间18:15:05。该区块与所有其他区块不同,因为它没有上一个区块可供参考。[14]这需要使用自定义代码来挖掘它。后续区块的时间戳表明Nakamoto并没有试图单独为自己挖掘所有早期区块。[14]
作为唯一的,主要的早期矿工,发明者在创世纪之后和10天之后被授予比特币。[15]除测试交易外,这些交易从2009年1月中旬开始仍然没有结束。[15]公共比特币交易日志显示Nakamoto已知的地址包含大约100万比特币。截至2017年12月17日,这价值超过190亿美元。[16] [17]这使他成为地球上第44富有的人。[18]
邮件组里中本聪发布的邮件:Bitcoin v0.1 released
宣布比特币的第一个版本,这是一种使用点对点网络来防止双重支出的新电子现金系统,它完全分散,没有服务器或中央权威。
链接: http://www.metzdowd.com/pipermail/cryptography/2009-January/014994.html
1.3. 关于邮件组,相关密码学专家及中本聪
以下来自infoQ公证号上张健的文章:
密码朋克本身就是数字货币最早的传播者,在其电子邮件组中,常见关于数字货币的讨论,并有一些想法付诸实践。在比特币之前,有很多失败的尝试。在这里我们简要列举一些之前探路者。
亚当·贝克(Adam Back)是一位英国的密码学家,1997 年,他发明了哈希现金(hashcash),其中用到了工作量证明机制(proof of work)。这个机制的原型是用于解决互联网垃圾信息问题的 [ii]。工作量证明机制后来成为比特币的核心要素之一。
哈伯和斯托尼塔(Haber and Stornetta)在 1997 年提出了一个用时间戳的方法保证数字文件安全的协议 [iii],这个协议成为比特币区块链协议的原型。
戴伟(W Dai)是一位兴趣广泛的密码学专家,他在 1998 年发明了 B-money,B-money 强调点对点的交易和不可更改的交易记录。不过在 B-money 中,每台计算机各自单独书写交易记录,这很容易造成系统被账本的不一致。戴伟为此设计了复杂的奖惩机制以防止作弊,但是并没有能从根本上解决问题。中本聪发明比特币的时候,借鉴了很多戴伟的设计,并和戴伟有很多邮件交流。
哈尔·芬尼(Hal Finney)是 PGP 公司的一位顶级开发人员,也是密码朋克运动早期和重要的成员。2004 年,芬尼推出了自己版本的电子货币,在其中采用了可重复使用的工作量证明机制(RPOW)。哈尔·芬尼是第一笔比特币转账的接受者,在比特币发展的早期与中本聪有大量互动与交流。由于身患绝症,哈尔·芬尼已于 2014 年去世。
长铗:
中本聪在密码邮件组中是一个年轻后辈(可能30岁出头),但地位十分显赫,在这个邮件组中,有菲尔·齐默尔曼(PGP技术的开发者)、约翰·吉尔摩(太阳微系统公司的明星员工)、斯蒂文·贝洛文(美国贝尔实验室研究员,哥伦比亚大学计算机科学教授)、布拉姆·科恩(BT下载的作者)、蒂姆希·C·梅(英特尔公司前首席科学家)、阿桑奇(维基解密创始人)这样的大牛。
中本聪对这些失败者的反省是,Beenz、Flooz、E-cash、B-money等虚拟货币先驱尝试的失败主要是由其中心化的组织结构所造成的。这是因为一旦为虚拟货币信用背书的公司倒闭,或保管总账的中央服务器被黑客攻破,该虚拟货币即面临信用破产与内部崩溃的风险。2009年2月,中本聪在IRC频道写道:“政府擅长击溃Napster那样拥有中央控制的网络,但是Gnutella 和Tor 这样完全P2P的网络看起来依旧安枕无忧。” (《比特币:一个虚幻而真实的金融世界》,巴比特成员合著)
中本聪的密码学造诣十分精湛,许多曾经被认为是冗余设计的错误,后来被证明都是正确的,比如精心挑选的Koblitz曲线,避开了美国国安局在加密标准中暗藏的后门。比如在椭圆曲线数字签名算法加密的基础上,再哈希两次,足以应付量子计算机的威胁……
1.4. 戴伟与比特币
以下内容来自戴伟的维基百科:
中本聪论文中的第一个参考文献就是戴伟的bmoney文章。
Wei Dai和Adam Back是中本聪在2008 年开发比特币时与他联系的头两个人[2],而b-money论文在随后的比特币白皮书中被引用。[14]
在2011年5月的一篇文章中,密码学家Nick Szabo指出:
我本人,魏岱和哈尔芬尼是我认识的唯一一个喜欢这个想法的人(或者戴的情况下他的相关想法),足以在很大程度上追求它,直到中本(假设中本不是真正的芬尼或戴)。[15]
然而,戴伟在一个文章下面讨论的提出b-money对比特币的影响:
you should know that I didn't create Bitcoin but only described a similar idea more than a decade ago. And my understanding is that the creator of Bitcoin, who goes by the name Satoshi Nakamoto, didn't even read my article before reinventing the idea himself. He learned about it afterward and credited me in his paper. So my connection with the project is quite limited.
......我的理解是,比特币的创造者,名叫Satoshi Nakamoto的名字,甚至没有阅读我的文章,然后再重新发明这个想法。之后他才知道了这件事,并在他的论文中记入了我的观点。所以我与这个项目的联系非常有限。[16]
1.4.1. Bmoney 对比特币的影响
Described as "money which is impossible to regulate",[12] Dai's b-money described the core concepts later implemented in Bitcoin[13] and other cryptocurrencies:
对比特币发展的影响形容为“无法规制的资金”,[12]戴的B币描述了随后在比特币[13]和其他加密货币中实施的核心概念:
- Requires a specified amount of computational work (aka Proof of work).
需要指定数量的计算工作(即工作量证明)。 - The work done is verified by the community who update a collective ledger book.
完成的工作由更新集体账本的社区进行验证。 - The worker is awarded funds for their effort.
因工作量而获得奖励资金。 - Exchange of funds is accomplished by collective bookkeeping and authenticated with cryptographic hashes.
资金交换是通过集体账本协同记录和完成的,并使用加密哈希进行验证。 - Contracts are enforced through the broadcast and signing of transactions with digital signatures (i.e., public key cryptography).
通过使用数字签名(即公钥密码术)进行广播和签署交易来强制执行合同。
需要说明的是以上概念并不能完全覆盖比特币的所有概念,但是包含其中一部分的概念元素。
1.4.2. 戴伟的设计理念原文
a scheme for a group of untraceable digital pseudonyms to pay each other with money and to enforce contracts amongst themselves without outside help
http://www.weidai.com/bmoney.txt
1.4.3. BMoney的google翻译版
我对蒂姆·梅的密码无政府状态感到着迷。不像社区传统上与“无政府状态”这个词相联系,在一个加密无政府状态中
政府不会暂时摧毁,而是永久禁止和永久不需要。这是一个暴力威胁无能为力的社区,因为暴力是不可能的,暴力是不可能的
因为它的参与者不能与他们的真实姓名或身体挂钩位置。
到目前为止,还不清楚,即使在理论上,这样的社区如何操作。一个社区由其参与者的合作来定义,
高效的合作需要一种交流媒介(金钱)和一种方式执行合同。传统上这些服务只能是由政府提供或政府资助的机构合法实体。在这篇文章中我描述了一个这些服务的协议,可以提供给不可追踪的实体。
我将实际描述两种协议。第一个是不切实际的,
因为它会大量使用同步和不可匿名匿名广播频道。然而它会激励第二个,更实际
协议。在这两种情况下,我都会假定存在一个无法追踪的东西网络,发送者和接收者只能通过数字识别
假名(即公钥),每个消息都由发件人签名并加密到它的接收器。
在第一个协议中,每个参与者都维护一个(单独的)数据库
多少钱属于每个假名。这些帐户统称
定义货币的所有权,以及这些账户如何更新
本协议的主题。
1.创造金钱。任何人都可以通过广播创造金钱
解决之前未解决的计算问题。唯一的
条件是确定多少计算工作量必须很容易
它解决了这个问题,否则解决方案就无法解决问题
价值,无论是实际还是知识。货币单位的数量
创造出来的成本等于计算工作的成本
标准一揽子商品。例如,如果问题需要100个小时
在最经济地解决它的计算机上解决,并且需要3个
标准篮子可以在该计算机上购买100小时的计算时间
在公开市场上,然后在广播解决方案
每个人都会将广播公司的帐户记为3个单位。
2.钱的转移。如果Alice(化名K_A的拥有者)希望
将X部分钱转移给Bob(化名K_B的拥有者),她播放
由K_A签署的消息“我给X个单位的钱”。经
这个消息的广播中,每个人都会将X个单位和X个单位的K_A的帐户记入借方
将K_B的账户记入X单位,除非这会造成负值
在K_A的账户中平衡,在这种情况下该消息被忽略。
3.合同的效力。有效合同必须包含最高限额
在每个参与方违约的情况下进行赔偿。这应该
还应包括一方当事人应履行仲裁协议
争议。包括仲裁员在内的所有合同当事人必须进行广播
它的签名在它生效之前。在广播之后
合同和所有签名,每个参与者借记账户
每一方通过其最高赔偿额度和特别奖励
由合同的安全散列标识的帐户最大总和
赔偿。如果借款成功,合同就会生效
每一方都没有产生负的余额,否则就是合同
被忽略并且账户被回滚。示例合同可能看起来
喜欢这个:
K_A同意在0:0:0 1/1/2000之前将K_B的解发送给问题P.
K_B同意在0:0:0 1/1/2000之前支付K_A 100 MU(货币单位)。K_C
同意在发生争议时进行仲裁。K_A同意支付一个
默认情况下最大为1000 MU。K_B同意支付最多200
MU默认情况下。K_C同意最多支付500 MU
默认。
4.合同结论。如果合同无争议地结束,
每一方都会广播一个签名消息“与SHA-1哈希H签订合同
在没有赔偿的情况下结束。“或可能”与SHA-1哈希合同
H总结以下赔偿:......“在所有的广播
签名,每个参与者通过信用评估每个方的帐户
然后,他的最高赔偿金额,解除合同帐户
根据赔偿信用或借记每一方的帐户
如果有的话。
5.合同的执行。如果合同双方不能达成一致
即使在仲裁员的帮助下,也可以得出适当的结论
派对广播建议的赔偿/罚款时间表以及任何争论或
有利于他的证据。每个参与者都会做出决定
实际赔偿和/或罚款,并相应地修改其账户。
在第二议定书中,谁拥有多少钱的帐户
参与者的一个子集(从现在起称为服务器)而不是
大家。这些服务器通过Usenet风格的广播频道链接。
在这个频道上广播的交易信息的格式仍然是
与第一个协议相同,但每个参与者都受影响
交易应验证消息已收到,并且
由随机选择的服务器子集成功处理。
由于服务器必须在一定程度上被信任,因此需要一些机制
保持诚实。每台服务器都需要存放一定数量的
在特殊账户中的钱用作潜在的罚款或奖励
不当行为证明。另外,每台服务器都必须定期发布和
致力于目前的货币创造和货币所有权数据库。每
参与者应该确认自己的账户余额是正确的
账户余额的总和不大于总额
创造的钱。这可以防止服务器,甚至在共谋的情况下
永久和无成本地扩大货币供应量。新的服务器可以
还可以使用已发布的数据库与现有服务器进行同步。
本文中提出的协议允许不可追踪的假名
实体通过提供它们更有效地相互合作
用交换媒介和执行合同的方法。该
协议可能会更有效率和安全,但我希望这一点
是加密无政府组织在实践和理论上迈出的一步
可能性。
附录A:替代性B货币创造
金钱协议中更有问题的部分之一是金钱创建。协议的这一部分要求所有帐户
饲养员决定并同意特定计算的成本。不幸的是,因为计算技术趋于快速发展
并不总是公开的,这些信息可能不可用,不准确,或者过时,所有这些都会给协议带来严重的问题。
所以我提出了一个替代性的货币创造子协议,在这个账户中
(第一个协议中的每个人或第二个协议中的服务器)
协议),而是决定并同意要创建的B货币数量每个时期的成本都是由创造这个资金决定的
拍卖。每个货币创造期分为四个阶段,如如下:
1.计划。账户保持者计算并彼此协商确定下一期货币供应量的最佳增长。
他们每个人是否可以达成共识广播他们的货币创造配额和任何宏观经济计算完成支持这些数字。
2.招标。任何想要创造B钱的人都会在广播中竞标<x,y>的形式,其中x是他想创建的b钱的数量,y
是来自预定问题类别的未解决的问题。中的每个问题这个类应该有一个名义成本(以MIPS年为单位)
公开同意。
3.计算。看到投标后,那些谁在投标招标阶段现在可以解决他们的投标中的问题并播出
解决方案。
4.创造金钱。每个账户管理人都接受最高的出价(例如那些实际上广播解决方案的人)按名义成本计算
B货币单位创建并相应地记入投标人的账户。
1.5. Adam的Hashcash与比特币
1.5.1. 维基百科上的说明
Hashcash是一个用于限制电子邮件垃圾邮件和拒绝服务攻击的工作证明系统,最近由于其在比特币(和其他加密货币)中的使用而成为挖掘算法的一部分。Cynthia Dwork和Moni Naor以及Eli Ponyatovski在1992年的论文“通过处理或打击垃圾邮件定价” 中首次提出了最初的想法。[1]后来,Adam Back在1997年提出了一个名为Hashcash的类似提案。[2]
工作机制:
How it works
Hashcash is a proof-of-work algorithm that requires a selectable amount of work to compute, but the proof can be verified efficiently. For email uses, a textual encoding of a hashcash stamp is added to the header of an email to prove the sender has expended a modest amount of CPU time calculating the stamp prior to sending the email. In other words, as the sender has taken a certain amount of time to generate the stamp and send the email, it is unlikely that they are a spammer. The receiver can, at negligible computational cost, verify that the stamp is valid. However, the only known way to find a header with the necessary properties is brute force, trying random values until the answer is found; though testing an individual string is easy, if satisfactory answers are rare enough it will require a substantial number of tries to find the answer.
Hashcash是一种工作量证明算法,需要可选择的工作量进行计算,但验证可以非常有效率。对于电子邮件使用,将电子邮件头添加文本编码的hashcash戳记,以证明发件人在发送电子邮件之前已经花费了适量的CPU时间来计算邮票。换句话说,由于发件人花了一定的时间来生成邮票并发送邮件,因此他们不太可能是垃圾邮件发送者。接收器可以以可忽略的计算成本验证邮票是否有效。然而,找到具有必要属性的头部的唯一已知方式是暴力遍历攻击,尝试随机值直到找到答案; 虽然测试一个单独的字符串很容易,但如果满意答案非常罕见,则需要大量尝试才能找到答案。
The hypothesis is that spammers, whose business model relies on their ability to send large numbers of emails with very little cost per message, will cease to be profitable if there is even a small cost for each spam they send. Receivers can verify whether a sender made such an investment and use the results to help filter email.
这个假设是,如果垃圾邮件发送者的商业模式依赖于他们发送大量电子邮件的能力,并且每封邮件的成本很低。 那么如果发送每个垃圾邮件有个小的成本,那么垃圾邮件发送者将不再有利可图。接收者可以验证发件人是否进行了此类成本投入并用来帮助过滤电子邮件。
1.5.2. Hashcash的主页上的说明
Hashcash is a proof-of-work algorithm, which has been used as a denial-of-service counter measure technique in a number of systems.
Hashcash是一种工作验证算法,它已被用作许多系统中的拒绝服务对抗措施技术。
A hashcash stamp constitutes a proof-of-work which takes a parameterizable amount of work to compute for the sender. The recipient (and indeed anyone as it is publicly auditable) can verify received hashcash stamps efficiently. Hashcash was invented by Adam Back in 1997
hashcash图章构成了一个工作证明,它为发送者计算可参数化的工作量。收件人(实际上任何人都可以公开审核)可以高效地验证收到的hashcash邮票。Hashcash是在 1997年由Adam Back发明的
At this point it is most widely used as the bitcoin mining function.
当前,它被广泛应用于比特币的挖矿函数中。
1.6. 比特币论文相关参考文献
文献来自中本聪的论文
Bitcoin: A Peer-to-Peer Electronic Cash System, Satoshi Nakamoto
https://bitcoin.org/bitcoin.pdf
比特币白皮书:一种点对点的电子现金系统 中文翻译版, 中本聪
http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system
其论文中提到的文献包括:
References
W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998. ↩
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. ↩ ↩
S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no 2, pages 99-111, 1991. ↩
D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping," In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993. ↩
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. ↩ ↩
A. Back, "Hashcash - a denial of service counter-measure," http://www.hashcash.org/papers/hashcash.pdf, 2002. ↩
R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, pages 122-133, April 1980. ↩
W. Feller, "An introduction to probability theory and its applications," 1957. ↩
除了白皮书中列出的,更多的参考文献可以看中本聪研究所列出的文献列表:
http://nakamotoinstitute.org/literature/
2. 比特币白皮书解读
2.1. 邮件宣布发表
中本聪于2018年11月1日在密码学邮件列表里宣布了Bitcoin P2P e-cash paper的发表。
原文如下:
Bitcoin P2P e-cash paper
Satoshi Nakamoto satoshi at vistomail.com
Fri Oct 31 14:10:00 EDT 2008
I've been working on a new electronic cash system that's fully
peer-to-peer, with no trusted third party.
The paper is available at:
http://www.bitcoin.org/bitcoin.pdf
The main properties:
Double-spending is prevented with a peer-to-peer network.
No mint or other trusted parties.
Participants can be anonymous.
New coins are made from Hashcash style proof-of-work.
The proof-of-work for new coin generation also powers the
network to prevent double-spending.
Bitcoin: A Peer-to-Peer Electronic Cash System
Abstract. A purely peer-to-peer version of electronic cash would
allow online payments to be sent directly from one party to another
without the burdens of going through a financial institution.
Digital signatures provide part of the solution, but the main
benefits are lost if a trusted party is still required to prevent
double-spending. We propose a solution to the double-spending
problem using a peer-to-peer network. The network timestamps
transactions by hashing them into an ongoing chain of hash-based
proof-of-work, forming a record that cannot be changed without
redoing the proof-of-work. The longest chain not only serves as
proof of the sequence of events witnessed, but proof that it came
from the largest pool of CPU power. As long as honest nodes control
the most CPU power on the network, they can generate the longest
chain and outpace any attackers. The network itself requires
minimal structure. Messages are broadcasted on a best effort basis,
and nodes can leave and rejoin the network at will, accepting the
longest proof-of-work chain as proof of what happened while they
were gone.
Full paper at:
http://www.bitcoin.org/bitcoin.pdf
Satoshi Nakamoto
---------------------------------------------------------------------
The Cryptography Mailing List
主要内容翻译:
无需信任第三方,端到端的新电子货币系统(a new electronic cash system)主要属性:
- 通过点对点网络防止双重支出。
- 没有造币厂或其他信任方。
- 参与者可以是匿名的。
- 新币的制造来自 Hashcash 类型的工作量证明(proof-of-work)。 (Hashcash意指论文中提到的第6篇文献Hashcash - a denial of service counter-measure)
- 新币产生的工作量证明也防止了双重支付。
比特币:对等电子货币系统
摘要:
纯对等版本的电子货币的允许在线支付从一方直接发送到另一方,无需经过一个金融机构。
数字签名是解决方案的一部分,但是主要的效益在于无需信任一个第三方就能阻止双重支付问题。
论文基于端到端网络(a peer-to-peer work)提出了双重支出的解决方案。
通过对基于网络时间戳的交易进行哈希并追加到一个不断增长的链条上,链是基于哈希的工作量证明,由此构成了无法修改的记录,而要想修改记录除非重新做工作量证明。 最长的链不仅证明了事件(events)发生的顺序,也证明了它来自最大的CPU工作量。只要诚实的节点控制了网络上大多数的CPU算力,它们可以产生最长的链并且超过任何攻击者。
网络本身只需要最小的基础结构。消息以尽力而为的方式广播,节点可以随意离开并重新加入网络,然后只需接受他们离开期间最长的工作量证明链条即可。
2.2. p2p基金会论坛宣布开源bitcoin的发布
http://p2pfoundation.ning.com/forum/topics/bitcoin-open-source
I've developed a new open source P2P e-cash system called Bitcoin. It's completely decentralized, with no central server or trusted parties, because everything is based on crypto proof instead of trust. Give it a try, or take a look at the screenshots and design paper:
Download Bitcoin v0.1 at http://www.bitcoin.org
The root problem with conventional currency is all the trust that's required to make it work. The central bank must be trusted not to debase the currency, but the history of fiat currencies is full of breaches of that trust. Banks must be trusted to hold our money and transfer it electronically, but they lend it out in waves of credit bubbles with barely a fraction in reserve. We have to trust them with our privacy, trust them not to let identity thieves drain our accounts. Their massive overhead costs make micropayments impossible.
A generation ago, multi-user time-sharing computer systems had a similar problem. Before strong encryption, users had to rely on password protection to secure their files, placing trust in the system administrator to keep their information private. Privacy could always be overridden by the admin based on his judgment call weighing the principle of privacy against other concerns, or at the behest of his superiors. Then strong encryption became available to the masses, and trust was no longer required. Data could be secured in a way that was physically impossible for others to access, no matter for what reason, no matter how good the excuse, no matter what.
It's time we had the same thing for money. With e-currency based on cryptographic proof, without the need to trust a third party middleman, money can be secure and transactions effortless.
One of the fundamental building blocks for such a system is digital signatures. A digital coin contains the public key of its owner. To transfer it, the owner signs the coin together with the public key of the next owner. Anyone can check the signatures to verify the chain of ownership. It works well to secure ownership, but leaves one big problem unsolved: double-spending. Any owner could try to re-spend an already spent coin by signing it again to another owner. The usual solution is for a trusted company with a central database to check for double-spending, but that just gets back to the trust model. In its central position, the company can override the users, and the fees needed to support the company make micropayments impractical.
Bitcoin's solution is to use a peer-to-peer network to check for double-spending. In a nutshell, the network works like a distributed timestamp server, stamping the first transaction to spend a coin. It takes advantage of the nature of information being easy to spread but hard to stifle. For details on how it works, see the design paper at http://www.bitcoin.org/bitcoin.pdf
The result is a distributed system with no single point of failure. Users hold the crypto keys to their own money and transact directly with each other, with the help of the P2P network to check for double-spending.
Satoshi Nakamoto
http://www.bitcoin.org
重要内容翻译:
这样的系统的一个基础是数字签名。 一个数字货币包含所有者的公钥。为了支付它,所有者对下一位所有者的公钥和这个数字货币进行签名。任何人都可以检查签名来验证所有权。这对于所有权的安全很好,但是留下了一个大的问题没解决:双重支付问题。任何所有者都可以通过将它再一次签名给另外一位所有者的方式来重新再花费一次这个货币。
比特币的解决方案是使用一个p2p网络来检查多重支付问题。简单说,网络就像一个分布式的时间戳服务器,花费一个货币时,给第一个交易打上一个时间戳。它采用了信息易于传播不易被扼杀的特点。具体看论文。
Some Relpys
Reply by Sepp Hasslberger on February 18, 2009 at 14:41
I have two questions, Satoshi.
the first one ties in with Joerg's doubts about the trusted supply of tokens/coins.
As far as I understand, there will be a limit of the total amount of tokens that can be created, and a changing gradient of difficulty in making the tokens, where the elaboration gets more and more difficult with time. Is that correct?
It is important that there be a limit in the amount of tokens/coins. But it is also important that this limit be adjustable to take account of how many people adopt the system. If the number of users changes with time, it will also be necessary to change the total amount of coins.
Is there a formula to decide on what should be the total amount of tokens, and if so, what is the formula?
If there is no formula, who gets to make that decision and based on what criteria will it be made?
I will keep my second question for later. One thing at a time...
Permalink Reply by Satoshi Nakamoto on February 18, 2009 at 20:50
It is a global distributed database, with additions to the database by consent of the majority, based on a set of rules they follow:
- Whenever someone finds proof-of-work to generate a block, they get some new coins
- The proof-of-work difficulty is adjusted every two weeks to target an average of 6 blocks per hour (for the whole network)
- The coins given per block is cut in half every 4 years
You could say coins are issued by the majority. They are issued in a limited, predetermined amount.
As an example, if there are 1000 nodes, and 6 get coins each hour, it would likely take a week before you get anything.
To Sepp's question, indeed there is nobody to act as central bank or federal reserve to adjust the money supply as the population of users grows. That would have required a trusted party to determine the value, because I don't know a way for software to know the real world value of things. If there was some clever way, or if we wanted to trust someone to actively manage the money supply to peg it to something, the rules could have been programmed for that.
In this sense, it's more typical of a precious metal. Instead of the supply changing to keep the value the same, the supply is predetermined and the value changes. As the number of users grows, the value per coin increases. It has the potential for a positive feedback loop; as users increase, the value goes up, which could attract more users to take advantage of the increasing value.
中本聪回复内容翻译:
这是一个全球分布式数据库,基于下列规则大多数节点取得数据的一致性。
- 每当有人通过工作量证明(proof-of-work)产生一个数据块时,他们就会得到一些新币
- 每两周调整一次proof-of-work难度,以平均每小时6个区块为单位(对于整个网络)
- 每块区块奖励的币每四年减半。
你可以说币是由大多数人发放的。它们以有限的预定数量发放。
举个例子,如果有1000个节点,并且每个小时有6个币,那么在你得到任何东西之前可能需要一个星期。
对于谢普的问题,事实上没有人会充当中央银行或联邦储备银行,随着用户人口增长而调整货币供应量。这将需要一个值得信赖的方面来决定价值,因为我不知道一种让软件知道事物真实世界价值的方法。如果有一些聪明的方法,或者我们想要相信某人主动管理货币供应以将其固定在某物上,那么规则就可以被编程。
从这个意义上讲,它更典型的是贵重金属,不是供应改变,以保持价值相同。供应是预先确定的,价值改变。随着用户数量的增长,每个币的价值也在增加。它具有积极的反馈循环的潜力; 随着用户增加,价值增加,这可能吸引更多的用户利用增加的价值。
2.3. 白皮书解读:
一个自行通过cpu的计算进行奖励比特币,依靠对交易打包形成区块并进行数字签名和哈希,不断延伸的具有算力支持的区块链条形成了全网一致的账本记录,支持了p2p网络的特性,形成完全自治系统,很好地解决了没有中心化节点的情况下端到端在互联网上直接交易支付的问题。
2.3.1. 预备知识
密码学中 哈希/散列计算, 公钥私钥机制, 数字签名机制 的了解
计算机数据结构中的 链条,树 的概念
计算机网络的p2p概念
数学中的概率计算
2.3.2. 特点:
- 端到端,无需第三方中介。
- 可以匿名(来自公钥私钥的密码学算法特性)。
- 交易记录公开。
- 即使不断产生新交易,全网的记账数据保持一致(以最长链为准)。
2.3.3. 从不同层面来讲:
- 交易者层面: 通过密码学的公私钥机制和哈希算法生成账号地址,同时也确保了匿名性。
- 交易层面:通过未花费的交易记录和数字签名及可读的全网数据解决了双重支付问题。。。。
- 记账层面:基于哈希计算的工作量证明 +不断串联的包含交易的区块的顺序哈希计算 解决了区块交易不可修改,即使修改也需要超过51%算力支持的机制。 同时也解决了全网数据一致的难题,即所谓共识算法Pow.
- 新币发行:对基于工作量证明的成功的交易打包者进行奖励,放在区块头部,即挖矿。因为数量有限也避免了通货膨胀。
- 交易费用:通过交易费对打包者进行奖励。
- p2p网络层面:通过每个节点都接受基于工作量证明的最长链条为正确链条并再其后进行追加最新区块,确保任意节点离开加入都不会影响对全网账本的持续加载。
- 节点激励: 通过对挖矿者发行新币以及收取交易费用进行激励,同时也从经济层面鼓励诚实节点,避免了51%算力的重复支付攻击。
从技术角度而言:
- p2p网络确保了分布式的特点,没有中心化节点,可以自由加入和离开。
- 哈希算法特点,工作量证明以及基于交易的区块链条直接和间接地确保了全网数据的一致,达成共识,不易篡改的特性。
- 密码学的数字签名以及全网数据一致解决了计算机容易复制不易传递价值的双重支付问题,解决了价值传递。
2.3.4. 核心概念与思路解释
目前的计算与互联网体系下,信息很容易被复制和传递,作为金钱,可以通过计算机产生,但是却很容易复制,很难确保唯一性。接下来就说下重点的概念和解决思路。
2.3.4.1. 总体核心思路
通过数字签名对交易来确认所有权的方法解决了电子货币本身的定义,然而无法解决复制签名的重复支付问题,为了解决这个问题,就需要对之前所有的交易记录进行访问和验证,就引发了全网公开且统一的数据问题,而通过区块加上链和工作量证明机制解决了谁来生成最新的区块并传播到全网的问题,同时即使存在有不诚实的节点修改已经进入最长区块链的交易记录的情况,也可以推导出其需要控制全网51%的算力。
2.3.4.2. 电子货币定义与重复支付的解决
首先要定义什么是一个电子货币。
We define an electronic coin as a chain of digital signatures. Each owner transfers the coin to the
next by digitally signing a hash of the previous transaction and the public key of the next owner
and adding these to the end of the coin. A payee can verify the signatures to verify the chain of
ownership.
什么是电子货币? 数字签名链构成了一个电子货币。
每一个货币所有者把币转移(交易)给下一个人,需要做的事是对前一笔交易的哈希加上下一个所有者的公钥一起做数字签名,然后追加到这个币的后面。
收款人可以通过验证签名来验证所有权构成的链。
这句话的关键是数字签名,链,交易。 数字签名签的内容是上一笔交易和金额的接收者,签名者是金额的发送者。哈希是数字签名的技巧,避免签过大的数据。 接收者只需拿发送者的公钥进行签名即可验证。由此金额的所有权从发送者到了接受者手里。
发送者的私钥进行签名确保了交易是本人签署的,接受者的公钥确保了接收者既公开地址又不失去其所有权,同时又方便了下一次交易发送给其他人的权利。
如图中所示, Owner1 发送给 Owner2 一定数量的货币,构成了一个交易, 这个交易本身就是一个货币,货币的可靠性来自于前一笔交易的接收者Owner1 的公钥以及Owner1对中间这笔交易的签名的认可, 货币的新的所有权所有者Owner2 同样通过自己的公钥和私钥可以将其交易给下一位所有者Owner3.
从技术细节上来讲:至于验证公钥与数字签名的合法性,则是由系统统一的代码来验证,每个节点上运行的都是一致的,不通过则交易失败,无法进入账本。
但是,有一个问题没有解决,那就是如果Owner1 签署了多份交易,也就是重复支付问题怎么办? 在有造币厂的角色存在时,是有造币厂来保证每个货币的唯一性的。 如果没有中心节点,那么就需要另辟捷径。
也就需要保证Ower1没有对之前的交易进行过签名,从未花费过,也就是bitcoin.org上提到的UTXO(Unspent Transaction Output)概念。 从这点来说,那么就必须知道所有的交易,全部检查一遍。 这也就意味着所有交易都是公开的,那么接下来也就意味着我们需要系统里的所有参与者节点都具有以及收到公认的唯一历史交易序列。收款人Ower2需要确保交易期间绝大多数的节点都认同该交易是首次出现,即从来未支付过给别人,也就能产生新的交易/货币,从而避免了重复支付问题。
由此引申出第二个核心问题,如何确保网络中的所有节点都接受一致的历史交易记录数据, 因为统一的数据也就意味着确认的交易历史记录顺序,也就需要有时间戳来确定交易的时间,也就是为什么中本聪会提出时间戳服务器的概念,实际上这是个自然的概念,在通过区块链和工作量证明来解决时,只是个附属概念。
2.3.4.3. 全网统一历史账本数据的解决(区块链与工作量证明)
因为不可能把交易记录一次性全部记录下来,需要分批,自然也就出现了区块的概念,区块可以存储一批交易记录集合。
因为哈希的特点,再结合Merkle tree, 将具体交易数据放在身部,其综合哈希值放在头部,构成了一个区块,仅有比较小的头部就足以确保交易数据的无法篡改。
为了让随时间发生的交易不断地追加到账本记录中并且确保记录不可被篡改,基于哈希的区块链条是个自然的解决方案。但这还不够。
每个节点都添加交易记录,以哪个节点产生的最新交易记录集合也就是区块为主并广播到全网节点呢?这是个难题。
工作量证明Pow出现了,它通过及其大量的哈希运算,在概率上确保了只有极少的节点通过运算才能争取到生成“当前合法”的区块的机会,然后广播并被大多数的节点所接受,“当前合法”的概念是指追加到当前全网区块链条后面的被所有参与节点认可和验证的区块,这样就统一了全网数据。
然后就以此为榜样,不断延伸链条,全网以最长的链条为主作为“统一历史账本数据”进行广播。
工作量证明也往往被称为共识机制,本质相当于互相没有信任基础的个体之间就交易数据的合法性达成一致的共识。
因为工作量证明Pow要完成非常困难,再加上基于哈希的链条,同时也确保了修改区块数据非常困难。可以理解成套了一层又一层的锁,每个锁要解开都要花费大量时间。
接下来一个直接的疑问就是如果全网同时生成了2个或多个“合法”区块怎么办?因为随着链条长度的增长以及工作量证明本身的计算难度和概率,连续出现多个区块链的可能性逐级下降,换句话说也就是不可能一直存在多个链,导致全网数据不一致,即使有临时的分叉,也很快就会消失。
重复支付的问题虽然通过统一全网数据的办法解决了,但是会出现这么一种情况,Owner1不甘心,在支付给Owner2之后,已经记录到“合法”的区块账本之后,他反悔了,控制了一部分的节点,修改了交易本身,妄想撤销或者修改已经成交的交易记录,并且借助于控制的节点算力超越诚实节点,来增长另外一条不诚实的区块链。然而这种可能性极其低,因为要相对已经生成的区块进行修改,Owner1必须重新完成该修改区块的工作量外加之后的所有区块的工作量,这种可能性同合法的2条或多条区块链同时并存的可能性一样,成功概率呈指数化递减,也就是很低。除非有一种情况,Owner1控制的算力超过了51%。
另外,上述是在算力以及全网的节点固定情况下的解决思路,如果全网的节点增长,那么配合计算难度的动态调整即可。
2.3.5. 前提和相关工程与技巧等问题
到此为止,为了实现不经过中介端到端的直接支付的问题就基本解决了。但是这整个主干过程中有很多涉及到前提和实现的细节问题,下面简要介绍几个。但是这些与要解决的问题相比,已经是非主干的问题了。
比方说
- 最初的币从哪里来?
- 单个节点怎么能访问到全网数据,以及未花费的交易记录?
- 客户端怎么验证有效的交易且不消耗太多资源?
- 货币的单位怎么确认?怎么分割?手续费怎么算?
- 单个节点怎么存储全网数据,不超出系统资源限制,并且能维持很多年?
- 全网数据公开怎么确保个人的隐私?
- 全网算力增长,怎么避免同时实现多个链的持续出现,怎么进行难度调整?
- 怎么鼓励节点运行大量计算来完成Pow?
- 具体区块时间怎么确定?
- 很多交易时,存储不到一个区块里怎么办?
- 同时多个区块出现时,最后不被认可的区块里面的交易怎么办?
可以自行看论文的其他部分来解答,或者到比特币的官方文档及Wiki查看
3. 参考资料
Satoshi Nakamoto
https://en.wikipedia.org/wiki/Satoshi_Nakamoto
Bitcoin P2P e-cash paper
http://www.metzdowd.com/pipermail/cryptography/2008-October/014810.html
Bitcoin v0.1 released 2009-01-09 20:05:49 UTC
http://satoshi.nakamotoinstitute.org/emails/cryptography/16/
突破2万美元的比特币与其背后的区块链技术 (张健)
http://mp.weixin.qq.com/s/rRWJcHtY9v6DmM2ZE_cZoQ
我们都是中本聪:那些孜孜以求建立密码学货币的先驱们(长铗)
http://www.8btc.com/cypherpunk-satoshi
Electronic Cash, BitCoin
https://www.net.in.tum.de/fileadmin/TUM/teaching/Peer-to-Peer-und-Sicherheit/ss11/ECash-BitCoin.pdf
戴维介绍:
https://en.bitcoin.it/wiki/Wei_Dai
戴伟的设计理念, Basis for BitCoin concept
http://www.weidai.com/bmoney.txt
Hashcash
https://en.wikipedia.org/wiki/Hashcash
中本聪研究所文献列表
http://nakamotoinstitute.org/literature/