投資有風險 入市需謹慎
APP
下載火星財經客戶端

掃描下載APP

微信公眾號
火星財經二維碼 火星財經

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

火星公開課 ·

09月23日

熱度: 50982

如果不對比特幣系統有深入的理解,很難讀懂其白皮書。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

要點速覽:

1.黎曼猜想對公鑰密碼沒有直接的任何威脅,對區塊鏈的安全也沒有任何影響。

2.目前量子計算機的發展還處于非常原始階段,不會對區塊鏈安全造成威脅。

3.工作量證明就是不斷的取一個隨機數去求解區塊的哈希值,沒有捷徑可言,就是不斷的嘗試,不斷的計算。

4.新交易在廣播過程中,未必需要到達全部的節點。只要它們能夠到達大多數的節點,那么這些新交易很快會出現在鏈上的一個新區塊中。

5.時間戳為什么能夠解決雙花問題?因為要形成一個唯一的不可更改的交易記錄賬本。

6.任何東西有需求才有價值,或者大家認可也會產生價值。比特幣還是有需求的,所以也會產生價值。

9月23日20:00,格密鏈創始人陳智罡做客「火星財經創始學習群」,圍繞“重溫比特幣白皮書”這一主題,與輪值群主亞洲區塊鏈學會會長蔡志川進行了深度對話,內容涵蓋黎曼猜想以及比特幣白皮書關于雙花問題、時間戳、工作量證明等的詮釋。

陳智罡表示,黎曼猜想早在1859年就提出,而公鑰密碼是在70年代末提出的,至今沒有相關論文顯示黎曼猜想會對破解RSA有什么直接效果,也不會對區塊鏈安全造成影響。

據陳智罡介紹,在比特幣白皮書中,交易的內容就是付款人將該幣支付給收款人,?為了證明付款人能夠將該幣支付給收款人,必須說明四個問題:1.該幣屬于付款人;2.付款人同意將該幣支付給收款人;3.付款地址必須是收款人的地址;4.該幣沒有被雙花。

以下為陳智罡分享原文,由火星財經(微信:hxcj24h)整理:

一、黎曼猜想對公鑰密碼沒有任何直接威脅

蔡志川:關于黎曼猜想的新聞被炒得轟轟烈烈,都快趕超山竹的威力了!這黎曼猜想據說可能被證明。這個問題真的會對數學界表示很大影響嗎?

陳智罡:這個問題我剛好在喜馬拉雅的節目“區塊鏈雜談”里講過了。黎曼猜想精確的刻畫了某個數之前有多少個素數,以及素數之間的距離,但是它并不會導致新的因數分解算法。

最近由于黎曼猜想可能會被證明,網上充滿了討論,甚至波及到了區塊鏈。有新聞說如果黎曼猜想被證實的話,將危及公鑰密碼學的安全。由于互聯網上使用的都是公鑰密碼,所以互聯網也都不安全了。更具體的猜測是,由于黎曼猜想和素數有關,所以RSA密碼體質將會被攻破。

以上猜測搞得人心惶惶,皆因大家的好奇心,說來也是好事。一個數學界的新聞能讓大家如此關注。我也查了國外一些網站的說法。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

由于我是搞密碼學的,又涉足區塊鏈界,所以有些群友不斷在問我。為此我以我的理解及所查的資料,對以上說法進行正本清源。首先我說結論:

第一,黎曼猜想早在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?以內更精確的素數個數的公式。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

這就是黎曼給出的公式,第二項中x?的?ρ?次冪的ρ就是黎曼?zeta?函數非平凡零點。這就是黎曼?zeta?函數非平凡零點的意義所在,這就是關于黎曼猜想在數學領域上的意義。

有人曾經問希爾伯特,如果500年后能重回人間,他最希望了解的事情是什么?希爾伯特回答說:我想知道,黎曼猜想解決了沒有。數學最重要的任務首先搞清楚自然數的規律。然而到現在,對素數的規律也沒有摸清楚。

二、黎曼猜想對RSA造成影響無相關依據

蔡志川:是的,密碼學對區塊鏈的重要性不容置疑,那這黎曼猜想的證明會不會對RSA造成影響呢?

陳智罡:RSA所基于的困難問題是“大整數分解困難問題”。即給你一個大的整數,對其分解為素數之積是困難的。這是RSA加密算法的安全性基礎。

目前對大整數分解用的方法主要是數域篩法,但是這些方法都不能有效的分解大整數。黎曼猜想是宏觀上對素數的分布有個判斷,它不能直接求素數,也不能對一個整數進行素數分解。RSA和大整數分解有密切關系。

目前根據文獻,黎曼猜想對于生成素數,例如RSA中的密鑰生成算法,是有幫助的,但是對于整數分解算法并沒有直接的提升,所以不會對RSA加密體質有任何影響。

大家一定要區分素數檢測和整數分解是兩回事。很多人都認為是一回事,這是產生錯誤的根源。

對于黎曼猜想的證明,大家更多的認為可能會對數域的結構有個更好的認知。從某些方面,可能會對密碼學有所啟示。

黎曼猜想早在1859年就提出,而我們用的公鑰密碼是在70年代末提出的。所以,如果黎曼猜想會對破解RSA加密算法有什么幫助的話,一定會早有論文提出。然而,至今為止也沒有看到有相關論文顯示黎曼猜想會對破解RSA有什么直接效果。

區塊鏈上用的密碼算法只有兩個:哈希函數和數字簽名。哈希函數和素數沒有關系,所以和黎曼猜想沒有關系。數字簽名使用的是橢圓曲線上的方案,所以與大整數分解沒有關系,從而和黎曼猜想也沒有關系。

蔡志川:說到這里,想起另一個偉大的技術突破量子技術,那陳教授能說說量子計算機的出現會不會對區塊鏈造成巨大威脅呢?

陳智罡:理論上量子算法能夠加速對大整數的分解,所以對基于大整數分解的RSA是有很大威脅的,對于哈希函數也有一定的威脅,但是只要把哈希函數的位數提高,就可以抵抗目前的量子算法攻擊。對于橢圓曲線上的加密算法,量子算法也是有一定的優勢的。

因此理論上,量子算法會對區塊鏈的安全有一定的影響。但是,實際上,目前量子計算機的發展還處于非常非常原始的階段,根本不足以運行實際的算法,所以量子計算機不會對目前區塊鏈的安全造成威脅

另外,抗量子密碼算法已經比較成熟了,例如格密碼。目前美國的NIST組織正在制定抗量子密碼的標準,第一輪候選方案的征集已經篩選出69個。主要是兩類算法:數字簽名,加密算法。一共有5類體制,如下圖:

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

我研究的就是格密碼,它基于的困難問題是幾何問題——尋找最短向量,目前是抗量子的。

三、比特幣里面沒有幣,而只有交易

蔡志川:非常感謝陳博士的解惑,那下面我們讓陳博士帶我們來重溫比特幣白皮書吧!之前看過很多版本的比特幣的白皮書,感覺很多翻譯都有問題。

陳智罡:是的,這也是我覺得有必要和大家重溫的原因之一。現在市場趨冷,正是技術精進之時。目前市面上的比特幣白皮書翻譯有些錯誤和誤解,例如在交易這節里,第一句話就翻譯錯了,We?define?an?electronic?coin?as?a?chain?of?digital?signatures。

上面這句話的意思是:在比特幣系統中,一個數字貨幣被看作是由數字簽名構成的鏈。而數字簽名是干什么的?是用于對交易的簽名,所以一個數字貨幣被看作是由交易構成的鏈。

比特幣系統是一個點對點的數字貨幣系統,所以在該系統中“幣”是一個非常重要的概念。

蔡志川:那是如何在系統中體現幣呢?

陳智罡:幣是在交易中流動的。每一次交易,幣就從一個人的手中轉移到另外一個人的手中,不斷循環流動。

根據上面的定義,在比特幣系統中,一個數字貨幣被看作是一個由交易構成的鏈,該鏈反映了該幣的每一次交易。注意,這里的鏈與區塊鏈不是一個意思。

這就是為什么經常說,比特幣里面沒有幣,而只有交易的原因。在比特幣系統中,所有體現幣的地方,都用該幣的最近一次交易來代替說明。

蔡志川:那么如何能夠保證付款人能夠將該幣支付給收款人呢?

陳智罡:這需要知道數字簽名的功能是什么。數字簽名功能有三個:第一,證明該消息來自于發送者,該功能稱為認證;第二,發送者不能否認自己發過該消息,該功能稱為不可抵賴;第三,發送的消息在傳輸的過程中沒有改變,該功能稱為消息的完整性。

那么交易的內容是什么呢?交易的內容就是:付款人將該幣支付給收款人。?為了證明付款人能夠將該幣支付給收款人,必須說明四個問題:1.該幣屬于付款人;2.付款人同意將該幣支付給收款人;3.付款地址必須是收款人的地址;4.該幣沒有被雙花。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

那么如何保證上面的前三點的呢?白皮書緊接著說: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.即收款人通過驗證數字簽名來達到驗證幣的所屬權的目的。

緊接著白皮書說:The?problem?of?course?is?the?payee?can't?verify?that?one?of?the?owners?did?not?double-spend?the?coin.?

前面說了,為了證明付款人能夠將該幣支付給收款人,必須說明四個問題,前三個問題都有了著落,而第四個問題“該幣沒有被雙花”卻沒有說如何解決。即收款人無法驗證在這些交易中,該幣沒有被雙花。
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.?

四、如何破解雙花問題

蔡志川:那比特幣白皮書是如何闡述解決雙花的呢?

陳智罡:解決雙花問題的一個通常解決辦法是引入一個可信的中心,或者貨幣發行方,通過它們檢查每一筆交易。每次交易完后,貨幣發行方從付款人那里減掉相應的貨幣,并且從收款人那里增加相應的新幣。只有通過貨幣發行方發行的貨幣才被認為沒有被雙花的。顯然這種解決方法使得整個貨幣系統依賴于一個中心,即貨幣發行方,就像我們現在的銀行,每一筆交易都是由它來處理。

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.?

所以我們需要一種方法讓收款人知道,在此之前該幣并沒有被雙花過。雙花什么意思?就是該幣被當前付款人使用后,又被付款人第二次使用。

從交易角度來說,對當前付款人該幣產生了2筆交易,這兩幣交易是有先后順序的。第一筆交易是合法的,而第2筆交易就是雙花,是非法的。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

理解到這個層次,才能對白皮書中的這句話理解: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.?

這句話很多人不能夠理解。確實單從字面上很難理解其含義。緊接著白皮書對比了中心化系統下采用的方法。在基于中心化的貨幣發行方的模型下,貨幣發行方知道所有的交易,從而可以判斷交易的先后順序,故而避免雙花。

而在去中心化環境下,由于沒有中心,如何形成一個唯一的且交易具有先后順序?的賬本呢?方法是交易在系統內公開廣播,從而讓所有參與者都知道交易。

光是知道交易是不夠的,關鍵是對交易的順序達成一致共識。因此需要構建一個系統,讓系統內的所有參與者能夠對交易的先后順序達成共識(注意這里再次說明交易的先后順序是多么重要。為什么重要?因為可以解決雙花。為什么能夠解決雙花?因為可以確定該幣的第一筆交易)。即系統內每個參與者手上都具有唯一的相同的交易鏈(避免了交易鏈的不一致)。

收款人需要證實他收到的每一筆交易都是系統內大多數節點認可的不是雙花的交易,即在此之前對該收款人來說,該幣沒有被花費過,即第一筆交易。所有這一切都是為了解決雙花問題。注意上面只是提出了需求(因此需要構建一個系統……),并沒有給出如何做到對交易順序達成一致共識的方法。

五、關于時間戳

蔡志川:那又是如何對交易的先后順序達成一致共識呢?

陳智罡:這里需要清楚什么是時間戳。這也是比特幣白皮書里非常重要的概念,但是這個概念并沒有在普羅大眾中所知。

前面指出為了解決雙花問題,需要系統能夠對交易的先后順序達成一致共識。但是如何做并沒有說。顯然順序和時間有關,那么在系統內如何體現時間呢?

首先要清楚什么是時間戳。時間戳就是為某個文檔的時間提供證明。在某些商務場合很重要,例如簽合同,時間是具有法律意義的。在電子文檔環境下要提供時間戳,需要保證兩件事情:一是文檔沒有被修改;二是為該文檔添加的時間戳具有信用背書,也就是需要一個可信的第三方機構來發布時間戳。

第一點可以通過對文檔的哈希來解決;第二點如果在可以有中心化的場景,可以通過專業的可信第三方提供時間戳服務。但是現在是點對點的去中心化環境,如何提供時間戳呢?所以白皮書這節的第一句話,就說為了提出解決方案,我們先從時間戳服務說起: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.

時間戳服務可以通過計算區塊數據的哈希值,并且廣而告之該哈希值,例如刊登在報紙或者其它媒體上來提供。上述方法通過哈希解決了數據的不可篡改性,通過報紙等媒體解決了時間性。因為報紙等媒體是按照時間發行,具有時間特征的。而且哈希值一旦在報紙等公開媒體發布,其時間和哈希值就牢牢綁定無法更改了,被永遠記錄在媒體上。從而實現了分布式時間戳的目的(即不需要一個可信的機構來發布時間戳)。

所以白皮書緊接著說: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.?

顯然通過計算區塊數據的哈希值來提供時間戳服務,該時間戳證明了區塊數據在某個時間的存在性。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

在計算區塊的哈希時,包含了前一區塊的時間戳,從而形成了一個鏈條,即每一個區塊的時間戳都包含了它之前區塊的時間戳。

通俗的講,前面所有區塊的特征都被遺傳到了后面的時間戳中。如果想篡改某一個區塊的時間戳,必須篡改其后的所有時間戳才可以。這是一個非常好的特性,使得時間戳鏈條越長,安全性越好。
陳智罡:從而時間戳鏈條越長,就越能增強前面時間戳的不可篡改性。因為要花更大的代價去篡改其后的所有時間戳。這就是這句話的本質含義Each?timestamp?includes?the?previous?timestamp?in?its?hash,?forming?a?chain,?with?each?additional?timestamp?reinforcing?the?ones?before?it.?

目前的中文版都沒有對背后的意思進行解讀,這是需要功力的。如果不對比特幣系統有深入的理解,很難讀懂其白皮書。

整個白皮書一環套一環,很緊湊,很簡潔,但是也造成了理解上的困難。相信經過我們這樣的深入解析,會讓您豁然開朗。

六、時間戳本質上就是一個哈希鏈

蔡志川:聽完陳教授講解,確實時間戳很重要。那么時間戳和哈希值之間是什么樣的關系呢?

陳智罡:上述論述的時間戳本質上就是一個哈希鏈,而且每個哈希值都被打了時間戳的一個鏈。要在點對點的分布式環境下,實現該時間戳是需要一種新機制的。這里存在一個問題,哈希只是解決了數據不可篡改的目的,如何和時間掛上鉤呢?

這里非常重要,可以通過可信的第三方來提供時間戳服務,也可以把哈希值記錄在報紙等公開的媒體上。但是現在是一個點對點的網絡,即不存在中心化的第三方。那么如何體現可信時間這個概念呢?

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

由于是點對點的網絡,所以時間必須是隨機的由網絡中的某個節點提供。如果不是隨機的,就不能體現點對點網絡的去中心化特征,時間就可能被提供者控制。

有些人可能會想,那就由隨機選定的節點提供時間就可以了。這樣做不能保證時間的真實性(因為可能會被篡改),因為不能保證每個節點都是誠實的。

那么既要保證時間提供者的隨機性,又不能讓提供者直接提供時間,這不是矛盾嗎?如何解決呢?

辦法總是人想出來了的。中本聰想的辦法是通過事件來體現時間,即把事件和時間關聯起來。就像把哈希值記錄在報紙上一樣。只要事件是隨機的,那么完成該事件就意味著在某個時間完成了該事件,從而體現了時間,關鍵是體現了交易的先后順序。

七、如何實現時間戳

蔡志川:陳教授您解釋了這么多時間戳的概念,那么如何實現時間戳呢?

陳智罡:白皮書在工作量證明機制里,第一句話就點明了目的。為了在點對點的去中心化環境下實現分布式時間戳服務,我們使用類似于Adam在Hashcash中提出的一個工作量證明系統,而不是使用報紙或者新聞組這樣的方法。所以后面全部圍繞著如何具體實現上節的時間戳。

由于是在點對點的環境下,所以該時間戳是一個分布式時間戳。下面討論的就是分布式時間戳實現的方法,是對上節時間戳概念的落實。

為什么要實現時間戳呢?因為要解決雙花問題。時間戳為什么能夠解決雙花問題呢?因為要形成一個唯一的不可更改的交易記錄賬本。注意Hashcash也是一個電子現金系統,是由Adam提出的。中本聰受到該系統的啟發,并且在白皮書中引用了該論文。

此外,上面說了不使用在上節說的報紙或者新聞組來實現時間戳。那么通過什么方法來實現呢?白皮書上說了,通過一個叫“工作量證明”的方法。

蔡志川: "工作量證明”這個概念在白皮書里是如何講的呢?希望聽到原汁原味的。

陳智罡:什么是工作量證明呢?白皮書給出了說明: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求解哈希值),要求該哈希值的最高位含有若干個0。平均情況下,該工作量與0的個數呈指數級關系,即哈希值中0的個數的增加將會讓求解工作量呈指數級增長。而驗證該哈希值的正確性可以通過執行哈希函數來進行。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

上面說明了工作量證明的難度,即求解滿足要求的哈希值所花費的時間,與哈希值的最高位含有多少個0有直接關系。這樣就把工作量證明與時間掛上了鉤。那么具體如何實現工作量證明呢?白皮書緊接著說了:

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.?

蔡志川:那我接著問,通過工作量證明機制如何實現時間戳的呢?

陳智罡:為了構建我們的時間戳網絡,我們需要實現工作量證明機制,而該機制是通過不斷遞增一個區塊中的隨機數,直到發現一個滿足要求的區塊哈希值。

所以,工作量證明就是不斷的取一個隨機數去求解區塊的哈希值,沒有捷徑可言,就是不斷的嘗試,不斷的計算。一旦CPU的算力用于完成了工作量證明,即發現了一個滿足要求的哈希值,也就是找到了放到區塊中的那個隨機數,則如果想改變該區塊中的數據的話,必須再做同樣的事情,即花費CPU的算力去完成工作量證明。
陳智罡:如果該區塊后面又有新的區塊,則改變該區塊中的數據所花費的工作量將包括后面的所有區塊,所以工作量大大增加。

看到這里,是不是想到了時間戳服務那節所說的:如果想篡改某一個區塊的時間戳,必須篡改其后的所有時間戳才可以。而這里恰好通過工作量證明機制實現了時間戳服務。至此,你清楚了嗎?工作量證明機制是干嘛的?

八、工作量證明機制的本質則是一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地址一票,則該機制將被能夠分配大量IP地址的人所破壞。而工作量證明機制的本質則是一CPU一票。大多數人的決定被表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那么誠實的鏈條將以最快的速度延長,并超越其他的競爭鏈條。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

如果想要對以往的區塊進行修改,攻擊者必須完成該區塊以及其后所有區塊的工作量證明,然后才能趕上和超越誠實節點的工作量。我們將在后面說明,當隨后的塊不斷增加時,一個較慢的攻擊者追趕上的概率將呈指數級遞減。

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.?

隨著時間的推移,為了應對硬件速度的日益增長以及網絡中各個節點參與的不同利益,工作量證明的難度以平均每小時出塊數作為波動平均值。如果每小時的出塊數太快,將增加工作量證明的難度。

九、比特幣網絡運行的6個步驟

蔡志川:那么比特幣網絡到底是如何具體運行的呢?

陳智罡:白皮書前面說了,為了構造一個分布式時間戳,需要對一個區塊去求解滿足要求的哈希值。求解哈希值時,唯一可以調整的參數是隨機數(nounce)。交易就存放在這個區塊里。那么問題就來了,各個節點是如何收到交易的呢?如何把交易放到區塊里呢?所有這一切都是依賴于互聯網的。這節就講了交易如何在網絡中的傳播以及如何形成區塊。

比特幣網絡運行的步驟如下:1.新的交易通過全網向所有節點廣播;2.每一個節點將收到的新的交易信息放入一個區塊中;3.?每個節點都為自己的區塊執行工作量證明,以發現一個滿足難度要求的哈希值;4.當一個節點發現了一個滿足難度要求的哈希值,它就向全網進行廣播該區塊;5.當且僅當包含在該區塊中的所有交易都是有效的且之前沒有雙花過,其他節點才接受承認該區塊;6.其他節點接受該區塊后,就在該區塊之后制造新的區塊以延長該鏈條,并將被接受區塊的哈希值寫入新區塊中前一區塊哈希值(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.

所有節點都將最長的鏈條視為正確的鏈條,并在最長的鏈條上繼續工作從而延長它。如果有兩個節點同時廣播了不同的新區塊,那么先收到哪個新區塊,對于有些節點是有差異的。在此情況下,節點將在自己收到的第一個新區塊上進行工作,但也會保留另外一個產生分叉的鏈,以防后者變成最長的鏈。當下一個新區塊誕生后,其中一個鏈將會被延長,從而分叉的局面被打破。而在另一條鏈上的節點將轉移到最長鏈上工作。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

到這里有個問題,原本以為節點不知道除了自己工作的鏈以外還有其它的分支鏈。但是從上面的敘述可知,當出現分叉的時候,節點會知道有分叉出現的,而且還會保存另外的分叉鏈,以備將來轉換。

十一、新交易在廣播過程中未必需要到達全部節點

蔡志川:交易在網絡中的廣播,是不是必須所有節點都收到后才可能被裝入到新區塊中(注意新區塊誕生的方法)?同樣,新區塊的廣播是不是所有節點都必須收到才可以,如果新區塊在傳播過程中丟失了,有的節點沒收到怎么辦?

陳智罡: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.?

新交易在廣播過程中,未必需要到達全部的節點。只要它們能夠到達大多數的節點,那么這些新交易很快會出現在鏈上的一個新區塊中。為什么呢?因為大多數節點收到了新交易,那么節點挖出區塊的概率也會以極大的可能落到大多數節點中的某個節點。所以很快該新交易就會出現在鏈上。如果挖出區塊的節點碰巧不在這些大多數節點中,那么該新交易就不會出現在鏈上的新區塊中。但是同樣以極大的概率出現在下一個新區塊中。

而區塊的廣播對于傳播過程中丟失區塊也具有容錯能力。如果一個節點沒有收到新區塊,那么該節點在收到新區塊之后的區塊到來時,將會發現自己缺少前一個區塊,從而會請求接收那個缺少的區塊。

以上給出了交易和區塊在網絡中廣播可能出現的一些情況及對策。但是細節并沒有講到,只是給出了大致的框架。如果學過計算機網絡原理,對以上的過程就不會陌生。根據一些資料顯示,比特幣網絡采用的是P2P網絡架構,節點之間連接使用的是TCP協議。TCP協議是一種面向連接的可靠協議,它具有處理網絡丟包、重傳、校驗等功能。

十二、比特幣系統的激勵機制

蔡志川:回答非常清楚,另外比特幣系統是如何發行幣的呢?因為沒有中心了。

陳智罡:通過前面知道,新區塊的誕生是需要耗費CPU的資源以及電力成本的。只有這樣比特幣網絡才能運行下去。而這一切都是在點對點去中心化環境下開展的,即一切都是節點自愿參與的。因此,為了維持網絡的長治久安,必須有相應的獎勵才可以。

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

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.?

我們約定,每個區塊的第一筆交易是一個特殊的交易。該交易產生一枚新幣獎勵給該區塊創造者,即礦工。給挖礦節點的獎勵主要是為了維持網絡的運行,以及在網絡中發行新幣進行流通。這樣做是因為網絡中沒有中央機構去發行貨幣。

這種將一定數量的新幣穩定添加到貨幣系統中的方法,類似于黃金開采者耗費資源去開采黃金并將其輸入到流通領域。而在我們系統中,耗費的是CPU的時間和電力。

除了挖礦的激勵外,還有交易費的激勵。下面白皮書說到: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)。如果某筆交易的輸出值小于輸入值,那么差額就是交易費,該交易費將被增加到該區塊的激勵值中。一旦一定數量的電子貨幣進入到流通領域,則激勵將完全轉換為依靠交易費。而且此時由于貨幣數量穩定,使得系統將完全免于通貨膨脹。

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.?

激勵機制除了能夠維持網絡的運行,鼓勵礦工積極干活,也有助于鼓勵節點保持誠實。如果有一個貪婪的攻擊者能夠調集比所有誠實節點加起來還要多的CPU計算力,那么他就面臨一個選擇:要么用于挖礦以獲得新幣獎勵,要么用于雙花詐騙交易方。他應該發現,如果按照規則行事則更有利可圖,例如挖取更多的新幣,而不是破壞這個系統以及自身財富的合法性。

從激勵這節,我們知道了新幣是如何進入流通領域的,貨幣總量是固定的。除了挖礦可以激勵,交易費也是一種激勵。這讓我想起支付寶這樣的第三方,我們在使用時并不需要付交易費,因為有支付寶這樣的中心機構來管理運行。但是在去中心化的點對點網絡,由于沒有中心參與管理,所以一切都得靠節點自愿,激勵就顯得很重要。從另外一個角度說,似乎中心化的管理更方便,用戶也不需要手續費。但是就是被中心牢牢控制了。所以有得必有失。

蔡志川:您如何看待比特幣的價值?

「火星公開課」第182期 |格密鏈創始人陳智罡:重溫比特幣白皮書

陳智罡:任何東西有需求才有價值,或者大家認可也會產生價值。比特幣還是有需求的,所以也會產生價值。具體價值個人不好判斷,但是具國外專家推測,比特幣5年內要么歸0,要么價值25萬美元。這個要靠大家判斷。如果達成統一共識,那么就會產生相應的價值。

嘉賓簡介

陳智罡 / 格密鏈創始人

密碼學教授,英國Royal Holloway, University of London訪問學者。中科院信息安全國家重點實驗室客座研究員,亞洲區塊鏈學會榮譽學術顧問。

對話發起人

于佳寧博士 / 火幣大學校長

中國人民大學經濟學博士,現任火幣大學校長、中國通信工業協會區塊鏈專委會副主任委員、中國國際經濟技術合作促進會區塊鏈技術與應用工委副秘書長、中國計算機學會區塊鏈專業委員會委員,原工業和信息化部信息中心工業經濟研究所所長,《2018年中國區塊鏈產業白皮書》編委會主任。

蔡志川博士 / 亞洲區塊鏈學會會長

亞洲區塊鏈學會會長,香港區塊鏈資產管理有限公司總裁,世界區塊鏈商學院客席教授、英國劍橋大學區塊鏈商業應用講座講師,被譽為香港區塊鏈首席代言人。

?

文章聲明:本文根據「火星財經創始學習群」嘉賓分享內容整理,不代表火星財經立場,轉載須在文章標題后注明“文章來源:火星財經(微信:hxcj24h)”。

關鍵字: 火星公開課

推廣
相關新聞

漲幅榜

你可能感興趣的內容
下一篇

「火星公開課」第181期 |everiToken發起人蔡恒進:傳統企業如何進行鏈改

新疆18选7开奖结果