于 謙 李志淮 田 娜
1(大連海事大學 遼寧 大連 116026)
2(泰康人壽 北京 102200)
區塊鏈技術[1]本質上是一個分布式總賬系統,擁有去中心化、去信任、不可更改等特點,解決了傳統互聯網模式中第三方中介不可信、不可靠的問題[2]。習近平在中央政治局第十八次集體學習時強調:把區塊鏈作為核心技術自主創新重要突破口,加快推動區塊鏈技術和產業創新發展。區塊鏈技術的價值有目共睹。但是,目前區塊鏈的基礎設施無法滿足大規模應用的要求,限制了區塊鏈行業的發展,擴容需求強烈[3-5]。為此,開發者們提出了分片[6]、DAG[7]、狀態通道[8-9]、側鏈[10]等多種擴容方案。
對比各種擴容方案,分片是最有希望能夠實現高性能而不降低去中心化程度的擴容方案。分片包括網絡分片、交易分片和狀態分片[11]。其中網絡分片在網絡層將所有節點劃分到了不同的分片中[12]。交易分片將全網交易劃分到不同的分片中驗證和打包,全網多個分片可以同時打包和驗證不同的交易,并行處理,從而提升全網的整體性能。狀態分片將完整的賬本信息分別存儲到各個分片當中,各個節點不再存儲完整的區塊鏈狀態信息,每個分片內各自維護部分的賬本信息。網絡分片是交易分片和狀態分片的基礎[12]。交易分片雖然能在一定程度上提升公鏈性能,但并不能從根本上解決資源瓶頸等問題。因此,只有實現狀態分片才能從本質上解決公鏈可擴展性問題。
狀態分片是迄今為止所有分片提案中實現難度最高的,面臨著跨分片通信和狀態交換頻繁、分片遭受攻擊導致脫機,以及節點保持靜態遭受攻擊等挑戰。對于跨分片通信和狀態交換問題,目前業界大致有四種方案。Omniledger[13]讓發出交易的客戶端主動維護一致性,分片協議不用考慮維護一致性的問題,技術簡單,且避免了分片之間一致性協議的開銷;Chainspace[14]基于trace對交易進行標注,交易注入到網絡中之前,先模擬trace,并以此標注出可能與其他交易沖突的地方,然后根據這些沖突發到相關的分片中處理,相關的分片之間再用S-BAC去共識;Ethereum[15]將幣的轉移過程切開,分成幣的發送和幣的接收,并且在不同的共識周期中完成;Rchain將跨分片的交易在它們的父級分片中處理。對于分片受到攻擊導致脫機這一問題,目前解決方案是維護存檔或備份節點,以幫助網絡進行故障排除并從數據不可用中恢復。最后,為了防止節點是靜態的,不能很好地抵御攻擊和故障,在Rapidchain[16]分片協議中介紹了一個委員會重組方案,叫作有界的布谷鳥原則(Bounded Cuckoo Rule),更加高效地進行分片委員會重構,同時可以防止惡意節點控制某個分片的行為發生。
另外,針對狀態分片間的女巫攻擊[17]以及雙花攻擊[18]問題,在以太坊[19]2.0狀態分片中,引入信標鏈來負責主鏈以及管理各個分片。驗證節點需要向信標鏈抵押一定數量的ETH來獲得許可,若節點作惡,信標鏈會對作惡節點進行相應的懲罰,以此來防止女巫攻擊。由信標鏈對跨分片交易進行驗證,以防止分片間雙花攻擊問題。
在狀態分片種種挑戰的解決方案中,都回避了受狀態分片限制導致的合謀攻擊問題。
多輪的概念在文獻[12]里被首次提出。為防止分片失效無法達成共識,故提出多輪的解決方案。主要思想是:如果第一輪共識失敗,則節點重新隨機分配進行第二輪共識,直到共識成功為止。此方案同樣回避了合謀攻擊問題,因為即使共識成功,也有可能是作惡節點合謀導致。
本文針對目前區塊鏈狀態分片存在的合謀攻擊問題,提出一種狀態分片中抗合謀攻擊的多輪驗證方案。
在分片內的驗證節點中,拜占庭[20]節點所占比例較高但是不超過總節點1/3的情況下,存在某個分片中拜占庭節點占據大多數,且相互串通,進行合謀攻擊,最終達成錯誤共識的可能。分片內合謀攻擊發生需滿足以下兩個條件。
(1) 分片內拜占庭節點數大于該分片內節點總數的2/3。
(2) 拜占庭節點串通在一起進行合謀。
因狀態分片的約束,區塊鏈網絡中節點的隨機分配受到限制,即節點只能分配到存儲其數據的分片中去。BFT(拜占庭)節點數量比交易分片有更高概率出現b≥2n/3(n為網絡中節點總數),且這些BFT節點可能形成合謀,將錯誤的事務驗證確認,從而破壞整個鏈的數據一致性。

1.2.1交易分片發生合謀攻擊的概率分析

(1)
分母表示全網一共有N個節點,其中分到第Ki個分片的節點是L個;分子分別表示全網(N×f)個拜占庭節點中,第Ki個分片有x個,全網(N-N×f)個非拜占庭節點中,第Ki個分片有(L-x)個。
根據式(1),假設網絡中驗證節點總數N=8 000,設置f=[0.1,0.25,0.33]。使用Python語言進行模擬計算,當網絡中拜占庭比例f以及單個分片中節點數目L均發生變化時,分片中拜占庭節點發生合謀攻擊的概率。單個分片中拜占庭節點合謀的概率P見表1。

表1 單個分片中拜占庭節點合謀的概率
如表1所示,當區塊鏈網絡中拜占庭節點占比比較低(f<0.15)時,無論單個分片中節點數目怎樣變化,合謀攻擊發生的概率都不會太高;當區塊鏈網絡中拜占庭節點占比比較高(f=0.25~0.33)時,只要單個分片內節點數目不低于60,合謀攻擊發生的概率也不會太高,最高概率是5.09e-10左右,甚至可以忽略。
1.2.2狀態分片發生合謀攻擊的概率分析
狀態分片中,節點只能被分配到存儲其數據的分片中去。假設有Mi個節點存儲第Ki個分片的數據,用F表示Mi個節點中拜占庭節點比例。同理,狀態分片發生合謀攻擊的概率也按照超幾何分布的分布列進行處理。第Ki個分片發生合謀攻擊的概率如式(2)所示。
(2)
式中:分母表示有Mi個節點存儲第Ki個分片的數據,其中分到第Ki個分片的節點是L個;分子分別表示(Mi×F)個拜占庭節點中,第Ki個分片有x個,(Mi-Mi×F)個非拜占庭節點中,第Ki個分片有(L-x)個。
由式(2)可知,第Ki個分片發生合謀攻擊的概率跟Mi、F、L的取值有關。為了方便比較,先假設F=0.33,L=120,用Python模擬計算出在存儲第Ki個分片數據的節點數Mi發生變化時,第Ki個分片拜占庭節點發生合謀攻擊的概率,見表2。

表2 不同節點數Mi對合謀攻擊概率P的影響
如表2所示,當其他條件固定時,合謀攻擊概率P與Mi取值關系不大,甚至可以忽略。
另一方面,式(2)中,Mi個節點中拜占庭節點數(Mi×F)一定是小于等于網絡中拜占庭節點總數(N×f)的,且因拜占庭節點分配不均,Mi個節點中拜占庭節點比例F有可能大于整個網絡中拜占庭節點比例f。又因Mi取值對合謀攻擊概率P的影響微乎其微,故為方便比較,設置Mi=600,根據式(2)用Python模擬計算當Mi個節點中拜占庭比例F以及單個分片中節點數目L均發生變化時,分片中拜占庭節點發生合謀攻擊的概率,見表3。

表3 分片內不同節點數L以及Mi個節點中不同拜占庭
如表3所示,合謀攻擊發生的概率隨著F的增大顯著增大。F取值從0.40開始,在其他變量(整個網絡的拜占比f,分片內節點數量L)一致的前提下,狀態分片合謀攻擊發生的概率已經遠遠超過了交易分片合謀攻擊發生的概率。
此外,根據表3還可以看出,相同拜占比下,合謀攻擊發生的概率隨著分片內節點數量的減少而升高。當單個分片內驗證節點數量減少到低于60,只要F大于等于0.38,此時合謀攻擊發生的概率最小也是5.1e-7,這已經是一個不能忽視的值了;F取值從0.45開始,即使分片內節點數L達到128個,合謀攻擊發生的概率依然高達1.1e-8。系統的安全性受到了極大的威脅。
綜合上述分析,狀態分片的合謀攻擊問題不容忽視且亟待解決。針對此問題,本文將提出一種解決方案,在降低分片內合謀攻擊發生的概率、保證系統安全性的同時,在一定程度上提高系統的性能。
多輪驗證方案主要包括以下3個步驟。
(1) 按照映射規則將交易分配到相應分片中。
(2) 使用節點隨機分配算法生成隨機數,然后將驗證節點根據映射規則分配到相應的分片中,對交易進行共識驗證。
(3) 如果交易驗證結果達到一致,則重復步驟(2),直到相同的交易驗證結果達到兩次,將交易打包;若交易驗證共識超時,同樣重復步驟(2),當多輪輪次達到T次仍共識超時,則放棄該筆交易。具體流程見圖1。

圖1 多輪驗證總體流程
2.2.1輪數上限Tmax
輪數上限Tmax,即多輪驗證方案最多要進行的共識驗證輪數。當對同一筆交易通過Tmax輪共識驗證都無法達到統一驗證結果時,便舍棄此交易。Tmax受共識超時概率的影響,當分片內拜占庭節點所占比例大于等于三分之一時,會導致共識超時,分片失效,從而破壞系統一致性。將Tmax的取值設定為共識超時概率低于10-6時的值。

(3)
式中:分母表示全網一共有N個節點,其中存儲第Ki個分片的節點是Mi個;分子分別表示全網(N×f)個拜占庭節點中,這Mi個節點中有(Mi×F)個,全網(N-N×f)個非拜占庭節點中,這Mi個節點中有(Mi-Mi×F)個。
設置系統網絡中節點數N=8 000,易知,系統拜占比越高,分片失效概率越大,需要的輪數越多。因此,輪數上限的確定選擇在系統拜占比f=0.33的情況下,根據式(3),使用Python語言進行模擬計算。當存儲第Ki個分片數據的節點數Mi以及Mi個節點中拜占比F各自發生變化時事件A發生的概率見表4。
如表4所示,無論Mi取值多少,這Mi個節點中,根據表中所提供的數據,最有可能出現的拜占比F為0.35。用同樣的方式模擬計算出F在區間[0.30,0.35]和[0.35,0.40]上時,事件A發生的概率。無論Mi取值多少,當F為0.33時,事件A發生的概率最大。也就是說,當有Mi個節點存儲第Ki個分片的數據時,在系統拜占比f=0.33的情況下,無論Mi取值多少,這Mi個節點中最有可能出現的F是0.33。
當單個分片內拜占庭節點數X>L/3時,共識超時,分片失效。分片失效概率如式(4)所示。
(4)
根據式(4),令F=0.33,使用Python語言模擬計算分片內節點數L以及存儲第Ki個分片數據的節點數Mi取值各不同時,分片失效的概率見表5。

表5 不同Mi和L對分片失效概率的影響

2.2.2輪數下限Tmin
輪數下限Tmin,即多輪驗證方案最少要進行的共識驗證輪數。Tmin受合謀攻擊概率影響。在狀態分片后續發展中,為了提高性能,會通過減少分片內節點數目,擴大分片規模來實現。設定Tmin的取值為分片內節點數大于40,合謀攻擊發生的概率小于10-8的值。多輪過程中合謀攻擊發生概率與輪數T之間的關系如式(5)所示。
(5)
PA-m-r表示多輪驗證過程中合謀攻擊發生的概率,T表示多輪輪數,P(X>2L/3)表示一輪中合謀攻擊發生的概率。將式(5)展開如式(6)所示。
(6)
在2.2.1節的分析中得到,Mi對合謀攻擊發生概率的影響微乎其微,甚至可忽略,為了方便比較,根據式(6),設定Mi=600,在F=0.33的情況下,取L=[30,45,60],通過改變多輪輪數T的取值,得到多輪下的合謀攻擊發生的概率。使用Python語言進行模擬計算,在分片內節點數L固定的前提下,計算出在多輪輪數T不同的情況下,分片中拜占庭節點發生合謀攻擊的概率P,結果見表6。

表6 輪數T對合謀攻擊概率P的影響
可以看出,多輪輪數T=2時,合謀攻擊發生的概率與未使用多輪方案時發生合謀攻擊的概率相比降低十分明顯,幾乎降到了未使用多輪方案時合謀攻擊發生概率的平方級別,可見,多輪共識驗證的方案對抗合謀攻擊起到了很好的作用。
此外,分片內節點越少,合謀攻擊發生的概率越大。但是從第二輪開始,合謀攻擊發生的概率已經遠遠小于10-8,因此取Tmin的值為2。也就是說,為了很好地改善合謀攻擊問題,本方案設置在多輪共識驗證過程中,當對同一筆交易進行共識驗證的結果達成一致且一致次數達到兩次時,此筆交易驗證通過,而這需要的最少輪數是兩輪。
為保證節點分配時較高的隨機性和不可預測性,本方案選擇VRF(Verifiable Random Function,可驗證隨機函數)[21]作為節點隨機分配算法的隨機函數。
2.3.1可驗證隨機函數
所謂VRF就是指給定一個消息和一個私鑰,可以計算出一個唯一確定的值,這個值唯一確定且不可預測,且可以驗證。
LISP協議即位置標識和身份標識分離協議,它是一種針對互聯網未來提出的一種全新的路由架構。LISP架構的提出可以給邊緣網絡更大的靈活性,同時對解決BGP路由表的膨脹和終端移動性增多等問題效果顯著。因為它將隧道協議應用在不同LISP本地網絡間,這在很大程度上有利于在虛擬網絡下實現LISP架構。
VRF包含4個函數:VRFGEN、VRFVAL、VRFPROVE、VRFVER。
(1) VRFGEN:隨機生成密鑰,用來生成一對非對稱加密的密鑰,即一對非對稱加密的公私鑰(Vk,Sk)。
(2) VRFVAL:生成隨機數輸出value。
(3) VRFPROVE:證明函數,根據私鑰和輸入x計算,生成零知識證明proofx。
(4) VRFVER:驗證函數,其他節點收到廣播出來的輸入x和零知識證明后,結合生成隨機數的公鑰,對隨機數進行驗證。
VRF生成隨機數的流程是節點用VRFGEN生成的私鑰和一個全網都知道的x作為輸入,使用VRFVAL生成隨機數value,VRFPROVE生成零知識證明proofx。
隨機數生成后,該節點將零知識證明proofx和隨機數value廣播到全網,所有收到該零知識證明和隨機數的人,均可通過公鑰Vk和輸入x驗證隨機數是否正確。VRF隨機數生成和驗證流程見圖2。
VRF流程見圖3。

圖3 VRF流程
2.3.2參數設置與結果處理
2.3.1節提到的x是VRF生成隨機數的種子參數。因VRF具有對于相同的輸入,輸出一定相同的特點,x需具有公開、隨機且不斷更新的特點。據此,本方案對VRF輸入x進行設置,如式(7)所示。
x=H(Bh-1,{Ik})
(7)
式中:h表示當前區塊高度,即第h個區塊;Bh-1表示當前區塊的上一區塊的哈希值;{Ik}表示第k個驗證節點與網絡中相鄰的兩個驗證節點互換一個數字得到的數字集合。
生成的隨機數value均勻分布在值域范圍內,定義輸入x的最大位數是256位,則value的取值在0到2256之間,即value=2bits(value),value∈[0,2256),bits(value)是value的位數。對value進行處理,讓驗證節點根據結果進入相應的分片中,如式(8)所示。
(8)

2.3.3安全性分析
在區塊鏈網絡中,因狀態分片的約束,BFT(拜占庭)節點數量有更高概率出現b≥2n/3,b表示拜占庭節點數,n表示網絡中節點總數。且這些BFT節點可能形成合謀,將錯誤的事務驗證確認,從而破壞整個鏈的數據一致性。而多輪驗證有效解決了這個問題。由式(6)可知,多輪過程中合謀攻擊發生概率與輪數T之間的關系為:
(9)
使用Python語言進行模擬計算,在分片內節點數L=30的前提下,計算出在多輪輪數T不同的情況下,分片中拜占庭節點發生合謀攻擊的概率P,結果見表7。

表7 輪數T對合謀攻擊概率P的影響
如表7所示,雖然選取的拜占庭比例F較高,但是采用多輪后,即使拜占庭比例F達到0.38,合謀攻擊的概率也降到了10-8以下,跟未使用多輪時發生合謀攻擊的概率(見表3)差異明顯。使用多輪后合謀惡意驗證的概率顯著降低。
同時,在不同輪驗證中,盡量避免兩個以上的節點重復進入同一分片。根據VRF算法的隨機性和不可預測性,本方案采用VRF隨機數生成算法,在每一輪次對驗證節點重新分配時,作惡節點無法通過控制隨機數的生成進入到特定的分片中。每一輪次重新分配驗證節點時,某個節點進入哪個分片無法預測,保證了隨機性。
為驗證本文方法確實可以降低合謀攻擊的概率,且多輪驗證犧牲的延遲不會降低系統總體的交易吞吐量TPS,進行模擬對比實驗。目前比較流行的分片方案中都回避了合謀攻擊問題,但OmniLedger分片方案在目前存在的分片方案中優勢極為突出。尤其是在節點隨機分配方面,啟用驗證器來加入系統,用一種安全的方法進行分片,這樣惡意者就不能輕易地對一個分片進行攻擊。OmniLedger還是第一個可提供“水平擴展”事務處理能力的分布式賬本體系結構,與Visa等中心化支付處理系統相媲美,同時又不會影響安全性,兼具去中心化的特點。再看其發展前景,OmniLedger和Chainspace的結合極有可能創建一個開放式可擴展的智能合約平臺,與其他分片協議對比,提供了更強大的可擴展性和安全性。綜上,OmniLedger分片方案不僅在目前存在的分片方案中優勢極為突出且發展前景良好,最重要的是,OmniLedger方案跟本方案都使用VRF協議將節點隨機地分配到不同的分片上,且每個分片的共識都采用PBFT算法,有較好的對比性。故選擇Omniledger分片方案為基礎,與本方案做對比,對比兩種方案的交易驗證率、出塊時間、吞吐量和在使用多輪驗證后的差異。
實驗在實驗室的8臺服務器上運行,使用實驗室局域網搭建的P2P測試網絡作為實驗所需的網絡環境。使用相同配置的虛擬機模擬區塊鏈網絡中的驗證節點,一個虛擬機代表一個驗證節點,實驗共設置1 800個節點,設置分片規模為30,每個分片中平均有60個驗證節點。為了更直觀地進行分析對比,在實驗過程中除了交易產生的gas(單筆交易的消耗)費,其余gas費予以忽略。
3.2.1交易驗證率對比實驗
總節點數為1 800,設置拜占庭節點所占比例為0.3,運行Omniledger模擬系統和本方案系統,分別向每個分片內投放3 000條交易,其中包含20%不合法交易,以投放交易時刻作為0時刻,分別在0、5、15、20、25、30時刻記錄Omniledger模擬系統和本方案模擬系統中每個分片交易處理情況,重復進行實驗,計算平均交易驗證率,并對結果加以對比分析。交易驗證率對比見圖4。

圖4 交易驗證率
如圖4所示,兩實驗開始交易驗證率均接近80%,隨著時間推移,不合法交易所占的比例逐漸增加,故兩系統的交易驗證率均逐漸降低。可以看出,Omniledger模擬系統中的交易驗證率變化不明顯,說明有一部分不合法交易被驗證通過了,即發生了合謀攻擊。而在本方案的實驗中,隨著時間推移,驗證率有較明顯的降低,說明部分發生合謀的交易驗證未被通過。由此實驗可以證明,多輪驗證方案可以有效降低合謀攻擊發生的概率。
3.2.2出塊時間對比實驗
TPS=(gasLimit/gas)/time,其中:gasLimit是單個區塊允許的最多gas總量;gas指的是單筆交易的消耗;time是區塊出塊時間。在進行交易處理能力對比實驗之前,先進行平均出塊時間對比實驗。將Omniledger模擬系統以及本方案模擬系統分別運行10天,記錄每天的區塊高度,計算平均出塊時間,再根據區塊鏈瀏覽器統計相同時間下真實網絡的平均出塊時間,進行對比分析。平均出塊時間見圖5。
可以看出,實驗室網絡下,Omniledger模擬系統和本方案模擬系統平均出塊時間相近,略低于真實網絡中Omniledger系統的平均出塊時間,三種情況下的平均出塊時間均相對穩定,無劇烈變化。說明三種情況下,系統均穩定運行,且本方案系統在降低合謀攻擊概率的同時,并沒有犧牲出塊時間。實驗室搭建的P2P網絡運行比較穩定,所以兩種方案的平均出塊時間均無劇烈變化。實驗環境下未考慮除交易產生的gas費的其他費用,且真實網絡下,驗證節點遍布世界各地,數據的傳輸需要花費一定的時間,網絡延遲比較大,所以真實網絡下的Omniledger系統平均出塊時間比實驗環境下的高。
3.2.3吞吐量對比實驗
在交易處理能力實驗設計中,改變Omniledger模擬系統的設置,總節點數保持1 800不變,將分片數設為14,使得每個分片中驗證節點數達到128,本方案系統保持不變。設置區塊gasLimit大小為8 000 000。分別運行Omniledger模擬系統和本方案模擬系統,每隔一個區塊向Omniledger模擬系統中投放84 000條交易,向本方案的模擬系統中投放180 000條交易,平均每個分片內500條交易。隨著時間的增加,單個分片內的交易分別達到1 000、2 000、3 000、4 000、5 000、6 000等,單個分片內每產生一個區塊,統計消耗的交易數量,重復實驗,計算出每秒平均交易處理數量,并進行對比分析。平均交易處理能力見圖6。

圖6 平均交易處理能力
可以看出,隨著時間的推移,交易不斷累積,造成交易擁堵,因此兩個模擬系統的交易處理能力都在慢慢降低。當系統中總驗證節點數不變時,本方案的平均交易處理能力總體稍高于Omniledger系統的平均交易處理能力。雖然加入多輪驗證方案使得交易驗證的時間變長,但是在驗證節點總數不變的情況下,增加了分片的數量,使得總體交易處理能力得到提升。可以證明,本方案在不影響系統性能甚至在系統性能稍有提升的情況下,很好地達到了抗合謀攻擊的效果。
因狀態分片的約束,驗證節點的隨機分配受到限制,即節點只能分配到存儲其數據的分片中去。BFT節點數量有更高概率出現b≥2n/3,且這些BFT節點可能形成合謀,將錯誤的事務驗證確認,從而破壞整個鏈的數據一致性。
針對上述問題,在區塊鏈狀態分片的基礎上,加入抗合謀攻擊的多輪驗證方案。對同一筆交易進行多輪共識驗證,直到驗證結果達成一致的次數達到兩次,有效降低了合謀攻擊發生的概率,同時為避免資源浪費,設定本文方案的輪數上限。在每一輪次對驗證節點重新分配時,選擇VRF作為節點隨機分配算法,并對產生的隨機數進行調整,保證了驗證節點在分配時的隨機性和不可預測性。
實驗表明,本文提出的抗合謀攻擊的多輪驗證方案合理可行,可以在不影響系統性能的情況下,有效降低合謀攻擊發生的概率。但是,此方案尚存在一些不足,還需在后續工作中繼續展開細致的研究,不斷健全此方案。
(1) 倘若網絡中存在只存儲一個分片數據的節點、存儲k個分片數據的節點,以及存在全節點時,還需具體分析合謀攻擊發生的概率會有怎樣的變化,然后提出相應的激勵機制,鼓勵網絡中的節點向好的方向發展。
(2) 因區塊鏈公開透明的特點,如何生成不可預測的隨機數,是區塊鏈面臨的一個重要問題。在下一步工作中,需對如何獲取更加公開、隨機且無法預測的“種子”作為輸入x展開研究。