江沛佩,王騫,陳艷姣,李琦,沈超
(1.空天信息安全與可信計(jì)算教育部重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430072;2.武漢大學(xué)國(guó)家網(wǎng)絡(luò)安全學(xué)院,湖北 武漢 430072;3.武漢大學(xué)計(jì)算機(jī)學(xué)院,湖北 武漢 430072;4.清華大學(xué)網(wǎng)絡(luò)科學(xué)與網(wǎng)絡(luò)空間研究院,北京 100084;5.北京信息科學(xué)與技術(shù)國(guó)家研究中心,北京 100084;6.西安交通大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,陜西 西安 710049)
自2009 年面世以來(lái),比特幣[1-2]作為首個(gè)完全去中心化的加密貨幣在學(xué)業(yè)界和工業(yè)界越來(lái)越受到關(guān)注。比特幣交易的底層數(shù)據(jù)結(jié)構(gòu)是區(qū)塊鏈,大量參與者在區(qū)塊鏈上創(chuàng)建交易記錄,不需要任何可信第三方參與。區(qū)塊鏈作為以比特幣為代表的數(shù)字加密貨幣體系的核心支撐技術(shù),逐漸成為一種日益普及、全新的去中心化基礎(chǔ)架構(gòu)與分布式計(jì)算范式,并引領(lǐng)了人類信用進(jìn)化史的新一代革新。從技術(shù)層面講,區(qū)塊鏈技術(shù)實(shí)現(xiàn)了交易的去中心化和一定的匿名性,非實(shí)名和交易安全是區(qū)塊鏈技術(shù)最大的優(yōu)勢(shì)。除了虛擬貨幣以外,區(qū)塊鏈還在食品、醫(yī)療、汽車、運(yùn)輸業(yè)等領(lǐng)域提供數(shù)據(jù)溯源、公平交易等技術(shù)支持[3],例如,文獻(xiàn)[4]利用區(qū)塊鏈技術(shù)實(shí)現(xiàn)了對(duì)物流系統(tǒng)中交易的監(jiān)管,其監(jiān)管架構(gòu)和我國(guó)管理體系吻合,是報(bào)道可見的第一個(gè)落地的可監(jiān)管區(qū)塊鏈系統(tǒng)。目前,區(qū)塊鏈的廣泛運(yùn)用引起了相關(guān)政府部門、金融行業(yè)機(jī)構(gòu)、科技企業(yè)和資本市場(chǎng)的高度關(guān)注。
然而,隨著區(qū)塊鏈的快速發(fā)展與普及,其潛在的安全漏洞也逐漸暴露出來(lái)。2020 年7 月底,西班牙加密貨幣交易平臺(tái)2gether 遭攻擊,損失約140 萬(wàn)美元[5]。最近,在以太經(jīng)典(ETC,Ethereum classic)平臺(tái)上爆發(fā)的一起51%攻擊導(dǎo)致大約價(jià)值560 萬(wàn)美元的加密貨幣被雙倍消費(fèi)[6]。由此可見,區(qū)塊鏈技術(shù)的漏洞可能導(dǎo)致無(wú)法挽回的財(cái)產(chǎn)損失和隱私泄露。目前,國(guó)內(nèi)研究者針對(duì)區(qū)塊鏈安全問題進(jìn)行了系統(tǒng)的綜述[7-10],但這些工作與本文的側(cè)重點(diǎn)和覆蓋面有所差別。例如,文獻(xiàn)[7]側(cè)重于宏觀層面的區(qū)塊鏈技術(shù)發(fā)展;文獻(xiàn)[9-10]側(cè)重于介紹區(qū)塊鏈威脅和漏洞相關(guān)研究,沒有詳細(xì)調(diào)研針對(duì)區(qū)塊鏈威脅的具體防御措施。本文除了調(diào)研關(guān)于區(qū)塊鏈安全漏洞的最新進(jìn)展外,還詳細(xì)介紹了目前最先進(jìn)的防御方法,系統(tǒng)地調(diào)研了區(qū)塊鏈系統(tǒng)的安全性問題。作為一個(gè)集成框架,區(qū)塊鏈系統(tǒng)可分為4 層:數(shù)據(jù)結(jié)構(gòu)層、網(wǎng)絡(luò)層、共識(shí)層和應(yīng)用層。本文從區(qū)塊鏈系統(tǒng)結(jié)構(gòu)角度出發(fā),深入分析數(shù)據(jù)結(jié)構(gòu)層、網(wǎng)絡(luò)層、共識(shí)層和應(yīng)用層的安全漏洞、攻擊原理以及對(duì)應(yīng)的防御措施。
在數(shù)據(jù)結(jié)構(gòu)層,最主要的安全威脅源于區(qū)塊狀態(tài)的不一致性和底層密碼協(xié)議的脆弱性。區(qū)塊鏈的底層數(shù)據(jù)結(jié)構(gòu)由區(qū)塊組成,區(qū)塊之間通過哈希指針鏈接。由于可信中心節(jié)點(diǎn)的缺失,區(qū)塊鏈節(jié)點(diǎn)之間可能會(huì)存在狀態(tài)的不一致性,這為分叉攻擊的實(shí)施帶來(lái)了可能性。同時(shí),區(qū)塊鏈網(wǎng)絡(luò)還存在吞吐量有限、效率低的問題,這削弱了現(xiàn)有區(qū)塊鏈平臺(tái)的適用性。因此,研究者致力于研究設(shè)計(jì)可擴(kuò)展區(qū)塊鏈系統(tǒng),遺憾的是,可擴(kuò)展區(qū)塊鏈的設(shè)計(jì)加重了區(qū)塊鏈的不一致性。針對(duì)這一問題,研究者提出了一系列同時(shí)保證區(qū)塊鏈一致性和可擴(kuò)展性的協(xié)議[11-14]。另外,區(qū)塊鏈的安全性由底層密碼協(xié)議保證,密碼協(xié)議的漏洞若被攻擊者利用[15-16],會(huì)對(duì)區(qū)塊鏈中數(shù)據(jù)的真實(shí)性、私密性造成危害,甚至可能造成嚴(yán)重的財(cái)產(chǎn)損失。
在網(wǎng)絡(luò)層,攻擊的主要目的是破壞區(qū)塊傳播所需的網(wǎng)絡(luò)基礎(chǔ)設(shè)施,其中路由攻擊[17]是最常見的攻擊之一。它會(huì)導(dǎo)致挖礦計(jì)算資源浪費(fèi),甚至為雙重支付攻擊提供便利。
在共識(shí)層,人們需要著重關(guān)注礦池的安全問題。隨著區(qū)塊鏈全網(wǎng)計(jì)算能力的不斷增強(qiáng),采礦難度不斷升級(jí),獨(dú)立礦工的收益越來(lái)越難以保障。為了實(shí)現(xiàn)穩(wěn)定的收入流,礦工們聯(lián)合挖礦,組成礦池。然而,礦池的出現(xiàn)引入了再中心化的威脅,一定程度上破壞了區(qū)塊鏈系統(tǒng)的安全支柱,這有利于實(shí)施51%攻擊和雙重支付攻擊[18-19]。同時(shí),礦池技術(shù)的發(fā)展也引起了激烈的競(jìng)爭(zhēng)和攻擊,如自私挖礦[20]、塊克制(BWH,block withholding)攻擊[21]、塊克制后分叉(FAW,fork after withholding)攻擊[22]等,這些攻擊將會(huì)導(dǎo)致挖礦資源浪費(fèi)。
在應(yīng)用層,隨著加密貨幣的不斷發(fā)展和廣泛應(yīng)用,市場(chǎng)對(duì)更透明、更智能、更高效的交易需求逐漸增強(qiáng),這催生了鏈下支付通道和智能合約的出現(xiàn)。智能合約被視為區(qū)塊鏈2.0 的標(biāo)志[23],然而,智能合約的漏洞可能引發(fā)安全問題和隱私泄露問題,如交易跟蹤、支付中止和蟲洞攻擊等[24-26]。隨著智能合約的日益普及,其安全性已經(jīng)引起了廣泛關(guān)注[27-30]。另一方面,匿名貨幣系統(tǒng)的出現(xiàn)進(jìn)一步加強(qiáng)了加密貨幣的匿名性,但現(xiàn)有的匿名貨幣系統(tǒng)仍存在隱私泄露問題[31-33]。
區(qū)塊鏈系統(tǒng)是多種技術(shù)和機(jī)制的巧妙結(jié)合,可分為數(shù)據(jù)結(jié)構(gòu)層、網(wǎng)絡(luò)層、共識(shí)層和應(yīng)用層4 層,如圖1 所示?;趨^(qū)塊鏈特殊的數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)結(jié)構(gòu)和共識(shí)協(xié)議,區(qū)塊鏈具有分散化、不可篡改性、可追溯性和透明性等特性。本節(jié)將從區(qū)塊鏈層次結(jié)構(gòu)的角度來(lái)概述區(qū)塊鏈采用的工作機(jī)制,從而幫助讀者深入理解各個(gè)層次的安全威脅和防御。
圖1 區(qū)塊鏈系統(tǒng)架構(gòu)
區(qū)塊鏈底層的數(shù)據(jù)結(jié)構(gòu)是區(qū)塊,區(qū)塊之間通過哈希指針鏈接并形成區(qū)塊鏈網(wǎng)絡(luò)。區(qū)塊由區(qū)塊頭和區(qū)塊體構(gòu)成。區(qū)塊頭中包含關(guān)于該區(qū)塊的主要信息,如上一個(gè)塊的哈希值、默克爾樹根和塊時(shí)間戳等。根據(jù)區(qū)塊頭中的哈希值,可以定位到上一個(gè)區(qū)塊的地址。區(qū)塊體包含了實(shí)際數(shù)據(jù),如交易信息等,區(qū)塊體的內(nèi)容由區(qū)塊所有者通過私鑰進(jìn)行簽名。由于哈希函數(shù)具有單向性和抗碰撞性,并且數(shù)字簽名具有不可偽造性,區(qū)塊鏈的區(qū)塊內(nèi)容是不可變且防篡改的。區(qū)塊鏈中另一個(gè)基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)是默爾克樹。默克爾樹是一個(gè)由哈希值組成的二叉樹,它的每一個(gè)節(jié)點(diǎn)都是由子節(jié)點(diǎn)經(jīng)過哈希函數(shù)得到的。在區(qū)塊鏈系統(tǒng)中,默爾克樹被用來(lái)驗(yàn)證交易的完整性,自下而上逐層計(jì)算默爾克樹的哈希值即可快速驗(yàn)證交易。
區(qū)塊鏈系統(tǒng)網(wǎng)絡(luò)層通信的基礎(chǔ)結(jié)構(gòu)是基于TCP 連接的非結(jié)構(gòu)化對(duì)等(P2P,peer-to-peer)網(wǎng)絡(luò)。非結(jié)構(gòu)化網(wǎng)絡(luò)易于構(gòu)造,并且對(duì)高度動(dòng)態(tài)的網(wǎng)絡(luò)拓?fù)洌ɡ纾瑢?duì)等者的頻繁進(jìn)出等)具有很強(qiáng)的穩(wěn)健性。由于區(qū)塊鏈網(wǎng)絡(luò)的目標(biāo)是盡可能快地分發(fā)信息,以達(dá)成對(duì)區(qū)塊鏈的共識(shí),因此在挖礦過程中,新發(fā)現(xiàn)的區(qū)塊會(huì)在整個(gè)網(wǎng)絡(luò)中通過泛洪傳播。
1) 挖礦過程
在共識(shí)層中,分布式的參與者對(duì)區(qū)塊鏈狀態(tài)達(dá)成一致的過程被叫作挖礦。具體來(lái)說,為了在區(qū)塊鏈網(wǎng)絡(luò)中達(dá)成一致意見,礦工需要運(yùn)行一個(gè)具有容錯(cuò)性質(zhì)的共識(shí)協(xié)議,以確保他們都同意附加到區(qū)塊鏈條目的順序。如果要向區(qū)塊鏈添加新區(qū)塊,每個(gè)礦工都必須遵循共識(shí)協(xié)議中指定的一組規(guī)則。區(qū)塊鏈通過使用工作量證明(PoW,proof of work)機(jī)制來(lái)實(shí)現(xiàn)分布式共識(shí),該機(jī)制要求參與者通過破解密碼謎題來(lái)證明自己的計(jì)算能力。成功計(jì)算出解決方案的參與者將生成一個(gè)區(qū)塊,并獲得鑄造該比特幣的獎(jiǎng)勵(lì)。
在加密貨幣平臺(tái)中,貨幣的交換以交易鏈的形式表示。交易鏈的完整性、真實(shí)性和正確性均由分布式礦工驗(yàn)證,他們是去中心化系統(tǒng)的安全支柱。具體來(lái)說,挖礦的主要過程如下。
①礦工將大量待驗(yàn)證的事務(wù)捆綁在一個(gè)稱為塊的單元中,并在給定塊的情況下執(zhí)行PoW算法。
② 礦工在解開了這個(gè)難題后,立即在整個(gè)網(wǎng)絡(luò)上發(fā)布關(guān)于該區(qū)塊的廣播,以獲得采礦獎(jiǎng)勵(lì)。
③在成功添加到分布式公共賬本(即區(qū)塊鏈)之前,該塊將被網(wǎng)絡(luò)中大多數(shù)的礦工驗(yàn)證。
④ 當(dāng)挖掘到的區(qū)塊成功添加到區(qū)塊鏈中時(shí),挖掘該塊的礦工將獲得一個(gè)區(qū)塊的獎(jiǎng)勵(lì)。
2) 礦池
解開謎題的礦工將獲得豐厚的回報(bào),這吸引了大量的礦工參與,顯著提高了比特幣網(wǎng)絡(luò)的整體計(jì)算能力。密碼謎題的難度會(huì)隨時(shí)間變化,系統(tǒng)會(huì)根據(jù)實(shí)際情況將挖掘一個(gè)區(qū)塊的平均時(shí)間調(diào)整到幾乎不變(大約10 min)。由于生成塊的概率與計(jì)算能力成正比,單個(gè)礦工在有限的計(jì)算能力下獲得獎(jiǎng)勵(lì)的概率非常低。針對(duì)這一局限性,礦工們形成礦池,將群眾的力量聚集在一起。在礦池中,礦工們可以解決更簡(jiǎn)單的密碼謎題,并將解決方案(也叫作份額)提交給礦池管理員。然后,礦池管理員將檢查該份額是一個(gè)部分工作證明(PPoW,partial proof of work)還是一個(gè)完整工作證明(FPoW,full proof of work)。注意到,PPoW 對(duì)應(yīng)簡(jiǎn)單的密碼謎題,F(xiàn)PoW 對(duì)應(yīng)原始的密碼謎題。接著,管理員分發(fā)正比于預(yù)估計(jì)算能力的獎(jiǎng)勵(lì)給礦工。最終,每個(gè)礦工就可以穩(wěn)定地獲得與預(yù)期相符的報(bào)酬。
1) 鏈下支付通道
目前,比特幣網(wǎng)絡(luò)的最大吞吐量為每秒7 筆交易(TPS,transaction per second),這意味著用戶可能需要等待數(shù)十分鐘甚至更長(zhǎng)的時(shí)間才能確認(rèn)交易。顯然,這遠(yuǎn)遠(yuǎn)不能滿足實(shí)際需求。針對(duì)這一問題,研究者探究了一系列提高區(qū)塊鏈系統(tǒng)可擴(kuò)展性的方案。提高吞吐量的方法之一是構(gòu)建鏈下交易機(jī)制[34],在用戶之間建立支付通道,以處理頻繁的微交易。鏈下支付通道的工作流程如圖2 所示。在鏈下支付通道中,只有在打開和關(guān)閉通道時(shí)才會(huì)訪問區(qū)塊鏈。提交開啟交易后,用戶將資金存入相互認(rèn)可的地址中,并在關(guān)閉通道時(shí)以最接近的余額返還資金。此外,支付通道網(wǎng)絡(luò)(PCN,payment channel network)[35]使沒有直聯(lián)通道的用戶能通過網(wǎng)絡(luò)中的一個(gè)路徑彼此連接。
圖2 鏈下支付通道的基本執(zhí)行流程
2) 匿名貨幣
雖然傳統(tǒng)加密貨幣能在一定程度上提供交易匿名性,但實(shí)際上比特幣網(wǎng)絡(luò)中的假名地址是偽匿名的。攻擊者可以從公開賬本中挖掘出許多關(guān)于交易的敏感信息,比如交易用戶真實(shí)身份等。針對(duì)這一問題,研究者提出了全新的分布式匿名交易加密貨幣,如Dash[36]、Zcash[37]、Monero[38]等。這些匿名貨幣利用zk-SNARKs[39]和環(huán)簽名[40]等密碼學(xué)工具來(lái)保護(hù)交易的不可追溯性。
3) 智能合約
在應(yīng)用層,最具影響力的技術(shù)之一是智能合約[23],它是在以太坊區(qū)塊鏈中一段特定地址上的程序。以太坊區(qū)塊鏈?zhǔn)悄壳白钍軞g迎的支持智能合約的去中心化平臺(tái)。智能合約由合約中可執(zhí)行單元的函數(shù)和智能合約狀態(tài)數(shù)據(jù)組成。在智能合約中,程序代碼記錄多方之間的邏輯合約條款,并預(yù)定義觸發(fā)條件和響應(yīng)動(dòng)作。智能合約中函數(shù)是由時(shí)間或事件(例如添加到區(qū)塊鏈中的事務(wù))觸發(fā)的,并由達(dá)成共識(shí)的礦工存儲(chǔ)和執(zhí)行,執(zhí)行的正確性由區(qū)塊鏈的共識(shí)協(xié)議保證。此外,智能合約還可以接收、存儲(chǔ)和發(fā)送自己的值。理想情況下,可以認(rèn)為智能合約是由一個(gè)可信的全局機(jī)器執(zhí)行的,它將誠(chéng)實(shí)地執(zhí)行每條指令。在智能合約的輔助下,金融交易規(guī)則可以在沒有可靠第三方的情況下執(zhí)行。
去中心化是區(qū)塊鏈系統(tǒng)最吸引人的特性之一,但這一特性也帶來(lái)了潛在威脅。在區(qū)塊鏈自由市場(chǎng)中,惡意參與者可能會(huì)利用區(qū)塊鏈系統(tǒng)的潛在威脅來(lái)獲取非法利益。本節(jié)將從數(shù)據(jù)結(jié)構(gòu)層、網(wǎng)絡(luò)層、共識(shí)層、應(yīng)用層討論針對(duì)區(qū)塊鏈的安全威脅,并在表1 中進(jìn)行了總結(jié)。
區(qū)塊鏈的基本組成部分為區(qū)塊。在交易過程中,不斷有新的區(qū)塊鏈接到區(qū)塊鏈中,而鏈接過程存在區(qū)塊鏈狀態(tài)不一致和分叉的威脅。另外,區(qū)塊鏈底層高度依賴密碼算法,攻擊者可以利用密碼系統(tǒng)的漏洞造成用戶私鑰泄露,從而引發(fā)財(cái)產(chǎn)損失等安全問題。
1) 區(qū)塊鏈狀態(tài)不一致性
由于區(qū)塊鏈系統(tǒng)中缺乏可信中心節(jié)點(diǎn),交易信息由多個(gè)節(jié)點(diǎn)共同維護(hù),而這種自由的交易增加了區(qū)塊鏈狀態(tài)的不確定性。具體來(lái)說,區(qū)塊鏈的安全性建立在絕大多數(shù)礦工或計(jì)算能力是可信的并且工作在最長(zhǎng)的鏈上這一假設(shè)。但實(shí)際上,區(qū)塊鏈系統(tǒng)的一致性是具有不確定性和概率性的,它需要通過長(zhǎng)時(shí)間的時(shí)延來(lái)確認(rèn)交易,以避免攻擊者篡改和利用。不一致的一個(gè)主要后果是分叉。如果某個(gè)惡意的礦工能成功分叉出一條合法的鏈,其他所有礦工將切換到這條新的最長(zhǎng)鏈上[21]。這樣一來(lái),所有只發(fā)生在舊鏈上的交易都將被取消,從而導(dǎo)致重復(fù)消費(fèi)(即雙花攻擊[41-42])和交易反轉(zhuǎn)等一系列問題,造成財(cái)產(chǎn)損失。
2) 用戶私鑰泄露
在比特幣交易系統(tǒng)中,交易過程是將資產(chǎn)的所有權(quán)從發(fā)送方地址轉(zhuǎn)移到接收方的公共地址,該交易內(nèi)容由簽名者使用私鑰簽名。通常,用戶通過比特幣錢包存儲(chǔ)私鑰,比特幣錢包是一種樹狀層次化確定性結(jié)構(gòu),其私鑰和地址由一個(gè)主種子生成。在比特幣錢包標(biāo)準(zhǔn)BIP32 架構(gòu)中[43],給定主公鑰和子私鑰,攻擊者可以非常容易地恢復(fù)出主私鑰。Courtois等[15]通過分析比特幣錢包密鑰管理方案中的隨機(jī)數(shù)和隨機(jī)事件里的關(guān)聯(lián)性,提出了一種私鑰恢復(fù)組合攻擊。這種攻擊能夠破壞存儲(chǔ)在系統(tǒng)中的密鑰安全性,更嚴(yán)重的是,父節(jié)點(diǎn)私鑰泄露將直接導(dǎo)致子節(jié)點(diǎn)私鑰泄露,這也被叫作特權(quán)升級(jí)攻擊。另一方面,區(qū)塊鏈底層所使用的橢圓曲線數(shù)字簽名算法(ECDSA,elliptic curve digital signature algorithm)中隨機(jī)數(shù)的重用也可能被攻擊者分析、利用,從而使用戶私鑰暴露[16,44-45]。如果攻擊者獲取了受害用戶的私鑰,他/她就能偽造該用戶的簽名并完成任意交易,比如將受害用戶的資產(chǎn)轉(zhuǎn)移到非法賬戶上。
表1 區(qū)塊鏈安全威脅和防御方法
在網(wǎng)絡(luò)層,區(qū)塊鏈網(wǎng)絡(luò)的基礎(chǔ)網(wǎng)絡(luò)基礎(chǔ)設(shè)施漏洞和自身P2P 網(wǎng)絡(luò)結(jié)構(gòu)是引發(fā)安全問題的主要原因。
路由攻擊[17]是一種被廣泛研究的網(wǎng)絡(luò)攻擊,在路由攻擊中,自主系統(tǒng)通過劫持邊界網(wǎng)關(guān)協(xié)議(BGP,border gateway protocol)[46]來(lái)攔截和操縱比特幣流量。Apostolaki 等[17]指出,網(wǎng)絡(luò)基礎(chǔ)設(shè)施具有2 個(gè)有利于路由攻擊的特點(diǎn):第一,少數(shù)幾個(gè)自主系統(tǒng)承載大部分比特幣節(jié)點(diǎn);第二,路由可以攔截到大量比特幣節(jié)點(diǎn)的連接?;谶@2 個(gè)特點(diǎn),可以進(jìn)行分割攻擊和時(shí)延攻擊。在分割攻擊中,AS 層攻擊者通過劫持邊界網(wǎng)關(guān)協(xié)議,從區(qū)塊鏈網(wǎng)絡(luò)中隔離一組節(jié)點(diǎn)P,這些節(jié)點(diǎn)P在總挖掘能力中占有相當(dāng)大的比例。通過利用集中的比特幣礦池,攻擊者只需劫持39個(gè)前綴就可以隔離占總挖掘能力近50%的節(jié)點(diǎn)。分割攻擊要求攻擊者完全控制受害者的流量,而時(shí)延攻擊則只需時(shí)延區(qū)塊向單個(gè)節(jié)點(diǎn)的傳播,甚至可能只攔截一個(gè)連接。由于區(qū)塊鏈流量是未加密的,且節(jié)點(diǎn)在向一個(gè)節(jié)點(diǎn)請(qǐng)求阻塞后20 min 內(nèi)不會(huì)再向另一個(gè)節(jié)點(diǎn)請(qǐng)求阻塞,攻擊者可以通過攔截區(qū)塊鏈流量來(lái)延遲或阻塞在某些連接上的傳播。
通過路由攻擊,攻擊者可以隔離網(wǎng)絡(luò)的一部分節(jié)點(diǎn)或時(shí)延區(qū)塊傳播,這會(huì)造成巨大的挖礦能力浪費(fèi)和收入損失,并使網(wǎng)絡(luò)暴露于各種各樣的漏洞中,如雙花攻擊[41-42]等。
區(qū)塊鏈的實(shí)現(xiàn)很大程度上得益于共識(shí)層的設(shè)計(jì)。在這一層中,區(qū)塊鏈在一個(gè)分布式去中心化的賬本上運(yùn)行,鏈中的所有節(jié)點(diǎn)通過共識(shí)機(jī)制保持統(tǒng)一運(yùn)行狀態(tài)。目前,共識(shí)層中的大多數(shù)安全威脅都是隨著礦池的出現(xiàn)而產(chǎn)生的。
1) 再集中
隨著開采難度的增加,為了保證個(gè)體礦工的穩(wěn)定收入,越來(lái)越多的大型比特幣礦池隨之形成。然而,這違反了區(qū)塊鏈去中心化的原則。如果網(wǎng)絡(luò)中超過一半的計(jì)算能力由單一的礦池運(yùn)營(yíng)商控制,區(qū)塊鏈將會(huì)面臨51%攻擊的威脅。51%攻擊指的是攻擊者控制著比特幣網(wǎng)絡(luò)中超過51%的采礦能力。顯然,將算力集中到一個(gè)礦池中有利于實(shí)現(xiàn)51%攻擊。礦池運(yùn)營(yíng)者可以利用池中大量參與者的強(qiáng)大計(jì)算能力發(fā)起大規(guī)模攻擊,如雙花攻擊[41-42]、網(wǎng)絡(luò)分割[17]和拒絕服務(wù)(DoS,denial-of-service)攻擊[47-48]等。此外,由于礦池運(yùn)營(yíng)商肩負(fù)著分配資源和評(píng)估礦池參與者工作量的工作,惡意的礦池運(yùn)營(yíng)商可能會(huì)有不當(dāng)行為,例如非法審查區(qū)塊中的交易等。除了惡意運(yùn)營(yíng)商外,礦池中也可能存在惡意礦工,他們可能偽造多個(gè)節(jié)點(diǎn),從而發(fā)起女巫攻擊[49],女巫攻擊同樣有利于51%攻擊和分叉攻擊的實(shí)現(xiàn)。
2) 礦池間的惡性競(jìng)爭(zhēng)
礦池之間競(jìng)爭(zhēng)激烈,礦工可能會(huì)為了在競(jìng)爭(zhēng)中獲得優(yōu)勢(shì)而采取各種攻擊手段。一個(gè)典型的單人挖礦攻擊是自私挖礦[20]。自私的礦工通過選擇性地傳播被挖掘的塊來(lái)使其他誠(chéng)實(shí)礦工的塊失效,從而蓄意生成分叉。礦池中另一個(gè)常見的攻擊是BWH 攻擊[21]。在BWH 中,來(lái)自攻擊礦池的礦工潛入受害礦池中,在挖礦過程中,攻擊者只發(fā)送部分工作證明,不發(fā)送完整工作證明,最終攻擊者可以通過分?jǐn)偲渌V工發(fā)現(xiàn)的完整工作證明從受害池中獲取不該屬于他/她的報(bào)酬。顯然,這種攻擊方法“損人不利己”,獲得的效益很少,甚至可能低于攻擊者本該得到的報(bào)酬。Kwon 等[22]將BWH 與自私挖礦相結(jié)合,提出了一種新型攻擊,名為FAW 攻擊,進(jìn)一步提高了攻擊的效益。與BWH 中立即丟棄完整工作證明不同的是,在FAW 攻擊中,攻擊者將保留完整工作證明塊。如果一個(gè)礦工在攻擊礦池和受害礦池之外生成了有效塊,攻擊者將把這個(gè)塊提交給受害礦池的礦池運(yùn)營(yíng)商,當(dāng)?shù)V池運(yùn)營(yíng)商傳播這個(gè)塊時(shí),會(huì)導(dǎo)致蓄意分叉。如果大多數(shù)礦工選擇了攻擊者區(qū)塊的分支,那么受害礦池和攻擊者均將獲得獎(jiǎng)勵(lì)。由于FAW 攻擊的收益對(duì)計(jì)算能力和網(wǎng)絡(luò)容量要求不高,因此它比自私挖礦更實(shí)用。當(dāng)2 個(gè)礦池均采用FAW 時(shí),規(guī)模更大的礦池總是受益,小池總是損失,這也打破了BWH 中雙輸?shù)牡V工困境。不過,F(xiàn)AW 和BWH 在考慮到算力調(diào)整策略的情況下無(wú)法達(dá)到最優(yōu)收益,Gao 等[50]提出了算力調(diào)整克制(PAW,power adjusting withholding)攻擊,能達(dá)到更高的收益。
在應(yīng)用層,近期研究主要集中在提高性能和拓寬區(qū)塊鏈系統(tǒng)的應(yīng)用潛力上[34,51],下面,討論與之密切相關(guān)的安全問題。
1) 支付通道的隱私和安全問題
鏈下支付通道為比特幣的交易帶來(lái)了便捷性,然而,鏈下支付過程存在著各種潛在的隱私泄露風(fēng)險(xiǎn)。首先,同一通道中的交易是可鏈接的,這使交易跟蹤成為可能。其次,在PCN 中,當(dāng)2 個(gè)沒有直聯(lián)通道的用戶利用中介用戶幫助完成交易時(shí),很難對(duì)中介用戶保密2 個(gè)用戶的身份和交易金額,因?yàn)橹Ц堵窂降奈ㄒ粯?biāo)識(shí)符隱含了用戶和交易信息。更嚴(yán)重的是,當(dāng)多個(gè)事務(wù)共享一個(gè)容量有限的通道時(shí),所有的支付都將被終止,并導(dǎo)致PCN 的死鎖[25]。同時(shí),蟲洞攻擊[26]使攻擊者能通過隔離中間用戶并與惡意礦工合謀來(lái)竊取合法礦工的交易費(fèi)用。因此,為了確保鏈下支付通道的安全使用,支付通道的隱私和安全問題是值得關(guān)注和研究的。
2) 匿名貨幣交易隱私泄露
匿名貨幣在一定程度上保護(hù)了交易的私密性,然而,最近的一些研究發(fā)現(xiàn)目前的解決方案并不完善,仍存在隱私泄露問題。Kappos 等[31]系統(tǒng)地分析了Zcash 中交易的匿名性,通過研究Zcash 的透明交易和隱蔽礦池交互,Kappos 等發(fā)現(xiàn)利用簡(jiǎn)單的試探法就可以將隱蔽池中69%的值和交易聯(lián)系起來(lái)。Biryukov 等[32]則提出了幾種“指紋”識(shí)別用戶交易的攻擊。由于比特幣交易中的數(shù)額可以細(xì)分到非常高的精度,交易數(shù)額可以被攻擊者用作該交易的指紋,從而追溯交易的內(nèi)在聯(lián)系。同時(shí),通過觀察隱蔽交易輸入和輸出的數(shù)量(該信息在Zcash Sapling版本中是公開的,目前版本已經(jīng)修復(fù)),攻擊者可以向目標(biāo)地址發(fā)送大量的小額比特幣,并跟蹤涉及該地址的后續(xù)交易。最近,一種遠(yuǎn)程側(cè)信道攻擊[33]分析了匿名交易的證明周期,最終利用零知識(shí)證明所需時(shí)間的不同、ping 的回應(yīng)時(shí)間等側(cè)信道信息來(lái)推斷交易發(fā)出者和接受者的身份。以上列舉的幾種攻擊方法說明現(xiàn)有匿名加密貨幣系統(tǒng)無(wú)法達(dá)到完全的匿名性,因此,完善匿名貨幣架構(gòu)、提高設(shè)計(jì)的安全性是至關(guān)重要的。
3) 智能合約漏洞
在應(yīng)用層,智能合約也成為安全漏洞的滋生地,經(jīng)過研究者的大量研究,智能合約的安全漏洞已充分暴露[52]。造成巨大損失的安全漏洞之一是時(shí)間限制。時(shí)間限制確定了當(dāng)前狀態(tài)下允許的操作,一般來(lái)說,時(shí)間限制是由所有礦工一致同意的塊的時(shí)間戳決定。在區(qū)塊中使用相同的時(shí)間戳能確保智能合約在礦工中執(zhí)行結(jié)果的一致性。然而,由于時(shí)間戳的選擇存在一定的不確定性,擁有合約中一定份額的攻擊者可以通過選擇有利于自己利潤(rùn)的時(shí)間戳在挖礦中取得優(yōu)勢(shì)。
另一個(gè)更嚴(yán)重的安全漏洞是重入問題[53]。理論上,當(dāng)調(diào)用智能合約的非遞歸部分時(shí),不應(yīng)該在終止之前重新進(jìn)入它,從而保證事務(wù)的原子性和順序性。然而,某些指令下的回退機(jī)制(例如CALL 和CALLCODE 指令)允許攻擊者重新進(jìn)入調(diào)用函數(shù)。這會(huì)導(dǎo)致意外的行為和調(diào)用循環(huán)。此外,諸如DELEGATECALL、SELFDESTRUCT、CALL 和SSTORE 等指令,如果在智能合約中被濫用,可能會(huì)造成財(cái)產(chǎn)損失。然而,在智能合約的預(yù)期行為和實(shí)際行為之間很難發(fā)現(xiàn)指令的濫用和不匹配。更嚴(yán)重的是,區(qū)塊鏈的不變性意味著在部署后智能合約的缺陷得到修復(fù)的可能性微乎其微。
本節(jié)將探討針對(duì)區(qū)塊鏈系統(tǒng)潛在安全問題的對(duì)策,以防御第3 節(jié)中所闡述的攻擊。
1) 高效保持一致性
如3.1 節(jié)所述,區(qū)塊的不一致性會(huì)引起區(qū)塊鏈結(jié)構(gòu)分叉等問題,而保證一致性會(huì)影響到區(qū)塊鏈系統(tǒng)的運(yùn)行效率,從而削弱可伸縮性。然而,為提高性能而設(shè)計(jì)的新方案可能會(huì)面臨更嚴(yán)重的不一致性問題。
為了提高交易的一致性同時(shí)保證高吞吐量,Syta 等[54]提出了一種可擴(kuò)展的集體簽名協(xié)議Cosi來(lái)提高交易的確認(rèn)效率。在Cosi 中,首先由領(lǐng)導(dǎo)者要求驗(yàn)證某個(gè)區(qū)塊,然后一群證人利用溝通樹和施諾爾多重簽名[55]共同簽署該區(qū)塊。生成一個(gè)單聚合集體簽名后,所有共同簽署人就可以通過樹外的驗(yàn)證者來(lái)驗(yàn)證它,從而減少了每次交易的成本和時(shí)延。在 Cosi 的基礎(chǔ)上,Kogias 等[11]設(shè)計(jì)了ByzCoin——一個(gè)具有較強(qiáng)一致性的可擴(kuò)展區(qū)塊鏈架構(gòu)。如圖3 所示,為了減少確認(rèn)時(shí)延,ByzCoin中的塊被分為微小塊和關(guān)鍵塊。同時(shí),ByzCoin 利用生成樹拓?fù)鋪?lái)提高吞吐量。有了這些安全措施,當(dāng)攻擊者掌握的計(jì)算能力不超過1/4 時(shí),該系統(tǒng)就可以抵御多重攻擊,例如雙重支付和蓄意分叉等。然而,底層的CoSi 協(xié)議會(huì)使ByzCoin 變得不可靠,同時(shí)會(huì)暴露較高的出錯(cuò)概率。因此,文獻(xiàn)[12]對(duì)CoSi協(xié)議進(jìn)行了改進(jìn),構(gòu)建了穩(wěn)健生成樹拓?fù)?,并使用BLS 多重簽名[56]替代了之前的Schnorr 多重簽名,使ByzCoin 更加可靠。BLS 多重簽名可以通過生成樹在單輪內(nèi)完成簽名,這樣減少了消息的傳輸,從而降低了失敗概率。
圖3 Byzcoin 的基礎(chǔ)框架
另一個(gè)提高區(qū)塊鏈吞吐量的解決方案是分片[50,57]機(jī)制,它將處理交易的開銷分割為多個(gè)較小的節(jié)點(diǎn)組[13-14]。對(duì)于基于分片的區(qū)塊鏈系統(tǒng),分片之間的不一致性稱為拜占庭故障(BF,Byzantine fault)[58]。為了克服拜占庭故障,RapidChain[13]在協(xié)議層對(duì)拜占庭故障進(jìn)行處理。RapidChain 在分片中建立了一個(gè)參考委員會(huì),它們需要接收到足夠多相同的關(guān)于同一區(qū)塊的消息來(lái)驗(yàn)證領(lǐng)導(dǎo)者節(jié)點(diǎn),并在較小的委員會(huì)中實(shí)現(xiàn)1/3 的總彈性。RapidChain 能高彈性地對(duì)抗拜占庭故障,可以容忍少于1/3 的破壞節(jié)點(diǎn),優(yōu)于之前的方案[50,59(]這些方案可以容忍不超過1/4的破壞節(jié)點(diǎn))。隨后,ChainSpace 實(shí)現(xiàn)了一個(gè)基于分片的智能合約平臺(tái),并使用提出的S-BAC 協(xié)議來(lái)保持節(jié)點(diǎn)之間的一致性[15]。在ChainSpace 中,審計(jì)者可以發(fā)現(xiàn)試圖將無(wú)效交易或?qū)ο笠胝\(chéng)實(shí)分片中的惡意分片。文獻(xiàn)[60]對(duì)實(shí)用拜占庭容錯(cuò)協(xié)議進(jìn)行了改進(jìn),降低了節(jié)點(diǎn)間通信成本,同時(shí)結(jié)合信譽(yù)模型,在一定程度上防御了女巫攻擊。然而,之前的分片方案要么不能支持完整的分片,要么降低了分片后的攻擊難度??紤]到這一問題,Wang 等[61]提出了Monoxide 系統(tǒng),該系統(tǒng)通過引入異步一致性區(qū)域的概念,能在不影響去中心化和安全性的情況下對(duì)區(qū)塊鏈系統(tǒng)進(jìn)行線性擴(kuò)展。在每個(gè)分片中,Monoxide 采用Chu-ko-nu 挖礦技術(shù)來(lái)確保每個(gè)區(qū)域的有效挖掘能力相當(dāng),使攻擊者對(duì)任意區(qū)域的攻擊與對(duì)整個(gè)網(wǎng)絡(luò)的攻擊一樣困難。
2) 加強(qiáng)密鑰管理和密碼系統(tǒng)安全性
針對(duì)3.1 節(jié)所述的安全漏洞,BIP32 架構(gòu)[43]加強(qiáng)了密鑰生成函數(shù),其中,子密鑰的生成不再直接依賴于父節(jié)點(diǎn)的公鑰,而是結(jié)合父節(jié)點(diǎn)的擴(kuò)展私鑰和索引來(lái)生成子密鑰,該操作能有效防止父節(jié)點(diǎn)密鑰的泄露。不過這種方案使子節(jié)點(diǎn)和父節(jié)點(diǎn)的公鑰失去了鏈接性,即無(wú)法從父節(jié)點(diǎn)公鑰生成子節(jié)點(diǎn)。Gutoski 等[62]借鑒了冗余的思想,存儲(chǔ)多個(gè)主私鑰,從而增強(qiáng)了比特幣錢包對(duì)主私鑰泄露的容忍性。但這種防御手段仍無(wú)法抵抗特權(quán)升級(jí)攻擊。Fan 等[63]設(shè)計(jì)了一種新型的HD 錢包方案,該方案使用單向陷門函數(shù)處理私鑰,進(jìn)而對(duì)所有子節(jié)點(diǎn)隱藏私鑰,能有效抵抗特權(quán)升級(jí)攻擊。
為了防止路由攻擊,從部署的角度劃分,可以實(shí)行短期和長(zhǎng)期對(duì)策[17]。短期對(duì)策更容易部署,不需要對(duì)協(xié)議進(jìn)行任何更改。在區(qū)塊鏈網(wǎng)絡(luò)中,如果來(lái)往于一個(gè)節(jié)點(diǎn)的流量經(jīng)過多個(gè)不同的路徑,攻擊者必須知道相關(guān)的IP 地址,否則就會(huì)摧毀所有的路由。因此,如果節(jié)點(diǎn)所有者能增加節(jié)點(diǎn)連接的多樣性,攻擊將變得極其困難。此外,節(jié)點(diǎn)還可以監(jiān)控相關(guān)的統(tǒng)計(jì)數(shù)據(jù),以檢測(cè)往返時(shí)間的突然變化、連接的分布情況等。檢測(cè)到不尋常事件的節(jié)點(diǎn)可以建立額外的隨機(jī)連接來(lái)保護(hù)自己不受攻擊。
從長(zhǎng)遠(yuǎn)來(lái)看,對(duì)比特幣通信進(jìn)行加密可以防止信息泄露,例如采用消息認(rèn)證碼(MAC,message authentication code)可以防止消息被篡改;使用P2P流量加密協(xié)議[64],可以防止攻擊者獲取關(guān)鍵信息。這2 種對(duì)策都增加了時(shí)延攻擊的難度。此外,比特幣用戶可以要求多個(gè)對(duì)等方提供某個(gè)區(qū)塊,以免被阻斷或錯(cuò)過區(qū)塊。文獻(xiàn)[65]提出了一種通用的檢測(cè)方法,該工作對(duì)挖礦全過程進(jìn)行了狀態(tài)模擬,并通過分析區(qū)塊鏈當(dāng)前的狀態(tài)檢測(cè),判斷當(dāng)前區(qū)塊鏈系統(tǒng)所面臨的攻擊力度。
1) 確保區(qū)塊鏈的分散化
為了解決共識(shí)協(xié)議(例如工作量證明或權(quán)益證明)的再集中化問題,Borge 等[19]提出了全新的個(gè)人身份證明機(jī)制(PoP,proof-of-personhood)并設(shè)計(jì)了一種名為PoPCoin 的加密貨幣。個(gè)人身份證明協(xié)議利用集體簽名和環(huán)簽名將在線身份和離線實(shí)體結(jié)合起來(lái),使加密貨幣重新分散化。在PoPCoin 中,系統(tǒng)為每個(gè)用戶分配了一個(gè)加密的身份令牌,同時(shí)不泄露關(guān)于個(gè)人的敏感信息。這樣一來(lái),既保證了問責(zé)性,又保證了匿名性。PoPCoin 將加密貨幣的鑄造與用戶實(shí)體結(jié)合,并使每個(gè)礦工以相同的速度鑄造新幣,這使虛擬用戶與現(xiàn)實(shí)世界緊密聯(lián)系,從而有利于抵御女巫攻擊[49]。
PoPCoin 提供了一種與真人綁定的去中心化貨幣鑄造機(jī)制,而SmartPool[18]則探索了去中心化礦池的可行性,它的核心思想是利用智能合約替代之前的礦池運(yùn)營(yíng)商。為了保證采礦獎(jiǎng)勵(lì)分配的公平性,SmartPool 使用概率驗(yàn)證技術(shù)來(lái)確保惡意礦工不會(huì)獲得額外利益。這樣一來(lái),區(qū)塊鏈安全將依賴于整個(gè)網(wǎng)絡(luò)和以太坊的共識(shí)機(jī)制,而不是單一實(shí)體,同時(shí),所需費(fèi)用也會(huì)比普通礦池低。
2) 阻止FAW 攻擊
要檢測(cè)一個(gè)礦池是否被攻擊,可以比較礦工提交的PPoW 和FPoW。然而,簡(jiǎn)單的檢測(cè)攻擊是不夠的,因?yàn)楣粽哌€可以使用女巫節(jié)點(diǎn)獲得額外的獎(jiǎng)勵(lì)。一個(gè)可行的解決方案是定期更新beacon 值[22],如果一個(gè)區(qū)塊包含未更新的beacon 值,那么它就是不合法的。另一種方法是引入?yún)⑴c費(fèi)用來(lái)減少女巫節(jié)點(diǎn)的數(shù)量,但這可能會(huì)降低礦池對(duì)礦工的吸引力。另外,更有利于FPoW 的獎(jiǎng)勵(lì)分配方式也有助于激勵(lì)礦工們誠(chéng)實(shí)挖礦。
1) 鏈下支付通道的保密性和匿名性
近年來(lái),大量工作致力于分析和提升鏈下支付通道的安全性。為了構(gòu)建具有良好保密性的支付通道,Green 等[24]提出了盲鏈輕量交易(BOLT,blind off-chain light-weight transaction),斷開了統(tǒng)一支付通道中交易的聯(lián)系。作者設(shè)計(jì)了3 種支付通道:?jiǎn)蜗蛑Ц锻ǖ?、雙向支付通道和間接支付渠道,并討論了每種類型的安全風(fēng)險(xiǎn)。BOLT 能在商家不知道付費(fèi)者身份的情況下創(chuàng)建匿名支付通道。不過在更一般的情況下,交易路徑中會(huì)存在多個(gè)中介,為了保護(hù)多跳支付網(wǎng)絡(luò)的隱私,Malavolta 等[25]設(shè)計(jì)了多跳哈希時(shí)間鎖定合約(HTLC,multi-hop hashed time lock contract)。作者在通用可組合性框架的基礎(chǔ)上提出了Fulgor 和Rayo 這2 個(gè)協(xié)議。Fulgor 是PCN上首個(gè)保護(hù)隱私的支付協(xié)議,但它是一個(gè)阻塞式協(xié)議,容易造成死鎖;Rayo 是一個(gè)非阻塞式協(xié)議,解決了死鎖問題?;谶@2 個(gè)協(xié)議,HTLC 能保證支付通道途徑的其他用戶無(wú)法獲取交易隱私信息。然而,目前保證支付渠道安全的解決方案,要么是不兼容的[24],要么是低效的[25]。鑒于上述缺點(diǎn),Malavolta 等[26]進(jìn)一步提出一種名為匿名多跳鎖(AMHL,anonymous multi-hop lock)的新機(jī)制,構(gòu)建了一種具有高互操作性的實(shí)用隱私保護(hù)PCN,該方案通過犧牲額外的一輪通信避免蟲洞攻擊。表2對(duì)以上3 種方案進(jìn)行了比較。
2) 匿名貨幣增強(qiáng)
針對(duì)指紋分析攻擊,Kappos 等[31]提出,如果用戶與礦池的交互行為沒有規(guī)律,該攻擊的效率會(huì)大大降低。因此可以采取均等支付的方式來(lái)抵抗該攻擊,即用戶均在相同的時(shí)間間隔內(nèi)交易相同數(shù)額的資金。這種防御方法能有效抵抗指紋分析攻擊[31-32]對(duì)用戶特有行為的分析。與側(cè)信道攻擊的防御思路類似,文獻(xiàn)[33]提出可以在底層使用無(wú)差別加密算法進(jìn)行基本操作,這樣一來(lái),攻擊者無(wú)法通過加解密的時(shí)間差異側(cè)面推測(cè)出敏感信息。但以上的增強(qiáng)方案會(huì)使匿名貨幣系統(tǒng)效率大大降低,因此,如何在保證效率的情況下設(shè)計(jì)出匿名性好的加密貨幣系統(tǒng)是目前學(xué)術(shù)界和工業(yè)界的一大挑戰(zhàn)。
3) 智能合約加強(qiáng)
為了解決智能合約的安全漏洞,研究者試圖從各個(gè)方面加強(qiáng)智能合約中的安全短板。Kalra 等[27]設(shè)計(jì)了ZEUS,實(shí)現(xiàn)了智能合約的自動(dòng)形式化驗(yàn)證。它制定了規(guī)范的Solidity[66](一種用于區(qū)塊鏈的高級(jí)編程語(yǔ)言)語(yǔ)義和策略來(lái)確定合約是否可以接受,并提供了從Solidity 到LLVM 的位碼轉(zhuǎn)換程序。ZEUS 在給定策略規(guī)范的情況下能自動(dòng)插入驗(yàn)證條件。相較于支持 LLVM 級(jí)別檢測(cè)的 ZEUS,TEETHER[28]則致力于字節(jié)碼級(jí)別的驗(yàn)證,可以自動(dòng)檢測(cè)第三方漏洞。與開發(fā)階段的調(diào)試工具ZEUS不同,TEETHER 可以使用符號(hào)執(zhí)行,在不訪問合約源代碼的情況下,在以太機(jī)上檢測(cè)現(xiàn)有合約的漏洞。通過形成程序的控制流圖(GFC,control flow graph),TEETHER 對(duì)程序的輸出進(jìn)行分析,以發(fā)現(xiàn)其潛在的缺陷路徑。TEETHER 和ZEUS 有不同的設(shè)計(jì)目標(biāo),TEETHER 只關(guān)注惡意轉(zhuǎn)賬行為,而ZEUS 更關(guān)注智能合約的正確性和公平性。
然而,當(dāng)惡意行為正在進(jìn)行時(shí),TEETHER 和ZEUS 的檢測(cè)將失去作用。為了解決這個(gè)問題,Rodler 等[29]設(shè)計(jì)了Sereum 來(lái)實(shí)時(shí)檢測(cè)重入攻擊,該攻擊能導(dǎo)致存儲(chǔ)變量的改變和進(jìn)程中合約狀態(tài)的惡意更新?;贓VM 字節(jié)碼指令級(jí)別的運(yùn)行時(shí)監(jiān)視器,Sereum 采用污點(diǎn)跟蹤的方法監(jiān)控變量更新,可以有效地檢測(cè)可疑行為,防止了基本的和高級(jí)的重入攻擊。同時(shí),Sereum 對(duì)EVM 進(jìn)行了擴(kuò)展,引入了用于監(jiān)視和防御的污染引擎和攻擊檢測(cè)器。Sereum 能動(dòng)態(tài)地檢測(cè)重入攻擊,但對(duì)其他類型的攻擊無(wú)能為力。Zhang 等[30]設(shè)計(jì)了TxSpector,它通過記錄字節(jié)級(jí)的交易進(jìn)程并構(gòu)造執(zhí)行流圖(EFG,execution flow graph)來(lái)提取數(shù)據(jù)之間的邏輯關(guān)系,最后用戶能根據(jù)自己制定的規(guī)則來(lái)進(jìn)行實(shí)時(shí)檢測(cè),該通用框架可以檢測(cè)重入攻擊、DoS 等多種攻擊。
表2 3 種鏈下支付通道方案的比較
針對(duì)前文所總結(jié)的區(qū)塊鏈系統(tǒng)的安全問題,本節(jié)將討論關(guān)于加強(qiáng)區(qū)塊鏈安全與防護(hù)工作的4 個(gè)研究方向。
利用邊界網(wǎng)關(guān)協(xié)議劫持等網(wǎng)絡(luò)攻擊,攻擊者可以在控制網(wǎng)絡(luò)運(yùn)營(yíng)商的情況下延遲網(wǎng)絡(luò)中消息的發(fā)送,并在以太坊平臺(tái)上發(fā)起平衡攻擊。網(wǎng)絡(luò)是區(qū)塊鏈交易的底層基礎(chǔ),在區(qū)塊鏈上進(jìn)行交易時(shí)必須考慮網(wǎng)絡(luò)布局的影響。因此,研究調(diào)查更多針對(duì)網(wǎng)絡(luò)的攻擊效果并進(jìn)一步研究BGP 劫持帶來(lái)的解決安全問題仍是必要的。
為了實(shí)現(xiàn)區(qū)塊鏈系統(tǒng)的穩(wěn)健性和可擴(kuò)展性,需要在共識(shí)機(jī)制的安全性和有效性之間進(jìn)行權(quán)衡。集體簽名可以提高基于生成樹拓?fù)涞目缮炜s性,但樹結(jié)構(gòu)可能會(huì)受到惡意領(lǐng)導(dǎo)節(jié)點(diǎn)和中心化的影響[11]。因此,有必要對(duì)防范惡意領(lǐng)導(dǎo)和集體簽名去中心化進(jìn)行深入分析。此外,盡管最近的研究在減少女巫節(jié)點(diǎn)攻擊上取得了一些進(jìn)展[26],但目前的研究仍然缺乏能足以防御各種攻擊的系統(tǒng)且實(shí)用的共識(shí)協(xié)議。
1) 提高鏈下支付通道的隱私性和匿名性
PCN 目前已經(jīng)被廣泛用來(lái)減輕區(qū)塊鏈網(wǎng)絡(luò)的負(fù)擔(dān),并有許多研究致力于建立具有隱私保護(hù)的PCN 以確保匿名性。然而,PCN 中還存在許多仍未被攻擊者利用的弱點(diǎn),如路由的龐大規(guī)模、網(wǎng)絡(luò)的形成和流動(dòng)性等。這些弱點(diǎn)一旦加以利用,很有可能對(duì)區(qū)塊鏈網(wǎng)絡(luò)形成巨大的安全威脅。另一個(gè)問題是PCN內(nèi)部和外部的隱私泄露。HTLC 作為鏈下支付通道安全措施的核心,其通道路徑具有獨(dú)特性和固定性,但這一操作會(huì)公開交易中涉及的用戶身份。當(dāng)PCN含有多個(gè)中介點(diǎn)時(shí),保持來(lái)自中間節(jié)點(diǎn)的交易量是一個(gè)未解決的問題。此外,根據(jù)文獻(xiàn)[25],必須以匿名為代價(jià)來(lái)維護(hù)同步。因此,如何找到一種同時(shí)保證同步和匿名性的方法是一個(gè)有待解決的問題。
2) 智能合約的安全性
智能合約被認(rèn)為是最具顛覆性的應(yīng)用之一,其安全漏洞給大量的投資者和區(qū)塊鏈社區(qū)投下陰影。Solidity 作為智能合約開發(fā)中最常用的語(yǔ)言之一,由于它的特性和安全防范的缺乏,尤其是在公共環(huán)境下,Solidity 被認(rèn)為是不安全的。為了進(jìn)一步提高智能合約的安全性,一種更安全、對(duì)編碼人員更有約束的語(yǔ)言是目前的迫切需求。另外,在部署后,由于區(qū)塊鏈的不可篡改性,智能合約一旦公開將是不可變的。但是,在智能合約執(zhí)行期間可能會(huì)發(fā)現(xiàn)致命的錯(cuò)誤。因此,在不修改智能合約的情況下,設(shè)計(jì)出一種修復(fù)漏洞機(jī)制是困難但必要的。Krupp 等[28]進(jìn)一步證明了通過智能合約的字節(jié)碼暴露漏洞是可行的,因此對(duì)字節(jié)碼層的保護(hù)需要進(jìn)行更多的研究。
匿名貨幣架構(gòu)目前還存在許多問題,無(wú)法達(dá)到完全匿名性,例如,攻擊者可以通過側(cè)信道、交易指紋等信息跟蹤交易。然而,保護(hù)側(cè)信道信息的泄露是困難的,而且可能會(huì)帶來(lái)效率的下降,因此可以考慮使用不經(jīng)意隨機(jī)存儲(chǔ)(ORAM,Oblivious RAM)技術(shù)和差分隱私技術(shù)來(lái)保護(hù)交易的敏感信息。另外,如何設(shè)計(jì)并在區(qū)塊鏈系統(tǒng)上應(yīng)用一種加密時(shí)間不固定并且高效的底層加密算法是一種非常有潛力的研究方向。
本文主要關(guān)注區(qū)塊鏈系統(tǒng)在不同層次上的安全和隱私問題,從區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)層、網(wǎng)絡(luò)層、共識(shí)層和應(yīng)用層4 個(gè)層次分別介紹和分析了區(qū)塊鏈系統(tǒng)現(xiàn)有的安全問題及前沿的防御對(duì)策。最后,總結(jié)了該研究領(lǐng)域的挑戰(zhàn)和潛力,并展望了區(qū)塊鏈安全未來(lái)可能的研究方向。希望本文能為今后區(qū)塊鏈安全及相關(guān)研究提供指導(dǎo)。