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