曲速未來 揭示:不隨機播放的索尼PS3和比特幣密碼破解區塊鏈

                  曲速未來安全區 2018-11-14 09:52
                  分享到:
                  導讀

                  曲速未來表示:最昂貴的黑客是什么?贖金?惡意軟件?不!許多專家認為這是信任基礎設施一個組織的私鑰被泄露的地方。然后,這可能會危及這些密鑰簽名的所有內容,包括文檔和可執行文件。

                  區塊鏈安全咨詢公司 曲速未來 表示:最昂貴的黑客是什么?贖金?惡意軟件?不!許多專家認為這是信任基礎設施一個組織的私鑰被泄露的地方。然后,這可能會危及這些密鑰簽名的所有內容,包括文檔和可執行文件。

                  想象一下微軟的私鑰被黑了,然后就不能相信任何由這些密鑰簽名的軟件(或硬件)。入侵者可以創建自己的軟件(或硬件),然后用有效的密鑰對其進行簽名。必須大規模撤銷軟件和硬件,幾乎所有與微軟私鑰相關的東西都必須重新安裝。

                  因此,入侵者可以重新創建由可信私鑰正確簽名的軟件。這些私鑰通常是公司內部人士偷來的,但在有些情況下,草率的編碼為世界打開了鑰匙。這種情況發生在ECDSA的情況下,開發人員沒有檢查他們生成的隨機數。

                  索尼PS3黑客

                  2010年,黑客組織Fail0Overflow證明了他們可以破壞索尼PS3的安全方法。他們實現了重新創建索尼的私鑰,然后打破了管理程序和簽名的可執行文件上的簽名。

                  核心問題與在簽名處理(ECDSA)中使用的隨機因素的產生缺乏隨機性有關。他們通過逆轉簽名的公鑰來提供私鑰來做到這一點。事實上,不涉及實際的隨機化,每次簽名的種子值保持不變。

                  簽名值(R,S)使用隨機值k,以確保同一私鑰和同一消息的值將有所不同。不幸的是,索尼的開發者并沒有隨機化它。

                  利用ECDSA,我們為橢圓曲線(a和b)選擇了一個大素數(P)和兩個參數。接下來,我們選擇一個素數(N),用來限制0到n-1之間的值。首先,我們在橢圓曲線(G)上選取一個點,然后計算:

                  p,a,b,G,n和Y的參數是公共的,私有部分是x(私鑰),公鑰是Y。接下來,我們用一個隨機生成值(K)并對電文進行散列(M):

                  請注意,?標識x-協調。

                  然后,消息的簽名對為(r,s)。下面是一個帶有“Hello”消息的示例運行:

                  然后,就可以用以下方式驗證簽名:

                  (A)計算消息(M)的散列。

                  (B)計算w=s{?1}(Mod N),u1=M·w(Mod N),u2=r·w(Mod N)

                  (C)計算曲線上的點(x1,y1):=U1×G U2×Y

                  (D)然后我們檢查r≡x1(Mod N)。如果為真,則驗證簽名。

                  不幸的是,索尼沒有為每個簽名生成k值,總是使用4作為k的值。如果對兩個不同的文檔使用相同的k值,EVE可以找到私鑰,從而產生偽造簽名。

                  而且,知道了這兩條信息就可以確定k。由此可以計算私鑰(X)。

                  如果知道M(消息)、r、s和k(所使用的隨機值),那么就可以從以下位置確定私鑰(X):

                  X=(H(M) kr)/s(Mod P)

                  如果我們知道M,r,s和私鑰(X),我們可以確定所使用的隨機值(K):

                  K=(SX-H(M)/r(Mod P)

                  比特幣黑客

                  另一個震驚發生在2012年的比特幣黑客攻擊,這再次打破了ECDSA隨機數發生器的缺陷。在比特幣中,如果Alice(A)將比特幣發送給Bob(B),則使用Alice的私鑰創建以前交易的數字簽名。然后把Bob的公鑰添加到事務中。然后定義事務的驗證,從上一個事務獲取公鑰并檢查簽名。

                  Nils Schneider于2013年首次發現了該缺陷,他發現以下r值出現了50倍以上:

                  并被標識為由同一用戶在兩個事務中使用(因此具有相同的私鑰)。這意味著使用的是相同的隨機數。在Hack[1]中有兩個輸入和一個輸出:

                  可以注意到,輸入的起始字節是相同的,這些字節標識簽名(r,s):

                  可以看出,這兩個簽名值(R1和R2)是相同的。這是因為在Android上JavaSecureRandomclass中的Java bug上,并且它沒有生成安全的隨機數。例如,以下兩個事務具有相同的r值:

                  然后,2013年12月28日,Nadia Heninger報告說,由于這一漏洞,59 BTC被盜[1 HKywxiL4JziqXrzLKhmB6a74ma6kxbSDj]:

                  黑客的收益最終在2017年8月左右被轉移。

                  結論

                  區塊鏈安全咨詢公司 曲速未來 告誡:要始終使用簽名的隨機數。在ECDSA中的簽名組合中添加了一個隨機值,這將改變簽名。不幸的是,如果不正確地生成隨機數,則會大大削弱簽名,從而暴露私鑰。一種改進的方法是EdDSA(Edwards-曲線數字簽名算法),并使用扭曲的Edwards曲線增強Schnorr簽名創建數字簽名,它的核心優勢在于它的安全性不是建立在產生強隨機數的基礎上的。

                  簽名 使用 隨機 隨機數 黑客
                  分享到:

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