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