浮宇麗,任亞唯,2+
(1.北京信息科技大學(xué) 信息管理學(xué)院,北京 100192; 2.中國科學(xué)院信息工程研究所 信息安全國家重點實驗室,北京 100093)
區(qū)塊鏈技術(shù)是從比特幣系統(tǒng)中提煉出來的底層框架[1],具有去中心化、不可篡改、可以追溯、集體維護(hù)等特點[2]。
區(qū)塊鏈本質(zhì)是一個去中心化的數(shù)據(jù)庫。由于區(qū)塊只允許添加、不允許刪除,隨著交易的增加,所需的存儲空間線性增長,造成了區(qū)塊鏈存儲可擴(kuò)展性差問題[3]。到2022年3月16日為止比特幣系統(tǒng)中整個區(qū)塊鏈數(shù)據(jù)占355.69 G,而系統(tǒng)中共計1.1萬余全節(jié)點都需存儲一個數(shù)據(jù)副本,這些冗余副本占用量高達(dá)3820.89 TB,造成了存儲空間的嚴(yán)重浪費[4-6]。部分全節(jié)點由于無法存儲完整的區(qū)塊鏈而選擇成為輕節(jié)點或退出網(wǎng)絡(luò)[7],以及在區(qū)塊鏈應(yīng)用中冗余性存儲造成的空間浪費[8]等問題,對區(qū)塊鏈的安全性和去中心化造成嚴(yán)重影響,制約了區(qū)塊鏈在物聯(lián)網(wǎng)、車聯(lián)網(wǎng)及輕量級網(wǎng)絡(luò)等領(lǐng)域的應(yīng)用。
近年來,研究者們針對區(qū)塊鏈存儲可擴(kuò)展性問題提出了一些解決方案,這些方案主要歸納為兩大類,一類利用第三方存儲系統(tǒng)存儲區(qū)塊鏈數(shù)據(jù),另一類則對區(qū)塊鏈存儲模型進(jìn)行優(yōu)化[9]。使用第三方存儲系統(tǒng)降低了區(qū)塊鏈的去中心化。優(yōu)化區(qū)塊鏈存儲模型的方案采用協(xié)作式存儲,通過多個節(jié)點合作,每個節(jié)點存儲部分賬本,提高了區(qū)塊鏈的存儲可擴(kuò)展性。然而這種鏈上協(xié)作式存儲易受到惡意節(jié)點的影響,造成嚴(yán)重的安全問題。
本文針對上述問題提出一種區(qū)塊鏈分片存儲模型,主要貢獻(xiàn)為:
(1)提出了一種基于可驗證秘密共享的區(qū)塊鏈分片存儲模型。模型使多個節(jié)點合作存儲數(shù)據(jù)區(qū)塊,每個節(jié)點只需存儲完整區(qū)塊的一部分,且節(jié)點能夠?qū)κ盏降姆制M(jìn)行驗證,提高可擴(kuò)展性和安全性。
(2)本模型提高了區(qū)塊鏈存儲的可驗證性。模型在每個分片生成同時計算可驗證序列,并將其廣播,每個節(jié)點可對分片進(jìn)行驗證。本模型在抵御惡意節(jié)點欺騙攻擊有顯著優(yōu)勢。
(3)節(jié)點根據(jù)區(qū)塊的穩(wěn)定性選擇不同的安全策略。對于高穩(wěn)定性區(qū)塊直接分片存儲,保證存儲效率;對于其它區(qū)塊,將區(qū)塊和存儲節(jié)點的身份綁定,避免惡意節(jié)點對存儲系統(tǒng)的影響。
提高區(qū)塊鏈存儲可擴(kuò)展性的研究包括鏈上與鏈下兩種存儲方案。鏈上存儲方案更適合節(jié)點眾多的公有鏈與聯(lián)盟鏈,提高了可擴(kuò)展性,但安全問題一直是這種方案需要解決的問題[10]。
賈大宇等[11]提出一種區(qū)塊鏈存儲容量可擴(kuò)展性模型,將區(qū)塊鏈中的各區(qū)塊存儲在一定比例節(jié)點中,而不是所有節(jié)點,減少了區(qū)塊鏈的存儲空間,降低了區(qū)塊鏈的去中心化。
Zhang等[12]提出了一種低開銷的區(qū)塊鏈存儲架構(gòu),其將原始數(shù)據(jù)轉(zhuǎn)化為關(guān)鍵詞的語義信息、將低價值數(shù)據(jù)存儲到中央數(shù)據(jù)庫、將區(qū)塊鏈賬本劃分成多個切片。此方案降低了區(qū)塊鏈系統(tǒng)的去中心化。
張國潮等[13]提出一種基于門限秘密共享的區(qū)塊鏈分片存儲模型,使用改進(jìn)后的Shamir門限秘密共享方案將區(qū)塊分片并存儲在網(wǎng)絡(luò)中的各個節(jié)點。此方法雖然降低了區(qū)塊數(shù)據(jù)分片在存儲節(jié)點的存儲空間,但計算開銷較大。
Kim等[14]提出一種基于局部秘密共享的分布式區(qū)塊鏈存儲模型,根據(jù)數(shù)據(jù)重要性將其分為全局共享和局部共享,局部共享可恢復(fù)碼編碼數(shù)據(jù),減少存儲空間,但時間開銷大。
卿欣藝等[15]提出基于中國剩余定理的區(qū)塊鏈存儲擴(kuò)展模型,模型將區(qū)塊劃分高低安全性,高安全性區(qū)塊分布式存儲,低安全性區(qū)塊全網(wǎng)保存。
尹芙蓉等[16]提出一種基于糾刪碼的區(qū)塊鏈分片存儲系統(tǒng),采用區(qū)間劃分方法將區(qū)塊分區(qū),然后使用糾刪碼編碼分布存儲在系統(tǒng)的節(jié)點上,但這種方法不具備身份認(rèn)證機(jī)制。
上述鏈上存儲方案都是將區(qū)塊鏈的存儲可擴(kuò)展性作為主要的考慮對象,而忽略了系統(tǒng)的可靠性,同時不能避免網(wǎng)絡(luò)惡意節(jié)點造成的欺騙攻擊等安全問題。
傳統(tǒng)存儲模型中每一個區(qū)塊的產(chǎn)生是礦工在一段時間內(nèi)將交易信息打包的結(jié)果[17]。隨著區(qū)塊的不斷產(chǎn)生,每個節(jié)點都會保存一份完整的區(qū)塊鏈賬本。同時每個區(qū)塊的生成都與之前區(qū)塊有關(guān),任何一個區(qū)塊變動都會使其后所有區(qū)塊產(chǎn)生變化。51%共識攻擊[18]主要針對了還未產(chǎn)生的區(qū)塊。當(dāng)攻擊者試圖更改區(qū)塊數(shù)據(jù)時,攻擊者需要比誠實節(jié)點更快地產(chǎn)生一條平行鏈代替區(qū)塊鏈,攻擊者是否能夠成功趕超誠實鏈可以近似地看成賭徒破產(chǎn)問題[11]。
51%攻擊針對的是傳統(tǒng)區(qū)塊鏈的Merkle樹值,而改進(jìn)之后的區(qū)塊鏈結(jié)構(gòu)同樣需要避免此類攻擊。模型需要對分片的區(qū)塊進(jìn)行穩(wěn)定性判定,并對此區(qū)塊的存儲節(jié)點進(jìn)行身份驗證,以保證低穩(wěn)定性區(qū)塊分片后的不可篡改性。
假設(shè)p為誠實節(jié)點獲得記賬權(quán)的概率,q為攻擊節(jié)點獲得記賬權(quán)的概率 (p+q=1), 那么攻擊者在區(qū)塊增加了第z塊時,攻擊者潛在的進(jìn)展服從泊松分布[19],分布期望為
(1)
攻擊者成功篡改區(qū)塊數(shù)據(jù)的概率Pz為
(2)
由式(2)得,z越大則Pz越小,且隨著z的增加,攻擊者成功篡改區(qū)塊數(shù)據(jù)的概率呈指數(shù)趨勢下降,如圖1所示。
圖1 攻擊成功的概率
隨著誠實節(jié)點產(chǎn)生區(qū)塊的增加,攻擊者越來越難趕超誠實鏈。因此,越原始的區(qū)塊中數(shù)據(jù)被篡改的可能性就越低,區(qū)塊的穩(wěn)定性和安全性也就越高。
Borel定律[20]定義一個事件發(fā)生的概率小于1/1050則為不可能事件。因此當(dāng)區(qū)塊高度z增大到一定程度后就不存在被篡改的可能。隨著z的增大,區(qū)塊會在鏈中某一位置zL達(dá)到“不可被篡改”,即為高穩(wěn)定性區(qū)塊。因此,在本研究中對于那些z不夠大的位置的區(qū)塊,使用密鑰協(xié)商協(xié)議后分片存儲,可對存儲節(jié)點進(jìn)行身份認(rèn)證,避免惡意節(jié)點破壞交易過程。對于z足夠大的位置的區(qū)塊,可以直接使用可驗證秘密共享算法[21]進(jìn)行分片存儲,提高區(qū)塊鏈系統(tǒng)的存儲效率。
在本文模型中,根據(jù)區(qū)塊穩(wěn)定性判定的結(jié)果,對于處在zL后的有被篡改可能性的區(qū)塊分片,分片/廣播節(jié)點需要和存儲節(jié)點進(jìn)行密鑰協(xié)商。
密鑰協(xié)商時,分片/廣播節(jié)點將對各個存儲節(jié)點進(jìn)行身份驗證,通過計算并驗證節(jié)點的唯一標(biāo)識符cookie完成身份認(rèn)證。身份認(rèn)證成功后,分片/廣播節(jié)點會和各個存儲節(jié)點協(xié)商密鑰,接著用協(xié)商成功的密鑰衍生一個傳輸密鑰來加密需要傳輸?shù)姆制瑪?shù)據(jù)。密鑰協(xié)商協(xié)議可以保證各個節(jié)點的安全性以及分片數(shù)據(jù)傳輸?shù)陌踩浴?/p>
在協(xié)商過程中,分片/廣播節(jié)點首先生成一個隨機(jī)數(shù)Ni,并計算其與其中一個存儲節(jié)點的唯一標(biāo)識cookiei=hash(SAD,DAD,Ni,time),SAD是分片/廣播節(jié)點的錢包地址(源地址),DAD是某存儲節(jié)點的錢包地址(目的地址),time是時間戳。之后將
存儲節(jié)點收到后需要進(jìn)行響應(yīng),同樣生成隨機(jī)數(shù)Nr, 并計算一個cookie并發(fā)
分片/廣播節(jié)點收到后就需要與存儲節(jié)點通過DH算法協(xié)商一個對稱密鑰。首先確定p和g,p為一個素數(shù),g為模p的一個原根,生成隨機(jī)數(shù)Xi
發(fā)給存儲節(jié)點。
存儲節(jié)點收到后,也生成一個隨機(jī)數(shù)Xr, 根據(jù)收到的參數(shù)計算Yr=gXrmodp, 將
(3)
根據(jù)第一步協(xié)商指定的認(rèn)證方法,雙方都能計算一個KEY=HMAC(auth,Ni|Nr),auth為認(rèn)證密鑰。為了驗證彼此身份,需要通過KEY再衍生一個密鑰用來對傳輸?shù)膮^(qū)塊數(shù)據(jù)分片進(jìn)行加密傳輸
本礦區(qū)面積較大,各礦體分布分散,位于孔隙含水層系統(tǒng)內(nèi)的礦體影響區(qū)域巖溶地下水流動系統(tǒng)與局部孔隙地下水流動系統(tǒng)的補、徑、排路徑。根據(jù)礦區(qū)地勘報告,大部分礦體位于地下水最高水位以上,極少部分礦體位于地下水水位變動帶內(nèi)。
KEY0=HMAC(KEY,K|cookiei|cookier|0)
(4)
接著,分片/廣播節(jié)點計算HASHi, 其表達(dá)如式(5)所示,并將KEY0作為對稱密碼的密鑰加密HASHi, 此后將結(jié)果發(fā)給存儲節(jié)點進(jìn)行身份認(rèn)證。存儲節(jié)點同樣計算HASHr, 并解密收到的內(nèi)容,將結(jié)果與HASHr進(jìn)行比對
HASHi=HMAC(KEY,K|cookiei|cookier|SAD)
(5)
按相同方法,存儲節(jié)點也發(fā)送相關(guān)計算結(jié)果到分片/廣播節(jié)點進(jìn)行身份驗證。若此時驗證都成功,則分片/廣播節(jié)點就將加密分片數(shù)據(jù)發(fā)送到存儲節(jié)點。
傳統(tǒng)區(qū)塊鏈存儲架構(gòu)采用冗余性存儲方案,即區(qū)塊鏈網(wǎng)絡(luò)中的每一個節(jié)點都存有完整的區(qū)塊鏈數(shù)據(jù)。本文提出的存儲模型將傳統(tǒng)的基于Merkle樹的冗余式存儲結(jié)構(gòu)改為分片存儲結(jié)構(gòu),每個存儲節(jié)點只需存儲每個區(qū)塊的一部分即可,其具體數(shù)據(jù)結(jié)構(gòu)如圖2所示。改變的主要部分為區(qū)塊頭的Merkle根的值以及區(qū)塊體的結(jié)構(gòu)。區(qū)塊體結(jié)構(gòu)包括交易數(shù)量、分片/廣播節(jié)點地址、分片大小和門限參數(shù) (k,n) 拼接hash后存儲在區(qū)塊頭中。由于每一個分片數(shù)據(jù)區(qū)塊的交易數(shù)量、分片/廣播節(jié)點地址和門限參數(shù)是一樣的,所以屬于同一個原始區(qū)塊的分片數(shù)據(jù)區(qū)塊的hash值是一致的。
圖2 區(qū)塊數(shù)據(jù)存儲新模型
在提出的模型中,節(jié)點主要包括分片/廣播節(jié)點、存儲節(jié)點、驗證/恢復(fù)節(jié)點。任何節(jié)點都可以作為分片/廣播節(jié)點,在某一時刻獲得記賬權(quán)限的節(jié)點便是此時的分片/廣播節(jié)點。存儲節(jié)點是本模型中存儲分片數(shù)據(jù)的節(jié)點(分片/廣播節(jié)點也可以是一個存儲節(jié)點)。驗證/恢復(fù)節(jié)點是網(wǎng)絡(luò)中的用戶在需要恢復(fù)原始數(shù)據(jù)時的節(jié)點,是存儲節(jié)點的子集。
在本文模型中,分片/廣播節(jié)點首先判定區(qū)塊安全性,之后將該時刻的數(shù)據(jù)打包并用可驗證秘密共享算法分成n片,再根據(jù)區(qū)塊安全性選擇相應(yīng)安全策略,在協(xié)商完相關(guān)參數(shù)后將n-1個分片數(shù)據(jù)私密發(fā)送給網(wǎng)絡(luò)中n-1個存儲節(jié)點(每個存儲節(jié)點存儲一個分片數(shù)據(jù))。接著利用可驗證秘密共享算法中選取的隨機(jī)數(shù)計算可驗證參數(shù)并廣播至網(wǎng)絡(luò)中全部節(jié)點。存儲節(jié)點在與分片/廣播節(jié)點協(xié)商完相關(guān)參數(shù),并接收分片/廣播節(jié)點發(fā)送來的屬于自己的分片數(shù)據(jù)和可驗證參數(shù)后,完成驗證操作并將分片數(shù)據(jù)存儲。模型存儲過程整體如圖3所示。
圖3 模型分片存儲過程整體
驗證/恢復(fù)節(jié)點在恢復(fù)數(shù)據(jù)時首先需要提供身份信息和需要恢復(fù)數(shù)據(jù)的標(biāo)識,然后廣播需要恢復(fù)數(shù)據(jù)的索引值(索引值為1表示創(chuàng)世區(qū)塊),并驗證存儲節(jié)點的身份以及收到的分片數(shù)據(jù)。在驗證成功后,驗證/恢復(fù)節(jié)點使用拉格朗日插值法恢復(fù)原始數(shù)據(jù)。模型恢復(fù)過程的整體如圖4所示。
圖4 模型分片恢復(fù)過程整體
分片數(shù)據(jù)區(qū)塊產(chǎn)生要經(jīng)過以下步驟:交易數(shù)據(jù)分片、廣播、分片數(shù)據(jù)區(qū)塊產(chǎn)生、分片數(shù)據(jù)區(qū)塊分發(fā)。
3.1.1 交易數(shù)據(jù)分片產(chǎn)生階段
如圖5為利用可驗證秘密共享算法進(jìn)行區(qū)塊數(shù)據(jù)分片的流程。記分片/廣播節(jié)點T需要分片的交易數(shù)據(jù)為D, 則在T采用可驗證秘密共享算法對D進(jìn)行分片的具體步驟如下:
(2)利用對稱密碼算法將D進(jìn)行加密,再將加密后的結(jié)果轉(zhuǎn)化為十進(jìn)制,記為SD為轉(zhuǎn)化完成后的交易數(shù)據(jù),同時將KS轉(zhuǎn)化為十進(jìn)制得到a0;
(3)存在n,k∈R且k (5)T根據(jù)上述步驟確定的參數(shù)生成如下多項式 f(x)=ak-1xk-1+ak-2xk-2+…+a1x+a0 (6) (6)計算生成的交易數(shù)據(jù)分片 (xi,yi), 其滿足 yi≡f(xi)modp,1≤i≤n (7) (7)T首先將交易數(shù)量、分片/廣播節(jié)點地址、分片大小、門限參數(shù)(k,n)進(jìn)行哈希函數(shù)計算得到一個哈希值,接著將區(qū)塊大小、前一區(qū)塊地址、后一區(qū)塊地址、版本號、時間戳、難度值、隨機(jī)數(shù)以及計算得到的哈希值封裝成一個區(qū)塊,并將區(qū)塊數(shù)據(jù)和多項式的各個系數(shù)刪除,只保留集合B。 (8)按照步驟(7)的方法,將剩余交易數(shù)據(jù)分片依次封裝成分片數(shù)據(jù)區(qū)塊BCi,1≤i≤n, 每個分片數(shù)據(jù)區(qū)塊BCi可以直接作為數(shù)據(jù)區(qū)塊上鏈; (9)T將生成的n個分片數(shù)據(jù)區(qū)塊秘密分發(fā)給存儲節(jié)點SNi(T也作為一個存儲節(jié)點),即對于每一個給定的xi,SNi存儲的分片數(shù)據(jù)區(qū)塊為BCi。 圖5 交易數(shù)據(jù)分片流程 3.1.2 廣播 T利用3.1.1節(jié)步驟(3)中得到的ai計算出bi,bi∈{1,2,…,k-1},bi的計算表達(dá)式為 bi≡gaimodp (8) 然后將計算所得結(jié)果記為B,B={b1,b2,…,bk-1}, 將B廣播給網(wǎng)絡(luò)的其余n-1個節(jié)點。 存儲節(jié)點SNi會在收到分片數(shù)據(jù)區(qū)塊后對其進(jìn)行驗證,具體驗證步驟如下: (1)SNi在收到分片數(shù)據(jù)區(qū)塊BCi后,將區(qū)塊的交易數(shù)量、分片/廣播節(jié)點地址、分片大小、門限參數(shù)(k,n)進(jìn)行哈希函數(shù)計算得到其哈希值,并將此哈希值與區(qū)塊頭中的哈希值進(jìn)行比對驗證; (2)如果兩個哈希值比對不相等,則說明BCi不具有正確性,將其舍棄并廣播一個對T的抱怨;如果兩個哈希值比對相等,則說明此區(qū)塊正確,再對分片數(shù)據(jù)進(jìn)行驗證; (3)對于分片數(shù)據(jù)(xi,yi),SNi需要驗證其是否滿足 (9) (4)如果 (xi,yi) 滿足上述表達(dá)式,則SNi就將BCi進(jìn)行存儲;如果不能滿足條件,則丟棄BCi并廣播驗證失敗的信息。 數(shù)據(jù)區(qū)塊恢復(fù)流程如圖6所示。數(shù)據(jù)區(qū)塊恢復(fù)階段主要包括3個步驟:分片數(shù)據(jù)區(qū)塊獲取、驗證分片數(shù)據(jù)區(qū)塊以及恢復(fù)數(shù)據(jù)區(qū)塊。 網(wǎng)絡(luò)中任意用戶都能作為驗證/恢復(fù)節(jié)點對交易數(shù)據(jù)進(jìn)行恢復(fù)。在網(wǎng)絡(luò)中某驗證/恢復(fù)節(jié)點R需要恢復(fù)交易數(shù)據(jù)時,首先要向其余的存儲節(jié)點獲取分片數(shù)據(jù)區(qū)塊。具體為,R廣播所需區(qū)塊的索引值index。 其余存儲節(jié)點根據(jù)收到的索引值將其存儲的對應(yīng)分片數(shù)據(jù)區(qū)塊傳輸至R。 最終R收到大于或等于k個分片數(shù)據(jù)區(qū)塊即可。 之后R要驗證所收到的分片數(shù)據(jù)區(qū)塊,驗證方法采用3.2節(jié)步驟(3)所述方法。若收到的分片數(shù)據(jù)區(qū)塊能夠通過驗證,則將其作為恢復(fù)交易數(shù)據(jù)所需分片進(jìn)行恢復(fù);否則就不能將此分片數(shù)據(jù)區(qū)塊作為用于恢復(fù)的分片。通過驗證的分片數(shù)據(jù)區(qū)塊需要滿足不少于k個。 在R得到能夠用于恢復(fù)數(shù)據(jù)區(qū)塊的k個分片數(shù)據(jù)區(qū)塊后,利用拉格朗日插值法,將交易數(shù)據(jù)區(qū)塊進(jìn)行恢復(fù)。 具體步驟為,R首先按式(10)求出多項式f(x) (10) 然后獲取多項式系數(shù)ak-1,ak-2,…,a1, 并將ak-1,ak-2,…,a1拼接后轉(zhuǎn)化為SD, 并將a0轉(zhuǎn)化為密鑰KS, 最后通過對稱密碼算法對SD解密得到恢復(fù)的交易數(shù)據(jù)區(qū)塊。 基于可驗證秘密共享的區(qū)塊鏈分片存儲模型具有可驗證性、抗合謀性和抗單點失效性。 密鑰KS只能通過利用原始內(nèi)容D計算或合法的驗證/恢復(fù)節(jié)點恢復(fù)分片數(shù)據(jù)區(qū)塊的方式得到。 分片/廣播節(jié)點將密鑰KS轉(zhuǎn)化為十進(jìn)制得到a0, 并作為多項式f(x) 的常數(shù)項進(jìn)行計算,得到n個分片數(shù)據(jù) (xi,yi),i∈{1,2,…,n}, 并封裝為分片數(shù)據(jù)區(qū)塊BCi。 在分發(fā)過程中,僅廣播驗證集合B和分發(fā)BCi, 而不將KS直接傳輸,避免了攻擊者截獲、篡改KS的發(fā)生。在恢復(fù)過程中,具有合法身份的驗證/恢復(fù)節(jié)點通過獲取其余存儲節(jié)點存儲的BCi, 利用拉格朗日插值法取得多項式常數(shù)項系數(shù)a0, 得到恢復(fù)的密鑰KS, 同樣消除了KS′被攻擊者截獲、篡改的可能。 模型的可驗證性是指存儲節(jié)點能夠驗證分片/廣播節(jié)點分發(fā)的分片數(shù)據(jù)區(qū)塊,以及驗證/恢復(fù)節(jié)點能夠驗證存儲節(jié)點返回的分片數(shù)據(jù)區(qū)塊。 在分發(fā)過程的驗證中,設(shè)網(wǎng)絡(luò)中一個存儲節(jié)點SNt收到了分片/廣播節(jié)點T的分片數(shù)據(jù)區(qū)塊BCt, 在滿足對區(qū)塊頭部的hash值驗證條件下,SNt還需要對分片數(shù)據(jù)進(jìn)行驗證。已知SNt已經(jīng)獲得T廣播發(fā)送的驗證集合B={b1,b2,…,bk-1} 且bt∈B, 根據(jù)式(9)對分片數(shù)據(jù)進(jìn)行驗證,將式(7)代入得 因此模型總可以通過驗證計算檢測出數(shù)據(jù)內(nèi)容被篡改。 已知網(wǎng)絡(luò)中存在m個存儲節(jié)點,想通過共享各自存儲的分片數(shù)據(jù)區(qū)塊獲得原始數(shù)據(jù)內(nèi)容,m滿足m 設(shè)網(wǎng)絡(luò)的n個節(jié)點中存在c個失效節(jié)點,失效節(jié)點表示此節(jié)點存儲的分片數(shù)據(jù)區(qū)塊出現(xiàn)異常,在滿足c≤n-k的條件下,不影響網(wǎng)絡(luò)中恢復(fù)節(jié)點對原始數(shù)據(jù)的恢復(fù)。 主要分析密鑰協(xié)商在受到拒絕服務(wù)攻擊和中間人攻擊兩種主要攻擊手段時的抵御能力。 (1)拒絕服務(wù)攻擊 為了避免惡意攻擊者通過發(fā)送大量初始請求消息耗費節(jié)點內(nèi)存資源,以及連帶的DH算法模冪運算占用的較大計算資源,密鑰協(xié)商方法利用Cookie交換來提供一定程度的抵抗能力。當(dāng)有大量請求消息發(fā)來,節(jié)點不接收這些消息,只響應(yīng)一個包含其Cookie的消息。收到確認(rèn)消息才更新狀態(tài),以這種方式避免惡意攻擊者對節(jié)點內(nèi)存資源與計算資源的損耗。 (2)中間人攻擊 密鑰協(xié)商過程抵御中間人攻擊的方法主要是用共享密鑰對雙方生成的偽隨機(jī)數(shù)進(jìn)行加密,則中間人就不能獲得協(xié)商的密鑰,也無法獲得協(xié)商雙方的身份信息。 本文對基于可驗證秘密共享的區(qū)塊鏈分片存儲模型進(jìn)行了仿真實驗。實驗是在配置為Intel(R)Core(TM)i7-10875H CPU @ 2.30 GHz RAM 16.0 GB的PC上進(jìn)行的。每個共識節(jié)點均運行搭建的區(qū)塊鏈代碼,并且共識節(jié)點建立在服務(wù)器的不同端口上。所有的節(jié)點都可以作為存儲節(jié)點、分片/廣播節(jié)點、驗證/恢復(fù)節(jié)點。實驗中大素數(shù)q=244497-1, 規(guī)定每10筆交易進(jìn)行一次打包,一筆交易大小約為4 K,未分片時平均每個區(qū)塊大小約為40 K。 同時,實驗主要記錄存儲模型的時間和存儲空間占用量,簡化了其工作量證明,將實驗涉及的幾種模型POW的難度值設(shè)為2,即隨機(jī)數(shù)匹配整個區(qū)塊哈希值前2位為0時得到記賬權(quán)。 實驗分別測試了本文模型的平均區(qū)塊生成時間、平均區(qū)塊處理時間,以及節(jié)點所需的存儲空間。在存儲相同數(shù)量區(qū)塊的條件下,實驗比較了不同門限參數(shù)值下區(qū)塊的平均生成時間、總處理時間和所需存儲空間,并與基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型進(jìn)行比較。實驗測試進(jìn)行10次并取平均值,實驗結(jié)果見表1、表2。 在不同門限條件下,模型在區(qū)塊生成時間上的差距不大,而對于分片計算和密鑰協(xié)商上的時間消耗有較大影響。由表2可知協(xié)商過程的時間開銷隨生成區(qū)塊的數(shù)量以及門限參數(shù)的大小成正比,但協(xié)商過程在總體處理時間的占比逐漸降低,例如在門限參數(shù)為(20,40)的本文模型中,生成50、100和200個區(qū)塊的過程中,協(xié)商過程的時間開銷分別占總體處理時間開銷的19.01%、11.16%和7.85%。 表1 計算開銷 表2 協(xié)商過程時間開銷 實驗將本文存儲模型與傳統(tǒng)模型的存儲空間占用量進(jìn)行了對比。在不同門限參數(shù)的條件下,每組實驗生成100個區(qū)塊,存儲節(jié)點每存儲5個區(qū)塊分片就將這一時刻的完整區(qū)塊鏈寫入文件中,并記錄其大小,以此衡量每個存儲節(jié)點的存儲空間占用量。在所有節(jié)點都正常運行且不被攻擊的情況下,得到如圖7所示結(jié)果。 圖7 存儲空間占用量對比 增大模型的門限參數(shù)需要消耗更多的時間開銷,門限參數(shù)為(5,10)、(10,20)和(20,40)的本文存儲模型分別比傳統(tǒng)模型的時間開銷提高了36.89%、80.74%和148.78%,但同時通過增加模型的門限能夠降低存儲節(jié)點的存儲空間占用量,其分別比傳統(tǒng)模型的存儲占用量降低了69.66%、86.52%和93.60%,對降低存儲節(jié)點的存儲空間占用量具有顯著效果,以此提高存儲模型的可擴(kuò)展性。 同時對4.1節(jié)模型可驗證性進(jìn)行了模擬測試。針對(10,20)區(qū)塊鏈可驗證分片存儲模型中惡意節(jié)點篡改分片數(shù)據(jù)為例,分片/廣播節(jié)點發(fā)送給某一存儲節(jié)點的分片數(shù)據(jù)內(nèi)容如圖8(a)所示,而此存儲節(jié)點收到的分片數(shù)據(jù)被多個惡意節(jié)點合謀改為其它數(shù)據(jù),因此多項式系數(shù)有改變,致使存儲節(jié)點的分片數(shù)據(jù)改變,篡改為如圖8(b)所示的內(nèi)容,在存儲節(jié)點收到分片/廣播節(jié)點發(fā)送的分片區(qū)塊后,首先會對分片區(qū)塊的頭部hash值進(jìn)行驗證確保其正確性。通過此驗證后,存儲節(jié)點會再通過式(9)對分片數(shù)據(jù)進(jìn)行驗證,存儲節(jié)點驗證的計算結(jié)果應(yīng)如圖9(a)中所示結(jié)果一致,此時能夠通過驗證。而在內(nèi)容已經(jīng)被篡改的情況下,對y1驗證的計算結(jié)果如圖9(b)所示,驗證失敗。因此,模型能夠發(fā)現(xiàn)惡意節(jié)點的欺騙攻擊。 圖9 驗證結(jié)果 記哈希函數(shù)運算時間消耗為Ehash, 模運算時間消耗為Emod, 模逆運算時間消耗為Er, 多項式計算時間消耗為Ep, 對稱加密開銷為Ee, 解密開銷為Ed。 經(jīng)實驗測試,一次加解密的開銷約為一次hash運算的1.5倍,即Ee+Ed=1.5Ehash。 對于一個含有n個共識節(jié)點網(wǎng)絡(luò)的基于可驗證秘密共享的區(qū)塊鏈分片存儲模型,其計算開銷主要在于分片數(shù)據(jù)區(qū)塊的生成、分片廣播、穩(wěn)定性判定、協(xié)商、存儲和恢復(fù)階段。其中模運算、hash運算、模逆運算、對稱加密和多項式計算為主要影響因素,同時為了提高模型整體計算效率,模運算采用位運算方法。同時將本文方法與最具有可比性的文獻(xiàn)[11]和文獻(xiàn)[13]進(jìn)行了定量比較,記一次穩(wěn)定性判定的開銷為Es。 則本文模型、文獻(xiàn)[11]所提方法以及文獻(xiàn)[13]所提方法的性能見表3,其中n為節(jié)點數(shù)量,k為門限參數(shù) (k,n) 中的k。 表3 性能定量對比 對于文獻(xiàn)[13]方法,其在門限參數(shù)k>4時,時間開銷大于本文的可驗證分片存儲模型。文獻(xiàn)[11]中所提出的模型在存儲節(jié)點較少的環(huán)境中能達(dá)到較少的時間開銷,但隨著環(huán)境中存儲節(jié)點數(shù)量的增加,其時間開銷則會大于可驗證分片存儲模型,并且其恢復(fù)數(shù)據(jù)存在恢復(fù)失敗的可能。 同時根據(jù)分析,幾種存儲模型的安全屬性比較見表4。 表4 安全屬性對比 本文針對區(qū)塊鏈的鏈上存儲方案面臨的安全問題,提出了基于可驗證秘密共享的區(qū)塊鏈分片存儲模型。首先,該模型判定區(qū)塊穩(wěn)定性,對于低穩(wěn)定性區(qū)塊,節(jié)點在收到分片時能對分片及其發(fā)送節(jié)點身份進(jìn)行認(rèn)證,避免了網(wǎng)絡(luò)惡意節(jié)點對分片和恢復(fù)過程的影響,提高了低穩(wěn)定性區(qū)塊的安全性。其次,模型通過節(jié)點協(xié)作式存儲將區(qū)塊分片存儲,降低了節(jié)點的存儲空間占用量。最后由理論分析與實驗結(jié)果,本文提出的區(qū)塊鏈分片存儲模型在保證區(qū)塊存儲可擴(kuò)展的前提下,能夠抵御惡意節(jié)點的欺騙攻擊,因而具有更高的安全性。在今后的研究中,在保證區(qū)塊鏈分片存儲系統(tǒng)的安全性和可擴(kuò)展性的前提下,將進(jìn)一步提高模型的存儲效率,以擴(kuò)展此模型的應(yīng)用。3.2 分片數(shù)據(jù)區(qū)塊存儲階段
3.3 數(shù)據(jù)區(qū)塊恢復(fù)階段
4 安全性分析
4.1 可驗證性分析
4.2 抗合謀性分析
4.3 抗單點失效性
4.4 密鑰協(xié)商安全分析
5 實驗分析
5.1 實驗環(huán)境
5.2 實驗結(jié)果
5.3 性能分析
6 結(jié)束語