私鑰
· 驗證隨機數輸出
生成隨機數的節點將自己的私鑰,作為生成隨機數的輸入的一部分,然後在本地輸出隨機數和零知識證明。其他節點可以利用生成隨機數的節點的公鑰、輸入、輸出,驗證隨機數和生成者身份的真假。
得到隨機數之後,就需要用生成的隨機數來挑選參與出塊的節點。最簡單的方式是在全網設定一個公認的臨界值M,假設某個節點生成的隨機數R大於臨界值M,系統就允許節點參與下一步的出塊任務。但是這種方案沒有辦法防止女巫攻擊,所以現在大部分VRF抽籤方案都會基於權益進行票數分配,然後設計抽籤演算法,完成後續的共識過程。
Randao
Randao基於區塊鏈技術,提供開源、去中心化、可證公平的隨機數生成服務。Randao的目標是滿足隨機數生成不可控制和不可預測的基本特性的同時,使個體可以參與隨機數的生成,保證隨機數具備可參與性,利用區塊鏈透明和不可逆的特點,保證結果的可證公平性。
Randao主要採用了Commit Reveal和BLS。 Commit Reveal其缺點主要是生成隨機數的速度較慢。在以太坊中,從接到隨機數生成請求,到生成隨機數,至少需要 10 個塊以上的時間,目前耗時在 3 分鐘以上;因為需要參與者多次傳送交易提交資料,其生產和使用成本較高。但該方案的優勢在於,其參與門檻基本為零,任何人都可以隨時加入一個隨機數的生成過程,在防止串謀和可證公平方面擁有一定優勢。
BLS 簽名方案是對Commit Reveal的一種補充,因為生成過程在鏈外組織,響應速度快,通常只需要一個區塊的時間就能生成隨機數;消費者發起隨機數生成請求,生產者在下一個塊寫入隨機數,只需要傳送兩次交易就可以完成隨機數的生成和呼叫,生產和使用成本都很低,適合用於高頻,同時對防串謀要求不高的場景。
閾值簽名機制(Threshold Signature Scheme)
Dfinity是一個公鏈專案,目標是成為“網際網路電腦”,實現軟體和服務在其公有云的運轉。在Dfinity中,隨機數是整個共識機制正常運轉的核心,其採用的閾值簽名機制結合了VRF和BLS簽名機制,是生成隨機數的一種有效方式。
閾值簽名機制主要由三部分組成:輸入、輸出、閾值機制。輸入是一組成員的私鑰,輸出是一個隨機數。閾值機制能夠保證的是,只要接收來自成員的輸入數量超過設定值,就可以得到一個確定的隨機數,但是在得到小於設定值的輸入數量前,沒有人能夠預測輸出的隨機數是多少。輸出隨機數的過程中使用了VRF,閾值機制中使用了BLS簽名機制。
閾值簽名機制結合了VRF和BLS,VRF使其生成的隨機數具備了可驗證性,BLS簽名機制使簽名過程中,沒有節點可以提前預知簽名結果,實現了隨機數的不可操控性,並且很難串謀,是一種不錯的隨機數生成機制。
NULSRNG
NULSRNG是全球開源社羣專案NULS,根據其POC(Proof of Credit)共識演算法,專門為DAPP設計的隨機數種子生成機制。
NULSRNG的實現方式是基於POC共識的兩段式隨機種子提交生成機制。即每個節點在出塊的同時生成一個隨機種子,並對該隨機種子進行加密處理,將生成的密文包含在區塊頭中,同時獲取該節點上次出塊時生成的256位隨機種子明文。結合區塊頭中的明文和密文,就可以對節點生成的隨機數種子進行驗證,確保不可篡改。
NULSRNG基於底層共識實現,由全部共識節點參與,這樣的方式增加了節點串謀的難度,採用種子密文和明文兩段式提交的方式,能夠實現種子可驗證和不可篡改。
在NULS上開發的DAPP,可以直接利用底層提供的介面,獲取隨機種子,然後採用自己的隨機演算法,生成需要的隨機數數列,不僅可以提高隨機數的安全性,同時使用上也可以做到靈活方便。
結語
1、在區塊鏈中,隨機數有著非常多的應用場景,隨著區塊鏈技術的不斷髮展和完善,人們對區塊鏈隨機數的應用將會不斷增加;
2、在區塊鏈領域中,目前已經有許多不同的隨機數生成機制,它們都有著各自的特點;
3、意識到隨機數的重要性,越來越多的技術團隊和專案方,開始研究更好的隨機數生成機制,未來將會有更多完善的區塊鏈隨機數生成機制產生。
作者簡介:
黃連金
著名區塊鏈專家,核聚鏈首席科學家、美國 DistributedApps CEO、中國電子學會區塊鏈分會專家委員、NULS顧問。
向文波
Java軟體工程師,Cryptotech-Writer,NULS Core Team成員。專注於區塊鏈技術研究和區塊鏈解決方案。