警惕區(qū)塊鏈:比特幣的陷阱與風(fēng)險(xiǎn)
最近一段時(shí)間,“比特幣”投資頻繁的出現(xiàn)個(gè)各個(gè)媒體平臺(tái),跌漲猶如過(guò)山車(chē)一般,我們?cè)诜治隽嗽?、理清了資源后,仔細(xì)分析實(shí)際使用的比特幣就會(huì)發(fā)現(xiàn),其通信和數(shù)據(jù)管理的細(xì)微之處存在巨大的安全隱患。
一
比特幣背后的區(qū)塊鏈技術(shù)使用加密科技,防止系統(tǒng)被篡改。不過(guò),比特幣作為一種加密貨幣,單單具備防篡改性明顯是不夠的。如何抵御攻擊,避免雙重支付,防止交易記錄自相矛盾而導(dǎo)致服務(wù)失常,則需要從多種角度進(jìn)行安全論證。
相較而言,比特幣使用區(qū)塊鏈技術(shù)的時(shí)間最為久遠(yuǎn)。從2009年至今,除了程序漏洞以外,比特幣還沒(méi)有發(fā)生過(guò)系統(tǒng)停止或數(shù)據(jù)回滾(rollback)的情況。但是一些論文指出,由于比特幣的協(xié)議設(shè)計(jì)和運(yùn)行問(wèn)題,很有可能出現(xiàn)不當(dāng)支付、數(shù)據(jù)篡改、系統(tǒng)停止等問(wèn)題。
比特幣究竟具有怎樣的脆弱性,有沒(méi)有方案可以修正,區(qū)塊鏈的安全性又如何評(píng)價(jià)呢?下面我們就一起了解一下和區(qū)塊鏈安全性相關(guān)的4項(xiàng)理論成果。
微小算力攻擊龐大區(qū)塊鏈——“Selfishmining(自私挖礦)”
比特幣采用了共識(shí)算法——“工作證明”,一般來(lái)說(shuō),只要惡性節(jié)點(diǎn)的算力達(dá)不到全體的50%,就無(wú)法控制區(qū)塊鏈。令人意外的是,即使算力低于50%,惡性節(jié)點(diǎn)也可以“蚍蜉撼樹(shù)”,控制區(qū)塊鏈的生成,這種方式就是“Selfish mining(自私挖礦)”。
按照正常方式挖礦,比特幣的產(chǎn)生頻率與節(jié)點(diǎn)的計(jì)算力量存在比例關(guān)系。然而利用Selfish mining策略,最終結(jié)果將遠(yuǎn)超擁有的計(jì)算資源。理論上來(lái)說(shuō),只要擁有整體41%的算力,控制區(qū)塊鏈產(chǎn)生的概率就高達(dá)50%以上。
Selfishmining的節(jié)點(diǎn)發(fā)現(xiàn)新的區(qū)塊后,并不馬上公開(kāi)廣播,而是隱藏區(qū)塊的存在。這樣在其他節(jié)點(diǎn)還在尋找原來(lái)區(qū)塊的時(shí)候,他們已經(jīng)可以挖掘下一塊了。如果運(yùn)氣好發(fā)現(xiàn)新區(qū)塊,這時(shí)再?gòu)V播前一個(gè)區(qū)塊的存在。
在其他人努力挖礦時(shí),Selfishmining節(jié)點(diǎn)則不斷找尋新區(qū)塊,這樣,他們擁有的鏈條也越來(lái)越長(zhǎng)(圖8-1)。

圖8-1Selfish mining
攻擊者采取這一戰(zhàn)略并且擁有整體33%以上的計(jì)算力量,實(shí)質(zhì)生成的區(qū)塊就遠(yuǎn)超這一數(shù)字,也就是說(shuō),持有41%資源的節(jié)點(diǎn)能以50%以上的概率生成區(qū)塊。
目前,我們還沒(méi)有應(yīng)對(duì)Selfishmining的良策。我們一定要認(rèn)識(shí)到,控制區(qū)塊鏈完全不需要擁有過(guò)半的算力,更低的數(shù)值完全可行。
“Fast payment(快速支付)”的比特幣雙重支付問(wèn)題和對(duì)策
比特幣的交易信息(transaction)被記錄在區(qū)塊中,比特幣的支付需要獲得比特幣網(wǎng)絡(luò)(區(qū)塊鏈)的批準(zhǔn)。根據(jù)系統(tǒng)要求,從發(fā)送交易記錄到獲得許可平均需要10分鐘。
此外,系統(tǒng)為了確認(rèn)區(qū)塊的正當(dāng)性,批準(zhǔn)交易后,交易者還需要至少等待5個(gè)區(qū)塊連接。正常情況下,從交易完成到確認(rèn)完畢要花費(fèi)大約1小時(shí)。
正常消費(fèi)時(shí),別說(shuō)1小時(shí),顧客可能連10分鐘也不愿意等待,所以在一般交易時(shí)系統(tǒng)多采用“Fast payment(快速支付)”的方式。店方確認(rèn)交易信息,驗(yàn)證數(shù)字簽名后,并不會(huì)確認(rèn)有無(wú)雙重支付,直接默認(rèn)支付已經(jīng)完成。
針對(duì)Fast payment的缺陷,我們一起來(lái)了解一下具體攻擊方式。
支付方在Fastpayment的店鋪使用比特幣(UTXO)付款(匯款),同時(shí)向另一賬戶(hù)(同伴的賬戶(hù)或自己的其他賬戶(hù))匯款同等金額,這樣店方確認(rèn)的交易信息就失效了。既獲得了物品或服務(wù),又沒(méi)有消耗比特幣,這就是“雙重支付攻擊”的一種表現(xiàn)。因?yàn)樵摲N攻擊正好利用了比特幣的交易傳輸協(xié)議漏洞,因此其成功率非常高。
攻擊成立需要兩個(gè)前提。一是攻擊者(支付方)可以直接向商店發(fā)送交易,二是由“輔助節(jié)點(diǎn)(helper node)”輔助攻擊。
假設(shè)攻擊者的交易信息為“Tv”,同時(shí)向輔助節(jié)點(diǎn)發(fā)送“Ta”交易請(qǐng)求。輔助節(jié)點(diǎn)排除店鋪周?chē)?jié)點(diǎn)群的范疇,直接向其他節(jié)點(diǎn)發(fā)送信息,“Ta”后來(lái)居上,更早擴(kuò)散。收到“Ta”信息的節(jié)點(diǎn)接收交易“Tv”后,將其視為不當(dāng)交易而取消,自然“Tv”也就不會(huì)被廣播。
相比交易“Tv”,后發(fā)起的“Ta”存儲(chǔ)在區(qū)塊中的概率更高,“Tv”交易無(wú)效(圖8-2)。

圖8-2 輔助節(jié)點(diǎn)的雙重支付供給
這種攻擊的可怕之處在于,其不僅使店家蒙受損失,對(duì)于其他節(jié)點(diǎn)來(lái)說(shuō),他們根本無(wú)法發(fā)現(xiàn)不當(dāng)行為。
現(xiàn)行的比特幣體系中,同時(shí)接收“Ta”“Tv”的節(jié)點(diǎn)數(shù)量十分有限。先接收“Ta”,則“Tv”失效;先接收“Tv”,則“Ta”失效,不會(huì)擴(kuò)散到其他節(jié)點(diǎn),所以大部分節(jié)點(diǎn)無(wú)法獲得雙重支付的證據(jù)。
不當(dāng)交易是證明賬戶(hù)非法的有力證據(jù),希望可以廣為告知,將其用于評(píng)價(jià)管理之中。“Bitcoin - XT(比特幣核心開(kāi)發(fā)者加文·安德烈森開(kāi)發(fā),用于提高區(qū)塊擴(kuò)展性)”就公開(kāi)雙重支付的信息,修正評(píng)價(jià)管理方法,對(duì)賬戶(hù)所有者進(jìn)行評(píng)論。
如果所有信息都以接力的方式上傳,網(wǎng)絡(luò)承擔(dān)大量信息,這就是“DoS(拒絕服務(wù))”攻擊,可能導(dǎo)致系統(tǒng)癱瘓。Bitcoin-XT限定單個(gè)UTXO只能交易兩次,就是為了規(guī)避這種風(fēng)險(xiǎn)。
因?yàn)榈V工意見(jiàn)不同,Bitcoin-XT還無(wú)法擴(kuò)大區(qū)塊,也沒(méi)有被納入比特幣體系之中。因此,F(xiàn)astpayment店鋪結(jié)算時(shí),店方不得不承擔(dān)這種雙重支付風(fēng)險(xiǎn)。
二.比特幣的DoS攻擊和對(duì)策
有報(bào)告稱(chēng),惡意使用了比特幣的交易和區(qū)塊協(xié)議,可以在特定節(jié)點(diǎn)延遲信息的傳播,繼而拖慢系統(tǒng)的信息傳遞,甚至可能導(dǎo)致系統(tǒng)停止,或者出現(xiàn)雙重支付等不當(dāng)行為。
比特幣傳遞交易和區(qū)塊信息時(shí),首先傳遞的并不是數(shù)據(jù)信息,而是名為“清單信息(Inventory Message)”的哈希值。節(jié)點(diǎn)收到信息,如果哈希值未知,則會(huì)向原節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)信息,繼而完成信息傳播(圖8-3)。如果有人惡意使用清單消息,很可能造成信息傳播的延遲。
攻擊方法存在于區(qū)塊和交易傳輸協(xié)議之間(圖8-4)。

圖8-3 節(jié)點(diǎn)間的信息傳遞

圖8-4 信息傳遞延遲的原理
攻擊節(jié)點(diǎn)向目標(biāo)節(jié)點(diǎn)發(fā)送消息,對(duì)于節(jié)點(diǎn)區(qū)塊頭、區(qū)塊數(shù)據(jù)的要求,攻擊節(jié)點(diǎn)只回復(fù)“ping”,在超時(shí)之前的20分鐘內(nèi),攻擊節(jié)點(diǎn)盡情占有目標(biāo)節(jié)點(diǎn)的功能,延遲區(qū)塊的傳播。比特幣連接的上限是126,而通常只使用20個(gè)左右,攻擊節(jié)點(diǎn)依此占據(jù)目標(biāo)節(jié)點(diǎn)的空閑資源,甚至連續(xù)搶奪資源。
攻擊節(jié)點(diǎn)利用交易節(jié)點(diǎn)的傳輸漏洞,發(fā)送清單消息后,同樣只回復(fù)“ping”,直到超時(shí)(兩分鐘)為止,從而大大延遲交易信息的傳輸。而且清單消息由隊(duì)列管理,只要占領(lǐng)隊(duì)列,超時(shí)之后,攻擊者還可以控制信息傳送,甚至可以拒絕傳遞任意時(shí)間點(diǎn)的交易信息。
如果與其他攻擊并用,該種攻擊的效果將成倍增強(qiáng),這也是延遲傳遞的可怕之處。
如果與自私挖礦并用,攻擊者就可以用極少的算力控制整個(gè)區(qū)塊鏈。有觀點(diǎn)認(rèn)為,只要擁有不少于34%的資源,就可以控制50%以上的區(qū)塊,進(jìn)而支配區(qū)塊鏈。
另外,這種傳遞可以無(wú)限期滯后,攻擊者還可能發(fā)起雙重支付攻擊。如果攻擊者攻擊所有節(jié)點(diǎn),比特幣的服務(wù)將陷入全面癱瘓。而攻擊所需的計(jì)算機(jī)能力并不嚴(yán)苛,只要每20分鐘能發(fā)送600千字節(jié)即可。
針對(duì)以上問(wèn)題,比特幣開(kāi)發(fā)者也在考慮對(duì)策,以應(yīng)對(duì)攻擊,比如放棄清單信息,改向區(qū)塊頭發(fā)送信息,改變既有協(xié)議;用IP地址過(guò)濾信息發(fā)送者;通過(guò)隨機(jī)選擇的方法管理發(fā)送方……前項(xiàng)對(duì)策(BIP 130)已經(jīng)寫(xiě)入Bitcoin 0.12.0版本。
區(qū)塊鏈安全性評(píng)價(jià)成果備受期待
對(duì)很多加密協(xié)議來(lái)說(shuō),雖然協(xié)議安全理論上有保證,但受安裝和運(yùn)行環(huán)境的影響,還是有可能陷入危險(xiǎn)。相比之下,比特幣屬于前一階段,其滿(mǎn)足何種條件才算是安全的,具體的標(biāo)準(zhǔn)還在研究當(dāng)中。下面我們就從工作量證明(Proof of work:POW)的區(qū)塊鏈入手,介紹解析協(xié)議的研究成果。
嚴(yán)格來(lái)講,論文中提及的哈希鏈與比特幣哈希鏈的構(gòu)成方法并不相同,評(píng)價(jià)區(qū)塊鏈時(shí),可以從“Common Prefix(共有前綴) property”和“Chain Quality(鏈質(zhì)量) property”兩方面入手,分析“POW的成功概率”,意義深遠(yuǎn)。
POW 型的區(qū)塊鏈中,假設(shè)遵守協(xié)議的誠(chéng)實(shí)(honest) 礦工成功概率為α,不遵守協(xié)議的礦工成功概率為β,人們已經(jīng)清楚α和β的數(shù)值各為多少。論文認(rèn)為,人們可以具體評(píng)估在滿(mǎn)足某種條件后區(qū)塊鏈不進(jìn)行分叉的概率(Common Prefix property)和誠(chéng)實(shí)礦工所生成區(qū)塊進(jìn)入?yún)^(qū)塊鏈的概率(Chain Quality property)。也就是說(shuō),不遵守協(xié)議者成功生成區(qū)塊這類(lèi)情況對(duì)區(qū)塊鏈所產(chǎn)生的影響程度可以量化。
有趣的是,自私挖礦的情況下,不遵守協(xié)議礦工的成功概率β可能高于1/3,而ChainQuality property也處于較低水平。這個(gè)結(jié)果看起來(lái)理所當(dāng)然,其實(shí)這是數(shù)理模型證明的巨大突破。
我們?cè)诜治隽嗽?、理清了資源后,仔細(xì)分析實(shí)際使用的比特幣就會(huì)發(fā)現(xiàn),其通信和數(shù)據(jù)管理的細(xì)微之處存在巨大的安全隱患。筆者希望今后有更多的研究著眼于區(qū)塊鏈的脆弱性和安全性,構(gòu)筑更為嚴(yán)密的協(xié)議體系。