比特幣的意外陷阱

比特幣的意外陷阱

比特幣背後的區塊鏈技術使用加密科技,防止系統被篡改。不過,比特幣作為一種加密貨幣,單單具備防篡改性明顯是不夠的。如何抵禦攻擊,避免雙重支付,防止交易記錄自相矛盾而導致服務失常,則需要從多種角度進行安全論證。

相較而言,比特幣使用區塊鏈技術的時間最為久遠。從2009年至今,除了程序漏洞以外,比特幣還沒有發生過系統停止或數據回滾(rollback)的情況。但是一些論文指出,由於比特幣的協議設計和運行問題,很有可能出現不當支付、數據篡改、系統停止等問題。

比特幣究竟具有怎樣的脆弱性,有沒有方案可以修正,區塊鏈的安全性又如何評價呢?下面我們就一起了解一下和區塊鏈安全性相關的4項理論成果。


微小算力攻擊龐大區塊鏈——“Selfishmining(自私挖礦)”

比特幣採用了共識算法——“工作證明”,一般來說,只要惡性節點的算力達不到全體的50%,就無法控制區塊鏈。令人意外的是,即使算力低於50%,惡性節點也可以“蚍蜉撼樹”,控制區塊鏈的生成,這種方式就是“Selfish mining(自私挖礦)”。

按照正常方式挖礦,比特幣的產生頻率與節點的計算力量存在比例關係。然而利用Selfish mining策略,最終結果將遠超擁有的計算資源。理論上來說,只要擁有整體41%的算力,控制區塊鏈產生的概率就高達50%以上。

Selfishmining的節點發現新的區塊後,並不馬上公開廣播,而是隱藏區塊的存在。這樣在其他節點還在尋找原來區塊的時候,他們已經可以挖掘下一塊了。如果運氣好發現新區塊,這時再廣播前一個區塊的存在。

在其他人努力挖礦時,Selfishmining節點則不斷找尋新區塊,這樣,他們擁有的鏈條也越來越長(圖8-1)。


比特幣的意外陷阱


圖8-1Selfish mining

攻擊者採取這一戰略並且擁有整體33%以上的計算力量,實質生成的區塊就遠超這一數字,也就是說,持有41%資源的節點能以50%以上的概率生成區塊。

目前,我們還沒有應對Selfishmining的良策。我們一定要認識到,控制區塊鏈完全不需要擁有過半的算力,更低的數值完全可行。


“Fast payment(快速支付)”的比特幣雙重支付問題和對策

比特幣的交易信息(transaction)被記錄在區塊中,比特幣的支付需要獲得比特幣網絡(區塊鏈)的批准。根據系統要求,從發送交易記錄到獲得許可平均需要10分鐘。

此外,系統為了確認區塊的正當性,批准交易後,交易者還需要至少等待5個區塊連接。正常情況下,從交易完成到確認完畢要花費大約1小時。

正常消費時,別說1小時,顧客可能連10分鐘也不願意等待,所以在一般交易時系統多采用“Fast payment(快速支付)”的方式。店方確認交易信息,驗證數字簽名後,並不會確認有無雙重支付,直接默認支付已經完成。

針對Fast payment的缺陷,我們一起來了解一下具體攻擊方式。

支付方在Fastpayment的店鋪使用比特幣(UTXO)付款(匯款),同時向另一賬戶(同伴的賬戶或自己的其他賬戶)匯款同等金額,這樣店方確認的交易信息就失效了。既獲得了物品或服務,又沒有消耗比特幣,這就是“雙重支付攻擊”的一種表現。因為該種攻擊正好利用了比特幣的交易傳輸協議漏洞,因此其成功率非常高。

攻擊成立需要兩個前提。一是攻擊者(支付方)可以直接向商店發送交易,二是由“輔助節點(helper node)”輔助攻擊。

假設攻擊者的交易信息為“Tv”,同時向輔助節點發送“Ta”交易請求。輔助節點排除店鋪周圍節點群的範疇,直接向其他節點發送信息,“Ta”後來居上,更早擴散。收到“Ta”信息的節點接收交易“Tv”後,將其視為不當交易而取消,自然“Tv”也就不會被廣播。

相比交易“Tv”,後發起的“Ta”存儲在區塊中的概率更高,“Tv”交易無效(圖8-2)。


比特幣的意外陷阱


圖8-2 輔助節點的雙重支付供給

這種攻擊的可怕之處在於,其不僅使店家蒙受損失,對於其他節點來說,他們根本無法發現不當行為。

現行的比特幣體系中,同時接收“Ta”“Tv”的節點數量十分有限。先接收“Ta”,則“Tv”失效;先接收“Tv”,則“Ta”失效,不會擴散到其他節點,所以大部分節點無法獲得雙重支付的證據。

不當交易是證明賬戶非法的有力證據,希望可以廣為告知,將其用於評價管理之中。“Bitcoin - XT(比特幣核心開發者加文·安德烈森開發,用於提高區塊擴展性)”就公開雙重支付的信息,修正評價管理方法,對賬戶所有者進行評論。

如果所有信息都以接力的方式上傳,網絡承擔大量信息,這就是“DoS(拒絕服務)”攻擊,可能導致系統癱瘓。Bitcoin-XT限定單個UTXO只能交易兩次,就是為了規避這種風險。

因為礦工意見不同,Bitcoin-XT還無法擴大區塊,也沒有被納入比特幣體系之中。因此,Fastpayment店鋪結算時,店方不得不承擔這種雙重支付風險。

比特幣的DoS攻擊和對策

有報告稱,惡意使用了比特幣的交易和區塊協議,可以在特定節點延遲信息的傳播,繼而拖慢系統的信息傳遞,甚至可能導致系統停止,或者出現雙重支付等不當行為。

比特幣傳遞交易和區塊信息時,首先傳遞的並不是數據信息,而是名為“清單信息(Inventory Message)”的哈希值。節點收到信息,如果哈希值未知,則會向原節點請求數據信息,繼而完成信息傳播(圖8-3)。如果有人惡意使用清單消息,很可能造成信息傳播的延遲。

攻擊方法存在於區塊和交易傳輸協議之間(圖8-4)。


比特幣的意外陷阱


圖8-3 節點間的信息傳遞


比特幣的意外陷阱


圖8-4 信息傳遞延遲的原理

攻擊節點向目標節點發送消息,對於節點區塊頭、區塊數據的要求,攻擊節點只回復“ping”,在超時之前的20分鐘內,攻擊節點盡情佔有目標節點的功能,延遲區塊的傳播。比特幣連接的上限是126,而通常只使用20個左右,攻擊節點依此佔據目標節點的空閒資源,甚至連續搶奪資源。

攻擊節點利用交易節點的傳輸漏洞,發送清單消息後,同樣只回復“ping”,直到超時(兩分鐘)為止,從而大大延遲交易信息的傳輸。而且清單消息由隊列管理,只要佔領隊列,超時之後,攻擊者還可以控制信息傳送,甚至可以拒絕傳遞任意時間點的交易信息。

如果與其他攻擊並用,該種攻擊的效果將成倍增強,這也是延遲傳遞的可怕之處。

如果與自私挖礦並用,攻擊者就可以用極少的算力控制整個區塊鏈。有觀點認為,只要擁有不少於34%的資源,就可以控制50%以上的區塊,進而支配區塊鏈。

另外,這種傳遞可以無限期滯後,攻擊者還可能發起雙重支付攻擊。如果攻擊者攻擊所有節點,比特幣的服務將陷入全面癱瘓。而攻擊所需的計算機能力並不嚴苛,只要每20分鐘能發送600千字節即可。

針對以上問題,比特幣開發者也在考慮對策,以應對攻擊,比如放棄清單信息,改向區塊頭髮送信息,改變既有協議;用IP地址過濾信息發送者;通過隨機選擇的方法管理發送方……前項對策(BIP 130)已經寫入Bitcoin 0.12.0版本。

區塊鏈安全性評價成果備受期待

對很多加密協議來說,雖然協議安全理論上有保證,但受安裝和運行環境的影響,還是有可能陷入危險。相比之下,比特幣屬於前一階段,其滿足何種條件才算是安全的,具體的標準還在研究當中。下面我們就從工作量證明(Proof of work:POW)的區塊鏈入手,介紹解析協議的研究成果。

嚴格來講,論文中提及的哈希鏈與比特幣哈希鏈的構成方法並不相同,評價區塊鏈時,可以從“Common Prefix(共有前綴) property”和“Chain Quality(鏈質量) property”兩方面入手,分析“POW的成功概率”,意義深遠。

POW 型的區塊鏈中,假設遵守協議的誠實(honest) 礦工成功概率為α,不遵守協議的礦工成功概率為β,人們已經清楚α和β的數值各為多少。論文認為,人們可以具體評估在滿足某種條件後區塊鏈不進行分叉的概率(Common Prefix property)和誠實礦工所生成區塊進入區塊鏈的概率(Chain Quality property)。也就是說,不遵守協議者成功生成區塊這類情況對區塊鏈所產生的影響程度可以量化。

有趣的是,自私挖礦的情況下,不遵守協議礦工的成功概率β可能高於1/3,而ChainQuality property也處於較低水平。這個結果看起來理所當然,其實這是數理模型證明的巨大突破。

我們在分析了原理、理清了資源後,仔細分析實際使用的比特幣就會發現,其通信和數據管理的細微之處存在巨大的安全隱患。筆者希望今後有更多的研究著眼於區塊鏈的脆弱性和安全性,構築更為嚴密的協議體系。


比特幣的意外陷阱


《拷問區塊鏈》


分享到:


相關文章: