于 謙 李志淮 田 娜
1(大連海事大學(xué) 遼寧 大連 116026)
2(泰康人壽 北京 102200)
區(qū)塊鏈技術(shù)[1]本質(zhì)上是一個(gè)分布式總賬系統(tǒng),擁有去中心化、去信任、不可更改等特點(diǎn),解決了傳統(tǒng)互聯(lián)網(wǎng)模式中第三方中介不可信、不可靠的問題[2]。習(xí)近平在中央政治局第十八次集體學(xué)習(xí)時(shí)強(qiáng)調(diào):把區(qū)塊鏈作為核心技術(shù)自主創(chuàng)新重要突破口,加快推動(dòng)區(qū)塊鏈技術(shù)和產(chǎn)業(yè)創(chuàng)新發(fā)展。區(qū)塊鏈技術(shù)的價(jià)值有目共睹。但是,目前區(qū)塊鏈的基礎(chǔ)設(shè)施無法滿足大規(guī)模應(yīng)用的要求,限制了區(qū)塊鏈行業(yè)的發(fā)展,擴(kuò)容需求強(qiáng)烈[3-5]。為此,開發(fā)者們提出了分片[6]、DAG[7]、狀態(tài)通道[8-9]、側(cè)鏈[10]等多種擴(kuò)容方案。
對(duì)比各種擴(kuò)容方案,分片是最有希望能夠?qū)崿F(xiàn)高性能而不降低去中心化程度的擴(kuò)容方案。分片包括網(wǎng)絡(luò)分片、交易分片和狀態(tài)分片[11]。其中網(wǎng)絡(luò)分片在網(wǎng)絡(luò)層將所有節(jié)點(diǎn)劃分到了不同的分片中[12]。交易分片將全網(wǎng)交易劃分到不同的分片中驗(yàn)證和打包,全網(wǎng)多個(gè)分片可以同時(shí)打包和驗(yàn)證不同的交易,并行處理,從而提升全網(wǎng)的整體性能。狀態(tài)分片將完整的賬本信息分別存儲(chǔ)到各個(gè)分片當(dāng)中,各個(gè)節(jié)點(diǎn)不再存儲(chǔ)完整的區(qū)塊鏈狀態(tài)信息,每個(gè)分片內(nèi)各自維護(hù)部分的賬本信息。網(wǎng)絡(luò)分片是交易分片和狀態(tài)分片的基礎(chǔ)[12]。交易分片雖然能在一定程度上提升公鏈性能,但并不能從根本上解決資源瓶頸等問題。因此,只有實(shí)現(xiàn)狀態(tài)分片才能從本質(zhì)上解決公鏈可擴(kuò)展性問題。
狀態(tài)分片是迄今為止所有分片提案中實(shí)現(xiàn)難度最高的,面臨著跨分片通信和狀態(tài)交換頻繁、分片遭受攻擊導(dǎo)致脫機(jī),以及節(jié)點(diǎn)保持靜態(tài)遭受攻擊等挑戰(zhàn)。對(duì)于跨分片通信和狀態(tài)交換問題,目前業(yè)界大致有四種方案。Omniledger[13]讓發(fā)出交易的客戶端主動(dòng)維護(hù)一致性,分片協(xié)議不用考慮維護(hù)一致性的問題,技術(shù)簡(jiǎn)單,且避免了分片之間一致性協(xié)議的開銷;Chainspace[14]基于trace對(duì)交易進(jìn)行標(biāo)注,交易注入到網(wǎng)絡(luò)中之前,先模擬trace,并以此標(biāo)注出可能與其他交易沖突的地方,然后根據(jù)這些沖突發(fā)到相關(guān)的分片中處理,相關(guān)的分片之間再用S-BAC去共識(shí);Ethereum[15]將幣的轉(zhuǎn)移過程切開,分成幣的發(fā)送和幣的接收,并且在不同的共識(shí)周期中完成;Rchain將跨分片的交易在它們的父級(jí)分片中處理。對(duì)于分片受到攻擊導(dǎo)致脫機(jī)這一問題,目前解決方案是維護(hù)存檔或備份節(jié)點(diǎn),以幫助網(wǎng)絡(luò)進(jìn)行故障排除并從數(shù)據(jù)不可用中恢復(fù)。最后,為了防止節(jié)點(diǎn)是靜態(tài)的,不能很好地抵御攻擊和故障,在Rapidchain[16]分片協(xié)議中介紹了一個(gè)委員會(huì)重組方案,叫作有界的布谷鳥原則(Bounded Cuckoo Rule),更加高效地進(jìn)行分片委員會(huì)重構(gòu),同時(shí)可以防止惡意節(jié)點(diǎn)控制某個(gè)分片的行為發(fā)生。
另外,針對(duì)狀態(tài)分片間的女巫攻擊[17]以及雙花攻擊[18]問題,在以太坊[19]2.0狀態(tài)分片中,引入信標(biāo)鏈來負(fù)責(zé)主鏈以及管理各個(gè)分片。驗(yàn)證節(jié)點(diǎn)需要向信標(biāo)鏈抵押一定數(shù)量的ETH來獲得許可,若節(jié)點(diǎn)作惡,信標(biāo)鏈會(huì)對(duì)作惡節(jié)點(diǎn)進(jìn)行相應(yīng)的懲罰,以此來防止女巫攻擊。由信標(biāo)鏈對(duì)跨分片交易進(jìn)行驗(yàn)證,以防止分片間雙花攻擊問題。
在狀態(tài)分片種種挑戰(zhàn)的解決方案中,都回避了受狀態(tài)分片限制導(dǎo)致的合謀攻擊問題。
多輪的概念在文獻(xiàn)[12]里被首次提出。為防止分片失效無法達(dá)成共識(shí),故提出多輪的解決方案。主要思想是:如果第一輪共識(shí)失敗,則節(jié)點(diǎn)重新隨機(jī)分配進(jìn)行第二輪共識(shí),直到共識(shí)成功為止。此方案同樣回避了合謀攻擊問題,因?yàn)榧词构沧R(shí)成功,也有可能是作惡節(jié)點(diǎn)合謀導(dǎo)致。
本文針對(duì)目前區(qū)塊鏈狀態(tài)分片存在的合謀攻擊問題,提出一種狀態(tài)分片中抗合謀攻擊的多輪驗(yàn)證方案。
在分片內(nèi)的驗(yàn)證節(jié)點(diǎn)中,拜占庭[20]節(jié)點(diǎn)所占比例較高但是不超過總節(jié)點(diǎn)1/3的情況下,存在某個(gè)分片中拜占庭節(jié)點(diǎn)占據(jù)大多數(shù),且相互串通,進(jìn)行合謀攻擊,最終達(dá)成錯(cuò)誤共識(shí)的可能。分片內(nèi)合謀攻擊發(fā)生需滿足以下兩個(gè)條件。
(1) 分片內(nèi)拜占庭節(jié)點(diǎn)數(shù)大于該分片內(nèi)節(jié)點(diǎn)總數(shù)的2/3。
(2) 拜占庭節(jié)點(diǎn)串通在一起進(jìn)行合謀。
因狀態(tài)分片的約束,區(qū)塊鏈網(wǎng)絡(luò)中節(jié)點(diǎn)的隨機(jī)分配受到限制,即節(jié)點(diǎn)只能分配到存儲(chǔ)其數(shù)據(jù)的分片中去。BFT(拜占庭)節(jié)點(diǎn)數(shù)量比交易分片有更高概率出現(xiàn)b≥2n/3(n為網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)),且這些BFT節(jié)點(diǎn)可能形成合謀,將錯(cuò)誤的事務(wù)驗(yàn)證確認(rèn),從而破壞整個(gè)鏈的數(shù)據(jù)一致性。
1.2.1交易分片發(fā)生合謀攻擊的概率分析
(1)
分母表示全網(wǎng)一共有N個(gè)節(jié)點(diǎn),其中分到第Ki個(gè)分片的節(jié)點(diǎn)是L個(gè);分子分別表示全網(wǎng)(N×f)個(gè)拜占庭節(jié)點(diǎn)中,第Ki個(gè)分片有x個(gè),全網(wǎng)(N-N×f)個(gè)非拜占庭節(jié)點(diǎn)中,第Ki個(gè)分片有(L-x)個(gè)。
根據(jù)式(1),假設(shè)網(wǎng)絡(luò)中驗(yàn)證節(jié)點(diǎn)總數(shù)N=8 000,設(shè)置f=[0.1,0.25,0.33]。使用Python語言進(jìn)行模擬計(jì)算,當(dāng)網(wǎng)絡(luò)中拜占庭比例f以及單個(gè)分片中節(jié)點(diǎn)數(shù)目L均發(fā)生變化時(shí),分片中拜占庭節(jié)點(diǎn)發(fā)生合謀攻擊的概率。單個(gè)分片中拜占庭節(jié)點(diǎn)合謀的概率P見表1。
表1 單個(gè)分片中拜占庭節(jié)點(diǎn)合謀的概率
如表1所示,當(dāng)區(qū)塊鏈網(wǎng)絡(luò)中拜占庭節(jié)點(diǎn)占比比較低(f<0.15)時(shí),無論單個(gè)分片中節(jié)點(diǎn)數(shù)目怎樣變化,合謀攻擊發(fā)生的概率都不會(huì)太高;當(dāng)區(qū)塊鏈網(wǎng)絡(luò)中拜占庭節(jié)點(diǎn)占比比較高(f=0.25~0.33)時(shí),只要單個(gè)分片內(nèi)節(jié)點(diǎn)數(shù)目不低于60,合謀攻擊發(fā)生的概率也不會(huì)太高,最高概率是5.09e-10左右,甚至可以忽略。
1.2.2狀態(tài)分片發(fā)生合謀攻擊的概率分析
狀態(tài)分片中,節(jié)點(diǎn)只能被分配到存儲(chǔ)其數(shù)據(jù)的分片中去。假設(shè)有Mi個(gè)節(jié)點(diǎn)存儲(chǔ)第Ki個(gè)分片的數(shù)據(jù),用F表示Mi個(gè)節(jié)點(diǎn)中拜占庭節(jié)點(diǎn)比例。同理,狀態(tài)分片發(fā)生合謀攻擊的概率也按照超幾何分布的分布列進(jìn)行處理。第Ki個(gè)分片發(fā)生合謀攻擊的概率如式(2)所示。
(2)
式中:分母表示有Mi個(gè)節(jié)點(diǎn)存儲(chǔ)第Ki個(gè)分片的數(shù)據(jù),其中分到第Ki個(gè)分片的節(jié)點(diǎn)是L個(gè);分子分別表示(Mi×F)個(gè)拜占庭節(jié)點(diǎn)中,第Ki個(gè)分片有x個(gè),(Mi-Mi×F)個(gè)非拜占庭節(jié)點(diǎn)中,第Ki個(gè)分片有(L-x)個(gè)。
由式(2)可知,第Ki個(gè)分片發(fā)生合謀攻擊的概率跟Mi、F、L的取值有關(guān)。為了方便比較,先假設(shè)F=0.33,L=120,用Python模擬計(jì)算出在存儲(chǔ)第Ki個(gè)分片數(shù)據(jù)的節(jié)點(diǎn)數(shù)Mi發(fā)生變化時(shí),第Ki個(gè)分片拜占庭節(jié)點(diǎn)發(fā)生合謀攻擊的概率,見表2。
表2 不同節(jié)點(diǎn)數(shù)Mi對(duì)合謀攻擊概率P的影響
如表2所示,當(dāng)其他條件固定時(shí),合謀攻擊概率P與Mi取值關(guān)系不大,甚至可以忽略。
另一方面,式(2)中,Mi個(gè)節(jié)點(diǎn)中拜占庭節(jié)點(diǎn)數(shù)(Mi×F)一定是小于等于網(wǎng)絡(luò)中拜占庭節(jié)點(diǎn)總數(shù)(N×f)的,且因拜占庭節(jié)點(diǎn)分配不均,Mi個(gè)節(jié)點(diǎn)中拜占庭節(jié)點(diǎn)比例F有可能大于整個(gè)網(wǎng)絡(luò)中拜占庭節(jié)點(diǎn)比例f。又因Mi取值對(duì)合謀攻擊概率P的影響微乎其微,故為方便比較,設(shè)置Mi=600,根據(jù)式(2)用Python模擬計(jì)算當(dāng)Mi個(gè)節(jié)點(diǎn)中拜占庭比例F以及單個(gè)分片中節(jié)點(diǎn)數(shù)目L均發(fā)生變化時(shí),分片中拜占庭節(jié)點(diǎn)發(fā)生合謀攻擊的概率,見表3。
表3 分片內(nèi)不同節(jié)點(diǎn)數(shù)L以及Mi個(gè)節(jié)點(diǎn)中不同拜占庭
如表3所示,合謀攻擊發(fā)生的概率隨著F的增大顯著增大。F取值從0.40開始,在其他變量(整個(gè)網(wǎng)絡(luò)的拜占比f,分片內(nèi)節(jié)點(diǎn)數(shù)量L)一致的前提下,狀態(tài)分片合謀攻擊發(fā)生的概率已經(jīng)遠(yuǎn)遠(yuǎn)超過了交易分片合謀攻擊發(fā)生的概率。
此外,根據(jù)表3還可以看出,相同拜占比下,合謀攻擊發(fā)生的概率隨著分片內(nèi)節(jié)點(diǎn)數(shù)量的減少而升高。當(dāng)單個(gè)分片內(nèi)驗(yàn)證節(jié)點(diǎn)數(shù)量減少到低于60,只要F大于等于0.38,此時(shí)合謀攻擊發(fā)生的概率最小也是5.1e-7,這已經(jīng)是一個(gè)不能忽視的值了;F取值從0.45開始,即使分片內(nèi)節(jié)點(diǎn)數(shù)L達(dá)到128個(gè),合謀攻擊發(fā)生的概率依然高達(dá)1.1e-8。系統(tǒng)的安全性受到了極大的威脅。
綜合上述分析,狀態(tài)分片的合謀攻擊問題不容忽視且亟待解決。針對(duì)此問題,本文將提出一種解決方案,在降低分片內(nèi)合謀攻擊發(fā)生的概率、保證系統(tǒng)安全性的同時(shí),在一定程度上提高系統(tǒng)的性能。
多輪驗(yàn)證方案主要包括以下3個(gè)步驟。
(1) 按照映射規(guī)則將交易分配到相應(yīng)分片中。
(2) 使用節(jié)點(diǎn)隨機(jī)分配算法生成隨機(jī)數(shù),然后將驗(yàn)證節(jié)點(diǎn)根據(jù)映射規(guī)則分配到相應(yīng)的分片中,對(duì)交易進(jìn)行共識(shí)驗(yàn)證。
(3) 如果交易驗(yàn)證結(jié)果達(dá)到一致,則重復(fù)步驟(2),直到相同的交易驗(yàn)證結(jié)果達(dá)到兩次,將交易打包;若交易驗(yàn)證共識(shí)超時(shí),同樣重復(fù)步驟(2),當(dāng)多輪輪次達(dá)到T次仍共識(shí)超時(shí),則放棄該筆交易。具體流程見圖1。
圖1 多輪驗(yàn)證總體流程
2.2.1輪數(shù)上限Tmax
輪數(shù)上限Tmax,即多輪驗(yàn)證方案最多要進(jìn)行的共識(shí)驗(yàn)證輪數(shù)。當(dāng)對(duì)同一筆交易通過Tmax輪共識(shí)驗(yàn)證都無法達(dá)到統(tǒng)一驗(yàn)證結(jié)果時(shí),便舍棄此交易。Tmax受共識(shí)超時(shí)概率的影響,當(dāng)分片內(nèi)拜占庭節(jié)點(diǎn)所占比例大于等于三分之一時(shí),會(huì)導(dǎo)致共識(shí)超時(shí),分片失效,從而破壞系統(tǒng)一致性。將Tmax的取值設(shè)定為共識(shí)超時(shí)概率低于10-6時(shí)的值。
(3)
式中:分母表示全網(wǎng)一共有N個(gè)節(jié)點(diǎn),其中存儲(chǔ)第Ki個(gè)分片的節(jié)點(diǎn)是Mi個(gè);分子分別表示全網(wǎng)(N×f)個(gè)拜占庭節(jié)點(diǎn)中,這Mi個(gè)節(jié)點(diǎn)中有(Mi×F)個(gè),全網(wǎng)(N-N×f)個(gè)非拜占庭節(jié)點(diǎn)中,這Mi個(gè)節(jié)點(diǎn)中有(Mi-Mi×F)個(gè)。
設(shè)置系統(tǒng)網(wǎng)絡(luò)中節(jié)點(diǎn)數(shù)N=8 000,易知,系統(tǒng)拜占比越高,分片失效概率越大,需要的輪數(shù)越多。因此,輪數(shù)上限的確定選擇在系統(tǒng)拜占比f=0.33的情況下,根據(jù)式(3),使用Python語言進(jìn)行模擬計(jì)算。當(dāng)存儲(chǔ)第Ki個(gè)分片數(shù)據(jù)的節(jié)點(diǎn)數(shù)Mi以及Mi個(gè)節(jié)點(diǎn)中拜占比F各自發(fā)生變化時(shí)事件A發(fā)生的概率見表4。
如表4所示,無論Mi取值多少,這Mi個(gè)節(jié)點(diǎn)中,根據(jù)表中所提供的數(shù)據(jù),最有可能出現(xiàn)的拜占比F為0.35。用同樣的方式模擬計(jì)算出F在區(qū)間[0.30,0.35]和[0.35,0.40]上時(shí),事件A發(fā)生的概率。無論Mi取值多少,當(dāng)F為0.33時(shí),事件A發(fā)生的概率最大。也就是說,當(dāng)有Mi個(gè)節(jié)點(diǎn)存儲(chǔ)第Ki個(gè)分片的數(shù)據(jù)時(shí),在系統(tǒng)拜占比f=0.33的情況下,無論Mi取值多少,這Mi個(gè)節(jié)點(diǎn)中最有可能出現(xiàn)的F是0.33。
當(dāng)單個(gè)分片內(nèi)拜占庭節(jié)點(diǎn)數(shù)X>L/3時(shí),共識(shí)超時(shí),分片失效。分片失效概率如式(4)所示。
(4)
根據(jù)式(4),令F=0.33,使用Python語言模擬計(jì)算分片內(nèi)節(jié)點(diǎn)數(shù)L以及存儲(chǔ)第Ki個(gè)分片數(shù)據(jù)的節(jié)點(diǎn)數(shù)Mi取值各不同時(shí),分片失效的概率見表5。
表5 不同Mi和L對(duì)分片失效概率的影響
2.2.2輪數(shù)下限Tmin
輪數(shù)下限Tmin,即多輪驗(yàn)證方案最少要進(jìn)行的共識(shí)驗(yàn)證輪數(shù)。Tmin受合謀攻擊概率影響。在狀態(tài)分片后續(xù)發(fā)展中,為了提高性能,會(huì)通過減少分片內(nèi)節(jié)點(diǎn)數(shù)目,擴(kuò)大分片規(guī)模來實(shí)現(xiàn)。設(shè)定Tmin的取值為分片內(nèi)節(jié)點(diǎn)數(shù)大于40,合謀攻擊發(fā)生的概率小于10-8的值。多輪過程中合謀攻擊發(fā)生概率與輪數(shù)T之間的關(guān)系如式(5)所示。
(5)
PA-m-r表示多輪驗(yàn)證過程中合謀攻擊發(fā)生的概率,T表示多輪輪數(shù),P(X>2L/3)表示一輪中合謀攻擊發(fā)生的概率。將式(5)展開如式(6)所示。
(6)
在2.2.1節(jié)的分析中得到,Mi對(duì)合謀攻擊發(fā)生概率的影響微乎其微,甚至可忽略,為了方便比較,根據(jù)式(6),設(shè)定Mi=600,在F=0.33的情況下,取L=[30,45,60],通過改變多輪輪數(shù)T的取值,得到多輪下的合謀攻擊發(fā)生的概率。使用Python語言進(jìn)行模擬計(jì)算,在分片內(nèi)節(jié)點(diǎn)數(shù)L固定的前提下,計(jì)算出在多輪輪數(shù)T不同的情況下,分片中拜占庭節(jié)點(diǎn)發(fā)生合謀攻擊的概率P,結(jié)果見表6。
表6 輪數(shù)T對(duì)合謀攻擊概率P的影響
可以看出,多輪輪數(shù)T=2時(shí),合謀攻擊發(fā)生的概率與未使用多輪方案時(shí)發(fā)生合謀攻擊的概率相比降低十分明顯,幾乎降到了未使用多輪方案時(shí)合謀攻擊發(fā)生概率的平方級(jí)別,可見,多輪共識(shí)驗(yàn)證的方案對(duì)抗合謀攻擊起到了很好的作用。
此外,分片內(nèi)節(jié)點(diǎn)越少,合謀攻擊發(fā)生的概率越大。但是從第二輪開始,合謀攻擊發(fā)生的概率已經(jīng)遠(yuǎn)遠(yuǎn)小于10-8,因此取Tmin的值為2。也就是說,為了很好地改善合謀攻擊問題,本方案設(shè)置在多輪共識(shí)驗(yàn)證過程中,當(dāng)對(duì)同一筆交易進(jìn)行共識(shí)驗(yàn)證的結(jié)果達(dá)成一致且一致次數(shù)達(dá)到兩次時(shí),此筆交易驗(yàn)證通過,而這需要的最少輪數(shù)是兩輪。
為保證節(jié)點(diǎn)分配時(shí)較高的隨機(jī)性和不可預(yù)測(cè)性,本方案選擇VRF(Verifiable Random Function,可驗(yàn)證隨機(jī)函數(shù))[21]作為節(jié)點(diǎn)隨機(jī)分配算法的隨機(jī)函數(shù)。
2.3.1可驗(yàn)證隨機(jī)函數(shù)
所謂VRF就是指給定一個(gè)消息和一個(gè)私鑰,可以計(jì)算出一個(gè)唯一確定的值,這個(gè)值唯一確定且不可預(yù)測(cè),且可以驗(yàn)證。
LISP協(xié)議即位置標(biāo)識(shí)和身份標(biāo)識(shí)分離協(xié)議,它是一種針對(duì)互聯(lián)網(wǎng)未來提出的一種全新的路由架構(gòu)。LISP架構(gòu)的提出可以給邊緣網(wǎng)絡(luò)更大的靈活性,同時(shí)對(duì)解決BGP路由表的膨脹和終端移動(dòng)性增多等問題效果顯著。因?yàn)樗鼘⑺淼绤f(xié)議應(yīng)用在不同LISP本地網(wǎng)絡(luò)間,這在很大程度上有利于在虛擬網(wǎng)絡(luò)下實(shí)現(xiàn)LISP架構(gòu)。
VRF包含4個(gè)函數(shù):VRFGEN、VRFVAL、VRFPROVE、VRFVER。
(1) VRFGEN:隨機(jī)生成密鑰,用來生成一對(duì)非對(duì)稱加密的密鑰,即一對(duì)非對(duì)稱加密的公私鑰(Vk,Sk)。
(2) VRFVAL:生成隨機(jī)數(shù)輸出value。
(3) VRFPROVE:證明函數(shù),根據(jù)私鑰和輸入x計(jì)算,生成零知識(shí)證明proofx。
(4) VRFVER:驗(yàn)證函數(shù),其他節(jié)點(diǎn)收到廣播出來的輸入x和零知識(shí)證明后,結(jié)合生成隨機(jī)數(shù)的公鑰,對(duì)隨機(jī)數(shù)進(jìn)行驗(yàn)證。
VRF生成隨機(jī)數(shù)的流程是節(jié)點(diǎn)用VRFGEN生成的私鑰和一個(gè)全網(wǎng)都知道的x作為輸入,使用VRFVAL生成隨機(jī)數(shù)value,VRFPROVE生成零知識(shí)證明proofx。
隨機(jī)數(shù)生成后,該節(jié)點(diǎn)將零知識(shí)證明proofx和隨機(jī)數(shù)value廣播到全網(wǎng),所有收到該零知識(shí)證明和隨機(jī)數(shù)的人,均可通過公鑰Vk和輸入x驗(yàn)證隨機(jī)數(shù)是否正確。VRF隨機(jī)數(shù)生成和驗(yàn)證流程見圖2。
VRF流程見圖3。
圖3 VRF流程
2.3.2參數(shù)設(shè)置與結(jié)果處理
2.3.1節(jié)提到的x是VRF生成隨機(jī)數(shù)的種子參數(shù)。因VRF具有對(duì)于相同的輸入,輸出一定相同的特點(diǎn),x需具有公開、隨機(jī)且不斷更新的特點(diǎn)。據(jù)此,本方案對(duì)VRF輸入x進(jìn)行設(shè)置,如式(7)所示。
x=H(Bh-1,{Ik})
(7)
式中:h表示當(dāng)前區(qū)塊高度,即第h個(gè)區(qū)塊;Bh-1表示當(dāng)前區(qū)塊的上一區(qū)塊的哈希值;{Ik}表示第k個(gè)驗(yàn)證節(jié)點(diǎn)與網(wǎng)絡(luò)中相鄰的兩個(gè)驗(yàn)證節(jié)點(diǎn)互換一個(gè)數(shù)字得到的數(shù)字集合。
生成的隨機(jī)數(shù)value均勻分布在值域范圍內(nèi),定義輸入x的最大位數(shù)是256位,則value的取值在0到2256之間,即value=2bits(value),value∈[0,2256),bits(value)是value的位數(shù)。對(duì)value進(jìn)行處理,讓驗(yàn)證節(jié)點(diǎn)根據(jù)結(jié)果進(jìn)入相應(yīng)的分片中,如式(8)所示。
(8)
2.3.3安全性分析
在區(qū)塊鏈網(wǎng)絡(luò)中,因狀態(tài)分片的約束,BFT(拜占庭)節(jié)點(diǎn)數(shù)量有更高概率出現(xiàn)b≥2n/3,b表示拜占庭節(jié)點(diǎn)數(shù),n表示網(wǎng)絡(luò)中節(jié)點(diǎn)總數(shù)。且這些BFT節(jié)點(diǎn)可能形成合謀,將錯(cuò)誤的事務(wù)驗(yàn)證確認(rèn),從而破壞整個(gè)鏈的數(shù)據(jù)一致性。而多輪驗(yàn)證有效解決了這個(gè)問題。由式(6)可知,多輪過程中合謀攻擊發(fā)生概率與輪數(shù)T之間的關(guān)系為:
(9)
使用Python語言進(jìn)行模擬計(jì)算,在分片內(nèi)節(jié)點(diǎn)數(shù)L=30的前提下,計(jì)算出在多輪輪數(shù)T不同的情況下,分片中拜占庭節(jié)點(diǎn)發(fā)生合謀攻擊的概率P,結(jié)果見表7。
表7 輪數(shù)T對(duì)合謀攻擊概率P的影響
如表7所示,雖然選取的拜占庭比例F較高,但是采用多輪后,即使拜占庭比例F達(dá)到0.38,合謀攻擊的概率也降到了10-8以下,跟未使用多輪時(shí)發(fā)生合謀攻擊的概率(見表3)差異明顯。使用多輪后合謀惡意驗(yàn)證的概率顯著降低。
同時(shí),在不同輪驗(yàn)證中,盡量避免兩個(gè)以上的節(jié)點(diǎn)重復(fù)進(jìn)入同一分片。根據(jù)VRF算法的隨機(jī)性和不可預(yù)測(cè)性,本方案采用VRF隨機(jī)數(shù)生成算法,在每一輪次對(duì)驗(yàn)證節(jié)點(diǎn)重新分配時(shí),作惡節(jié)點(diǎn)無法通過控制隨機(jī)數(shù)的生成進(jìn)入到特定的分片中。每一輪次重新分配驗(yàn)證節(jié)點(diǎn)時(shí),某個(gè)節(jié)點(diǎn)進(jìn)入哪個(gè)分片無法預(yù)測(cè),保證了隨機(jī)性。
為驗(yàn)證本文方法確實(shí)可以降低合謀攻擊的概率,且多輪驗(yàn)證犧牲的延遲不會(huì)降低系統(tǒng)總體的交易吞吐量TPS,進(jìn)行模擬對(duì)比實(shí)驗(yàn)。目前比較流行的分片方案中都回避了合謀攻擊問題,但OmniLedger分片方案在目前存在的分片方案中優(yōu)勢(shì)極為突出。尤其是在節(jié)點(diǎn)隨機(jī)分配方面,啟用驗(yàn)證器來加入系統(tǒng),用一種安全的方法進(jìn)行分片,這樣惡意者就不能輕易地對(duì)一個(gè)分片進(jìn)行攻擊。OmniLedger還是第一個(gè)可提供“水平擴(kuò)展”事務(wù)處理能力的分布式賬本體系結(jié)構(gòu),與Visa等中心化支付處理系統(tǒng)相媲美,同時(shí)又不會(huì)影響安全性,兼具去中心化的特點(diǎn)。再看其發(fā)展前景,OmniLedger和Chainspace的結(jié)合極有可能創(chuàng)建一個(gè)開放式可擴(kuò)展的智能合約平臺(tái),與其他分片協(xié)議對(duì)比,提供了更強(qiáng)大的可擴(kuò)展性和安全性。綜上,OmniLedger分片方案不僅在目前存在的分片方案中優(yōu)勢(shì)極為突出且發(fā)展前景良好,最重要的是,OmniLedger方案跟本方案都使用VRF協(xié)議將節(jié)點(diǎn)隨機(jī)地分配到不同的分片上,且每個(gè)分片的共識(shí)都采用PBFT算法,有較好的對(duì)比性。故選擇Omniledger分片方案為基礎(chǔ),與本方案做對(duì)比,對(duì)比兩種方案的交易驗(yàn)證率、出塊時(shí)間、吞吐量和在使用多輪驗(yàn)證后的差異。
實(shí)驗(yàn)在實(shí)驗(yàn)室的8臺(tái)服務(wù)器上運(yùn)行,使用實(shí)驗(yàn)室局域網(wǎng)搭建的P2P測(cè)試網(wǎng)絡(luò)作為實(shí)驗(yàn)所需的網(wǎng)絡(luò)環(huán)境。使用相同配置的虛擬機(jī)模擬區(qū)塊鏈網(wǎng)絡(luò)中的驗(yàn)證節(jié)點(diǎn),一個(gè)虛擬機(jī)代表一個(gè)驗(yàn)證節(jié)點(diǎn),實(shí)驗(yàn)共設(shè)置1 800個(gè)節(jié)點(diǎn),設(shè)置分片規(guī)模為30,每個(gè)分片中平均有60個(gè)驗(yàn)證節(jié)點(diǎn)。為了更直觀地進(jìn)行分析對(duì)比,在實(shí)驗(yàn)過程中除了交易產(chǎn)生的gas(單筆交易的消耗)費(fèi),其余gas費(fèi)予以忽略。
3.2.1交易驗(yàn)證率對(duì)比實(shí)驗(yàn)
總節(jié)點(diǎn)數(shù)為1 800,設(shè)置拜占庭節(jié)點(diǎn)所占比例為0.3,運(yùn)行Omniledger模擬系統(tǒng)和本方案系統(tǒng),分別向每個(gè)分片內(nèi)投放3 000條交易,其中包含20%不合法交易,以投放交易時(shí)刻作為0時(shí)刻,分別在0、5、15、20、25、30時(shí)刻記錄Omniledger模擬系統(tǒng)和本方案模擬系統(tǒng)中每個(gè)分片交易處理情況,重復(fù)進(jìn)行實(shí)驗(yàn),計(jì)算平均交易驗(yàn)證率,并對(duì)結(jié)果加以對(duì)比分析。交易驗(yàn)證率對(duì)比見圖4。
圖4 交易驗(yàn)證率
如圖4所示,兩實(shí)驗(yàn)開始交易驗(yàn)證率均接近80%,隨著時(shí)間推移,不合法交易所占的比例逐漸增加,故兩系統(tǒng)的交易驗(yàn)證率均逐漸降低??梢钥闯?Omniledger模擬系統(tǒng)中的交易驗(yàn)證率變化不明顯,說明有一部分不合法交易被驗(yàn)證通過了,即發(fā)生了合謀攻擊。而在本方案的實(shí)驗(yàn)中,隨著時(shí)間推移,驗(yàn)證率有較明顯的降低,說明部分發(fā)生合謀的交易驗(yàn)證未被通過。由此實(shí)驗(yàn)可以證明,多輪驗(yàn)證方案可以有效降低合謀攻擊發(fā)生的概率。
3.2.2出塊時(shí)間對(duì)比實(shí)驗(yàn)
TPS=(gasLimit/gas)/time,其中:gasLimit是單個(gè)區(qū)塊允許的最多gas總量;gas指的是單筆交易的消耗;time是區(qū)塊出塊時(shí)間。在進(jìn)行交易處理能力對(duì)比實(shí)驗(yàn)之前,先進(jìn)行平均出塊時(shí)間對(duì)比實(shí)驗(yàn)。將Omniledger模擬系統(tǒng)以及本方案模擬系統(tǒng)分別運(yùn)行10天,記錄每天的區(qū)塊高度,計(jì)算平均出塊時(shí)間,再根據(jù)區(qū)塊鏈瀏覽器統(tǒng)計(jì)相同時(shí)間下真實(shí)網(wǎng)絡(luò)的平均出塊時(shí)間,進(jìn)行對(duì)比分析。平均出塊時(shí)間見圖5。
可以看出,實(shí)驗(yàn)室網(wǎng)絡(luò)下,Omniledger模擬系統(tǒng)和本方案模擬系統(tǒng)平均出塊時(shí)間相近,略低于真實(shí)網(wǎng)絡(luò)中Omniledger系統(tǒng)的平均出塊時(shí)間,三種情況下的平均出塊時(shí)間均相對(duì)穩(wěn)定,無劇烈變化。說明三種情況下,系統(tǒng)均穩(wěn)定運(yùn)行,且本方案系統(tǒng)在降低合謀攻擊概率的同時(shí),并沒有犧牲出塊時(shí)間。實(shí)驗(yàn)室搭建的P2P網(wǎng)絡(luò)運(yùn)行比較穩(wěn)定,所以兩種方案的平均出塊時(shí)間均無劇烈變化。實(shí)驗(yàn)環(huán)境下未考慮除交易產(chǎn)生的gas費(fèi)的其他費(fèi)用,且真實(shí)網(wǎng)絡(luò)下,驗(yàn)證節(jié)點(diǎn)遍布世界各地,數(shù)據(jù)的傳輸需要花費(fèi)一定的時(shí)間,網(wǎng)絡(luò)延遲比較大,所以真實(shí)網(wǎng)絡(luò)下的Omniledger系統(tǒng)平均出塊時(shí)間比實(shí)驗(yàn)環(huán)境下的高。
3.2.3吞吐量對(duì)比實(shí)驗(yàn)
在交易處理能力實(shí)驗(yàn)設(shè)計(jì)中,改變Omniledger模擬系統(tǒng)的設(shè)置,總節(jié)點(diǎn)數(shù)保持1 800不變,將分片數(shù)設(shè)為14,使得每個(gè)分片中驗(yàn)證節(jié)點(diǎn)數(shù)達(dá)到128,本方案系統(tǒng)保持不變。設(shè)置區(qū)塊gasLimit大小為8 000 000。分別運(yùn)行Omniledger模擬系統(tǒng)和本方案模擬系統(tǒng),每隔一個(gè)區(qū)塊向Omniledger模擬系統(tǒng)中投放84 000條交易,向本方案的模擬系統(tǒng)中投放180 000條交易,平均每個(gè)分片內(nèi)500條交易。隨著時(shí)間的增加,單個(gè)分片內(nèi)的交易分別達(dá)到1 000、2 000、3 000、4 000、5 000、6 000等,單個(gè)分片內(nèi)每產(chǎn)生一個(gè)區(qū)塊,統(tǒng)計(jì)消耗的交易數(shù)量,重復(fù)實(shí)驗(yàn),計(jì)算出每秒平均交易處理數(shù)量,并進(jìn)行對(duì)比分析。平均交易處理能力見圖6。
圖6 平均交易處理能力
可以看出,隨著時(shí)間的推移,交易不斷累積,造成交易擁堵,因此兩個(gè)模擬系統(tǒng)的交易處理能力都在慢慢降低。當(dāng)系統(tǒng)中總驗(yàn)證節(jié)點(diǎn)數(shù)不變時(shí),本方案的平均交易處理能力總體稍高于Omniledger系統(tǒng)的平均交易處理能力。雖然加入多輪驗(yàn)證方案使得交易驗(yàn)證的時(shí)間變長(zhǎng),但是在驗(yàn)證節(jié)點(diǎn)總數(shù)不變的情況下,增加了分片的數(shù)量,使得總體交易處理能力得到提升??梢宰C明,本方案在不影響系統(tǒng)性能甚至在系統(tǒng)性能稍有提升的情況下,很好地達(dá)到了抗合謀攻擊的效果。
因狀態(tài)分片的約束,驗(yàn)證節(jié)點(diǎn)的隨機(jī)分配受到限制,即節(jié)點(diǎn)只能分配到存儲(chǔ)其數(shù)據(jù)的分片中去。BFT節(jié)點(diǎn)數(shù)量有更高概率出現(xiàn)b≥2n/3,且這些BFT節(jié)點(diǎn)可能形成合謀,將錯(cuò)誤的事務(wù)驗(yàn)證確認(rèn),從而破壞整個(gè)鏈的數(shù)據(jù)一致性。
針對(duì)上述問題,在區(qū)塊鏈狀態(tài)分片的基礎(chǔ)上,加入抗合謀攻擊的多輪驗(yàn)證方案。對(duì)同一筆交易進(jìn)行多輪共識(shí)驗(yàn)證,直到驗(yàn)證結(jié)果達(dá)成一致的次數(shù)達(dá)到兩次,有效降低了合謀攻擊發(fā)生的概率,同時(shí)為避免資源浪費(fèi),設(shè)定本文方案的輪數(shù)上限。在每一輪次對(duì)驗(yàn)證節(jié)點(diǎn)重新分配時(shí),選擇VRF作為節(jié)點(diǎn)隨機(jī)分配算法,并對(duì)產(chǎn)生的隨機(jī)數(shù)進(jìn)行調(diào)整,保證了驗(yàn)證節(jié)點(diǎn)在分配時(shí)的隨機(jī)性和不可預(yù)測(cè)性。
實(shí)驗(yàn)表明,本文提出的抗合謀攻擊的多輪驗(yàn)證方案合理可行,可以在不影響系統(tǒng)性能的情況下,有效降低合謀攻擊發(fā)生的概率。但是,此方案尚存在一些不足,還需在后續(xù)工作中繼續(xù)展開細(xì)致的研究,不斷健全此方案。
(1) 倘若網(wǎng)絡(luò)中存在只存儲(chǔ)一個(gè)分片數(shù)據(jù)的節(jié)點(diǎn)、存儲(chǔ)k個(gè)分片數(shù)據(jù)的節(jié)點(diǎn),以及存在全節(jié)點(diǎn)時(shí),還需具體分析合謀攻擊發(fā)生的概率會(huì)有怎樣的變化,然后提出相應(yīng)的激勵(lì)機(jī)制,鼓勵(lì)網(wǎng)絡(luò)中的節(jié)點(diǎn)向好的方向發(fā)展。
(2) 因區(qū)塊鏈公開透明的特點(diǎn),如何生成不可預(yù)測(cè)的隨機(jī)數(shù),是區(qū)塊鏈面臨的一個(gè)重要問題。在下一步工作中,需對(duì)如何獲取更加公開、隨機(jī)且無法預(yù)測(cè)的“種子”作為輸入x展開研究。