劉 亞,沈致遠(yuǎn),趙逢禹
(上海理工大學(xué) 光電信息與計(jì)算機(jī)工程學(xué)院,上海 200093)
2008年,中本聰(Nakamoto)提出一種分散式數(shù)字貨幣比特幣,比特幣自2009年部署以來(lái)已引起學(xué)術(shù)界和行業(yè)的廣泛關(guān)注.截至2018年4月,比特幣市值約為1500億美元,每天確認(rèn)交易總數(shù)超過(guò)15萬(wàn)筆,是迄今為止最成功的加密貨幣,加密貨幣也因此備受學(xué)術(shù)界關(guān)注[1].作為比特幣的核心技術(shù),區(qū)塊鏈在金融業(yè)、農(nóng)業(yè)、醫(yī)學(xué)、軍事、工業(yè)等多個(gè)領(lǐng)域得到了廣泛地應(yīng)用[2-4].而共識(shí)機(jī)制作為區(qū)塊鏈的核心技術(shù),是區(qū)塊鏈安全的基礎(chǔ)和研究重點(diǎn),加強(qiáng)對(duì)共識(shí)機(jī)制的研究可以完善現(xiàn)有的區(qū)塊鏈系統(tǒng),豐富其附加的生態(tài)環(huán)境.共識(shí)機(jī)制源于分布式計(jì)算,其目標(biāo)致力于分布式節(jié)點(diǎn)針對(duì)某個(gè)特定的問(wèn)題達(dá)成一致的意見(jiàn),而其在區(qū)塊鏈中則為區(qū)塊信息一致意見(jiàn)的達(dá)成.共識(shí)機(jī)制最早源于“兩將軍問(wèn)題”[5],隨后演化為“拜占庭將軍問(wèn)題”[6],為了解決這個(gè)問(wèn)題,拜占庭容錯(cuò)協(xié)議(Practical byzantine fault tolerance,PBFT)算法被提出[7].比特幣是采用了工作量證明(Proof of Work,PoW)的區(qū)塊鏈協(xié)議,節(jié)點(diǎn)通過(guò)“挖礦”來(lái)達(dá)到共識(shí).盡管工作量證明協(xié)議標(biāo)志著分布式共識(shí)的重大突破,但依賴昂貴的工作量證明組件會(huì)導(dǎo)致能源的巨大浪費(fèi).因此,找到一種比工作量證明耗費(fèi)能源少的共識(shí)機(jī)制迫在眉睫.
權(quán)益證明(Proof of Stake,PoS)作為最有潛力的替代工作量證明的共識(shí)機(jī)制被學(xué)術(shù)界廣泛研究,如Ouroboros[8]和Snow White[9].與此同時(shí),委員會(huì)制度的共識(shí)機(jī)制如Algorand[10],空間證明的共識(shí)機(jī)制如Spacemint[11],時(shí)空證明的共識(shí)機(jī)制(Proof 嗎,of Space Time)[12],權(quán)益委托證明(Delegated Proof of Stake)[13]等共識(shí)機(jī)制為區(qū)塊鏈的發(fā)展提供了更多的選擇,PBFT算法近些年來(lái)也逐步得到完善[14].在這些共識(shí)機(jī)制中,權(quán)益證明為非授權(quán)共識(shí)機(jī)制,不僅方便部署而且能被應(yīng)用在去中心化的場(chǎng)景中,是替代工作量證明最有潛力的共識(shí)機(jī)制之一.
權(quán)益證明共識(shí)機(jī)制要求協(xié)議滿足活性(Liveness)和一致性(Persistence)[15]的條件.相對(duì)于比特幣工作量證明的共識(shí)機(jī)制,權(quán)益證明能源消耗小且更穩(wěn)定,它不用“挖礦”的權(quán)益證明,從而不需要耗費(fèi)大量電力和能源.此外,權(quán)益證明更加去中心化,基于它的加密貨幣對(duì)計(jì)算機(jī)硬件基本上沒(méi)有過(guò)高要求,只要擁有一定量的權(quán)益,所有參與節(jié)點(diǎn)都可以參與“挖礦”工作,不用擔(dān)心中心化礦池的出現(xiàn),也可以避免緊縮導(dǎo)致的貨幣貶值.
繼比特幣之后,很多新型的數(shù)字貨幣采用權(quán)益證明機(jī)制,而且很多采用工作量證明機(jī)制的數(shù)字貨幣,也紛紛修改協(xié)議采用權(quán)益證明機(jī)制,譬如以太坊宣布在2020年底完成了從工作量證明到權(quán)益證明的改變.然而PoS在現(xiàn)有的區(qū)塊鏈共識(shí)協(xié)議中占比并不高,且在現(xiàn)存數(shù)字貨幣市場(chǎng)中占比不到總值的2%,最重要的原因是現(xiàn)有的權(quán)益證明協(xié)議存在各種缺點(diǎn),面臨許多安全性威脅,因此加強(qiáng)對(duì)權(quán)益證明協(xié)議安全性方面的研究迫在眉睫.下面將簡(jiǎn)述基于PoS的協(xié)議以及對(duì)其攻擊.
2008年,研究者提出了針對(duì)工作量證明的攻擊:51%攻擊和雙花攻擊[16],此攻擊也同樣適用于基于權(quán)益證明的協(xié)議.隨后Kwon提出無(wú)法同步攻擊[17].2012年,Sunny和Scott提出了首次使用權(quán)益證明共識(shí)機(jī)制的數(shù)字貨幣PeerCoin[18],它采用了幣齡的概念,但當(dāng)節(jié)點(diǎn)持有貨幣數(shù)量越多時(shí)間越長(zhǎng),越容易被選為領(lǐng)導(dǎo)節(jié)點(diǎn).針對(duì)幣齡,King和Nadal提出了幣齡積累攻擊[19].為了解決幣齡的安全問(wèn)題,2014年P(guān)avel提出了數(shù)字貨幣Blackcoin[20],它修改了Peercoin中的領(lǐng)導(dǎo)篩選函數(shù),刪除了幣齡的概念.Peercoin所運(yùn)用的基于權(quán)益證明的共識(shí)機(jī)制也被稱為第2代權(quán)益證明(Proofof Stake2.0).同年,研究者還提出了研磨攻擊[20]和長(zhǎng)程攻擊[21],此前提出的協(xié)議均不能抵抗上述兩種攻擊.2015年研究者提出了活性拒絕攻擊、日食攻擊[22]和交易拒絕攻擊[23],PeerCoin以及Blackcoin均不能抵抗上述3種攻擊.2016年,Silvio提出了加密貨幣Algorand[10],它沒(méi)有采用權(quán)益證明共識(shí)機(jī)制,而是采用了單一委員會(huì)共識(shí)機(jī)制,即所有在線節(jié)點(diǎn)首先選舉出一個(gè)委員會(huì)的集合,然后委員會(huì)中的節(jié)點(diǎn)采用PBFT共識(shí)算法確定下一個(gè)區(qū)塊,并廣播給其他節(jié)點(diǎn).此共識(shí)機(jī)制為后來(lái)的權(quán)益證明共識(shí)機(jī)制奠定了基礎(chǔ).接下來(lái),Elaine提出了全新的共識(shí)機(jī)制(Sleepy Consensus),參與節(jié)點(diǎn)被形象地劃分為在線(Awake/active)和離線(Asleep)兩種類型,并且節(jié)點(diǎn)的類型可以相互轉(zhuǎn)變;Phil等人提出的SnowWhite[9]則采用了此模型來(lái)描述參與節(jié)點(diǎn)的類型.同年,研究者提出了賄賂攻擊,PeerCoin以及Blackcoin均不能抵抗上述兩個(gè)攻擊.2016年,Aggelos等人提出了Ouroboros協(xié)議[8],這是一種可證明安全性的權(quán)益證明共識(shí)機(jī)制.此后,他們于2017年弱化了Ouroboros中參與節(jié)點(diǎn)的條件提出了改進(jìn)版協(xié)議OuroborosPraos[24].同年,研究者提出了無(wú)利害攻擊[25]、勸阻攻擊[26]、歷史多數(shù)攻擊[8]和變節(jié)攻擊[9],此前提出的協(xié)議PeerCoin以及Blackcoin均不能抵抗上述攻擊.2018年,Aggelos等人提出的Ouroboros Genesis[27]協(xié)議,該協(xié)議參考了SnowWhite的節(jié)點(diǎn)模型(1)https://www.chainnode.com/post/342784,給予了參與者更自由地在線時(shí)間.2019年,研究者提出了權(quán)益竊取攻擊[28]以及基于日食攻擊的權(quán)益竊取攻擊[29],此前提出的Ouroboros不能抵抗上述兩種攻擊.
當(dāng)前,已經(jīng)有一些針對(duì)PoS共識(shí)機(jī)制攻擊的研究.Deirmentzoglou等人[30]介紹了部分針對(duì)共識(shí)機(jī)制的攻擊和應(yīng)對(duì)措施,并詳細(xì)整理了針對(duì)權(quán)益證明共識(shí)機(jī)制的長(zhǎng)程攻擊,以及現(xiàn)有的應(yīng)對(duì)措施.Natoli等人[31]詳細(xì)解析了區(qū)塊鏈現(xiàn)有的共識(shí)機(jī)制,并給出了系統(tǒng)的分析.Ivan等人[32]解析了區(qū)塊鏈的不同種類的安全性問(wèn)題、安全威脅以及相應(yīng)的應(yīng)對(duì)措施.譚春橋等人[33]優(yōu)化了基于權(quán)益證明的區(qū)塊鏈網(wǎng)絡(luò).
本文首先對(duì)權(quán)益證明共識(shí)機(jī)制進(jìn)行了系統(tǒng)介紹,并將主要功能函數(shù)進(jìn)行符號(hào)化表示;其次,按照攻擊特性和攻擊原理,將現(xiàn)有針對(duì)權(quán)益證明共識(shí)機(jī)制的攻擊分為區(qū)塊生成函數(shù)攻擊、岔鏈攻擊、高權(quán)益敵手攻擊和積累權(quán)益攻擊等4類攻擊;最后,總結(jié)了每種攻擊的原理,詳細(xì)描述了攻擊的具體步驟以及攻擊影響,并通過(guò)圖示的方式闡述攻擊基本流程.最后,總結(jié)了針對(duì)每種攻擊現(xiàn)有的應(yīng)對(duì)措施,并介紹了應(yīng)對(duì)措施背后原理和應(yīng)用場(chǎng)景.
本部分主要講解權(quán)益證明的基本流程和一些基本的概念,并對(duì)文中所使用的符號(hào)進(jìn)行說(shuō)明.
1)主鏈CB0B1…Bm,其中B0為創(chuàng)世塊.記len(C)表示主鏈C的長(zhǎng)度,這里len(C)=m+1.
2)UP表示所有節(jié)點(diǎn)集合,Palert表示當(dāng)前所有在線誠(chéng)實(shí)節(jié)點(diǎn),A表示敵手控制的所有節(jié)點(diǎn)的集合,Ponline表示當(dāng)前所有在線節(jié)點(diǎn)包括所誠(chéng)實(shí)節(jié)點(diǎn)以及敵手.
5)fee(tx,P)表示交易tx來(lái)自節(jié)點(diǎn)集合P的交易費(fèi)用,fee(tx)表示交易tx中的所有交易費(fèi)用.
2.2.1 時(shí)間模型
協(xié)議的執(zhí)行時(shí)間被分割成單獨(dú)的時(shí)間段sl,每一個(gè)時(shí)間段包含了一個(gè)完整的協(xié)議運(yùn)行過(guò)程,且與每一個(gè)區(qū)塊B所對(duì)應(yīng)(如果有區(qū)塊產(chǎn)生),多個(gè)時(shí)間段構(gòu)成一個(gè)時(shí)期ep,初始時(shí)段值sl0=0,時(shí)期值ep0=0.所有的參與者的時(shí)間段是同步的,即在同一時(shí)刻所有的誠(chéng)實(shí)參與者的時(shí)間段參數(shù)sl是相同的.并且參與者知道自己所處的時(shí)期和時(shí)間段,才能正確地參與協(xié)議執(zhí)行,否則被視為敵手.
2.2.2 節(jié)點(diǎn)模型
節(jié)點(diǎn)可以參與協(xié)議的運(yùn)行,也可以保持離線狀態(tài)或在線但不參與協(xié)議的執(zhí)行,但只有在線了一段時(shí)期的誠(chéng)實(shí)節(jié)點(diǎn)才會(huì)被視為有效參與者(Alert party).所有的在線節(jié)點(diǎn)被稱為活躍節(jié)點(diǎn)(Active party),且都知曉其它節(jié)點(diǎn)的公鑰.
2.2.3 協(xié)議的初始化
創(chuàng)世塊(Genesis block)為區(qū)塊鏈的第一個(gè)區(qū)塊B0,包含了協(xié)議執(zhí)行的重要信息,如初始參與者的權(quán)益信息以及他們所對(duì)應(yīng)的公鑰.初始權(quán)益持有者通過(guò)協(xié)商并啟動(dòng)區(qū)塊鏈的執(zhí)行,他們都知曉自己所擁有的權(quán)益信息以及其他初始權(quán)益持有者的權(quán)益信息.
2.2.4 區(qū)塊發(fā)布模型
在每一個(gè)時(shí)間段中,所有參與節(jié)點(diǎn)會(huì)隨機(jī)地被選舉為這個(gè)時(shí)段的領(lǐng)導(dǎo)者(Slot leader),負(fù)責(zé)區(qū)塊的創(chuàng)建以及分發(fā).節(jié)點(diǎn)所持有權(quán)益比和被選為領(lǐng)導(dǎo)者的概率相同,并且權(quán)益比可用于計(jì)算選舉證明.如果節(jié)點(diǎn)在本時(shí)段的選舉證明小于閾值,則表明他成功的被選舉成為這個(gè)時(shí)間段的領(lǐng)導(dǎo)者.
2.2.5 模型假設(shè)
如同工作量證明公式機(jī)制,權(quán)益證明協(xié)議能成功的執(zhí)行的前提為在線誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益比要不少于50%,以此保證區(qū)塊鏈的安全性.
權(quán)益證明共識(shí)機(jī)制執(zhí)行當(dāng)中所需函數(shù)定義如下:
1)接收函數(shù)為Rec(P,Pother)=(C1,C2,…Cn,tx),其中P為調(diào)用函數(shù)的節(jié)點(diǎn),Pother為其他參與者集合,(C1,C2,…Cn)為每一個(gè)節(jié)點(diǎn)在這個(gè)時(shí)段收到的區(qū)塊信息,tx為交易信息.
2)選舉函數(shù)為Eli(Tep,pk,Sep,seed)=(y,σ),它是基于子函數(shù)f(·)來(lái)實(shí)現(xiàn),f(·)通常為哈希函數(shù).參與者將公鑰pk和隨機(jī)數(shù)seed作為輸入,將輸出值和閾值進(jìn)行比較,如果滿足f(pk,seed) 3)區(qū)塊生成函數(shù)為Gen(B′,(y,σ),pk,sig,tx)=B,每一個(gè)被選為領(lǐng)導(dǎo)的節(jié)點(diǎn),調(diào)用此函數(shù),產(chǎn)生一個(gè)新的區(qū)塊,并且用私鑰對(duì)其簽名,B為生成的新區(qū)快.區(qū)塊包含但不限于這些信息:前一個(gè)區(qū)塊的哈希值hash(B′)、節(jié)點(diǎn)選為領(lǐng)導(dǎo)的證明(y,σ)、節(jié)點(diǎn)的公鑰pk、節(jié)點(diǎn)的簽名sig和交易信息集合tx. 4)驗(yàn)證函數(shù)為Val(B,pk,Tep,Sep,seed,Cloc)=True/False,每一個(gè)節(jié)點(diǎn)在接收一個(gè)新的區(qū)塊時(shí)需要驗(yàn)證這個(gè)區(qū)塊的合法性.驗(yàn)證通常分為兩部分,節(jié)點(diǎn)領(lǐng)導(dǎo)者身份的正確性以及區(qū)塊的合法性.驗(yàn)證領(lǐng)導(dǎo)者身份需利用本地所擁有的區(qū)塊鏈C得到前一個(gè)區(qū)塊的哈希值h,運(yùn)行選舉函數(shù)Eli(·)得到身份信息,并和B中的信息進(jìn)行比較.驗(yàn)證區(qū)塊合法性主要判斷簽名的正確性,以及其它參數(shù)的合法性. 5)篩選函數(shù)為Sel(Cloc,C1,C2,…Cn)=Cmax,當(dāng)同時(shí)收到多個(gè)不同的鏈{C1,C2,…Cn}時(shí),需要對(duì)比篩選出最合適的一條鏈.通常依照最長(zhǎng)鏈原則返回最長(zhǎng)的一條鏈Cmax. 基于上述函數(shù)的權(quán)益證明共識(shí)機(jī)制的執(zhí)行過(guò)程分為以下4步: 1)所有節(jié)點(diǎn)調(diào)用接收函數(shù)Rec(·)收集網(wǎng)絡(luò)中廣播的鏈{C1,C2,…Cn}以及交易信息tx; 2)收集到信息的節(jié)點(diǎn)利用驗(yàn)證函數(shù)Val(·)在集合{C1,C2,…Cn}中篩選出最長(zhǎng)合法鏈并運(yùn)行Sel(·)更新本地鏈Cloc; 3)擁有最新鏈的節(jié)點(diǎn)利用隨機(jī)數(shù)因子seed執(zhí)行選舉函數(shù)Eli(·)輸出y,σ,判斷自己是否被選為這個(gè)時(shí)段領(lǐng)導(dǎo).如果y 4)被選為領(lǐng)導(dǎo)的節(jié)點(diǎn),執(zhí)行Gen(·)函數(shù),寫(xiě)入Cloc的最后一個(gè)區(qū)塊的哈希值和交易信息tx等,并廣播包含新區(qū)塊的本地鏈,結(jié)束本次協(xié)議執(zhí)行,等待下一個(gè)時(shí)段開(kāi)始. 仔細(xì)分析了針對(duì)PoS共識(shí)機(jī)制的攻擊的原理、基本流程和執(zhí)行過(guò)程,根據(jù)攻擊的主要特性,將其分為4類:區(qū)塊生成函數(shù)攻擊、岔鏈攻擊、高權(quán)益敵手攻擊和積累權(quán)益攻擊.闡述每種攻擊的基本原理和攻擊過(guò)程,并通過(guò)圖示介紹攻擊的基本流程,最后介紹針對(duì)每種攻擊現(xiàn)有的防御措施.在所有的攻擊模型中,假設(shè)敵手均在第r時(shí)段對(duì)主鏈C發(fā)動(dòng)攻擊,且初始敵手權(quán)益小于誠(chéng)實(shí)節(jié)點(diǎn)權(quán)益總和. 敵手針對(duì)權(quán)益證明共識(shí)機(jī)制的區(qū)塊生成過(guò)程發(fā)動(dòng)攻擊,利用協(xié)議執(zhí)行中存在的漏洞獲利或者影響協(xié)議的正常運(yùn)行流程. 3.1.1 研磨攻擊 1)攻擊描述 圖1 研磨攻擊 2)應(yīng)對(duì)措施 3.1.2 幣齡攻擊 1)攻擊描述 2)應(yīng)對(duì)措施 幣齡積累攻擊產(chǎn)生的原因?yàn)?,幣齡在設(shè)計(jì)時(shí)沒(méi)有最大上線,導(dǎo)致攻擊者有機(jī)可乘,Vasin提出將幣齡設(shè)置有最大上線[9],從而防止了這類攻擊.當(dāng)前大部分的權(quán)益證明共識(shí)協(xié)議中,已不再使用幣齡. 3.1.3 交易拒絕攻擊 1)攻擊描述 Vitalik于2015在以太坊論壇年提出了交易拒絕攻擊[23],其基本原理是每一個(gè)成為領(lǐng)導(dǎo)的節(jié)點(diǎn)都擁有發(fā)布下一個(gè)區(qū)塊的權(quán)利,他將其所收集的交易寫(xiě)入自己發(fā)布的區(qū)塊中,但也可以拒絕寫(xiě)入.如果多個(gè)節(jié)點(diǎn)聯(lián)合起來(lái)拒絕寫(xiě)入同一筆交易,此交易將會(huì)被延遲,影響區(qū)塊鏈的活性.被拒絕的節(jié)點(diǎn)可能因?yàn)榇祟惞舨辉偈褂么藚^(qū)塊鏈,最終導(dǎo)致區(qū)塊鏈?zhǔn)セ盍?,并且使用者?shù)量的減少也將導(dǎo)致持有者的權(quán)益漸漸失去實(shí)際價(jià)值.每個(gè)惡意節(jié)點(diǎn)在運(yùn)行區(qū)塊創(chuàng)建函數(shù)Gen(B′,(y,σ),pk,sig,tx)時(shí),寫(xiě)入的交易信息tx不包含特定的交易信息,這些未寫(xiě)入的交易信息會(huì)被滯后一定的時(shí)段. 2)應(yīng)對(duì)措施 面對(duì)交易拒絕攻擊,Kiayias等人提出的Ouroboros[8]對(duì)區(qū)塊鏈的活性(Liveness)進(jìn)行了分析,區(qū)塊鏈活性的假設(shè)保證所有合法交易最終會(huì)被寫(xiě)入主鏈,此類攻擊在協(xié)議設(shè)計(jì)時(shí)已經(jīng)被考慮,只要存在持有一定權(quán)益比例的誠(chéng)實(shí)節(jié)點(diǎn),所有合法的交易就會(huì)被接納到這些節(jié)點(diǎn)所發(fā)布的區(qū)塊當(dāng)中,并被寫(xiě)入主鏈.Zamfir提出了懲罰機(jī)制也可以應(yīng)對(duì)這種攻擊[34].他們通過(guò)檢測(cè)到參與此類攻擊的節(jié)點(diǎn)會(huì)受到懲罰,沒(méi)有按照交易到達(dá)的正常順序發(fā)布區(qū)塊的節(jié)點(diǎn),將被去除委員會(huì)的身份或者被剝奪所有權(quán)益.此外,區(qū)塊鏈在設(shè)計(jì)時(shí)就考慮隱私保護(hù),利用匿名交易保護(hù)交易者的身份[35].交易者廣播的交易為加密的,節(jié)點(diǎn)的領(lǐng)導(dǎo)無(wú)法得知交易的具體信息,不能辨別交易者的身份,從而避免了交易信息被惡意延后的情況. 攻擊者利用岔鏈發(fā)動(dòng)攻擊,使得主鏈發(fā)生分叉或者使長(zhǎng)于主鏈的岔鏈替代主鏈.這種攻擊不但會(huì)影響共識(shí)速率,甚至?xí)拐\(chéng)實(shí)節(jié)點(diǎn)的工作無(wú)效. 3.2.1 賄賂攻擊 1)攻擊描述 2)應(yīng)對(duì)措施 所有的節(jié)點(diǎn)領(lǐng)導(dǎo)都是權(quán)益持有者,如果區(qū)塊鏈?zhǔn)艿焦魰?huì)使得權(quán)益持有者的利益下降,那么他們將無(wú)法獲得正常運(yùn)行所得到的利益.單純從利益的角度考慮,節(jié)點(diǎn)領(lǐng)導(dǎo)不會(huì)主動(dòng)發(fā)起攻擊.如果攻擊者給予節(jié)點(diǎn)領(lǐng)導(dǎo)多于正常運(yùn)行所得到的獎(jiǎng)勵(lì),那么節(jié)點(diǎn)領(lǐng)導(dǎo)存在動(dòng)機(jī)對(duì)網(wǎng)絡(luò)發(fā)動(dòng)攻擊.然而能發(fā)動(dòng)攻擊的節(jié)點(diǎn)都是在網(wǎng)絡(luò)中持有一定比例權(quán)益的節(jié)點(diǎn)領(lǐng)導(dǎo),他們?cè)诰W(wǎng)絡(luò)中都投入了相當(dāng)比例的資產(chǎn),產(chǎn)生一個(gè)分叉的區(qū)塊會(huì)使得鏈變得不穩(wěn)定,最終導(dǎo)致權(quán)益持有者的利益受損,甚至消失,而攻擊所帶來(lái)的收益,會(huì)遠(yuǎn)小于自己的損失.因此從利益角度考慮,基于權(quán)益證明的區(qū)塊鏈系統(tǒng)不易受到這類攻擊的影響. 3.2.2 無(wú)利害關(guān)系攻擊 1)攻擊描述 圖2 無(wú)利害關(guān)系攻擊 2)應(yīng)對(duì)措施 Kiayias等人引入了懲罰機(jī)制[8],節(jié)點(diǎn)如果被檢測(cè)到參與惡意攻擊,節(jié)點(diǎn)的驗(yàn)證者身份將被撤銷,從而失去未來(lái)所有獲利.這個(gè)節(jié)點(diǎn)通過(guò)無(wú)利害攻擊的收益遠(yuǎn)遠(yuǎn)小于收到的懲罰,因此可以杜絕無(wú)利害攻擊的發(fā)生.Buterin和Griffith提出權(quán)益凍結(jié)(state freezing)和懲罰機(jī)制的概念[37],權(quán)益凍結(jié)的原理為網(wǎng)絡(luò)會(huì)將某個(gè)時(shí)期的權(quán)益暫時(shí)存儲(chǔ)作為一個(gè)檢查點(diǎn),如果在未來(lái)的某個(gè)時(shí)期發(fā)現(xiàn)問(wèn)題,那么所有節(jié)點(diǎn)回滾到之前的凍結(jié)權(quán)益.Daian[9]提出的應(yīng)對(duì)措施為,如果節(jié)點(diǎn)被檢測(cè)到在相同鏈高(鏈上相同的位置)發(fā)布兩個(gè)或兩個(gè)以上的區(qū)塊,這個(gè)節(jié)點(diǎn)的收益將會(huì)被沒(méi)收. 3.2.3 歷史多數(shù)攻擊 1)攻擊描述 2)應(yīng)對(duì)措施 3.2.4 長(zhǎng)程攻擊 1)攻擊描述 圖3 長(zhǎng)程攻擊 2)應(yīng)對(duì)措施 長(zhǎng)程攻擊在所有攻擊方式中最具影響力,其防御措施被學(xué)術(shù)界廣泛研究,方案大致分為5種,具體如下. ①充裕法則 Badertscher等人[38]提出了篩選函數(shù)不再使用最長(zhǎng)鏈原則,利用此篩選規(guī)則可以有效地避免長(zhǎng)程攻擊.具體來(lái)說(shuō),記C[0:k]為鏈C中時(shí)段0到時(shí)段k的所有區(qū)塊,當(dāng)產(chǎn)生的分叉不大于安全參數(shù)k時(shí),使用最長(zhǎng)鏈原則,否則比較C[0:j+s]以及Clon[0:j+s]二者的長(zhǎng)度,將較長(zhǎng)的作為目標(biāo)鏈,j為二者擁有最后一個(gè)相同區(qū)塊的時(shí)段,s為安全性參數(shù).基于誠(chéng)實(shí)節(jié)點(diǎn)持有大多數(shù)權(quán)益的假設(shè),誠(chéng)實(shí)節(jié)點(diǎn)所控制的鏈增長(zhǎng)速率應(yīng)快于敵手的鏈,所以誠(chéng)實(shí)節(jié)點(diǎn)控制的鏈應(yīng)為C[0:j+s]與Clon[0:j+s]中增長(zhǎng)速率更快、鏈長(zhǎng)更長(zhǎng)的一個(gè). ②移動(dòng)檢測(cè)節(jié)點(diǎn) King和Nadal 在Peercoin中使用校準(zhǔn)節(jié)點(diǎn)限制長(zhǎng)程攻擊[19].網(wǎng)絡(luò)中的鏈只有最后的多個(gè)區(qū)塊是可以變動(dòng)的,之前的所有區(qū)塊都不可以修改.校準(zhǔn)節(jié)點(diǎn)限制了長(zhǎng)程攻擊的攻擊范圍,無(wú)法利用從創(chuàng)世塊生成的私鏈來(lái)替代主鏈,主鏈上在最后n個(gè)區(qū)塊之前的所有區(qū)塊不可篡改.Peercoin中限制的范圍為最后1個(gè)月時(shí)限內(nèi)的區(qū)塊[19],NXT社區(qū)建議限制的范圍為最后幾天或者等價(jià)的幾個(gè)小時(shí)內(nèi)的區(qū)塊[39]. ③情境感知交易 在交易中寫(xiě)之前區(qū)塊的交易信息或者區(qū)塊信息,敵手無(wú)法利用長(zhǎng)程攻擊將這些寫(xiě)有區(qū)塊信息的交易再列入攻擊鏈中,生成新鏈替代主鏈.Larimer[40]在每一筆的交易中都寫(xiě)有之前區(qū)塊的哈希信息,Coleman[41]在每個(gè)交易寫(xiě)有交易的時(shí)間信息且與其對(duì)應(yīng)的時(shí)段綁定.通過(guò)寫(xiě)入特定信息,敵手無(wú)法將主鏈的交易信息加入支鏈當(dāng)中,但如果敵手生成一條從創(chuàng)世塊開(kāi)始的區(qū)塊鏈,包含全新的交易信息依舊可以達(dá)到長(zhǎng)程攻擊的效果,但難度大大增加.情境感知交易是一種有效限制長(zhǎng)程攻擊的方式之一. ④經(jīng)濟(jì)定局 Zamfir和Buterin分別提出懲罰機(jī)制(Slashing)[34,42],如果時(shí)段領(lǐng)導(dǎo)的行為導(dǎo)致權(quán)益持有者的貨幣損失,這些有不正當(dāng)行為的時(shí)段領(lǐng)導(dǎo)會(huì)受到懲罰.時(shí)段領(lǐng)導(dǎo)如果被檢測(cè)到在相同鏈高(鏈的相同位置)的多個(gè)區(qū)塊驗(yàn)證通過(guò)信息,他的持有權(quán)益將被清零,同時(shí)領(lǐng)導(dǎo)身份也有可能被撤銷.因?yàn)橄嗤瑫r(shí)段領(lǐng)導(dǎo)在相同鏈高度只能發(fā)布一個(gè)區(qū)塊,在相同的位置僅存在一個(gè)區(qū)塊,所以誠(chéng)實(shí)時(shí)段領(lǐng)導(dǎo)只能通過(guò)一個(gè)區(qū)塊.長(zhǎng)程攻擊需要生成一條不同于主鏈的私鏈,當(dāng)時(shí)段領(lǐng)導(dǎo)參與了主鏈的驗(yàn)證工作,便無(wú)法再參與私鏈的驗(yàn)證工作,否則會(huì)面臨失去權(quán)益的懲罰,雖然在相同的鏈高可能存在未參與主鏈的驗(yàn)證者,但懲罰機(jī)制已經(jīng)很大程度上降低了長(zhǎng)程攻擊的成功率. ⑤可信任執(zhí)行環(huán)境 Li[43]利用可信任執(zhí)行環(huán)境(TEE)技術(shù)來(lái)應(yīng)對(duì)長(zhǎng)程攻擊,部分運(yùn)算過(guò)程安全執(zhí)行,使得敵手無(wú)法針對(duì)這部分的運(yùn)算過(guò)程發(fā)動(dòng)攻擊.利用TEE實(shí)現(xiàn)簽名過(guò)程,保護(hù)簽名密鑰,使得敵手無(wú)法對(duì)簽名過(guò)程發(fā)動(dòng)攻擊獲得簽名的私鑰,進(jìn)而無(wú)法發(fā)動(dòng)長(zhǎng)程攻擊.此外,所有加入的節(jié)點(diǎn)的密鑰都是通過(guò)TEE產(chǎn)生的,保證節(jié)點(diǎn)身份的正確性. 3.2.5 基于無(wú)利害關(guān)系攻擊的雙花攻擊 1)攻擊描述 Nakamoto在設(shè)計(jì)比特幣[16]的時(shí)提出雙花攻擊,攻擊者希望將一筆金錢(qián)進(jìn)行多次花費(fèi)后,被多個(gè)收款方接受.當(dāng)多個(gè)收款方接納了來(lái)源相同的金錢(qián),攻擊成功.由于區(qū)塊在設(shè)計(jì)的時(shí)候會(huì)對(duì)相同來(lái)來(lái)源的貨幣的花費(fèi)進(jìn)行限制,因此雙花攻擊常常借助其他攻擊實(shí)現(xiàn),譬如基于無(wú)利害關(guān)系攻擊的雙花攻擊.攻擊者首先通過(guò)無(wú)利害關(guān)系攻擊生成多個(gè)分叉的鏈,在生成鏈時(shí)不同的鏈寫(xiě)入來(lái)自相同貨幣的不同交易,每條鏈都為合法的鏈,然后將這些分叉鏈廣播到網(wǎng)絡(luò)中,由于這些鏈的長(zhǎng)度相同,不同的節(jié)點(diǎn)可能會(huì)接受不同的鏈并發(fā)布新的區(qū)塊.若來(lái)自相同貨幣的不同交易會(huì)在網(wǎng)絡(luò)中存在了足夠長(zhǎng)的時(shí)間,雙花攻擊便可實(shí)現(xiàn). 2)應(yīng)對(duì)措施 Kwon[38]對(duì)不正常工作節(jié)點(diǎn)提出地懲罰機(jī)制可以有效的限制參與惡意攻擊節(jié)點(diǎn).每一個(gè)新區(qū)塊都與歷史區(qū)塊的信息相關(guān),如果某個(gè)節(jié)點(diǎn)被檢測(cè)到不正當(dāng)?shù)倪\(yùn)行行為,那么他在前2000個(gè)區(qū)塊內(nèi)的收入會(huì)全部被清除,并且發(fā)現(xiàn)異常行為的節(jié)點(diǎn)還會(huì)獲得這些收入的33%作為獎(jiǎng)勵(lì),相似的懲罰機(jī)制Buterin[37]也提出過(guò). 高權(quán)益敵手攻擊的原理為敵手通過(guò)提高自己相對(duì)于誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益比發(fā)動(dòng)攻擊,通過(guò)增加自己的權(quán)益,或者減少誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益,提高自己對(duì)鏈的控制能力.譬如:51%攻擊、活性拒絕、勸阻攻擊、日食攻擊、無(wú)法同步攻擊均有這種特性. 3.3.1 51% 攻擊 1)攻擊描述 攻擊者控制了網(wǎng)絡(luò)中多數(shù)的權(quán)益,每次都可以大概率地被選為時(shí)段的領(lǐng)導(dǎo),可以實(shí)現(xiàn)對(duì)區(qū)塊鏈網(wǎng)絡(luò)的控制.敵手可以提供分叉的鏈,使得誠(chéng)實(shí)節(jié)點(diǎn)的工作無(wú)效,甚至重新生成一條完全不同的鏈. 2)應(yīng)對(duì)措施 這類攻擊發(fā)生時(shí),通常區(qū)塊鏈網(wǎng)絡(luò)中現(xiàn)有的公鏈會(huì)被敵手產(chǎn)生的新鏈顛覆.當(dāng)權(quán)益持有者發(fā)現(xiàn)這類情況時(shí),可以鏈和社區(qū)其他誠(chéng)實(shí)節(jié)點(diǎn)來(lái)對(duì)被顛覆的主鏈進(jìn)行恢復(fù). 3.3.2 活性拒絕攻擊 1)攻擊描述 攻擊者為權(quán)益持有者,部分或者全部權(quán)益持有者拒絕產(chǎn)生新的區(qū)塊,以此影響區(qū)塊的產(chǎn)生速率,影響區(qū)塊鏈的活性(Liveness).當(dāng)多數(shù)權(quán)益持有者拒絕參與新區(qū)塊的發(fā)布工作時(shí),此時(shí)在線誠(chéng)實(shí)節(jié)點(diǎn)權(quán)益占比αH將降低,從而導(dǎo)致這個(gè)時(shí)段沒(méi)有區(qū)塊產(chǎn)生的概率增加.如果多數(shù)權(quán)益持有者長(zhǎng)期拒絕參與新區(qū)塊的發(fā)布工作,那么在相同時(shí)間段內(nèi),區(qū)塊產(chǎn)生的數(shù)量會(huì)降低,整體而言區(qū)塊的增長(zhǎng)速率會(huì)下降.這將導(dǎo)致誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益小于假設(shè)值,區(qū)塊鏈的活性會(huì)受到影響,安全性無(wú)法保證. 2)應(yīng)對(duì)措施 活性拒絕攻擊會(huì)影響區(qū)塊鏈的增長(zhǎng)速率,但不會(huì)威脅區(qū)塊鏈的安全.權(quán)益證明協(xié)議的活性假設(shè)會(huì)導(dǎo)致不活躍的節(jié)點(diǎn)的權(quán)益逐漸向活躍節(jié)點(diǎn)轉(zhuǎn)移,即使大部分的節(jié)點(diǎn)參與此類攻擊,也僅僅會(huì)導(dǎo)致不活躍的節(jié)點(diǎn)的權(quán)益向活躍節(jié)點(diǎn)轉(zhuǎn)移,參與攻擊地節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)的影響會(huì)隨著區(qū)塊鏈的延伸逐漸變?nèi)?盡管區(qū)塊鏈的活性假設(shè)未被滿足.Buterin和Griffith[27]提出了基于委員會(huì)的權(quán)益證明協(xié)議可以對(duì)拒絕參與協(xié)議執(zhí)行的節(jié)點(diǎn)進(jìn)行限制,委員會(huì)可以投票決定剔除部分不活躍的節(jié)點(diǎn),參與攻擊的節(jié)點(diǎn)驗(yàn)證者的身份和擁有的權(quán)益將受到影響,甚至權(quán)益被清空. 3.3.3 勸阻攻擊 1)攻擊描述 2017年,Vitalik提出了勸阻攻擊[26],其基本思想是攻擊者廣播自己的惡意意圖,誠(chéng)實(shí)節(jié)點(diǎn)為了避免被影響退出委員會(huì),主動(dòng)放棄驗(yàn)證者的身份,從而使攻擊者的權(quán)益占比提升,并為其他攻擊做鋪墊.攻擊者通過(guò)攻擊降低在線誠(chéng)實(shí)節(jié)點(diǎn)權(quán)益占比αH,當(dāng)誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益小于假設(shè)值時(shí),區(qū)塊鏈的安全性則無(wú)法被保證,攻擊者可以實(shí)施其他攻擊,獲得對(duì)鏈的控制.其攻擊過(guò)程如圖4所示. 圖4 勸阻攻擊 2)應(yīng)對(duì)措施 誠(chéng)實(shí)節(jié)點(diǎn)可以向其他參與者揭露攻擊者的惡意意圖,并通過(guò)委員會(huì)機(jī)制對(duì)攻擊節(jié)點(diǎn)進(jìn)行懲罰操作. 3.3.4 日食攻擊(Eclipse attacks) 1)攻擊描述 Heilman于2015年提出了日食攻擊[22],攻擊者通過(guò)控制目標(biāo)節(jié)點(diǎn)的通訊網(wǎng)絡(luò),阻擋與其余誠(chéng)實(shí)節(jié)點(diǎn)的信息傳輸,屏蔽交易信息以及區(qū)塊信息,使其直接接收到攻擊者所提供的交易以及區(qū)塊信息,讓目標(biāo)節(jié)點(diǎn)為自己的私鏈工作.被攻擊的節(jié)點(diǎn)運(yùn)行篩選函數(shù)Select(·),所篩選的鏈的集合為敵手所提供的鏈的集合{Cloc,C1,C2,…Cn},并且不包含主鏈.當(dāng)被攻擊節(jié)點(diǎn)在不知情的情況下為敵手工作時(shí),可以視為被敵手控制的節(jié)點(diǎn).如果敵手的權(quán)益比更高,區(qū)塊鏈更易受到51%攻擊. 2)應(yīng)對(duì)措施 日食攻擊需要事先知道未來(lái)的領(lǐng)導(dǎo)節(jié)點(diǎn)的分布情況,以便針對(duì)部分節(jié)點(diǎn)發(fā)動(dòng)日食攻擊,從而提高領(lǐng)導(dǎo)選擇的隨機(jī)性可以一定程度的減少日食攻擊對(duì)區(qū)塊鏈的影響.Heilman[22]指出利用調(diào)整隨機(jī)性可以減少日食攻擊的成功率,變向增強(qiáng)網(wǎng)絡(luò)抵抗日食攻擊的能力.同時(shí),他還利用冗余網(wǎng)絡(luò)讓敵手難以控制自己的通信網(wǎng)絡(luò),每個(gè)節(jié)點(diǎn)在物理層增加與別的節(jié)點(diǎn)的連接數(shù)量,可以有效地減弱日食攻擊的影響力.此外,Alangot[44]利用輕量級(jí)客戶端通信交換區(qū)塊信息以及交易信息也可以有效的減弱敵手對(duì)目標(biāo)節(jié)點(diǎn)網(wǎng)絡(luò)的控制能力. 3.3.5 無(wú)法同步攻擊 1)攻擊描述 Boverman[17]于2011年提出了無(wú)法同步攻擊.其基本思想時(shí)在權(quán)益證明協(xié)議網(wǎng)絡(luò)中,節(jié)點(diǎn)需要協(xié)同完成區(qū)塊的發(fā)布工作,節(jié)點(diǎn)之間需要通過(guò)時(shí)鐘來(lái)實(shí)現(xiàn)同步過(guò)程.攻擊者影響節(jié)點(diǎn)的同步時(shí)鐘使受害者節(jié)點(diǎn)無(wú)法與其他節(jié)點(diǎn)同步,或者延緩受害者節(jié)點(diǎn)的信息傳輸速率.當(dāng)在線活躍節(jié)點(diǎn)受到攻擊時(shí),他會(huì)變?yōu)殡x線節(jié)點(diǎn),處于滯后狀態(tài)無(wú)法完成協(xié)議的執(zhí)行.事實(shí)上,攻擊者通過(guò)影響在線誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益比αH,來(lái)威脅區(qū)塊鏈的安全性. 2)應(yīng)對(duì)措施 為了抵御無(wú)法同步攻擊,節(jié)點(diǎn)之間可以互相參考時(shí)間,或者通過(guò)第3方來(lái)達(dá)到同步.Szalachowski[45]提出節(jié)點(diǎn)可以相互溝通,協(xié)商一個(gè)可信的節(jié)點(diǎn)來(lái)負(fù)責(zé)提供時(shí)間參考信息,或者通過(guò)可靠第3方時(shí)間戳提供者.隨后,Szalachowski[46]還提出了不同的方案,即節(jié)點(diǎn)之間協(xié)商出同步信息,然后其他節(jié)點(diǎn)參考這個(gè)同步信息來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)節(jié)點(diǎn)的穩(wěn)定. 在針對(duì)共識(shí)機(jī)制的所有攻擊中,有時(shí)攻擊者不需要提高自己的權(quán)益比就可以達(dá)到對(duì)區(qū)塊鏈網(wǎng)絡(luò)的控制.在沒(méi)有直接提高當(dāng)前自己相對(duì)于誠(chéng)實(shí)節(jié)點(diǎn)的權(quán)益比的情況,通過(guò)其他方式獲得并不斷積累權(quán)益優(yōu)勢(shì),最終發(fā)動(dòng)攻擊實(shí)現(xiàn)對(duì)鏈的控制.這類攻擊稱為積累權(quán)益攻擊,包括變節(jié)攻擊、權(quán)益竊取攻擊和基于日食攻擊的權(quán)益竊取攻擊. 3.4.1 變節(jié)攻擊 1)攻擊描述 圖5 變節(jié)攻擊 2)應(yīng)對(duì)措施 變節(jié)攻擊的攻擊原理與密鑰切取攻擊的原理相似,因此可以參照密鑰竊取攻擊的防御措施. 3.4.2 權(quán)益竊取攻擊 1)攻擊描述 圖6 權(quán)益竊取攻擊 2)應(yīng)對(duì)措施 權(quán)益竊取攻擊可以通過(guò)校準(zhǔn)節(jié)點(diǎn)或者情境感知交易進(jìn)行預(yù)防.其次,King和Nadal提出的幣齡概念也有助于抑制權(quán)益竊取攻擊[19].具體來(lái)說(shuō),敵手需要花費(fèi)時(shí)間積累足夠多的幣齡,來(lái)產(chǎn)生不同于主鏈的私鏈,而通常敵手私鏈地創(chuàng)建晚于主鏈,攻擊者很難積累足夠多的幣齡,所以難以發(fā)動(dòng)權(quán)益竊取攻擊.最后,用于抵御權(quán)益竊取攻擊的應(yīng)對(duì)措施也可以用于抵御基于日食攻擊的權(quán)益竊取攻擊. 3.4.3 基于日食攻擊的權(quán)益竊取攻擊 1)攻擊描述 2)應(yīng)對(duì)措施 針對(duì)此類攻擊的防御措施可以參考權(quán)益竊取攻擊或者日食攻擊. 權(quán)益證明共識(shí)機(jī)制由于其能源消耗遠(yuǎn)小于工作量證明,是替代工作量證明最有潛力的共識(shí)機(jī)制之一,在區(qū)塊鏈技術(shù)中有著廣泛的應(yīng)用[47,48].但基于權(quán)益證明共識(shí)的區(qū)塊鏈協(xié)議近年來(lái)在安全方面暴露了一些問(wèn)題,需要進(jìn)一步研究.未來(lái)研究者可以針對(duì)權(quán)益證明共識(shí)機(jī)制方面開(kāi)展以下研究: 1)長(zhǎng)程攻擊和無(wú)利害關(guān)系攻擊仍然為權(quán)益證明面臨的最嚴(yán)峻的挑戰(zhàn)之一,目前防御這兩種攻擊最有效的手段為中心化委員會(huì)懲罰作惡的節(jié)點(diǎn),但這與區(qū)塊鏈去中心化的設(shè)計(jì)初衷背道而馳,如何用更加去中心化的方式抵御這兩種類型的攻擊仍然為權(quán)益證明的研究重點(diǎn). 2)權(quán)益竊取攻擊是近些年來(lái)提出的新穎攻擊方式,在足夠多的初始權(quán)益的假設(shè)下,大部分基于權(quán)益證明的數(shù)字貨幣無(wú)法抵御這種攻擊,敵手可以在幾年時(shí)間內(nèi)實(shí)現(xiàn)對(duì)主鏈的顛覆.針對(duì)權(quán)益竊取攻擊的攻防研究目前還不夠充足,因此研究者迫切需要開(kāi)展針對(duì)權(quán)益竊取攻擊防御手段的研究. 3)基于權(quán)益證明的共識(shí)機(jī)制能源消耗小,是替代工作量證明的核心共識(shí)機(jī)制技術(shù)之一.當(dāng)前基于權(quán)益證明的共識(shí)機(jī)制還存在諸多安全問(wèn)題,在市場(chǎng)占有率并不高,而基于工作量證明的區(qū)塊鏈目前面臨著諸多的問(wèn)題,因此提出安全高效的權(quán)益證明的共識(shí)機(jī)制方案是區(qū)塊鏈的重要研究方向之一. 本文詳細(xì)闡述了基于權(quán)益證明共識(shí)機(jī)制區(qū)塊鏈所面臨的安全性問(wèn)題,總結(jié)了16種針對(duì)基于PoS的共識(shí)機(jī)制的攻擊的思想、原理和執(zhí)行流程,并詳細(xì)闡述了每種攻擊的防御措施,以提高區(qū)塊鏈網(wǎng)絡(luò)的安全性.但針對(duì)PoS的攻擊不止于這些基本的攻擊,攻擊者可能同時(shí)實(shí)施多種攻擊來(lái)實(shí)現(xiàn)對(duì)區(qū)塊鏈的控制,比如基于日食攻擊的權(quán)益竊取攻擊,或者利用協(xié)議的漏洞來(lái)提高攻擊者自己的權(quán)益占比來(lái)使誠(chéng)實(shí)節(jié)點(diǎn)的工作無(wú)效化.上述研究意在啟發(fā)研究者深入探究基于PoS共識(shí)機(jī)制面臨的威脅和安全問(wèn)題,完善并提高現(xiàn)有共識(shí)協(xié)議的安全性.在未來(lái),研究者構(gòu)建基于權(quán)益證明的共識(shí)算法時(shí),需預(yù)先考慮到本文所提出的攻擊,從而設(shè)計(jì)出更加安全的協(xié)議.權(quán)益證明的發(fā)展離不開(kāi)這些攻擊的提出,而針對(duì)權(quán)益證明攻擊的分析使得權(quán)益證明向著安全高效的方向一步步發(fā)展.3 針對(duì)PoS共識(shí)機(jī)制的攻擊和應(yīng)對(duì)措施
3.1 區(qū)塊生成函數(shù)攻擊
3.2 岔鏈攻擊
3.3 高權(quán)益敵手攻擊
3.4 積累權(quán)益攻擊
4 展 望
5 結(jié)束語(yǔ)