據慢霧安全團隊情報,2023年3月13日,Ethereum鏈上的借貸項目EulerFinance遭到攻擊,攻擊者獲利約2億美元。
黑客在攻擊完Euler后,為了混淆視聽逃避追查,轉了100ETH給盜取了Ronin6.25億多美金的黑客拉撒路。拉撒路順水推舟將計就計,隨即給Euler黑客發了一條鏈上加密消息,并回禮了2枚ETH:
消息內容是提示EulerExploiter用eth-ecies解密這條消息。
質疑
按道理說在公開的環境下,如果RoninExploiter只是想加密通訊,使?公鑰加密是最簡單的?案。
??公鑰加密:
C={rG,M+rQ}={C1,C2}
????私鑰解密:
M=M+r(dG)?d(rG)=C2?d(C1)
比特幣礦企Stronghold Digital Mining提交招股書:2月3日消息,比特幣礦企Stronghold Digital Mining提交了一份招股書,將出售多達1000萬股a類股票,作為其保存現金努力的一部分。公司將把任何收益用于一般公司用途。(The Block)[2023/2/3 11:46:12]
其中密??C,公鑰?Q,私鑰?d,隨機數?r,消息?M。協議很簡單,加密過程不需要?到的私鑰,不存在私鑰泄露的路徑。
使?eth-ecies加密是因為?便還是另有所圖?隨后很快就有?指出eth-ecies存在安全漏洞,RoninExploiter是想竊取EulerExploiter的私鑰。
是否真的如此?且讓我們先分析?下eth-ecies存在的是怎么樣的?個漏洞。
扭曲攻擊漏洞
經過分析,我們發現eth-ecies使?了?"elliptic":"^6.4.0",這是個Javascript橢圓曲線庫,這個版本的庫存在多個安全漏洞,其中?個就是扭曲曲線攻擊漏洞(twistattacks),這個漏洞的成因是在計算ECDH共享密鑰時沒有驗證對?的公鑰是否在曲線上,攻擊者可通過構造??群曲線上的公鑰,誘導受害者計算共享密鑰,從?破解出受害者私鑰。
Tether將與火必進行4億USDT鏈交換,從以太坊轉換為Tron:1月13日消息,Tether將與火必協調執行鏈交換,從以太坊ERC20轉換為Tron,價值4億美元。 USDT總供應量在此過程中不會發生變化。[2023/1/14 11:11:23]
但是這個漏洞的利?難度是很?的,需要有?常契合的場景才能發起攻擊,RoninExploiter是否有機會發起扭曲攻擊呢?
ECDH算法?險
ECDH算法是基于橢圓曲線加密的密鑰交換算法。它與傳統的Diffie-Hellman(DH)算法類似,但是使?的是橢圓曲線上的數學運算來實現密鑰交換,從?提供更?的安全性。
下?是ECDH算法的步驟:
1.?成橢圓曲線:在密鑰交換之前,通信雙?需要選擇?個橢圓曲線,該曲線必須滿??些數學特性,例如離散對數問題。
BCH輕錢包Electron Cash推出分叉錢包Electrum ABC:11月24日,Bitcoin ABC官方宣布,BCH輕錢包Electron Cas目前已推出分叉錢包Electrum ABC。該錢包已作出對應的代碼修改以方便在BCHA網絡上使用。[2020/11/24 21:53:18]
2.?成私鑰和公鑰:每個通信?都需要?成?對私鑰和公鑰。私鑰是?個隨機數,?于計算公鑰。公鑰是?個點,它在橢圓曲線上,并由私鑰計算得出。
3.交換公鑰:通信雙?將??的公鑰發送給對?。
4.計算共享密鑰:通信雙?使?對?發送的公鑰和??的私鑰計算出?個共享密鑰。這個共享密鑰可以?于加密通信中的數據,保證通信的機密性。
為了?便描述下?Alice和Bob分別代表上?雙?,G為基點,假設:
Alice的私鑰是a,則Alice公鑰是A=aG;
Bob的私鑰中b,則Bob公鑰是B=bG。
核?知識點在共享密鑰計算?法,根據群的乘法交換律,他們只要獲取到對?的公鑰就可以計算出共享密鑰:
孫宇晨:Tron網絡地址數超過600萬:金色財經消息,TRON創始人孫宇晨剛剛發推稱,Tron網絡已經達到了一個重要的里程碑,目前在區塊鏈上有超過600萬個地址。在地址數量增加之前,該網絡上的dapp數量也有所增加,上周總數達到了768個。[2020/6/1]
????????????????????????S=aB=a(bG)=b(aG)=bA
如果Alice想要刺探Bob的私鑰,她可以選擇?個階數?q??常?的曲線點?H,由于群是循環群,Bob在計算?S′?=bH?時,他得到的?S′?將在這些少量點群以內。Alice不知道Bob的私鑰?b,但可以通過窮舉得到滿??S′=xH?的?x,此時?b≡x?modq?。顯然?x?很?,最?為?q。
需要多少個扭曲點呢?這取決于每?次選擇的階數?q,需要階數相乘能超過私鑰的最?值,即滿?:
分析 | 慢霧發布TronBank “假幣攻擊”手法技術分析:TRC10 是 TRON 區塊鏈本身支持的技術代幣標準,沒有 TRON 虛擬機(TVM)。TRC10 提供了 2 個新參數:tokenValue、tokenId,msg.tokenvalue 表示當前 msg 調用中的標記值,默認值為 0。 msg.tokenid 表示當前 msg 調用中的標記 id,默認值為 0。tokenId 也是 Odyssey_v3.2 中的新功能。它可以在帳戶中名為 assetV2 的新地圖字段中找到。 使用 GetAccount(Account)獲取 tokenId 及其值。 TokenId 由系統從數字 1_000_001 開始設置。 創建新的 TRC10 代幣時,數字加 1 并設置此代幣的 ID。
TronBank 合約在 invest 函數內沒有判斷 msg.tokenid 導致任意的代幣(假幣)轉入,合約都以為是真幣 BTT。然后攻擊者再調用 withdraw 從合約中提取真幣 BTT。[2019/4/11]
如果我每次選擇的?q???點,那么需要交互的次數?n?就可以少?點,但?q?越?意味著窮舉的難度越?,所以這?需要根據Alice的運算性能做?個取舍。
事件結論
上?我們分析了ECDH算法的?險和攻擊原理,我們再回來看eth-ecies這個庫,實際上它使?的只是?個類似ECDH的算法,它在構造共享私鑰時使?的是臨時密鑰,根本不需要?到加密?的私鑰,所以并不會對加密?構成?險。
那么有沒有可能RoninExploiter是想利?社會?程學引導EulerExploiter使?其它有問題的?具呢??如我們熟知的PGP加密協議?
巧的很,我們很快就發現被?泛使?的開源庫openpgpjs最新版本v5.7.0?還在使?了低版本的?"={1}".format(Gorder,factor(Gorder)))
計算結果:
...=?2?*?3049?*?14821?*?19442993?*?32947377140686418620740736789682514948650410565397852612808537
選擇19442993這個??適中的數,?中國剩余定理創建?個含有19442993個元素的?群:?
x=crt(,)P1=x*G
到這?我們就得到了第?個扭曲的點,把它當作公鑰發送給Bob,Bob就可以計算第?個共享密鑰:
最終得到的結果可表示為:
使?中國剩余定理即可計算出私鑰?b:
x=crt(,)print(x==b)print(hex(x))
總結
本?我們通過?個不同常理的對話開始研究了橢圓曲線加密算法中的扭曲曲線攻擊,分析了漏洞的存在的原因,雖然漏洞利?場景有限,但不失為?個很有價值的漏洞,希望能對?家的學習研究有所啟發。
最后,感謝領先的?站式數字資產?托管服務商Safeheron提供的專業技術建議。
參考資料:
.https://etherscan.io/tx/0xcf0b3487dc443f1ef92b4fe27ff7f89e07588cdc0e2b37d50adb8158c697cea6
.https://github.com/LimelabsTech/eth-ecies
.GitHub-openpgpjs/openpgpjs:OpenPGPimplementationforJavaScript
.Ellipticcurveconstructor-Ellipticcurves
By:Johan
來源:DeFi之道
時至今日,數字藏品行業在國內已經略具規模,無論是新興企業亦或是老牌大廠都對此有所布局。但一直以來,數字藏品行業相關的判決都少之又少,公開判決更是屈指可數,以至于無論是從法律規范亦或是司法實踐的角.
1900/1/1 0:00:00來源:?BNBchain?forum??作者:ArnoB 編譯:Katie辜 為了防止不“落后”于快速增長的L2解決方案,BSC?驗證者應該認識到重新評估其當前交易費用結構的緊迫性.
1900/1/1 0:00:00原文:lattice 摘要: 由于需要直接與基本協議層進行交互,構建和使用加密貨幣仍然非常困難。這些基本協議層為了滿足預先定義的原則而做出了技術和用戶體驗方面的犧牲.
1900/1/1 0:00:00元宇宙作為“宇宙”這樣的宏大的概念并不是指代一種技術、一個產業,而是一個龐大的社會經濟系統或者是虛擬世界。然而一個虛擬世界要建設談何容易.
1900/1/1 0:00:007:00-12:00關鍵詞:Mina、ArthurHayes、FoundryUSA、Bedrock升級1.Mina發布新路線圖:涵蓋ZK可編程性、結算層性能等五個階段;2.
1900/1/1 0:00:00原文作者:Cookie,律動BlockBeatsAI已經是Crypto市場的熱門概念,而對NFT玩家來說,AI越來越多地在各個NFT項目的冷啟動階段出現.
1900/1/1 0:00:00