Wanchain星系共識探索:隨機數生成演算法

買賣虛擬貨幣
在上一篇解讀文章中,我們介紹了星系共識的整體框架和流程。在共識過程中,節點會組建成兩大星群——RNP星群和EL星群,前者負責隨機數的生成,後者負責打包交易提出區塊。本文將深度介紹星系共識的隨機數生成演算法以及其所具有的優勢和對共識協議執行的重要作用。一、隨機數對於區塊鏈系統的重要作用

在正式談隨機數的作用之前,我們需要了解一個概念,那就是“熵”(entropy)。熵對於物理學領域的朋友一定不會陌生,它是體系混亂程度的度量。在1948年,夏農(Claude Elwood Shannon)提出了資訊熵的概念,去描述信源的不確信度。簡而言之,熵就是不確定性的度量。舉一個簡單的例子:“北京明天的天氣狀況”,可能是晴天,也可能是陰天或者下雨,結果是不確定的,因此熵為正數;“地球明天要毀滅”,我們知道地球明天不會毀滅,這是確定的結果,因此熵為零。

那麼熵和區塊鏈系統有何關係呢?可以說,熵對於區塊鏈系統是至關重要的,是整個系統執行的安全保障。以比特幣系統為例,它採取PoW作為共識演算法,礦工進行大量雜湊計算去爭奪出塊權,任何高度區塊的出塊者身份都無法提前預測,這就是熵在比特幣系統中的體現。試想如果熵為0,即每個區塊的出塊者都是事先確定的或者人為可控,那麼必然會出現合謀、分叉等攻擊。因此任何區塊鏈系統都需要一種安全有效的方式為系統引入熵。基於PoW共識的區塊鏈系統由於挖礦的隨機性,以天然的方式為系統引入了熵,然而對於PoS和DPoS共識的區塊鏈系統,就需要單獨設計一種方式去引入熵,那就是隨機數生成演算法。可以說隨機數生成演算法是設計共識機制的主要挑戰之一,也是衡量共識機制優劣的重要標準之一。

二、隨機數生成演算法優劣的衡量標準

既然隨機數生成演算法這麼重要,那麼一個好的隨機數生成演算法應該是什麼樣子呢?從安全和實用角度而言,它應當滿足以下六大性質:

1. 去中心化(Distributed):隨機數的生成過程要是去中心化的,不能依賴或者藉助可信第三方完成。
2. 不可預測(Unpredictable):根據歷史產生的隨機數或其他資訊無法預測未來的隨機數,這是“隨機”的基本要求。
3. 無偏性(Unbiased):任何人都無法透過計算能力或者後發優勢去針對性左右隨機數的生成結果。
4. 均勻分佈(Uniformity):輸出的隨機數在其值域內是均勻分佈的。
5. 保證輸出(Guaranteed Output Delivery):隨機數生成演算法的參與者無法透過違背演算法的方式使得無法輸出隨機數,即必然會有隨機數輸出。
6. 公開可驗證(Publicly Verifiable):沒參與隨機數生成的節點可以以後驗的方式,監督協議的執行,驗證隨機數是可信和無偏的。

以上六大性質對於隨機數生成演算法至關重要,違背其中任意一條都可能會導致嚴重的安全漏洞。據區塊鏈安全公司PeckShield披露,EOS上有超過8個競猜專案遭受駭客攻擊並獲利幾百萬美元,嚴重威脅到了EOS正常生態秩序,而大部分攻擊成功的原因都與隨機數生成漏洞有關。我們以EOS.WIN專案為例,剖析其隨機數演算法漏洞根源。

EOS.WIN支援的一個遊戲是猜數字,即使用者輸入某個數字並壓大或者壓小,然後系統隨機生成一個數字,如果使用者壓對大小,則視為中獎並獲取收益。顯然如果能夠控制系統隨機生成的數字,就可以左右遊戲的結果。而決定EOS.WIN系統隨機數生成的因素為交易雜湊ID、成交區塊高度、成交區塊字首、全域性開獎序號等。其中成交區塊高度、成交區塊字首雖然是未來某區塊資訊,但是在實施過程系統指定使用當前同步到的最新塊資訊,因而是確定的;同時,交易雜湊ID能夠透過交易內action結合塊資訊預先計算。於是隨機數的生成僅依賴於全域性開獎序號了。攻擊者利用不斷製造錯誤交易,造成交易狀態回滾,控制全域性開獎序號,從而控制隨機數的生成,直到中獎。顯而易見,EOS.WIN的隨機數生成演算法不滿足上述的第二條性質(不可預測性)和第三條性質(無偏性),因此存在漏洞,最終被攻擊者有效攻擊。

三、星系共識隨機數生成演算法

星系共識中的RNP星群藉助承諾、零知識證明、門限秘密分享、門限簽名、橢圓曲線序對等多種密碼學手段,實現了安全高效的隨機數生成演算法,為整個共識過程安全提供了資料基礎。為了能夠形象介紹隨機數生成演算法的設計初衷以及其精妙之處,我們將其類比一個簡單的遊戲:

紙牌遊戲

Alice和Bob玩紙牌遊戲,兩人分別秘密選一張撲克牌放在桌面下方,選定之後,同時將紙牌亮在桌面上。如果兩張紙牌的點數和為偶數,則Alice獲勝;否則,為Bob獲勝。

這個遊戲看似簡單,但是在區塊鏈上公平的進行並不容易,要透過多種手段防止Alice或者Bob作弊。我們接下來一步一步分析:

問題1:Alice和Bob選定之後就不能再更換撲克牌,否則就可以根據對方撲克牌的點數決定自己撲克牌點數,從而獲取勝利。例如,Alice如果可以更換撲克牌,那麼只要保證自己所選撲克牌和Bob的撲克牌點數具有相同奇偶性,那麼點數和總為偶數,Alice便可以獲勝。

星系共識透過使用“承諾”(Commitment,在配圖中用CM指代Commitment)的方式來保證不會發生以上作弊行為。“承諾”是一種密碼學工具,能夠保證在不暴露原始資料的基礎上,將其進行“證據留存”,它和明文是一一對應的,任何人都可以驗證二者的對應關係是否成立。

結合我們的例子形象理解就是,Alice和Bob將自己選定撲克牌撕一個小角下來,放在桌面上,這個小角不會暴露撲克的點數,而且只與撕壞的另一部分才能夠拼接為一張完整的撲克牌。在星系共識協議中,這是Random Beacon的DKG1(Decentralized Key Generation)階段,每個RNP(Random Number Proposer)節點計算其所選資料的承諾併傳送到鏈上進行存證。

問題2:Alice和Bob在選好撲克牌之後,在正式亮牌之前要對自己的撲克牌保密,不能讓對方看到。同時在亮牌時候要證明這張牌確實是之前選定的牌,而不是新選的另一張牌。

星系共識透過公鑰加密演算法加密原始資料,之後將加密結果傳送到鏈上,保證了資料的機密性;同時使用零知識證明保證上鍊的加密資料與承諾完全匹配。結合我們的例子形象理解就是,Alice和Bob將被撕過角的牌從桌下取出,扣在桌面上,並且二者都驗證扣在桌面上的牌與之前放在桌上的小角能夠拼接為一張完整的紙牌。在星系共識協議中,這是Random Beacon的DKG2階段,每個RNP節點將其給其他節點的資料透過對方公鑰加密之後傳送到鏈上(下圖中S1,S2,Sn為經公鑰加密後的鏈上資料),同時傳送到鏈上的還有DLEQ-Proof(非互動零知識證明),用於證明加密內容與承諾CM是匹配的。這個階段之後,所有節點都可以從鏈上獲取其他節點傳送的資料,並且在本地解密為明文。

問題3:開牌之後,需要計算兩張撲克牌的點數。我們要保證Alice和Bob都要計算出同一正確結果。這個問題看似很荒唐,但是卻非常重要。因為某位玩家可能會裝瘋賣傻,故意計算錯數字,從而降低遊戲進行的效率。

星系共識透過使用分散式金鑰生成的演算法解決了問題3,即所有RNP節點透過互動生成一個共同的組金鑰(group secret key),這個金鑰不會完整出現,而是分割為金鑰碎片,每一個RNP節點掌握一個金鑰碎片。之後,RNP節點能夠合成組金鑰簽名,而簽名的雜湊值即為最終的隨機數輸出。由於組金鑰是公共確定的,因此組金鑰簽名也是唯一固定的。結合我們的例子形象理解就是,Alice和Bob會計算得到共同的點數。

問題4:此時,無論是Alice還是Bob都不能夠終止遊戲的進行。也就是一旦遊戲開始,就一定要正常結束,不能因為某一玩家拒絕配合遊戲規則而導致遊戲流產。

星系共識透過門限簽名的方式解決了問題4,即只要超過門限值數量的RNP節點參與計算,就能夠合成組金鑰簽名。個別RNP節點拒絕參與計算並不會影響結果的生成。結合我們的例子形象理解就是,即使Alice不想亮牌,Bob也有能力將兩張牌亮出,從而完成遊戲。

以上過程對應於星系共識協議中Random Beacon的SIGN階段,在這一階段中RNP節點合作生成組金鑰簽名並計算得到隨機數輸出。

現在我們把上述過程梳理一下:1. Alice和Bob撲克牌的點數之和是二者共同決定的;2. 每一局遊戲的點數和都是獨立的,不存在相互依賴的關係,因此歷史遊戲資料沒有預測作用;3. Alice和Bob都無法提前知道對方的撲克牌點數,因此沒有後發優勢去左右點數之和;4. Alice和Bob可以選擇任何一張撲克牌,因此點數分佈是均勻的;5. Alice和Bob都無法中斷遊戲的進行;6. 任何第三方都可以對遊戲過程進行審計,因為所有資料都在鏈上存證。

由以上分析可知,星系共識的隨機數演算法滿足前文提到的六大性質,是安全高效的隨機數生成演算法。

本次對星系共識的隨機數生成演算法的解讀到此結束,相信您已經有了更加深刻的認識。下次我們將對星系共識的Unique Leader Selection (ULS)演算法進行解讀,敬請期待。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;