區塊鏈技術資源分享
追尋中本聰先生的腳步
?

比特幣點對點網絡中的日蝕攻擊:以太坊是否存在日蝕攻擊?@劉巍然@慢霧科技

本文作者:劉巍然,北京航空航天大學 通信與信息系統博士,文章首發知乎「數據安全、隱私保護與密碼學技術專欄」,慢霧科技公眾號授權轉載,原文鏈接:https://zhuanlan.zhihu.com/p/42446193

我們都知道,比特幣是一個基于點對點網絡(Peer-to-Peer Network)的去中心化數字貨幣系統,應用區塊鏈完成交易的記錄,使用工作量證明機制(Proof of Work)和最長鏈規則(Longest Chain Rule)作為共識機制,使各個節點比特幣的賬本達到一致性。比特幣系統先天可以遭受51%攻擊:當某個節點擁有全網50%以上算力的時候,其從理論上可以實現賬本的篡改,從而實現所謂的雙重花費(Double Spending)攻擊。而51%也就成為比特幣系統的安全閾值(Security Threshold)了。

然而,比特幣系統的安全閾值真的為50%嗎?是否有其它方法、或者在特定的假設下,可以讓比特幣系統的安全閾值降低到50%以下?答案當然是肯定的。

其中一種實現方法叫作自私挖礦攻擊(Selfish-Mining Attack),在提出此攻擊的論文《Majority is not Enough: Bitcoin Mining is Vulnerable》中已經證明,理論上此種攻擊可以將比特幣系統的安全閾值從50%降低到33%。

We further show that the upper bound on threshold size is 1/3": the protocol will never be safe against attacks by a selfish mining pool that commands more than 33% of the total mining power of the network.

值得一提的是,這篇論文撰寫于2013年,最初發表在密碼學著名會議FC 2014上。現在這篇論文已經被著名期刊《Communications of the ACM》接收并于2018年正式刊出。值得注意的是,自私挖礦攻擊不依賴于其它假設,只要曠工擁有超過33%的算力并實施攻擊,則在比特幣系統下,此攻擊總可以成立。因此,這是一種非常通用的攻擊行為。

除了自私挖礦攻擊外,另一種可以降低安全閾值的方案就是今天介紹的這篇論文(Eclipse Attacks on Bitcoin's Peer-to-Peer Network)所引入的日蝕攻擊了。與自私挖礦攻擊相比,日蝕攻擊對攻擊者的要求更高,其需要攻擊者實施網絡攻擊,但并不要求攻擊者擁有挖礦算力。下面我們就來看一看這一攻擊方法的原理簡介。

點對點網絡理論上期望節點與全網中的每一個節點都建立連接。但在實際中這是不可能做到的:建立可靠的TCP連接需要消耗節點的網絡資源。因此,比特幣系統實際上只允許一個節點接受117個連接請求,并最多向外發起8個連接。

比特幣系統實際上只允許一個節點接受117個連接請求,并最多向外發起8個連接。

比特幣系統實際上只允許一個節點接受117個連接請求,并最多向外發起8個連接。

我們設想這樣一個場景:如果一個節點接受的117個對內連接、對外發起的8個連接,其連接目標都是發起攻擊的攻擊者,那這是不是就意味著攻擊者可以完全控制此節點所接受的信息了?事實就是如此,如果真的可以做到這一點,則攻擊者就可以在被攻擊節點和比特幣網絡中建立一個“中繼”,使得此節點是能收到攻擊者希望它能收到的信息。當發生此種情況時,我們稱此節點被攻擊者“日蝕”(Eclipse),這個詞還是挺形象的~

如果一個節點建立的連接都指向攻擊者,則稱此節點被攻擊者日蝕

如果一個節點建立的連接都指向攻擊者,則稱此節點被攻擊者日蝕

如果攻擊者足夠強大,它不僅可以日蝕一個節點,甚至可以日蝕多個節點,從而將整個比特幣網絡劃分成2個部分。如果真的如此,攻擊者就可以用少于50%的算力發起51%的攻擊了。攻擊過程如下圖所示。

通過日蝕實現51%攻擊

通過日蝕實現51%攻擊

假定攻擊者可以將整個比特幣網絡劃分為兩個部分,左側部分的節點總體擁有30%的算力,右側部分的節點總體擁有30%的算力,而攻擊者總體擁有40%的算力。如果攻擊者可以讓左右兩側的節點都接收不到相互之間的通信信息,則攻擊者相當于與左側節點建立了一個比特幣子網絡,而攻擊者在這個子網絡中擁有4/7的算力;反之,攻擊者與右側節點建立了另一個比特幣子網絡,攻擊者在這個子網絡中同樣擁有4/7的算力。這樣一來,攻擊者雖然在全網只占有40%的算力,但在左/右兩側的子網絡中卻分別擁有50%以上的算力,從而實現51%攻擊。

更糟糕的是,即使攻擊者沒有包含任何算力,其也可以通過日蝕實現雙重花費攻擊。具體原理如下圖所示。

通過日蝕實現雙重花費攻擊

通過日蝕實現雙重花費攻擊

假定攻擊者A通過日蝕將比特幣網絡劃分成兩個部分:左側節點擁有30%的算力,右側節點擁有70%的算力,而攻擊者要與某個商人M進行數字貨幣交易,此商人位于左側。此時,攻擊者在左側子網絡中發起一個COIN_0-->M的交易,而在右側子網絡中發起一個COIN_0-->A的雙重花費交易。由于攻擊者阻斷了左右兩側節點的通信能力,因此左側節點(包括商人)并不知道交易COIN_0-->A的存在,也不知道右側節點的存在,他們只能夠看到交易COIN_0-->M。因此,商人M等到此交易所關聯的區塊進一步被多個區塊確認后,放心地將貨物發送給了攻擊者A。

然而,由于右側的曠工占有70%的算力,它們一定可以產生一個更長的區塊鏈,并且區塊鏈中包含交易COIN_0-->A。因此,待商人M將貨物發送給攻擊者A后,攻擊者A停止日蝕攻擊,使左側節點看到右側節點的區塊鏈。由于右側節點的區塊鏈大概率比左側節點長,因此左側節點的區塊鏈被廢除,COIN_0-->M的交易也就被廢除,雙重花費攻擊成功。

由此可見,日蝕攻擊的原理很像網絡安全中的中間人攻擊(Man-in-the-Middle Attack),只不過在中間人攻擊中,攻擊者只需要阻礙兩個參與方之間的通信即可。但在點對點網絡中,攻擊者需要阻礙參與方與網絡中任何其它參與方的通信,這就提高了攻擊的難度。

通過深入研究比特幣系統的源代碼,論文作者組合利用了比特幣系統中的多了漏洞,成功實現了日蝕攻擊。實際攻擊表明,當應用一個包含大約400個IP地址的僵尸網絡,對一個在線節點發起1小時的攻擊后,成功率為84%(攻擊實驗進行了50次)。
日蝕攻擊對實際比特幣節點的攻擊效果

那么,如何抵御日蝕攻擊呢?實際上,論文作者給出了6種防御方法,并將攻擊過程、防御方法告訴了比特幣開發社區。比特幣開發社區迅速做出了響應,并更新了比特幣系統的源代碼。

日蝕攻擊防御方法在比特幣系統中的部署情況

日蝕攻擊防御方法在比特幣系統中的部署情況

相關信息

論文下載鏈接(USENIX Security組會委將所有論文設置為了Open Access,任何人都可以免費下載論文):https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-heilman.pdf

演講視頻連接(USENIX Security組委會官方也發布了演講視頻,任何人都可以免費觀看):https://www.youtube.com/watch?v=J-lF0zxGpu0

以太坊是否存在日蝕攻擊?

實際上,只要區塊鏈系統中點對點網絡的實現機制和比特幣系統類似,就會存在日蝕攻擊。因此,從離亂角度看,以太坊中也存在日蝕攻擊。這方面我查詢到學術領域給出了兩個相關的論文:

  • Wüst K, Gervais A. Ethereum eclipse attacks[R]. ETH Zurich, 2016.(以太坊中的日蝕攻擊)
  • Marcus Y, Heilman E, Goldberg S. Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network[J]. IACR Cryptology ePrint Archive, 2018, 2018: 236.(以太坊點對點網絡中的低資源日蝕攻擊)

其中,第二篇論文的第二作者就是比特幣系統日蝕攻擊論文的第一作者。感興趣的可以進一步閱讀這兩篇論文,了解在以太坊中如何實施日蝕攻擊。


比特幣點對點網絡中的日蝕攻擊:以太坊是否存在日蝕攻擊?

分享到:更多 ()
區塊鏈神吐槽

來評論吐槽 搶沙發

評論前必須登錄!

 

區塊鏈資源分享

韭菜的自我進化
新疆25选7开奖结果是多少钱