摘 要:針對現(xiàn)有區(qū)塊鏈數(shù)據(jù)共享方法在高速公路事故救援場景下面臨的效率瓶頸和安全性不足的問題,提出一種高效、安全的數(shù)據(jù)共享方法,旨在提高數(shù)據(jù)查詢性能,保證鏈下數(shù)據(jù)的防竄改能力。提出的數(shù)據(jù)共享方法結(jié)合公有鏈與聯(lián)盟鏈的優(yōu)勢,采用雙鏈架構(gòu)提升數(shù)據(jù)共享的安全性與效率。通過將公有鏈鏈上共享數(shù)據(jù)的摘要信息同步至外部數(shù)據(jù)庫,設(shè)計了基于BBF-Merkle樹的數(shù)據(jù)庫索引結(jié)構(gòu)來優(yōu)化查詢性能,同時保證鏈下數(shù)據(jù)的防竄改能力。設(shè)計了緩存-鏈下數(shù)據(jù)庫-公有鏈的分層查詢方案,降低整體查詢耗時。實驗結(jié)果表明,基于BBF-Merkle樹的外聯(lián)數(shù)據(jù)庫查詢耗時相較于其他方案表現(xiàn)最優(yōu),采用基于BBF-Merkle樹的緩存-數(shù)據(jù)庫-公有鏈分層查詢方案,相較于公有鏈智能合約查詢速度提高了七倍。所提出的數(shù)據(jù)共享方法在提升數(shù)據(jù)共享效率、降低查詢延遲的同時,確保了數(shù)據(jù)的安全性與防竄改能力,為高速公路事故救援?dāng)?shù)據(jù)共享提供了技術(shù)支撐。
關(guān)鍵詞:區(qū)塊鏈;數(shù)據(jù)共享;區(qū)塊鏈查詢優(yōu)化;雙鏈架構(gòu)
中圖分類號:TP311"" 文獻(xiàn)標(biāo)志碼:A""" 文章編號:1001-3695(2025)04-003-0987-08
doi: 10.19734/j.issn.1001-3695.2024.09.0292
Highway accident rescue data sharing method based on dual-chain architecture and BBF-Merkle tree
Wang Guanghui1,2, Guan Daowei1, Shen Lingfeng1,2, Ding Shuang1,2, Zhai Zhonghao3
(1.School of Software, Henan University, Kaifeng Henan 475000, China; 2.Henan International Joint Laboratory of Intelligent Network Theory amp; Key Technology, Kaifeng Henan 475000, China; 3.School of Computer Science amp; Software Engineering, Huaiyin Institute of Technology, Huai’an Jiangsu 223003, China)
Abstract:The existing blockchain-based data sharing methods in highway accident rescue scenarios face efficiency bottlenecks and security issues. This paper proposed an efficient and secure data sharing solution to improve data query performance and ensure off-chain data integrity. The method used a dual-chain architecture that combines the advantages of public and consortium blockchains to enhance the security and efficiency of data sharing. It synchronized the summary information of shared data from the public blockchain to an external database and designed a BBF-Merkle tree-based database indexing structure to optimize query performance while maintaining off-chain data integrity. The method introduced a layered query scheme consisting of cache, off-chain database, and public blockchain to reduce overall query time. Experimental results show that the query time of the external database based on BBF-Merkle tree indexing outperformed other solutions. The cache-database-public blockchain layered query scheme achieves a faster query speed by seven times compared to the public blockchain based on smart contracts. The method improves data sharing efficiency, reduces query latency, and ensures data security and integrity, providing strong technical support for highway accident rescue data sharing.
Key words:blockchain; data sharing; blockchain query optimization; dual-chain architecture
0 引言
目前,高速公路事故救援相關(guān)部門采取傳統(tǒng)的數(shù)據(jù)庫來存儲事故以及司乘人員相關(guān)信息,在有查詢數(shù)據(jù)需求時直接從數(shù)據(jù)庫中獲取所需數(shù)據(jù)。然而,各部門數(shù)據(jù)庫系統(tǒng)一般相互獨立,缺乏統(tǒng)一的標(biāo)準(zhǔn)和接口,并且權(quán)限管理異構(gòu),難以適應(yīng)多部門協(xié)作的需求。這些問題使得高速公路事故救援?dāng)?shù)據(jù)共享變得更加困難,甚至無法實現(xiàn),從而導(dǎo)致數(shù)據(jù)孤島問題。此外,傳統(tǒng)數(shù)據(jù)共享方案的數(shù)據(jù)處理和存儲過程不透明,用戶無法有效地追蹤和驗證數(shù)據(jù)的完整性和真實性,導(dǎo)致信任難以建立。區(qū)塊鏈技術(shù)的出現(xiàn)為傳統(tǒng)中心化共享方案面臨的問題提供了新的解決方案。盡管已有很多工作使用區(qū)塊鏈技術(shù)來解決數(shù)據(jù)共享問題,但在高速公路事故救援場景下應(yīng)用區(qū)塊鏈技術(shù)解決數(shù)據(jù)共享仍存在諸多挑戰(zhàn)。
在高速公路事故救援場景下,共享方法必須具備高效的處理能力和快速的響應(yīng)速度,確保各部門能夠及時獲取所需信息。同時,共享數(shù)據(jù)的可信度在救援過程中至關(guān)重要,任何數(shù)據(jù)的竄改或丟失都會對救援工作產(chǎn)生影響,數(shù)據(jù)共享必須能夠確保數(shù)據(jù)的完整性和防竄改能力。例如,事故中涉及的車輛身份或駕駛員信息可能被用于判定責(zé)任。如果這些信息被竄改,可能會導(dǎo)致錯誤的事故責(zé)任認(rèn)定,影響后續(xù)的理賠或法律程序。此外,救援?dāng)?shù)據(jù)涉及個人隱私和敏感信息,這些數(shù)據(jù)需要在共享過程中得到保護(hù),防止未經(jīng)授權(quán)的訪問和泄露。綜上,高速公路事故救援?dāng)?shù)據(jù)共享所面臨的兩個核心問題是效率和安全。高效的數(shù)據(jù)共享方法能確保各部門迅速交換信息,提高救援響應(yīng)速度;安全的數(shù)據(jù)共享方法則能保證數(shù)據(jù)的完整性、防竄改性和隱私保護(hù),為救援工作提供堅實的保障。
現(xiàn)有基于區(qū)塊鏈的數(shù)據(jù)共享方法在效率和安全性之間難以取得平衡。區(qū)塊鏈系統(tǒng)可分為公有鏈、私有鏈和聯(lián)盟鏈。公有鏈具備強(qiáng)去中心化和高安全性,適合高信任和審計場景;聯(lián)盟鏈因網(wǎng)絡(luò)規(guī)模小,采用高效共識算法,性能優(yōu)異,適合高頻交易場景。然而,現(xiàn)有方案[1~4]使用單一類型的區(qū)塊鏈架構(gòu)進(jìn)行數(shù)據(jù)共享。Yang等人[1]提出了基于單一區(qū)塊鏈架構(gòu)的數(shù)據(jù)共享和交易的整體框架,通過區(qū)塊鏈去中心化、透明性等特點保證整個流程的安全性。Guo等人[2]提出了一種支持以區(qū)塊鏈作為物聯(lián)網(wǎng)復(fù)雜場景的底層平臺的數(shù)據(jù)共享方案,該方案通過鏈下存儲和鏈上搜索解決區(qū)塊鏈存儲問題。Chen等人[3]提出了一種基于Fabric的跨企業(yè)數(shù)據(jù)共享方案,數(shù)據(jù)擁有者和使用者通過區(qū)塊鏈網(wǎng)絡(luò)實現(xiàn)溝通,在鏈上完成數(shù)據(jù)共享的整個流程。在事故救援場景下這種單一區(qū)塊鏈架構(gòu)的方案存在兩個問題:一方面,使用單一類型的區(qū)塊鏈很難在達(dá)到高效的同時兼顧安全性,因為高效通常依賴于較少的節(jié)點和較低的共識復(fù)雜度,這些因素可能削弱網(wǎng)絡(luò)的去中心化程度和抗攻擊能力,而安全性取決于各種去中心化和復(fù)雜的共識機(jī)制,這通常會降低處理速度和效率;另一方面,在事故救援場景中,如果只使用單一類型區(qū)塊鏈,不同功能的所在節(jié)點就不得不驗證和處理與自己無關(guān)的交易,這會導(dǎo)致效率低下。相比之下,雙鏈架構(gòu)可以有效分擔(dān)這些工作壓力,讓各個獨立的功能模塊所在的區(qū)塊鏈節(jié)點專注于與自己相關(guān)的交易,提升整體處理效率[5~7]。針對高速公路事故救援?dāng)?shù)據(jù)共享所面臨的問題,本文結(jié)合公有鏈和聯(lián)盟鏈的優(yōu)勢,提出了基于雙鏈架構(gòu)的高效數(shù)據(jù)共享方法,公有鏈專注于提供去中心化的數(shù)據(jù)審計功能,而聯(lián)盟鏈則負(fù)責(zé)高效的數(shù)據(jù)索引和存取操作。這種分工明確的做法使得區(qū)塊鏈網(wǎng)絡(luò)能夠各司其職,并行處理彼此無關(guān)的交易,顯著提高了整體網(wǎng)絡(luò)的處理效率,進(jìn)而加快事故救援相關(guān)數(shù)據(jù)在各部門間的共享效率。此外,數(shù)據(jù)的密文數(shù)據(jù)存儲在鏈下的IPFS中,而公有鏈和聯(lián)盟鏈分別存儲數(shù)據(jù)摘要和索引,有效減輕了鏈上的存儲壓力,避免了大規(guī)模事故救援?dāng)?shù)據(jù)存儲帶來的性能瓶頸和存儲成本。
為了提升數(shù)據(jù)審計效率,本文針對現(xiàn)有公有鏈存在的數(shù)據(jù)查詢效率低下問題提出了高效的解決方案。參與事故救援的各部門數(shù)據(jù)使用者收到共享數(shù)據(jù)后通過公有鏈對共享數(shù)據(jù)進(jìn)行審計以保證數(shù)據(jù)的完整性。由于事故救援場景往往要求快速響應(yīng),審計查詢的低效可能會導(dǎo)致數(shù)據(jù)無法及時驗證,進(jìn)而引發(fā)信息不一致、誤操作等問題,最終拖延救援進(jìn)度,甚至可能危及生命安全。但實際上,目前的公有鏈查詢效率難以滿足事故救援場景下的高效審計查詢要求。這主要有以下幾個原因:首先,以太坊、比特幣等區(qū)塊鏈系統(tǒng)底層的數(shù)據(jù)存儲系統(tǒng)使用的是LevelDB[8],它是一種針對寫密集型應(yīng)用而設(shè)計的數(shù)據(jù)存儲系統(tǒng),以犧牲數(shù)據(jù)讀性能為代價換取寫性能的提高。然而,事故救援共享中的查詢操作頻率遠(yuǎn)高于寫入頻率,特別是在事故易發(fā)時段,各部門之間協(xié)作救援需要進(jìn)行頻繁的查詢操作。此時LevelDB的寫入優(yōu)勢也無法體現(xiàn)出來而讀性能卻不足,這成為限制公有鏈查詢性能的主要瓶頸。其次,公有鏈內(nèi)部的數(shù)據(jù)結(jié)構(gòu)也對查詢效率產(chǎn)生了重要影響,以以太坊舉例而言,Merkle Patricia Trie(MPT)作為其核心數(shù)據(jù)結(jié)構(gòu)之一,負(fù)責(zé)存儲賬戶狀態(tài)和智能合約狀態(tài)。為了查找到某個鍵的值,必須從根節(jié)點開始,逐層遍歷到葉子節(jié)點,這種逐層遍歷的過程在樹的深度較大的情況下,有較高的I/O操作的延遲,存在查詢效率低的問題[9]。現(xiàn)有優(yōu)化公有區(qū)塊鏈查詢性能主要有兩種思路:一種方案[10~12]是對公有區(qū)塊鏈內(nèi)部數(shù)據(jù)結(jié)構(gòu)進(jìn)行改造提升查詢效率,然而在實際應(yīng)用中難以推廣,因為這種修改會破壞區(qū)塊鏈現(xiàn)有的結(jié)構(gòu),增加了系統(tǒng)的復(fù)雜性和開發(fā)成本。另外一種是方案[13~18]在區(qū)塊鏈的基礎(chǔ)之上建立外聯(lián)數(shù)據(jù)庫,是一個較為通用且能夠提升查詢效率的有效方案。比如,文獻(xiàn)[13]提出了EtherQL系統(tǒng)將區(qū)塊數(shù)據(jù)同步到鏈下數(shù)據(jù)庫MongoDB中,查詢以太網(wǎng)區(qū)塊鏈數(shù)據(jù)時通過鏈下數(shù)據(jù)庫查詢,以提高查詢效率。但是傳統(tǒng)的數(shù)據(jù)庫索引在設(shè)計上主要關(guān)注高效檢索和數(shù)據(jù)組織,由于缺乏內(nèi)置的防竄改機(jī)制導(dǎo)致無法確認(rèn)數(shù)據(jù)是否未被竄改或偽造。為了提升查詢效率并且保證外聯(lián)數(shù)據(jù)庫的高效索引與防竄改能力,本文設(shè)計了BBF-Merkle樹索引結(jié)構(gòu),在實現(xiàn)高效檢索的基礎(chǔ)之上保證鏈下數(shù)據(jù)的不可竄改特性,并在此基礎(chǔ)之上提出緩存-數(shù)據(jù)庫-公有鏈的高效分層混合查詢方法。
總的來說,為解決在高速公路事故救援場景下數(shù)據(jù)共享面臨的上述挑戰(zhàn),本文提出一種基于雙鏈架構(gòu)與BBF-Merkle樹的高效事故救援?dāng)?shù)據(jù)共享方法 (efficient accident rescue data sharing scheme,Efficient-DSS)。其中,雙鏈架構(gòu)整合了公有鏈的防竄改審計功能與聯(lián)盟鏈的快速數(shù)據(jù)檢索機(jī)制,BBF-Merkle樹索引結(jié)構(gòu)則確保了鏈下數(shù)據(jù)防竄改性,從而有效應(yīng)對高速公路事故救援場景下對數(shù)據(jù)安全和高效性的需求,提升了高速公路事故救援響應(yīng)速度和數(shù)據(jù)安全性。本文主要工作如下:
a)雙鏈數(shù)據(jù)共享架構(gòu)。通過整合公有鏈和聯(lián)盟鏈的優(yōu)勢,實現(xiàn)了高效安全的數(shù)據(jù)共享。公有鏈存儲明文摘要以進(jìn)行公開審計,確保數(shù)據(jù)的不可竄改性。聯(lián)盟鏈存儲IPFS地址以進(jìn)行快速索引和檢索加密數(shù)據(jù)。鏈下的IPFS存儲密文,顯著減輕了鏈上的存儲負(fù)擔(dān)。
b)BBF-Merkle樹數(shù)據(jù)結(jié)構(gòu)設(shè)計與鏈上鏈下分層查詢方法。為提升公有鏈查詢效率,設(shè)計不同觸發(fā)機(jī)制將鏈上數(shù)據(jù)批量轉(zhuǎn)移到外聯(lián)數(shù)據(jù)庫。為了保證外聯(lián)數(shù)據(jù)庫的高效索引與防竄改能力,設(shè)計了基于BBF-Merkle樹的索引結(jié)構(gòu),并提出緩存-鏈下數(shù)據(jù)庫-公有鏈的鏈上鏈下分層查詢方案,在實現(xiàn)高效查詢的同時保證了鏈下數(shù)據(jù)的防竄改特性。
c)實驗驗證與性能評估。對提出方法在事故救援?dāng)?shù)據(jù)共享方面開展了有效性和高效性實驗。對BBF-Merkle樹在數(shù)據(jù)庫層的查詢性能測試表明,BBF-Merkle樹的查詢效率優(yōu)于現(xiàn)有外聯(lián)數(shù)據(jù)庫方案,并在數(shù)據(jù)量增加的情況下表現(xiàn)出顯著的性能優(yōu)勢。對所提出分層查詢方案的性能測試顯示,Efficient-DSS分層查詢方案的查詢耗時低于現(xiàn)有方案。
1 基礎(chǔ)知識
1.1 區(qū)塊鏈類型
當(dāng)前的區(qū)塊鏈系統(tǒng)按公開程度和是否有準(zhǔn)入制大致分為公有區(qū)塊鏈、私有區(qū)塊鏈和聯(lián)盟鏈[19]三種類型。在公有區(qū)塊鏈中,所有記錄都是公開可見的,每個人都可以參與共識過程。在聯(lián)盟鏈中,只有一組預(yù)先選定的節(jié)點才會參與聯(lián)盟鏈的共識過程。公有鏈中所有的礦工都將參與共識,并且通過工作量證明或權(quán)益證明等復(fù)雜的共識機(jī)制達(dá)成共識[20]。因此,公有鏈?zhǔn)峭耆ブ行幕?,但同時鏈上交易也需要支付額外的手續(xù)費以獎勵礦工執(zhí)行交易和維護(hù)網(wǎng)絡(luò)。聯(lián)盟鏈的中心化程度雖然不及公有鏈,但其速度通常比公有鏈更快,并且在聯(lián)盟鏈上執(zhí)行合約操作數(shù)據(jù)不需要支付手續(xù)費。這些得益于聯(lián)盟鏈沒有使用像公有鏈那樣復(fù)雜的共識算法且擁有著更小的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)[19]。
1.2 Merkle樹
Merkle樹是一種樹型數(shù)據(jù)結(jié)構(gòu),其主要特點是通過哈希函數(shù)將大量數(shù)據(jù)塊匯總為一個唯一的根哈希值(也稱為Merkle根),其核心優(yōu)勢在于能夠高效且安全地驗證數(shù)據(jù)的完整性和一致性[20]。在Merkle樹中,每個葉子節(jié)點都存儲數(shù)據(jù)塊的哈希值,而每個非葉子節(jié)點則存儲其子節(jié)點哈希值的組合。最終,最頂層的節(jié)點,即根節(jié)點,代表了整棵樹的唯一哈希值。通過這種方式,Merkle樹能夠快速檢測出任何一個數(shù)據(jù)塊的變化,只需比較相應(yīng)的哈希值即可。Merkle證明通過提供一條從目標(biāo)數(shù)據(jù)塊到Merkle樹根的路徑,以及這條路徑上所有兄弟節(jié)點的哈希值,來證明目標(biāo)數(shù)據(jù)塊的存在性或者完整性[21]。
2 系統(tǒng)模型與問題描述
2.1 事故救援?dāng)?shù)據(jù)共享模型
本文研究的事故救援?dāng)?shù)據(jù)共享框架如圖1所示,包含7個實體,分別是多授權(quán)中心、數(shù)據(jù)擁有者、數(shù)據(jù)使用者、去中心化文件存儲系統(tǒng)、聯(lián)盟鏈、公有鏈和外聯(lián)數(shù)據(jù)庫。在事故發(fā)生后,物聯(lián)網(wǎng)車輛采集事故數(shù)據(jù)并加密,將密文信息上傳至去中心化文件存儲系統(tǒng),同時將數(shù)據(jù)摘要上傳至公有鏈,確保不可竄改性。聯(lián)盟鏈負(fù)責(zé)存儲加密數(shù)據(jù)在IPFS的索引,救援部門作為數(shù)據(jù)使用者通過聯(lián)盟鏈檢索并訪問相關(guān)數(shù)據(jù),并通過分層審計驗證數(shù)據(jù)的完整性。外聯(lián)數(shù)據(jù)庫則同步鏈上數(shù)據(jù)至鏈下并提供快速查詢支持,確保數(shù)據(jù)高效可用。
各實體具體含義如下:
a)多授權(quán)中心。它包括中央授權(quán)中心(central authority,CA)與多個屬性授權(quán)中心(attribute authority,AA),負(fù)責(zé)密鑰生成和存儲。多授權(quán)中心是可信的密鑰分發(fā)機(jī)構(gòu),承擔(dān)了系統(tǒng)公共參數(shù)的生成,即在系統(tǒng)初始化時的主密鑰。當(dāng)用戶向多授權(quán)中心發(fā)起注冊請求時,該實體會為請求注冊的用戶生成與其身份對應(yīng)的屬性密鑰,同時還會為注冊的用戶生成假名,用于在交互中保護(hù)隱私和身份信息。
b)數(shù)據(jù)擁有者(data owner,DO)。它包括物聯(lián)網(wǎng)車輛以及駕駛員。物聯(lián)網(wǎng)車輛通過內(nèi)置的傳感器和車載網(wǎng)關(guān)收集環(huán)境數(shù)據(jù)、車輛狀態(tài)等信息。駕駛員作為數(shù)據(jù)擁有者,提供與個人相關(guān)的數(shù)據(jù),包括個人身份信息、醫(yī)療信息、保險信息等,用于事故后的處理和救援。
c)數(shù)據(jù)使用者(data user,DU)。它是事故救援的各個部門以及部門下的實體成員,包括但不限于交警部門、醫(yī)療機(jī)構(gòu)、保險公司等。這些部門通過聯(lián)盟鏈中的通道機(jī)制進(jìn)行數(shù)據(jù)共享,通過高效的分層審計查詢來驗證數(shù)據(jù)完整性。
d)去中心化文件存儲系統(tǒng)。該系統(tǒng)存儲數(shù)據(jù)擁有者上傳的加密數(shù)據(jù),并返回存儲索引,通過索引可以高效地定位和檢索存儲的密文。本文使用IPFS作為去中心化文件存儲系統(tǒng),其存儲數(shù)據(jù)并返回CID作為數(shù)據(jù)的唯一索引。
e)聯(lián)盟鏈。其由各部門共同維護(hù),通過聯(lián)盟鏈通道機(jī)制,不同部門可以在獨立的通道中進(jìn)行數(shù)據(jù)交換,從而確保數(shù)據(jù)的隔離。本文聯(lián)盟鏈?zhǔn)褂?Raft 共識算法,可有效提高聯(lián)盟鏈?zhǔn)聞?wù)發(fā)布及上鏈的速度,提高了數(shù)據(jù)共享的效率。
f)公有鏈。其用于存儲DO的共享數(shù)據(jù)摘要。公有鏈的去中心化和不可竄改性確保了數(shù)據(jù)摘要的真實性和完整性,為后續(xù)的數(shù)據(jù)驗證提供了可信基礎(chǔ)。
g)外聯(lián)數(shù)據(jù)庫。該數(shù)據(jù)庫將DO在公有鏈中存入的摘要信息以不同的機(jī)制同步到鏈下數(shù)據(jù)庫中,并設(shè)置查詢緩存以提升查詢效率。為了確保外聯(lián)數(shù)據(jù)庫的高效索引和防竄改能力,設(shè)計出新的高效索引結(jié)構(gòu),基于提出的索引結(jié)構(gòu)設(shè)計出鏈上鏈下分層查詢方案,提升整體審計查詢效率。
本方法涉及的交通事故數(shù)據(jù)是指事故車輛收集的物聯(lián)網(wǎng)數(shù)據(jù)以及駕駛員的個人信息,這些數(shù)據(jù)被共享到參與數(shù)據(jù)救援的各個部門。整個共享方法的流程主要分為初始化階段(圖1中步驟①)、數(shù)據(jù)摘要上傳與鏈下同步階段(步驟②)、數(shù)據(jù)加密階段(步驟③)、數(shù)據(jù)共享階段(步驟④)和數(shù)據(jù)審計階段(步驟⑤、⑥),詳細(xì)的流程如圖2所示。其中,雙鏈之間的交互主要通過聯(lián)盟鏈與公有鏈之間的網(wǎng)關(guān)接口實現(xiàn)。具體來說,聯(lián)盟鏈會調(diào)用公有鏈對外暴露的查詢接口,以獲取鏈上存儲的數(shù)據(jù)哈希值以驗證數(shù)據(jù)的完整性。需要強(qiáng)調(diào)的是,公有鏈和聯(lián)盟鏈分別處理不同類型的數(shù)據(jù):公有鏈專注于存儲事故數(shù)據(jù)的摘要信息,確保數(shù)據(jù)的不可竄改性;聯(lián)盟鏈則主要存儲 IPFS 中存儲的加密數(shù)據(jù)的索引,這種交互并不涉及數(shù)據(jù)跨鏈操作。
2.2 問題描述
在高速公路事故救援場景下,本文數(shù)據(jù)共享方法的核心目標(biāo)是實現(xiàn)高效和安全的數(shù)據(jù)交換,以滿足多部門協(xié)作對數(shù)據(jù)獲取及時性和可信性的雙重需求。高效數(shù)據(jù)共享是指在多部門協(xié)作過程中,能夠以較低的延遲和高吞吐量來支持?jǐn)?shù)據(jù)的快速分享與檢索,從而保障事故救援的及時性和有效性。安全數(shù)據(jù)共享是指在數(shù)據(jù)共享過程中,確保數(shù)據(jù)的完整性和可審計性。
3 高速公路事故救援?dāng)?shù)據(jù)共享方法
3.1 方法概述
本方法主要通過基于雙鏈架構(gòu)的高效數(shù)據(jù)共享和基于BBF-Merkle樹的分層審計查詢,實現(xiàn)高速公路救援?dāng)?shù)據(jù)在多部門間的高效共享與安全審計。其中基于雙鏈架構(gòu)的高效數(shù)據(jù)共享主要分為初始化階段、數(shù)據(jù)摘要上傳、數(shù)據(jù)加密階段與共享階段,主要完成數(shù)據(jù)共享工作。基于BBF-Merkle樹的分層審計查詢用于在DO收到數(shù)據(jù)后通過查詢來驗證收到數(shù)據(jù)的完整性,分為鏈下同步階段和數(shù)據(jù)審計階段。
3.2 基于雙鏈架構(gòu)的高效數(shù)據(jù)共享
共享流程主要分為初始化階段、數(shù)據(jù)摘要上傳、鏈下數(shù)據(jù)同步階段以及數(shù)據(jù)加密和共享階段。在經(jīng)過初始化后,DO計算共享數(shù)據(jù)的摘要,將摘要上傳至公有鏈,隨后使用加密算法對共享數(shù)據(jù)進(jìn)行加密后將密文上傳到IPFS,再將密文在IPFS的索引共享到由各部門組成的聯(lián)盟鏈網(wǎng)絡(luò),利用聯(lián)盟鏈的通道機(jī)制與高效性確保數(shù)據(jù)安全和訪問效率。各共享部門在獲取到索引后在IPFS中獲取密文并解密得到共享數(shù)據(jù)。
3.2.1 初始化
初始化階段主要對應(yīng)圖1中的步驟①。初始化階段需要生成CP-ABE的系統(tǒng)參數(shù)、公私鑰對與用戶的屬性密鑰,算法的具體實現(xiàn)在現(xiàn)有方案[22]中有詳細(xì)說明。同時多授權(quán)中心還會隨機(jī)選擇一個隨機(jī)數(shù)γi,用于對用戶的身份進(jìn)行匿名處理與還原。系統(tǒng)中的所有用戶,包括數(shù)據(jù)擁有者和數(shù)據(jù)使用者,想要通過系統(tǒng)進(jìn)行安全的數(shù)據(jù)共享前必須向多授權(quán)中心發(fā)送請求注冊身份。用戶隨機(jī)選擇αi作為真實身份、再隨機(jī)選擇一個隨機(jī)數(shù)βi。將{αi、βi}通過安全通道發(fā)送給多授權(quán)中心。多授權(quán)中心計算用戶的匿名身份PIDi = αiHash(βi ‖γi)并返回給用戶,其中代表異或操作,Hash表示哈希函數(shù),‖代表拼接操作。
3.2.2 數(shù)據(jù)摘要上傳與鏈下數(shù)據(jù)同步
數(shù)據(jù)摘要上傳與鏈下數(shù)據(jù)同步階段對應(yīng)圖1中的步驟②。DO在對數(shù)據(jù)共享之前,計算hash =Hash {共享數(shù)據(jù)、PIDi、βi},通過合約將hash存入公有鏈。在通過公有鏈的共識協(xié)議后,產(chǎn)生新的區(qū)塊。區(qū)塊鏈中每個區(qū)塊的結(jié)構(gòu)由區(qū)塊頭和區(qū)塊體兩部分組成。區(qū)塊頭包含區(qū)塊編號、前一區(qū)塊的哈希值、時間戳等基本信息,用于維護(hù)區(qū)塊鏈的整體結(jié)構(gòu)和安全性;區(qū)塊體包含了具體的交易數(shù)據(jù),主要存入的數(shù)據(jù)可以表示為{PIDi、hash、βi、Timestamp}。其中:PIDi代表用戶的匿名ID;hash代表上傳到鏈上的摘要信息,確保數(shù)據(jù)的完整性與防竄改性;βi 是DO選取的隨機(jī)數(shù),交通管理中心在鏈上發(fā)現(xiàn)數(shù)據(jù)被竄改時可以通過βi 還原DO的真實身份;Timestamp代表交易的具體發(fā)生時間。
本文設(shè)置兩種數(shù)據(jù)同步觸發(fā)機(jī)制將公有鏈鏈上數(shù)據(jù)同步到數(shù)據(jù)庫,分別是基于數(shù)據(jù)條數(shù)的觸發(fā)機(jī)制DVT (data volume trigger)與基于時間的觸發(fā)機(jī)制TIT(time interval trigger)。如果當(dāng)前數(shù)據(jù)條數(shù)達(dá)到DVT閾值,將執(zhí)行數(shù)據(jù)同步操作,將數(shù)據(jù)同步至鏈下數(shù)據(jù)庫。如果未滿足DVT觸發(fā)機(jī)制,則檢查當(dāng)前時間與上次同步時間的間隔是否達(dá)到TIT閾值,若滿足條件,同樣執(zhí)行數(shù)據(jù)同步操作。在短時間內(nèi)有大量事故相關(guān)數(shù)據(jù)摘要上傳到公有鏈時,比如,在交通高峰期或惡劣天氣條件下,DVT機(jī)制確保鏈上數(shù)據(jù)能及時同步到鏈下數(shù)據(jù)庫,避免大量數(shù)據(jù)審計查詢需要在公有鏈層完成,影響查詢效率。當(dāng)系統(tǒng)在某段時間內(nèi)僅有少量數(shù)據(jù)上傳,TIT機(jī)制也能夠確保數(shù)據(jù)在設(shè)定的時間間隔內(nèi)被及時同步到鏈下。
當(dāng)同步機(jī)制被觸發(fā)后,公有鏈中的一批數(shù)據(jù)記錄會被同步到鏈下數(shù)據(jù)庫。同步到鏈下的一批摘要數(shù)據(jù)將根據(jù)BBF-Merkle樹的插入算法組織成一個樹型結(jié)構(gòu),并持久化到數(shù)據(jù)庫中。具體的過程將在3.3節(jié)介紹。
3.2.3 數(shù)據(jù)加密與共享
在多部門之間進(jìn)行數(shù)據(jù)共享時,通過建立“共享通道”實現(xiàn)消息隔離。有共享需求的部門都可以加入一個通道,通道內(nèi)的成員可以自由地共享和訪問數(shù)據(jù),而不同通道之間是彼此隔離的。為了實現(xiàn)精細(xì)的訪問控制,從通道層面開始限制并且考慮到部門ID和用戶ID,設(shè)計了3種訪問策略類型,如表1所示。DO可以根據(jù)共享需求選擇不同的訪問策略對數(shù)據(jù)進(jìn)行加密。例如,某部門下的用戶Peer1所屬部門是Org1,該部門加入了共享通道SharingChannel1,則它的屬性集合可以是{SharingChannel1、Org1、Peer1}。如果DO加密時所使用的策略為SharingChannel1 amp;amp; Org1,那么Peer1就能夠成功獲取密文并解密。注意,一個部門可能加入多個共享通道。
DO使用CP-ABE加密,通過定義的訪問策略(Policy)將{共享數(shù)據(jù)、PIDi、βi}加密為密文后上傳到IPFS,接收CID。接著將CID共享到由各部門維護(hù)的聯(lián)盟鏈網(wǎng)絡(luò)中。在聯(lián)盟鏈通過共識協(xié)議確認(rèn)后生成的區(qū)塊體中,主要存入的數(shù)據(jù)可以表示為{PIDi 、CID、Policy、Timestamp},其中PIDi代表用戶的匿名ID,CID代表密文在IPFS上的索引,Timestamp代表交易的具體發(fā)生時間。各部門可以檢索到所需數(shù)據(jù)的CID,然后通過CID在IPFS獲取到密文數(shù)據(jù),最后使用密鑰對密文進(jìn)行解密,得到共享數(shù)據(jù)。
3.3 基于BBF-Merkle樹的審計查詢
為了確保共享數(shù)據(jù)的完整性,DU需要對接收到的數(shù)據(jù)進(jìn)行審計。在數(shù)據(jù)審計階段,DU計算解密后的共享數(shù)據(jù)摘要(hash′),通過對hash′與鏈上記錄的hash,可以確認(rèn)接收到的數(shù)據(jù)是否與原始數(shù)據(jù)一致。為了提升公有鏈查詢效率,公有鏈上的摘要數(shù)據(jù)被批量同步到外聯(lián)數(shù)據(jù)庫,并設(shè)計了防竄改的BBF-Merkle樹鏈下索引結(jié)構(gòu)以及插入查找算法,在高效檢索數(shù)據(jù)的同時保證數(shù)據(jù)的防竄改特性?;贐BF-Merkle索引結(jié)構(gòu),提出了緩存-數(shù)據(jù)庫-公有鏈的分層查詢方案。
3.3.1 BBF-Merkle樹
結(jié)合布隆過濾器、B+樹、默克爾樹等數(shù)據(jù)結(jié)構(gòu)提出了BBF-Merkle樹索引結(jié)構(gòu),在實現(xiàn)高效查詢的基礎(chǔ)之上保證數(shù)據(jù)的不可竄改特性。BBF-Merkle樹數(shù)據(jù)結(jié)構(gòu)定義如圖3所示。
圖3 BBF-Merkle樹結(jié)構(gòu)Fig.3 Structure of BBF-Merkle tree
根節(jié)點RootNode=key, left, right, hash, valueList, min, max, BF,其中key代表數(shù)據(jù)的關(guān)鍵字,left和right分別代表左右子樹指針,hash代表子節(jié)點的哈希值,valueList代表存儲的數(shù)據(jù)摘要構(gòu)成的鏈表,min和max表示該節(jié)點以及子樹的關(guān)鍵字的最小值和最大值,BF表示布隆過濾器。擴(kuò)展節(jié)點ExtensionNode=key, left, right, hash, valueList, min, max,其含義與根節(jié)點保持一致。葉子節(jié)點LeafNode=key, left, right, valueList, min, max。元節(jié)點MetaNode=RootHash, BF, BlockHeight,其中RootHash代表根節(jié)點的摘要,BF表示布隆過濾器,BlockHeight代表元節(jié)點在公有鏈中的區(qū)塊高度。以此將BBF-Merkle樹和公有鏈建立聯(lián)系,保證索引結(jié)構(gòu)的防竄改性。此時鏈下數(shù)據(jù)的數(shù)據(jù)竄改行為都會通過Merkle樹結(jié)構(gòu)傳遞到元節(jié)點,而存入的區(qū)塊高度可以快速定位鏈上數(shù)據(jù)。
3.3.2 BBF-Merkle樹的插入
對于從公有鏈上同步的每一批摘要數(shù)據(jù)都會建立一棵BBF-Merkle樹。由于鏈上的hash都是毫無規(guī)律的數(shù)據(jù)摘要,并不方便鏈下數(shù)據(jù)索引的構(gòu)建。首先計算key = hash mod k,其中key是上傳的數(shù)據(jù)摘要,k是一個自然數(shù)。得到的key和數(shù)據(jù)摘要構(gòu)成一對key-value數(shù)據(jù)。然后,將同一批哈希數(shù)據(jù)在經(jīng)過取模運算后得到的key-value數(shù)據(jù)構(gòu)造出AVL樹結(jié)構(gòu),保證樹中每個節(jié)點左右兩個子樹的高度差的絕對值不超過 1,需要注意的是取模后的數(shù)據(jù)很有可能會有哈希沖突現(xiàn)象,對于這些沖突的數(shù)據(jù)使用鏈表將其順序連接。最后,從樹的最底部向上逐層構(gòu)建,對左、右葉子節(jié)點取哈希并兩兩合并再求出新的哈希,如果僅有左節(jié)點或者右節(jié)點,則直接對該節(jié)點求哈希然后存入上層拓展節(jié)點。同時在上層拓展節(jié)點維護(hù)著指向葉子節(jié)點的左指針與右指針和key值的范圍。算法會不斷重復(fù)這個過程,直到達(dá)到頂端根節(jié)點,此時根節(jié)點記錄全部數(shù)據(jù)的key值范圍以及此批數(shù)據(jù)的頂層哈希,再將處理后的布隆過濾器值存儲到根節(jié)點的BF字段中,以便在后續(xù)查詢中使用布隆過濾器進(jìn)行快速過濾。最終,BBF-Merkle樹被建立起來,過程如算法1所示。
算法1 BBF-Merkle樹建立算法
輸入:同步到鏈下的一批數(shù)據(jù) dataBatch;模值 k。
輸出:BBF-Merkle樹的根節(jié)點 Root。
nodes =[] /*初始化節(jié)點集合,用于存儲每個數(shù)據(jù)摘要的節(jié)點信息 */
for hash in dataBatch do // 遍歷每一條同步到鏈下的數(shù)據(jù)
node.key = hash mod k // 計算哈希值mod k,得到節(jié)點的key值
node.valueList = new List(hash) / *創(chuàng)建一個鏈表存儲每個數(shù)據(jù)摘要,初始時鏈表中只有當(dāng)前數(shù)據(jù)的hash */
end for //完成所有數(shù)據(jù)摘要的處理
nodes.sortByKey() //按照key值對節(jié)點進(jìn)行排序
while (節(jié)點之間存在key沖突)
將key值相同的節(jié)點存儲的hash值合并到一個節(jié)點的va-lueList鏈表
end while
root = BuildTreeHelper(nodes) // 遞歸調(diào)用輔助函數(shù)構(gòu)建樹
root.bf = BuildBloomFilter(nodes) /*計算布隆過濾器并存儲在bf字段中*/
return root // 返回構(gòu)建好的BBF-Merkle樹的根節(jié)點
//構(gòu)建樹的輔助函數(shù),BuildTreeHelper()
BuildTreeHelper(nodes)
if nodes is empty then /* 當(dāng)前節(jié)點集合為空,已經(jīng)沒有節(jié)點可以處理 */
return 1
end if
mid = len(nodes) / 2/* 計算中間節(jié)點的索引,決定當(dāng)前樹的根節(jié)點 */
node = new Node(nodes[mid].key, nodes[mid].hash) // 創(chuàng)建根節(jié)點
node.left = BuildTreeHelper(nodes[0:mid-1]) /*遞歸構(gòu)建左子樹 */
node.right = BuildTreeHelper(nodes[mid+1:len(nodes)-1])
更新node的min、max,并進(jìn)行平衡操作
node.hash = Hash (leftHash + rightHash) /*計算子節(jié)點的哈希值 */
return node
建立好一批數(shù)據(jù)的BBF-Merkle樹后,得到根節(jié)點的哈希RootHash,將RootHash和BF存入公有鏈,確保后續(xù)可以根據(jù)鏈上記錄的根節(jié)點哈希結(jié)合BBF-Merkle樹,實現(xiàn)對鏈下數(shù)據(jù)的竄改檢測,此時公有鏈上產(chǎn)生交易主要存入的數(shù)據(jù)包含{RootHash、BF、Timestamp}。隨后,將區(qū)塊高度、RootHash和BF一起寫入到元節(jié)點,每一批數(shù)據(jù)都會產(chǎn)生一個元節(jié)點,它和根節(jié)點一一對應(yīng)并且彼此獨立。
3.3.3 分層查詢
DO通過IPFS獲取到密文并解密,得到{共享數(shù)據(jù)、PIDi、βi},計算hash′=Hash{共享數(shù)據(jù)、PIDi、βi}并發(fā)出審計請求,驗證收到數(shù)據(jù)的完整性,整個流程如圖4所示。請求會逐層在緩存層、數(shù)據(jù)庫層和公有鏈層進(jìn)行查詢操作,直到查詢到該hash′或者返回未查詢到的響應(yīng)。如果查詢到hash′說明共享數(shù)據(jù)在整個共享過程中沒有被竄改,否則說明共享數(shù)據(jù)在共享過程中被竄改。下面將詳細(xì)說明查詢流程。
查詢請求依次經(jīng)過緩存層、數(shù)據(jù)庫層,最后抵達(dá)公有鏈層。一旦查中數(shù)據(jù),在滿足信任的情況下就會直接將查詢數(shù)據(jù)返回,不會一直將請求傳遞到公有鏈,并且每一層都擁有不同的信任滿足條件。緩存層的數(shù)據(jù)由滿足信任狀態(tài)下的數(shù)據(jù)庫和公有鏈寫入,因此緩存層默認(rèn)為可信。公有鏈由于其擁有出色的去中心化與防竄改特性,其查詢結(jié)果也直接被視為可信??梢姴樵兞鞒痰年P(guān)鍵在于數(shù)據(jù)在數(shù)據(jù)庫層的查詢設(shè)計。
在數(shù)據(jù)庫層,依據(jù)BBF-Merkle樹索引結(jié)構(gòu)進(jìn)行查詢。具體來說,先計算key′=hash′" mod k。在進(jìn)行索引查詢前,先通過每一批數(shù)據(jù)構(gòu)建的BBF-Merkle樹的元節(jié)點中的BF排除掉不可能存在分支,這種“剪枝”可以進(jìn)一步提升檢索效率。接著在一些可能存在的分支中根據(jù)key′按照BBF-Merkle索引結(jié)構(gòu)進(jìn)行查詢,BBF-Merkle檢索算法如算法2所示。算法從BBF-Merkle樹的Root節(jié)點開始檢索,key′等于Root的key直接遍歷該節(jié)點的ValueList,查詢hash′是否存在。如果key′不等于Root的key,則判斷key′是否在Root記錄的上下限范圍之內(nèi),如果key′不在記錄的上下限范圍之內(nèi),則直接排除該Root所在的分支,否則根據(jù)key′與Root節(jié)點key的大小關(guān)系決定取遞歸查找Root.left還是Root.right。在拓展節(jié)點中的查詢同樣遵循上述規(guī)則,通過key確認(rèn)是否查詢該節(jié)點的ValueList,再根據(jù)key′與節(jié)點key的大小關(guān)系決定遞歸查找左子樹還是右子樹,直到查詢到葉子節(jié)點。如果通過索引查詢數(shù)據(jù)庫的結(jié)果為空,則繼續(xù)向公有鏈層查找。
如果在BBF-Merkle中查詢到與hash′對應(yīng)的數(shù)據(jù)(執(zhí)行算法2得到的是true),再根據(jù)元節(jié)點信息記錄的區(qū)塊高度去指定區(qū)塊檢索鏈上數(shù)據(jù),對比元節(jié)點中存入的根哈希以及BF是否和鏈上數(shù)據(jù)保持一致:a)如果保持一致則說明數(shù)據(jù)庫中的數(shù)據(jù)沒有遭到竄改,鏈下數(shù)據(jù)庫數(shù)據(jù)達(dá)到信任條件,并且將BBF-Merkle的驗證路徑和查詢結(jié)果一同返回給用戶,用戶收到的響應(yīng)數(shù)據(jù)同時包含查詢結(jié)果與對應(yīng)的驗證路徑。由于BBF-Merkle包含Merkle結(jié)構(gòu),可以確保數(shù)據(jù)的完整性和不可竄改性,驗證路徑則提供了從鏈下數(shù)據(jù)庫到鏈上數(shù)據(jù)的一條可靠的Merkle Proof驗證路徑,用戶可以通過路徑自行計算并驗證摘要是否和鏈上保持一致。同時還會將查詢到的key-value數(shù)據(jù)寫入緩存層,并設(shè)置緩存的過期時間。b)如果元數(shù)據(jù)和鏈上數(shù)據(jù)不一致則認(rèn)為數(shù)據(jù)庫的查詢結(jié)果不具備信任條件,同樣會繼續(xù)在公有鏈中進(jìn)行查詢。
算法2 BBF-Merkle樹檢索算法
輸入:根節(jié)點Root、數(shù)據(jù)摘要hash′、需要查詢的鍵key′。
輸出:result(檢索的結(jié)果)、proofPath(Merkle Proof驗證路徑)。
currentNode = Root // 從BBF-Merkle樹的根節(jié)點開始檢索
proofPath =[] //初始化Merkle proof路徑
while(currentNode != 1)
if(key′不在currentNode.bf的范圍內(nèi) ‖ key′currentNode.min ‖ key′ currentNode.max))
return False, proofPath // 未查中數(shù)據(jù),返回查詢結(jié)果
end if
if(currentNode.key == key′ amp;amp; 在ValueList中檢索到hash′)
return true, proofPath // 查中數(shù)據(jù),返回查詢結(jié)果
end if
//根據(jù)key′與currentNode.key的大小關(guān)系決定查找方向
if(key′ lt; currentNode.key) /* 如果key′小于當(dāng)前節(jié)點的key值,則繼續(xù)查找左子樹 */
currentNode = currentNode.left
else /* 如果key′大于等于當(dāng)前節(jié)點的key值,則繼續(xù)查找右子樹*/
currentNode = currentNode.right
end if
end while
return 1, proofPath
最終需要在公有鏈中的查詢分為兩種情況:一種是在數(shù)據(jù)庫中的查詢沒有達(dá)到信任條件需要進(jìn)一步確認(rèn),另一種是在數(shù)據(jù)庫中的查詢結(jié)果為空。如果沒有達(dá)到數(shù)據(jù)庫信任條件并且在公有鏈中檢索到了hash′,還需要根據(jù)批次信息將該批數(shù)據(jù)重新構(gòu)造BBF-Merkle樹,重新構(gòu)造的過程可以根據(jù)Merkle樹的特性快速定位到被竄改的節(jié)點,修改數(shù)據(jù)庫中節(jié)點信息,進(jìn)而快速構(gòu)造BBF-Merkle樹以恢復(fù)數(shù)據(jù)庫的信任。如果是由于鏈上數(shù)據(jù)還未觸發(fā)同步機(jī)制導(dǎo)致的數(shù)據(jù)庫查詢結(jié)果為空,則直接將公有鏈的查詢結(jié)果返回給用戶并且在緩存層中寫入key-value數(shù)據(jù),將緩存過期時間設(shè)置為TIT的觸發(fā)時間。需要注意的是,最終在公有鏈中仍然沒有查詢到hash′,說明DO收到的共享數(shù)據(jù)在共享流程中被竄改,此時該部門成員需要進(jìn)一步向數(shù)據(jù)擁有者確認(rèn)數(shù)據(jù),這并不在本文共享方法的職責(zé)范圍內(nèi)。
4 實驗驗證與性能分析
本章對所提方法進(jìn)行仿真實驗,實驗所使用的本地機(jī)器為一臺Windows 11 家庭中文版64位電腦,其CPU為12th Gen Intel CoreTM i7-12700H,2.30 GHz,RAM為16 GB。Hyperledger Fabric 2.5聯(lián)盟鏈實驗環(huán)境,安裝在兩臺配置為4 GB RAM、2核處理器的Ubuntu 20.04操作系統(tǒng)的虛擬機(jī)上。在兩臺虛擬機(jī)上創(chuàng)建了包含三個排序節(jié)點、兩個組織,每組織包含兩個peer節(jié)點的多機(jī)網(wǎng)絡(luò),F(xiàn)abric網(wǎng)絡(luò)拓?fù)淙鐖D5所示。實驗使用Fabric Gateway client API連接Fabric網(wǎng)絡(luò),Go語言編寫聯(lián)盟鏈智能合約。以太坊Sepolia測試網(wǎng)絡(luò)作為公有鏈。實驗通過REMIX IDE進(jìn)行智能合約的開發(fā)與部署,MetaMask錢包工具連接到更加接近真實的區(qū)塊鏈運行環(huán)境:Sepolia測試網(wǎng)絡(luò)。實驗采用應(yīng)用二進(jìn)制接口(application binary interface,ABI)生成Go語言代碼,使后端能夠與以太坊智能合約進(jìn)行交互。鏈下存儲環(huán)境為 IPFS 0.4.19。使用Go語言實現(xiàn)了CP-ABE,該方案是基于現(xiàn)有工作[22]。使用Go語言實現(xiàn)了BBF-Merkle樹索引結(jié)構(gòu),并通過MongoDB數(shù)據(jù)庫對節(jié)點數(shù)據(jù)進(jìn)行持久化,采用的緩存層技術(shù)為Redis。實驗數(shù)據(jù)源于真實數(shù)據(jù)集Brazilian traffic incidents-2007 to 2023[23],隨機(jī)選取了1 000條數(shù)據(jù)用于數(shù)據(jù)共享。
4.1 安全性分析
方案通過雙區(qū)塊鏈結(jié)構(gòu)、IPFS存儲以及BBF-Merkle樹的防竄改索引設(shè)計,確保數(shù)據(jù)在共享過程中的完整性和可審計性。
1)完整性 針對事故救援?dāng)?shù)據(jù)的完整性,本文從鏈上和鏈下存儲兩個方面進(jìn)行分析。首先,公有鏈中的每個區(qū)塊通過其哈希值與前一區(qū)塊相連接,這意味著任何對事故救援?dāng)?shù)據(jù)的修改都會導(dǎo)致區(qū)塊哈希值發(fā)生變化,從而被全網(wǎng)節(jié)點或共識節(jié)點識別并拒絕。各救援部門維護(hù)的聯(lián)盟鏈節(jié)點是可信任的,即便某些節(jié)點遭到惡意控制,也可以通過公有鏈上的哈希值驗證共享數(shù)據(jù)的完整性。鏈下存儲方面,IPFS 保存的是加密后的用戶數(shù)據(jù),依托于 IPFS 的去中心化存儲和內(nèi)容尋址機(jī)制,能夠有效防止第三方對數(shù)據(jù)的竄改。在外聯(lián)數(shù)據(jù)庫中,本方案設(shè)計BBF-Merkle樹索引結(jié)構(gòu)利用了Merkle樹的優(yōu)勢,可以通過樹的哈希值快速檢測到任何數(shù)據(jù)竄改行為。在數(shù)據(jù)同步至以太坊區(qū)塊鏈時,每次生成的BBF-Merkle樹的根節(jié)點哈希值會存儲在以太坊上。當(dāng)數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生任何竄改,Merkle樹的哈希值會傳遞到根節(jié)點。由于以太坊上記錄的根哈希值與當(dāng)前數(shù)據(jù)庫計算的哈希值不一致,系統(tǒng)能夠立即檢測到這種竄改行為,從而保證鏈下數(shù)據(jù)的安全性。
2)可審計性 公有鏈的防竄改特性為數(shù)據(jù)審計提供了強(qiáng)有力的基礎(chǔ)保障。所有的事故救援?dāng)?shù)據(jù)摘要都會以哈希值的形式記錄在公有鏈上,當(dāng)參與救援的部門收到共享數(shù)據(jù)后可以通過緩存-外聯(lián)數(shù)據(jù)庫-公有鏈的分層審計查詢進(jìn)行公開審計,驗證收到數(shù)據(jù)的真實性。利用Merkle樹的哈希驗證機(jī)制確保鏈下數(shù)據(jù)的防竄改性。如果查詢到的數(shù)據(jù)和鏈上數(shù)據(jù)(公有鏈中存儲的BBF-Merkle樹根哈希值)保持一致,說明數(shù)據(jù)庫數(shù)據(jù)未遭竄改,并將驗證路徑(Merkle Proof)一并返回給用戶,用戶可以通過驗證路徑審計數(shù)據(jù)的完整性。
4.2 基于雙鏈架構(gòu)的數(shù)據(jù)共享性能分析
雙區(qū)塊鏈架構(gòu)在數(shù)據(jù)共享和審計中展現(xiàn)出優(yōu)勢。首先,雙鏈架構(gòu)通過任務(wù)分工明確的設(shè)計,有效降低了單一鏈上執(zhí)行所有任務(wù)的壓力。具體而言,聯(lián)盟鏈負(fù)責(zé)高頻次的數(shù)據(jù)共享任務(wù),其高吞吐量和低延遲特性能夠滿足數(shù)據(jù)頻繁交互的需求;公有鏈則專注于審計和防竄改記錄,憑借其去中心化和高安全性保障數(shù)據(jù)的透明性和不可竄改性。通過這種分工,雙鏈架構(gòu)避免了單條鏈需要處理過多無關(guān)交易的問題,大幅提升了整體性能與效率。其次,雙鏈架構(gòu)在隱私保護(hù)與數(shù)據(jù)安全之間達(dá)到了良好的平衡。聯(lián)盟鏈通過權(quán)限控制和訪問管理,確保了數(shù)據(jù)在參與方之間的共享安全性,保護(hù)了敏感信息不被外部窺探。而公有鏈則作為審計記錄的存儲平臺,保障數(shù)據(jù)的完整性和公開審計的可信度。雙鏈架構(gòu)不僅能夠?qū)崿F(xiàn)高效的數(shù)據(jù)共享,還能提供強(qiáng)有力的審計支撐。
4.3 BBF-Merkle樹查詢性能測試
本節(jié)實驗中,為了測試BBF-Merkle樹的查詢性能,用戶分別執(zhí)行50條、100條、200條、500條、1 000條和2 000條連續(xù)的查詢。其目的是模擬參與救援的相關(guān)部門在救援過程中或在事故后執(zhí)行的數(shù)據(jù)驗證和審計操作在外聯(lián)數(shù)據(jù)庫層所消耗的時間,如救援過程中,交警、醫(yī)療救援團(tuán)隊等部門需要快速獲取和驗證事故現(xiàn)場的關(guān)鍵信息或者保險公司需要對事故信息進(jìn)行驗證。查詢未做任何查詢優(yōu)化,均為單線程查詢。實驗與文獻(xiàn)[16~18]進(jìn)行對比,其中文獻(xiàn)[16]在查詢上所做的優(yōu)化操作是將數(shù)據(jù)同步到外聯(lián)數(shù)據(jù)庫,文獻(xiàn)[17]將同步到鏈下的數(shù)據(jù)按照時間戳進(jìn)行排序使得每次計算摘要一致,通過全部的數(shù)據(jù)摘要來判斷數(shù)據(jù)是否被竄改。文獻(xiàn)[18]對外聯(lián)數(shù)據(jù)庫中的數(shù)據(jù)使用MPT樹進(jìn)行存儲。實驗結(jié)果如圖6所示,本文方案模擬用戶進(jìn)行審計查詢的效率優(yōu)于上述方案,這主要是因為對數(shù)據(jù)使用分批處理,降低了索引樹的高度進(jìn)而降低查詢時間開銷,并且通過布隆過濾器對數(shù)據(jù)查詢進(jìn)行剪枝操作。文獻(xiàn)[17]在查詢時需要對數(shù)據(jù)進(jìn)行排序并計算數(shù)據(jù)摘要,而本文方案雖然也需要計算摘要,但是不需要對數(shù)據(jù)進(jìn)行排序。文獻(xiàn)[18]通過MPT存儲數(shù)據(jù),借鑒了以太坊數(shù)據(jù)存儲的思想。然而,存儲的數(shù)據(jù)是摘要或哈希值,它們往往是隨機(jī)分布的,缺乏公共前綴,這會導(dǎo)致MPT的樹結(jié)構(gòu)退化為接近線性的鏈表,進(jìn)而導(dǎo)致查詢性能下降。
此外,還將BBF-Merkle樹的查詢性能和文獻(xiàn)[24]進(jìn)行對比,在以太坊Sepolia測試網(wǎng)絡(luò)環(huán)境下對文獻(xiàn)[24]的共享流程進(jìn)行復(fù)現(xiàn),其查詢數(shù)據(jù)直接在以太坊中進(jìn)行。結(jié)果如圖7所示,在外聯(lián)數(shù)據(jù)庫中的查詢所消耗的時間遠(yuǎn)低于文獻(xiàn)[24]直接在以太坊中查詢所消耗的時間。根據(jù)圖7(a)中的數(shù)據(jù)可以看到,在查詢存在的數(shù)據(jù)時,BBF-Merkle樹的查詢時間顯著低于直接在以太坊Sepolia測試網(wǎng)絡(luò)上的查詢時間,尤其是在數(shù)據(jù)量增加的情況下。這種優(yōu)勢在查詢不存在數(shù)據(jù)時更加明顯,如圖7(b)所示,當(dāng)查詢2 000次不存在的數(shù)據(jù)時,以太坊的查詢時間高達(dá)1 994.3 s,而BBF-Merkle樹僅需要1.721 s。
4.4 基于BBF-Merkle的分層查詢性能測試
本節(jié)實驗對所提出Efficient-DSS的分層查詢的整體耗時進(jìn)行實驗,不僅包含外聯(lián)數(shù)據(jù)庫的查詢消耗,還考慮到數(shù)據(jù)暫未同步到鏈下數(shù)據(jù)庫或者是由于數(shù)據(jù)庫層數(shù)據(jù)被竄改需要查詢以太坊的時間消耗(文獻(xiàn)[24]除外,其是使用原生以太坊查詢的查詢耗時)。實驗測量當(dāng)用戶在進(jìn)行審計查詢時,本文方案以及文獻(xiàn)[17,24]的時間開銷,分別執(zhí)行50條、100條、200條、500條和1 000條連續(xù)的查詢進(jìn)行性能測試。實驗結(jié)果如圖8所示,查詢耗時隨著次數(shù)增加。本文的分層查詢耗時最少, 1 000次查詢的耗時為50.32 s,而以太坊測試網(wǎng)絡(luò)中的查詢耗時達(dá)到437.1 s,文獻(xiàn)[17]的查詢耗時為57.12 s。需要到以太坊中查詢的概率是最低的,一方面以太坊摘要數(shù)據(jù)被不斷同步到鏈下數(shù)據(jù)庫中,另一方面大量的查詢都會在緩存和數(shù)據(jù)庫中命中,即使數(shù)據(jù)庫數(shù)據(jù)被竄改,也可以通過以太坊中存入的BBF-Merkle樹元節(jié)點數(shù)據(jù)檢測到。然后通過Merkle Proof路徑恢復(fù)數(shù)據(jù)庫的信任條件(還原被竄改的數(shù)據(jù))。在實際的事故數(shù)據(jù)共享中,查詢的大多是熱點數(shù)據(jù),無論是在哪一層的查詢命中,這些熱點數(shù)據(jù)會通過緩存存入Redis中,大大降低了后續(xù)查詢需要查詢以太坊的概率。
5 結(jié)束語
本文提出了一種基于雙鏈架構(gòu)與BBF-Merkle樹的高效事故救援?dāng)?shù)據(jù)共享方案(Efficient-DSS),旨在解決高速公路事故救援?dāng)?shù)據(jù)共享中效率和數(shù)據(jù)安全難以平衡的問題;提出的雙鏈架構(gòu)利用聯(lián)盟鏈實現(xiàn)數(shù)據(jù)高效共享,利用公有鏈保證共享數(shù)據(jù)的安全,雙鏈之間并發(fā)處理彼此無關(guān)的交易,提高共享效率。為了提升公有鏈審計查詢效率,設(shè)計了BBF-Merkle樹的鏈下索引結(jié)構(gòu)與分層查詢方案,顯著提升了公有鏈的查詢效率,實現(xiàn)了鏈下數(shù)據(jù)庫的防竄改性與查詢結(jié)果的可驗證性。實驗結(jié)果表明,Efficient-DSS表現(xiàn)出優(yōu)越性能,特別是在執(zhí)行大規(guī)模查詢時,查詢時間顯著優(yōu)于現(xiàn)有方案。該方案在事故救援場景中有效提升了救援響應(yīng)速度,提高了多部門協(xié)作的效率,為實際應(yīng)用提供了堅實的技術(shù)支持。目前,本文對于區(qū)塊鏈效率的提升主要集中在layer 2層,未來準(zhǔn)備在layer 1層或者通過跨鏈技術(shù)進(jìn)一步優(yōu)化效率,推動更為高效、安全的區(qū)塊鏈應(yīng)用。
參考文獻(xiàn):
[1]Yang Jiachen, Wen Jiabao, Jiang Bin,et al. Blockchain-based sharing and tamper-proof framework of big data networking [J]. IEEE Network, 2020, 34(4): 62-67.
[2]Guo Shaoyong, Hu Xing, Guo Song, et al. Blockchain meets edge computing: a distributed and trusted authentication system [J]. IEEE Trans on Industrial Informatics, 2019, 16(3): 1972-1983.
[3]Chen C L, Yang Jiaxin, Tsaur W J, et al. Enterprise data sharing with privacy-preserved based on HyperLedger fabric blockchain in IIOT’s application [J]. Sensors, 2022, 22(3): 1146.
[4]劉揚, 胡學(xué)先, 周剛, 等. 基于多層次區(qū)塊鏈的醫(yī)療數(shù)據(jù)共享模型 [J]. 計算機(jī)應(yīng)用研究, 2022, 39(5): 1307-1312, 1318. (Liu Yang, Hu Xuexian, Zhou Gang, et al. Multi-level blockchain-based model for medical data sharing [J]. Application Research of Computers, 2022, 39(5): 1307-1312, 1318.)
[5]Li Kunchang, Yang Yifan, Wang Shuhao,et al. A lightweight privacy preserving and sharing scheme with dual-blockchain for intelligent pricing system of smart grid [J]. Computers amp; Security, 2021, 103: 102189.
[6]Zhang Yuqing, Ma Zhaofeng, Luo Shoushan,et al. DBSDS: a dual-blockchain security data sharing model with supervision and privacy-protection [J]. Concurrency and Computation: Practice and Experience, 2023, 35(21): e7706.
[7]Liu Linchen, Liu Ruyan,Lyu Zhiying, et al. Dual blockchain-based data sharing mechanism with privacy protection for medical Internet of Things [J]. Heliyon, 2024, 10(1): e23575.
[8]LevelDB [EB/OL]. http://LevelDB. Org.
[9]Przytarski D, Stach C, Gritti C,et al. Query processing in blockchain systems: current state and future challenges [J]. Future Internet, 2022, 14(1): 1.
[10]Mardiansyah V, Muis A, Sari R F. Multi-state Merkle Patricia Trie (MSMPT): high-performance data structures for multi-query proces-sing based on lightweight blockchain [J]. IEEE Access, 2023, 11: 117282-117296.
[11]Huang T L, Huang J. An efficient data structure for distributed ledger in blockchain systems[C]//Proc of International Computer Sympo-sium. Piscataway,NJ: IEEE Press, 2020: 175-178.
[12]Choi J A, Beillahi S M, Singh S F,et al. LMPT: a novel authenticated data structure to eliminate storage bottlenecks for high performance blockchains [J]. IEEE Trans on Network and Service Management, 2024, 21(2): 1333-1343.
[13]Li Yang, Zheng Kai, Yan Ying,et al. EtherQL: a query layer for blockchain system[C]// Proc of the 22nd International Conference on Database Systems for Advanced Applications. Cham: Springer, 2017: 556-567.
[14]Pratama F A, Mutijarsa K. Query support for data processing and analysis on Ethereum blockchain[C]// Proc of International Sympo-sium on Electronics and Smart Devices. Piscataway, NJ: IEEE Press, 2018: 1-5.
[15]Wang Sheng, Dinh T T A, Lin Qian, et al. ForkBase: an efficient storage engine for blockchain and forkable applications [J]. Proc VLDB Endow, 2018, 11: 1137-1150.
[16]Zhang Zhaoyi, Zhong Yanru,Yu Xiaofan. Blockchain storage middleware based on external database[C]//Proc of the 6th International Conference on Intelligent Computing and Signal Processing. Piscata-way, NJ: IEEE Press, 2021: 1301-1304.
[17]隋源, 汪衛(wèi), 鄧雪. 一種面向區(qū)塊鏈的鏈下數(shù)據(jù)庫高吞吐量可驗證查詢方法 [J]. 小型微型計算機(jī)系統(tǒng), 2021, 42(6): 1304-1312. (Sui Yuan, Wang Wei, Deng Xue. High throughput verifiable query method for blockchain-oriented off-chain database [J]. Journal of Chinese Computer Systems, 2021, 42(6): 1304-1312.)
[18]孫一萌, 范洪博, 彭慢煜, 等. 一種面向聯(lián)盟鏈的鏈下數(shù)據(jù)可驗證查詢方法 [J]. 現(xiàn)代電子技術(shù), 2023, 46(19): 70-74. (Sun Yimeng, Fan Hongbo, Peng Manyu, et al. A method of off-chain data verifiable query for consortium blockchain [J]. Modern Electro-nics Technique, 2023, 46(19): 70-74.)
[19]Gad A G, Mosa D T, Abualigah L,et al. Emerging trends in blockchain technology and applications: a review and outlook [J]. Journal of King Saud University-Computer and Information Sciences, 2022, 34(9): 6719-6742.
[20]Krichen M, Ammi M, Mihoub A,et al. Blockchain for modern applications: a survey [J]. Sensors, 2022, 22(14): 5274.
[21]De Ocáriz Borde H S. An overview of trees in blockchain technology: Merkle trees and Merkle Patricia Tries [M]. Cambridge, UK :University of Cambridge, 2022.
[22]Lewko A, Waters B. Decentralizing attribute-based encryption[C]// Proc of Annual International Conference on Theory and Applications of Cryptographic Techniques. Berlin: Springer, 2011: 568-588.
[23]https://www. kaggle. com/datasets/pedrogoncalv/brazilian-traffic-incidents-2007-to-2023[EB/OL].
[24]Ullah Z, Raza B, Shah H,et al. Towards blockchain-based secure storage and trusted data sharing scheme for IoT environment [J]. IEEE Access, 2022, 10: 36978-36994.