許艷艷 周華平 姚尚軍 丁金虎 路明
1. 安徽理工大學 計算機科學與工程學院 安徽 淮南 232000;2. 淮北礦業物業管理服務有限公司 安徽 淮北 235000
智慧政務是大數據時代新的服務管理方式[1],變革傳統的服務管理方式,企業提高行政事務管理和服務效率的同時并朝著智慧化方向邁進。在國內很多單位部門都在使用專門的智慧政務系統[2]。企業應用現代信息技術,整合信息服務資源,提高自身服務和管理的質量,綜合考慮公司物業的后勤、出入管理、車輛、組織、機電、員工、安全、財務、經營和服務評價等的融入服務和管理等要素,并且以管理和服務為導向,創建安全、高效、舒適、的智慧政務企業。出入管理在企業管理中有著舉足輕重的地位。出入管理記錄系統的發展主要經歷了人工出入記錄方式、智能卡技術方式和生物識別方式。人工出入記錄方式是最原始的方法,是中心化管理模式。相繼出現的射頻識別卡和智能卡出入管理系統[3]以及生物識別技術中的指紋識別[4]和人臉識別[5],提高目標識別效率及準確率,數據庫管理權限與管理員高度綁定[6],系統始終無法避免數據易被篡改刪除的問題。巨鏈數據庫采用區塊鏈技術和分布數據庫結合在一起的去中央數據庫,數據安全度得到了很大提高,數據儲存容量問題得到了相應解決[7]。高效地檢索區塊鏈方法使用數據同步技術未從本質上解決查詢問題[8]。ChainSQL將數據庫日志存儲于區塊鏈,這對以交易為單位追溯數據不利[9]。
區塊鏈技術的應用在金融,物流,公益和版權方面得到了進一步的擴展[10]。從區塊鏈概念來看,它屬于數據鏈。從區塊鏈的性質看,它是一種建立于網絡上的分布數據庫系統,同時又是一種去中心化分布共享賬本技術。一個去中心化的系統中,各個節點彼此相連,沒有一個中心節點同時連接所有其余的節點。區塊鏈另一特性是防篡改。區塊鏈數據結構是一個極難修改、僅可添加新區塊的數據存儲結構。
哈希函數[11]是一種單向映射函數,無論輸入數據的大小及類型如何,它都能將輸入數據轉換成固定長度的輸出,不能反方向執行哈希算法來找到滿足限制條件的隨機數。哈希函數與鏈式結構的結合將數據微小的變化迅速放大,這極大地保證了數據的安全性。默克爾樹[12]是二叉樹的形式。由圖1可知Merkle樹的簡單結構。在默克爾樹中通過哈希引用把所有數據連接在一起,只要發現哈希引用不完整就表明樹狀結構中的數據被修改了。相反,就可以說明數據在產生后未被修改過。

圖1 Merkle樹簡單示例
目標識別通過管理員分配公私密鑰對實現,計算機生成出入記錄數據,利用用戶私鑰對數據數字簽名并發送至區塊鏈中,節點廣播并存儲數據。用戶利用自身公鑰查詢出入記錄,管理員通過用戶與公鑰的映射關系查詢記錄。
區塊鏈中的頭部通過引用上個塊頭的哈希值把各個區塊挨次相連。區塊鏈數據結構由兩個主要的組成部分,一個有序的區塊頭組成的鏈和默克爾樹形式保存的交易數據。區塊頭是一個區塊中非常重要的組成部分。難度目標值和Nonce值是非常重要的兩個區塊頭中的字段。區塊頭還包括提供時間基準參考的時間戳等。區塊體中存儲著區塊中所有記錄。區塊記錄結構示意圖如圖2所示。

圖2 記錄結構示意圖
記錄包括版本號、記錄輸入、記錄輸出和記錄時間。已有的模型已經保證了數據是不可修改的,但由于其記錄組成的固定,極其缺乏普遍性。因此,只能夠處理組成構造不變的數據,很難用于處理普遍性的數據。
為了能夠處理比較一般的數據,本文把記錄結構進行擴展。記錄分為記錄頭和數據兩個組成部分。記錄頭部分每筆記錄都是默克爾樹的一部分,若改變記錄的某些特征,就會相應的改變其在默克爾樹上的哈希引用,即指向原始記錄數據的哈希引用會被破壞,整個區塊鏈數據結構也就無效了。當在鍵入數據時,首先查詢記錄存在與否。若存在,比對當前記錄的簽名和前一交易的公鑰,比對成功記錄才是有效的。若該關鍵字首次出現,要將父記錄哈希值置為零。當讀取數據時,首先根據關鍵字來檢索,然后返回最近的查詢結果。索引是經過哈希運算保存到默克爾樹中的,這保證了索引的不可修改特性。面向數據庫記錄結構示意圖如圖3。

圖3 面向數據庫的記錄結構示意圖
此記錄結構在原有結構的基礎之上進行了擴展,在區塊的默克爾樹中添加了關于記錄關鍵值的索引信息,能夠根據關鍵值查詢到相應記錄信息。索引經哈希運算保存至默克爾樹中,保證索引不可篡改。區塊鏈交易時只在意所有哈希引用的正確性和一致性。
將數據和節點大小平衡樹(SBT)進行哈希運算以實現數據和索引不可修改。結合SBT和默克爾樹,此處應用SBT有以下原因:首先,SBT能夠保證查詢復雜度較低。SBT與默克爾樹類似,因為它們向上增長。SBT能在很短的時間復雜度中完成搜索操作,是目前最快的高級二叉搜索樹,相比于其他的自平衡二叉查找樹更容易實現。
哈希快速查找的想法是,將每段數據最前面固定長度的一部分計算Hash值后存儲起來,一般是存到一個集合中,然后再將這些數據存儲到另外一個集合中,從數據集合構成到Hash值集合的映射。針對我們創建的索引結構,提出一種有關關鍵字的搜索方法,根據默克爾樹的特性,提供搜索結果的驗證路徑。
在鍵入關鍵值時,先要在內存區塊中搜索,若搜索不成功,就尋找 k-v數據庫中上個區塊的默克爾索引,直到檢索到該記錄為止。若在某個特定區塊內搜索,先從默克爾樹根開始搜索,若目標值大于等于根節點,則去左孩子節點對應的目錄中檢索;否則,去右孩子節點對應的目錄中搜索。搜索最終鎖定在葉子節點,如果葉子節點的值等于目標值則搜索成功;否則,證明記錄不在此區塊中。

首先對變量進行初始化;然后通過循環向下搜索到葉節點,通過關鍵值與目標值的比較更新節點和驗證路徑。輸出信息為節點的哈希值和檢驗路徑結果。
測試一:用戶在不同時間進行簽到,生成出入記錄,記錄發送至各個節點,廣播驗證。最后隨機選取用戶查詢自身的出入數據,比對數據是否正常,驗證出入結果的正確性。
預測結果:用戶出入記錄查詢功能正常且出入結果正確無誤。
實驗結果:測試結果與預期結果相同,表明用戶出入記錄查詢功能正常。

圖4 出入記錄查詢測試結果
測試二:用戶自身通過計算機生成出入數據,受自身主觀因素的影響,用戶可偽造虛假出入時間。正常的出入數據生成后,用戶修改出入數據時間信息,信息廣播至其他節點。
預測結果:當前記錄生成時間驗證不通過。
實驗結果:測試結果與預期結果相同。出入數據時間與節點時間差值較大,當前記錄生成時間驗證不通過。因此,用戶不能偽造出入時間。

圖5 出入記錄篡改測試結果
設計基于區塊鏈的一套出入管理記錄系統。本文首先提出了基于區塊鏈的數據庫模式,該模式拓展原有交易結構,將數據庫技術應用于區塊鏈,在區塊鏈上實現數據庫基本操作;其次,提出SBT樹型索引,用于監管塊內數據,提高數據的檢索速度,從而提高系統性能。確保出入數據的不可篡改和高效查詢。系統從總體上解決了政務管理中傳統和現行出入記錄系統之間存有高度的管理人員權限,記錄中的數據容易被篡改、查詢麻煩等問題。