元宇宙 碳中和 區塊鏈 快訊 正文
熱門: 微信不綁定手機號可以嗎?有什么壞處和影響嗎 形勢與政策碳中和論文(碳中和的政策和措施) 碳中和環保項目有哪些?碳中和的商機 老梁講比特幣完整(老梁講比特幣視頻) 以碳中和為題寫一篇議論文(關于碳材料的論文) 國家銀行規定以太坊不能交易了嗎(以太坊為什么不能交易)

區塊鏈隨機數和一次性的區別(區塊鏈隨機數是什么)


資料來源:火星金融

受訪者:Johan,慢霧技術安全研究員

特別感謝:高金

作者:李畫

區塊鏈世界上沒有真正的隨機數,但隨機數是區塊鏈游戲的靈魂,至少在現階段是如此。

因此,當偽隨機數使DAPP流出第一滴血時,DAPP無法折斷手臂存活。潛在的黑客就像嗜血的鯊魚。聞到魚腥味后,它們迅速聚集在一起,圍攻有天然缺陷的獵物。

幸運的是,EOS。贏,迪奧斯貝特,費爾迪茲,歐斯羅亞爾,EOSDice,ffgame。。。這些廣受歡迎的DAPP游戲一個接一個地受到攻擊,由于隨機數漏洞而面臨生死危機!澳切]有受到隨機數攻擊的人不好意思說他們在做DAPP”,開發者們自嘲道。

本文采訪了關注DAPP隨機數漏洞的慢霧技術安全研究員Johan,并就代碼細節咨詢了高級DAPP開發工程師高金,試圖通過本文呈現隨機數的過去和現在的生活、原罪和救贖。

原罪:在計算機世界里沒有真正的隨機數

真正的隨機數只存在于物理世界中,如骰子的結果,如電子元件的噪聲。

最早的隨機數發生器是骰子。早在公元前2600年,人類就用四邊骰子玩投擲游戲。到目前為止,它仍然是生成隨機數最可靠的方法。


然而,骰子顯然不能滿足現代世界對隨機數的需求,因此蘭德公司于1995年推出了骰子《百萬亂數表》(《A Million Random Digits with 100,000 Normal Deviates》)。蘭德公司首先通過隨機脈沖發生器生成大量隨機數,然后收集這些數字,形成一本隨機數手冊,免費提供給人們。

這本書是20世紀隨機數領域的一部重要著作。這也是人類歷史上第一次產生如此大量的高質量隨機數。


同時,阿蘭·圖靈首次在計算機Ferrantimark1中內置了隨機數生成指令,該指令可以利用熱噪聲一次生成20個隨機位。1999年,英特爾更進一步,在i810芯片組上集成了芯片級真隨機數發生器(TRNG),通過熱噪聲從本地源生成隨機數。


然而,TRNG每秒只能生成有限數量的隨機比特,并且隨機數的生成速度很低,這限制了軟件的工作頻率。此外,TRNG對外部干擾極為敏感,需要消耗大量功率以避免非隨機信號對信號源的污染。

偽隨機數與時俱進。馮·諾依曼通過給一個確定的隨機數種子創建了最早的偽隨機數生成器(PRNG)算法每次都會生成相同的隨機數序列。只要種子保持不變,偽隨機數的順序就不會改變。

此后,猜測種子破解隨機數成為黑客的常規攻擊手段,事實證明,質量好、不易攻克的種子很難找到。但即便如此,由于效率的原因,計算機軟件仍然必須依賴偽隨機數。

在當前的編程語言中,C++、R、python、ruby、PHP等都使用Mersenetwister作為默認的偽隨機數生成方法,這是松本真和西村拓士1997年發明的。

梅森旋轉算法以寄存器的當前或以前狀態為種子源,通過線性反饋移位寄存器對輸入進行移位和旋轉,周期為梅森素數。該算法生成的偽隨機數質量好,生成速度快。

偽隨機數的種子源也可以是真隨機數-CPU通過TRNG連續生成真隨機數,并將其存儲在熵池中。當軟件需要使用隨機數時,它從熵池中提取一些真實的隨機數作為種子,輸入到PRNG中,通過PRNG得到偽隨機數序列。

天塹:區塊鏈不支持生成隨機數

傳統的偽隨機數生成算法或多或少與單機的物理狀態或運行狀態有關。不同的機器或不同的節點會有不同的操作結果,這在區塊鏈是不可行的。區塊鏈是一個分布式系統,要求每個節點的運行結果都是可驗證的、一致的。

區塊鏈需要從頭設計一個新的隨機數規則,以便不同節點上的智能合約可以使用相同的隨機數。

有三種解決方案。第一種是讓受信任的第三方為合同提供隨機數;二是通過基本合同實現偽隨機數生成器,為其他合同提供一致的隨機數;第三種是讓所有節點上的契約收集相同的種子,然后通過偽隨機算法計算相同的隨機數序列。

第一種方法的最大缺點是需要引入第三方。第三方是否值得信任,是否能夠提供高質量的隨機數是一個問題。此外,區塊鏈對集中持謹慎態度,而第三方在一定程度上是集中的,這與一些DAPP開發者的概念不符。

在以太坊上,Oraclize是為鏈上的節點提供隨機數的第三方。Oraclize是一位預言家。獨立于區塊鏈的系統,智能合約向Oraclize發送請求。當Oraclize聽到鏈上的相關請求時,他會生成一個隨機數,并將結果返回給區塊鏈。


第二種方式最符合區塊鏈的精神。它是一個偽隨機數發生器,不同參與者合作生成隨機數,但它涉及激勵機制的設計和人為控制的作弊。

RANDAO采用了這種方法。它以智能合約的形式封裝偽隨機數生成算法和相應的業務邏輯,為以太坊提供隨機數服務。任何人都可以參與RANDAO隨機數的產生。

在隨機數生成周期中,每個參與者都需要提交一個數字,所有參與者設置的數字將用作生成偽隨機數的種子。由于他人提供的種子無法得知,因此該方法產生的結果很難破解。智能合約可以要求RANDAO提供隨機數,但他們需要向生成隨機數的參與者支付獎金。


在第三種方式中,隨機數不是從合同外部引入的,而是從合同外部引入的鏈上的信息被用作種子,智能合約根據種子生成偽隨機數。這種方法的最大缺點是,一旦黑客知道隨機數生成算法并獲得正確的種子,他們就可以很容易地對智能合約發起隨機數攻擊。

與傳統偽隨機數生成算法中的種子隱私不同,區塊鏈身上的種子幾乎是“透明”的:它是鏈上的塊信息,可以獲得所有節點上的智能合約。原則上,黑客用來攻擊的惡意合同也可以獲得這些值。

然而,由于缺乏成熟的隨機數提供商、對集中隨機數的警惕以及對鏈中自治的追求,通過智能合約計算隨機數仍然是EOS上許多DAPP的首選方法,這也是DAPP深陷黑客危機的原因。

攻防:道高一尺,魔高一尺

Ffgame可能是歷史上最不走運的DAPP——游戲在正式發布之前就遭到了攻擊。黑客很快破解了隨機數,然后繼續在游戲中獲勝。他們輕松地將ffgame平臺1332EOS投入游戲的初始資產。城門在格梅準備迎戰敵人之前就消失了。

在DAPP的攻防戰爭中,攻擊者通常有兩種方法通過使用隨機數來竊取資產。

第一種方法是獲得正確的隨機數種子,通過偽隨機算法計算游戲結果,然后根據結果下注,確保100%的中獎率。

第二種方法是改變種子的值,讓偽隨機算法計算自己下注的游戲結果,以確保100%的中獎率。

EOSDice是一個DAPP,他被黑客用第一種方法破解,修改了偽隨機數算法,并立即被黑客用第二種方法破解。然而,值得稱道的是,EOSDice也是一款EOS游戲,已經被打破兩次,但仍然堅持開源。


11月4日凌晨3點15分,EOSDice首次遭到襲擊。攻擊者是jk2uslllkjfd。大約2500枚EOS被盜并被轉移到火硬幣中。

EOSDice的偽隨機數生成算法中使用的隨機種子主要是tapos_uuuu_uuu前綴;tapos_uuu_uuu_uuu_uuu_uuu_uuu_uu_uu_uu_uuu_uuu_uuu_u;名稱游戲id;當前時間;池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池池。金額。最后四個種子,即帳戶名、ID、彩票時間和合同余額,相對容易獲得。隨機數的安全性主要取決于前兩個種子的信息,即參考塊。

在EOSDice的實時彩票機制中,action的參考塊默認執行當前action的前一塊。該塊已經存在,可以提前獲取其信息。因此,黑客可以通過種子預先計算結果,然后下注。


EOSDice被攻擊后,將實時彩票改為異步延時彩票,再次上線。然而,第二次襲擊很快就發生了。11月10日上午11時19分,帳戶名為coinbasewa11的攻擊者偷走了約4900個EOS并轉移到bitfinex。

在異步延遲彩票機制下,參考塊的方向發生了變化。action的參考區塊是在下注時尚未生成的區塊。它的信息很難事先獲得,因此無法先計算比賽結果。

但黑客們想出了新的方法:首先,讓攻擊契約模擬EOSDice的游戲契約。只要兩個契約在同一塊中運行,它們將獲得相同的種子并計算相同的結果;然后,由于EOSDice偽隨機算法的種子包含賬戶余額,黑客可以在攻擊合同中反復修改余額的值來更改種子,然后更改操作結果,直到最終滿足自己的下注條件;最后,在通過上述計算“碰撞”了“正確”的帳戶余額后,黑客只需將計算出的EOS轉移到真實的游戲合同帳戶,以確保他們在彩票開張時中獎。


救贖:沒有最好,只有更好

鏈上的隨機數問題沒有完美的解決方案。區塊鏈不僅沒有真隨機數,也沒有傳統的偽隨機數。

官方EOS示例中使用的隨機數生成方法與上面討論的第二種方法類似——使用不同參與者的私有數據收集作為種子,生成難以預測的偽隨機數。

以骰子為例,玩家和莊家需要提前生成密鑰,先將公鑰傳遞到鏈中,在舉行彩票時提交私鑰,生成一個隨機數作為種子,然后根據隨機數確定彩票結果。這可能是目前最安全的偽隨機數生成方法,但它給玩家增加了額外的、不易操作的操作,提高了游戲的閾值,在現實中沒有得到廣泛的應用。

當EOS開發小組回答隨機數的安全問題時,BM提出了“信任區塊生產者”的方案,即利用區塊生產者在打包交易的特定時間獲得的某些信息生成偽隨機數。雖然問題是在鏈上解決的,但這種方法更接近上面討論的第一種方法——隨機數由集中的第三方提供。雖然很難破解,但提供商不一定值得信賴。

屢遭失敗的EOS上的DAPP開發人員通常選擇上述第三種方法——智能合約,獲取鏈上的數據作為種子,并自行生成偽隨機數。

經過幾次與黑客的對抗,DAPP最常用的彩票機制是“二次延遲彩票+種子中未設置可控變量”。

在實時彩票機制下,參考塊是前一塊,其中的種子數據可以在彩票之前被黑客獲;對于第二個延遲抽簽,參考塊是尚未生成的塊。種子數據很難預測,黑客也無法提前計算彩票結果。種子中缺少可控變量確保了黑客無法通過更改種子的值來操縱彩票結果。

然而,即便如此,“二次延遲彩票+種子中未設置可控變量”也不能保證合同隨機數的絕對安全性。只能說,這種方法在現階段還沒有被黑客破解,是比較安全的。畢竟,無論采用多少延遲,從彩票合同中獲得的種子也可以從攻擊合同中獲得。鏈條上的種子是“公平”和“透明”的。

如何在這種不完美的情況下最大限度地減少隨機數攻擊造成的傷害,慢霧小組給出了一些切實可行的建議:

1.從多個角度審查合同。

2.攻擊者通常通過惡意合約進行攻擊。他們應該考慮合同可以攻擊隨機數的角度。

3.隨機數的安全性與偽隨機數生成算法和彩票機制有關。算法和機制應該一起設計。

4.偽隨機數生成算法不應引入可預測種子和可控種子,以避免結果被預測或篡改。

5.了解區塊鏈隨機數與傳統隨機數的區別。

6.做安全審計。在項目上線和開源之前進行安全審計?梢园l現已知漏洞,未知漏洞也可以通過風險控制機制將危害降至最低。

后記

弗朗西斯·高爾頓(FrancisGalton)在1890年寫道:“在所有產生隨機數的東西中,我認為沒有什么能超過骰子!薄蹲匀弧冯s志寫道。

但是骰子永遠不能滿足計算機應用的需要。一旦我們想在二進制世界中使用隨機數,我們就需要做出妥協,讓自己面臨黑客攻擊的風險。

區塊鏈世界的特殊性要求我們做出更多的妥協。由于分布性、透明度、對集權的警惕性和對鏈中自治的渴望,區塊鏈沒有真正的隨機數,也永遠不會有絕對安全的隨機數。

隨機數在開發者和黑客之間引發了一場持久的戰斗。隨機數將抵抗所有已知類型的攻擊,但黑客將繼續尋找新的攻擊方法。這里沒有人幸存。

參考資料:

一《道高一尺魔高一丈的隨機數攻擊—— EOS偽隨機數漏洞》

二《EOS主網上線以來智能合約攻擊方式匯總》

三《Fomo3D 狼人殺、EOSBet 、EOSDice 等十八個安全漏洞事件始末》

資料來源:火星金融

推薦文章

久久精品_校花高潮抽搐冒白浆,欧美乳胶衣A片,国产高清女人高潮对白,强奸无码激情片,免费无码电影区
国产v亚洲v天堂无码| 欧美视频毛片在线播放| 亲爱的热爱的免费观看| 黄色的网站| av网站大全| 老师在上课时露出奶头| 风流女管家| 黄色一级电影| 黄色图片| 欧美精品videossex| 国产免费av片在线观看| 吉泽明步av| 欧美人与动性行为视频| 洁癖的禁欲医生| 免费a级毛片| 黄色三级| 妈妈的朋友9| 全程露脸国产熟妇在线| 欧美zozo人牲交| 日韩女人性开放视频| 五十路六十路老熟妇a片| 男女真人牲交a做片| 午夜福利视频| 邱淑贞三级| http://www.poorjade.com