比特幣默克爾樹設計存在弱點,可讓駭客假造有效支付憑證

Jun 13, 2018iThome

比特幣默克爾樹(Merkle Tree)的設計存在漏洞,駭客可以為任意金額的假支付創建有效的SPV憑證,欺騙受害者為有效交易,儘管過程需要駭客付出高額成本進行暴力破解運算,但在特定情況下仍有利可圖。

開源智慧合約平臺RSK Labs共同創辦人,同時也是獨立資安研究員Sergio Demian Lerner公開了比特幣默克爾樹(Merkle Tree)的設計缺陷,有心人士可以使用這個弱點,為任意金額的假支付,創建有效的SPV憑證給使用SPV錢包的受害者,讓受害者以為該筆支付為有效交易。不過,要利用這個弱點並不容易,駭客至少須要對69位元進行暴力破解,且每次操作都為雙安全雜湊演算法2(Secure Hash Algorithm 2,SHA-2),而且還有SPV錢包可以簡單實做的機率保護。

比特幣默克爾樹的設計不區分內部節點與葉節點,內部節點沒有特定格式,只要長度為64位元組就可以,整棵樹的深度由交易次數決定。駭客可以向區塊鏈提交64位元組長度的交易,並且強迫受害者的系統將該筆交易重譯為一個默克爾樹的內部節點,駭客因此有辦法提供SPV憑證,也就是說,只要在這個默克爾樹的分支添加額外擴充雙交易而來的葉節點,就能給產生任何交易支付憑證。

但在這之前,駭客必須要完成兩個階段的暴力破解工作,而需要破解的位元長度與駭客一開始投資的金額有關,平均落在69與73位元之間。假設駭客在單個UTXO A持有687個比特幣,那在第一階段總共需要暴力破解的位元數為72位元,而在第二階段則需要暴力破解40位元。Sergio Demian Lerner提到,當第二階段暴力破解重新完成,第一階段計算的結果可以被多次的重複使用,而這樣的攻擊可以在不同區塊不同時間進行,因此平均每次需要暴力破解的位元數為65位元。

暴力破解所需要的客製化特殊應用積體電路(Application-specific integrated circuit,ASIC)與一般的比特幣礦工使用的非常相似。Sergio Demian Lerner表示,最厲害的挖礦機速度為14 TH/s,成本約為1,300美元,假設駭客可以購買10個單位花費130萬美元,只要花4天的時間就能破解72位元。

駭客需要在幾個私人區塊挖礦以確保假交易進行,防止其他礦工重組區塊鏈偷取交易費用或是交易輸出。當駭客可以與51%的礦工合作,便能省下數百萬美元租用雜湊運算機器的成本,而無論是詐騙一個或是多個用戶達130萬美元以上,那就會成為有利可圖的生意。由於大部分的人在進行大筆交易時,都會使用完整節點接收進行仔細的檢查,因次只有仰賴SPV憑證的獨立系統,像是Elements區塊鏈或是RSK Bridge才會受到這樣的攻擊。

這個設計漏洞有很多種的解決方法,最簡單的解法就是讓SPV錢包檢查每一個內部SPV節點的64位元組節點是否為有效交易。Sergio Demian Lerner提到,沒有64位元組比特交易會通過標準檢查,因此這類的交易將會引發警示,即使這類的交易是一般情況,一個隨機的64位元成為語法有效的交易機率也為2的負6次方,因此SPV客戶端可以直接把這種雙交易節點標記為攻擊行為,拒絕接受SPV憑證。