李 皓,樂 鵬,姜良存,張明達,梁哲恒
1. 武漢大學(xué)遙感信息工程學(xué)院,湖北 武漢 430079; 2. 湖北大學(xué)資源環(huán)境學(xué)院, 湖北 武漢 430062; 3. 廣東南方數(shù)碼科技股份有限公司,廣東 廣州 510665
在空間基礎(chǔ)設(shè)施背景下,地理數(shù)據(jù)的生產(chǎn)、應(yīng)用過程逐漸由傳統(tǒng)集中式向分布式協(xié)作方向發(fā)展。在集中式的平臺環(huán)境下,數(shù)據(jù)產(chǎn)品嚴格按照算法處理和工作流等流程生成,具有較高的可信性[1]。而分布式環(huán)境下,數(shù)據(jù)來源多樣、質(zhì)量各異,未經(jīng)質(zhì)檢的數(shù)據(jù)被廣泛而頻繁地處理、應(yīng)用和共享,數(shù)據(jù)產(chǎn)品的質(zhì)量具有很大不確定性。地理數(shù)據(jù)產(chǎn)品可能來源于專業(yè)測繪數(shù)據(jù)、眾源地理數(shù)據(jù)或自發(fā)地理信息(VGI)等[2-3],難以評估數(shù)據(jù)是否可用可靠,因此通過溯源信息對地理數(shù)據(jù)產(chǎn)品進行可信評價尤為重要[4-7]。溯源信息記錄了地理數(shù)據(jù)的來源、變動和數(shù)據(jù)提供者等信息,為數(shù)據(jù)產(chǎn)品評價提供參考依據(jù)。對于地理數(shù)據(jù)溯源的研究,國內(nèi)外學(xué)者已開展了較多關(guān)于溯源模型、追蹤方法、溯源信息組織等方面的研究[1,4-6,8-12],但尚缺乏對溯源信息本身的可靠和可信性研究。在分布式協(xié)作環(huán)境下,對于地理數(shù)據(jù)產(chǎn)品的溯源信息同樣存在著可靠性保證問題,在數(shù)據(jù)產(chǎn)品的共享、分發(fā)和交換中存在元數(shù)據(jù)的篡改風(fēng)險。究其原因,在于地理數(shù)據(jù)共享時缺乏可信的溯源技術(shù)支持。特別在數(shù)據(jù)產(chǎn)品資產(chǎn)化的趨勢下[13],對數(shù)據(jù)權(quán)利人、時間戳等元數(shù)據(jù)進行偽造篡改等行為嚴重影響了數(shù)據(jù)評價。因此,可信的溯源信息存儲管理是地理數(shù)據(jù)溯源重要的基礎(chǔ)和保障[14]。
近年來,區(qū)塊鏈技術(shù)快速發(fā)展,其所具有的去中心化、不可篡改、可信透明的特點為溯源信息可靠可信的存儲管理提供了新的解決思路。區(qū)塊鏈?zhǔn)且环N多方共同參與和維護的去中心化數(shù)據(jù)庫,也是一種融合了加密算法、共識機制、智能合約等模塊的新型分布式賬本技術(shù)[15-16]。目前已有部分學(xué)者將區(qū)塊鏈技術(shù)應(yīng)用于數(shù)據(jù)溯源領(lǐng)域[17-22]。文獻[17]利用智能合約和OPM模型(open provenance model)進行了安全捕獲溯源信息和溯源驗證的試驗。文獻[19]基于區(qū)塊鏈構(gòu)建了一個分布式系統(tǒng)用于管理溯源元數(shù)據(jù)以及設(shè)置數(shù)據(jù)訪問權(quán)限。文獻[20]提出了一種云環(huán)境下基于區(qū)塊鏈的數(shù)據(jù)溯源架構(gòu),用區(qū)塊鏈存儲溯源信息來提供云文件的防篡改安全特性。
上述對區(qū)塊鏈溯源的研究均是面向通用的溯源場景。借鑒相似的思路,區(qū)塊鏈同樣能夠在地理數(shù)據(jù)的可信溯源方面產(chǎn)生重要價值,為地理信息數(shù)據(jù)的分發(fā)、共享和追溯提供可信技術(shù)支持。然而,在地理信息科學(xué)領(lǐng)域,特別是VGI場景下,地理數(shù)據(jù)的生產(chǎn)和更新速度快,產(chǎn)生的溯源信息量大,且溯源信息的記錄往往發(fā)生在不同粒度層級上[10]。因此,本文以矢量數(shù)據(jù)為研究對象,提出一種利用MPT樹對矢量溯源信息進行鏈上存儲組織的方法,并設(shè)計了基于該存儲結(jié)構(gòu)的溯源可信驗證算法,實現(xiàn)了對矢量溯源信息高效的溯源驗證。
矢量數(shù)據(jù)溯源記錄了矢量數(shù)據(jù)生產(chǎn)、變更所涉及的數(shù)據(jù)實體、活動、個人或組織等相關(guān)信息[1]?,F(xiàn)有的研究已從矢量數(shù)據(jù)處理類型和溯源性能等方面,對矢量數(shù)據(jù)溯源提出了不同粒度劃分的需求[1,4,7,10,23]。例如文獻[10]分析了從數(shù)據(jù)集、要素、屬性3個粒度級別進行矢量數(shù)據(jù)溯源的必要性。具體而言,矢量數(shù)據(jù)集級別溯源描述了受到相同影響的多個要素的溯源信息。要素溯源用于描述特定要素的變更信息。而屬性溯源可分為幾何屬性和非幾何屬性的溯源,分別用于描述要素的幾何屬性和非幾何屬性上的變化??傮w而言,矢量溯源記錄在粗粒度上記錄細粒度級別的共有信息,而在細粒度級別記錄更詳細的溯源信息,從而減少溯源信息的冗余和重復(fù)性。
溯源模型是溯源信息共享和互操作的基礎(chǔ)。PROV是W3C數(shù)據(jù)溯源工作組在2013年推出一種通用的數(shù)據(jù)溯源模型[24],其核心結(jié)構(gòu)包含3種類型,分別為實體(entity)、活動(activity)以及代理(agent),通過3種核心類型之間的關(guān)系來描述溯源信息。實體可以是任何形式存在的事物,包括客觀世界的地理實體和數(shù)字世界的地理數(shù)據(jù)(如所有粒度級別的數(shù)據(jù)源或輸出結(jié)果)。活動是作用于實體的行為,例如軌跡數(shù)據(jù)的繪制操作,活動內(nèi)容包括了活動類型、活動時間等。代理是對實體、行為負責(zé)的對象,可以是人或組織,代理內(nèi)容包括代理的名稱及社會屬性信息等。文獻[10]分析了PROV模型適合作為一種地理空間數(shù)據(jù)的溯源模型,并擴展了矢量數(shù)據(jù)集(dataset)、要素(feature)、屬性(attribute)3種類型實體。屬性被作為一種實體類型,可分為幾何屬性(geometry feature)和非幾何屬性(property)。擴展的PROV溯源模型如圖1所示。在本文后續(xù)的工作中將基于該擴展的PROV溯源模型對矢量溯源信息進行記錄。
本文通過一項矢量數(shù)據(jù)合并的案例來展示不同粒度的矢量溯源信息的記錄細節(jié)及特征。該案例的數(shù)據(jù)來源包括一份專業(yè)測繪機構(gòu)繪制的數(shù)據(jù)(圖2(a))作為參考數(shù)據(jù)源,以及一份從Open StreetMap(OSM)下載的不同時相的相同區(qū)域的數(shù)據(jù) (圖2(b)) 作為待匹配數(shù)據(jù)源。通過特定的匹配算法合并最終生成一個數(shù)據(jù)結(jié)果(圖2(c))。擴展的PROV溯源模型對合并處理過程中的3種粒度的溯源信息進行記錄。溯源信息的捕獲參考了文獻[23]中提出的一種捕獲流程。該流程在矢量數(shù)據(jù)操作流程中擴展了數(shù)據(jù)集和要素的溯源捕獲模塊。數(shù)據(jù)合并完成后,用戶若想了解合并結(jié)果來自哪些數(shù)據(jù)源,甚至某一矢量要素或其屬性信息來自哪個數(shù)據(jù)源,需要在合并時捕獲不同級別上的來源信息。在粗粒度級別,捕獲模塊記錄數(shù)據(jù)集級別的溯源信息,包括數(shù)據(jù)源、匹配算法、執(zhí)行參數(shù)、處理時間和執(zhí)行者等信息;在細粒度級別上,如果某一要素完全來自一個數(shù)據(jù)源,則可記錄至要素級別上的溯源信息,如果該要素保留了不同數(shù)據(jù)源的屬性信息,則需要記錄屬性級別上的溯源信息,其中對應(yīng)的活動類型包括了屬性的保留、新增和更新等。因此在合并處理完成后,溯源捕獲將在3種粒度層級上記錄豐富的溯源信息??紤]到矢量數(shù)據(jù)集可能包含了大量的要素及要素屬性,單次的矢量數(shù)據(jù)操作(合并、更新等)便可能產(chǎn)生大量的要素、屬性級別上的溯源信息。
圖2 矢量數(shù)據(jù)合并的案例Fig.2 An example of vector data merging
區(qū)塊鏈?zhǔn)且环N多方共同參與和維護的去中心化數(shù)據(jù)庫,由帶有時間戳的區(qū)塊組成,每一區(qū)塊引用前一區(qū)塊的加密散列值,并依此連接成鏈狀結(jié)構(gòu)。在區(qū)塊鏈中單個區(qū)塊是存儲數(shù)據(jù)的基本單元。區(qū)塊由區(qū)塊頭和區(qū)塊體兩部分組成。區(qū)塊頭中主要包含父區(qū)塊散列值、時間戳、區(qū)塊高度、難度值、證明值以及存儲樹的根哈希值(tree root hash)。區(qū)塊體是區(qū)塊鏈中存儲數(shù)據(jù)記錄的位置,通常以樹形結(jié)構(gòu)組織,是區(qū)塊鏈中重要的數(shù)據(jù)結(jié)構(gòu)。梅克爾(Merkle)樹結(jié)構(gòu)[25]是最常見的一種鏈上信息存儲結(jié)構(gòu),例如經(jīng)典的比特幣系統(tǒng)[26]采用了二叉Merkle樹結(jié)構(gòu)來組織一個區(qū)塊內(nèi)所有的交易信息,其葉子節(jié)點的值為交易信息的散列值,通過逐層合并計算得到整棵樹以及根哈希值。區(qū)塊體采用Merkle樹等樹形結(jié)構(gòu)的作用在于驗證過程中不需要下載整棵樹,而是通過驗證路徑(tree path)即可完成對信息的驗證,驗證路徑為從該節(jié)點出發(fā)達到根節(jié)點所經(jīng)過的路徑。區(qū)塊鏈的這種可信驗證機制為鏈上的溯源信息提供了防篡改、可信任的安全特性。然而在地理數(shù)據(jù)場景中,由于矢量溯源記錄的特征,直接采用Merkle樹結(jié)構(gòu)面臨著如下挑戰(zhàn):
(1) 由于矢量溯源記錄信息量豐富,若將溯源信息直接記錄到區(qū)塊鏈,必然造成區(qū)塊鏈存儲壓力,并進一步對區(qū)塊鏈網(wǎng)絡(luò)中賬本同步的效率造成挑戰(zhàn)。
(2) 在地理協(xié)作過程中,地理數(shù)據(jù)更新頻繁、不確定性高、溯源數(shù)據(jù)量大,單個區(qū)塊內(nèi)存入大量溯源信息會造成Merkle樹的規(guī)模增大,這將對溯源信息的查詢和驗證性能形成挑戰(zhàn)。
為應(yīng)對挑戰(zhàn)(1),本文的溯源區(qū)塊鏈采用鏈上鏈下的存儲模式,即鏈上只存儲溯源條目的散列值,而完整的溯源信息存儲在鏈下的本地溯源數(shù)據(jù)庫。這里的溯源條目為鏈下溯源信息經(jīng)過溯源模型生成的單元。溯源區(qū)塊鏈將溯源條目進行MD5 Hash算法得到散列值,并在區(qū)塊體中對散列值進行存儲組織。該散列值與溯源條目原始信息具有對應(yīng)的映射關(guān)系,同時鏈上存儲散列值減小了區(qū)塊鏈的存儲壓力。為應(yīng)對挑戰(zhàn)(2),本文采用基于MPT樹的多粒度矢量溯源信息鏈上存儲組織方法,根據(jù)溯源驗證算法的流程對溯源驗證性能進行對比試驗。
基于溯源模型需求分析及上述區(qū)塊鏈挑戰(zhàn)分析,著重考慮矢量溯源信息的多粒度層級、數(shù)據(jù)量大等特性,本文歸納矢量數(shù)據(jù)溯源信息的鏈上存儲結(jié)構(gòu)應(yīng)該盡可能滿足以下3個條件:
(1) 在分布式協(xié)作的環(huán)境下,假設(shè)系統(tǒng)環(huán)境對溯源記錄具有篡改風(fēng)險,溯源信息存儲結(jié)構(gòu)應(yīng)具有溯源信息的可查詢和可驗證的特性。
(2) 提供多粒度、可伸縮性的溯源查詢請求,以滿足用戶不同粒度層級(矢量數(shù)據(jù)集、矢量要素、要素屬性)的溯源查詢。
(3) 各溯源粒度層級間保持關(guān)聯(lián)關(guān)系,同一數(shù)據(jù)集下的要素溯源信息與對應(yīng)數(shù)據(jù)集的溯源信息存在關(guān)聯(lián)性,以增強溯源查詢驗證的能力。
本文設(shè)計了一種利用MPT樹結(jié)構(gòu)對不同粒度的矢量溯源信息進行鏈上存儲和組織的方法。MPT樹是以太坊賬戶信息和交易信息的存儲結(jié)構(gòu),結(jié)合了Merkle樹和Patricia前綴樹的特點,既具有Merkle樹可驗證的特點,也具有Patricia樹節(jié)點間共享前綴的特點。MPT樹包含以下3種類型節(jié)點,分別是葉子結(jié)點(leaf node)、前綴節(jié)點(prefix node)、分支節(jié)點(branch node)。
(1) 葉子節(jié)點為樹型結(jié)構(gòu)中的最底層存儲節(jié)點,存儲了編碼段Key和溯源條目散列值Val。Key由地理數(shù)據(jù)統(tǒng)一資源標(biāo)志符(URI)經(jīng)特殊編碼和處理得到。葉子節(jié)點存儲的Val也作為節(jié)點散列值,被用于后續(xù)的真實性驗證。
(2) 前綴節(jié)點壓縮了不同編碼的相同前綴,存儲了壓縮編碼段Key和節(jié)點散列值hash。
(3) 分支節(jié)點為擁有超過1個孩子節(jié)點以上的非葉子節(jié)點,由指向孩子節(jié)點的索引ChildrenNode、所有孩子節(jié)點Val值拼接后的節(jié)點散列值hash、溯源條目散列值Val構(gòu)成。其中,ChildrenNode是一個長度為16的數(shù)組,范圍是十六進制表示的0至f。
矢量數(shù)據(jù)溯源鏈通過上述MPT樹結(jié)構(gòu)對矢量溯源信息進行鏈上的存儲和組織,將此步驟定義為溯源信息的上鏈過程。根據(jù)擴展的PROV模型,溯源的實體具有不同的粒度級別。不同粒度實體的URI需符合相應(yīng)規(guī)范,對于細粒度實體應(yīng)將其所在粗粒度實體的URI作為自身URI的前綴部分,例如數(shù)據(jù)集A對應(yīng)的URI為“http:∥example.com/resource/dataset_A”,則數(shù)據(jù)集A中要素B對應(yīng)的URI為“http:∥example.com/resource/dataset_A/feature_B”。上鏈過程主要依據(jù)溯源實體的URI將溯源條目的散列值插入到MPT樹的特定位置和深度。具體的上鏈步驟如下:
(1) 對溯源實體的URI進行原生字符向十六進制(Raw-Hex)編碼轉(zhuǎn)換。首先Raw編碼操作,對原始的URI逐個分隔為單個字符,并轉(zhuǎn)換成ASCII碼值。接著Hex編碼操作,對轉(zhuǎn)換得到的ASCII碼值除以16取除數(shù)和余數(shù)依次作為新編碼的結(jié)果,目的是將編碼結(jié)果的數(shù)值控制在16以內(nèi)。由URI原生字符經(jīng)過Raw-Hex編碼得到的結(jié)果記為對應(yīng)溯源條目的初始編碼段。例如數(shù)據(jù)集A的URI為“http:∥example.com/resource/dataset_A”,則其初始編碼段表示為(僅展示前后6位)[6,8,7,4,7,4,…,7,4,5,f,4,1]。
(2) 生成初始樹節(jié)點。選取某一粗粒度的溯源條目插入MPT樹中,依據(jù)樹節(jié)點類型的定義,第1個樹節(jié)點也是最底層的存儲節(jié)點,即為葉子節(jié)點。
(3) 繼續(xù)插入粗粒度溯源條目。將當(dāng)前待插入的溯源條目定義為新插入的節(jié)點。根據(jù)新插入節(jié)點的初始編碼段尋找當(dāng)前樹型結(jié)構(gòu)中的具有最長相同前綴的樹節(jié)點,將剩余編碼段定義為初始編碼段減去當(dāng)前樹型中相同前綴后所剩余的編碼部分。若尋找到的樹節(jié)點為分支節(jié)點,則將當(dāng)前溯源條目作為一個葉子節(jié)點插入到分支節(jié)點對應(yīng)的孩子節(jié)點位置。若尋找到的樹節(jié)點為葉子節(jié)點或前綴節(jié)點,判斷該樹節(jié)點與新插入節(jié)點的剩余編碼段是否具有相同前綴,若有則新生成一個前綴節(jié)點,并將該樹節(jié)點變更為分支節(jié)點,原樹節(jié)點與新插入節(jié)點作為分支節(jié)點的兩個孩子節(jié)點插入。若兩者無相同前綴,則直接生成分支節(jié)點,原樹節(jié)點與新插入節(jié)點作為兩個孩子節(jié)點插入。
(4) 重復(fù)步驟(3),直至所有的粗粒度溯源條目插入到MPT樹中。
(5) 插入更細粒度級別的溯源條目。例如溯源條目對應(yīng)實體為數(shù)據(jù)集A下要素B,要素B的URI為“http:∥example.com/resource/dataset_A/feature_B”,則其初始編碼段表示為(僅展現(xiàn)部分編碼)[6,8,7,4,7,4,…,7,4,5,f,4,1,…,6,5,5,f,4,2]。
(6) 同理粗粒度溯源條目的插入,直至完成所有細粒度溯源條目的插入。
(7) 逐層計算節(jié)點散列值,最后得到整棵樹的tree root hash,將tree root hash存入?yún)^(qū)塊頭內(nèi)。
上述上鏈方法根據(jù)實體URI確定了不同粒度溯源條目在MPT樹中的位置,并形成一種粗細粒度間的包含關(guān)系,即細粒度的溯源條目存儲于所屬粗粒度溯源條目所在的子樹中?;诒?的用例數(shù)據(jù)在圖3中展示了一個MPT樹的示例,樹狀結(jié)構(gòu)的不同深度層次分別對應(yīng)矢量數(shù)據(jù)集、矢量要素和要素屬性3種粒度的溯源條目存儲位置。
表1 溯源信息的用例數(shù)據(jù)
圖3 不同粒度溯源條目在MPT樹中存儲位置的一個示例Fig.3 An examples of storage locations of provenance entries with different granularities in the MPT tree
MPT樹結(jié)構(gòu)保留了Merkle樹的驗證原則,通過驗證算法對溯源信息真實性進行判斷。溯源驗證包括溯源查詢和真實性驗證兩部分。首先進行溯源查詢,通過遍歷樹形結(jié)構(gòu)檢索到目標(biāo)溯源條目的存儲樹節(jié)點位置;第2步是進行真實性驗證,通過溯源條目的存儲位置計算得到一條驗證路徑。由于無法確定分布式環(huán)境下驗證路徑的響應(yīng)是否存在欺詐,因此需利用驗證路徑計算得到一個最終的哈希值,并與區(qū)塊頭中的根哈希進行比較,若相同則證明溯源條目可信。
矢量溯源信息驗證的一個特征在于溯源驗證請求需要同時驗證粗粒度溯源信息及大量細粒度溯源信息。這對溯源驗證性能造成挑戰(zhàn)。為方便理解,本文將驗證矢量數(shù)據(jù)集及其包含的要素、屬性級別的溯源信息的過程定義為矢量數(shù)據(jù)綜合溯源驗證。本文提出的溯源信息鏈上存儲結(jié)構(gòu)支持綜合溯源驗證能力。在驗證過程中,對粗粒度(數(shù)據(jù)集級別)溯源條目驗證可信后,可依據(jù)粗粒度的驗證路徑快速定位到所包含的細粒度(矢量要素級別、要素屬性級別)溯源條目所在的樹節(jié)點位置,并在驗證子樹中完成細粒度的溯源驗證。圖4以一個簡化的MPT樹展示了矢量數(shù)據(jù)綜合溯源驗證。圖中Hash78所在的樹節(jié)點存儲了要素溯源條目,其父節(jié)點存儲了數(shù)據(jù)集溯源條目,在數(shù)據(jù)集溯源條目驗證通過后,只需在驗證子樹中完成更細粒度的溯源驗證即可,不需要重新對整棵樹進行遍歷計算。具體驗證算法流程如圖5所示。
圖4 綜合溯源驗證示意圖Fig.4 Comprehensive provenance verification diagram
圖5 矢量數(shù)據(jù)綜合溯源驗證流程Fig.5 Vector data comprehensive provenance verification flowchart
矢量溯源區(qū)塊鏈系統(tǒng)的試驗環(huán)境采用分布式集群架構(gòu),試驗集群由5臺服務(wù)器組成,服務(wù)器系統(tǒng)版本為Ubuntu16.04.6,配置為雙核、4 GB,且保證服務(wù)器之間可互相通信,如圖6所示。每個服務(wù)器配置PostgreSQL 9.3數(shù)據(jù)庫用于存儲完整的溯源信息。網(wǎng)絡(luò)中所有服務(wù)器節(jié)點共同維護區(qū)塊鏈賬本,用戶可通過任意服務(wù)器節(jié)點連接的客戶端進行溯源查詢與驗證。
圖6 矢量溯源區(qū)塊鏈試驗測試環(huán)境Fig.6 Experimental test environment of vector data provenance blockchain
在溯源信息上鏈準(zhǔn)備階段,試驗在地理矢量數(shù)據(jù)處理平臺進行了多次矢量數(shù)據(jù)合并操作,并通過收集、監(jiān)聽模塊對產(chǎn)生的溯源信息進行捕獲上鏈。矢量數(shù)據(jù)合并所使用的多份參考數(shù)據(jù)源來自專業(yè)測繪機構(gòu)繪制的建筑物矢量數(shù)據(jù),匹配數(shù)據(jù)源來自O(shè)SM中不同時相、相同區(qū)域的矢量數(shù)據(jù)。其中數(shù)據(jù)源中矢量數(shù)據(jù)集包含的要素數(shù)量在2至100條,每要素包含的屬性數(shù)量在2至20項。為方便對比溯源驗證性能,試驗基于原比特幣機制中固定區(qū)塊容量大小的出塊策略[27],設(shè)置了包含500、1000、1500、2000、2500、3000條溯源條目作為區(qū)塊大小分級,即溯源信息按照區(qū)塊大小分級的數(shù)量上鏈至每區(qū)塊中。在試驗測試中,本文忽略了搜尋溯源信息所在區(qū)塊高度的耗時,而重點測試基于通用的二叉Merkle樹與本文提出的基于MPT的鏈上組織結(jié)構(gòu)的溯源驗證性能。
為幫助理解矢量數(shù)據(jù)溯源鏈的使用與運行,本文開發(fā)了基于區(qū)塊鏈的矢量數(shù)據(jù)溯源驗證原型系統(tǒng),原型系統(tǒng)可作為區(qū)塊鏈節(jié)點的交互客戶端,系統(tǒng)界面如圖7所示。用戶可以查詢合并案例中的數(shù)據(jù)結(jié)果及其溯源信息,系統(tǒng)界面的下邊欄展示了從本地溯源數(shù)據(jù)庫中查詢到的所有溯源信息。進一步,用戶通過原型系統(tǒng)向區(qū)塊鏈網(wǎng)絡(luò)發(fā)起驗證請求,利用區(qū)塊鏈對查詢到的溯源信息進行真實性驗證,如系統(tǒng)界面中紅線框內(nèi)即為驗證結(jié)果。當(dāng)結(jié)果返回“True”時表示溯源信息真實可靠,未被篡改;當(dāng)驗證結(jié)果為“False”時表明該條溯源信息已被改動。
圖7 基于區(qū)塊鏈的矢量數(shù)據(jù)溯源驗證系統(tǒng)Fig.7 Vector data provenance and verification system based on blockchain
以下對比測試基于二叉Merkle樹和MPT樹的溯源驗證耗時。首先對比在不同區(qū)塊大小分級下兩種鏈上組織結(jié)構(gòu)的單次溯源驗證耗時。選取100次溯源驗證耗時的平均值進行對比(圖8),不難發(fā)現(xiàn)單個溯源條目的響應(yīng)耗時均在秒級。從整體來看,溯源驗證耗時都隨著區(qū)塊大小增大而增加,二叉Merkle樹下的溯源驗證耗時要大于MPT構(gòu)建的3種粒度的溯源驗證耗時。當(dāng)溯源查詢驗證所需遍歷的樹節(jié)點數(shù)目越少,驗證耗時與開銷也相應(yīng)減少。本文進而對比了不同區(qū)塊大小下樹節(jié)點的數(shù)量(圖9),可以看出MPT樹相比二叉Merkle樹大約可以減少28.8%~37.5%的樹節(jié)點的冗余。在3種粒度的溯源驗證耗時對比中,數(shù)據(jù)集級別的驗證耗時最少,原因是粗粒度的溯源條目平均存儲位置相比細粒度的溯源條目更加靠近根節(jié)點,驗證路徑更短,其單次溯源響應(yīng)的耗時也相對更短。
圖8 二叉Merkle樹與MPT樹的溯源耗時對比Fig.8 Time-consuming comparison of provenance between binary trees and MPT
圖9 二叉Merkle樹與MPT樹節(jié)點數(shù)量對比Fig.9 Binary tree and MPT node number comparison
本文進一步測試了矢量數(shù)據(jù)綜合溯源驗證的試驗。在實際場景中,不同的綜合溯源驗證對象所需驗證的溯源條目數(shù)量往往相差較大,對溯源驗證耗時影響也較大。因此本次試驗在不同區(qū)塊大小分級下,對不同的矢量數(shù)據(jù)合并案例生成的數(shù)據(jù)集實體進行100次綜合溯源驗證,圖10顯示了二叉Merkle樹與MPT樹的驗證耗時結(jié)果。從試驗結(jié)果來看,二叉Merkle樹綜合溯源驗證的耗時隨區(qū)塊大小增大而快速增加,且具有較大的浮動,而基于MPT樹的綜合溯源驗證基本保持了較低的驗證耗時,且更加穩(wěn)定。經(jīng)對比,不同區(qū)塊大小分級下二叉Merkle樹綜合溯源驗證的平均耗時約為MPT樹的2.29~19.95倍,表明本文提出的基于MPT的鏈上存儲組織方法具有更高效的溯源驗證性能,更加適應(yīng)實際場景中的矢量數(shù)據(jù)綜合溯源驗證。
圖10 二叉Merkle樹與MPT樹的矢量數(shù)據(jù)綜合溯源驗證耗時對比Fig.10 Time-consuming comparison of comprehensive provenance between binary trees and MPT
針對矢量溯源信息的可靠性問題,本文將區(qū)塊鏈技術(shù)應(yīng)用到了矢量數(shù)據(jù)溯源領(lǐng)域,探索了基于區(qū)塊鏈的矢量溯源信息鏈上存儲組織和驗證方法。首先分析了基于區(qū)塊鏈的矢量數(shù)據(jù)溯源存在的挑戰(zhàn),接著提出了矢量溯源區(qū)塊鏈的設(shè)計要求。本文提出了一種利用MPT樹對不同層級的矢量溯源信息進行鏈上存儲組織的方法,并設(shè)計了相應(yīng)的溯源信息驗證算法。試驗表明,與通用的二叉Merkle樹相比,本文所提出的顧及矢量數(shù)據(jù)溯源粒度的鏈上存儲組織方法具有更高效的溯源驗證性能,可基本滿足實際場景下的驗證需求。
目前區(qū)塊鏈應(yīng)用于地理信息領(lǐng)域的研究剛剛起步。除了矢量數(shù)據(jù)溯源方向,在面向地理信息領(lǐng)域更為豐富的場景和數(shù)據(jù)源時,上鏈數(shù)據(jù)的范疇與接口標(biāo)準(zhǔn)需要進行必要的約定和統(tǒng)一。同時考慮到區(qū)塊鏈政策因素,對于一些區(qū)塊鏈隱私保護、權(quán)益分配等都應(yīng)在相應(yīng)的政策監(jiān)管范圍下實施。因此,未來對于區(qū)塊鏈在地理信息領(lǐng)域的研究,也將從數(shù)據(jù)標(biāo)準(zhǔn)、技術(shù)研發(fā)、政策制定等多角度展開探討。