周家順,王娜,杜學(xué)繪
(信息工程大學(xué),河南 鄭州 450001)
大數(shù)據(jù)技術(shù)高速發(fā)展,并深入人們的生活。政務(wù)大數(shù)據(jù)[1]、司法大數(shù)據(jù)[2]、醫(yī)療大數(shù)據(jù)[3]等大數(shù)據(jù)技術(shù)正在逐漸為社會的進(jìn)步提供有力的數(shù)據(jù)技術(shù)支撐。但是大數(shù)據(jù)具有與傳統(tǒng)數(shù)據(jù)不同的特點,需要使用適合大數(shù)據(jù)特點的技術(shù)進(jìn)行處理。
大數(shù)據(jù)最顯著的特點就是數(shù)據(jù)量大,據(jù)Statista公司預(yù)測2025年的全球數(shù)據(jù)量將達(dá)到175 ZB。數(shù)據(jù)量的激增促使相應(yīng)的存儲技術(shù)的發(fā)展,本地存儲、分布式存儲、云存儲等存儲技術(shù)為大數(shù)據(jù)存儲提供了技術(shù)支撐。為保證大數(shù)據(jù)存儲的安全,需要進(jìn)行數(shù)據(jù)完整性驗證[4]判斷數(shù)據(jù)是否被篡改或者損壞。
數(shù)據(jù)完整性驗證技術(shù)一般通過挑戰(zhàn)應(yīng)答機(jī)制實現(xiàn)數(shù)據(jù)完整性的判斷。數(shù)據(jù)擁有者將數(shù)據(jù)存儲于數(shù)據(jù)存儲系統(tǒng)中,在數(shù)據(jù)進(jìn)行存儲之前利用BLS簽名等技術(shù)實現(xiàn)存儲數(shù)據(jù)的簽名,并生成證明元數(shù)據(jù)。數(shù)據(jù)擁有者從證明元數(shù)據(jù)中選取相應(yīng)的數(shù)據(jù)生成挑戰(zhàn),并將挑戰(zhàn)發(fā)送給數(shù)據(jù)存儲系統(tǒng)。數(shù)據(jù)存儲系統(tǒng)依據(jù)收到的挑戰(zhàn),利用存儲的數(shù)據(jù)生成相應(yīng)的數(shù)據(jù)完整性的證據(jù)。數(shù)據(jù)完整性審計機(jī)構(gòu)對數(shù)據(jù)存儲系統(tǒng)生成的證據(jù)進(jìn)行判斷,確定數(shù)據(jù)是否與原始數(shù)據(jù)一致。
對于大數(shù)據(jù)進(jìn)行數(shù)據(jù)完整性審計需要充分考慮大數(shù)據(jù)的特點。
1) 大數(shù)據(jù)數(shù)據(jù)量大的特點要求數(shù)據(jù)完整性驗證技術(shù)能夠滿足審計的效率要求,實現(xiàn)數(shù)據(jù)完整性的高效判決。
2) 由于大數(shù)據(jù)的來源廣泛,大數(shù)據(jù)的數(shù)據(jù)類型變得多樣,數(shù)據(jù)可以分為結(jié)構(gòu)化、半結(jié)構(gòu)化和非結(jié)構(gòu)化3種類型[5]。例如,政務(wù)大數(shù)據(jù)中的數(shù)據(jù)類型可以分為4類:業(yè)務(wù)數(shù)據(jù)、民意社情數(shù)據(jù)、環(huán)境數(shù)據(jù)和分散性公共數(shù)據(jù)[6]。大數(shù)據(jù)環(huán)境下的數(shù)據(jù)主要為非結(jié)構(gòu)化數(shù)據(jù),據(jù)IDC統(tǒng)計顯示,大數(shù)據(jù)中非結(jié)構(gòu)化數(shù)據(jù)占比80%,非結(jié)構(gòu)化數(shù)據(jù)完整性驗證成為大數(shù)據(jù)完整性驗證的關(guān)鍵。
3) 同時,信息化時代,數(shù)據(jù)成為越來越重要的資源。通過共享大數(shù)據(jù)來打破數(shù)據(jù)孤島,成為信息企業(yè)面臨的重要挑戰(zhàn)。數(shù)據(jù)共享不僅需要實現(xiàn)數(shù)據(jù)交換,也要保證數(shù)據(jù)的真實性。例如,對于政務(wù)大數(shù)據(jù)、司法大數(shù)據(jù)和醫(yī)療大數(shù)據(jù)這些較為敏感的數(shù)據(jù),數(shù)據(jù)真實性的重要程度表現(xiàn)極為突出。
大數(shù)據(jù)的完整性驗證不僅需要向數(shù)據(jù)擁有者提供數(shù)據(jù)未被篡改或者未被破壞的證明,對于共享數(shù)據(jù)的使用者同樣需要進(jìn)行證明。
中本聰發(fā)表文章Bitcoin: a peer to peer electronic cash system[7],標(biāo)志著區(qū)塊鏈技術(shù)的誕生。從此之后,區(qū)塊鏈技術(shù)以其去中心化,不易篡改等良好特性吸引大批學(xué)者研究。數(shù)據(jù)的完整性驗證技術(shù)實際上是對于數(shù)據(jù)存儲者等多方信用的驗證,將區(qū)塊鏈技術(shù)與數(shù)據(jù)完整性驗證技術(shù)結(jié)合能夠發(fā)揮數(shù)據(jù)完整性驗證體系更大的價值。
基于此,本文提出基于區(qū)塊鏈的數(shù)據(jù)完整性多方高效審計機(jī)制(MBE-ADI),解決大數(shù)據(jù)環(huán)境下數(shù)據(jù)完整性的審計問題,主要貢獻(xiàn)如下。
1) 提出大數(shù)據(jù)環(huán)境中數(shù)據(jù)域的概念并構(gòu)建基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu),實現(xiàn)對非結(jié)構(gòu)化數(shù)據(jù)的管理,借助此結(jié)構(gòu)實現(xiàn)證明元數(shù)據(jù)的生成,解決大數(shù)據(jù)環(huán)境下大量非結(jié)構(gòu)化數(shù)據(jù)同時驗證的問題。
2) 設(shè)計基于BLS簽名多副本確定性驗證方法,實現(xiàn)數(shù)據(jù)完整性的多副本同時確定性驗證,滿足大數(shù)據(jù)環(huán)境下數(shù)據(jù)完整性高效驗證的需求。
3) 設(shè)計基于聯(lián)盟鏈的雙驗證審計架構(gòu),相應(yīng)智能合約以及驗證過程元數(shù)據(jù)上傳方法,實現(xiàn)數(shù)據(jù)完整性去中心化自動審計以及審計歷史可信追溯,同時為數(shù)據(jù)擁有者和數(shù)據(jù)使用者提供數(shù)據(jù)完整性驗證服務(wù),保證數(shù)據(jù)進(jìn)行共享之前的歷史一致性,提高數(shù)據(jù)的可信度。
4) 基于阿里云服務(wù)器進(jìn)行MBE-ADI系統(tǒng)部署并進(jìn)行相關(guān)測試,驗證系統(tǒng)的可行性以及數(shù)據(jù)完整性審計的高效性。
Deswarte等[8]提出基于MAC碼的完整性驗證機(jī)制,該機(jī)制將MAC值作為認(rèn)證元數(shù)據(jù)實現(xiàn)數(shù)據(jù)的完整性驗證,但存在通信開銷大且容易泄露隱私的問題。Ateniese等[9]提出數(shù)據(jù)持有性證明(PDP,provable data possession)機(jī)制,將數(shù)據(jù)分塊并使用RSA簽名機(jī)制進(jìn)行抽樣檢測數(shù)據(jù)塊的完整性,提高了檢測效率,減少了通信開銷。Wang等[10]提出支持全同態(tài)操作的PDP機(jī)制,該機(jī)制使用Merkle樹驗證數(shù)據(jù)塊位置的正確性,采用BLS簽名對數(shù)據(jù)塊的完整性進(jìn)行驗證。謝四江等[11]提出使用多分支路徑樹MBT進(jìn)行完整性驗證的機(jī)制,該機(jī)制增加了節(jié)點的出度,相較于基于Merkle樹的完整性驗證機(jī)制能夠驗證更大規(guī)模的數(shù)據(jù),且利用MBT的結(jié)構(gòu)能夠較好地實現(xiàn)數(shù)據(jù)塊替換等動態(tài)操作。
多副本機(jī)制能夠提高數(shù)據(jù)的抗風(fēng)險能力,即時使用多副本對損壞數(shù)據(jù)進(jìn)行修復(fù),對于重要的數(shù)據(jù),多副本機(jī)制重要性更為突出。劉洪宇等[12]提出支持動態(tài)操作的多副本驗證機(jī)制,該機(jī)制對Merkle樹結(jié)構(gòu)進(jìn)行改造,提出基于等級的Merkle樹,實現(xiàn)對動態(tài)驗證的支持。該機(jī)制通過對多個副本進(jìn)行關(guān)聯(lián),實現(xiàn)多副本的同步更新。Curtmola等[13]通過隨機(jī)掩碼技術(shù)實現(xiàn)多副本數(shù)據(jù)的生成,為任意數(shù)量的副本使用恒定數(shù)量的元數(shù)據(jù),可以動態(tài)創(chuàng)建新副本而無須再次預(yù)處理數(shù)據(jù),且多副本完整性驗證的時間和單副本數(shù)據(jù)的驗證時間接近。但是多副本機(jī)制存在生成的隨機(jī)數(shù)等元數(shù)據(jù)過多、處理大數(shù)據(jù)量的文件時會出現(xiàn)元數(shù)據(jù)管理負(fù)擔(dān)過重的問題,不適合數(shù)據(jù)量大且包含大量非結(jié)構(gòu)化數(shù)據(jù)的大數(shù)據(jù)環(huán)境。
以上的數(shù)據(jù)完整性驗證的審計主要使用可信第三方機(jī)構(gòu),但可信第三方機(jī)構(gòu)尋找困難,容易發(fā)生第三方攻擊的問題。應(yīng)用區(qū)塊鏈技術(shù)進(jìn)行數(shù)據(jù)的完整性驗證成為新的選擇[14-21]。
Liu等[18]采用區(qū)塊鏈智能合約取代第三方審計機(jī)構(gòu),并認(rèn)為在共享數(shù)據(jù)之前,數(shù)據(jù)使用者應(yīng)該對數(shù)據(jù)的完整性進(jìn)行驗證。為了實現(xiàn)公平的完整性審計,Zhao等[19]考慮使用區(qū)塊鏈技術(shù)進(jìn)行數(shù)據(jù)完整性的驗證。數(shù)據(jù)擁有者將數(shù)據(jù)塊的簽名上傳到區(qū)塊鏈賬本,將加密后的數(shù)據(jù)上傳到云上,驗證的時候?qū)?shù)據(jù)進(jìn)行下載,利用區(qū)塊鏈賬本記錄的數(shù)字簽名對數(shù)據(jù)的完整性進(jìn)行驗證。Wei等[20]通過虛擬代理機(jī)制實現(xiàn)基于區(qū)塊鏈的數(shù)據(jù)完整性驗證,并結(jié)合基于角色的訪問控制技術(shù)對存儲的數(shù)據(jù)進(jìn)行管控。魏艷等[21]提出基于以太坊[22]的數(shù)據(jù)完整性驗證機(jī)制,該機(jī)制在智能合約中存儲數(shù)據(jù)的哈希值以及數(shù)據(jù)簽名等信息,在進(jìn)行數(shù)據(jù)完整性驗證的時候,將現(xiàn)有數(shù)據(jù)的哈希與智能合約中存儲的哈希進(jìn)行對比實現(xiàn)驗證。目前基于區(qū)塊鏈的數(shù)據(jù)完整性驗證機(jī)制沒有考慮數(shù)據(jù)使用者獲取共享數(shù)據(jù)真實性的需求,僅對數(shù)據(jù)擁有者提供服務(wù)。
目前有學(xué)者注意到對于大數(shù)據(jù)進(jìn)行完整性驗證的問題。Chang等[23]對外包大數(shù)據(jù)完整性驗證技術(shù)進(jìn)行了總結(jié),但與譚霜等[4]提出的技術(shù)基本一致,未體現(xiàn)大數(shù)據(jù)完整性驗證的特點。Chen等[24]實現(xiàn)數(shù)據(jù)塊的細(xì)粒度更新,采用平衡更新樹作為ADS(authenticated data structure)來減少動態(tài)更新后的更新驗證,從而減少計算和通信資源。Nasonov等[25]提出基于區(qū)塊鏈實現(xiàn)數(shù)據(jù)交易完整性的分布式大數(shù)據(jù)平臺,重點設(shè)計完整性管理器模塊,確保數(shù)據(jù)的真實性與一致性。Lebdaoui等[26]考慮到大數(shù)據(jù)來源廣泛以及大數(shù)據(jù)數(shù)據(jù)量大的特點,并提出數(shù)據(jù)輸入驗證模型實現(xiàn)對數(shù)據(jù)來源的驗證,提出連續(xù)完整性監(jiān)測模型實現(xiàn)數(shù)據(jù)在使用過程中的完整性驗證,但僅提出了模型的框架。
綜上分析可得,目前仍需要對適合大數(shù)據(jù)環(huán)境的數(shù)據(jù)完整性驗證機(jī)制進(jìn)行研究,對大數(shù)據(jù)環(huán)境下數(shù)據(jù)量大、包含大量非結(jié)構(gòu)化數(shù)據(jù)和傾向共享等特點進(jìn)行充分考慮。
由于大數(shù)據(jù)環(huán)境中的數(shù)據(jù)來源廣泛,且大多為結(jié)構(gòu)不一的非結(jié)構(gòu)化數(shù)據(jù)(例如,數(shù)據(jù)擁有者獲得的一組數(shù)據(jù)中可能同時包含圖像、視頻、文檔等),實現(xiàn)對這些非結(jié)構(gòu)化數(shù)據(jù)的有效組織是進(jìn)行高效驗證的前提。本節(jié)針對大數(shù)據(jù)環(huán)境數(shù)據(jù)中的特點,為實現(xiàn)對數(shù)據(jù)的有效管理,并在此基礎(chǔ)上生成數(shù)據(jù)完整性審計的證明元數(shù)據(jù),提出基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)。在數(shù)據(jù)域?qū)用?,使用Merkle DAG結(jié)構(gòu)構(gòu)造非結(jié)構(gòu)化數(shù)據(jù)間的組織關(guān)系;在數(shù)據(jù)塊層面,對單個數(shù)據(jù)的數(shù)據(jù)分塊構(gòu)造多分支平衡Merkle樹。
本節(jié)提出數(shù)據(jù)域的概念,借助此概念實現(xiàn)對非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行組織。這里的域是指對一類關(guān)聯(lián)的數(shù)據(jù)或者子數(shù)據(jù)域的包含。對于一批需要進(jìn)行存儲的數(shù)據(jù),數(shù)據(jù)擁有者根據(jù)數(shù)據(jù)的內(nèi)在聯(lián)系,(如數(shù)據(jù)的來源、獲取日期、類別等)關(guān)系,對數(shù)據(jù)進(jìn)行劃分,將一類數(shù)據(jù)歸置于一個域中。從而獲得一個包含所有數(shù)據(jù)和子數(shù)據(jù)域的最大域。
在該存儲結(jié)構(gòu)中使用Merkle DAG。在Merkle樹的基礎(chǔ)上構(gòu)建Merkle DAG,打破了Merkle樹的子節(jié)點個數(shù)的限制,無須進(jìn)行數(shù)據(jù)的平衡操作,能夠根據(jù)實際的需要構(gòu)建更為靈活的數(shù)據(jù)結(jié)構(gòu)。Merkle DAG保留Merkle樹循環(huán)計算節(jié)點哈希獲得Merkle Root的特點,父節(jié)點的哈希值由子節(jié)點的哈希值決定,同時父節(jié)點包含指向子節(jié)點的信息。在IPFS[27]中將Merkle DAG作為數(shù)據(jù)的存儲結(jié)構(gòu),現(xiàn)實分布式文件存儲網(wǎng)絡(luò)。
構(gòu)建基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)的過程如下:
1) 根據(jù)非結(jié)構(gòu)化數(shù)據(jù)的包含與并列關(guān)系,構(gòu)建包含所有數(shù)據(jù)的Merkle DAG文件結(jié)構(gòu);
2) 對域內(nèi)的每條數(shù)據(jù)構(gòu)建多分支平衡Merkle樹結(jié)構(gòu),獲取Merkle DAG節(jié)點信息中的nodeid。
針對非結(jié)構(gòu)化數(shù)據(jù)構(gòu)建數(shù)據(jù)域,相關(guān)聯(lián)的數(shù)據(jù)放在一個域內(nèi),數(shù)據(jù)域中包含子數(shù)據(jù)域,各級數(shù)據(jù)域表示數(shù)據(jù)不同的關(guān)聯(lián)程度,域中同時存放相關(guān)聯(lián)的多條數(shù)據(jù),并規(guī)定域內(nèi)至少包含兩個數(shù)據(jù)文件。如圖1所示,數(shù)據(jù)域為 {A,A1,A2}。A域包含 {A1,A2,d7,d8,d9}。A1域包含 {d1,d2}。A2域包含 {d3,d4,d5,d6}。
圖1 數(shù)據(jù)域結(jié)構(gòu)Figure 1 Data field structure
基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)包含域節(jié)點和數(shù)據(jù)節(jié)點兩種節(jié)點。為每個域構(gòu)建域節(jié)點標(biāo)識該域,域節(jié)點如圖2所示, nodeid為該域節(jié)點的唯一標(biāo)識信息,能夠使用 nodeid區(qū)分節(jié)點;Lr為右指針,指向同級域中的其他節(jié)點;{Id1, Id2,… ,Idi}為子指針,指向數(shù)據(jù)節(jié)點或者子數(shù)據(jù)域節(jié)點。
圖2 基于數(shù)據(jù)域的Merkle DAG結(jié)構(gòu)域節(jié)點信息Figure 2 Domain-based Merkle DAG structure domain node information
在基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)中,每個非結(jié)構(gòu)化數(shù)據(jù)由一個數(shù)據(jù)節(jié)點標(biāo)識,數(shù)據(jù)節(jié)點如圖3所示, nodeid為該數(shù)據(jù)節(jié)點的唯一標(biāo)識信息,能夠使用 nodeid區(qū)分?jǐn)?shù)據(jù)節(jié)點;Lr為右指針,指向同級域中的數(shù)據(jù)節(jié)點。對圖1的數(shù)據(jù)域可以構(gòu)建圖4所示的Merkle DAG文件結(jié)構(gòu)。
圖3 基于數(shù)據(jù)域的Merkle DAG結(jié)構(gòu)化數(shù)據(jù)節(jié)點信息Figure 3 Domain-based Merkle DAG structure data node information
圖4 基于數(shù)據(jù)域的Merkle DAG文件結(jié)構(gòu)Figure 4 Merkle DAG file structure based on data domain
構(gòu)建基于數(shù)據(jù)域的Merkle DAG文件結(jié)構(gòu)之后,需要獲取各個域節(jié)點或者數(shù)據(jù)節(jié)點中的nodeid。本文通過對非結(jié)構(gòu)化數(shù)據(jù)構(gòu)建多分支Merkle樹結(jié)構(gòu)獲取標(biāo)識不同節(jié)點的 nodeid。設(shè)非葉子節(jié)點最大的子節(jié)點的個數(shù)為Nmax;數(shù)據(jù)塊分割大小恒定為D。
構(gòu)建多分支Merkle樹結(jié)構(gòu)流程如下:
1) 數(shù)據(jù)分片。依據(jù)數(shù)據(jù)塊的分片大小對數(shù)據(jù)文件進(jìn)行分片,分片之后剩余不足分片大小的數(shù)據(jù)充當(dāng)最后一個數(shù)據(jù)塊。設(shè)將文件Df分成了n塊,則Df可以表示為Df= {m1,m2,… ,mn}。
2) 計算多分支平衡Merkle樹第一層節(jié)點哈希。對數(shù)據(jù)塊 {m1,m2,…,mn}分別計算哈希,獲得多分支平衡Merkle樹第一層(i為1)哈希{h(m1),h(m2),…,h(mn)}。
3) 對哈希節(jié)點分組。依據(jù)Nmax對平衡Merkle樹的第i層哈希層進(jìn)行分組,每組的個數(shù)為Nmax。如果最后一組的個數(shù)不足Nmax,則將剩余的數(shù)據(jù)哈希歸為一組。
4) 計算i+1層哈希。對各組進(jìn)行i+1層哈希節(jié)點的計算:hh=h(h1||h2||… ||hNmax),hh表示i+1層節(jié)點,{h1,h2,…,hNmax}表示i層某組節(jié)點,各組獲得的哈希節(jié)點組成平衡Merkle樹第i+1層哈希節(jié)點。
5) 循環(huán)計算獲得新的哈希層。對步驟3)和步驟4)進(jìn)行循環(huán),直到某層哈希節(jié)點的個數(shù)為1,將該哈希節(jié)點作為該條數(shù)據(jù)的Merkle Root,計為nodedi。
Nmax取3,數(shù)據(jù)d1可以構(gòu)建如圖5所示的多分支平衡Merkle樹結(jié)構(gòu)。該結(jié)構(gòu)能夠滿足大數(shù)據(jù)量的表示。設(shè)非葉子節(jié)點的最大子節(jié)點的個數(shù)為Nmax,數(shù)據(jù)塊分割大小為D,設(shè)哈希層數(shù)為k,則該結(jié)構(gòu)可以表示的數(shù)據(jù)量為Nmaxk-1?D。當(dāng)Nmax取27,D取24 MB,k取4,則表示的數(shù)據(jù)量為461 GB。
圖5 數(shù)據(jù)d1的多分支平衡Merkle樹結(jié)構(gòu)Figure 5 Multi-branch balanced Merkle tree structure of data 1d
獲得數(shù)據(jù)nodedi之后,利用域中的各個數(shù)據(jù)節(jié)點的 nodeid計算數(shù)據(jù)域節(jié)點的 nodeid。例如,nodeA1表示為h(noded1||noded2)。獲得域節(jié)點和數(shù)據(jù)節(jié)點的 nodeid信息之后,便可獲得完整的基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)。完整的基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)如圖6所示。
圖6 完整的基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)Figure 6 Integrate hybrid Merkle DAG structure based on data domain
當(dāng)數(shù)據(jù)域中的非結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)量小于構(gòu)建多分支Merkle樹的分片大小時,非結(jié)構(gòu)化數(shù)據(jù)不經(jīng)過分片直接計算數(shù)據(jù)的哈希, nodeid=h(d)。圖7表示非結(jié)構(gòu)化數(shù)據(jù)較小時,基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu),其構(gòu)造簡單,能夠?qū)?shù)據(jù)個數(shù)多但數(shù)據(jù)量小的非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行有效組織,并有利于在此基礎(chǔ)上生成完整性審計的證明元數(shù)據(jù)。
圖7 數(shù)據(jù)較小時,基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)Figure 7 Hybrid Merkle DAG structure based on data domain for small data
本文考慮為某類數(shù)據(jù)相關(guān)的各方建立聯(lián)盟鏈系統(tǒng)。數(shù)據(jù)擁有者、數(shù)據(jù)使用者與數(shù)據(jù)存儲系統(tǒng)均會加入?yún)^(qū)塊鏈系統(tǒng)并且成為區(qū)塊鏈系統(tǒng)中的節(jié)點。基于聯(lián)盟鏈的雙驗證審計架構(gòu)如圖8所示,DO表示數(shù)據(jù)擁有者,DU表示數(shù)據(jù)使用者,SP表示數(shù)據(jù)存儲系統(tǒng)。
圖8 基于聯(lián)盟鏈的雙驗證審計架構(gòu)Figure 8 Dual verification audit architecture based on consortium blockchain
各個參與方在系統(tǒng)中包含鏈下基礎(chǔ)設(shè)施部分和鏈上區(qū)塊鏈節(jié)點部分。鏈下基礎(chǔ)設(shè)施包含存儲設(shè)施和計算設(shè)施,完成審計流程主要的存儲和計算任務(wù)。系統(tǒng)中通過區(qū)塊鏈網(wǎng)絡(luò)連接參與的各個節(jié)點,完整性審計的流程通過區(qū)塊鏈的元數(shù)據(jù)上傳合約、完整性判決合約和審計歷史索引合約實現(xiàn),審計過程的關(guān)鍵數(shù)據(jù)通過區(qū)塊鏈賬本進(jìn)行記錄。
在本文方案中,區(qū)塊鏈部分通過Hyperledger Fabric平臺實現(xiàn)。Hyperledger Fabric是由Linux基金會牽頭研發(fā)的面向企業(yè)應(yīng)用的聯(lián)盟鏈平臺[28]。Hyperledger Fabric中的賬本分為世界狀態(tài)和區(qū)塊鏈兩部分。世界狀態(tài)以鍵值對的方式存儲賬本狀態(tài)的當(dāng)前值,相較于遍歷整個交易日志能夠獲得更快的訪問速度。區(qū)塊鏈?zhǔn)墙灰兹罩?,它記錄了區(qū)塊鏈賬本的完整數(shù)據(jù),世界狀態(tài)的改變由這些交易日志決定。當(dāng)鏈上數(shù)據(jù)的鍵唯一的時候,世界狀態(tài)的值就不會被改變,能夠穩(wěn)定記錄數(shù)據(jù)的鍵值對。
對某個數(shù)據(jù)域的完整性審計的所有歷史記錄會在區(qū)塊鏈賬本上保存,通過檢索并審查審計歷史實現(xiàn)對數(shù)據(jù)域歷史可信度的增強(qiáng)。為保證對數(shù)據(jù)完整性審計歷史檢索的速度,本文對狀態(tài)數(shù)據(jù)庫進(jìn)行檢索。為實現(xiàn)多類型索引查詢操作,狀態(tài)數(shù)據(jù)庫采用CouchDB數(shù)據(jù)庫。各個流程相關(guān)信息以JSON格式進(jìn)行存儲,存儲的數(shù)據(jù)可以表示為:
ObjectType標(biāo)識數(shù)據(jù)類型,分為data_up、challenge、prove、audit,分別代表上鏈數(shù)據(jù)、挑戰(zhàn)數(shù)據(jù)、證明數(shù)據(jù)、審計數(shù)據(jù)。時間戳Timestamp作為該條狀態(tài)數(shù)據(jù)的唯一標(biāo)識,由區(qū)塊鏈智能合約自動生成。Node_block為需要進(jìn)行數(shù)據(jù)完整性審計的數(shù)據(jù)域df節(jié)點標(biāo)識,對于審計數(shù)據(jù)域,構(gòu)建基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu),獲得Node_block= nodedf。data1和data2為其他信息,由不同的數(shù)據(jù)類型決定。
本文的完整性驗證方案通過BLS簽名實現(xiàn)。BLS[29]為數(shù)字簽名算法,其簽名長度較RSA和DSA簽名方案更短。
DH四元組定義:G為階為素數(shù)q的循環(huán)群,D=(g1,g2,u1,u2)?G4為四元組,其中g(shù)1、g2為G的生成元,。判斷α=β是否成立,如果成立,則稱D為DH四元組。
設(shè)G為間隙群,g為G的生成元,H:{0,1}*→G為全域哈希函數(shù)。隨機(jī)整數(shù)x為私鑰,y=gx為公鑰。M?{ 0,1}*為待簽名的消息,h=H(M),則σ=h x?G為消息M的簽名。如果四元組(g,h,y,σ)為DH四元組,則簽名判斷為True,否則簽名判斷為False。
4.2.1初始化階段
對于數(shù)據(jù)的加密,本文選用AES對稱加密。該階段生成數(shù)據(jù)加密所需的AES加密密鑰以及BLS簽名所需的公鑰和私鑰。該階段在每個數(shù)據(jù)擁有者鏈下計算設(shè)施中分別進(jìn)行。
設(shè)需要產(chǎn)生μ個數(shù)據(jù)域副本,生成μ個AES加密密鑰 {K1,K2,… ,Kμ},密鑰長度為kbit。g為生成元,隨機(jī)選擇令x為數(shù)據(jù)擁有者DO的BLS簽名私鑰,數(shù)據(jù)擁有者DO的BLS簽名公鑰y滿足y=gx。啟動區(qū)塊鏈網(wǎng)絡(luò),在區(qū)塊鏈各個節(jié)點部署智能合約。
4.2.2證明元數(shù)據(jù)生成階段
數(shù)據(jù)擁有者使用AES加密密鑰 {K1,K2,…,Kμ}分別對數(shù)據(jù)域df中每個數(shù)據(jù)進(jìn)行加密,獲得μ個數(shù)據(jù)域副本 {df1,df2,… ,dfμ}。為實現(xiàn)對多個副本完整性的同時驗證,對多副本拼接獲得復(fù)合數(shù)據(jù)域DF,對DF進(jìn)行數(shù)據(jù)完整性驗證實現(xiàn)對多副本的同時驗證。獲得數(shù)據(jù)域證明元數(shù)據(jù)流程如下。
1) 獲取復(fù)合數(shù)據(jù)域DF。獲取復(fù)合數(shù)據(jù)域需要對數(shù)據(jù)域中的數(shù)據(jù)進(jìn)行逐個復(fù)合,以實現(xiàn)對多副本數(shù)據(jù)完整性的同時驗證。設(shè)原始數(shù)據(jù)域中的某個數(shù)據(jù)為d,數(shù)據(jù)域副本的個數(shù)為3,則數(shù)據(jù)d有3個數(shù)據(jù)副本 {d1,d2,d3},數(shù)據(jù)副本被劃分成n個數(shù)據(jù) 塊,表 示為j? (1,2,3)。數(shù)據(jù)擁有者確定生成證明元數(shù)據(jù)數(shù)量為k,并使用偽隨機(jī)數(shù)發(fā)生器生成k個隨機(jī)序列:L= {l1,l2,…,lk},并為每個隨機(jī)序列生成一個隨機(jī)序列拼接策略S= {s1,s2,… ,sk}。設(shè)隨機(jī)序列l(wèi)i對應(yīng)的拼接策略是si:{md1||li||md2||md3},其中md1、md2、md3分別表示數(shù)據(jù)副本d1、d2、d3的數(shù)據(jù)塊,不同的拼接策略規(guī)定隨機(jī)序列插入的位置不同。則數(shù)據(jù)d的復(fù)合數(shù)據(jù)D可以表示為為復(fù)合數(shù)據(jù)D的各個數(shù)據(jù)塊的集合。逐個獲得數(shù)據(jù)域df中非結(jié)構(gòu)化數(shù)據(jù)的復(fù)合數(shù)據(jù)。
2) 利用獲得的復(fù)合數(shù)據(jù)獲得df的復(fù)合數(shù)據(jù)域DF,并構(gòu)建基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu),獲得復(fù)合數(shù)據(jù)域DF節(jié)點信息 nodeDF。圖9為獲取 nodeDF示意。
圖9 獲取證明元數(shù)據(jù)Figure 9 Obtain proof metadata
3) 計算h=H(nodeDF),使用私鑰x對h進(jìn)行BLS簽名,σi=hx,則數(shù)據(jù)域df的證明元數(shù)據(jù)可以表示為 {nodedf,li,si,σi,y}。
4.2.3數(shù)據(jù)副本存儲階段
數(shù)據(jù)存儲系統(tǒng)通過安全通道接收數(shù)據(jù)擁有者需要存儲的數(shù)據(jù)域副本 {df1,df2,… ,dfμ},并通過簽名機(jī)制生成數(shù)據(jù)存儲憑證storage_credentials。
在該階段,數(shù)據(jù)擁有者上傳上鏈數(shù)據(jù),docType取data_up,data1取數(shù)據(jù)名稱data_name,data2取數(shù)據(jù)存儲憑證storage_credentials。
4.2.4挑戰(zhàn)階段
在該階段,數(shù)據(jù)擁有者確定進(jìn)行挑戰(zhàn)的數(shù)據(jù)域df,選取df對應(yīng)的證明元數(shù)據(jù)為挑戰(zhàn)數(shù)據(jù){nodedf,l i,si,σi,y},docType取challenge,data1取挑戰(zhàn)數(shù)據(jù),data2取數(shù)據(jù)存儲憑證storage_credentials。
4.2.5證據(jù)生成階段
數(shù)據(jù)存儲系統(tǒng)作為區(qū)塊鏈節(jié)點,在線監(jiān)聽數(shù)據(jù)擁有者對自己的挑戰(zhàn),獲取挑戰(zhàn)元數(shù)據(jù){nodedf,l i,si,σi,y},依據(jù) nodedf,從存儲數(shù)據(jù)庫中獲取數(shù)據(jù)域的副本 {df1,df2,…, dfμ},依據(jù)隨機(jī)序列l(wèi)i和拼接策略si獲得復(fù)合數(shù)據(jù)域DF′,對復(fù)合數(shù)據(jù)域DF構(gòu)建基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)獲得證據(jù)Ki=H(nodeDF')。
在該階段,存儲系統(tǒng)上傳證明數(shù)據(jù),docType取prove,data1取證據(jù)Ki,data2取對應(yīng)的挑戰(zhàn)時間戳challenge_timestamp。
4.2.6完整性判決階段
完整性判決合約獲得挑戰(zhàn)元數(shù)據(jù){nodedf,li,si,σi,y}和證據(jù)Ki,并判斷(g,K i,y,σi)是否為DH四元組,如果是,則判斷數(shù)據(jù)完整,audit_results=True;如果不是,則判斷數(shù)據(jù)不完整,audit_results=False。
在該階段,數(shù)據(jù)完整性判決合約上傳審計數(shù)據(jù),docType取audit,data1取審計結(jié)果audit_results,data2取對應(yīng)的證據(jù)時間戳prove_ timestamp。
為實現(xiàn)對審計歷史的高效檢索,創(chuàng)建索引文件并與本文使用的智能合約一起安裝到區(qū)塊鏈系統(tǒng)節(jié)點。索引文件內(nèi)容如下:
上述索引文件創(chuàng)建了兩個索引,索引1依據(jù)Node_block進(jìn)行索引,能夠索引與某個數(shù)據(jù)域相關(guān)的所有信息,包括上鏈數(shù)據(jù)、挑戰(zhàn)數(shù)據(jù)、證明數(shù)據(jù)、審計數(shù)據(jù);索引2依據(jù)docType和Node_block進(jìn)行索引,能夠分別索引某個數(shù)據(jù)域的上鏈數(shù)據(jù)、挑戰(zhàn)數(shù)據(jù)、證明數(shù)據(jù)、審計數(shù)據(jù)信息。
5.1.1驗證流程安全性
完整性驗證流程概括為數(shù)據(jù)副本生成、證明元數(shù)據(jù)生成、證據(jù)生成、證據(jù)審計4個階段。非結(jié)構(gòu)化數(shù)據(jù)通過基于數(shù)據(jù)域的Merkle DAG文件結(jié)構(gòu)進(jìn)行組織,節(jié)點信息中的 nodedf保證節(jié)點的唯一性,節(jié)點信息中指針信息保證Merkle DAG文件結(jié)構(gòu)確定,數(shù)據(jù)在數(shù)據(jù)存儲系統(tǒng)SP中以確定的方式進(jìn)行存儲。副本生成機(jī)制保證數(shù)據(jù)損壞能夠即時修復(fù)。數(shù)據(jù)副本生成階段,通過設(shè)置μ個不同的AES密鑰 {K1,K2,… ,Kμ}對數(shù)據(jù)加密實現(xiàn)副本生成,防止存儲系統(tǒng)進(jìn)行數(shù)據(jù)多副本偽存儲。該副本生成機(jī)制,能夠減少副本參數(shù)存儲,防止海量參數(shù)丟失與損壞。在證明元數(shù)據(jù)生成階段,使用隨機(jī)序列拼接方式組合獲得復(fù)合數(shù)據(jù)域nodeDF,對 nodeDF進(jìn)行簽名獲得證明元數(shù)據(jù){nodedf,l i,si,σi,y}。在證據(jù)生成階段,存儲系統(tǒng)同樣使用隨機(jī)序列拼接方式獲得復(fù)合數(shù)據(jù)域nodeDF',該方式能夠保證元數(shù)據(jù)生成必須使用完整副本數(shù)據(jù)塊,保證完整性審計的可行性。在證據(jù)驗證階段通過檢驗(g,K i,y,σi)是否為DH四元組,判斷數(shù)據(jù)是否遭到破壞,保證校驗結(jié)果的可信度。
5.1.2區(qū)塊鏈賬本記錄可信度
本文的完整性驗證流程通過智能合約實現(xiàn),驗證的相關(guān)數(shù)據(jù)記錄在區(qū)塊鏈賬本上。智能合約取代可信第三方對證據(jù)的審計,這樣能夠解決防止第三方對驗證流程進(jìn)行攻擊的問題。區(qū)塊鏈賬本能夠?qū)崿F(xiàn)賬本數(shù)據(jù)的安全可信多方存儲,驗證流程數(shù)據(jù)記錄在區(qū)塊鏈賬本上,防止各方對驗證流程的篡改,保證數(shù)據(jù)完整性驗證歷史的真實性。在區(qū)塊鏈賬本上記錄數(shù)據(jù)在區(qū)塊鏈賬本上的唯一標(biāo)識Node_block,唯一標(biāo)識的確定能夠保證數(shù)據(jù)存儲與完整性驗證的一致性,實現(xiàn)對某一數(shù)據(jù)完整性驗證歷史的檢索。通過數(shù)據(jù)完整性驗證歷史的檢索,能夠保證數(shù)據(jù)在進(jìn)行共享之前的歷史一致性,保證數(shù)據(jù)的可信度。
表1 為本文方案與現(xiàn)有方案的對比。本文方案包含多個數(shù)據(jù)擁有者與數(shù)據(jù)使用者,以及多個數(shù)據(jù)存儲系統(tǒng),能夠?qū)崿F(xiàn)同領(lǐng)域數(shù)據(jù)或者聯(lián)盟成員間數(shù)據(jù)的多方審計。本文方案選用智能合約作為系統(tǒng)審計機(jī)構(gòu),能夠避免尋找可信第三方。與抽樣驗證相比,基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)能夠?qū)崿F(xiàn)多副本數(shù)據(jù)的確定性驗證,提高數(shù)據(jù)完整性審計的效率與準(zhǔn)確度。同時,本文方案設(shè)計數(shù)據(jù)完整性審計歷史高效檢索機(jī)制,實現(xiàn)數(shù)據(jù)完整性驗證歷史高效檢索以及多方驗證,保證數(shù)據(jù)歷史的一致性,增強(qiáng)數(shù)據(jù)的可信度。本文方案沒有實現(xiàn)數(shù)據(jù)的動態(tài)修改,降低了數(shù)據(jù)存儲的靈活性,但可以增加數(shù)據(jù)的歷史一致性,適合本文探討的傾向數(shù)據(jù)共享的場景。
表1 方案對比Table 1 Scheme comparison
本文實驗部署6臺阿里云服務(wù)器,其功能標(biāo)識如表2所示。云服務(wù)器配置Intel Xeon Platinum 8269CY @2.5GHz處理器,256 GB內(nèi)存,Ubuntu 16.04 64位操作系統(tǒng)。通過Java實現(xiàn)CBC模式128 bit密鑰AES加密。證明元數(shù)據(jù)生成階段使用go語言編程實現(xiàn),并利用go語言的并發(fā)機(jī)制加快計算速度,使用SHA256算法進(jìn)行數(shù)據(jù)摘要提取。BLS簽名驗證的部分通過Java的JPBC庫實現(xiàn)。區(qū)塊鏈部分基于Hyperledger Fabric 2.2實現(xiàn)。區(qū)塊鏈系統(tǒng)的背書策略為:將智能合約安裝在6臺服務(wù)器中的peer節(jié)點上,在進(jìn)行區(qū)塊鏈交易時,6臺服務(wù)器中的peer節(jié)點均進(jìn)行交易背書。
表2 云服務(wù)器功能Table 2 Cloud server function
證明元數(shù)據(jù)生成過程與證據(jù)生成過程相似,在本文的測試中,對證明元數(shù)據(jù)生成效率進(jìn)行測試。為驗證系統(tǒng)對大數(shù)據(jù)環(huán)境中廣泛存在的小數(shù)據(jù)量數(shù)據(jù)進(jìn)行完整性驗證的效率,測試了包含大量小數(shù)據(jù)的數(shù)據(jù)域生成證明元數(shù)據(jù)的速度。并進(jìn)行證據(jù)校驗效率測試。
對數(shù)據(jù)量為1~10 GB的數(shù)據(jù)進(jìn)行證明元數(shù)據(jù)生成效率的測試如圖10所示。在該測試中,數(shù)據(jù)副本的數(shù)量為3,多分支Merkle樹結(jié)構(gòu)中參數(shù)Nmax取27,分別構(gòu)建數(shù)據(jù)塊大小為16 MB、24 MB、32 MB的基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)。圖11所示的是對1 GB以內(nèi)數(shù)據(jù)進(jìn)行證明元數(shù)據(jù)生成效率的測試。數(shù)據(jù)副本的數(shù)量為3,多分支Merkle樹結(jié)構(gòu)中參數(shù)Nmax取27,分別構(gòu)建數(shù)據(jù)塊大小為1 MB、4 MB、8 MB的基于數(shù)據(jù)域的混合Merkle DAG結(jié)構(gòu)。
圖10 1~10 GB證明元數(shù)據(jù)的生成測試Figure 10 1~10 GB proof metadata generation test
圖11 1 GB以內(nèi)證明元數(shù)據(jù)的生成測試Figure 11 Data within 1 GB to prove metadata generation test
通過兩組曲線可以看出,相同的數(shù)據(jù)量使用不同大小的分塊進(jìn)行處理,耗時基本相同。在實際的應(yīng)用中,數(shù)據(jù)分塊大小可以根據(jù)數(shù)據(jù)量的大小以及實際的需求進(jìn)行確定。證明元數(shù)據(jù)生成的時間與數(shù)據(jù)量成正比,耗時與數(shù)據(jù)量的比例關(guān)系約為1.25 s/GB,數(shù)據(jù)處理效率較高。
圖12 所示的是對1 000~10 000條非結(jié)構(gòu)小數(shù)據(jù)進(jìn)行證明元數(shù)據(jù)生成效率的測試。非結(jié)構(gòu)化數(shù)據(jù)大小為1 MB左右,數(shù)據(jù)副本的數(shù)量為3,多分支Merkle樹結(jié)構(gòu)中參數(shù)取27,構(gòu)建數(shù)據(jù)塊大小為1 MB的基于數(shù)據(jù)域的Merkle DAG文件結(jié)構(gòu)。從獲得的曲線可以看出證明元數(shù)據(jù)生成的速度與數(shù)據(jù)條數(shù)成正比,約為870 條/秒,數(shù)據(jù)處理效率較高。
圖12 非結(jié)構(gòu)化小數(shù)據(jù)證明元數(shù)據(jù)生成測試Figure 12 Unstructured small data proof metadata generation test
圖13 為對數(shù)據(jù)量1~10 GB的數(shù)據(jù)進(jìn)行證據(jù)真實性校驗的效率測試。圖14為對數(shù)據(jù)量100~900 MB的數(shù)據(jù)進(jìn)行證據(jù)真實性的效率測試。由結(jié)果可知,完整性證據(jù)的耗時與數(shù)據(jù)量的大小無關(guān),證據(jù)真實性校驗的時間約為40 ms,能夠?qū)崿F(xiàn)對證據(jù)真實性的快速校驗。
圖13 1~10 GB數(shù)據(jù)證據(jù)校驗測試Figure 13 1~10 GB data evidence verification test
圖14 1 GB以內(nèi)數(shù)據(jù)證據(jù)校驗測試Figure 14 Data proof verification test within 1 GB
從實驗的結(jié)果可以看出數(shù)據(jù)完整性證明元數(shù)據(jù)生成以及完整性審計的速度都較高,能夠滿足數(shù)據(jù)異構(gòu)以及數(shù)據(jù)量大的要求。需要說明的是,以上的測試均是在3個數(shù)據(jù)副本的基礎(chǔ)上進(jìn)行的,測試消耗的時間是對3個數(shù)據(jù)副本同時進(jìn)行數(shù)據(jù)完整性證明所用的時間。如果減少副本的數(shù)量,則將成比例減少時間消耗。在實際使用中,數(shù)據(jù)擁有者可以根據(jù)數(shù)據(jù)的重要程度選取合適的數(shù)據(jù)副本數(shù)或者不使用副本技術(shù)。
本文針對大數(shù)據(jù)環(huán)境下數(shù)據(jù)特點構(gòu)建基于區(qū)塊鏈的數(shù)據(jù)完整性多方高效審計機(jī)制,實現(xiàn)非結(jié)構(gòu)化小數(shù)據(jù)以及大體積數(shù)據(jù)的高效多副本審計。通過智能合約實現(xiàn)數(shù)據(jù)完整性審計過程,對審計歷史追溯實現(xiàn)對審計過程多方監(jiān)督,保證數(shù)據(jù)共享之前的歷史一致性,增加數(shù)據(jù)可信度。但是本文方案證明元數(shù)據(jù)的生成需要在生成隨機(jī)序列的基礎(chǔ)上實現(xiàn),下一步計劃研究更靈活的證明元數(shù)據(jù)生成方式。