當前位置:
首頁 > 最新 > 《Christopher Jeffery公布最新bug,可以摧毀比特幣網路》

《Christopher Jeffery公布最新bug,可以摧毀比特幣網路》

以下內容僅代表Qtum量子鏈鍾文斌個人觀點

近日,開發者Christopher Jeffery(JJ)在出席BreakingBitcoin活動時公布了一個關於比特幣網路的新型DoS攻擊。該攻擊理論上可作用於運行BitcoinCore v0.8 ~ v0.14及其衍生版本客戶端的節點,並且在v0.15中已經被修復。

Qtum基於bitcoin v0.14開發,目前Qtum項目組正在同步修復該bug。需要說明的是,該攻擊目前對Qtum無影響,因為攻擊的前提是產生足夠多的交易,所以在量子幣未正式兌換髮放前,都無法進行此類攻擊。

下面簡單介紹該DoS攻擊的工作模式:

1.產生原因

Bitcoin Corev0.8開始採用vector-based模型存儲UTXO數據,也就是說資料庫的結構是txid到tx的output列表的映射。當時採用這種模型主要是為了節省空間,避免內存中大量重複的txid。其工作原理如圖所示:

當Tx3把Tx1和Tx2產生的UTXO當做input時,需要如下操作:

1)把Tx1和Tx2的所有output列表載入到內存中

2)贖回Tx3需要的UTXO作為新的input

3)將內存中所有的UTXO,包括新的UTXO重新序列化後再次寫入資料庫

這種實現方式會帶來以下的問題:

1)即使是只用到Tx1眾多output中某一個,你仍需要載入整個output列表

2)在操作完成時,你需要將載入的所有的數據重新寫入資料庫中

這就為DoS攻擊帶來了可能性。一個最簡單的想法就是令載入到內存的UTXO列表超出限制。

2.如何攻擊

理論上,可以採用如下方法進行攻擊:

1)首先,創建多個具有盡量多output的tx。理論上最多的P2SHoutput數為31,000(約1MB數據);

2)同理,最大的input數大約為24,000個;

3)在攻擊區塊中,生成一筆有24,000個input的交易,並分別選取來自不同tx的UTXO。注意,每一個用到UTXO列表大小都接近1MB;

4)最後,將會有24GB的數據被載入到內存中(實際根據實現方式不用,載入的內存可能會高達100GB),導致節點崩潰。

上述的攻擊從理論上可行,但可能需要礦工的協助,並且1MB大小的交易太過於明顯,很容易被監測到。實際上對其稍作修改,就可能實現可行的攻擊。攻擊者可以將output數據限制在100kB,這樣理論上要載入2.4GB數據到內存中(實際可能是10GB),對普通用戶的節點來說,同樣也能達到攻擊的目的。同時,這樣的交易也不容易被監測到。

這種攻擊的最可怕之處在於:一旦完成了前面所述的準備工作(這當然需要一定的代價,生成許多準備交易,可能要花費上百萬美元),之後再次發起攻擊的代價就變得非常低廉,可以說幾乎為零。因為攻擊者只需要發起一筆滿足攻擊條件的交易即可實現攻擊。

3.如何修復

該問題已經在Bitcoin Core v0.15中得到修復,具體的思路如圖所示:

1)將UTXO存在本地的資料庫中;

2)數據存儲的結構改為從outpoint到output的映射;

3)有了前面兩點,就能夠在內存中只載入需要用到的UTXO,生成新的交易;

4)在生成交易後,只需要重新寫入部分更新的數據,大大提高了效率。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 量子鏈平台Qtum 的精彩文章:

TAG:量子鏈平台Qtum |