1) 昨天的文章推送以后,有许多读者给我打赏,在此表示感谢,当然也有许多人说,看不太懂很烧脑。我会把文章写得尽量通俗,但是如果你真想要学会,看不懂就再努力一把,尝试还原知识本来的样子。学习不费脑力,就是在自我欺骗。
2) 昨天有位读者 @胡刚 和我探讨 double spending 的译法,我处理成“双花”,读者认为“双重支付”会更好。第一次听“双花”比较容易不理解,但是经过思考我还是坚持这个方案。Spend 的英文释义如下 give (money) to pay for goods, services, or so as to benefit someone or something(为商品/服务给予……以获益)。再看一下 pay 的释义 give (someone) money that is due for work done, goods received, or a debt incurred(由于服务交付、商品收讫、债务产生所引发的支付)。Spend 更多强调的是给出的这个动作,指的是从现有的资源中扣减这一语义,而 pay 更多的是由于服务交付实际把钱给出去。在 double spending 的语境下,我个人认为,“花”,要比“支付”更好。如果一定要强调“支付”,我个人认为用“重复支付”会更贴合意思。
本系列历史文章列表
从零开始区块链:对等网络与电子现金是什么?——比特币经典论文研读 (1)
3.摘要部分
论文的摘要是一篇文章提纲挈领的核心,作者通常会把最重要的点概括在摘要中。本论文摘要主要提到以下几个方面:
(1) 一个纯P2P的电子现金系统,可以让收付方间,无须经过金融机构直接交易。为了解决双花的问题,电子签名是常用的方案,但是这样就引入了第三方的问题。如果你读了本系列第1篇文章(《从零开始区块链:对等网络与电子现金是什么?》),里面关于电子现金系统的的探讨,铺垫了这些基础知识。
(2) 论文提出一种利用P2P网络解决双花问题的方案。方案采用给交易加上时间戳再经过哈希后,放到一条链上;链由“工作量证明”通过哈希形成,如果不重做“工作量证明”,形成的记录无法修改。
(3) 由于把所有的交易都根据时间序列,经哈希保存在链中。最长的链不仅代表网络中见证的所有事件序列,也代表这些链来自拥有最大CPU算力的工作证明。换句话说,把交易记录放到链上,需要工作量的证明,而如果一个链长,那说明记录的事件就多,需要的工作量就越大;最长的链,自然就有最大的算力,以及最多的事件记录。
(4) 只要P2P网络的主要CPU算力不合谋对网络发起攻击,那正常生成的链速度就会比攻击者更快。作者相信P2P网络中的大部分节点不会出现共同合谋操控链的生成的情况,相信人民群众的眼睛是雪亮的。
(5) 网络中的消息按照最大努力进行广播,节点任意加入或者退出,并且在每次重新加入时,接受上次离开期间最长的工作量证明链。
这里有几个概念,哈希,工作量证明,广播,节点加入与退出,攻击者。先搁一边,我们继续正文。
4. 介绍
介绍部分有以下几个要点,先看第一段:
(1) 目前互联网的电子商务需要依靠金融机构作为可信任的第三方处理电子支付业务。这从本质上是一种基于信任的模型。什么是信任?Trust的英文释义就是firm belief in the reliability, truth, or ability of someone or something(对某人/物可靠性、真相以及能力的坚定相信),这里的信任模型指的就是,在网络上的交易双方,对于第三方机构是默认信任的。比如你要买一套二手房,在进行交易环节的时候,通常会有一个银行托管。这个时候银行作为第三方,与买卖双方的关系,就是默认信任的。你也没有什么方法去验证一家银行是不是可信的,你就是相信这个银行是靠谱的。
(2) 交易中,不可避免会出现争议,当专门的第三方金融机构参与交易,为了调解争议,交易完全不可逆不现实。但是为了支持交易的调解,会增加交易数据大小,也会限制小额交易。同时,如果要支持不可逆交易,会有更大的代价。这里的transaction size,我理解指的是一次交易网络传输的数据块的大小,不是指的交易规模的大小[10],部分互联网的译作不够准确[11]。如果从密码设计的角度就好理解,如果交易要支持可逆,那在网络上交换的数据字段,必然要比不支持该功能,存储更多的信息,从而会造成交易数据量的增大,这样就限制了最小数据量的大小。另根据文章统计[10],比特币的交易数据平均大小已经由2013年1月的450字节增长到2015年10月的600字节。
(3) 由于支持交易可逆,对于信任的要求增加。商家需要更关切客户,因为客户会有各种新要求,让商家提供更多的无关信息。交易一旦可逆,欺诈不可避免。如果使用实体货币,这些问题可以避免,但是如果在网络上,没有一个信任方,交易就无法开展。
这一段主要是以下脉络:在网络上交易,人与人见不到对方,那如何证明你不是一条狗?现在采用的方式是,共同相信一个第三方,说你不是狗,你就不是狗。但是在交易的过程中,如果出现争议,就要倒回去核查你到底是不是一条狗。但是为了支持这个核查,就需要有更多的信息在交易中传输。这个怎么理解?你去楼下买包子。包子卖了就不退了,但是如果你要求包子铺是支持退货,那你下次买包子,就不能直接买了,你要登记身份证、健康证、信用保证书等信息,否则我如何知道你是在我这里买的包子呢?那本来一个简单的交易,由于要支持交易可逆,我就要知道更多的信息,不能给钱拿到包子就走了。这样就增加一次交易的数据量了
第二段有以下要点:
(1) 之前采用的信任模型是一种“我们共同相信”的前提,但是现在电子支付需要一种基于密码学证明而非信任。当引入了密码学的手段,就不需要经过一个第三方建立信任,可以直接交易了。这里有一些密码学的背景知识,在密码学里,有一些手段是可以用来构建信任的,比如,假设你能解出某个问题的答案,我就可以信任你,不需要我去相信一个第三方。这有点像如果你能拿出清华大学的毕业证书,那我相信你的智力水平至少不低于社会平均线……
(2) 采用密码学手段构建出了不可逆的交易,可以保护商家不受欺诈,也可以构建托管机制保护买家。
(3) 这篇论文提出的一种解决双花的机制。采用的是P2P分布式的时间戳,并且给交易打上时间序列,并且通过计算的方式生成证明。在网络中的诚实的节点拥有的CPU算力超过攻击者节点的情况下,系统是安全的。作者在这里还是相信了群众的力量,就是善良的人是多数的,只要是多数,系统就是安全的。那如果邪恶超过了一半以上呢?邪恶会变成新的善良。作者在论文后半部分,分析了这个问题。
第二段承接上一段,并且引出了论文要做的工作。一个是通过密码学而非纯粹信任构建的支付系统,二是讲了一下密码学的好处,三就是重复了一下摘要里面提到的要点。在一般的学术论文里面,篇幅会比这个更长一些,还会介绍一些相关的工作等。
5. 交易
这一段讲的是交易的问题。
(1) 作者把一串电子签名定义为电子货币。货币的转账按以下方式进行:币的拥有人A如果要把钱给B,就把B公钥以及当前所有交易的哈希值放在一块,然后用自己的私钥签名。收方可以通过验证签名来检查钱的归属。
(2) 但是收方无法验证付方双花的问题。对于双花的常用解决方案,就是引入一个信任的权威机构,检查每一笔交易,防止一笔钱花两次。在每一次交易中,付方的钱被收回,机构给收方发一笔新钱,只有来自权威机构的钱,才可以信任为没有双花的。这个方案的最终结局就是,电子现金系统里所有的钱都要通过这样一个机构,这个机构其实就对应到第1篇文章里说的银行了。
(3) 要确认一笔交易是否存在,需要知道所有的交易情况。在基于权威机构的模型中,这个第三方机构,知晓电子现金系统里所有的交易。但是如果不引入这个权威机构,那就需要把所有交易公开出来,让所有人知道。同时,还需要设计一种方法,让所有人的获得相同的交易历史记录。这样收方就可以在交易的时候知道,这笔钱没有在别处花过。
这一部分讲了两个问题:
第一个问题就是,在网络上一笔钱怎么才能花出去。在现实生活中,你把钞票给卖家,钱给出去交易就成了,但是在网络上,你先要证明钱是你的,然后你还要证明这钱花出去后,钱归收方了。这里采用的就是历史交易哈希加上签名验证的方法。
第二个问题就是,当花了钱以后,如何防止钱花两次?以前我们有一个权威的第三方机构来检查系统中所有的钱是唯一消费的,但是如果你要去掉这个权威,那你就只能把这个角色替换成“让所有人都知道”的方式来做了。
在这一部分你会看到,昨天的基础知识虽然和比特币没有关系,但是比特币在设计的时候,其实也是在相同知识框架下传承的。
参考文献
[10] Blog | TradeBlock[EB/OL].[2018/2/21].https://tradeblock.com/blog/analysis-of-bitcoin-transaction-size-trends.
[11] 比特币白皮书:一种点对点的电子现金系统 | 巴比特[EB/OL]. [2018/2/21].http://www.8btc.com/wiki/bitcoin-a-peer-to-peer-electronic-cash-system.