LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 「火星公开课」第182期 |格密链创始人陈智罡:重温比特币白皮书

「火星公开课」第182期 |格密链创始人陈智罡:重温比特币白皮书

2020-02-20 火星公开课 来源:火星财经


要点速览:

1.黎曼猜想对公钥密码没有直接的任何威胁,对区块链的安全也没有任何影响。

2.目前量子计算机的发展还处于非常原始阶段,不会对区块链安全造成威胁。

3.工作量证明就是不断的取一个随机数去求解区块的哈希值,没有捷径可言,就是不断的尝试,不断的计算。

4.新交易在广播过程中,未必需要到达全部的节点。只要它们能够到达大多数的节点,那么这些新交易很快会出现在链上的一个新区块中。

5.时间戳为什么能够解决双花问题?因为要形成一个唯一的不可更改的交易记录账本。

6.任何东西有需求才有价值,或者大家认可也会产生价值。比特币还是有需求的,所以也会产生价值。

9月23日20:00,格密链创始人陈智罡做客「火星财经创始学习群」,围绕“重温比特币白皮书”这一主题,与轮值群主亚洲区块链学会会长蔡志川进行了深度对话,内容涵盖黎曼猜想以及比特币白皮书关于双花问题、时间戳、工作量证明等的诠释。

陈智罡表示,黎曼猜想早在1859年就提出,而公钥密码是在70年代末提出的,至今没有相关论文显示黎曼猜想会对破解RSA有什么直接效果,也不会对区块链安全造成影响。

据陈智罡介绍,在比特币白皮书中,交易的内容就是付款人将该币支付给收款人,为了证明付款人能够将该币支付给收款人,必须说明四个问题:1.该币属于付款人;2.付款人同意将该币支付给收款人;3.付款地址必须是收款人的地址;4.该币没有被双花。

以下为陈智罡分享原文,由火星财经(微信:hxcj24h)整理:

一、黎曼猜想对公钥密码没有任何直接威胁

蔡志川:关于黎曼猜想的新闻被炒得轰轰烈烈,都快赶超山竹的威力了!这黎曼猜想据说可能被证明。这个问题真的会对数学界表示很大影响吗?

陈智罡:这个问题我刚好在喜马拉雅的节目“区块链杂谈”里讲过了。黎曼猜想精确的刻画了某个数之前有多少个素数,以及素数之间的距离,但是它并不会导致新的因数分解算法。

最近由于黎曼猜想可能会被证明,网上充满了讨论,甚至波及到了区块链。有新闻说如果黎曼猜想被证实的话,将危及公钥密码学的安全。由于互联网上使用的都是公钥密码,所以互联网也都不安全了。更具体的猜测是,由于黎曼猜想和素数有关,所以RSA密码体质将会被攻破。

以上猜测搞得人心惶惶,皆因大家的好奇心,说来也是好事。一个数学界的新闻能让大家如此关注。我也查了国外一些网站的说法。


由于我是搞密码学的,又涉足区块链界,所以有些群友不断在问我。为此我以我的理解及所查的资料,对以上说法进行正本清源。首先我说结论:

第一,黎曼猜想早在1859年就提出,而我们用的公钥密码是在70年代末提出的。所以,如果黎曼猜想会对破解RSA加密算法有什么帮助的话,一定会早有论文提出。然而,至今为止也没有看到有相关论文显示黎曼猜想会对破解RSA有什么直接效果。

第二,区块链上用的密码算法只有两个:哈希函数和数字签名。哈希函数和素数没有关系,所以和黎曼猜想没有关系。数字签名使用的是椭圆曲线上的方案,所以与大整数分解没有关系,从而和黎曼猜想也没有关系。

所以,黎曼猜想对公钥密码没有直接的任何威胁,对区块链的安全也没有任何影响。

为了让大家更好地理解上述结论,我们先来解释一下什么是黎曼猜想。要说清黎曼猜想,首先得说素数。素数在自然数中是一种特别的数,它只能被1和自己整除。说白了,素数没有因子,就像一个人没有后代(比喻略显不恰当)。素数的这种孤零零的特性,使得它是整个自然数的“基石”。因为它不能再被分解了,所以只能去构造其他数。因此有个结论,每个自然数都可以唯一地分解成有限个素数的乘积,而且素数的个数是无限的。

素数如此特别,数学家们试图搞清楚如何判断一个数是素数。给你一个小的数,例如7,你很容易判断它是素数。但是当给你一个很大的数字时,判断一个数是否为素数,是需要方法的。由此产生了素数判定的算法。

为了更好地理解素数,数学家们在19世纪便不再尝试预测素数的精确位置,转而将素数的现象视为一个整体。这种分析的方法就是黎曼所擅长的,他著名的猜想也由此得出。

为了理解素数是如何分布的,高斯给出了一个素数计数函数π(x),它能够给出某个数之前的素数的数量(即有多少个素数)。随后,高斯(和勒让德独立地)提出了素数定理:当x增长到无穷大时,素数计数函数π(x)会近似于x/ln(x)函数。这意味着前x个整数中连续素数之间的平均间隙约为ln(x)。换句话说可以用x/ln(x)近似π(x)。
陈智罡:然后又出现了对数积分函数Li(x),数学家发现Li(x)能够比x/ln(x)更好的近似π(x),说明Li(x)能够更好的刻画素数的个数。

然而,素数定理所预测的分布规律与实际仍然有所偏差,而且时大时小。这一切引起了黎曼的注意。

1859年,年仅33岁的黎曼发表了论文《论小于已知数的素数个数》。在该文章中,黎曼定义了一个函数:黎曼zeta函数。在论文中黎曼给出了一个推测:黎曼zeta函数的所有非平凡零点可能都全部位于实部等于1/2的直线上。具体内容各位可以忽略。那么黎曼zeta函数的非平凡零点有什么用呢?

黎曼用Li(x)以及zeta函数的非平凡零点,给出了自己的素数定理,即更准确地估计数字x以内有多少个素数。这一精确的刻画素数个数的定理,让黎曼大放光彩。到此为止,我们说了黎曼猜想是什么?简而言之,就是给出了数字x以内更精确的素数个数的公式。

这就是黎曼给出的公式,第二项中x的ρ次幂的ρ就是黎曼zeta函数非平凡零点。这就是黎曼zeta函数非平凡零点的意义所在,这就是关于黎曼猜想在数学领域上的意义。

有人曾经问希尔伯特,如果500年后能重回人间,他最希望了解的事情是什么?希尔伯特回答说:我想知道,黎曼猜想解决了没有。数学最重要的任务首先搞清楚自然数的规律。然而到现在,对素数的规律也没有摸清楚。

二、黎曼猜想对RSA造成影响无相关依据

蔡志川:是的,密码学对区块链的重要性不容置疑,那这黎曼猜想的证明会不会对RSA造成影响呢?

陈智罡:RSA所基于的困难问题是“大整数分解困难问题”。即给你一个大的整数,对其分解为素数之积是困难的。这是RSA加密算法的安全性基础。

目前对大整数分解用的方法主要是数域筛法,但是这些方法都不能有效的分解大整数。黎曼猜想是宏观上对素数的分布有个判断,它不能直接求素数,也不能对一个整数进行素数分解。RSA和大整数分解有密切关系。

目前根据文献,黎曼猜想对于生成素数,例如RSA中的密钥生成算法,是有帮助的,但是对于整数分解算法并没有直接的提升,所以不会对RSA加密体质有任何影响。

大家一定要区分素数检测和整数分解是两回事。很多人都认为是一回事,这是产生错误的根源。

对于黎曼猜想的证明,大家更多的认为可能会对数域的结构有个更好的认知。从某些方面,可能会对密码学有所启示。

黎曼猜想早在1859年就提出,而我们用的公钥密码是在70年代末提出的。所以,如果黎曼猜想会对破解RSA加密算法有什么帮助的话,一定会早有论文提出。然而,至今为止也没有看到有相关论文显示黎曼猜想会对破解RSA有什么直接效果。

区块链上用的密码算法只有两个:哈希函数和数字签名。哈希函数和素数没有关系,所以和黎曼猜想没有关系。数字签名使用的是椭圆曲线上的方案,所以与大整数分解没有关系,从而和黎曼猜想也没有关系。

蔡志川:说到这里,想起另一个伟大的技术突破量子技术,那陈教授能说说量子计算机的出现会不会对区块链造成巨大威胁呢?

陈智罡:理论上量子算法能够加速对大整数的分解,所以对基于大整数分解的RSA是有很大威胁的,对于哈希函数也有一定的威胁,但是只要把哈希函数的位数提高,就可以抵抗目前的量子算法攻击。对于椭圆曲线上的加密算法,量子算法也是有一定的优势的。

因此理论上,量子算法会对区块链的安全有一定的影响。但是,实际上,目前量子计算机的发展还处于非常非常原始的阶段,根本不足以运行实际的算法,所以量子计算机不会对目前区块链的安全造成威胁。

另外,抗量子密码算法已经比较成熟了,例如格密码。目前美国的NIST组织正在制定抗量子密码的标准,第一轮候选方案的征集已经筛选出69个。主要是两类算法:数字签名,加密算法。一共有5类体制,如下图:


我研究的就是格密码,它基于的困难问题是几何问题——寻找最短向量,目前是抗量子的。

三、“比特币里面没有币,而只有交易”

蔡志川:非常感谢陈博士的解惑,那下面我们让陈博士带我们来重温比特币白皮书吧!之前看过很多版本的比特币的白皮书,感觉很多翻译都有问题。

陈智罡:是的,这也是我觉得有必要和大家重温的原因之一。现在市场趋冷,正是技术精进之时。目前市面上的比特币白皮书翻译有些错误和误解,例如在交易这节里,第一句话就翻译错了,Wedefineanelectroniccoinasachainofdigitalsignatures。

上面这句话的意思是:在比特币系统中,一个数字货币被看作是由数字签名构成的链。而数字签名是干什么的?是用于对交易的签名,所以一个数字货币被看作是由交易构成的链。

比特币系统是一个点对点的数字货币系统,所以在该系统中“币”是一个非常重要的概念。

蔡志川:那是如何在系统中体现币呢?

陈智罡:币是在交易中流动的。每一次交易,币就从一个人的手中转移到另外一个人的手中,不断循环流动。

根据上面的定义,在比特币系统中,一个数字货币被看作是一个由交易构成的链,该链反映了该币的每一次交易。注意,这里的链与区块链不是一个意思。

这就是为什么经常说,比特币里面没有币,而只有交易的原因。在比特币系统中,所有体现币的地方,都用该币的最近一次交易来代替说明。

蔡志川:那么如何能够保证付款人能够将该币支付给收款人呢?

陈智罡:这需要知道数字签名的功能是什么。数字签名功能有三个:第一,证明该消息来自于发送者,该功能称为认证;第二,发送者不能否认自己发过该消息,该功能称为不可抵赖;第三,发送的消息在传输的过程中没有改变,该功能称为消息的完整性。

那么交易的内容是什么呢?交易的内容就是:付款人将该币支付给收款人。为了证明付款人能够将该币支付给收款人,必须说明四个问题:1.该币属于付款人;2.付款人同意将该币支付给收款人;3.付款地址必须是收款人的地址;4.该币没有被双花。


那么如何保证上面的前三点的呢?白皮书紧接着说:Eachownertransfersthecointothenextbydigitallysigningahashoftheprevioustransactionandthepublickeyofthenextownerandaddingthesetotheendofthecoin.

就是付款人(数字货币的所属人)通过将上一笔交易以及收款人的公钥(即收款地址)进行哈希函数计算,然后对该哈希值进行数字签名,最后将签名附在该币的后面,以达到证明付款人能够将该币支付给收款人的目的。

为什么付款人要对上一笔交易签名呢?因为要保证该币属于付款人(币的所属权)。由于比特币系统中,币是由交易体现的,所以该币应该是之前由某人支付给了当前付款人(即产生了一笔交易),也就是追溯币的来源,从而说明该币属于付款人。如果不能追溯到该币的上一笔交易,则无法说明该币属于当前付款人。公钥在这里代表收款人的地址。对上一笔交易和公钥进行哈希计算,是为了缩短签名内容的长度。

紧接着白皮书说:Apayeecanverifythesignaturestoverifythechainofownership.即收款人通过验证数字签名来达到验证币的所属权的目的。

紧接着白皮书说:Theproblemofcourseisthepayeecan'tverifythatoneoftheownersdidnotdouble-spendthecoin.

前面说了,为了证明付款人能够将该币支付给收款人,必须说明四个问题,前三个问题都有了着落,而第四个问题“该币没有被双花”却没有说如何解决。即收款人无法验证在这些交易中,该币没有被双花。
Acommonsolutionistointroduceatrustedcentralauthority,ormint,thatcheckseverytransactionfordoublespending.Aftereachtransaction,thecoinmustbereturnedtotheminttoissueanewcoin,andonlycoinsissueddirectlyfromthemintaretrustednottobedouble-spent.Theproblemwiththissolutionisthatthefateoftheentiremoneysystemdependsonthecompanyrunningthemint,witheverytransactionhavingtogothroughthem,justlikeabank.

四、如何破解双花问题

蔡志川:那比特币白皮书是如何阐述解决双花的呢?

陈智罡:解决双花问题的一个通常解决办法是引入一个可信的中心,或者货币发行方,通过它们检查每一笔交易。每次交易完后,货币发行方从付款人那里减掉相应的货币,并且从收款人那里增加相应的新币。只有通过货币发行方发行的货币才被认为没有被双花的。显然这种解决方法使得整个货币系统依赖于一个中心,即货币发行方,就像我们现在的银行,每一笔交易都是由它来处理。

Weneedawayforthepayeetoknowthatthepreviousownersdidnotsignanyearliertransactions.Forourpurposes,theearliesttransactionistheonethatcounts,sowedon'tcareaboutlaterattemptstodouble-spend.Theonlywaytoconfirmtheabsenceofatransactionistobeawareofalltransactions.Inthemintbasedmodel,themintwasawareofalltransactionsanddecidedwhicharrivedfirst.Toaccomplishthiswithoutatrustedparty,transactionsmustbepubliclyannounced[1],andweneedasystemforparticipantstoagreeonasinglehistoryoftheorderinwhichtheywerereceived.Thepayeeneedsproofthatatthetimeofeachtransaction,themajorityofnodesagreeditwasthefirstreceived.

所以我们需要一种方法让收款人知道,在此之前该币并没有被双花过。双花什么意思?就是该币被当前付款人使用后,又被付款人第二次使用。

从交易角度来说,对当前付款人该币产生了2笔交易,这两币交易是有先后顺序的。第一笔交易是合法的,而第2笔交易就是双花,是非法的。


理解到这个层次,才能对白皮书中的这句话理解:Forourpurposes,theearliesttransactionistheonethatcounts,sowedon'tcareaboutlaterattemptstodouble-spend.即对当前付款人来说,该币产生的第一次交易(最早的一笔交易)才是我们关注的,因为这笔交易是合法交易。而对于该币产生的后面交易都属于双花,所以并不需要关注(因为这些双花交易都是要被废掉的)。

注意这里的语境都是对当前付款人来说的,即该币的所属人。很多翻译都是直接按照字面意思翻译,读者会读起来感到莫名其妙,前词不达后语。

为此,我们必须知道交易的先后顺序,这样才能确定每一笔交易是否合法或者双花,从而把不该存在的交易剔除。就是这句话的含义:Theonlywaytoconfirmtheabsenceofatransactionistobeawareofalltransactions.

这句话很多人不能够理解。确实单从字面上很难理解其含义。紧接着白皮书对比了中心化系统下采用的方法。在基于中心化的货币发行方的模型下,货币发行方知道所有的交易,从而可以判断交易的先后顺序,故而避免双花。

而在去中心化环境下,由于没有中心,如何形成一个唯一的且交易具有先后顺序的账本呢?方法是交易在系统内公开广播,从而让所有参与者都知道交易。

光是知道交易是不够的,关键是对交易的顺序达成一致共识。因此需要构建一个系统,让系统内的所有参与者能够对交易的先后顺序达成共识(注意这里再次说明交易的先后顺序是多么重要。为什么重要?因为可以解决双花。为什么能够解决双花?因为可以确定该币的第一笔交易)。即系统内每个参与者手上都具有唯一的相同的交易链(避免了交易链的不一致)。

收款人需要证实他收到的每一笔交易都是系统内大多数节点认可的不是双花的交易,即在此之前对该收款人来说,该币没有被花费过,即第一笔交易。所有这一切都是为了解决双花问题。注意上面只是提出了需求(因此需要构建一个系统……),并没有给出如何做到对交易顺序达成一致共识的方法。

五、关于时间戳

蔡志川:那又是如何对交易的先后顺序达成一致共识呢?

陈智罡:这里需要清楚什么是时间戳。这也是比特币白皮书里非常重要的概念,但是这个概念并没有在普罗大众中所知。

前面指出为了解决双花问题,需要系统能够对交易的先后顺序达成一致共识。但是如何做并没有说。显然顺序和时间有关,那么在系统内如何体现时间呢?

首先要清楚什么是时间戳。时间戳就是为某个文档的时间提供证明。在某些商务场合很重要,例如签合同,时间是具有法律意义的。在电子文档环境下要提供时间戳,需要保证两件事情:一是文档没有被修改;二是为该文档添加的时间戳具有信用背书,也就是需要一个可信的第三方机构来发布时间戳。

第一点可以通过对文档的哈希来解决;第二点如果在可以有中心化的场景,可以通过专业的可信第三方提供时间戳服务。但是现在是点对点的去中心化环境,如何提供时间戳呢?所以白皮书这节的第一句话,就说为了提出解决方案,我们先从时间戳服务说起:Thesolutionweproposebeginswithatimestampserver.

紧接着白皮书解释了如何提供时间戳:Atimestampserverworksbytakingahashofablockofitemstobetimestampedandwidelypublishingthehash,suchasinanewspaperorUsenetpost.

时间戳服务可以通过计算区块数据的哈希值,并且广而告之该哈希值,例如刊登在报纸或者其它媒体上来提供。上述方法通过哈希解决了数据的不可篡改性,通过报纸等媒体解决了时间性。因为报纸等媒体是按照时间发行,具有时间特征的。而且哈希值一旦在报纸等公开媒体发布,其时间和哈希值就牢牢绑定无法更改了,被永远记录在媒体上。从而实现了分布式时间戳的目的(即不需要一个可信的机构来发布时间戳)。

所以白皮书紧接着说:Thetimestampprovesthatthedatamusthaveexistedatthetime,obviously,inordertogetintothehash.Eachtimestampincludestheprevioustimestampinitshash,formingachain,witheachadditionaltimestampreinforcingtheonesbeforeit.

显然通过计算区块数据的哈希值来提供时间戳服务,该时间戳证明了区块数据在某个时间的存在性。


在计算区块的哈希时,包含了前一区块的时间戳,从而形成了一个链条,即每一个区块的时间戳都包含了它之前区块的时间戳。

通俗的讲,前面所有区块的特征都被遗传到了后面的时间戳中。如果想篡改某一个区块的时间戳,必须篡改其后的所有时间戳才可以。这是一个非常好的特性,使得时间戳链条越长,安全性越好。
陈智罡:从而时间戳链条越长,就越能增强前面时间戳的不可篡改性。因为要花更大的代价去篡改其后的所有时间戳。这就是这句话的本质含义Eachtimestampincludestheprevioustimestampinitshash,formingachain,witheachadditionaltimestampreinforcingtheonesbeforeit.

目前的中文版都没有对背后的意思进行解读,这是需要功力的。如果不对比特币系统有深入的理解,很难读懂其白皮书。

整个白皮书一环套一环,很紧凑,很简洁,但是也造成了理解上的困难。相信经过我们这样的深入解析,会让您豁然开朗。

六、时间戳本质上就是一个哈希链

蔡志川:听完陈教授讲解,确实时间戳很重要。那么时间戳和哈希值之间是什么样的关系呢?

陈智罡:上述论述的时间戳本质上就是一个哈希链,而且每个哈希值都被打了时间戳的一个链。要在点对点的分布式环境下,实现该时间戳是需要一种新机制的。这里存在一个问题,哈希只是解决了数据不可篡改的目的,如何和时间挂上钩呢?

这里非常重要,可以通过可信的第三方来提供时间戳服务,也可以把哈希值记录在报纸等公开的媒体上。但是现在是一个点对点的网络,即不存在中心化的第三方。那么如何体现可信时间这个概念呢?


由于是点对点的网络,所以时间必须是随机的由网络中的某个节点提供。如果不是随机的,就不能体现点对点网络的去中心化特征,时间就可能被提供者控制。

有些人可能会想,那就由随机选定的节点提供时间就可以了。这样做不能保证时间的真实性(因为可能会被篡改),因为不能保证每个节点都是诚实的。

那么既要保证时间提供者的随机性,又不能让提供者直接提供时间,这不是矛盾吗?如何解决呢?

办法总是人想出来了的。中本聪想的办法是通过事件来体现时间,即把事件和时间关联起来。就像把哈希值记录在报纸上一样。只要事件是随机的,那么完成该事件就意味着在某个时间完成了该事件,从而体现了时间,关键是体现了交易的先后顺序。

七、如何实现时间戳

蔡志川:陈教授您解释了这么多时间戳的概念,那么如何实现时间戳呢?

陈智罡:白皮书在工作量证明机制里,第一句话就点明了目的。为了在点对点的去中心化环境下实现分布式时间戳服务,我们使用类似于Adam在Hashcash中提出的一个工作量证明系统,而不是使用报纸或者新闻组这样的方法。所以后面全部围绕着如何具体实现上节的时间戳。

由于是在点对点的环境下,所以该时间戳是一个分布式时间戳。下面讨论的就是分布式时间戳实现的方法,是对上节时间戳概念的落实。

为什么要实现时间戳呢?因为要解决双花问题。时间戳为什么能够解决双花问题呢?因为要形成一个唯一的不可更改的交易记录账本。注意Hashcash也是一个电子现金系统,是由Adam提出的。中本聪受到该系统的启发,并且在白皮书中引用了该论文。

此外,上面说了不使用在上节说的报纸或者新闻组来实现时间戳。那么通过什么方法来实现呢?白皮书上说了,通过一个叫“工作量证明”的方法。

蔡志川: "工作量证明”这个概念在白皮书里是如何讲的呢?希望听到原汁原味的。

陈智罡:什么是工作量证明呢?白皮书给出了说明:Theproof-of-workinvolvesscanningforavaluethatwhenhashed,suchaswithSHA-256,thehashbeginswithanumberofzerobits.Theaverageworkrequiredisexponentialinthenumberofzerobitsrequiredandcanbeverifiedbyexecutingasinglehash.

工作量证明就是求解一个哈希值(例如通过SHA-256求解哈希值),要求该哈希值的最高位含有若干个0。平均情况下,该工作量与0的个数呈指数级关系,即哈希值中0的个数的增加将会让求解工作量呈指数级增长。而验证该哈希值的正确性可以通过执行哈希函数来进行。


上面说明了工作量证明的难度,即求解满足要求的哈希值所花费的时间,与哈希值的最高位含有多少个0有直接关系。这样就把工作量证明与时间挂上了钩。那么具体如何实现工作量证明呢?白皮书紧接着说了:

Forourtimestampnetwork,weimplementtheproof-of-workbyincrementinganonceintheblockuntilavalueisfoundthatgivestheblock'shashtherequiredzerobits.OncetheCPUefforthasbeenexpendedtomakeitsatisfytheproof-of-work,theblockcannotbechangedwithoutredoingthework.Aslaterblocksarechainedafterit,theworktochangetheblockwouldincluderedoingalltheblocksafterit.

蔡志川:那我接着问,通过工作量证明机制如何实现时间戳的呢?

陈智罡:为了构建我们的时间戳网络,我们需要实现工作量证明机制,而该机制是通过不断递增一个区块中的随机数,直到发现一个满足要求的区块哈希值。

所以,工作量证明就是不断的取一个随机数去求解区块的哈希值,没有捷径可言,就是不断的尝试,不断的计算。一旦CPU的算力用于完成了工作量证明,即发现了一个满足要求的哈希值,也就是找到了放到区块中的那个随机数,则如果想改变该区块中的数据的话,必须再做同样的事情,即花费CPU的算力去完成工作量证明。
陈智罡:如果该区块后面又有新的区块,则改变该区块中的数据所花费的工作量将包括后面的所有区块,所以工作量大大增加。

看到这里,是不是想到了时间戳服务那节所说的:如果想篡改某一个区块的时间戳,必须篡改其后的所有时间戳才可以。而这里恰好通过工作量证明机制实现了时间戳服务。至此,你清楚了吗?工作量证明机制是干嘛的?

八、工作量证明机制的本质则是一CPU一票

蔡志川:陈教授确实分析的很到位,有种醍醐灌顶的感觉。“工作量证明”机制是不是还解决了如何确定大多数的问题?

陈智罡:工作量证明机制还有另外一个特性,紧接着白皮书说到:Theproof-of-workalsosolvestheproblemofdeterminingrepresentationinmajoritydecisionmaking.Ifthemajoritywerebasedonone-IP-address-one-vote,itcouldbesubvertedbyanyoneabletoallocatemanyIPs.Proof-of-workisessentiallyone-CPU-one-vote.Themajoritydecisionisrepresentedbythelongestchain,whichhasthegreatestproof-of-workeffortinvestedinit.IfamajorityofCPUpoweriscontrolledbyhonestnodes,thehonestchainwillgrowthefastestandoutpaceanycompetingchains.Tomodifyapastblock,anattackerwouldhavetoredotheproof-of-workoftheblockandallblocksafteritandthencatchupwithandsurpasstheworkofthehonestnodes.Wewillshowlaterthattheprobabilityofaslowerattackercatchingupdiminishesexponentiallyassubsequentblocksareadded.

工作量证明机制还解决了谁是大多数的问题。如果决定大多数的方式是基于IP地址的,即一IP地址一票,则该机制将被能够分配大量IP地址的人所破坏。而工作量证明机制的本质则是一CPU一票。大多数人的决定被表达为最长的链,因为最长的链包含了最大的工作量。如果大多数的CPU为诚实的节点控制,那么诚实的链条将以最快的速度延长,并超越其他的竞争链条。


如果想要对以往的区块进行修改,攻击者必须完成该区块以及其后所有区块的工作量证明,然后才能赶上和超越诚实节点的工作量。我们将在后面说明,当随后的块不断增加时,一个较慢的攻击者追赶上的概率将呈指数级递减。

Tocompensateforincreasinghardwarespeedandvaryinginterestinrunningnodesovertime,theproof-of-workdifficultyisdeterminedbyamovingaveragetargetinganaveragenumberofblocksperhour.Ifthey'regeneratedtoofast,thedifficultyincreases.

随着时间的推移,为了应对硬件速度的日益增长以及网络中各个节点参与的不同利益,工作量证明的难度以平均每小时出块数作为波动平均值。如果每小时的出块数太快,将增加工作量证明的难度。

九、比特币网络运行的6个步骤

蔡志川:那么比特币网络到底是如何具体运行的呢?

陈智罡:白皮书前面说了,为了构造一个分布式时间戳,需要对一个区块去求解满足要求的哈希值。求解哈希值时,唯一可以调整的参数是随机数(nounce)。交易就存放在这个区块里。那么问题就来了,各个节点是如何收到交易的呢?如何把交易放到区块里呢?所有这一切都是依赖于互联网的。这节就讲了交易如何在网络中的传播以及如何形成区块。

比特币网络运行的步骤如下:1.新的交易通过全网向所有节点广播;2.每一个节点将收到的新的交易信息放入一个区块中;3.每个节点都为自己的区块执行工作量证明,以发现一个满足难度要求的哈希值;4.当一个节点发现了一个满足难度要求的哈希值,它就向全网进行广播该区块;5.当且仅当包含在该区块中的所有交易都是有效的且之前没有双花过,其他节点才接受承认该区块;6.其他节点接受该区块后,就在该区块之后制造新的区块以延长该链条,并将被接受区块的哈希值写入新区块中前一区块哈希值(previoushash?)的位置。

上述过程把交易的传播和块的形成,描述的非常简洁和清楚。由于网络的传播是有时延的,如果两个节点同时广播自己的区块,那么有些节点可能收到的是这个区块,另外节点可能收到的是另一个区块,那么就会造成链的分叉。

十、如何解决分叉问题

蔡志川:再问一下,分叉是如何解决的呢?

陈智罡:白皮书紧接着说:Nodesalwaysconsiderthelongestchaintobethecorrectoneandwillkeepworkingonextendingit.Iftwonodesbroadcastdifferentversionsofthenextblocksimultaneously,somenodesmayreceiveoneortheotherfirst.Inthatcase,theyworkonthefirstonetheyreceived,butsavetheotherbranchincaseitbecomeslonger.Thetiewillbebrokenwhenthenextproof-of-workisfoundandonebranchbecomeslonger;thenodesthatwereworkingontheotherbranchwillthenswitchtothelongerone.

所有节点都将最长的链条视为正确的链条,并在最长的链条上继续工作从而延长它。如果有两个节点同时广播了不同的新区块,那么先收到哪个新区块,对于有些节点是有差异的。在此情况下,节点将在自己收到的第一个新区块上进行工作,但也会保留另外一个产生分叉的链,以防后者变成最长的链。当下一个新区块诞生后,其中一个链将会被延长,从而分叉的局面被打破。而在另一条链上的节点将转移到最长链上工作。


到这里有个问题,原本以为节点不知道除了自己工作的链以外还有其它的分支链。但是从上面的叙述可知,当出现分叉的时候,节点会知道有分叉出现的,而且还会保存另外的分叉链,以备将来转换。

十一、新交易在广播过程中未必需要到达全部节点

蔡志川:交易在网络中的广播,是不是必须所有节点都收到后才可能被装入到新区块中(注意新区块诞生的方法)?同样,新区块的广播是不是所有节点都必须收到才可以,如果新区块在传播过程中丢失了,有的节点没收到怎么办?

陈智罡:Newtransactionbroadcastsdonotnecessarilyneedtoreachallnodes.Aslongastheyreachmanynodes,theywillgetintoablockbeforelong.Blockbroadcastsarealsotolerantofdroppedmessages.Ifanodedoesnotreceiveablock,itwillrequestitwhenitreceivesthenextblockandrealizesitmissedone.

新交易在广播过程中,未必需要到达全部的节点。只要它们能够到达大多数的节点,那么这些新交易很快会出现在链上的一个新区块中。为什么呢?因为大多数节点收到了新交易,那么节点挖出区块的概率也会以极大的可能落到大多数节点中的某个节点。所以很快该新交易就会出现在链上。如果挖出区块的节点碰巧不在这些大多数节点中,那么该新交易就不会出现在链上的新区块中。但是同样以极大的概率出现在下一个新区块中。

而区块的广播对于传播过程中丢失区块也具有容错能力。如果一个节点没有收到新区块,那么该节点在收到新区块之后的区块到来时,将会发现自己缺少前一个区块,从而会请求接收那个缺少的区块。

以上给出了交易和区块在网络中广播可能出现的一些情况及对策。但是细节并没有讲到,只是给出了大致的框架。如果学过计算机网络原理,对以上的过程就不会陌生。根据一些资料显示,比特币网络采用的是P2P网络架构,节点之间连接使用的是TCP协议。TCP协议是一种面向连接的可靠协议,它具有处理网络丢包、重传、校验等功能。

十二、比特币系统的激励机制

蔡志川:回答非常清楚,另外比特币系统是如何发行币的呢?因为没有中心了。

陈智罡:通过前面知道,新区块的诞生是需要耗费CPU的资源以及电力成本的。只有这样比特币网络才能运行下去。而这一切都是在点对点去中心化环境下开展的,即一切都是节点自愿参与的。因此,为了维持网络的长治久安,必须有相应的奖励才可以。


Byconvention,thefirsttransactioninablockisaspecialtransactionthatstartsanewcoinownedbythecreatoroftheblock.Thisaddsanincentivefornodestosupportthenetwork,andprovidesawaytoinitiallydistributecoinsintocirculation,sincethereisnocentralauthoritytoissuethem.Thesteadyadditionofaconstantofamountofnewcoinsisanalogoustogoldminersexpendingresourcestoaddgoldtocirculation.Inourcase,itisCPUtimeandelectricitythatisexpended.

我们约定,每个区块的第一笔交易是一个特殊的交易。该交易产生一枚新币奖励给该区块创造者,即矿工。给挖矿节点的奖励主要是为了维持网络的运行,以及在网络中发行新币进行流通。这样做是因为网络中没有中央机构去发行货币。

这种将一定数量的新币稳定添加到货币系统中的方法,类似于黄金开采者耗费资源去开采黄金并将其输入到流通领域。而在我们系统中,耗费的是CPU的时间和电力。

除了挖矿的激励外,还有交易费的激励。下面白皮书说到:Theincentivecanalsobefundedwithtransactionfees.Iftheoutputvalueofatransactionislessthanitsinputvalue,thedifferenceisatransactionfeethatisaddedtotheincentivevalueoftheblockcontainingthetransaction.Onceapredeterminednumberofcoinshaveenteredcirculation,theincentivecantransitionentirelytotransactionfeesandbecompletelyinflationfree.

另外一个激励的来源则是交易费(transactionfees)。如果某笔交易的输出值小于输入值,那么差额就是交易费,该交易费将被增加到该区块的激励值中。一旦一定数量的电子货币进入到流通领域,则激励将完全转换为依靠交易费。而且此时由于货币数量稳定,使得系统将完全免于通货膨胀。

Theincentivemayhelpencouragenodestostayhonest.IfagreedyattackerisabletoassemblemoreCPUpowerthanallthehonestnodes,hewouldhavetochoosebetweenusingittodefraudpeoplebystealingbackhispayments,orusingittogeneratenewcoins.Heoughttofinditmoreprofitabletoplaybytherules,suchrulesthatfavourhimwithmorenewcoinsthaneveryoneelsecombined,thantounderminethesystemandthevalidityofhisownwealth.

激励机制除了能够维持网络的运行,鼓励矿工积极干活,也有助于鼓励节点保持诚实。如果有一个贪婪的攻击者能够调集比所有诚实节点加起来还要多的CPU计算力,那么他就面临一个选择:要么用于挖矿以获得新币奖励,要么用于双花诈骗交易方。他应该发现,如果按照规则行事则更有利可图,例如挖取更多的新币,而不是破坏这个系统以及自身财富的合法性。

从激励这节,我们知道了新币是如何进入流通领域的,货币总量是固定的。除了挖矿可以激励,交易费也是一种激励。这让我想起支付宝这样的第三方,我们在使用时并不需要付交易费,因为有支付宝这样的中心机构来管理运行。但是在去中心化的点对点网络,由于没有中心参与管理,所以一切都得靠节点自愿,激励就显得很重要。从另外一个角度说,似乎中心化的管理更方便,用户也不需要手续费。但是就是被中心牢牢控制了。所以有得必有失。

蔡志川:您如何看待比特币的价值?


陈智罡:任何东西有需求才有价值,或者大家认可也会产生价值。比特币还是有需求的,所以也会产生价值。具体价值个人不好判断,但是具国外专家推测,比特币5年内要么归0,要么价值25万美元。这个要靠大家判断。如果达成统一共识,那么就会产生相应的价值。

嘉宾简介

陈智罡 / 格密链创始人

密码学教授,英国Royal Holloway, University of London访问学者。中科院信息安全国家重点实验室客座研究员,亚洲区块链学会荣誉学术顾问。

对话发起人

于佳宁博士 / 火币大学校长

中国人民大学经济学博士,现任火币大学校长、中国通信工业协会区块链专委会副主任委员、中国国际经济技术合作促进会区块链技术与应用工委副秘书长、中国计算机学会区块链专业委员会委员,原工业和信息化部信息中心工业经济研究所所长,《2018年中国区块链产业白皮书》编委会主任。

蔡志川博士 / 亚洲区块链学会会长

亚洲区块链学会会长,香港区块链资产管理有限公司总裁,世界区块链商学院客席教授、英国剑桥大学区块链商业应用讲座讲師,被誉为香港区块链首席代言人。

文章声明:本文根据「火星财经创始学习群」嘉宾分享内容整理,不代表火星财经立场,转载须在文章标题后注明“文章来源:火星财经(微信:hxcj24h)”。

本文来源:火星公开课
原文标题:「火星公开课」第182期 |格密链创始人陈智罡:重温比特币白皮书

—-

编译者/作者:火星公开课

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...