今天开始写系列文章,从零开始区块链。我尝试把我学习到的整理成笔记,持续做下去,看看能写多少。
1. 导语
回想我在2014年第一篇文章的时候,就说要写一系列文章,其中有一部分就是“论文科研”(回复001查看)。这个类目在2015年以后,就一直没有更新了。原因有很多,一个是我开始变得很能写,总是有不同的选题,一直轮不上;二是真正开始写一些技术的文章,更多的读者也不太容易看懂。
最近区块链比较热,有很多大佬说之是下一个未来的风口;比特币这些年也让很多买币的人赚到不少钱。于是在知识付费践踏完国人的焦虑后,区块链又成了新一个敏感点。大家纷纷问,到底什么是区块链?在这个阶段,各种声音都出现了,有坚定的看多者,有坚决的做空者。电子货币领域出现了百花齐放的声音。我假设现在对这个话题感兴趣的人多了,至少装作感兴趣的人多了,所以可以写些技术文章了。
对于大多数人而言,在学习动机方面,没有什么比一样东西能赚钱更有刺激了。但是有一个问题,当你看到别人赚钱的时候,如果你不懂,但是又想入场,那你变成韭菜的可能性就很大了。区块链很赚钱,但是搞区块链培训的人赚的更多,这就像当年淘金热一样,把牛仔裤给做火了……
电子货币的世界跌跌涨涨,但是为什么有的人能坚守,有的人总是追涨杀跌?我认为核心在于对事物的理解。对于一个理论、技术、方法甚至新的生产力,你有没有从原理上、从逻辑上真正看懂理解,并且应用实践,会决定在漫长的演进过程中,你最终趋向的位置。
诚然有的人赚到钱了,于是我们幻想自己也能一夜暴富。但是排除我们所不能掌握的因素,例如运气、庄家操纵,我们自己能不能在行动上多做一些?而不是仅仅做一个生理意义上的应激动物?钱来钱往我们也许不能掌控,但是把一个技术搞通透,却是我们能做到的。等到能做到的时候,我们头脑里自然能生长出,关于这些事情的真正想法。
这些想法随着时间坚定起来,就会变成我们的信念。我们此生能赚到多少钱,最终还是要看我们的信念,和这个世界浩荡的趋势,是不是大体一致。但是照搬的信念是无法抵御波动的冲击,只有用行动铸就的思想体系,并在行进中不断修正,才能让我们不断变得更好。(参见《Scalers:投资赚钱就是信念变现》)
本着这样的想法,我想我也可以做一些事情。于是我把比特币作者中本聪(Satoshi Nakamoto)在2008年十月的论文拿出来,做一个研读解析。这篇论文我最早是在2010年的时候接触到的,那个时候我的研究兴趣是在密码学。光阴荏苒,现在再看,世间已经有许多变化。但是倘若我们真正想要在未来电子货币世界中,叩开一片世界,经典终都是需要的研读的。不忘初心,才能继续前进。
论文地址在https://bitcoin.org/bitcoin.pdf,我会后续结合我的理解,对论文的各个部分做一些补充。有一些其实是借题发挥,但是我不会逐行翻译,网络上已经有译本,可以参考巴比特的译版http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system。当然我的行文也会有不准确的地方,也请各路币圈链圈神仙圈前辈,多多批评指正。
2.标题:Bitcoin: A Peer-to-Peer Electronic Cash System[1]
标题有两个点可以解析一下,一个是Peer-to-Peer一个是Electronic Cash。
2.1 Peer-to-Peer 对等网络
Peer-to-Peer (P2P)是计算机里一个常用的设计范式,有时候会翻译成“点对点”,有时候会翻译成“对等”。比如Peer-to-Peer Networks可以译作“对等网络”或者“点对点网络”。
在传统意义上,有一种“client - server(简称CS)”的模式,在这种模式中,会有一个服务端(server),有一个“客户端(client)”。客户端向服务端发起请求,服务端根据预先部署好的程序处理请求。在生活中,你去超市购买商品、餐馆厨师做饭,都可以看到这样的范式。在这种CS的范式中,核心的一点就是,服务端与客户端具有不同的角色,不是对等的。服务端能做的事情,客户端通常不能做。比如你在餐馆吃饭,如果跑到厨房抄起了勺子,就会引起店老板的警觉。
Peer-to-Peer的范式与client - server不同在于,前者强调在网络中,各个节点是对等的。注意,我在这里用节点(node)来抽象代指对等网络中的一个实体,这可以是一台计算机,也可以是服务器,也可以是手机终端。对等就意味着,角色是可以相互替换的,不存在谁一定要服务谁的概念。当然也意味着谁都可以服务对方,或者被对方服务。在生活中我们都多少接触过P2P的概念,例如十多年前就已经有BT下载,之后的网际快车,迅雷等。
P2P与CS都是计算机领域中常用的范式,已经有大量的学者在这些领域做了研究工作[2,3]。例如,我们看网络视频的时候,从模型上看是CS的范式,不同的用户访问一个网站,从上面获取视频,在本地播放;但是由于资源有限,这样做技术方案往往会面对一个问题,卡。卡是由于网络拥塞造成的传播延迟,于是后期采用了CS+P2P的方案。如果服务器发现你周围有人也在看相同的视频,除了服务器给你传,周围的对等节点也给你传,这样一来你看视频的速度就会快很多。
P2P在视频、文件等传输领域上应用广泛。同时值得注意的是,现在比较成熟的大规模P2P技术方案,例如视频流媒体直播,往往都不会纯P2P的技术范式,因为服务商为了确保用户体验,往往会自己掏钱在不同的地区在放置一些超级节点,或者边缘服务器,可以加强用户体验。
P2P的概念流行,最早是1999年由美国一家叫Napster的公司发布的文件共享工具带来的。这个工具可以让用户免费从其他用户手中共享音乐,从而遇到了版权官司,最后关闭。国内以前曾经有名的VeryCD电驴,也在2011年停止了音乐和影视资源下载服务。不过创始人黄一孟最后转型做游戏,也赚了不少钱。之后百度影音与快播也关闭了P2P下载服务,快播CEO王欣也在2014年8月被捕判刑,在2018年刑满出狱。
P2P的一个特点是,由于各个节点对等,所以对于监管而言,往往没有一个好的“抓手”。就目前来看,不管是美国的Napster还是国内的快播,谁提供服务就整改谁、处理谁,是比较普遍的方式。比如全球著名的BT下载网站海盗湾(The Pirate Bay)创始人2015年就曾经被瑞典官方判刑,目前已经出狱[4]。但是对于相对灰色或者暗网采用P2P技术的应用,例如Tor,监管就会相对难以覆盖到。
了解了P2P的一些基本情况,再往下梳理比特币,就有一个好的基础。
2.2 Electronic Cash电子现金
电子现金是密码学里面的一个经典应用研究课题,在过去三十年关于这些方面有大量的文章发表[5-7]。这些研究主要专注在电子现金的安全性方面。现实生活中的现金更多的依赖于钞票物理属性,普通人一般很难制造假钞,一张钱花出去就没了,你不能再花一次;同时,法律对于制造、贩卖假钞的打击也非常严厉。但是电子现金的安全性,不能通过物理的属性保证,只能通过数学手段解决。在论文[6]中,Okamoto& Ohta提出了理想的电子现金系统需要具备的6个条件。
(1) 独立性。电子现金的安全性不依附于任何物理环境,这样现金才能通过网络转移。
(2) 安全性。电子现金系统要能防止复制、重用以及伪造。比特币里有一个词叫“双花(double spending)”,指的就是把一笔钱花出去两次[8]。这个问题在物理世界中不存在,因为纸币相对比较难复制。
(3) 秘密性(抗追溯性)。电子现金用户的隐私需要保护,用户的现金购买记录其他人不可追溯。纸币与信用卡相比,私密性更好,但是纸币上有序列号,原则上也是可追溯的。2018年春运期间,有一则新闻,黑龙江齐齐哈尔男子刘某在火车上遇“热心人”张某请喝酒,酒醉后发现钱丢了,对方拒不承认偷钱。刘某说出其中一张丢失钱的尾号,随后民警从张某身上搜出,张某于是被拘[9]。
(4) 可离线支付。用户向商家付款时,用户与商家的交易流程应该是以离线方式进行。商家不需要连接到在线的中央系统,也能完成支付。这一点在目前生活中已经在使用了,例如支付宝的付款码,在网络条件不允许的情况下,就是采用的离线支付的方式(但是这里的技术原理未必相同)。
(4) 可转账。现金可以转账至其他用户。
(5) 现金可拆分。价值为C元的现金,可以拆分为许多更小面值的现金,这些现金加起来,总额与C相等。
要注意的是,即使是真实的现金系统,也无法满足条件(5),于是移动支付广泛应用以前,我们身上往往会有很多破开的零钱。同时,信用卡不满足上述条件(1)和条件(3)。但是Okamoto& Ohta在1991年的论文中,首次提出了一个满足上述条件的电子现金系统[6],因为涉及到较多密码学的内容,这里不展开。
在Simplot-Ryl et al.的文章[5]中,概括了电子现金系统的两大类常用的架构,在线模式和离线模式。
(a) 在线模式
在线模式下,有三个角色:银行、付方(客户,Payer)、收方(商家,Payee)。
注意这里的图中有一个英文语言现象,在一个动作pay的施加体用er后缀,受体用ee,类比employer/employee和interviewer/interviewee。读S老师的技术文章,顺便学英语,一箭双雕。
这里的银行就是金融机构,向客户发行电子现金,提供验证服务,向商家提供兑换。
简化而言,在这个场景下,付方将代表自己的钱的字符串(s, s’)发给收方,收方在上面加上自己的信息(s, s’, s1’)发给银行,银行检查这笔钱是第一次花,作废掉s’,用s1’代替,这样下次付方即使再用s’支付,银行的验证就不会通过了。可以理解为,付钱的时候,付方有一笔钱,被银行收回,银行再给收方一笔钱。这是通过销毁一笔钱,生成一笔钱的方式,完成了支付。
但是这种在线模式有一个问题,就是网络的负载都会加在银行上。如果有很多人同时给其他人付钱,那银行就会出现性能的瓶颈,从而可能引起单点崩溃(single-point failure)的问题。单点崩溃问题在计算机里是一个需要注意和避免的问题。
(b) 离线模式
为了解决在线模式的问题,还有研究者引入了离线模式。离线模式也需要有银行,但是银行不参与到支付流程中。从上文可以看到,当在交易中不需要银行的介入,可以解决性能瓶颈已单点崩溃的问题,但是又引入了新的问题:离线模式无法事前防止“双花”事件的发生,往往是一笔钱花了两次以后,才被发现。
于是为了解决这个问题,密码学家又做了诸多设计,但是从结果来看,这些设计往往涉及到盲签名等技术,增加了交易中传输的数据量或者计算量,反而抵消掉了离线模式本来能带来的好处。盲签名的意思就是,银行给付方的钱签名认证,但是不知道付方的钱是付给了谁,于是可以保证上文第(3)条私密性。另外还有一些学者设计了零知识证明的方案来做支付设计,关于盲签名、零知识证明等概念,以后再撰文讨论。
总体而言,如果采用了离线的模式,那么由于去中心化、自组织的特点,在扩展性上,离线模式自然要比在线的模式更好,但是代价就是安全性能会降低。为了解决安全问题,必须引入额外的机制加强,而这又会降低由于离线所带来的好处。所以,设计一个电子现金系统,需要在各个方面做好权衡。
关于电子现金系统,还有其他许多学者的研究,以后有机会再单独写文解析。
好,具备了以上的基础知识,我们现在已经建立了两个基本的概念:
(1) P2P网络的基本特性,以及与CS范式的对比
(2) 电子现金系统的基本要求以及实现方式
如果结合第一部分对等网络的知识来看,采用在线模式,本质上用的就是“客户端与服务端”的CS模式,而采用离线模式,其实就是支付不需要经过服务器的“对等网络”P2P模式。
现在问题来了,如果让你设计一个比特币现金系统,同时结合P2P以及离线模式的概念,你会怎么做?
请你思考一下,下一篇,就可以进行开始比特币的论文学习了。
如果今天的文字对你有启发,记得打赏。
参考文献
[1] Nakamoto S. Bitcoin: A peer-to-peer electronic cash system[J]. https://bitcoin.org/bitcoin.pdf, 2008.
[2] Lua E K, Crowcroft J, Pias M, et al. A survey and comparison of peer-to-peer overlay network schemes[J]. IEEE Communications Surveys \& Tutorials, 2005,7(2):72-93.
[3] Wang C, Li B. Peer-to-peer overlay networks: A survey[J]. Department of Computer Science, The Hong Kong University of Science and Technology, Hong Kong, 2003:9.
[4] Last remaining Pirate Bay founder freed from jail | Technology | The Guardian[EB/OL]. [2018/2/20]. https://www.theguardian.com/technology/2015/jun/02/last-remaining-pirate-bay-founder-freed-from-jail-fredrik-neij.
[5] Simplot-Ryl I, Traoré I, Everaere P. Distributed architectures for electronic cash schemes: a survey[J]. International Journal of Parallel, Emergent and Distributed Systems, 2009,24(3):243-271.
[6] Okamoto T, Ohta K. Universal electronic cash, 1991[C]. Springer.
[7] Chaum D, Fiat A, Naor M. Untraceable Electronic Cash, New York, NY, 1990[C]. Springer New York.
[8] Double-Spending Definition | Investopedia[EB/OL]. [2018/2/20]. https://www.investopedia.com/terms/d/doublespending.asp.
[9] 他偷钱不认账,失主竟报出钞票尾号-一手video的秒拍[EB/OL]. [2018/2/20]. http://www.miaopai.com/show/Nn87lZmtXNPjCbvRV-LT52OnoWBDFQt-tMxNrA__.htm.