麻豆国内精品欧美在线-麻豆国内精品久久久久久-麻豆国产在线观看一区二区-麻豆国产在线观看免费-麻豆国产原创-麻豆国产一区二区在线观看

?淺析區塊鏈DApp安全隨機源機制的設計與實現區塊鏈

ChainShells 2018-11-27 13:42
分享到:
導讀

近期區塊鏈DApp游戲的應用數量和用戶數量都得到了一定增長,但令人擔憂的是多款競猜類DApp頻頻爆出被黑客進行了針對隨機數缺陷的攻擊

近期,區塊鏈DApp游戲的應用數量和用戶數量都得到了一定增長,這對公鏈的應用探索和推廣有積極的促進。令人擔憂的是,多款競猜類DApp頻頻爆出被黑客進行了針對隨機數缺陷的攻擊。攻擊成功后,黑客就能夠預知競猜結果,來獲得下一次競猜的獎勵。

在中心化的競猜類應用里,競猜結果都是由中心提供的,參與競猜的客戶端向中心服務提交競猜訂單,中心收集競猜訂單并生成競猜結果返回給客戶端。在這個過程中,客戶端只負責收集競猜訂單和通知結果,并不參與競猜結果的計算。競猜結果都是由中心產生競猜用隨機數,根據游戲規則將隨機數的隨機性體現在競猜結果上。通過這樣的隨機數轉化來保證競猜結果的隨機性和公平性。因此競猜應用是否公平、中獎機率是否隨機,完全取決于隨機數的生成、使用過程是否完全實現了的隨機性的傳遞。

在區塊鏈的DApp應用里,隨機數或由第三方隨機數服務接口利用Oracle機制,由硬件HSM生成后提供給區塊鏈參與者,或由智能合約提供生成規則后DApp自行生成。大多數DApp使用的都是由智能合約進行共識來生成偽隨機數。

目前,ETH和EOS等公鏈并未提供可靠的偽隨機數接口。一些熱門的DApp游戲尤其是競猜類游戲如Luckyos、EOS.WIN、EOSDice等先后因偽隨機數生成的缺陷而遭到黑客攻擊。我們以EOSDice舉例來說明攻擊的原理。

-------------------https://github.com/loveblockchain/eosdice/blob/v3.0/eosbocai2222.hpp--------------------

    uint8_t random(account_name name, uint64_t game_id)

    {

        auto mixd = tapos_block_prefix() * tapos_block_num() name game_id - current_time();

        const char *mixedChar = reinterpret_cast<const char *>(&mixd);

        checksum256 result;

        sha256((char *)mixedChar, sizeof(mixedChar), &result);

 

        uint64_t random_num = *(uint64_t *)(&result.hash[0]) *(uint64_t *)(&result.hash[8]) *(uint64_t *)(&result.hash[16]) *(uint64_t *)(&result.hash[24]);

        return (uint8_t)(random_num % 100 1);

    }

----------------------------------------------------------------------------------------------------------------------------------------

  從最新修復后的代碼可以看到,該隨機函數中使用的隨機因子(seed)主要是:
     tapos_block_prefix() * tapos_block_num()  --參照區塊信息
   name                                      --賬戶名
     game_id                                   --賬戶名
   current_time()                            -- 當前時間

在該版本中,下注賬戶余額(pool_ol_eos.amount) 已經不參與隨機因子(seed)。項目方解決被攻擊的思路是避免黑客通過可控制的賬戶余額(pool_ol_eos.amount)來計算隨機因子(seed)。但該修復只是減少可控因素的成本,隨機因子中的賬戶名(name)還是可以被操縱的。當下注金額較大時,黑客依然有十足動力來進行攻擊。

從安全本質上來說,能夠被黑客輕易攻擊是因為這個隨機數算法不具備工業級別。表現為:

1.作為隨機因子的(seed)的熵源(Entropy Input)不是可靠。

2.隨機因子Seed的安全強度不足。

3.算法簡單和重置隨機因子機制缺失,隨機數結果可回溯且具備可預測性。

如何設計和運用具備工業級別的偽隨機數方案,筆者建議參考2015年 的NIST 800-90A《確定性隨機比特生成器的隨機數生成方法建議》(‘Recommendation for Random Number Generation Using Deterministic Random Bit Generators’),它給出了實踐和參考的一些實現方法。但結合DApp的業務流程時,也需要進行針對性的調整。NIST的800-90A 2016年版本也曾造成了重大的安全事故:建議中包含了4種隨機數生成方法,其中一種Dual_EC_DRBG算法為美國安全局進行全球的通訊竊聽提供了有力的助攻。

該建議書中的DRBG(Deterministic Random Bit Generators)機制有五個獨立的功能:

1.實例化功能(instantiate function)獲取熵源(entropy input)或者附加 隨機數Nonce和個性化字符串(personalization string)創建初始內部狀態的隨機因子(seed)。

2.隨機比特位生成功能根據請求使用當前內部狀態(current internal state)和可能的附加輸入(Additional Input)生成偽隨機比特位; 并生成下一個請求的新內部狀態(new internal state)。

3.重設隨機因子功能(Reseed Function)獲取新的熵源,并將其與當前內部狀態(current internal state)和可能的附加輸入(Additional Input)結合創建新的隨機因子(new seed)和新內部狀態(new internal state)。

4.注銷實例化功能將內部狀態清零擦除。

5.自檢功能確定DRBG機制能繼續正常運行。

image.png

圖片來源:NIST 800-90A《確定性隨機比特生成器的隨機數生成方法建議》

在開源世界里,已經有很多滿足NIST要求800-90的DRBG的實現,筆者建議在不具備密碼學基礎的Developer不要輕易的編寫自定義的偽隨機數生成器。

即使采用滿足標準的偽隨機數生成器,但由于偽隨機數生成算法跟設備上物理狀態或執行過程中狀態相關,在區塊鏈分布式系統的各個Node無法得到一致的隨機數。 在區塊鏈世界里某些應用場景尤其是有獎競猜等,各個Node所需要的隨機數(不管是真隨機還是偽隨機)應該是可共識的,可信賴的,可驗證且可審計的。

鏈殼科技愿為DApp開發者提供全方位的安全設計咨詢和審查服務,共同提高產品抵御攻擊的能力,為用戶提供良好的安全體驗。合作請聯系:business@chainshells.com


隨機數 隨機 生成 因子 競猜
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


主站蜘蛛池模板: 九九九九在线精品免费视频 | pregnanthd产子 | 99久久香蕉国产综合影院 | 日本高清视频一区二区 | 热久久99精品这里有精品 | 色播影院性播影院私人影院 | 爽爽窝窝午夜精品一区二区 | 国产成人精品一区 | 无人区免费一二三四乱码 | 亚洲欧美日韩在线观看看另类 | 鬼畜重口高h合集长短篇 | 校花的第一次好紧好爽 | free极度另类性欧美 | α片免费| 男人日女人的b | 亚洲精品视频在线 | 狐媚小说 | 国产福利兔女郎在线观看 | 日日干影院 | 国产福利自产拍在线观看 | 欧美大片一区二区 | 国产第一综合另类色区奇米 | 女人把扒开给男人爽 | 日韩精品欧美国产精品亚 | 国产综合色在线视频区色吧图片 | 久久99精品久久久久久园产越南 | 91午夜视频 | 午夜dj免费视频观看社区 | 欧美精选欧美极品 | 欧美撒尿屁股嘘嘘撒尿 | 午夜福利体检 | 日本视频观看 | 日本精品www色 | 国产成人精品午夜在线播放 | 欧美黑人ⅹxxx片 | 欧美视频精品一区二区三区 | 日本三级免费观看 | 欧美综合在线 | 毛片亚洲毛片亚洲毛片 | 国产成人在线综合 | 日本伊人色综合网 |