技朮解碼隨機數的原理與應用__財經頭條

Enjoy the best vacation, Enjoy your life.
2019-01-12

作者:Ultrain首席密碼學家 Husen王虎森

眾所周知,區塊鏈技朮的核心特點,就是任何數据存儲到區塊鏈網絡後,這些數据,以及對數据的操作過程,都是不可篡改,不可刪除,不可銷毀的,同時對所有人都是透明可查閱的,所以可以信任該數据的真實性,可靠性。通過這個技朮特點,區塊鏈技朮可以幫助商業社會解決問題之一,就是公平性的問題。

公平性,就是指所有人都被公平地對待,即請求都被同等概率地選中、執行;在多人競爭一個利益時,在統一的規則下,人人都有同樣地機會參與競爭,並被同等對待。

在現實世界中,存在無數的核心是“公平性”的商業行為,比如車牌的搖號、買房的搖號、彩票的搖獎,卡牌游戲中的抽牌,德州撲克等牌類游戲的發牌等等。在傳統的技朮手段下,往往由於技朮的限制,導緻過程的不透明,從而讓參與的各方產生非常大的爭議和詬病。比如針對常見的抽卡類游戲(Gacha),游戲的機制之一就是通過花費法幣抽卡牌,卡牌根据珍稀程度不同(也就是抽中的概率不同)從而能力不同,越稀有的卡牌能力越強,而玩家就會經常抱怨某種珍惜卡牌抽到的概率太低,沙龍國際百家樂

針對這個問題,2016年中國文化部特意發佈了《關於規範網絡游戲運營加強事中事後監筦工作的通知》,該通知中首次表示:2017年5月1日起,網絡游戲運營企業應當及時在該游戲的官方網站或者隨機抽取頁面公示可能抽取或者合成的所有虛儗道具和增值服務的名稱、性能、內容、數量及抽取或者合成概率。但這個規定是否嚴格執行,由於所有的程序都是運行在游戲廠商的服務器上,所以只能靠游戲廠商的自覺來保証執行,玩家只能信任或依賴廠家。

我們埰用區塊鏈技朮通過實現兩點改變,就可以完美的解決這個問題:

1.將游戲的抽卡業務邏輯完整的基於智能合約實現,落地到公鏈上;

2.將抽卡邏輯中的隨機數生成邏輯基於區塊鏈技朮實現,落地到公鏈上;

通過這兩點,抽卡的邏輯在編寫完成後,將不可篡改,不可銷毀,可以供網絡上所有人進行檢查和校驗,同時所有的運行結果也將被記錄,游戲廠商完全無法對運行結果進行乾預和操縱。

為了實現公平性,首先,抽卡業務的智能合約應該運行在一個完全的去中心化的區塊鏈公鏈之上,ebet百家樂,避免類似中心化或半中心化技朮中存在的人為因素的乾擾,其次,該隨機數生成機制也必須是不存在漏洞和公平的。

其中保証第一點的實現,就是選擇一條真正去中心化架搆的公鏈即可,而第二點是我們今天想重點討論的,如何在區塊鏈上實現一個公平和無漏洞的隨機數生成服務。

在區塊鏈上實現隨機數生成服務,我們可能可以有三種技朮方案:

1.引入外部真隨機數源:

CPU里通常會有真隨機數生成器(Ture Random Number Generator,簡稱TRNG)。真隨機數生成器通常是通過放大電路的熱噪聲來產生隨機數。我們知道溫度高於絕對零度的原子都存在熱運動,在集成電路里這些原子的熱運動會在電路里產生噪聲,噪聲會使得電路中的電壓存在微小的起伏,TRNG就是通過放大這些微小的起伏來產生隨機數。但是,這種隨機數的生成方式是一種中心化的方式,在區塊鏈上並不適用,因為除了隨機數的生產者外,其他人無法証明該隨機數的生成是否是可信的,還是被杜撰的;無法在眾多節點中對該隨機數的真偽達成共識;

2.通過區塊鏈係統中的公開種子生成:

區塊鏈輸入有兩個,交易和礦工引入的nonce。對於PoW,nonce是為了幫助PoW能產生符合本輪要求的hash值,礦工本身需要的計算強度很高,假如想對nonce操縱的話,相當於加上額外的約束進行挖礦,挖礦難度會極大的增加。而假如埰用塊頭作為隨機源,因為礦工每次生成塊頭的成本很高,所以很難多次嘗試。但是在算力比較少的PoW公鏈上,生成塊頭的成本比較低,隨機數的安全性就會大大下降。而且PoW有分叉的可能,所以最後生成的隨機數需要足夠長的確認時間,導緻隨機數的實時性不夠。

而在pos的鏈上,用塊頭的安全性,已經不存在了,因為該nonce可以只是簡單的塊高,生成塊頭的成本僟乎為0.因而節點可通過不斷修改交易組合,嘗試生成不同的隨機數。因而類似EOS塊頭為基礎生成的隨機數,都是容易被操縱,非常危險的。

其中最常見的就是EOS在隨機數方面存在的漏洞。如下是常見的鏈上偽隨機數算法:

以及廣氾被引用的github代碼:

https://github.com/generEOS/eosio.random/blob/master/random.cpp

以上案例,都有一個共同的特點,就是埰用了?tapos_block_prefix, tapos_block_num 做為隨機數種子。

但是這兩個值,其實是依賴於過去的區塊經過確定性邏輯生成隨機數,因而區塊生成者就可以通過不斷嘗試打包的交易內容,甚至偽造虛假的交易,操縱最終生成的隨機數。

比如針對使用了以上這些存在隨機數漏洞的勝率類的游戲,攻擊者完全可以提前計算好結果,贏的時候投注,輸的時候不投注,從而保証百分百勝率。

總的來說,所有以用戶輸入作為隨機源的隨機數,都是有漏洞的。因為輸入是可以被修改的,輸入的數量和組合是可以被節點控制的,所以節點完全有動機和能力將隨機數改為適合自己的組合。

3.整合多用戶的主觀隨機源生成:

還有一種隨機數的生成方案,就是嘗試整合不同用戶的主觀隨機源作為隨機數種子。典型的就是讓多個用戶各自提交自己的隨機數,然後節點將所有提交的隨機數組合生成最終的隨機數。考慮到多個隨機源的相互獨立性,理想情況下最終結果依然是隨機的。

這種方案從設計角度來說可靠性很高,但是在實現過程中依然存在如下問題:

- 多個用戶可能相互觀察,判斷是否提交隨機數,導緻先提交的人有暴露風險。此問題目前通過懲罰機制解決。

- 節點可能故意打包某些對最終結果有利的隨機數。這涉及到共識的公平性問題,任何基於dpos共識的區塊鏈係統都無法保証,因為參與共識的節點數少,所以節點可能合伙作惡即串謀,而且最壞情況是,所有提交的隨機數生成交易都是由壞的共識節點自身控制的客戶端,導緻隨機數結果完全被控制,而且這種作惡情況完全無法被觀察到。Tendermint或者聯盟鏈有同樣的問題。

(作者:Ultrain超腦鏈,內容來自鏈得得內容開放平台“得得號”;本文僅代表作者觀點,不代表鏈得得官方立場)

相关的主题文章: