張國潮 王瑞錦
摘 要:針對存儲原因所導致的區(qū)塊鏈技術(shù)難以在大型業(yè)務(wù)場景應(yīng)用的問題,提出了一種基于門限秘密共享的區(qū)塊鏈分片存儲模型。首先由共識節(jié)點使用改進的Shamir門限,將要上鏈的交易數(shù)據(jù)進行分片處理;其次,共識節(jié)點基于分片數(shù)據(jù)構(gòu)造不同的區(qū)塊,并分發(fā)給現(xiàn)存于區(qū)塊鏈網(wǎng)絡(luò)中的其他節(jié)點進行存儲;最后,當節(jié)點要讀取交易數(shù)據(jù)時,在從分發(fā)到交易數(shù)據(jù)分片的n個節(jié)點中的k個節(jié)點請求數(shù)據(jù),并利用拉格朗日插值算法進行交易數(shù)據(jù)的恢復。實驗結(jié)果表明,該模型在保證了上鏈數(shù)據(jù)安全性、可靠性、隱私性的同時,每個節(jié)點的數(shù)據(jù)存儲量約為傳統(tǒng)存儲方法的1/(k-1),從而有利于區(qū)塊鏈技術(shù)在大型業(yè)務(wù)場景的應(yīng)用。
關(guān)鍵詞:區(qū)塊鏈存儲;Shamir秘密共享;數(shù)據(jù)安全性;數(shù)據(jù)隱私性;分布式存儲
中圖分類號:TP309.2
文獻標志碼:A
Blockchain shard storage model based on threshold secret sharing
ZHANG Guochao, WANG Ruijin*
School of Information and Software Engineering, University of Electronic Science and Technology of China, Chengdu Sichuan 610054, China
Abstract:
To solve the problem that blockchain technology is difficult to be used in large-scale business scenarios due to storage constraints, a blockchain shard storage model based on threshold secret sharing was proposed. Firstly, the transaction data to be placed in blockchain was processed into shards by consensus nodes using improved Shamirs threshold secret sharing. Secondly, consensus nodes constructed different blocks based on data shards and distributed them to other nodes existing in the blockchain network for storage. Finally, when a node wanted to read transaction data, the node would request data from k of the n nodes with transaction data shards, and use Lagrange interpolation algorithm to recover the original transaction data. The experimental results show that the model not only guarantees the security, reliability and privacy of data to be placed in blockchain, but also effectively reduces the amount of data stored by each node to 1/(k-1), which is conducive to blockchain technology using in large-scale business scenarios.
Key words:
storage in blockchain; Shamirs secret sharing; data security; data privacy; distributed storage
0 引言
2008年,文章《比特幣:一種點對點電子現(xiàn)金系統(tǒng)》[1]的發(fā)表,標志著區(qū)塊鏈技術(shù)的出現(xiàn)。就技術(shù)層次進行分析,區(qū)塊鏈屬于一種技術(shù)組合,它對數(shù)據(jù)的存儲依賴于相關(guān)區(qū)塊結(jié)構(gòu)。同時,利用技術(shù)體系,即密碼學知識、點對點(Peer-to-Peer, P2P)網(wǎng)絡(luò)架構(gòu)、共識算法等機制對數(shù)據(jù)可靠傳輸、存儲、以及訪問等進行保障,并使多方協(xié)同參與和維護。得益于其能夠在無需相互信任的節(jié)點間建立一個可信任的分布式系統(tǒng),實現(xiàn)數(shù)據(jù)的不可篡改且可溯源等特點,目前區(qū)塊鏈技術(shù)已越來越被廣泛關(guān)注并應(yīng)用到各行各業(yè)中。
然而,現(xiàn)如今區(qū)塊鏈技術(shù)仍然有許多的缺陷和漏洞,存儲問題就是其中需要解決的主要問題之一。就比如比特幣系統(tǒng),到2018年10月18日,比特幣一共產(chǎn)生了546349個區(qū)塊,區(qū)塊的大小一般為996.2KB,整個完整區(qū)塊鏈的大小為186.9GB[2]。而現(xiàn)如今比特幣全節(jié)點(保存完整區(qū)塊鏈信息的節(jié)點)的數(shù)量已上升到1萬多個[3],可以計算得到這1萬多個全節(jié)點用了約2000TB的存儲容量存儲了200GB左右的數(shù)據(jù)。一方面對于每個節(jié)點,整個完整區(qū)塊鏈的容量大小已達幾百GB;另一方面對于整個區(qū)塊鏈網(wǎng)絡(luò),所需存儲空間與區(qū)塊鏈的容量大小相差巨大,這使得存儲空間被極大地消耗和浪費。而且數(shù)據(jù)量以及節(jié)點數(shù)量將會隨著時間的推移越來越多,整條區(qū)塊鏈的存儲大小以及整個區(qū)塊鏈網(wǎng)絡(luò)所需的存儲空間也將會越來越大,這也是目前區(qū)塊鏈技術(shù)難以在數(shù)據(jù)量較大的業(yè)務(wù)場景應(yīng)用的主要原因之一。
為了減小每個節(jié)點所需存儲的完整區(qū)塊鏈大小,讓區(qū)塊鏈技術(shù)能夠在大型業(yè)務(wù)場景得到較好的應(yīng)用,本文提出了一種基于門限秘密共享的區(qū)塊鏈分片存儲模型幫助改進區(qū)塊鏈的存儲問題。
本文的主要貢獻如下:
1)提出了一種基于門限秘密共享的區(qū)塊鏈分片存儲模型。該模型將要上鏈的交易數(shù)據(jù)數(shù)字化后,分片存儲于各個節(jié)點中,并不需要將完整的交易數(shù)據(jù)都存儲到每個節(jié)點中。在保證數(shù)據(jù)安全可靠的條件下,使得每個節(jié)點需要消耗的存儲空間減少。
2)通過實驗表明,基于門限秘密共享的區(qū)塊鏈分片存儲模型在保障了數(shù)據(jù)安全性、隱私性、可靠性的同時,又能夠有效減少每個節(jié)點所需存儲的數(shù)據(jù)量,從而有利于區(qū)塊鏈技術(shù)在大型業(yè)務(wù)場景的應(yīng)用。
1 相關(guān)工作
區(qū)塊鏈是分布式的,它是一個公開的賬本。參與共識的節(jié)點通過執(zhí)行工作量證明(Proof of Work, PoW)協(xié)議來獲得往賬本寫入數(shù)據(jù)的權(quán)利。PoW協(xié)議規(guī)定節(jié)點需要找出一個滿足一定難度要求的隨機數(shù),最先找出該隨機數(shù)的節(jié)點獲得記賬權(quán)并向全網(wǎng)廣播本輪需要寫入?yún)^(qū)塊鏈的數(shù)據(jù),當被其他節(jié)點進行驗證并通過后,它們將一起存儲數(shù)據(jù),達成共識。每個節(jié)點每輪所存儲的數(shù)據(jù)區(qū)塊是一樣的,如圖1所示。
按照時間的順序,區(qū)塊鏈將各個數(shù)據(jù)區(qū)塊進行鏈接。在每個數(shù)據(jù)區(qū)塊中,都存在兩個結(jié)構(gòu)——區(qū)塊頭與區(qū)塊體[4]。其中,當前的版本號、前一區(qū)塊的地址、當前區(qū)塊的目標哈希值、當前區(qū)塊PoW共識的隨機數(shù)解Nonce、Merkle樹根以及時間戳等信息存在于區(qū)塊頭中。而對當前交易數(shù)量以及區(qū)塊生成過程中,經(jīng)過驗證的所有交易數(shù)據(jù)的進行封裝了的結(jié)構(gòu)則是區(qū)塊體。這些交易數(shù)據(jù)通過進行不斷的迭代哈希,直到最后一個哈希值為止,并將結(jié)果作為Merkle樹的樹根記錄到區(qū)塊頭中。最終每個節(jié)點都存儲有整個區(qū)塊鏈網(wǎng)絡(luò)中最長區(qū)塊鏈的一份拷貝,如圖2所示,可以看見整個區(qū)塊鏈網(wǎng)絡(luò)的存儲架構(gòu)。
近年來,越來越多的學者從事區(qū)塊鏈的研究工作。2016年,Dennis等[5]提出了一種時間“滾動”區(qū)塊鏈,在不影響區(qū)塊鏈安全的前提下能夠解決當前區(qū)塊鏈指數(shù)增長的問題,為區(qū)塊鏈的可伸縮性提供了一種可行的處理方式。Wu等[6]在2007年基于能源網(wǎng)絡(luò)提出了一種新的混合區(qū)塊鏈存儲模式,該存儲模式能夠提高整個能源網(wǎng)絡(luò)在大數(shù)據(jù)量存儲下的運行效率。Raman等[7]提出了用于擴展區(qū)塊鏈的動態(tài)分布式存儲方案,該存儲方案能夠降低區(qū)塊鏈存儲成本以及工作量證明所需消耗的能源成本。2018年,Lind等[8]構(gòu)造了Teechain,可以通過線下支付渠道來降低區(qū)塊鏈上的存儲成本,使得區(qū)塊鏈性能顯著改進。zyilmaz等[9]通過采用分區(qū)未花費的交易輸出(Unspent Transaction Output, UTXO)空間和拆分區(qū)塊鏈的方法,來提高區(qū)塊鏈的事務(wù)吞吐量。Dai等[10]提出了一個 NC-DS(Network Coded Distributed Storage)框架來存儲區(qū)塊鏈,該框架應(yīng)用到區(qū)塊鏈中能夠顯著減少所需的存儲空間。
2 基于門限秘密共享的區(qū)塊鏈分片存儲模型
本文提出了一種基于門限秘密共享的區(qū)塊鏈分片存儲模型,利用了改進后的Shamir門限秘密共享方案[11]。核心思想是將交易數(shù)據(jù)數(shù)字化后,利用改進的Shamir門限秘密共享原理構(gòu)造出k-1次多項式,并從中取出n個分片數(shù)據(jù)構(gòu)造n種類型的數(shù)據(jù)區(qū)塊,將這n個數(shù)據(jù)區(qū)塊分布存儲于區(qū)塊鏈網(wǎng)絡(luò)中。當要進行數(shù)據(jù)讀取時,再從其中的k個節(jié)點獲取分片數(shù)據(jù),利用拉格朗日插值算法迭代恢復出交易數(shù)據(jù)。基于門限秘密共享的區(qū)塊鏈分片存儲模型的存儲框架如圖3所示。
基于門限秘密共享的區(qū)塊鏈分片存儲模型中的節(jié)點,主要有三種類型的角色:分片/廣播節(jié)點、存儲/驗證節(jié)點以及其他節(jié)點,其中分片/廣播節(jié)點與存儲/驗證節(jié)點的數(shù)量為n個。如圖4所示,分片/廣播節(jié)點是獲得記賬權(quán)的節(jié)點,該節(jié)點需要將本輪要記錄到區(qū)塊鏈上的交易數(shù)據(jù)進行n分片并構(gòu)造n個數(shù)據(jù)區(qū)塊來存儲這n個分片,之后將其中的n-1個區(qū)塊分發(fā)給區(qū)塊鏈網(wǎng)絡(luò)中的n-1個存儲/驗證節(jié)點。存儲/驗證節(jié)點是收到數(shù)據(jù)區(qū)塊的節(jié)點,首先需要對數(shù)據(jù)區(qū)塊的正確性進行驗證,之后再鏈接數(shù)據(jù)區(qū)塊。其他節(jié)點則是除去這n個節(jié)點外的共識節(jié)點,需要向鄰近的這n個節(jié)點集合中的一個請求數(shù)據(jù)區(qū)塊,或者接收它們廣播的數(shù)據(jù)區(qū)塊并鏈接到區(qū)塊鏈上。
與傳統(tǒng)利用Merkle樹進行存儲的數(shù)據(jù)區(qū)塊結(jié)構(gòu)不同的是,在本模型中,由于交易數(shù)據(jù)被分片存儲于n個不同的區(qū)塊中,所以數(shù)據(jù)區(qū)塊結(jié)構(gòu)有所變化,如圖5所示。本模型的數(shù)據(jù)區(qū)塊結(jié)構(gòu)與傳統(tǒng)的數(shù)據(jù)區(qū)塊結(jié)構(gòu)主要區(qū)別在于區(qū)塊體部分以及區(qū)塊頭存放的哈希值。區(qū)塊體主要由交易數(shù)據(jù)哈希值、交易數(shù)量、分發(fā)節(jié)點地址、分片大小、門限參數(shù)、分片編號、分片數(shù)據(jù)、填充等組成。交易數(shù)據(jù)哈希值是為了保證交易數(shù)據(jù)的完整性、填充字段是為了保證每個節(jié)點存儲的分片數(shù)據(jù)大小一致而設(shè)置的。其中的交易數(shù)據(jù)哈希值、交易數(shù)量、分發(fā)節(jié)點地址、分片大小、門限參數(shù)在每個分發(fā)給存儲/驗證節(jié)點的區(qū)塊中都是一樣的,所以通過哈希得到的最終的Merkle樹根也是一樣的。即對于每個節(jié)點其區(qū)塊頭部分是一樣的,這樣就不影響每個節(jié)點的工作量證明。又因為分發(fā)給每個節(jié)點的區(qū)塊是不一樣的(區(qū)塊體的差異),所以原先存放在區(qū)塊頭中前一區(qū)塊的哈希值將變?yōu)榍耙粎^(qū)塊的區(qū)塊頭的哈希值。
2.1 數(shù)據(jù)存儲
基于門限秘密共享的區(qū)塊鏈分片存儲模型在進行數(shù)據(jù)存儲時需要經(jīng)歷4個階段:分片數(shù)據(jù)產(chǎn)生階段、數(shù)據(jù)區(qū)塊構(gòu)造階段、數(shù)據(jù)區(qū)塊分發(fā)階段、數(shù)據(jù)區(qū)塊存儲階段。該算法的輸入為本輪要上鏈的交易數(shù)據(jù)T′,輸出為存儲/驗證節(jié)點將分配的數(shù)據(jù)區(qū)塊鏈接到區(qū)塊鏈上。數(shù)據(jù)存儲算法基本步驟如下所示:
1)分片數(shù)據(jù)產(chǎn)生階段。
① 將交易數(shù)據(jù)T′字符串化后,再轉(zhuǎn)為十進制數(shù)字T;
② 根據(jù)此時的區(qū)塊鏈網(wǎng)絡(luò)狀態(tài)設(shè)定門限參數(shù)(k,n),其中k ③ 將十進制數(shù)字T分成k-1份,即T = d1|d2|…|dk-1; ④ 利用改進Shamir門限秘密共享構(gòu)造k-1次多項式Fk-1(x); a)選取一個大素數(shù)p,使得p > max(dmax,n),其中dmax=max(di),1≤i≤k-1(由于dmax 一般會較大,所以若在區(qū)塊中存儲p值需要較大的存儲空間,故一般建議p取較大的固定值,如219937–1(6002位)、244497-1(13395位)、277232917-1(23249425位)等); b)在區(qū)域 Zp中隨機選取一個數(shù)a生成曲線F1(x)= ax + d1; c)在生成的曲線上選取兩個點Ad11=F1(1)和Ad12=F1(2); d)Do for 2≤i≤k-1 A)用前面生成的點和di生成多項式曲線: Fi(x)=Adi-1(i)*xi+Adi-1(i-1)*xi-1+…+Adi-11*x+di B.1)當i != k-1時,在此曲線上選取i+1個點作為秘密共享并刪除前一次生成的秘密共享; B.2)當i = k-1時,輸出k-1次多項式: Fk-1(x)=Adk-2(k-1)*xk-1 + Adk-2(k-2)*xk-2 +…+ Adk-21*x + dk-1 ⑤ 從步驟④得到的k-1次多項式中選取n個點,即T1 =[1, Fk-1(1)]、T2 = [2, Fk-1(2)]、…、Tn =[n, Fk-1(n)]作為n個分片數(shù)據(jù)。 2)數(shù)據(jù)區(qū)塊構(gòu)造階段。 ⑥ 根據(jù)區(qū)塊結(jié)構(gòu)計算所需的相關(guān)參數(shù)值及其哈希值,并選定n個存儲/驗證節(jié)點(分片/廣播節(jié)點是其中的一個存儲/驗證節(jié)點); ⑦ 根據(jù)已有的數(shù)據(jù)參數(shù)及分片數(shù)據(jù)構(gòu)造n個數(shù)據(jù)區(qū)塊; 3)數(shù)據(jù)區(qū)塊分發(fā)階段。 ⑧ 將n個數(shù)據(jù)區(qū)塊分發(fā)給選定的n個存儲/驗證節(jié)點; 4)數(shù)據(jù)區(qū)塊存儲階段。 ⑨ 存儲/驗證節(jié)點檢驗區(qū)塊的正確性。主要有以下幾個需要檢驗: a)計算前一區(qū)塊頭的哈希值與該區(qū)塊頭中存放的哈希值是否一致; b)該區(qū)塊的工作量證明是否正確; c)該區(qū)塊的結(jié)構(gòu)是否正確; d)…… ⑩ 當檢驗結(jié)果無誤時,存儲/驗證節(jié)點將分配的數(shù)據(jù)區(qū)塊鏈接到區(qū)塊鏈上。 2.2 數(shù)據(jù)讀取 基于門限秘密共享的區(qū)塊鏈分片存儲模型在進行數(shù)據(jù)存儲時需要經(jīng)歷兩個階段:分片數(shù)據(jù)獲取階段、分片數(shù)據(jù)拼接階段。該算法的輸入為要讀取區(qū)塊信息的位置索引index (如index=1,即表示創(chuàng)世區(qū)塊),輸出為指定位置區(qū)塊的信息(相關(guān)參數(shù)信息、交易數(shù)據(jù)信息等)。數(shù)據(jù)讀取算法基本步驟如下所示: 1)分片數(shù)據(jù)獲取階段。 ① 共識節(jié)點根據(jù)index值,查看自己區(qū)塊鏈上對應(yīng)的區(qū)塊; ② 獲取該區(qū)塊上記錄的分發(fā)節(jié)點地址信息、門限參數(shù)(k,n)信息等; ③ 根據(jù)分發(fā)節(jié)點地址信息,依次向分發(fā)節(jié)點請求index數(shù)據(jù)區(qū)塊的分片數(shù)據(jù),直到獲得k個分片數(shù)據(jù)為止(包括自身存儲的一個); 2)分片數(shù)據(jù)拼接階段。 ④經(jīng)過步驟①~③,此時共識節(jié)點一共有k個分片數(shù)據(jù),不妨假設(shè)為T1=[1, Fk-1(1)]、T2=[2, Fk-1(2)]、…、Tk = [k, Fk-1(k)],利用拉格朗日插值算法,如式(1)、(2)所示: f(x)=∑ki=1f(xi)∏kj=1 j≠ix-xjxi-xj(1) d=f(0)=∑ki=1f(xi)∏kj=1 j≠i-xjxi-xj mod p(2) 可以求得k-1次多項式Fk-1(x)并獲得分片數(shù)據(jù)dk-1; ⑤ 從步驟④得到的Fk-1(x)中提取系數(shù)Adk-2(k-1)、Adk-2(k-2)、…、Adk-21, 即[1, Fk-2(1)]、[2, Fk-2(2)]、…、[k-1,F(xiàn)k-2(k-1)]。根據(jù)步驟④,再次利用拉格朗日插值算法可求得k-2次多項式Fk-2(x)并獲得數(shù)據(jù)分片dk-2; ⑥ 重復執(zhí)行步驟④和步驟⑤,直到獲得全部的數(shù)據(jù)分片dk-1、dk-2、…、d1; ⑦ 按照d1至dk-1的順序?qū)⒎制瑪?shù)據(jù)拼接為十進制數(shù)字T,即d1|d2|…|dk-1 = T; ⑧ 將十進制數(shù)字T字符串化后轉(zhuǎn)為交易數(shù)據(jù)T′; ⑨ 將交易數(shù)據(jù)T′以及該區(qū)塊的其他相關(guān)參數(shù)信息輸出。 2.3 模型優(yōu)缺點分析 基于門限秘密共享的區(qū)塊鏈分片存儲模型,利用改進的Shamir門限秘密共享將交易數(shù)據(jù)分片存儲于n個不同的區(qū)塊中,并分發(fā)給n個不同的共識節(jié)點。當要進行數(shù)據(jù)讀取時,在從其中的k個節(jié)點請求數(shù)據(jù)進行數(shù)據(jù)的恢復。該模型的主要優(yōu)點在于: 1)數(shù)據(jù)安全性有效保障。雖然本文改進了傳統(tǒng)的區(qū)塊鏈存儲模型,但是上鏈數(shù)據(jù)的安全性并未受到影響。本小節(jié)同樣以比特幣為例,分叉攻擊(51%攻擊)是針對基于工作量證明共識算法的最出名的一種攻擊方式,其主要目的在于實現(xiàn)“雙花”。對于該攻擊方法,中本聰在文獻[1]中已給出證明,惡意攻擊者要追趕上誠實節(jié)點實現(xiàn)“雙花”的概率為: 1-∑zi=0λie-λi!1-qpz-i(3) 其中:λ=zq/p; p為誠實節(jié)點在一輪競爭中領(lǐng)先的概率,q為攻擊者在一輪競爭中領(lǐng)先的概率,假定p>q; z為誠實節(jié)點領(lǐng)先的區(qū)塊數(shù)。從式(3)中可以看出,惡意攻擊者攻擊成功的概率隨著區(qū)塊數(shù)z的增加而呈指數(shù)化下降。即攻擊成功與否主要與各節(jié)點的算力大小有關(guān)(算力的大小與p、q正相關(guān)),與區(qū)塊鏈所使用的存儲模型并沒有太直接的關(guān)系,所以上鏈數(shù)據(jù)的安全性依舊可以得到保障。另一方面,由于交易數(shù)據(jù)被數(shù)字化分片存儲,每個節(jié)點存儲的數(shù)據(jù)是相對沒有意義的數(shù)值,即使惡意攻擊者獲得了某些節(jié)點存儲的數(shù)據(jù),也難以恢復出初始的交易數(shù)據(jù)。要想查看交易數(shù)據(jù),僅能通過合法的方式向節(jié)點發(fā)出讀取交易數(shù)據(jù)的請求。即從某種意義上來說,交易數(shù)據(jù)的隱私性保護得到提升。 2)數(shù)據(jù)的可靠性有效提高。相較于傳統(tǒng)的數(shù)據(jù)分片需要分到數(shù)據(jù)的n個共識節(jié)點同時在線才能恢復出原始的數(shù)據(jù),本模型僅需分到數(shù)據(jù)的n個共識節(jié)點中有k個節(jié)點在線即可進行數(shù)據(jù)的恢復。 3)共識節(jié)點所需存儲空間顯著減少。對比于傳統(tǒng)的Shamir門限秘密共享中秘密共享大小與原來的秘密大小一樣,本模型利用改進Shamir門限秘密共享能夠使得秘密共享大小僅為原來秘密的1/(k-1),從而在數(shù)據(jù)存儲過程中,每個共識節(jié)點所需存儲交易數(shù)據(jù)的大小僅為原來的1/(k-1)。 該模型本質(zhì)上采用的是一種以時間換空間的思想。雖然在存儲空間上,共識節(jié)點所需的存儲空間大小能夠有效減少,但是在整個區(qū)塊鏈網(wǎng)絡(luò)運行過程中,節(jié)點的計算開銷與通信開銷將會增加。盡管如此,該模型在以數(shù)據(jù)上鏈需求為主的大型業(yè)務(wù)場景中將能得到較好的應(yīng)用。 3 實驗結(jié)果與分析 本實驗是在PC配置為Intel Core i5-7300HQ 2.50GHz CPU和8GB內(nèi)存上進行的。通過開啟不同的服務(wù)器端口在本地創(chuàng)建不同的共識節(jié)點,每個共識節(jié)點均運行著自己搭建的區(qū)塊鏈代碼。實驗中一共建立了10個節(jié)點,所有節(jié)點均為存儲/驗證節(jié)點,且其中一個同時是分片/廣播節(jié)點。當每提交10筆交易后,本實驗進行一次挖礦,即每個區(qū)塊中(除創(chuàng)世區(qū)塊)存儲了10筆交易數(shù)據(jù),且每筆交易數(shù)據(jù)都是一樣的,以此確保每次要上鏈的數(shù)據(jù)大小一致。最后,實驗中的門限參數(shù)為k=5,n=10,大素數(shù)q取固定值219937 - 1。 由于本文只關(guān)注區(qū)塊鏈的存儲問題,所以在實驗中簡化了工作量證明,即共識節(jié)點僅需將前一區(qū)塊的工作量證明值與當前區(qū)塊的工作量證明值進行拼接,之后計算哈希值,若哈希值的前5位是0則完成工作量證明(采用該種工作量證明,由于創(chuàng)世區(qū)塊工作量證明值是設(shè)置固定的一個值,所以在不考慮其他影響因素條件下,每次運行區(qū)塊鏈產(chǎn)生每個對應(yīng)編號區(qū)塊,所需的時間是一樣的)。 首先測試基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型與基于門限秘密共享的區(qū)塊鏈分片存儲模型,對于每個區(qū)塊產(chǎn)生時間,即數(shù)據(jù)存儲時間的差異。本實驗一共產(chǎn)生了200個區(qū)塊,并記錄了每個節(jié)點從接收到第10筆交易開始到將交易數(shù)據(jù)上鏈的時間。在所有節(jié)點都正常運行且不被攻擊的情況下,得到如圖6所示結(jié)果。 分析圖6(a)、(b)的實驗結(jié)果可以知道,兩種存儲模型在每個區(qū)塊產(chǎn)生時間上的差異并不是很大,基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型的平均區(qū)塊產(chǎn)生時間為3.326s,而基于門限秘密共享的區(qū)塊鏈分片存儲模型的平均區(qū)塊產(chǎn)生時間為3.382s。這主要是因為在區(qū)塊構(gòu)建過程中,傳統(tǒng)的方法需要構(gòu)建Merkle樹,本模型需要產(chǎn)生數(shù)據(jù)分片來構(gòu)建每個共識節(jié)點的區(qū)塊,所以基于門限秘密共享的區(qū)塊鏈分片存儲模型的平均區(qū)塊生成時間并沒有比傳統(tǒng)的方法多多少。 其次測試基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型與基于門限秘密共享的區(qū)塊鏈分片存儲模型,對于獲取區(qū)塊上的數(shù)據(jù)所花費的時間,即數(shù)據(jù)讀取時間的差異。在產(chǎn)生的200個區(qū)塊基礎(chǔ)上,分別記錄讀取編號為5的倍數(shù)的區(qū)塊數(shù)據(jù)所花費的時間。在所有節(jié)點都正常運行且不被攻擊的情況下,得到如圖7所示結(jié)果。 分析圖7(a)、(b)的實驗結(jié)果可以知道,基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型的平均區(qū)塊數(shù)據(jù)讀取時間為0.020s,而基于門限秘密共享的區(qū)塊鏈分片存儲模型的平均區(qū)塊讀取時間為0.087s??梢姡跀?shù)據(jù)讀取方面,本模型的讀取時間會比傳統(tǒng)的方法長。這是由于當進行數(shù)據(jù)讀取時,本模型需要從其他分到分片數(shù)據(jù)的節(jié)點請求數(shù)據(jù),之后還要運用拉格朗日插值算法進行數(shù)據(jù)的恢復,相比于傳統(tǒng)的方法,通信開銷與計算開銷將會增加,所以數(shù)據(jù)讀取會慢一點。 最后測試基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型與基于門限秘密共享的區(qū)塊鏈分片存儲模型,在區(qū)塊產(chǎn)生過程中,每個節(jié)點所花費存儲空間的差異。實驗中一共產(chǎn)生了200個區(qū)塊,當每產(chǎn)生5個區(qū)塊時,將此時的完整區(qū)塊鏈寫入文件中,并記錄文件大小,從而獲得每個節(jié)點所花費的存儲空間大小。在所有節(jié)點都正常運行且不被攻擊的情況下,得到如圖8所示結(jié)果。 分析圖8的實驗結(jié)果可以知道,一方面,在兩種存儲模型中,隨著區(qū)塊加入到區(qū)塊鏈,節(jié)點所需的存儲空間幾乎呈線性增長。這主要是因為本實驗固定了每個區(qū)塊所存儲交易數(shù)據(jù)的大小,所以才會出現(xiàn)圖形幾乎呈線性的形狀。另一方面,從圖10中可以觀察到,隨著區(qū)塊不斷地加入?yún)^(qū)塊鏈中,基于Merkle樹的傳統(tǒng)區(qū)塊鏈存儲模型的節(jié)點所需的存儲空間,幾乎是基于門限秘密共享的區(qū)塊鏈分片存儲模型的節(jié)點的3.3倍??梢?,本模型對于區(qū)塊鏈存儲問題的解決具有顯著的效果。實驗過程中的門限參數(shù)取值為k=5,n=10,理論上,基于本模型的每個節(jié)點所需存儲的分片數(shù)據(jù)大小,是傳統(tǒng)方法中整個數(shù)據(jù)大小的1/(k-1)倍,之所以實驗結(jié)果略大于該值(13.3>14),是因為在構(gòu)建區(qū)塊過程中,本模型需要在區(qū)塊中加入一些其他的字段信息,比如分發(fā)節(jié)點地址、門限參數(shù)等。 4 結(jié)語 本文首先講述了目前困擾區(qū)塊鏈技術(shù)廣泛應(yīng)用的主要問題之一的存儲問題。之后提出了基于門限秘密共享的區(qū)塊鏈分片存儲模型,該模型利用改進Shamir門限秘密共享將交易數(shù)據(jù)n分片并構(gòu)造n個不同的區(qū)塊分別存儲于n個不同的存儲/驗證節(jié)點;當要進行數(shù)據(jù)恢復時,再從其中的k個節(jié)點請求分片數(shù)據(jù),即可進行數(shù)據(jù)的恢復。最后,經(jīng)實驗證明,基于門限秘密共享的區(qū)塊鏈分片存儲模型在保障了數(shù)據(jù)安全性、隱私性、可靠性的同時,又能夠有效減少每個節(jié)點所需存儲的數(shù)據(jù)量,從而有利于區(qū)塊鏈技術(shù)在大型業(yè)務(wù)場景的應(yīng)用。本文的一些細節(jié)還可以進一步研究,如門限k取多大值才合適,要采用什么樣的方法將交易數(shù)據(jù)轉(zhuǎn)化為十進制數(shù)字等。下一步將繼續(xù)研究,以便區(qū)塊鏈中的相關(guān)存儲限制問題能夠更完善地被解決。 參考文獻 [1]NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system [EB/OL]. [2018-10-18]. https://bitcoin.org/bitcoin.pdf. [2]Blockchain. The blockchain data of Bitcoin [EB/OL]. [2018-10-18]. https://www.blockchain.com. [3]Bitnodes. The bitnodes data of Bitcion [EB/OL]. [2018-10-18]. https://bitnodes.earn.com. [4]袁勇,王飛躍. 區(qū)塊鏈技術(shù)發(fā)展現(xiàn)狀與展望[J].自動化學報,2016,42(4):481-494.(YUAN Y, WANG F Y. Blockchain: the state of the art and future trends [J]. Acta Automatica Sinica, 2016, 42(4): 481-494.) [5]DENNIS R, OWENSON G, AZIZ B. A temporal blockchain: a formal analysis[C]// Proceedings of the 2016 International Conference on Collaboration Technologies and Systems. Piscataway, NJ: IEEE, 2016: 430-437. [6]WU L, MENG K, XU S, et al. Democratic centralism: a hybrid blockchain architecture and its applications in energy Internet [C]// Proceedings of the 2016 International Conference on Energy Internet. Piscataway, NJ: IEEE, 2017: 176-181. [7]RAMAN R K, VARSHNEY L R. Dynamic distributed storage for scaling blockchains [EB/OL]. [2018-10-18]. https://arxiv.org/pdf/1711.07617.pdf. [8]LIND J, NAOR O, EYAL I, et al. Teechain: reducing storage costs on the blockchain with offline payment channels [C]// Proceedings of the 11th ACM International Systems and Storage Conference. New York: ACM, 2018: 125. [9]ZYILMAZ K R, PATEL H, MALIK A. Split-scale: scaling bitcoin by partitioning the UTXO space[C]// Proceedings of the IEEE 9th International Conference on Software Engineering and Service Science. Piscataway, NJ: IEEE, 2018: 41-45. [10]DAI M, ZHANG S, WANG H, et al. A low storage room requirement framework for distributed ledger in blockchain [J]. IEEE Access, 2018, 6: 22970-22975. [11]王學軍.無線傳感器網(wǎng)絡(luò)中分布式存儲方案的改進[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2012(7):5-7.(WANG X J. Improvement in distributed data storage scheme for wireless sensor networks [J]. Network Security Technology and Application, 2012(7): 5-7.) [12]KOSBA A, MILLER A, SHI E, et al. Hawk: the blockchain model of cryptography and privacy-preserving smart contracts [C]// Proceedings of the 2016 IEEE Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2016: 839-858. [13]ATENIESE G, MAGRI B, VENTURI D, et al. Redactable blockchain-or-rewriting history in bitcoin and friends [C]// Proceedings of the 2017 IEEE European Symposium on Security and Privacy. Piscataway, NJ: IEEE, 2017: 111-126. [14]CAI C, YUAN X, WANG C. Towards trustworthy and private keyword search in encrypted decentralized storage [C]// Proceedings of the 2017 IEEE International Conference on Communications. Piscataway, NJ: IEEE, 2017: 1-7. [15]HALPIN H, PIEKARSKA M. Introduction to security and privacy on the blockchain [C]// Proceedings of the 2017 IEEE European Symposium on Security and Privacy Workshops. Piscataway, NJ: IEEE, 2017: 1-3. [16]FUKUMITSU M, HASEGAWA S, IWAZAKI J, et al. A proposal of a secure P2P-type storage scheme by using the secret sharing and the blockchain [C]// Proceeddings of the IEEE 31st International Conference on Advanced Information Networking and Applications. Piscataway, NJ: IEEE, 2017: 803-810. [17]XU C, WANG K, XU G, et al. Making big data open in collaborative edges: a blockchain-based framework with reduced resource requirements [C]// Proceeddings of the 2018 IEEE International Conference on Communications. Piscataway, NJ: IEEE, 2018: 1-6. [18]LEWISON K, CORELLA F. Backing rich credentials with a blockchain PKI [EB/OL]. [2018-10-18]. https://pomcor.com/techreports/BlockchainPKI.pdf. [19]LI Y, ZHENG K, YAN Y, et al. EtherQL: a query layer for blockchain system [C]// Proceeddings of the 2017 International Conference on Database Systems for Advanced Applications, LNCS 10178. Berlin: Springer, 2017: 556-567. [20]LI Y, HUANG J, QIN S, et al. Big data model of security sharing based on blockchain [C]// Proceeddings of the 3rd International Conference on Big Data Computing and Communications. Piscataway, NJ: IEEE, 2017: 117-121. This work is partially supported by the National Natural Science Foundation of China (61802033). ZHANG Guochao, born in 1998. His research interests include blockchain, network security. WANG Ruijin, born in 1980, Ph. D., associate professor. His research interests include information system security, quantum communication security, cloud security.