胡寧玉 郝耀軍 常建龍 馮麗萍



摘 要:區塊鏈中的節點以副本形式保存數據,隨著時間的推移,區塊鏈中的區塊數不斷增加,導致節點承受的存儲壓力隨之增大,存儲壓力成為區塊鏈應用落地的瓶頸之一。為了解決區塊鏈中存儲壓力問題,提出了基于變色龍hash的區塊鏈可擴展存儲方案,該方案利用節點被攻擊成功的概率和改進的溫度模型,將區塊分為高低安全性的冷熱區塊;基于變色龍hash算法和改進的Merkle tree,對高安全性的冷區塊進行部分節點存儲。在存儲過程中,除高安全性冷區塊的區塊體信息被重構外,其余數據保持不變。仿真實驗表明,在不改變區塊鏈結構和安全性能的情況下,所提出的方案可減少區塊鏈中數據的存儲總量,減少存儲節點的存儲壓力;且區塊數量越多,其優勢越明顯。
關鍵詞:區塊鏈;變色龍hash;存儲擴展性
中圖分類號:TP311?? 文獻標志碼:A?? 文章編號:1001-3695(2023)12-003-3539-06
doi:10.19734/j.issn.10013695.2023.03.0139
Scalable storage scheme based on chameleon hash for blockchain
Abstract:Since the nodes of the blockchain save data as copies,the increasing number of blocks in the blockchain leads to a raise in storage pressure on nodes as time goes on,and the storage problem has become one of the bottlenecks in the blockchain application areas.To solve the problem of storage pressure in the blockchain,this paper proposed scalable storage scheme based on chameleon hash,in which the blocks were divided into hot or cold blocks with high or low security characteristics through the successfully attacked probability and the improved temperature model.Based on chameleon hash algorithm and the improved Merkle tree,the cold blocks with high security characteristics were partly stored on nodes.During the storing process,the data remained unchanged except that the cold blocks with high security characteristics were reconstructed.The simulation experiments show that the proposed scheme can reduce the total amount of data storage in the blockchain and the reduce node storage pressure,without changing the blockchain structure and security performance.And the more blocks,the more advantages.
Key words:blockchain;chameleon hash;storage scalability
0 引言
區塊鏈作為新興技術,具有去中心化、防竄改、數據共享、可追溯等特點[1]。區塊鏈中的每個存儲節點以副本形式保存數據,提高了數據的安全性,同時也增加了節點的存儲壓力。以比特幣為例,截至2022年9月15日,比特幣共產生了754 135個區塊,平均每個區塊大小約為1.5 MB,整個區塊鏈的大小約1 104.7 GB,有效地址約為3 506萬個,整個比特幣系統需消耗約37 824 PB的空間來存儲數據。隨著時間的推移,區塊鏈的區塊數持續增加,所耗費的存儲空間也越來越大,存儲問題將成為區塊鏈應用落地的一大瓶頸,因此解決區塊鏈的存儲問題勢在必行。
針對區塊鏈的存儲問題,國內外學者做了大量研究。文獻[2,3]研究了區塊鏈數據的鏈上+鏈下的存儲方式,該存儲方式將原始數據存儲于云服務器中,將原始數據的hash值存儲于區塊鏈上,用鏈上的hash值驗證服務器中原始數據的正確性和一致性,采用鏈上+鏈下的方式,通過減少上鏈的數據量來緩解存儲壓力。文獻[4~6]研究了分片存儲,該方法采用不同的分片技術,將區塊鏈的數據進行分片處理,并將分片按策略保存到一定數量的節點中,節點通過不存儲區塊鏈完整數據來解決存儲問題。Raman等人[7]將區塊鏈中的節點劃分為多個區域,將每個區域當作一個全節點,區域內所有節點只需存儲部分副本數據,通過這些節點保存的數據可整合還原整個副本數據,從而減少數據存儲總量,該方法實現了數據的分片或節點的分區,減少了數據的存儲份數,但增加了鏈中數據的查詢時間。趙羽龍等人[8]提出了增強型輕量級節點模型,該方法通過輕量級節點只存儲區塊頭信息來減少存儲壓力,由于輕量級節點工作時完全依賴于全節點,從而降低區塊鏈的安全性和去中心化。
數據的分片或節點的分區是目前解決區塊鏈存儲壓力的主要方法,但數據的分片或節點的分區,使大部分節點沒有保存區塊鏈中的全部數據,當進行查詢操作時,需要大量訪問系統中其他節點,整合完整的區塊數據,使得鏈中數據的查詢效率明顯降低。同時,鏈中數據來自不同節點,可能存在惡意節點返回虛假數據,出現多次整合數據的情況,從而增加了查詢的難度和查詢的時間[9,10]。
很多領域中的數據,不同時期存在不同的意義:數據剛生成時,其訪問頻率最高;隨著時間的推移,數據的重要性逐漸降低,使用的頻率也隨之下降,且數據的訪問通常具有二八特征,即20%的數據會經常訪問,其他80%則相反[11,12]。根據數據的訪問情況,可以采用訪問頻度來衡量數據的重要性,將經常訪問的數據定義為重要(熱)數據,將不經常訪問的數據定義為非重要(冷)數據[13,14]。由此,可以按數據的冷熱情況將數據按不同策略存儲,進而解決數據查詢速度和存儲成本問題。
同時,依據文獻[15]中的基于陷門單向函數的可修改的區塊鏈方案,可以在不改變區塊間的鏈接關系、驗證方式和安全性能的情況下實現數據的修改。因此,本文在考慮節點存儲均衡的情況下,采用變色龍哈希函數來實現部分節點存儲,解決區塊鏈的存儲壓力問題,同時也避免了分片存儲中查詢時數據重組的時間消耗問題。
綜上所述,本文在現有研究的基礎上,根據區塊鏈中數據的安全性和使用情況,提出了針對區塊鏈中高安全性的冷區塊(簡稱高冷區塊)的部分節點存儲方案。該方案通過區塊的安全性和冷熱程度,基于變色龍hash函數和改進的Merkle tree,將高冷區塊進行部分節點存儲。該存儲方案保證原始區塊鏈結構、機制和網絡拓撲結構等不變,查詢速度影響較小的情況下,減少節點的存儲空間消耗,解決區塊鏈的存儲壓力問題。
1 預備知識
1.1 區塊鏈原理
區塊鏈最早由中本聰在論文《比特幣:一種點對點的電子現金系統》中首次提出,比特幣是區塊鏈技術的應用。區塊鏈是利用密碼算法、共識機制、智能合約等技術構造的一種多方參與、共同維護的分布式數據庫,具有去中心化、數據不可竄改、共識認證、可追溯的特點。區塊鏈由區塊頭和區塊體組成,區塊鏈的基本結構如圖1所示。
默克爾樹(Merkel tree),又稱hash tree,是存儲hash值的一棵樹。區塊體中的每條記錄都對應相應的hash值,兩兩組合進行hash運算,如若出現奇數,則復制自身值后再hash。每次新生成的hash值作為一個節點插入到Merkel tree中,直至只剩一個哈希值,該值就是區塊頭中默克爾根(Merkel root)的值。默克爾樹的構造過程如圖2所示。
區塊頭中的前一區塊的hash(preBlockHash)字段記錄了上一區塊的block hash值,以此銜接構成區塊鏈。如果某區塊體中記錄被竄改,對應的Merkel root值將發生變化,該區塊的block hash值隨之變化,將與后一區塊中的preBlockHash字段值不匹配,或導致其后續區塊的preBlockHash字段值發生變化。因此,Merkel tree是保證區塊體中記錄不可竄改的重要原因。
1.2 變色龍hash函數
哈希函數是將任意長度的輸入轉換成固定長度的輸出,通過輸入很容易計算出輸出,但通過輸出很難求得原始輸入,具有不可逆性和高靈敏度[16]。變色龍hash函數[17]是特殊的哈希函數,若掌握函數陷門,可以逆向計算原始輸入;若陷門未知,其為普通哈希函數。
變色龍hash函數的一般定義[18,19]為
Cham_Hash(Setup,KeyGen,Hash,Forge)
其中:Setup(x)的輸入參數為x,輸出公共參數pq;KeyGen(pq)的輸入參數為公共參數pq,輸出私鑰CK、公鑰HK;Hash(HK,m,r)的輸入參數為公鑰HK、信息m和隨機數r,輸出變色龍hash函數值CH;Forge(CK,m,r,m′)的輸入參數為私鑰CK、信息m、隨機數r、消息m′,輸出新的隨機數r′,使Hash(HK,m,r)=Hash(HK,m′,r′)。
Krawczky等人[20]在2000年提出了變色龍hash方案,具體構造為:
Setup(x):輸入x,輸出滿足x的大素數p和k,其中p=λk+1,再取乘法循環群Z*P中階為k的元素g,輸出公共參數pkg=(p,k,g);
KeyGen(pkg):輸入參數pkg,在Z*P中隨機選取y,計算h=gy,將y設為私鑰,將h設為公鑰;
Hash(h,m,r):輸入公鑰h,信息m和隨機數r,得到變色龍hash函數值CH=gmhr mod p;
Forge(y,m,r,m′):輸入私鑰y、信息m、隨機數r、消息m′,根據CH=gmhr mod p=gm′hr′ mod p,求得新的隨機數r′=(m-m′+yr)·y-1 mod k。
2 基于變色龍hash的區塊鏈可擴展存儲方案
該方案基于改進的Merkle tree,使用變色龍hash算法實現高冷區塊的部分節點存儲,區塊鏈原有結構、共識和驗證等過程保持不變。部分節點存儲過程中,只有監督節點驗證通過后才能進行高冷區塊的部分節點存儲,不合法的存儲或修改無法完成。本章介紹了可擴展存儲方案的結構,對方案存儲原理及相關規則進行了詳細介紹,并對方案的安全性進行了分析。
2.1 可擴展存儲方案結構
2.1.1 存儲結構
可擴展存儲方案中,對鏈中高冷區塊進行部分節點存儲,即根據存儲比例閾值,依規則隨機選取部分節點存儲高冷區塊,該方案的存儲結構如圖3所示。通過減少鏈中高冷區塊的存儲份數來減少節點的存儲空間消耗,解決區塊鏈的存儲壓力問題。
2.1.2 改進的Merkle tree
傳統存儲方案中,區塊頭中的默克爾根字段與區塊體中交易數據形成的默克爾樹的根值一一對應,交易數據一旦改變,默克爾根字段值隨之改變,這將導致后續區塊信息的改變,因此區塊鏈在理論上是無法修改的。本文在默克爾樹構造過程中引入了隨機數,采用原默克爾根值和隨機數的運算值作為最終的默克爾根值,本文方案的Merkle tree構造過程如圖4所示。
本文方案中,Merkle tree的根值為
由變色龍hash函數構成,具體如下:
=g1(x1)‖g2(x2)‖…‖gk(xk)
其中:m(Data0,Data1,…)為信息;gi(xi)(i=1,2,…,k)是挖礦時可靠性排名前k的節點特有的變色龍hash函數,其陷門由節點私密保管;(x1,x2,…,xk)為對應節點的原始隨機數,初始值由系統統一生成,并且作為公開數據被各節點存儲,只有超過一定數量的節點同意后,隨機數才能改變,同時這些節點將作為該區塊后續操作的監督節點。本文方案中引入的隨機數,使默克爾根值由原來的Hash(m)變為Hash(m)⊕,即使信息m發生變化,亦可重構隨機數′,實現除選定區塊的區塊體信息外,其區塊頭數據、前后區塊的所有信息均保持不變。在部分節點存儲時,保證區塊鏈結構的完好,實現高冷區塊的部分節點存儲。
高冷區塊的部分節點存儲,本質是保證高冷區塊的區塊頭和其他區塊的信息不變情況下,替換高冷區塊的區塊體數據,重構隨機數′。其重構原理如圖5所示。
重構信息包括存儲標志、原始數據存儲節點位置信息、原始默克爾根。存儲標志用于標識該區塊是否已被部分節點存儲;原始數據存儲節點位置信息用于記錄存儲原始數據的存儲節點信息;原始默克爾根用于記錄部分節點存儲前交易數據的默克爾根值,便于后期驗證存儲節點中存儲的區塊原始數據的正確性。
2.2 可擴展存儲方案原理
本文方案中,系統根據規則選出高冷區塊、計算存儲份數、選定區塊存儲節點,并發出存儲請求。區塊對應的監督節點驗證存儲請求信息,驗證通過后便可對選定的高冷區塊進行部分節點存儲。存儲過程中,監督節點根據區塊頭中的默克爾根值和重構信息hash值調整節點隨機數,重新計算隨機數′,使該過程不破壞原區塊鏈的結構。本節詳細介紹該方案中各個規則的設定及區塊的部分節點存儲過程。
2.2.1 區塊安全性判定
本文方案中將不經常使用的高安全性區塊存儲在部分高性能的節點中,以減少高冷區塊的存儲份數。區塊鏈通常采用POW作為共識機制,節點間通過計算能力的較量來獲取記賬權,若區塊鏈攻擊者能獲得網絡中一半以上的算力,則可以控制整個區塊鏈系統[4,5]。通常情況下,大部分攻擊都是通過生成平行鏈的方式來替代原始區塊鏈,從而實現數據的竄改,因此,攻擊者需要比誠實者更快地創建出下一個區塊。文獻[6,21]給出了在雙重支付攻擊場景中,攻擊者能否攻擊成功,可以近似看成賭徒破產問題,惡意節點構建區塊的概率滿足泊松分布,期望為
λ=z×(q/p)(1)
其中:p為誠實節點構造出下一區塊的概率,q為攻擊節點構造下一區塊的概率,z為誠實節點領先攻擊節點的區塊數量。
pz為攻擊節點趕超誠實節點,成功竄改區塊的概率為
由式(2)可知,pz的值由p、q、z共同決定。在Python環境中,根據p和z的值,畫出pz的圖,如圖6所示。
從圖可見,p值固定時,隨著領先區塊數量z值的增加,pz值減少;z值固定時,隨著p值的增大,pz值減小。根據Borel定律[22],任何概率低于1/1050的事件是不可能發生的。當z的值增加到某一數值時,pz的值會小于1/1050,此時意味著攻擊節點不可能趕超誠實節點,實現區塊的竄改。對p取不同值,計算出pz值小于1/1050的最小z值,結果如表1所示。
2.2.2 區塊冷熱度區分
在不同應用場景下,冷熱數據的含義各不相同,通常被應用在數據訪問和存儲領域。數據的冷熱通常由未來一段時間內數據的訪問情況決定,稱未來一段時間內訪問概率大的數據為熱數據,訪問概率小的數據為冷數據,主要被應用到緩存的替換場景中;在海量數據訪問領域,數據的冷熱通常由數據的歷史訪問情況決定,稱最近經常被訪問的數據為熱數據,很久未被訪問的數據為冷數據,主要被應用到數據存儲場景中[14,23]。方案中采用區塊中數據的歷史訪問情況來衡量區塊的熱度,也就是說某一區塊中的數據被訪問的次數越多,即區塊的熱度越高。系統會在一定時間內對區塊的熱度進行更新,為了從動態的角度來計算區塊的熱度,根據實際情況,對文獻[14]中基于牛頓冷卻定律的溫度模型進行改進,綜合考慮時間的推移和訪問頻率對區塊熱度的影響,即當前時刻為熱區塊,一段時間內,在沒有訪問的情況下熱度會逐漸變低;一段時間內,區塊的訪問頻率越高,區塊的熱度越高。在更新區塊熱度時,應適當選擇更新時間間隔,若時間間隔太短,頻繁的熱度更新將影響系統性能;若時間間隔太長,不能及時體現區塊熱度的變化。假設在時間間隔tn-1~tn時刻,某一區塊中數據被訪問了P次,D(tn)為tn時刻區塊熱度,a為冷卻系數(即區塊熱度隨時間的變化速度),Dheat為區塊中數據被訪問一次后增加的熱度,則tn時刻區塊的熱度為
D(tn)=D(tn-1)×e-a(tn-tn-1)+Dheat×P(3)
為了減少網絡開銷,不采用實時共享區塊的冷熱度信息,而是在存儲操作工作被觸發時,每個節點根據式(3)計算出未被部分節點存儲的高安全性區塊的熱度,將低溫度區塊信息共享到網絡中,求取共同的低溫度區塊。
2.2.3 存儲份數和存儲節點確定
分離出高冷區塊后,將其存儲到部分節點中,存儲過程中需考慮兩個方面:
a)安全性。高冷區塊存儲時,需考慮區塊的安全性,避免區塊數據被竄改、丟失。
b)平衡性。存儲高冷區塊時需考慮存儲節點的負載均衡、性能。
1)高冷區塊的存儲份數
保證區塊的安全性,高冷區塊的存儲份數由當前區塊鏈中存儲節點的總數和存儲比例閾值乘積決定,計算公式為
mi=存儲比例閾值×M
其中:M為區塊鏈中存儲節點的總數,存儲比例閾值的設置需要兼顧安全性和效率。在M一定的情況下,閾值比例越大,高冷區塊的保存份數越多,高冷區塊的安全性越高,但方案空間節省率較低;存儲比例閾值越小,高冷區塊的存儲份數越少,高冷區塊的安全性越低,空間節省率較高。存儲比例閾值的設定,根據實際應用情況來設定。
2)存儲節點的選擇
存儲方案中,確定高冷區塊和存儲份數后,應合理地選擇節點來存儲原始區塊數據和監督部分節點存儲過程。為了保證高冷區塊部分節點存儲后的安全性和監督節點的可信性,本文考慮了存儲節點和監督節點的可靠性,節點的可靠性由節點空間可利用率(r1)、節點信用(r2)和I/O性能(r3)共同決定,根據實驗效果,每項指標所占比例如表2所示。
本文方案采用均衡隨機抽取[24]方法,從M個存儲節點中抽出K個節點,根據每個節點的r1、r2和r3值,計算出節點的可靠性值,選取值為前mi的節點作為存儲節點。采用pi=∑3i=1wiri[25]計算節點性能。抽取數K=mi+β,β為存儲節點數的余量,取值由區塊的熱度D(tn)決定。根據熱度,不同程度剔除較低性能節點,篩選出較安全可靠的存儲節點存儲高冷區塊。
2.2.4 存儲方案實施
高冷區塊部分節點存儲過程:
a)系統時間觸發,根據規則篩選出高冷區塊,并對其區塊號、存儲份數、存儲節點和重構信息等進行廣播。
b)對應區塊的監督節點驗證信息的合法性(是否已經部分節點存儲、需存儲的區塊是否為高冷區塊、存儲節點的權重等),若合法,則監督節點重新計算隨機數(x′1,x′2,…,x′k)。
c)監督節點在全網廣播新計算的隨機數并更新,存儲節點將區塊體信息保存,全網所有節點驗證通過后將對應區塊的區塊體替換為重構信息。
d)將此次存儲過程的信息以交易信息(Block_Id,time,(x1,x2,…,xk),(x′1,x′2,…,x′k),…)的方式記錄到區塊鏈中。
2.2.5 數據查詢
本文方案中,數據查詢時,按區塊鏈數據查詢方式尋找數據所在區塊,查看所在區塊是否被部分節點存儲,若無,直接讀取區塊體中數據;若所讀取區塊已被部分節點存儲,讀取區塊原始數據存儲節點位置信息,根據信息查找區塊的第一個存儲節點,讀取數據后對數據進行驗證,判斷是否為原始數據,若數據已丟失或驗證失敗,更新存儲節點信用,繼續讀取下一存儲節點位置信息,重復上述過程,直至數據讀取成功。
2.3 可擴展存儲方案安全性分析
本文方案不會降低區塊鏈本身的安全性,不會破壞原有區塊鏈的結構,對區塊鏈中存儲壓力有緩解作用。本文方案中,保證區塊部分節點存儲的安全因素為:a)從理論上高冷區塊是安全的,且是冷區塊,降低了攻擊的價值,增加了攻擊的難度;b)存儲節點是隨機選取的;c)基于每個節點設置了變色龍hash函數,陷門為每個節點獨有,只有監督節點聯合才能實現高冷區塊的部分節點存儲操作;d)重構信息中包括了高冷區塊原始hash值,防止線下存儲的數據被修改。以上條件充分考慮了高冷區塊部分節點存儲前、中、后的安全性,避免塊中數據被惡意竄改的可能。
為了說明該存儲方案的安全性,下面模擬節點惡意攻擊。根據重構的過程,可對高冷區塊部分節點存儲前、中、后過程進行攻擊,攻擊點如下:
a)修改區塊中數據,調整后續簽名子塊,使區塊關系依然正確;
b)調整隨機數,竄改交易數據,使得區塊頭中各字段數據保持不變;
c)攻擊存儲節點,修改原始區塊數據。
攻擊點a),修改區塊數據,后續區塊的區塊頭信息需調整,其攻擊難度同攻擊區塊鏈本身難度一致;
攻擊點b),為保證Hash(m)⊕=Hash(m′)⊕′,攻擊者需對所有監督節點進行攻擊,獲取其陷門,才能攻擊成功,否則無法實現竄改;
攻擊點c),部分節點存儲結束后,每個節點存儲了重構信息,其中包括原始的hash信息,若存儲節點中存儲的原始區塊數據被竄改,其值與原始交易數據的hash值不匹配;若要成功竄改部分節點存儲后的區塊數據,則需攻擊區塊鏈中所有節點,修改對應重構信息。
3 實驗仿真
在Visual Studio Ultimate環境下,采用C++語言對區塊的生成和部分節點存儲過程進行模擬。區塊生成過程中的hash值采用SHA256實現,變色龍hash函數gi采用ECC200[26,27]加密算法實現,每個節點的私鑰為對應變色龍hash函數的陷門,即以節點i的公鑰對其專屬隨機數xi進行加密。模擬過程中每10筆交易打包成1個區塊,交易內容人為擬定,創建區塊鏈;并對本文提出的存儲方案、傳統存儲方案和分片存儲方案的存儲空間消耗等情況進行對比和分析。
3.1 區塊的生成
區塊生成仿真實驗中,模擬了16個節點,監督節點個數設為8個。根據區塊鏈的原理,模擬新區塊的生成過程,根據工作量證明機制,優先計算出符合條件的隨機數和難度系數的節點獲得區塊的記賬權。以第31號區塊為例,對其生成過程的交易hash、MerkleTree的根值和區塊頭的默克爾根字段值進行介紹。
交易hash按默克爾樹生成規則生成,第31號區塊的交易hash值:MerkleTree(m)=9dc77be32b7a979538c663ed0e0f279 08f99bbe85675d9ae8895115f2c4fde03。
圖7是實驗模擬生成的未執行部分節點存儲的第30和31號區塊的部分數據。
3.2 高冷區塊的存儲
3.3 實驗對比與分析
1)存儲空間消耗
為了簡化實驗,存儲時,p取0.9,當z為30時, Pz的值將小于10-50,即當區塊鏈中區塊數超過29后,存在高安全性區塊;正常記錄區塊的熱度信息,根據tn時刻區塊熱度D(tn)小于0.01時選出冷區塊,為縮短實驗時間,按高安全性區塊數量的70%定義為冷區塊。從不同的角度,分別對區塊數為50、100、150、200、250、300、350、400時,統計傳統存儲方案、本文存儲方案和分片存儲方案的存儲空間消耗情況。圖9是節點數為16,存儲比例閾值為25%時,不同區塊數的存儲空間消耗對比。為了驗證本方案與節點數量和存儲比例閾值的關系,在不同數量的節點情況下,統計不同區塊數的空間節省率;對節點數和區塊數固定,針對不同存儲比例閾值時,統計空間節省率。圖10是區塊數分別取不同值,存儲比例閾值為25%時,與傳統存儲方案相比的空間節省率情況。圖11是節點數為16,每個節點中的區塊數為100時,取不同存儲比例閾值的空間節省率情況。
從圖9中可知,隨著區塊數量的增加,本文存儲方案需要的存儲空間的增長速度低于傳統存儲方案。區塊數小于30時,鏈中不存在高冷區塊,存儲空間占用上,本文存儲方案的空間占用大于傳統存儲方案,這是因為鏈中所有區塊都是低安全性區塊,本文存儲方案與傳統存儲方案對區塊進行全副本存儲,而且本文存儲方案中存儲了節點信用、空間可用容量、區塊熱度值等額外信息;當鏈中區塊數大于30時,鏈中出現高安全性區塊,并將其中冷區塊進行部分節點存儲。區塊數為140時,本文方案節約了約576 KB的空間,空間節約率為20%。隨著鏈中區塊數的增加,高冷區塊越來越多,能被部分節點存儲的區塊越來越多,本文方案的存儲優勢越來越明顯,可有效減少節點的存儲壓力。分片存儲方案的空間占用走勢同本文方案類似,本文方案略高,這是因為本文方案對鏈中的高安全性的熱區塊不進行部分節點存儲。
從圖10可知,不同節點數的空間節省率隨區塊數的增加的走勢相似。區塊數小于30時,空間節省率為負數,代表本存儲方案的空間占用大于傳統存儲方案;當區塊數大于30時,隨著區塊數的增加,空間節省率越來越大,原因同上;節點數越多,對應的空間節省率越大,這是因為存儲過程中,存儲的份數為節點數乘以存儲比例閾值,閾值一定的情況下,節點數越多,(1-存儲比例閾值)×M值越大,所以其空間節省率越大。
從圖11可知,不同比例閾值下,空間的節省率不同。當閾值達到某個數值后,其存儲空間節省率為負值,這是因為存儲比例閾值越大,高冷區塊存儲的份數越多,部分節點存儲后減少的總數據量比本文方案中額外記錄的信息量小,所以出現負值。但節點個數固定的情況下,閾值的大小決定了高冷區塊被部分節點存儲后的安全性。因此在應用時,需根據情況權衡高冷區塊的安全性和空間節省率。
2)區塊部分節點存儲過程的時間消耗
圖12是節點數為16,對監督節點取不同數量時,測試第31號區塊的部分節點存儲過程的時間消耗情況。從圖12中可知,監督節點的數量影響區塊的部分節點存儲效率,監督節點越多,部分節點存儲的決定權掌握在更多節點手中,其安全性越高,但區塊的部分節點存儲的時間消耗也越大。
3)查詢時間消耗
模擬高冷區塊的部分節點存儲后,對傳統存儲方案、本文方案和分片存儲方案中的部分區塊數據進行多次查詢,統計同一高冷區塊中數據查詢所消耗的平均時間,其時間消耗對比如圖13所示。從圖13可見,隨著區塊數量的增加,本文存儲方案、傳統存儲方案和分片存儲方案的查詢時間隨區塊數量的增加而增多;本文存儲方案的查詢時間略多,主要在于本文存儲方案中高冷區塊被部分節點存儲,對于不是區塊的存儲節點,需訪問存儲節點實現查詢,因此同傳統存儲方案相比,查詢時間略高;對于分片存儲,查詢高安全性區塊時,需通過查詢地址鏈找到存儲節點位置,整合完整的區塊數據,因此其查詢時間明顯高于本文存儲方案和傳統存儲方案。
4 結束語
本文在區塊鏈原有結構和機制下,針對區塊的安全性和冷熱度,基于變色龍hash函數,提出了基于變色龍hash的區塊鏈可擴展存儲方案。通過在Merkle tree中引入隨機數,在不破壞原有區塊鏈結構和機制的情況下,實現區塊的部分節點存儲。在存儲過程中,存儲節點隨機選取,且只有監督節點驗證通過后才能計算隨機數′,最終實現高冷區塊的部分節點存儲,保證高冷區塊部分節點存儲的安全性。仿真實驗表明,區塊的部分節點存儲能減少區塊鏈中整體的系統消耗,解決存儲壓力問題。本文方案可兼顧數據安全性,設定存儲比例閾值,在應用中具有更強的適用性。
參考文獻:
[1]張志威,王國仁,徐建良,等.區塊鏈的數據管理技術綜述[J].軟件學報,2020,31(9):29032925.(Zhang Zhiwei,Wang Guoren,Xu Jianliang,et al.Survey on data management in blockchain systems[J].Journal of Software,2020,31(9):2903-2925.)
[2]Ayoade G,Karande V,Khan L,et al.Decentralized IoT data management using blockchain and trusted execution environment[C]//Proc of IEEE International Conference on Information Reuse and Integration.2018:1522.
[3]Liu Bin,Yu Xiaoliang,Chen Shipin,et al.Blockchain based data integrity service framework for IoT data[C]//Proc of IEEE International Conference on Web Services.2017:468475.
[4]賈大宇,信俊昌,王之瓊,等.區塊鏈的存儲容量可擴展模型[J].計算機科學與探索,2018,12(4):525535.(Jia Dayu,Xin Junchang,Wang Zhiqiong,et al.Storage capacity scalable model for blockchain[J].Journal of Frontiers of Computer Science and Technology,2018,12(4):525535.)
[5]卿欣藝,陳玉玲,周正強,等.基于中國剩余定理的區塊鏈存儲擴展模型[J].計算機應用,2021,41(7):19771982.(Qing Xinyi,Chen Yuling,Zhou Zhengqiang,et al.Blockchain storage expansion model based on Chinese remainder theorem[J].Journal of Computer Applications,2021,41(7):19771982.)
[6]江云超,何小衛,崔一舉.區塊鏈節點存儲優化方案[J].應用科學學報,2020,38(1):119126.(Jiang Yunchao,He Xiaowei,Cui Yiju.Blockchain node storage optimization scheme[J].Journal of Applied Sciences,2020,38(1):119126.)
[7]Raman R K,Varshney L R.Dynamic distributed storage for scaling blockchains[C]//Proc of IEEE International Symposium on Information Theory.2017:119.
[8]趙羽龍,牛保寧,李鵬,等.區塊鏈增強型輕量級節點模型[J].計算機應用,2020,40(4):942946.(Zhao Yulong,Niu Baoning,Li Peng,et al.Blockchain enhanced lightweight node model[J].Journal of Computer Applications,2020,40(4):942946.)
[9]賈大宇,信俊昌,王之瓊,等.存儲容量可擴展區塊鏈系統的高效查詢模型[J].軟件學報,2019,30(9):26552670.(Jia Dayu,Xin Junchang,Wang Zhiqiong,et al.ElasticQM:a query model for storage capacity scalable blockchain system[J].Journal of Software,2019,30(9):26552670.)
[10]孫知信,張鑫,相峰,等.區塊鏈存儲可擴展性研究進展[J].軟件學報,2021,32(1):120.(Sun Zhixin,Zhangxin,Xiang Feng,et al.Survey of storage scalability on blockchain[J].Journal of Software,2021,32(1):120.)
[11]馮超政,蔣溢,何軍,等.基于冷熱數據的MongoDB自動分片機制[J].計算機工程,2017,43(3):710,17.(Feng Chaozheng,Jiang Yi,He Jun,et al.Autosharding mechanism in MongoDB based on cold and hot data[J].Computer Engingeering,2017,43(3):710,17.)
[12]李梁,吳剛,王國仁.面向數據特征的內存跳表優化技術[J].軟件學報,2020,31(3):663679.(Li Liang,Wu Gang,Wang Guoren.Inmemory skiplist optimization technologies based on data feature[J].Journal of Software,2020,31(3):663679.)
[13]王芳,卜昊昊.科學數據管理政策發展比較研究[J].中國圖書館學報,2022,48(6):7796.(Wang Fang,Bu Haohao.A comparative study on policy development for scientific data management[J].Journal of Library Science in China,2022,48(6):7796.)
[14]解玉琳.基于數據溫度的冷熱數據識別機制研究[D].杭州:浙江大學,2019.(Xie Yulin.Research on identification mechanism of hot and cold data based on data temperature[D].Hangzhou:Zhejiang University,2019.)
[15]任艷麗,徐丹婷,張新鵬,等.可修改的區塊鏈方案[J].軟件學報,2020,31(12):39093922.(Ren Yanli,Xu Danting,Zhang Xinpeng,et al.Scheme of revisable blockchain[J].Journal of Software,2020,31(12):3909-3922.)
[16]張仕,賴會霞,肖如良,等.開放環境多分布特性的局部敏感哈希檢索方法[J].軟件學報,2022,33(4):12001217.(Zhang Shi,Lai Huixia,Xiao Ruliang,et al.Open environmental localitysensitive hashing retrieval for multiple distributed characteristics[J].Journal of Software,2022,33(4):12001217.)
[17]顧康,張紹華,李超.基于監督者組的區塊鏈賬本修正方案[J].計算機應用研究,2023,40(8):22662273.(Gu Kang,Zhang Shaohua,Li Chao.Blockchain ledger amendment scheme based on supervisor group[J].Application Research of Computers,2023,40(8):22662273.)
[18]袁勇,王飛躍.可編輯區塊鏈:模型、技術與方法[J].自動化學報,2020,46(5):831846.(Yuan Yong,Wang Feiyue.Editable blockchain:models,techniques and methods[J].Acta Automatica Sinica,2020,46(5):831846.)
[19]李佩麗,徐海霞,馬添軍,等.可更改區塊鏈技術研究[J].密碼學報,2018,5(5):501509.(Li Peili,Xu Haixia,Ma Tianjun,et al.Research on faultcorrecting blockchain technology[J].Journal of Cryptologic Research,2018,5(5):501509.)
[20]Krawczyk H,Rabin T.Chameleon signatures[C]//Proc of Network and Distributed System Security Symposium.2000.
[21]魏松杰,呂偉龍,李莎莎.區塊鏈公鏈應用的典型安全問題綜述[J].軟件學報,2022,33(1):324-355.(Wei Songjie,Lyu Weilong,Li Shasha.Overview on typical security problems in public blockchain applications[J].Journal of Software,2022,33(1):324-355.)
[22]Borel .Probabilities and life[M].Mineola,NY:Dover Publications,1962:23-87.
[23]王海艷,伏彩航.基于HBase數據分類的壓縮策略選擇方法[J].通信學報,2016,37(4):12-22.(Wang Haiyan,Fu Caihang.Compression strategies selection method based on classification of HBase data[J].Journal on Communications,2016,37(4):12-22.)
[24]聶相田,范天雨,王博.水利工程建設市場監管“雙隨機”抽檢均衡性方法[J].人民黃河,2019,41 (2):138142.(Nie Xiangtian,Fan Tianyu,Wang Bo.Study on the “double random” sampling balance method for the supervision of water conservancy construction market[J].Yellow River,2019,41(2):138142.)
[25]潘吉飛,黃德才.基于跳躍Hash和異步共識組的區塊鏈動態分片模型[J].計算機科學,2020,47(3):273280.(Pan Jifei,Huang Decai.Blockchain dynamic sharding model based on jump hash and asynchronous consensus group[J].Computer Science,2020,47(3):273280.)
[26]谷利澤,鄭世慧,楊義先.現代密碼學教程[M].2版.北京:北京郵電大學出版社,2015:190207.(Gu Lize,Zheng Shihui,Yang Yixian.Modern cryptography tutorial[M].2nd ed.Beijing:Beijing University of Posts and Telecommunications Press,2015:190207.)
[27]Koblitz N.Elliptic curve cryptosystems[J].Mathematics of Computation,1987,48(177):203209.