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