交易延展性攻擊是如何毀掉世界上最大的比特幣交易所的?

世界上最大的比特幣交易所—MT.GOX(門頭溝)的倒閉

2014年2月25日,日本當地時間上午11點,全球最大的比特幣交易所MT.GOX正式停盤。MT.GOX是比特幣最大的交易所,交易量曾達到所有比特幣交易的80%,而MT.GOX的倒閉,最直接的原因就是黑客攻擊,從而損失了85萬枚比特幣,如果按照當時比特幣的市場價格,總價值近5億美元。而黑客攻擊的主要手段就是——交易延展性攻擊

交易延展性攻擊是如何毀掉世界上最大的比特幣交易所的?

交易延展性攻擊的原理

交易延展性攻擊是如何毀掉世界上最大的比特幣交易所的?

比特幣每筆交易的組成分為兩部分,一部分是交易記錄,另外一部分是腳本簽名。交易記錄記錄著真實的交易信息,包括轉賬的數目,交易地址等,體現的是賬戶的交易狀態信息;腳本簽名是由交易發起人的私鑰進行加密的,作用是證明此交易是由交易發起人的,用於交易見證。

對於每個交易,都會進行Hash運算生成一個唯一的交易ID。由於hash函數的敏感性,對於交易的任何更改都會造成交易ID的不一致。

但是,最大的問題在於:由於比特幣採用的是橢圓曲線數字簽名算法(ECDSA),而數字簽名(r,s) 和 簽名(r,-s(mod n))都是有效的。所以,雖然修改了腳本簽名,導致交易ID不一致,但是兩個交易實際上都是有效的。

那黑客是如何利用這個漏洞來實施攻擊的?

交易延展性攻擊的過程

交易延展性攻擊是如何毀掉世界上最大的比特幣交易所的?

第一步:攻擊前的準備:黑客要準備一個比特幣錢包,然後在交易所開一個帳戶,然後將自己比特幣錢包中的比特幣轉入到交易所的帳戶中。

第二步:發起提現交易:黑客申請將存儲在交易所帳戶中的比特幣進行提現。交易所會發起一筆交易,將比特幣從交易所的比特幣錢包中打入到黑客指定的比特幣地址中,並將提現交易廣播到比特幣網絡上。

第三步:修改交易ID:由於比特幣的區塊生成時間約為10分鐘,所以在交易沒有打包進區塊之前,黑客通過偵聽比特幣P2P網絡來查找這筆交易,修改腳本簽名的格式,生成一筆新的交易,然後廣播出去,此時的交易ID與提現交易的交易ID是不一致的,但是兩者的交易都是有效的,不過由於有兩個交易的存在,也就是形成了雙花,這樣提現交易有一定的概率不會被確認。

第四步:再次交易:如果提現交易沒有被確認,黑客就可以向交易所投訴說沒有收到比特幣。交易所根據自己提現交易生成的交易ID,在比特幣網絡上沒有查詢到此筆交易,會再次發起一筆提現交易。從而導致一筆提現交易,發生兩次,甚至更多次,導致交易所蒙受損失。

後續

所以問題的本質是如何確保交易ID在整個過程中不會發生改變,也就可以解決這個問題,而這就是後續要講的“隔離見證”。


分享到:


相關文章: