本站专注区块链信息及金融服务,但不代表任何投资建议

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

火星公开课 ·

2018年09月23日

热度: 64384

如果不对比特币系统有深入的理解,很难读懂其白皮书。


要点速览:

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

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

3.工作量证明就是不?#31995;?#21462;一个随机数去求解区块的哈希值,没有捷径可言,就是不?#31995;?#23581;试,不?#31995;?#35745;算。

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

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

6.任何东西有需求才有价值,或者大家认可?#19981;?#20135;生价值。比特币还是有需求的,所以?#19981;?#20135;生价值。

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

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

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

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

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

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

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

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

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


由于我是搞密码学的,又涉足区块链界,所以有些群友不断在问我。为此我以我的理解及所查的资?#24076;?#23545;以上说法进行正本清源。首?#20219;宜到?#35770;:

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

第二,区块链上用的密码算法只有两个:哈希函数和数?#26234;?#21517;。哈希函数?#36864;?#25968;没有关系,所?#38498;?#40654;曼猜想没有关系。数?#26234;?#21517;使用的是椭圆曲线?#31995;?#26041;案,所以与大整数分解没有关系,从而和黎曼猜想也没有关系。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

区块链上用的密码算法只有两个:哈希函数和数?#26234;?#21517;。哈希函数?#36864;?#25968;没有关系,所?#38498;?#40654;曼猜想没有关系。数?#26234;?#21517;使用的是椭圆曲线?#31995;?#26041;案,所以与大整数分解没有关系,从而和黎曼猜想也没有关系。

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

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

因此理论?#24076;?#37327;子算法会对区块链的安全有一定的影响。但是,?#23548;噬希?b>目前量子计算机的发展还处于非常非常原始的阶段,根本不足以运行?#23548;?#30340;算法,所以量子计算机不会对目前区块链的安全造成威胁。

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


我研究的就是格密码,它基于的困难问题是几何问题——寻?#26131;?#30701;向量,目前是抗量子的。

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

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

陈智罡:是的,这也是我觉得有必要和大家重温的原因之一。现在市场趋冷,正是?#38469;?#31934;进之时。目前市面?#31995;?#27604;特币白皮书翻译有些错误和误解,例如在交易这节里,第一句话?#22836;?#35793;错了,We define an electronic coin as a chain of digital signatures。

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

比特币系统是一个点对点的数?#21482;?#24065;系统,所以在该系统中“币”是一个非常重要的概念。

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

陈智罡:币是在交易中流动的。每一次交易,币就从一个人的手中转?#39057;?#21478;外一个人的手中,不断循环流动。

根据上面的定义,在比特币系统中,一个数?#21482;?#24065;被看作是一个由交易构成的链,该链?#20174;?#20102;该币的每一次交易。注意,这里的链与区块链不是一个意思。

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

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

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

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


那么如何保证上面的前三点的呢?白皮书紧接着说: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. 

就是付款人(数?#21482;?#24065;的所属人)通过将上一?#24335;?#26131;以及收款人的公钥(?#35789;?#27454;地址)进行哈希函数计算,然后对该哈希值进行数?#26234;?#21517;,最后将签名附在该币的后面,以达到证明付款人能够将该币支付给收款人的目的。

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

紧接着白皮书说:A payee can verify the signatures to verify the chain of ownership.?#35789;?#27454;人通过验证数?#26234;?#21517;?#21019;?#21040;验证币的所属权的目的。

紧接着白皮书说:The problem of course is the payee can't verify that one of the owners did not double-spend the coin. 

前面说了,为了证明付款人能够将该币支付给收款人,必须说明四个问题,前三个问题都有了着落,而第四个问题“该币没有被双花?#27604;?#27809;有说如何解决。?#35789;?#27454;人无法验证在这些交易中,该币没有被双花。
A common solution is to introduce a trusted central authority, or mint, that checks every transaction for double spending. After each transaction, the coin must be returned to the mint to issue a new coin, and only coins issued directly from the mint are trusted not to be double-spent. The problem with this solution is that the fate of the entire money system depends on the company running the mint, with every transaction having to go through them, just like a bank. 

四、如何破解双花问题

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

陈智罡:解决双花问题的一个通常解决办法是引入一个可信的?#34892;模?#25110;者货币发行方,通过它们检查每一?#24335;?#26131;。?#30475;?#20132;易完后,货币发行方从付款人那里减掉相应的货币,并且从收款人那里增加相应的新币。只有通过货币发行方发行的货币才被认为没有被双花的。显然这种解决方法使得整个货币系统?#35272;?#20110;一个?#34892;模?#21363;货币发行方,就像我们现在的银行,每一?#24335;?#26131;都是由它?#21019;?#29702;。

We need a way for the payee to know that the previous owners did not sign any earlier transactions. For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. The only way to confirm the absence of a transaction is to be aware of all transactions. In the mint based model, the mint was aware of all transactions and decided which arrived first. To accomplish this without a trusted party, transactions must be publicly announced [1], and we need a system for participants to agree on a single history of the order in which they were received. The payee needs proof that at the time of each transaction, the majority of nodes agreed it was the first received. 

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

从交易角度来说,对当前付款人该币产生了2?#24335;?#26131;,这两币交?#36164;?#26377;?#32676;?#39034;序的。第一?#24335;灰资?#21512;法的,而第2?#24335;?#26131;就是双花,是非法的。


理解到这个层?#21361;?#25165;能对白皮书中的这句话理解:For our purposes, the earliest transaction is the one that counts, so we don't care about later attempts to double-spend. 即对当前付款人来说,该币产生的第一次交易(最早的一?#24335;?#26131;)才是我们关注的,因为这?#24335;灰资?#21512;法交易。而对于该币产生的后面交易都属于双花,所以并不需要关注(因为这些双花交易都是要被?#31995;?#30340;)。

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

为此,我们必须知道交易的?#32676;?#39034;序,这样才能确定每一?#24335;灰资?#21542;合法或者双花,从而把不?#20040;?#22312;的交易剔除。就是这句话的含义:The only way to confirm the absence of a transaction is to be aware of all transactions. 

这句话很多人不能够理解。确实单从字面上很难理解其含义。紧接着白皮书对比了?#34892;?#21270;系统下采用的方法。在基于?#34892;?#21270;的货币发行方的模型下,货币发行方知道所有的交易,从而可以判断交易的?#32676;?#39034;序,?#35782;?#36991;免双花。

而在去?#34892;?#21270;环境下,由于没有?#34892;模?#22914;何形成一个唯一的且交易具有?#32676;?#39034;序 的账本呢?方法是交易在系统内公开广播,从而让所有参与者都知道交易。

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

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

五、关于时间戳

蔡志川:那又是如何对交易的?#32676;?#39034;序达成一致共识呢?

陈智罡:这里需要清楚什?#35789;?#26102;间戳。这也是比特币白皮书里非常重要的概念,但是这个概念并没有在?#31456;?#22823;众中所知。

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

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

第一点可以通过对文档的哈希来解决;第二点如果在可以有?#34892;?#21270;的场景,可以通过专业的可信第三方提供时间戳服务。但是现在是点对点的去?#34892;?#21270;环?#24120;?#22914;何提供时间戳呢?所以白皮书这节的第一句话,?#36864;?#20026;了提出解决方案,我们先从时间戳服务说起:The solution we propose begins with a timestamp server. 

紧接着白皮书解释了如何提供时间戳:A timestamp server works by taking a hash of a block of items to be timestamped and widely publishing the hash, such as in a newspaper or Usenet post.

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

所以白皮书紧接着说:The timestamp proves that the data must have existed at the time, obviously, in order to get into the hash. Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 

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


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

通俗的讲,前面所?#26143;?#22359;的特征都被遗传到了后面的时间戳中。如果想篡改某一个区块的时间戳,必须篡改其后的所有时间戳才可以。这是一个非常好的特性,使得时间戳链条越长,安全性越好。
陈智罡:从而时间戳链条越长,就越能增强前面时间戳的不可篡改性。因为要花更大的代价去篡改其后的所有时间戳。这就是这句话的本质含义Each timestamp includes the previous timestamp in its hash, forming a chain, with each additional timestamp reinforcing the ones before it. 

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

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

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

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

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

这里非常重要,可以通过可信的第三方来提供时间戳服务,?#37096;?#20197;把哈希?#23548;?#24405;在报纸等公开的媒体上。但是现在是一个点对点的网络,即不存在?#34892;?#21270;的第三方。那么如何体现可信时间这个概念呢?


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

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

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

办法总是人想出?#25139;?#30340;。中本聪想的办法是通过?#24405;?#26469;体现时间,即把?#24405;?#21644;时间关联起来。就像把哈希?#23548;?#24405;在报纸上一样。只要?#24405;?#26159;随机的,那么完成该?#24405;?#23601;意味着在某个时间完成了该?#24405;?#20174;而体现了时间,关键是体现了交易的?#32676;?#39034;序。

七、如?#38382;?#29616;时间戳

蔡志川:陈教授您解释了这么多时间戳的概念,那么如?#38382;?#29616;时间戳呢?

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

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

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

?#36865;猓?#19978;面说了不使用在上节说的报?#20132;?#32773;新闻组?#35789;?#29616;时间戳。那么通过什么方法?#35789;?#29616;呢?白皮书上说了,通过一个?#23567;?#24037;作量证明”的方法。

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

陈智罡:什?#35789;?#24037;作量证明呢?白皮书给出了说明:The proof-of-work involves scanning for a value that when hashed, such as with SHA-256, the hash begins with a number of zero bits. The average work required is exponential in the number of zero bits required and can be verified by executing a single hash. 

工作量证明就是求解一个哈希值(例如通过SHA-256求解哈希值),要求该哈希值的?#32609;?#20301;含有若干个0。平均情况下,该工作量与0的个数?#25163;?#25968;级关系,即哈希值中0的个数的增加将会让求解工作量?#25163;?#25968;?#23545;?#38271;。而验证该哈希值的正确?#38053;?#20197;通过执行哈希函数来进行。


上面说明了工作量证明的难度,即求解满足要求的哈希值所花费的时间,与哈希值的?#32609;?#20301;含有多少个0有直接关系。这样就把工作量证明与时间挂上了?#22330;?#37027;么具体如?#38382;?#29616;工作量证明呢?白皮书紧接着说了:

For our timestamp network, we implement the proof-of-work by incrementing a nonce in the block until a value is found that gives the block's hash the required zero bits. Once the CPU effort has been expended to make it satisfy the proof-of-work, the block cannot be changed without redoing the work. As later blocks are chained after it, the work to change the block would include redoing all the blocks after it. 

蔡志川:那我接着问,通过工作量证明机制如?#38382;?#29616;时间戳的呢?

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

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

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

八、工作量证明机制的本?#35797;?#26159;一CPU一票

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

陈智罡:工作量证明机制还有另外一个特性,紧接着白皮书说到:The proof-of-work also solves the problem of determining representation in majority decision making. If the majority were based on one-IP-address-one-vote, it could be subverted by anyone able to allocate many IPs. Proof-of-work is essentially one-CPU-one-vote. The majority decision is represented by the longest chain, which has the greatest proof-of-work effort invested in it. If a majority of CPU power is controlled by honest nodes, the honest chain will grow the fastest and outpace any competing chains. To modify a past block, an attacker would have to redo the proof-of-work of the block and all blocks after it and then catch up with and surpass the work of the honest nodes. We will show later that the probability of a slower attacker catching up diminishes exponentially as subsequent blocks are added. 

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


如果想要对以往的区块进行修改,攻击者必须完成该区块以及其后所?#26143;?#22359;的工作量证明,然后才能赶上?#32479;?#36234;诚?#21040;?#28857;的工作量。我们将在后面说明,当随后的块不断增加时,一个?#19979;?#30340;攻击者追赶?#31995;?#27010;?#24335;手?#25968;级递减。

To compensate for increasing hardware speed and varying interest in running nodes over time, the proof-of-work difficulty is determined by a moving average targeting an average number of blocks per hour. If they're generated too fast, the difficulty increases. 

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

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

蔡志川:那么比特币网络到?#36164;?#22914;何具体运行的呢?

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

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

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

十、如何解决分叉问题       

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

陈智罡:白皮书紧接着说:Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof- of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one.

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


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

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

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

陈智罡:New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one. 

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

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

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

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

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

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


By convention, the first transaction in a block is a special transaction that starts a new coin owned by the creator of the block. This adds an incentive for nodes to support the network, and provides a way to initially distribute coins into circulation, since there is no central authority to issue them. The steady addition of a constant of amount of new coins is analogous to gold miners expending resources to add gold to circulation. In our case, it is CPU time and electricity that is expended. 

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

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

除?#36865;?#30719;的激励外,还有交易费的激励。下面白皮书说到:The incentive can also be funded with transaction fees. If the output value of a transaction is less than its input value, the difference is a transaction fee that is added to the incentive value of the block containing the transaction. Once a predetermined number of coins have entered circulation, the incentive can transition entirely to transaction fees and be completely inflation free. 

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

The incentive may help encourage nodes to stay honest. If a greedy attacker is able to assemble more CPU power than all the honest nodes, he would have to choose between using it to defraud people by stealing back his payments, or using it to generate new coins. He ought to find it more profitable to play by the rules, such rules that favour him with more new coins than everyone else combined, than to undermine the system and the validity of his own wealth. 

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

从激励这节,我们知道了新币是如何进入流通领域的,货币总量是固定的。除?#36865;?#30719;可以激励,交易费也是一种激励。这让我想起支付宝这样的第三方,我们在使用时并不需要付交易费,因为有支付宝这样的?#34892;?#26426;构来管理运行。但是在去?#34892;?#21270;的点对点网络,由于没有?#34892;?#21442;与管理,所以一切都得靠节点自愿,激励就显得很重要。从另外一个角?#20154;擔?#20284;乎?#34892;?#21270;的管理更方便,用户也不需要?#20013;选?#20294;是就是被?#34892;?#29282;牢控制了。所以有得必有失。

蔡志川:您如何?#21019;?#27604;特币的价值?


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

嘉宾简介

陈智罡 / 格密链创始人

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

对话发起人

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

中国人民大学经济学博士,现任火币大学校长、中国通信工业协会区块链专委会副主任委员、中国国际经济?#38469;?#21512;作促进会区块链?#38469;?#19982;应用工委副秘书长、中国计算机学会区块链专业委员会委?#20445;?#21407;工业和信息化部信息?#34892;?#24037;业经济研究所所长,《2018年中国区块链产业白皮书》编委会主任。

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

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

 

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

声明:本文为入驻“火星号”作者作品,不代表火星财经官方立场。转载请注明出处、作者和本文链接
提示:投资有风险,入?#34892;?#35880;慎。本资讯不作为投资理财建议。
语音?#38469;?#30001;科大讯飞提供
关键字: 火星公开课

推广
相关新闻

涨幅榜

你可能?#34892;?#36259;的内容
下一篇

「火星公开课」第181期 |everiToken发起人蔡恒进:传统企业如何进行链改

寻求报道 寻求融资 APP下载
APP下载 扫描下载APP
新疆18选7开奖结果