徐超 趙必然 陳勇
【摘 要】 區(qū)塊鏈技術(shù)具有去中心化、防篡改、可追溯等技術(shù)特點(diǎn),可以為審計(jì)數(shù)據(jù)安全提供幫助。然而在實(shí)際審計(jì)場(chǎng)景應(yīng)用中,區(qū)塊鏈系統(tǒng)由于其本身查詢效率低下和查詢功能有限等不足,難以滿足審計(jì)的及時(shí)性和功能性需求。文章提出一種基于區(qū)塊鏈的審計(jì)數(shù)據(jù)查詢系統(tǒng)框架。首先擴(kuò)展了區(qū)塊鏈上存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu),滿足對(duì)被審計(jì)數(shù)據(jù)做數(shù)據(jù)處理的需求;其次,把區(qū)塊鏈中的數(shù)據(jù)同步到其他數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)數(shù)據(jù)的快速查詢和多類型查詢;最后,通過設(shè)計(jì)同步規(guī)則和構(gòu)建索引,保證數(shù)據(jù)從區(qū)塊鏈到數(shù)據(jù)庫(kù)的一致性和快速更新。從仿真實(shí)驗(yàn)結(jié)果來看,該框架方案在查詢效率、查詢功能、數(shù)據(jù)同步等方面具有良好的表現(xiàn)。
【關(guān)鍵詞】 區(qū)塊鏈; 查詢優(yōu)化; 審計(jì)數(shù)據(jù)
【中圖分類號(hào)】 F234.3? 【文獻(xiàn)標(biāo)識(shí)碼】 A? 【文章編號(hào)】 1004-5937(2023)05-0136-07
一、引言
隨著物聯(lián)網(wǎng)(IoT)[1]、供應(yīng)鏈管理[2]、遠(yuǎn)程信息處理(Telematics)[3]等的快速發(fā)展,數(shù)據(jù)逐漸成為事件驅(qū)動(dòng)的載體,但在數(shù)據(jù)交互過程中其完整性和安全性無法得到保證,迫切需要新技術(shù)來有效地管理數(shù)據(jù)。區(qū)塊鏈作為不可信環(huán)境中的可信機(jī)器,在數(shù)據(jù)完整性、去中心化和分布式賬本技術(shù)方面已被證明是有效的[4]。審計(jì)對(duì)數(shù)據(jù)的真實(shí)性和完整性的要求是十分嚴(yán)格的,所以在這點(diǎn)上,區(qū)塊鏈很好地滿足了審計(jì)的需求。
在區(qū)塊鏈技術(shù)和審計(jì)的結(jié)合方面,一些學(xué)者從不同角度開展了研究。畢秀玲等[5]認(rèn)為區(qū)塊鏈技術(shù)是審計(jì)數(shù)據(jù)的安全保障,可以構(gòu)建起“審計(jì)智能+”的免疫系統(tǒng)。鄭石橋[6]分析了區(qū)塊鏈對(duì)審計(jì)取證路徑的影響,并提出了一個(gè)區(qū)塊鏈對(duì)審計(jì)取證影響的理論框架。王琳等[7]基于區(qū)塊鏈技術(shù)構(gòu)建了一套適用于現(xiàn)代審計(jì)業(yè)務(wù)發(fā)展趨勢(shì)的實(shí)時(shí)審計(jì)框架,并對(duì)框架內(nèi)各個(gè)模塊的組成、功能及工作機(jī)理進(jìn)行詳細(xì)說明。房巧玲等[8]提出并構(gòu)建了一種區(qū)塊鏈技術(shù)驅(qū)動(dòng)下的審計(jì)模式——基于雙鏈架構(gòu)的混合審計(jì)模式。王涵等[9]提出了一種基于區(qū)塊鏈和默克爾哈希樹的公共審計(jì)數(shù)據(jù)共享方案,以達(dá)到對(duì)管理員權(quán)限的控制和數(shù)據(jù)的動(dòng)態(tài)修改,并在實(shí)現(xiàn)隱私保護(hù)、批量審計(jì)和降低系統(tǒng)資源消耗的同時(shí),保證了方案的安全性。綜上,目前區(qū)塊鏈與審計(jì)結(jié)合的研究主要還是停留在理論框架上,應(yīng)用方面的側(cè)重點(diǎn)也沒有考慮到數(shù)據(jù)的查詢問題。
二、研究現(xiàn)狀
在審計(jì)過程中,被審計(jì)數(shù)據(jù)的數(shù)量和屬性繁雜,審計(jì)問題多種多樣,而每一個(gè)審計(jì)問題往往只涉及到部分信息。所以除了要保證數(shù)據(jù)的完整性以外,如何根據(jù)特定的審計(jì)問題從區(qū)塊鏈上快速地找出所有目標(biāo)信息也變得越來越重要。
然而,區(qū)塊鏈缺少傳統(tǒng)數(shù)據(jù)管理系統(tǒng)中的許多便利,例如強(qiáng)大的查詢引擎,在查詢語言和查詢處理方面使用起來不方便[10],導(dǎo)致區(qū)塊鏈只支持基于哈希的關(guān)鍵字查詢,查詢方式單一,且需要遵循特定的格式(例如128位十六進(jìn)制元素)。同時(shí),很多區(qū)塊鏈系統(tǒng)為了追求卓越的寫性能,都采用鍵值數(shù)據(jù)庫(kù)作為底層數(shù)據(jù)庫(kù),例如Level DB[11]。然而,這類數(shù)據(jù)庫(kù)通?;贚SM-tree[12]存儲(chǔ)結(jié)構(gòu),其讀取性能勉強(qiáng)令人滿意,尤其是隨機(jī)讀取。
近年來的研究主要分為三大方向來解決這些問題。一是通過智能合約驅(qū)動(dòng)數(shù)據(jù)查詢。Abuhashim et al.[13]旨在通過編寫不同的智能合約函數(shù)將數(shù)據(jù)放入?yún)^(qū)塊鏈上的智能合約中,以支持區(qū)塊鏈索引和檢索。 et al.[14]采用了在以太坊上使用FastQeury智能合約在區(qū)塊鏈上存儲(chǔ)和查詢藥物基因組學(xué)數(shù)據(jù)的方案,該方案利用屬性值的唯一性進(jìn)行存儲(chǔ)映射,類似于哈希表,以實(shí)現(xiàn)高效的鍵值查詢。然而,智能合約存在太多限制,包括智能合約本身的潛在漏洞、Gas限制、Solidity語言轉(zhuǎn)換為字節(jié)碼時(shí)功能邊界模糊等。并且,從這些文獻(xiàn)的實(shí)驗(yàn)部分可以看出,智能合約只能在特定的數(shù)據(jù)量較小的場(chǎng)景下使用,不具備泛化性。二是把區(qū)塊鏈數(shù)據(jù)存儲(chǔ)在其他數(shù)據(jù)庫(kù)中。Ether QL系統(tǒng)中包含一個(gè)同步管理器模塊,用于從區(qū)塊鏈系統(tǒng)中獲取新的區(qū)塊數(shù)據(jù),解析出區(qū)塊鏈字段,存儲(chǔ)在Mongo DB中,然后提供查詢接口,借助外部數(shù)據(jù)庫(kù)實(shí)現(xiàn)查詢功能[15]。Bragagnolo
et al.[16]提出使用大數(shù)據(jù)技術(shù)來提取和分析區(qū)塊鏈中的信息。他們使用Map/Reduce模型的并行索引算法將區(qū)塊鏈數(shù)據(jù)同步到關(guān)系數(shù)據(jù)庫(kù)中。這些方法是高效的,但將數(shù)據(jù)從區(qū)塊鏈更新到其他數(shù)據(jù)庫(kù)時(shí)存在延遲,不能很好地滿足用戶實(shí)時(shí)查詢數(shù)據(jù)的需求。其次,外部數(shù)據(jù)庫(kù)不是防篡改的,無法保證查詢數(shù)據(jù)與區(qū)塊鏈數(shù)據(jù)的一致性。三是在區(qū)塊鏈內(nèi)部構(gòu)建索引結(jié)構(gòu)。Blockchain DB選擇使用紅黑樹和Merkle樹的組合RBTree作為索引結(jié)構(gòu)[17]。Huang et al.[18]設(shè)計(jì)了一種基于雙向鏈表的區(qū)塊鏈,結(jié)合了線索二叉搜索樹(TBST)和AVL樹,提出了一種新的塊內(nèi)搜索結(jié)構(gòu)。由于鏈上的數(shù)據(jù)與索引的更新是同步的,所以這些方法支持實(shí)時(shí)查詢,但問題在于在區(qū)塊鏈內(nèi)構(gòu)建索引結(jié)構(gòu)實(shí)施難度較大,并且每種預(yù)定義的查詢類型都要對(duì)應(yīng)一個(gè)數(shù)據(jù)結(jié)構(gòu),擴(kuò)展性弱。
針對(duì)以上問題,為滿足審計(jì)場(chǎng)景的數(shù)據(jù)查詢需求,本文基于數(shù)據(jù)庫(kù)和區(qū)塊鏈技術(shù)提出了一種面向?qū)徲?jì)的查詢系統(tǒng)框架??紤]到鏈上空間的局限性以及對(duì)數(shù)據(jù)保密性的要求,本文采取“鏈下審計(jì)”+“鏈上驗(yàn)證”的審計(jì)與區(qū)塊鏈結(jié)合模式,即先對(duì)被審數(shù)據(jù)哈希加密后生成驗(yàn)證碼,然后把所有的驗(yàn)證碼存放在區(qū)塊鏈中,鏈下進(jìn)行審計(jì)時(shí)再?gòu)逆溕戏祷貙?duì)應(yīng)數(shù)據(jù)的驗(yàn)證碼做計(jì)算比對(duì),驗(yàn)證被審數(shù)據(jù)是否被篡改。
三、系統(tǒng)框架
本文提出的系統(tǒng)框架如圖1所示,包括數(shù)據(jù)層、查詢層和應(yīng)用層:數(shù)據(jù)層包含一個(gè)數(shù)據(jù)庫(kù)模塊和一個(gè)區(qū)塊鏈模塊,分別存儲(chǔ)被審數(shù)據(jù)和驗(yàn)證碼;查詢層包含一個(gè)數(shù)據(jù)庫(kù)模塊,負(fù)責(zé)同步區(qū)塊鏈上的數(shù)據(jù)值,并提供快速、多樣的查詢服務(wù);應(yīng)用層根據(jù)審計(jì)問題獲取所需的被審數(shù)據(jù)和驗(yàn)證碼,并作計(jì)算比對(duì),保證被審數(shù)據(jù)的完整性。
(一)數(shù)據(jù)層
在本文的系統(tǒng)中,會(huì)根據(jù)常見的審計(jì)問題維護(hù)一張表,該表包含三個(gè)屬性字段:Audit_desc表示某審計(jì)問題的描述;Audit_attr表示該審計(jì)問題所涉及到的屬性(每條被審數(shù)據(jù)會(huì)有很多屬性,而一個(gè)審計(jì)問題往往只涉及到其中的幾個(gè));Audit_num表示系統(tǒng)為該審計(jì)問題生成的唯一編號(hào)Ai,其中Ai表示第i個(gè)添加到該表中的審計(jì)問題。該表存儲(chǔ)在數(shù)據(jù)庫(kù)模塊中。表1表示在醫(yī)療收費(fèi)審計(jì)場(chǎng)景下審計(jì)問題表的一個(gè)具體示例:系統(tǒng)中編號(hào)A1對(duì)應(yīng)的審計(jì)問題為“超標(biāo)準(zhǔn)收費(fèi)”,其涉及到的屬性有“數(shù)次”“單價(jià)”“實(shí)收金額”“收費(fèi)類別”“項(xiàng)目名稱”等;系統(tǒng)中編號(hào)A2對(duì)應(yīng)的審計(jì)問題為“多收取患者藥品費(fèi)”,其涉及到的屬性有“藥品名稱”“成本價(jià)”“零售價(jià)”“差價(jià)”“加價(jià)率”等。
在驗(yàn)證碼上鏈的過程中,系統(tǒng)會(huì)根據(jù)該表中存在的審計(jì)問題,自動(dòng)在被審數(shù)據(jù)中找出所有與該審計(jì)問題相關(guān)的信息,逐條按照預(yù)先設(shè)定好的哈希函數(shù)做哈希運(yùn)算,生成的驗(yàn)證碼按照審計(jì)問題的編號(hào)進(jìn)行分類。
在比特幣[19]系統(tǒng)中,區(qū)塊結(jié)構(gòu)如圖2(a)所示:每個(gè)區(qū)塊都由一個(gè)區(qū)塊頭和一個(gè)區(qū)塊體組成,區(qū)塊頭含有多個(gè)字段,包括指向前一區(qū)塊的哈希值、表明區(qū)塊身份的區(qū)塊ID和本區(qū)塊的哈希值、區(qū)塊形成的時(shí)間戳、區(qū)塊體中所有交易自下而上哈希得到的Merkle根以及該區(qū)塊被合理生成的證明;區(qū)塊體包含多條交易,每條交易的結(jié)構(gòu)如圖2(b)所示:包括交易的版本號(hào)、交易輸入、交易輸出以及交易生成的時(shí)間戳,其中交易輸入包含輸入數(shù)量和附帶用戶私鑰簽名的解鎖腳本,交易輸出包含輸出數(shù)量和使用對(duì)方公鑰鎖定的鎖定腳本。
由于比特幣系統(tǒng)是面向交易的,并且數(shù)據(jù)結(jié)構(gòu)是固定的,因此系統(tǒng)只能處理固定結(jié)構(gòu)的交易數(shù)據(jù),其每個(gè)交易結(jié)構(gòu)里包含的交易數(shù)據(jù)的信息字段也都是與交易本身有關(guān),而對(duì)于被審數(shù)據(jù)這種更具一般性的數(shù)據(jù)而言,比特幣系統(tǒng)的交易結(jié)構(gòu)就無法完美地兼容。
為了讓比特幣系統(tǒng)可以在審計(jì)場(chǎng)景中更好地對(duì)被審數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,本文的解決方法是,對(duì)原本的交易結(jié)構(gòu)進(jìn)行擴(kuò)展,如圖3所示:擴(kuò)展后的結(jié)構(gòu)包含系統(tǒng)(System)屬性和數(shù)據(jù)(Data)屬性兩部分。系統(tǒng)屬性部分用來存放區(qū)塊鏈系統(tǒng)為交易生成的信息,包含版本號(hào)(Version)、簽名(Signature)和時(shí)間戳(Timestamp)等;數(shù)據(jù)屬性部分用來存放與被審數(shù)據(jù)本身相關(guān)的信息,包括被審數(shù)據(jù)的鏈下標(biāo)識(shí)號(hào)(Data_id)、審計(jì)問題的編號(hào)(Audit_num)、驗(yàn)證碼(Data_hash)、被審數(shù)據(jù)本身發(fā)生的時(shí)間(Data_time)以及部門編號(hào)(Department)等。其中Data_id字段用來匹配鏈上與鏈下的數(shù)據(jù),Audit_num字段用來對(duì)鏈上數(shù)據(jù)進(jìn)行分類,Data_hash字段用來存放鏈下數(shù)據(jù)經(jīng)過哈希加密后的結(jié)果,Data_time字段用來輔助查詢,Department字段表示被審數(shù)據(jù)原本歸屬的部門(考慮到審計(jì)場(chǎng)景中,被審數(shù)據(jù)往往是由多個(gè)部門的子數(shù)據(jù)集組成)。
這樣區(qū)塊鏈系統(tǒng)就與交易脫鉤,變成了服務(wù)于審計(jì)的特定數(shù)據(jù)庫(kù)(為了表示這種變化,在下文中,原本區(qū)塊鏈系統(tǒng)中的交易改稱為記錄,即每個(gè)區(qū)塊的區(qū)塊體中包含多條記錄)。
(二)查詢層
在提升區(qū)塊鏈系統(tǒng)查詢效率和查詢功能的三個(gè)方向中,本文的系統(tǒng)選擇的方法是構(gòu)造查詢層,把區(qū)塊鏈上的數(shù)據(jù)同步到傳統(tǒng)數(shù)據(jù)庫(kù)中。在保證同步數(shù)據(jù)一致性的方法上,Wu et al.[20]采取的對(duì)策是使用哈希函數(shù)為每次同步的所有內(nèi)容和屬性生成一個(gè)指紋,這樣只需要驗(yàn)證指紋的正確性就可以防止數(shù)據(jù)的偽造。該方法的具體流程為:在每個(gè)周期內(nèi)(可以固定的時(shí)間或固定的區(qū)塊數(shù)量為一個(gè)周期),系統(tǒng)先把區(qū)塊鏈上更新的所有記錄提取出來,按照目標(biāo)屬性重組后構(gòu)建一個(gè)微型數(shù)據(jù)庫(kù),并為小數(shù)據(jù)庫(kù)生成一個(gè)指紋;然后系統(tǒng)按照相同的數(shù)據(jù)庫(kù)生成程序,在區(qū)塊鏈中構(gòu)建另一個(gè)微型數(shù)據(jù)庫(kù),并用相同的哈希函數(shù)為小數(shù)據(jù)庫(kù)生成一個(gè)指紋;最后系統(tǒng)通過比較兩個(gè)指紋值來驗(yàn)證同步數(shù)據(jù)的一致性。若驗(yàn)證失敗,則系統(tǒng)中會(huì)產(chǎn)生錯(cuò)誤報(bào)告,當(dāng)錯(cuò)誤報(bào)告達(dá)到一定數(shù)量時(shí),系統(tǒng)會(huì)執(zhí)行一個(gè)診斷程序來檢查數(shù)據(jù)庫(kù)的正確性,直到?jīng)]有錯(cuò)誤報(bào)告到達(dá)。
該方法的不足之處有:整個(gè)同步流程十分耗時(shí),不能很好地滿足實(shí)時(shí)查詢的需求;系統(tǒng)對(duì)于每個(gè)周期內(nèi)構(gòu)建的微型數(shù)據(jù)庫(kù)只是簡(jiǎn)單地按時(shí)間順序更新到了大數(shù)據(jù)庫(kù)中,沒有做合并操作,并且該系統(tǒng)中的區(qū)塊鏈?zhǔn)敲嫦蚪灰椎?,鏈上?shù)據(jù)的屬性不能全面地體現(xiàn)被審數(shù)據(jù)的信息,微型數(shù)據(jù)庫(kù)可以提供的查詢類別也就比較局限,無法滿足審計(jì)場(chǎng)景中多個(gè)審計(jì)問題的需求。
本文基于為同步數(shù)據(jù)生成指紋的策略,設(shè)計(jì)了一個(gè)新的同步規(guī)則,優(yōu)化了同步流程;在查詢層中按照審計(jì)問題構(gòu)建多張預(yù)查詢表,并把每次同步的數(shù)據(jù)合并到已有的同類別數(shù)據(jù)表中,為審計(jì)場(chǎng)景提供快速且多類型的查詢,優(yōu)化了同步結(jié)果。
新的數(shù)據(jù)同步規(guī)則為:在每個(gè)周期內(nèi),系統(tǒng)首先按照審計(jì)問題的類別(即審計(jì)問題的編號(hào))在區(qū)塊鏈上更新的記錄中找出對(duì)應(yīng)的所有數(shù)據(jù),用設(shè)定好的哈希函數(shù)為其生成一個(gè)指紋;然后系統(tǒng)把這些數(shù)據(jù)提取出來,保存到查詢層,并用相同的哈希函數(shù)為其生成一個(gè)指紋;最后系統(tǒng)比較兩個(gè)指紋值來判斷同步數(shù)據(jù)是否一致。
為了提高數(shù)據(jù)同步流程中在區(qū)塊鏈上查找數(shù)據(jù)的效率,本文添加了一個(gè)索引機(jī)制來加速鏈上數(shù)據(jù)的訪問。系統(tǒng)會(huì)維護(hù)一個(gè)索引表,表中每個(gè)類別的數(shù)據(jù)都對(duì)應(yīng)一個(gè)索引結(jié)構(gòu)。索引結(jié)構(gòu)定義如下:{Ai[b1,b2,…,bn]},Ai即審計(jì)問題在系統(tǒng)中的編號(hào),n表示每個(gè)周期內(nèi)系統(tǒng)中生成的新區(qū)塊總數(shù),bn對(duì)應(yīng)更新區(qū)塊在本次周期內(nèi)的相對(duì)位置,bn的取值為“0”或“1”。其本質(zhì)上是一種位圖結(jié)構(gòu),位圖中從左數(shù)第j位表示該類別的數(shù)據(jù)是否存在于第j個(gè)區(qū)塊中(置“0”表示不存在,置“1”表示存在)。當(dāng)一個(gè)類別的記錄首次出現(xiàn)時(shí),系統(tǒng)會(huì)在表中添加該類別的名稱以及對(duì)應(yīng)的空白位圖。當(dāng)有一個(gè)新的區(qū)塊產(chǎn)生時(shí),通過設(shè)置相應(yīng)位置的編碼(“0”或“1”)來更新索引表。表2展示的是一次更新周期內(nèi)索引表的具體示例:在該周期內(nèi),系統(tǒng)一共生成了10個(gè)區(qū)塊,其中A1類型的數(shù)據(jù)存在于第3、4、6、10個(gè)區(qū)塊中,A2類型的數(shù)據(jù)存在于第1、6、7、8個(gè)區(qū)塊中。
這種索引機(jī)制的好處有:由于一個(gè)類別的記錄可能會(huì)存在于不同的區(qū)塊中,而位圖可以精準(zhǔn)地顯示出記錄存在的目標(biāo)位置,這樣系統(tǒng)在區(qū)塊鏈上查找數(shù)據(jù)時(shí)就可以避免掃描所有區(qū)塊;這種索引的構(gòu)造難度較小,擴(kuò)展性較高,十分便于系統(tǒng)對(duì)索引表的創(chuàng)建與更新。
由于數(shù)據(jù)層的區(qū)塊鏈模塊中的記錄結(jié)構(gòu)是經(jīng)過擴(kuò)展的,每條記錄隨著審計(jì)問題編號(hào)的不同而被分成了不同的類別,因此系統(tǒng)會(huì)在查詢層的數(shù)據(jù)庫(kù)模塊中為每個(gè)審計(jì)問題分別構(gòu)建各自的表,并以其對(duì)應(yīng)的編號(hào)命名。除此之外,系統(tǒng)在查詢層中會(huì)維護(hù)一張?zhí)囟ǖ拿Q表,用來存放查詢層中已經(jīng)存在的表名(即審計(jì)問題的編號(hào)),在每次同步數(shù)據(jù)的一致性驗(yàn)證成功后,系統(tǒng)會(huì)先判斷查詢層中是否存在同類別的表,若存在就添加到該表中,若不存在就創(chuàng)建一張新表,并把表名添加到名稱表中。
一個(gè)類別的所有記錄在系統(tǒng)中的一次更新周期內(nèi)的同步流程大致如圖4所示:首先系統(tǒng)會(huì)根據(jù)該數(shù)據(jù)的類別“Ai”,從索引表中獲取對(duì)應(yīng)的位圖信息Index_table.Ai.Block_distribution;由于位圖是由一串“0”“1”數(shù)據(jù)組成的,每位只是表示對(duì)應(yīng)位置的存在情況,并沒有直接指明具體的位置,所以系統(tǒng)會(huì)根據(jù)位圖生成一個(gè)具體的位置信息列表Block_loc,里面直接存放具體的區(qū)塊編號(hào);系統(tǒng)根據(jù)位置信息列表在目標(biāo)區(qū)塊中獲取本次更新周期內(nèi)的所有類別為Ai的記錄,并添加到一個(gè)緩存列表Ai.templist中;系統(tǒng)先對(duì)緩存列表生成一個(gè)指紋Fingerprint(Ai.templist),再把緩存列表同步到查詢層的一個(gè)臨時(shí)數(shù)據(jù)表Ai.temptable中,并對(duì)該臨時(shí)數(shù)據(jù)表生成一個(gè)指紋Fingerprint(Ai.temptable),只有當(dāng)緩存列表的指紋Fingerprint(Ai.templist)等于臨時(shí)數(shù)據(jù)表的指紋Fingerprint(Ai.temptable)時(shí),才能保證數(shù)據(jù)同步的一致性;當(dāng)系統(tǒng)判定成功后,會(huì)在名稱表中查找是否有“Ai”字段的存在,若找不到,說明查詢層中還未構(gòu)建該類別的數(shù)據(jù)表,則系統(tǒng)先構(gòu)建一張對(duì)應(yīng)的數(shù)據(jù)表Ai.table,并把臨時(shí)數(shù)據(jù)表中的所有數(shù)據(jù)存放在該表中,最后在名稱表中添加“Ai”字段,若找到,則系統(tǒng)把臨時(shí)數(shù)據(jù)表中的所有數(shù)據(jù)合并到已有的同類別數(shù)據(jù)表中。到此,整個(gè)流程才算結(jié)束。
在單次更新周期內(nèi),不管某類型的數(shù)據(jù)存在于多少個(gè)區(qū)塊中,VQL系統(tǒng)都需要進(jìn)行n次對(duì)單個(gè)區(qū)塊的查找步驟(n為每個(gè)周期內(nèi)更新的區(qū)塊數(shù)量),所以其同步流程的時(shí)間復(fù)雜度永遠(yuǎn)是O(n)。而在本文的系統(tǒng)中,由于索引的存在,系統(tǒng)對(duì)單個(gè)區(qū)塊的查找次數(shù)隨著該類型數(shù)據(jù)所分布區(qū)塊數(shù)量的變小而減少,雖然最壞情況下仍然需要執(zhí)行n次對(duì)單個(gè)區(qū)塊的查找操作,但當(dāng)數(shù)據(jù)只存在于一個(gè)區(qū)塊中時(shí),系統(tǒng)只需要執(zhí)行一次對(duì)單個(gè)區(qū)塊的查找操作即可,此時(shí)同步流程的時(shí)間復(fù)雜度為O(1)。
(三)應(yīng)用層
系統(tǒng)中維護(hù)的審計(jì)問題表可以在應(yīng)用層中查看,審計(jì)人員可以根據(jù)表中的信息,直接輸入審計(jì)問題所對(duì)應(yīng)的編號(hào)即可。系統(tǒng)會(huì)根據(jù)所輸入的審計(jì)問題編號(hào),自動(dòng)完成數(shù)據(jù)的完整性驗(yàn)證,并將被審數(shù)據(jù)列表、其對(duì)應(yīng)的驗(yàn)證碼列表以及驗(yàn)證的結(jié)果在應(yīng)用層中展示。
系統(tǒng)在做完整性驗(yàn)證時(shí),可以直接從查詢層中的預(yù)查詢表中快速地獲取驗(yàn)證碼列表。因?yàn)殒溕蠑?shù)據(jù)的每條記錄中也包含數(shù)據(jù)發(fā)生時(shí)間和部門編號(hào)字段,而這些信息也在數(shù)據(jù)同步過程中一起同步到了查詢層中,所以如果審計(jì)人員想對(duì)被審數(shù)據(jù)做進(jìn)一步的篩選時(shí),比如獲取特定時(shí)間內(nèi)或特定部門的信息,由于以上字段的存在,系統(tǒng)也可以在查詢層中快速地篩選出對(duì)應(yīng)的驗(yàn)證碼列表。而記錄中的鏈下標(biāo)識(shí)號(hào)字段可以幫助系統(tǒng)在逐條比對(duì)的過程中完美地匹配每一條被審數(shù)據(jù)與其對(duì)應(yīng)的驗(yàn)證碼。而對(duì)于某條具體的數(shù)據(jù),系統(tǒng)也可以在查詢層中快速地定位到對(duì)應(yīng)的驗(yàn)證碼。
四、實(shí)驗(yàn)與分析
由于本文的主要研究點(diǎn)在于區(qū)塊鏈數(shù)據(jù)的查詢方法和同步流程,不涉及網(wǎng)絡(luò)以及共識(shí)協(xié)議,所以進(jìn)行了仿真實(shí)驗(yàn)。
(一)數(shù)據(jù)查詢方法
系統(tǒng)對(duì)查詢效率的需求主要體現(xiàn)在根據(jù)審計(jì)問題從區(qū)塊鏈系統(tǒng)中快速找到被審數(shù)據(jù)列表中所有數(shù)據(jù)對(duì)應(yīng)的驗(yàn)證碼,最終表現(xiàn)為快速地完成對(duì)被審數(shù)據(jù)的完整性驗(yàn)證。
本文比較在查詢過程中通過掃描區(qū)塊(Scan_block)和使用查詢層(Query_
layer)兩種方法所需的響應(yīng)時(shí)間,并針對(duì)三種查詢模式分別做了查詢效率對(duì)比實(shí)驗(yàn),包括:?jiǎn)沃挡樵儯憩F(xiàn)為從區(qū)塊鏈系統(tǒng)中獲取某一條具體的被審數(shù)據(jù)對(duì)應(yīng)的驗(yàn)證碼(比如來自xx部門,產(chǎn)生時(shí)間為xxxx-xx-xx,標(biāo)識(shí)號(hào)為xx,涉及到的審計(jì)問題編號(hào)為xx);范圍查詢,表現(xiàn)為從區(qū)塊鏈系統(tǒng)中獲取特定條件下的被審數(shù)據(jù)對(duì)應(yīng)的驗(yàn)證碼(比如某個(gè)時(shí)間段或某幾個(gè)部門,涉及到的審計(jì)問題編號(hào)為xx);表查詢,表現(xiàn)為從區(qū)塊鏈系統(tǒng)中獲取某一審計(jì)問題中的被審數(shù)據(jù)對(duì)應(yīng)的驗(yàn)證碼(比如涉及到的審計(jì)問題編號(hào)為xx)。
在不同數(shù)據(jù)總量的條件下,分別測(cè)試了Scan_block方法與Query_layer方法的表現(xiàn)。具體的實(shí)驗(yàn)結(jié)果如表3所示??梢钥吹剑琒can_block方法在任意數(shù)據(jù)量和任意查詢模式下的耗時(shí)都遠(yuǎn)高于Query_layer方法,并且在同一種模式中,隨著數(shù)據(jù)總量的增大,Scan_block方法與Query_layer方法的耗時(shí)差在快速擴(kuò)大。通過分析可知,由于Scan_block方法采用遍歷方法,其查詢過程需要讀取整條鏈上的所有區(qū)塊。特別的,由于本文的系統(tǒng)在查詢層中已經(jīng)按照審計(jì)問題的編號(hào)對(duì)所有數(shù)據(jù)做了分類存儲(chǔ),所以在表查詢模式下,Query_layer方法只需要定位到對(duì)應(yīng)的預(yù)查詢表即可,這就解釋了為什么在不同的數(shù)據(jù)總量下,Query_layer方法在表查詢模式中的耗時(shí)幾乎保持不變的原因。
(二)數(shù)據(jù)同步流程
因?yàn)楸疚南到y(tǒng)和VQL系統(tǒng)在本質(zhì)上都是把鏈上數(shù)據(jù)同步到鏈外數(shù)據(jù)庫(kù)中做查詢優(yōu)化,所以兩者單從查詢效率上沒有實(shí)質(zhì)性的區(qū)別(不考慮不同數(shù)據(jù)庫(kù)之間的差異)。而本文相較于VQL系統(tǒng)的優(yōu)勢(shì)點(diǎn)在于數(shù)據(jù)同步流程的優(yōu)化。一方面是對(duì)同步結(jié)果的優(yōu)化:由于本文對(duì)鏈上交易結(jié)構(gòu)的擴(kuò)展,使得本文的系統(tǒng)可以在查詢層中按照審計(jì)問題的種類來對(duì)數(shù)據(jù)進(jìn)行分類存儲(chǔ),每次更新的數(shù)據(jù)也都按照種類合并在了一張表中,這樣對(duì)于一些常見的審計(jì)問題,系統(tǒng)可以直接從這些預(yù)查詢表中獲取數(shù)據(jù),并且由于標(biāo)識(shí)號(hào)、時(shí)間、部門編號(hào)等屬性的存在,對(duì)于在特定范圍內(nèi)的審計(jì)問題,系統(tǒng)也能從查詢層中做進(jìn)一步的篩選。
另一方面是對(duì)同步效率做了優(yōu)化:由于索引機(jī)制的引入,系統(tǒng)從區(qū)塊鏈上查找目標(biāo)數(shù)據(jù)的速度有了明顯的提升,從而降低了整個(gè)同步流程的耗時(shí)。這樣在一定程度上可以降低將數(shù)據(jù)從區(qū)塊鏈同步到其他數(shù)據(jù)庫(kù)時(shí)的延遲,以滿足用戶實(shí)時(shí)查詢數(shù)據(jù)的需求。
本文針對(duì)每個(gè)更新周期內(nèi)的同步流程,在兩種場(chǎng)景下對(duì)兩個(gè)系統(tǒng)的同步效率做了對(duì)比實(shí)驗(yàn)。一個(gè)是在區(qū)塊數(shù)量不變的情況下(單次周期內(nèi)的同步區(qū)塊數(shù)量保持為25個(gè)),觀察系統(tǒng)在不同區(qū)塊容量下的表現(xiàn),結(jié)果如圖5所示(Improve表示本文提出的同步方法)。另一個(gè)是在區(qū)塊容量不變的情況下(單次周期內(nèi)的區(qū)塊最大容量保持為2 500條),觀察系統(tǒng)在不同區(qū)塊數(shù)量下的表現(xiàn),結(jié)果如圖6所示??梢钥吹?,在兩種情況中的每個(gè)條件下,Improve方法的同步流程耗時(shí)總是低于VQL系統(tǒng)。并且隨著實(shí)驗(yàn)變量的增加,VQL系統(tǒng)同步流程耗時(shí)的增長(zhǎng)幅度大于Improve方法。
同時(shí),本文還在以上兩種情況下分別對(duì)Improve方法中索引的空間大小做了測(cè)量。表4展示的是單次的更新周期內(nèi),在單個(gè)類別數(shù)據(jù)上構(gòu)建的索引結(jié)構(gòu)與更新區(qū)塊在不同條件下的空間開銷??梢钥吹?,在任意條件下,索引結(jié)構(gòu)的空間開銷都遠(yuǎn)小于單次更新數(shù)據(jù)的總空間開銷,代價(jià)可以說是忽略不計(jì)。即使存在多種數(shù)據(jù)類型,并且在每個(gè)數(shù)據(jù)類別上都構(gòu)建各自的索引結(jié)構(gòu),所有索引結(jié)構(gòu)加起來的空間代價(jià)仍然是可以接受的。這表明Improve方法中的索引結(jié)構(gòu)在空間上具有很好的擴(kuò)展性。
五、結(jié)語
雖然區(qū)塊鏈技術(shù)本身的特性十分契合審計(jì)場(chǎng)景中對(duì)數(shù)據(jù)的完整性需求,但目前區(qū)塊鏈與審計(jì)結(jié)合的研究并沒有考慮到數(shù)據(jù)的查詢問題,并且現(xiàn)有的區(qū)塊鏈系統(tǒng)因其自身的查詢功能缺陷也無法滿足審計(jì)場(chǎng)景的查詢要求。針對(duì)這一問題,本文構(gòu)造了一種基于區(qū)塊鏈的面向?qū)徲?jì)的查詢系統(tǒng)框架。本文考慮到鏈上空間的局限性以及對(duì)數(shù)據(jù)保密性的現(xiàn)實(shí)情況,采取了“鏈下審計(jì)”+“鏈上驗(yàn)證”的審計(jì)與區(qū)塊鏈結(jié)合模式;首先為了能讓區(qū)塊鏈系統(tǒng)可以很好地兼容被審數(shù)據(jù)本身的屬性,本文對(duì)比特幣系統(tǒng)中的交易數(shù)據(jù)結(jié)構(gòu)做了面向?qū)徲?jì)的擴(kuò)展;其次本文選擇把鏈上數(shù)據(jù)存儲(chǔ)在其他數(shù)據(jù)庫(kù)的方法來提升區(qū)塊鏈系統(tǒng)的查詢功能,并且基于VQL系統(tǒng)的驗(yàn)證思路,實(shí)現(xiàn)了數(shù)據(jù)同步的一致性;最后本文通過設(shè)計(jì)新的同步規(guī)則和構(gòu)建索引對(duì)VQL的同步流程和同步結(jié)果做出優(yōu)化。實(shí)驗(yàn)結(jié)果表明,本文方案在查詢效率和數(shù)據(jù)同步等方面具有良好的表現(xiàn)。
不足之處在于,對(duì)于審計(jì)問題表的構(gòu)造和更新需要人員主動(dòng)去維護(hù),未來可利用機(jī)器學(xué)習(xí)算法,通過訓(xùn)練讓系統(tǒng)根據(jù)以往的審計(jì)經(jīng)驗(yàn)自動(dòng)維護(hù)審計(jì)問題表。
【參考文獻(xiàn)】
[1] MADAKAM S,LAKE V,LAKE V,et al.Internet of things(iot):a literature review[J].Journal of Computer and Communications,2015,3(5):164-173.
[2] MALIK S,DEDEOGLU V,KANHERE S S,et al.Trustchain:trust management in blockchain and iot supported supply chains[C].2019 IEEE International Conference on Blockchain.2019:184-193.
[3] SANG-OUN L E E,HYUNSEOK J,HAN B.Security assured vehicle data collection platform by blockchain:service providers perspective[C].2019 21st International Conference on Advanced Communication Technology.IEEE,2019:265-268.
[4] KUMAR R,SHARMA R.Leveraging blockchain for ensuring trust in iot:a survey[J].Journal of King Saud University-Computer and Information Sciences,2021.
[5] 畢秀玲,陳帥.科技新時(shí)代下的“審計(jì)智能”建設(shè)[J].審計(jì)研究,2019(6):13-21.
[6] 鄭石橋.區(qū)塊鏈對(duì)審計(jì)取證的影響:一個(gè)理論框架[J].財(cái)會(huì)通訊,2021(9):1-5.
[7] 王琳,向際鋼.基于區(qū)塊鏈技術(shù)的實(shí)時(shí)審計(jì)框架構(gòu)建[J].財(cái)會(huì)通訊,2020(9):139-142,147.
[8] 房巧玲,高思凡,曹麗霞.區(qū)塊鏈驅(qū)動(dòng)下基于雙鏈架構(gòu)的混合審計(jì)模式探索[J].審計(jì)研究,2020(3):12-19.
[9] 王涵,王緒安,周能,等.基于區(qū)塊鏈的可審計(jì)數(shù)據(jù)分享方案[J].廣西師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2020,38(2):1-7.
[10] ZHU Y,ZHANG Z,JIN C,et al.Towards rich qery blockchain database[C].Proceedings of the 29th ACM International Conference on Information & Knowledge Management,2020:3497-3500.
[11] TULKINBEKOV K,PIRAHANDEH M,KIM D H.Cleveldb:coalesced leveldb for small data[EB/OL].https://github.com/google/leveldb.
[12] ONEIL P,CHENG E,GAWLICK D,et al.The log-
structured merge-tree(LSM-tree)[J].Acta Informatica,1996,33:351-385.
[13] ABUHASHIM A,TAN C C.Smart contract designs on blockchain applications[C].2020 IEEE? Symposium on Computers and Communications,2020:1-4.
[14] GüRSOY G,BRANNON C M,GERSTEIN M.Using ethereum blockchain to store and query pharma-cogenomics data via smart contracts[J].BMC medical genomics,2020,13(1):1-11.
[15] LI Y,ZHENG K,YAN Y,et al.Etherql:a query layer for blockchain system[C].Internat-ional Conference on Database Systems for Advanced Applications,2017:556-567.
[16] BRAGAGNOLO S,MARRA M,POLITO G,et al.Towards scalable blockchain analysis[C].2019? IEEE/ACM 2nd International Workshop on Emerging Trends in Software Engineering for Bloc-kchain,
2019:1-7.
[17] 焦通,申德榮,聶鐵錚,等.區(qū)塊鏈數(shù)據(jù)庫(kù):一種可查詢且防篡改的數(shù)據(jù)庫(kù)[J].軟件學(xué)報(bào),2019,30(9):2671-2685.
[18] HUANG T L,HUANG J.An efficient data structure for distributed ledger in blockchain systems[C].2020 International Computer Symposium,2020:175-178.
[19] NAKAMOTO S.Bitcoin:A Peer-to-Peer electronic Cash System[EB/OL].https://bitcoin.org/bitcoin.pdf,2008.
[20] WU H,PENG Z,GUO S,et al.Vql:efficient and verifiable cloud query services for blockchain systems[J].IEEE Transactions on Parallel and Distributed Systems,2021,33(6):1393-1406.