對隨機數的追求,是人類最樸實的公正
DfinityFun
2019-07-24 06:41
本文约10156字,阅读全文需要约41分钟
一個運行在01機器上,能被世間萬物所認可的隨機數,在區塊鏈之前,從來都沒有這麼迷人過。

作者:BlockPunk

前言

前言

作者:BlockPunk

前言

一級標題

4000年前的東方大陸,薩滿緩慢的從篝火的灰燼中扒出龜甲,龜甲上隨機的裂紋會決定部落下一次狩獵的時機;3000年前的地中海,尊貴的雅典神官主持著抽籤儀式,他們要隨機選出五百位優秀公民,來參與城邦政務的討論;2000年前的中東,行商圍坐在一張賭桌旁,緊張的注視著桌面上轉動的四面骰子,它的最終結果會決定一大筆財富的歸屬。

一級標題

圖片描述

圖片描述

圖片描述

圖片描述

一級標題

圖片描述

一級標題

圖片描述

假隨機數

我們可以從物理現像中得到神秘而無窮的隨機性,但有些現象並不能精確量化。但同時我們需要巨量的隨機數來加密數據、訓練模型、公平仲裁,僅依靠自然界的隨機數是遠遠不夠的。

圖片描述

這被稱為平方取中法,這也只是無數假隨機數算法中的一種,這個算法輸出的序列,只取決於最初種子的隨機性。由於機器的確定性,同樣的種子,就可以計算出同樣的隨機數。

圖片來自網絡

圖片來自網絡

種子的位數決定了隨機數的隨機度,當你設定一個兩位的種子生成一個10位隨機數,在函數產生重複循環之前,最多只能得到100個可用的隨機數;而在自然界中, 10位隨機數應該存在一百億種可能。這兩者之間巨大的數量級差別,就是隨機數真與假的區別。

圖片來自網絡

假隨機數存在規律的周期,點集中表現為脈絡

一級標題

當然這種隨機數是足夠使用的,我們必須引入計算機科學中非常重要的一個概念,時間邊界,也就是在多長的時間裡,這個隨機數是安全不重複的。和我們使用密碼車鎖一樣,我們知道正確的密碼必在一萬種的組合方式之中,但一個個嘗試需要花費好幾天時間,這個時間邊界內都算是安全,假隨機數也是如此。

區塊鍊為什麼需要隨機數

總結

總結

  • 在傳統互聯網中,隨機數是作為密碼學與隱私安全的基礎,通過共享隨機的密鑰,兩個節點間就可以進行加密的私人通訊,而在區塊鏈中,就是使用私鑰密鑰傳輸財產;同時隨機數還廣泛應用於有限帶寬下的多節點通訊,可以利用隨機數來決定數據發送的合理順序,來協調多方節點,在區塊鏈上,就是利用基於隨機數的共識算法,協調交易確認者,保證一段時間內大家只對部分節點的消息進行反饋更新,從而在網絡消息數有限的情況下獲得一致。

  • 總結

  • 公平的決定出塊權力,維持一致性共識。部分PoW與PoS機制下,依靠隨機數選定出塊者或者出塊組的,包括DPoS機制下的循環出塊的順序,也是依靠隨機數決定。

  • 一級標題

私鑰的生成。目前私鑰只要由各錢包自定隨機數方法生成,存在較大安全隱患。

鏈上應用的隨機數源。保證博彩、遊戲、抽獎、分發、調查等應用的公平公正,此類容易被黑客攻擊。

鏈上隨機數的難點

二級標題

雖然區塊鏈還是基於過去的互聯網技術,但是在隨機數生成部分卻有著非常大區別。

傳統的隨機數產生方式是中心化的,產出的隨機數,與特定機器的狀態值、物理狀態相關,而同一個隨機數算法,在不同的節點上得到的隨機數是不同的,並且也沒法針對每一個隨機數進行驗證,因此傳統的方式無法產生一致性的隨機性,這和區塊鏈不兼容。

二級標題

  • 二級標題

  • 鏈上隨機數的原則

1.不可預測

因為隨機數決定著整個協議層包括所有以上層級的公正性,如果這個隨機數是能提前預見的,那麼就可以伺機發動攻擊。當然這個不可預測性是存在時間邊界的,一般以區塊鏈時間為邊界,通過控制計算難度,或設置等待,來增加預測的難度。簡而言之,有兩種方案:

  • 保證隨機數從區塊時間上看是串行的(VRF/VDF)

  • 保證隨機數產生的難度,並按情況調節難度(哈希碰撞)

保證隨機數生成是非交互的(閥值簽名方案),或完全根據節點本身狀態計算(哈希碰撞)

二級標題

設置隨機數生成時延,需要等待長時間的複雜計算才能得出隨機數,讓幹擾者無法預估自己施加的影響

3.可驗證

二級標題

二級標題

不符合上述原則的一些解決方案

為了解決區塊鏈上的隨機數難點,自發的產生了許多解決方案,以下簡述以下不符合上述三個原則的方案,雖然他們各自都有自洽的邏輯與一定的安全性,但在現階段還是存在問題的,在對安全需求不是那麼高的地方仍可以使用。這不不針對某個項目,而是指出相似範式的問題。

2.將當前塊的數據作為隨機源

一級標題

一級標題

二級標題

哈希碰撞

三類方案

哈希碰撞

優點:

優點:

  • 優點:

  • 缺點:

缺點:

  • 優點:

  • 隨機性最強,安全性號,非常適合驅動共識層;

  • 計算冗餘度,計算消耗大,資源浪費;

  • 二級標題

難以在應用層使用;

不具備唯一性,可以同時存在多個滿足要求的隨機數,可能導致區塊分叉;

二級標題

二級標題

可驗證隨機函數(VRF)

VRF(Verifiable Random Function)算法於1999年由莫卡利教授提出,由於其較好的安全性與效率,被越來越多區塊鏈項目拿來優化共識過程,讓共識的隨機數部分佔用計算資源變少,讓資源更多地被交易的確認與合約的運行所佔用。

集合上圖簡述生成步驟:

0.生成隨機數簽名專用公私鑰對;

1.獲得一個足夠隨機的種子,可以直接使用上一輪結果,與區塊高度、時間的變量等進行組合;

2.用隨機數私鑰對之進行簽名(共同參與隨機數生成),或是先簽名再組合;"Verifiable"3.對簽名後的值做哈希摘要,得出最新的隨機數;

因此這樣產生的隨機數,節點可以輕鬆驗證其是否合乎算法,

優點:

優點:

  • 就這樣做到了;而經過足夠複雜的算法,加上哈希摘要過程,獲得足夠隨機分佈的結果,“Random”得到了保證。

  • VRF主要結合PoS機制一起使用,來進行出塊人(群)的隨機選擇,個別項目中直接決定區塊的一致性選擇。這個隨機數的生成過程可以完全在一個節點的鏈下運行,同時也可以整個運行在鏈上。

  • 算力要求低,產出隨機數效率高;

  • 缺點:

缺點:

  • 產生唯一性、確定性的隨機數,不易出現分叉;

  • 驗證可滯後於隨機數產生,適合進行秘密選舉;

  • 缺點:

Algorand

缺點:

驗證步驟較多,秘密選舉下需要多次驗證;

每一個節點都獲取前一輪確認區塊上的隨機種子,集合輪次時間等,在鏈下單獨運行VRF函數,然後對結果進行哈希摘要,節點將結果與網絡中哈希值範圍進行比較(比較類似於PoW哈希比對),範圍內的成員便有資格參與驗證與出塊。

優點:

優點:

  • 優點:

  • 缺點:

缺點:

  • 優點:

  • 缺點:

二級標題

DFINITY

抽中的節點需要很長時間互相確認身份,需要遍歷全網,帶寬使用率太高,這使得一般人無法參與共識,影響去中心程度;

由於驗證組大小根據概率範圍分佈,網絡規模小時選不出足夠多的節點,網絡規模大時驗證組過大性能太低;

二級標題

二級標題

組的分配是隨機的,一個節點能同時存在於多個組中,但是組的成員是事先固定已知的,這一點與Algorand的“秘密選舉”有所不同——DFINITY是“先驗”, Algorand是“後驗”。

優點:

優點:

  • DFINITY的隨機數生成過程是完全在鏈上的,你無法對這個隨機數過程進行控制。上一輪的隨機數,會在多個組中選出本輪的委員會組,整個過程的公開的。委員會組會履行出塊、公證的義務,公證過程時,節點會不斷尋找“權重”最高的那個區塊,這個“權重”也是上一輪的隨機數決定的,找到一個區塊,就會使用“隨機數密鑰”簽名並廣播。

  • 而有一個運行在鏈上的程序,叫做隨機數信標,它在不斷地接受當前輪的簽名數據,當有一個區塊的簽名的簽名超過驗證組節點數的50%,它就會將簽名聚合起來,產生一個唯一確認的隨機數。這個隨機數的出現,就預示著本輪共識的結束,將會繼續選擇下一輪共識的參與者。

  • 共識與隨機數生成階段節點無需交互,自動執行,無需拜占庭容錯,效率高,帶寬佔用較低;

  • 缺點:

缺點:

  • 隨機數的生成過程時不可操作的,非交互式的,因此無法施加影響,隨機數更公正;

  • 閥值組已經確定,而不隨共識變化,天生適合分片,因此擴展性很好;

  • 缺點:

Cardano

缺點:

後驗性,組員在共識前就已確定好,可能存在串通勾結的可能;

完全由隨機數驅動,勾結節點雖無法控制區塊鏈,但可以使系統宕機停止;

BLS算法學術基礎已經足夠,但缺少工程實現,並無開源案例。

此項目是著名的銜尾蛇(Ouroboros)算法的首個實現,共識階段以時代(epoch)為週期,每個輪次存在多個插槽(slot),每一個插都會產生一個區塊,如果出現問題可以跳過一個插槽。而每一個插槽該由誰來進行出塊,是需要使用本輪時代的起源(genesis)區塊給出的隨機數種子、有資格參與共識節點的抵押權益、節點公鑰、插槽列表( index)等數據,集合節點公佈的公鑰,計算最終結,數就決定了哪個節點(slot leaders)能進行出塊。

揭秘的過程比較複雜,首先在插槽出塊階段前,所有根據權益(按照抵押大小)選上的節點,會秘密的計算一個隨機字符串,然後把這個字符串進行複雜加密,將加密後的密文廣播全網(不廣播視為在下一時代中棄權),並承諾會解釋秘密。隨後在插槽出塊過程中,節點會公開一個揭示數據Open,這個Open包含了解密與原隨機數,可以用於檢驗節點的這個隨機數。如此便可以保證在產生隨機數之前,節點早就準備好了隨機數並沒有修改過,而不是在收到他人秘密後才生成的,因為那樣可以間接的干擾隨機數的生成,從而間接控制區塊鏈。

優點:

優點:

  • 優點:

  • 缺點:

缺點:

  • 優點:

  • 缺點:

  • 一級標題

VDF+Randao

驗證組是先確定的,根據權益大小排序,因此去中心化略差;

節點間可以串通勾結;

一級標題

一級標題

之前有哈希碰撞中有講到,因為區塊數據的透明,PoW機制下的隨機數很難在上層的合約中作為種子應用,以太坊1.0也存在這個問題。因此就有人考慮使用去中心化的組織來分佈式的收集種子,從而在合約上實現一個安全不可預測的隨機數,這就是Randao。上文中也提到了,雖然其使用經濟上的設計限制了串通,但是卻依然存在“最後參與者攻擊”與“放大攻擊”的風險。

最後參與者攻擊:最後一個參與Randao的人可以預測部分未來隨機數,因此可以選擇不公開秘密,對其施加干擾。

放大攻擊:多次執行最後參與者攻擊,將對隨機數的干擾擴大,從而簡介掌控組織。

而在最近公佈的以太坊2.0的方案中,為了性能的考慮,需要使用PoS來替代PoW,因此需要隨機數來選定出塊資格。隨機數運行在一條稱為“信標鏈”的單鏈上,其產生的隨機數來隨機控制分片的組成,進而實現多片並行,擴展以太坊性能。因此隨機數又成為了以太坊升級的重要基礎,涉及到分片的公正性,與最終確認的可能性。

PoW的分片方案太過複雜,因此以太坊2.0的分片基於PoS實現,隨機數也是如此,無法再用過哈希碰撞來獲取共識層的隨機數了,因此以太坊2.0借鑒了Randao的想法,但為了解決上面講的兩個問題,引入了一個可驗證延遲函數VDF(Verifiable Delay Function),讓通過Randao產生的隨機數需要經歷一段很長的時間,才能得出結果,這個計算難度比較高,且必須等待多個區塊,是串行運行的,這樣一開始像Randao中傳送秘密時,攻擊者無法預測吃自己的秘密對最終最技術的影響,也就無法發動上述攻擊了。

首先介紹一下Randao,以太坊2.0上的節點通過抵押32的ETH,獲得加入Randao的資格,每一獲取隨機數種子時,參與Randao的節點會在心裡默念一個秘密的數字,然後加密後廣播出去。在所有人都獲取了其他人的密文後,節點會相繼公開這個秘密,隨機數使用某種方式合併,就可作為隨機數種子,來生成最終的隨機數。這就像玩橋牌,先牌面朝下的發牌給玩家,然後開牌時一個個進行揭露、為了不讓最後一個參與者預測結果,來施加干擾,選擇使用VDF來生成最終的隨機數。

而這個VDF存在以下特點:

3.串行性。 VDF的計算是一步一步執行的,想要計算最終結果必須按部就班的來,沒法進行並行加速,即使攻擊者手持多台機器也無法短時間裡預測結果。

優點:

優點:

  • 就比如對一個長整數,連續取10次方後,對某一個大素數求餘數,然後連續進行上述步驟幾百次,這就是一個VDF的函數。因此計算次方的算法是有難度的,且多次循環下,必須知道前一次結果才能進行後一次的運算,因次這個算法的最終結果沒法很快的計算出來,必須老老實實一步一步的進行。同時由於人類的計算機架構,即使是算你差別非常大,這個計算難度也不會有指數級的變化,依舊十分難解。這個不可預測性,就保證了隨機數的安全性。

  • 優點:

  • 缺點:

缺點:

  • 目前區塊鏈上最難預測的假隨機數,隨機數強度非常高,但弱於POW;

  • VDF計算過程難度很高,獲取隨機數的效率很低,對計算性能有較大浪費;

  • 總結

總結

雖然計算難度很高,但不像PoW一樣抗量子計算,有攻破可能;

總結

一級標題

總結

統計學家弗朗西斯· 加爾頓在1890年的《自然》雜誌上寫道:“作為一個選擇隨機的工具,我發現沒有什麼優於骰子。”

DfinityFun
作者文库