區塊鏈作為新興技術受到越來越廣泛的關注,是一種傳統技術在互聯網時代下的新的應用,這其中包括分布式數據存儲技術、共識機制和密碼學等。隨著各種區塊鏈研究聯盟的創建,相關研究得到了越來越多的資金和人員支持。區塊鏈的應用已延伸至多個領域,其在金融行業的應用受到諸多關注,金融行業是我國網絡安全重點行業之一,系統及數據安全至關重要,因此區塊鏈技術在安全層面所面臨的挑戰是個值得深入研究的課題。
該報告首先對區塊鏈密碼算法進行了詳細的的介紹,其次對區塊鏈面臨的安全問題進行了分析,最后以不同角度對針對區塊鏈的攻擊進行了全面的分析與研究。經分析,目前區塊鏈技術在平臺安全性、匿名性與隱私性、技術壁壘等方面都存在著很多亟待解決的問題,這些問題是區塊鏈技術應用于更多核心領域時需要重視且解決的關鍵問題,值得進一步探索與深入研究。
區塊鏈的密碼算法
下面將對區塊鏈使用的Hash算法、零知識證明、環簽名等密碼算法進行詳細分析。
一、 Hash算法
哈希算法作為區塊鏈基礎技術,Hash函數的本質是將任意長度(有限)的一組數據映射到一組已定義長度的數據流中。若此函數同時滿足:
(1)對任意輸入的一組數據Hash值的計算都特別簡單;
(2)想要找到2個不同的擁有相同Hash值的數據是計算困難的。
滿足上述兩條性質的Hash函數也被稱為加密Hash函數,不引起矛盾的情況下,Hash函數通常指的是加密Hash函數。對于Hash函數,找到使得被稱為一次碰撞。當前流行的Hash函數有MD5,SHA1,SHA2,SHA3。
比特幣使用的是SHA256,大多區塊鏈系統使用的都是SHA256算法。所以這里先介紹一下SHA256。
1、 SHA256算法步驟
STEP1:附加填充比特。對報文進行填充使報文長度與448模512同余(長度=448mod512),填充的比特數范圍是1到512,填充比特串的最高位為1,其余位為0。
STEP2:附加長度值。將用64-bit表示的初始報文(填充前)的位長度附加在步驟1的結果后(低位字節優先)。
STEP3:初始化緩存。使用一個256-bit的緩存來存放該散列函數的中間及最終結果。
STEP4:處理512-bit(16個字)報文分組序列。該算法使用了六種基本邏輯函數,由64 步迭代運算組成。每步都以256-bit緩存值為輸入,然后更新緩存內容。每步使用一個32-bit 常數值Kt和一個32-bit Wt。其中Wt是分組之后的報文,t=1,2,。..,16 。
STEP5:所有的512-bit分組處理完畢后,對于SHA256算法最后一個分組產生的輸出便是256-bit的報文。
作為加密及簽名體系的核心算法,哈希函數的安全性事關整個區塊鏈體系的底層安全性。所以關注哈希函數的研究現狀是很有必要的。
2、 Hash函數的研究現狀
2004年我國密碼學家王小云在國際密碼討論年會(CRYPTO)上展示了MD5算法的碰撞并給出了第一個實例(Collisions for hash functions MD4, MD5, HAVAL-128 and RIPEMD,rump session of CRYPTO 2004,How to Break MD5 and Other Hash Functions,EuroCrypt 2005)。該攻擊復雜度很低,在普通計算機上只需要幾秒鐘的時間。2005年王小云教授與其同事又提出了對SHA-1算法的碰撞算法,不過計算復雜度為2的63次方,在實際情況下難以實現。
2017年2月23日谷歌安全博客上發布了世界上第一例公開的SHA-1哈希碰撞實例,在經過兩年的聯合研究和花費了巨大的計算機時間之后,研究人員在他們的研究網站SHAttered上給出了兩個內容不同,但是具有相同SHA-1消息摘要的PDF文件,這就意味著在理論研究長期以來警示SHA-1算法存在風險之后,SHA-1算法的實際攻擊案例也浮出水面,同時也標志著SHA-1算法終于走向了生命的末期。
NIST于2007年正式宣布在全球范圍內征集新的下一代密碼Hash算法,舉行SHA-3競賽。新的Hash算法將被稱為SHA-3,并且作為新的安全Hash標準,增強現有的FIPS 180-2標準。算法提交已于2008年10月結束,NIST 分別于2009年和2010年舉行2輪會議,通過2輪的篩選選出進入最終輪的算法,最后將在2012年公布獲勝算法。公開競賽的整個進程仿照高級加密標準AES 的征集過程。2012年10月2日,Keccak被選為NIST競賽的勝利者,成為SHA-3。
Keccak算法是SHA-3的候選人在2008年10月提交。Keccak采用了創新的的“海綿引擎”散列消息文本。它設計簡單,方便硬件實現。Keccak已可以抵御最小的復雜度為2n的攻擊,其中N為散列的大小。它具有廣泛的安全邊際。目前為止,第三方密碼分析已經顯示出Keccak沒有嚴重的弱點。
KangarooTwelve算法是最近提出的Keccak變種,其計算輪次已經減少到了12,但與原算法比起來,其功能沒有調整。
二、 零知識證明
在密碼學中零知識證明(zero-knowledge proof, ZKP)是一種一方用于向另一方證明自己知曉某個消息x,而不透露其他任何和x有關的內容的策略,其中前者稱為證明者(Prover),后者稱為驗證者(Verifier)。設想一種場景, 在一個系統中, 所有用戶都擁有各自全部文件的備份, 并利用各自的私鑰進行加密后在系統內公開。 假設在某個時刻,用戶Alice希望提供給用戶Bob她的一部分文件,這時候出現的問題是Alice如何讓Bob相信她確實發送了正確的文件。一個簡單地處理辦法是Alice將自己的私鑰發給Bob,而這正是 Alice不希望選擇的策略,因為這樣 Bob可以輕易地獲取到Alice的全部文件內容。零知識證明便是可以用于解決上述問題的一種方案。零知識證明主要基于復雜度理論,并且在密碼學中有廣泛的理論延伸。在復雜度理論中,我們主要討論哪些語言可以進行零知識證明應用,而在密碼學中,我們主要討論如何構造各種類型的零知識證明方案,并使得其足夠優秀和高效。
在1985年,Shafi Goldwasser,Silvio Micali和Charles Rackoff發表的“The Knowledge Complexity of Interactive Proof-System” 一文中首次提出了零知識證明的概念。文章中引入了交互證明系統(interactive proof system) 模型并構思了知識復雜性(knowledge complexity)這一概念(即證明方傳遞給驗證者知識量的度量) 。同時作者給出了幾種可以運用于零知識證明的具體困難問題--二次非剩余問題。之后的相關工作表明所有多項式時間內可以被驗證的判定性問題(NP 問題) 都存在零知識證明。更進一步,任何可以通過交互式證明系統證明的判定性問題(IP 問題)和多項式空間內可判定的問題(PSPACE 問題)是等價的,并且都有零知識證明。 目前除了交互式零知識證明以外,還有兩個主要變種:并行零知識證明和非交互零知識證明。
Zcash是首個使用零知識證明機制的區塊鏈系統,能夠提供完全的支付保密性,使用公有區塊鏈來維護一個去中心化的網絡,Zcash與比特幣有一定的相似性,相同的是Zcash的代幣ZEC總量是2100萬元,不同的是Zcash交易的時候自動隱藏區塊鏈上所有交易的發送者、接受者以及數額,只有擁有查看密鑰的人才能看到交易的內容,用戶具有完全的控制權,可以自行選擇向其他任何一個人提供查看的密鑰。
Zcash的原理就是在比特幣交易的區塊鏈的主鏈上加上一條側鏈,這條側鏈可以將付費者和收款者在數字貨幣的交易過程中把數字貨幣分成好幾份,再重新在全網上發一遍,達到完全匿名交易的目的。采用了POW的分配方式,在前四年曠工的挖礦所得有20%會自動分配給Zcash的團隊以及投資者的,與比特幣等數字貨幣不同的是Zcash更加注重隱私和對交易透明的可控性。Zcash系統允許用戶進行私人交易,也能維護支持交易的完整性,Zcash項目的出現,解決了比特幣的監視風險,為比特幣公開交易記錄監控風險提供了解決方案。
三、 環簽名群簽名
1、群簽名
在一個群簽名方案中,一個群體中的任意一個成員可以以匿名的方式代表整個群體對消息進行簽名。與其他數字簽名一樣,群簽名是可以公開驗證的,且可以只用單個群公鑰來驗證。群簽名一般流程:
(1)初始化,群管理者建立群資源,生成對應的群公鑰(Group Public Key)和群私鑰(Group Private Key)群公鑰對整個系統中的所有用戶公開,比如群成員、驗證者等。
(2)成員加入,在用戶加入群的時候,群管理者頒發群證書(Group Certificate)給群成員。
(3)簽名,群成員利用獲得的群證書簽署文件,生成群簽名。
(4)驗證,同時驗證者利用群公鑰僅可以驗證所得群簽名的正確性,但不能確定群中的正式簽署者。
(5)公開,群管理者利用群私鑰可以對群用戶生成的群簽名進行追蹤,并暴露簽署者身份。
2、環簽名
2001年,Rivest, shamir和Tauman三位密碼學家首次提出了環簽名。是一種簡化的群簽名,只有環成員沒有管理者,不需要環成員間的合作。環簽名方案中簽名者首先選定一個臨時的簽名者集合,集合中包括簽名者。然后簽名者利用自己的私鑰和簽名集合中其他人的公鑰就可以獨立的產生簽名,而無需他人的幫助。簽名者集合中的成員可能并不知道自己被包含在其中。
環簽名方案由以下幾部分構成:
(1)密鑰生成。為環中每個成員產生一個密鑰對(公鑰PKi,私鑰SKi)。
(2)簽名。簽名者用自己的私鑰和任意n個環成員(包括自己)的公鑰為消息m生成簽名a。
(3)簽名驗證。驗證者根據環簽名和消息m,驗證簽名是否為環中成員所簽,如果有效就接收,否則丟棄。
環簽名滿足的性質:
(1)無條件匿名性:攻擊者無法確定簽名是由環中哪個成員生成,即使在獲得環成員私鑰的情況下,概率也不超過1/n。
(2)正確性:簽名必需能被所有其他人驗證。
(3)不可偽造性:環中其他成員不能偽造真實簽名者簽名,外部攻擊者即使在獲得某個有效環簽名的基礎上,也不能為消息m偽造一個簽名。
3、環簽名和群簽名的比較
(1)匿名性。都是一種個體代表群體簽名的體制,驗證者能驗證簽名為群體中某個成員所簽,但并不能知道為哪個成員,以達到簽名者匿名的作用。
(2)可追蹤性。群簽名中,群管理員的存在保證了簽名的可追蹤性。群管理員可以撤銷簽名,揭露真正的簽名者。環簽名本身無法揭示簽名者,除非簽名者本身想暴露或者在簽名中添加額外的信息。提出了一個可驗證的環簽名方案,方案中真實簽名者希望驗證者知道自己的身份,此時真實簽名者可以通過透露自己掌握的秘密信息來證實自己的身份。
(3)管理系統。群簽名由群管理員管理,環簽名不需要管理,簽名者只有選擇一個可能的簽名者集合,獲得其公鑰,然后公布這個集合即可,所有成員平等。
區塊鏈安全性研究
盡管區塊鏈的防篡改、分布式存儲、用戶匿名等技術優勢為其發展應用提供了大量的創新空間,但目前區塊鏈技術在各領域的應用模式仍處于大量探索階段,其深入應用仍需漫長的整合和發展過程。區塊鏈技術本身仍存在一些內在安全風險,去中心化、自組織的顛覆性本質也可能在技術應用過程中引發一些不容忽視的安全問題。其主要分為系統安全和應用安全兩大類。
一、系統安全
系統安全主要指的是底層代碼安全、密碼算法的安全以及共識機制的安全。底層代碼安全是其應用和再開發的保障,其底層代碼的漏洞對于其區塊鏈項目的打擊是致命,需要及時地進行修補。密碼算法的安全是區塊鏈不可篡改性和匿名性的一個保證,密碼協議永遠是跟隨著當前科技的發展不斷變化的,在量子時代,需要研究更加安全的抗量子密碼協議確保密碼算法的安全。在共識算法的設計中存在著著名的Trilemma(三難問題),即Secure(安全性)、Scalability(可擴展性)和Decentralization(去中心化)三者不可兼得,而目前幾乎所有的區塊鏈項目都遇到這種挑戰。
1、底層代碼的安全性
區塊鏈底層相當于操作系統,由于開發者在開發過程中的疏忽造成的系統漏洞極大程度上影響系統的安全性,并且區塊鏈的更新十分繁瑣和困難,出現漏洞后的更新很可能造成硬分叉,因此底層代碼的安全性十分重要。2018年8月的Bitcoin ABC(Bitcoincash全節點執行的開源代碼)代碼漏洞事件向我們展現了底層代碼漏洞的危害性。根據Bitcoin ABC的官方報告,黑客可以通過這個漏洞構建一個惡意交易,該交易將被某一特定版本的 Bitcoin ABC 接收,但會被其他所有版本的比特幣現金拒絕。這樣一個漏洞的結果可能是形成比特幣現金的分叉,即使使用敏感版本的礦工接受了惡意交易,其他礦工也不會接受的。Bitcoin ABC 表示他們已經直接向相關的礦業池運營商提供了補丁。這一事件說明漏洞總是會發生,但在重構這樣一個關鍵代碼時,應該花更多的時間和精力進行代碼審查。
2、密碼算法的安全性
隨著量子計算機的發展將會給現在使用的密碼體系帶來重大的安全威脅。區塊鏈主要依賴橢圓曲線公鑰加密算法生成數字簽名來安全地交易,目前最常用的ECDSA、RSA、DSA 等在理論上都不能承受量子攻擊,將會存在較大的風險,越來越多的研究人員開始關注能夠抵抗量子攻擊的密碼算法。
3、共識機制的安全性
對于一個共識協議,要滿足以下三個特性:
· Common Prefix:對于任何兩個誠實節點,他們的本地視圖除卻最后有限個塊之后,所有誠實節點看到的鏈的視圖是一致的。
· Chain Growth:保證區塊鏈能夠正常的增長,并且增長速度穩定。
· Chain Quality:對于一條鏈,任意截取其中一段,總有一部分是誠實節點產生的塊。
以下列出目前一些針對共識的攻擊手段。
3.1 51%攻擊
在比特幣中,若惡意用戶控制節點中大多數的計算資源(超過51%),就有能力新改寫整個公有賬本,這被稱為51%攻擊。由于區塊鏈網絡的開放性和當前整個網絡的算力不均衡性,尤其是專業挖礦芯片公司的產生與大礦池的形成,使其發生51%攻擊的可能性顯著提高。51%攻擊會引發對于區塊鏈的破壞以及對整個密碼貨幣的破壞,不管攻擊成功與否都會讓其置于自私挖礦,雙花攻擊,分叉攻擊等危險之下。
最近Horizen團隊,對于51%攻擊提出了其創新的解決方案:通過“延時函數”升級他們的工作量驗證共識算法,來處罰蓄謀這種攻擊的礦工。
3.2 自私挖礦
比特幣的經濟激勵機制和自身的去中心化的特性是比特幣系統依然能夠良好運行的關鍵。但是,由于礦工的逐利性和當前比特幣系統算力的不均衡,使得當前比特幣系統受到了嚴峻的挑戰,以色列學者Ittay Eyal在2014年提出了自私挖礦(selfish mining)的攻擊方式。攻擊者只要能控制全網超過1/3的算力, 就可以發起自私挖礦攻擊, 獲取更大的收益, 并對網絡安全造成威脅。
最近,康奈爾大學兩位研究員Cyril Grunspan 和Ricardo Perez-Marco的論文中通過探討攻擊向量與時間的關系,給出其相應的解決方案。
3.3 分區攻擊
在P2P網絡里, 只要控制一定數量的節點, 就可以進行Eclipse Attack[,從而發起51%攻擊, 控制整個網絡。這是一種分區攻擊。分區攻擊通過區塊鏈部分網絡的完全隔離實現即使當前控制的算力小于51%,但仍能發起51%攻擊。由于分區攻擊發起的前提為控制被隔離網絡的所有節點,所以攻擊成本較大,分區攻擊并不是單獨發起的往往伴隨著雙花,自私挖礦等攻擊,使其攻擊者獲得較大利益。
3.4 NAS攻擊(Nothing at stake)
針對PoW共識算法的出現的算力集中問題,PoS的提出在一定程度上解決了上述問題,然而伴隨而來的是區塊分叉的NAS攻擊。由于在類似于PoS的共識算法中,區塊分叉的成本支付是極小,礦工為實現自身利益的最大化和風險的最小化,會同時在多個分叉上進行挖礦,使其區塊鏈網絡得不到及時的收斂,從而破壞共識。當前對于NAS攻擊的解決方案主要是保證金機制,即為了有資格獲得塊投票的獎勵,用戶必須付保證金,如果用戶被發現在多個叉投票,那個交易證明將被放在原來的鏈上,取消用戶的獎勵。
二、應用安全
應用安全主要指的是智能合約安全、數字錢包安全以及隱私保護。智能合約安全是當前區塊鏈安全問題中一個重要的問題,當前許多區塊鏈的安全事件都與智能合約的安全有一定的聯系,這也是區塊鏈應用發展的一個不可避免的問題。區塊鏈錢包是儲存和使用數字虛擬貨幣的工具,區塊鏈錢包對虛擬幣的持有者們是非常重要的其重要性等同于現實生活中的銀行卡,所以區塊鏈錢包安全是至關重要的。隱私保護一直是隱私性和安全性兩難的問題,對于用戶我們希望不要泄露其自身信息的同時享有其安全性,通過環簽名、承諾協議和零知識證明可以有效地在保護隱私的同時保障其安全性。
1、智能合約的安全性
智能合約具有不可更改的性質,并且和密碼貨幣強相關,因此智能合約出現安全問題會造成嚴重后果和經濟損失。
2010年8月15日,比特幣區塊鏈的第74638塊上被 發現了一條包含有92233720368.54277039 BTC的交易記錄,而且這些比特幣僅被發送到兩個比特幣地址。而導致這次攻擊的原因,是由于比特幣代碼中的大整數溢出漏洞。為使這筆交易失效,比特幣核心開發人員開發了比特幣補丁版本,并啟動了硬分叉。在33個區塊的競爭之后,帶補丁版本的區塊鏈才成為主鏈,消除了原有漏洞的影響。
2016 年6 月,以太坊最大眾籌項目The DAO 被攻擊,黑客獲得超過350 萬個以太幣,后來導致以太坊分叉為ETH 和ETC。
新加坡國立大學的Loi Luu提出了現在的智能合約存在的幾種安全漏洞。
1.1 交易順序依賴合約
交易順序依賴就是智能合約的執行隨著當前交易處理的順序不同而產生差異。智能合約在執行交易時,會將合約狀態進行更新,在傳統公有鏈上其未處理的交易順序并沒有完全確定,不同的交易順序的執行會產生不同的合約狀態,這樣就會導致用戶期待的調用合約時的狀態與實際的合約狀態產生差異;當前合約的狀態取決于礦工在執行智能合約時對交易的調用順序,而這種合約狀態的不一致往往是其安全漏洞的來源。
1.2 時間戳依賴合約
按照以太坊的對于時間戳的要求,礦工在處理一個新的區塊時,如果新的區塊的時間戳大于上一個區塊,并且時間戳之差小于900秒,那么這個新區塊的時間戳就是合法的。攻擊者可以更改時間戳值或者可以選擇不同的塊的時間戳來操縱依賴于時間戳的智能合約的結果。
1.3 誤操作異常
在以太坊中,一個合約調用另一個合約可以通過send指令或直接調用另一個合約的函數。然而在調用過程中出現異常時,被調用的合約會中止執行,回退到調用前的狀態并返回false給調用合約。但是取決于合約調用方式的不同,被調用合約的異常可能無法立即被調用者獲知。這種不一致的異常傳播策略導致多種異常處理不當的情況發生。
1.4 可重入攻擊
在以太坊中,當一個合約調用另一個合約的時候,當前的操作就要等到調用結束之后才會繼續。這時,如果被調用者需要使用調用者當前所處的狀態,不考慮被調用方可能的惡意行為就可能產生了問題,而且該問題可能再合約編寫時不能立即被發現。著名的DAO攻擊事件就是因為這個漏洞而發生的,導致了3,600,000個以太幣被盜取,總價值達60,000,000美元。
1.5 智能合約檢測
智能合約本質是一段運行在區塊鏈網絡中的代碼,它完成用戶所賦予的業務邏輯。通俗的來說,相當于是一個“不可改變”且“公正”的“中間人”。但是由于代碼是程序員編寫的,不免會產生各種各樣的bug,但是由于智能合約一旦部署就不能修改的特點,一旦智能合約存在安全性隱患就會造成不可挽回的惡劣后果。因此,在智能合約部署之前對其進行安全性檢測尤為重要。目前,智能合約的檢測的發展方向有以下三個方向:
· 交由專業的檢測機構進行檢測
· 智能合約檢測工具進行檢測
· 形式化證明的檢測方式進行檢測
2、數字錢包的安全性
數字錢包保存著用戶的密碼貨幣,主要存在的安全風險有以下三點。第一,設計缺陷。2014 年底,某簽報因一個嚴重的隨機數問題(R 值重復)造成用戶丟失數百枚數字資產。第二,數字錢包中包含惡意代碼。第三,電腦、手機丟失或損壞導致的丟失資產。
應對措施主要有四個方面:
· 確保私鑰的隨機性;
· 在軟件安裝前進行散列值校驗,確保數字錢包軟件沒有被篡改過;
· 使用冷錢包;
· 對私鑰進行備份。
3、隱私保護
在公有鏈中, 需要對交易數據、地址、身份等敏感信息進行保護, 同時又能讓記賬節點驗證交易的合法性;對于聯盟鏈, 在構建隱私保護方案的同時, 需考慮可監管性/授權追蹤。可以通過采用高效的零知識證明、承諾、證據不可區分等密碼學原語與方案來實現交易身份及內容隱私保護;基于環簽名、群簽名等密碼學方案的隱私保護機制、基于分級證書機制的隱私保護機制也是可選方案;也可通過采用高效的同態加密方案或安全多方計算方案來實現交易內容的隱私保護;還可采用混幣機制實現簡單的隱私保護。
區塊鏈主要的隱私保護技術主要包括混幣技術、環簽名技術及零知識證明技術,后兩種技術在(上)篇中已經詳細的介紹過,這里不再贅述。
3.1 混幣技術
對于單個用戶的交易圖進行大數據分析[37]可以進行交易追蹤,有鑒于此研究人員提出了混幣技術旨在將多筆不相關的輸入進行混合后輸出, 使得外界無法關聯交易的輸入與輸出, 從而分辨不出數字貨幣的流向。Gregory Maxwell于2013年提出了CoinJoin匿名混幣技術, CoinJoin的使用者需要委托可信的第三方, 來構造一筆混合多筆輸入的交易,其提供服務的第三方可以知道混幣交易的流向。Tumble Bit協議提出了不同于CoinJoin的混幣協議方案, 雖然仍然需要第三方參與, 但第三方無法知道交易細節, 僅僅是提供服務,即第三方可以是任意第三方而不僅僅是可信的第三方。
總結
作為一個新興的研究領域,區塊鏈的研究大多仍處于起步階段。區塊鏈技術依舊存在一些比較嚴重的問題阻礙了區塊鏈的發展與大規模應用,在今后的區塊鏈技術安全研究中,可重點對共識機制的安全性、區塊鏈應用漏洞以及隱私泄露幾個方面進行深入的研究。在共識機制方面,可在目前已有的攻擊方案的基礎上,探索研究更加安全可靠的共識機制。隨著區塊鏈的發展,隱私泄露的問題則更加嚴峻,亟待后續研究。以比特幣為例,攻擊者可利用區塊鏈數據和交易鏈數據對比特幣地址進行聚類,以此來對應用戶的真實身份,此外,如何應對密鑰丟失,如何解決根據用戶錢包地址即可暴露所有交易記錄都是值得深思的問題。
針對區塊鏈的攻擊
一、針對區塊數據的攻擊
針對區塊數據的安全風險,大致總結了以下攻擊方式:
1. 惡意信息攻擊
在區塊鏈中寫入惡意信息,例如病毒特征碼、政治敏感話題等。借助區塊鏈數據不可刪除的特性,信息被寫入區塊鏈后很難刪除。若區塊鏈中出現惡意信息,將會遭到殺毒軟件、政治敏感等多方面的問題。
2. 資源濫用攻擊
隨著時間的推移,區塊數據可能會爆炸式增長(節點之間惡意頻繁交互),也可能會呈線性增長,這主要取決于此區塊鏈應用的設計,依賴現有的計算機存儲技術,區塊數據若發生爆炸式增長,可能導致節點無法容納又或者使區塊鏈運轉緩慢,從而使穩定運行的節點越來越少,節點越少,則越趨于中心化,引發區塊鏈危機。
3. 攻擊場景距離
若鏈中沒有設計相應的操作限制,攻擊者可以通過發送大量的垃圾信息來堵塞整個區塊鏈,使區塊鏈中真正的信息遲遲得不到處理,又或者使區塊鏈中的存儲節點超負荷運行。
二、針對加密簽名機制的攻擊
加密技術作為一個區塊鏈整體的支柱,其安全性顯得尤為重要,例如前些年所流行的MD5和SHA1哈希算法,目前已經證明安全性不足,現在已經不能被商用。目前大量使用的是SHA256算法,到目前為止,此算法還是安全的,雖然有人依然持有質疑,但是并沒有任何直接的公開證據表明此算法存在漏洞。但是還是建議后期的區塊鏈建設使用更新的SHA3算法。
針對加密簽名機制大致有如下攻擊方式:
1. 窮舉攻擊
此類攻擊方式主要作用于散列函數中,且幾乎所有散列函數或多或少都受此攻擊方式影響,而且其影響程度與函數本身無關,而是與生成的HASH長度有關,主要是一個概率論的問題,其中最典型的的方式是基于生日悖論的“生日攻擊”。
生日悖論:如果一個房間里有23個或23個以上的人,那么至少有兩個人的生日相同的概率要大于50%。這就意味著在一個典型的標準小學班級(30人)中,存在兩人生日相同的可能性更高。對于60或者更多的人,這種概率要大于99%。
2. 碰撞攻擊
此種攻擊方式主要作用于散列函數中,比較典型的案例是“MD5摘要算法”和“SHA1摘要算法”。它的攻擊原理是通過尋找算法的弱點,瓦解它的強抗碰撞性這一特性,使得散列函數原本要在相當長一段時間才能尋找到兩個值不同HASH相同的值的特性被弱化,攻擊者能在較短的時間能尋找到值不同但HASH相同的兩個值。
3. 長度擴展攻擊
此種攻擊方式主要作用于散列函數中,準確的說是基于Merkle-Damgard構造的摘要算法。其原理是通過算法弱點,在已知密文HASH和密文長度的情況下,推導出密文與另一消息拼接后計算出來的HASH。
4. 后門攻擊
此種攻擊方式作用于所有開源加密算法庫中,ECC算法是區塊鏈中身份驗證的基石,ECC算法本身是沒問題的,但是在實際情況中,人們可能更多的是選擇別人已經寫好的“輪子”直接拿來用,而不是自己再去實現一套加密函數。這就帶來了一個問題,在別人已經寫好的“輪子”中,可能被安插后門。
5. 量子攻擊
此種攻擊方式作用于大部分密碼學算法。目前所有的加密算法以及摘要算法,其安全強度取決于它被窮舉的時間復雜度,這使得依賴現有的計算機的計算能力,針對比較強的加密算法要對它進行暴力破解是非常難的,但是量子計算機擁有傳統計算機無可比擬的算力,使得時間復雜度大大降低,于是,其安全強度便可能被瓦解。
三、針對分布式網絡的攻擊
去中心化的公鏈網絡節點可能是普通家庭PC,可能是云服務器等等,其安全性必然是參差不齊的,其中必有安全性較差的節點,對其進行攻擊將直接威脅節點的安全。針對分布式網絡的安全風險,大致總結了以下攻擊方式:
1. 日食攻擊
是其他節點實施的網絡層面攻擊,其攻擊手段是囤積和霸占受害者的點對點連接間隙,將該節點保留在一個隔離的網絡中。這種類型的攻擊旨在阻止最新的區塊鏈信息進入到日食節點,從而隔離節點。
2. 竊聽攻擊
攻擊者可以使用這種攻擊來讓區塊鏈中的用戶標識與IP關聯起來,在某些情況下甚至可以追溯到用戶的家庭地址。以比特幣為例,當你在比特幣網絡上執行交易時,你的比特幣客戶端通常通過連接到一組八臺服務器來加入網絡,這個初始連接集合就是你的入口節點,每個用戶都會獲得一組唯一的入口節點。當你的錢包發送比特幣完成購買時,入口節點將交易轉交給比特幣網絡的其余部分,研究人員發現,識別一組一口節點意味著識別一個特定的比特幣客戶端,以此來推導出某個用戶。那么,攻擊者要做的是與比特幣服務器建立多個連接,連接后,攻擊者必須聽取客戶端與服務端的初始連接,這會泄露客戶端的IP地址。隨著交易流經網絡,它們將會與客戶端的入口節點相關聯,如果匹配,那么攻擊者就知道這是來自一個特定客戶端的交易。
3. BGP劫持攻擊
邊界網關協議(BGP)是因特網的關鍵組成部分,用于確定路由路徑。BGP劫持,即利用BGP操縱因特網路由路徑,最近幾年中已經變得越來越頻繁。 無論是網絡犯罪分子還是政府,都可以利用這種技術來達到自己的目的,如誤導和攔截流量等,目前在區塊鏈網絡中節點的流量一但被接管又能對整個網絡造成巨大的影響,如破壞共識機制,交易等各種信息。
4. 分割攻擊
攻擊者可以利用BGP劫持來講區塊鏈網絡劃分成兩個或多個不相交的網絡,此時的區塊鏈會分叉為兩條或多條并行鏈。攻擊停止后,區塊鏈會重新統一為一條鏈,以最長的鏈為主鏈,其他的鏈將被廢棄,其上的交易、獎勵等全部無效。
5. 延遲攻擊
攻擊者可以利用BGP劫持來延遲目標的區塊更新,而且不被發現。因為它是基于中間人修改目標請求區塊的數據來做到的:在目標請求獲取最新區塊的時候,將它的這一請求修改為獲取舊區塊的請求,使得目標獲得較舊的塊。
6. 節點客戶端漏洞
攻擊者在內網或者外網利用各種手段譬如漏洞掃描,0DAY漏洞利用等技術,對節點客戶端進行攻擊,此類攻擊主要針對客戶端自身軟件可能存在安全漏洞進行利用,獲取節點的控制權限。
7. 拒絕服務攻擊
通過大流量,或者漏洞的方式攻擊P2P網絡中的節點,使網絡中部分節點網絡癱瘓,節點癱瘓意味著鏈中總算力受損,使得其更容易遭受51%攻擊,而目前進行拒絕服務攻擊成本也較低,大量的攻擊工具平臺能輕易在黑市購買用于攻擊。
8. 雙重支出攻擊
雙重支出攻擊又稱雙花問題,指的是一個代幣花費在多筆交易中的攻擊,它的實現方法主要有以下幾種:
(1)種族攻擊。在面對0確認的交易便立刻進行付款的商家可能會遭遇此攻擊。欺詐者直接向商家發送支付給商家的交易,并發送沖突的交易,將代幣投入自己到網絡的其余部分。第二個沖突的交易很可能會被開采出來,并被區塊鏈節點認為是真的,于是付款交易作廢。
(2)芬尼攻擊。當接受0確認的付款時可能會遭遇此攻擊。假設攻擊者偶爾產生數據塊。在他生成的每個區塊中,他包括從他控制的地址A到地址B的轉移。為了欺騙你,當他生成一個塊時,他不會廣播它。相反,他打開您的商店網頁,并使用地址A向您的地址C付款。您可能會花費幾秒鐘的時間尋找雙重花費,然后轉讓商品。接著他廣播他之前的區塊,他的交易將優先于你的交易,于是付款交易作廢。
(3)Vector76攻擊。也被稱為單一確認攻擊,是種族攻擊和芬尼攻擊的組合,因此即使有一次確認的交易仍然可以逆轉。對于種族攻擊,相同的保護措施顯然降低了發生這種情況的風險。 值得注意的是,成功的攻擊會使攻擊者花費一個塊,他們需要通過不傳播它來“犧牲”一個塊,而是僅將其轉讓給被攻擊的節點。
(4)替代歷史攻擊。即使商家等待一些確認,這種攻擊也有機會成功,但風險較高。攻擊者向商家提交支付的交易,同時私下挖掘其中包含欺詐性雙重支出交易的分支。等待n次確認后,商家發送產品。如果攻擊者此時碰巧找到n個以上的區塊,他就會釋放他的分支并重新獲得他的硬幣。
(5)51%攻擊。(中)篇詳細介紹過51%攻擊問題,不再贅述。如果攻擊者控制全網算力的一半以上,則前面提到的替代歷史攻擊有100%的概率成功。由于攻擊者可以比網絡的其他部分更快地生成塊,所以他可以堅持自己的私有分支,直到它比誠實節點網絡建立的分支更長,它將代替主鏈。
(6)交易延展性攻擊。延展性攻擊者偵聽P2P網絡中的交易,利用交易簽名算法的特征修改原交易中的input 簽名, 生成擁有一樣input和output的新交易,然后廣播到網絡中形成雙花,這樣原來的交易就可能有一定的概率不能被確認,在虛擬貨幣交易的情況下,它可以被用來進行二次存款或雙重提現。
(7)驗證繞過。驗證機制的代碼是區塊鏈應用的核心之一,一旦出現問題將直接導致區塊鏈的數據混亂,而且核心代碼的修改與升級都涉及到區塊鏈分叉的問題,所以驗證機制的嚴謹性就顯得尤為重要。必須要結合驗證機制代碼的語言特性來進行大量的白盒審計或是模糊測試,來保證驗證機制的不可繞過。例如2010年8月15日,有人在比特幣區塊鏈的第74638塊上發現了一條讓人驚愕的交易,這筆交易里竟然出現了184,467,440,737.09551616個比特幣,其中各有922億個比特幣被發送到兩個比特幣地址。這次攻擊的根本原因則是比特幣的驗證機制中存在大整數溢出漏洞,由于大整數溢出為負數,網絡各個節點對黑客的交易均驗證通過,導致了比特幣區塊鏈中憑空出現了大量比特幣。
四、針對共識機制的攻擊
1. 短距離攻擊
此類攻擊比較典型的是“賄賂攻擊”,此攻擊主要影響PoS共識機制,賄賂攻擊流程如下:
1)攻擊者購買某個商品或服務。
2)商戶開始等待網絡確認這筆交易。
3)此時,攻擊者開始在網絡中首次宣稱,對目前相對最長的不包含這次交易的主鏈進行獎勵。
4)當主鏈足夠長時,攻擊者開始放出更大的獎勵,獎勵那些在包含此次交易的鏈條中挖礦的礦工。
5)六次確認達成后,放棄獎勵。
6)貨物到手,同時放棄攻擊者選中的鏈條。
因此,只要此次賄賂攻擊的成本小于貨物或者服務費用,此次攻擊就是成功的。相比之下,PoW 機制中賄賂攻擊就需要賄賂大多數礦工,因此成本極高,難以實現。
2. 長距離攻擊
此類攻擊比較典型的是“51%”攻擊。雖然某一個節點控制了 51% 及以上算力,就有能力篡改賬本,但達到 51% 算力是件極其困難的事情。而在 PoS 中缺乏對算力的約束,那么就存在潛在可能篡改賬本。
3. 幣齡累計攻擊
在最早的 Peercoin 版本中,挖礦難度不僅與當前賬戶余額有關,也與每個幣的持幣時間掛鉤。這就導致,部分節點在等待足夠長時間后,就有能力利用 Age 的增加來控制整個網絡,產生非常顯著的影響。
4. 預計算攻擊
當 PoS 中的某一節點占有了一定量的算力后,PoS 中占有特定算力的節點,就有能力通過控制 Hprev 來使自己所在算力范圍有能力去計算 Hnext。
5. 女巫攻擊
又稱Sybil攻擊,在Sybil攻擊中,攻擊者通過創建大量的假名標識來破壞對等網絡的信譽系統,使用它們獲得不成比例的大的影響。對等網絡上的實體是能夠訪問本地資源的一塊軟件。實體通過呈現身份在網絡上通告自身。多于一個標識可以對應于單個實體。換句話說,身份到實體的映射是多對一的。對等網絡中的實體為了冗余,資源共享,可靠性和完整性而使用多個標識。在對等網絡中,身份用作抽象,使得遠程實體可以知道身份而不必知道身份與本地實體的對應關系。默認情況下,通常假定每個不同的標識對應于不同的本地實體。實際上,許多身份可以對應于相同的本地實體。對手可以向對等網絡呈現多個身份,以便出現并充當多個不同的節點。因此,對手可能能夠獲得對網絡的不成比例的控制水平,例如通過影響投票結果。
五、針對應用層的攻擊
應用層安全主要囊括涉及數字貨幣交易,管理著大量資金的交易所等中心化節點的安全問題。這些節點處在整個區塊鏈網絡的單點失敗處,攻擊收益高而成本低,是攻擊者們的首選目標。
1. 交易所服務器未授權訪問
交易所往往存放著大量資金,極易成為被攻擊目標。一旦獲得交易所服務器權限或訪問,修改關鍵信息,攻擊者便可盜取資金密鑰、篡改交易金額或者泄漏敏感信息等,給交易所造成經濟和名譽上的毀滅性打擊。
2. 交易所DDoS攻擊
據Incapsula2017年Q3季度DDoS威脅報告分析稱,盡管其行業規模依然相對較小,比特幣已經成為十大最容易被DDoS攻擊的行業之一 。這一定程度反映了整個區塊鏈行業面臨著嚴峻的DDoS攻擊安全挑戰。
六、針對合約層的攻擊
在使用類似Ethereum,EOS,Zilliqa等DApp開發平臺進行智能合約及DApp應用項目開發時,需要尤其注意合約的安全性。由于區塊鏈不可篡改的特點,使得智能合約一旦發布極難修改,合約的安全與否往往決定了一個項目的生死。合約開發者應該充分重視并在部署合約前做好智能合約的安全審計工作。
針對合約層的攻擊主要是重入攻擊,即Reentrancy攻擊,本質是劫持合約控制流,破壞事務原子性,可以理解為一種邏輯上的條件競爭問題。
The DAO是一個眾籌合約,在2016年6月18日被攻擊前募集了$150M。攻擊者利用合約中的漏洞發動了Reentrancy攻擊,獲得了$60M。為了追回這部分資金,以太坊社區決定進行硬分叉,在新分支中回滾自攻擊開始后的所有交易記錄并修復合約漏洞, 但因為此舉違背了‘Code is law’精神,部分成員拒絕新分支,導致最終形成了兩個分支。舊分支稱為以太坊經典(Ethereum Classic/ETC),新分支為現行以太坊。攻擊者最終離開以太坊經典,帶走了數千萬美元。
總結與展望
總體而言,區塊鏈的發展引起了產業界與學術界的廣泛關注,盡管其不斷得到研究與應用,但是目前區塊鏈技術在系統安全何應用安全等方面都存在著很多亟待解決的問題。這些問題也是區塊鏈技術應用于更多核心領域時需要重視且解決的關鍵問題,值得進一步探索與深入研究。
評論
查看更多