發布時間:2020-01-22所屬分類:科技論文瀏覽:1次
摘 要: 摘要:隨著比特幣、以太幣等一系列加密貨幣的興起,其底層的區塊鏈技術受到越來越廣泛的關注.區塊鏈有防篡改、去中心化的特性.以太坊利用區塊鏈技術來構建新一代去中心化的應用平臺.BigchainDB將區塊鏈技術與傳統的分布式數據庫相結合,利用基于聯盟投票的共識
摘要:隨著比特幣、以太幣等一系列加密貨幣的興起,其底層的區塊鏈技術受到越來越廣泛的關注.區塊鏈有防篡改、去中心化的特性.以太坊利用區塊鏈技術來構建新一代去中心化的應用平臺.BigchainDB將區塊鏈技術與傳統的分布式數據庫相結合,利用基于聯盟投票的共識機制改進傳統Pow機制中的節點全復制問題,提高了系統的擴展性與吞吐率.但是現有的區塊鏈系統存儲的信息大都是固定格式的交易信息,雖然在每個交易里有數據字段,但是現有的區塊鏈系統并不能經由鏈上對交易內的數據字段的具體細節進行直接查詢.如果想要查詢數據字段的具體細節,只能先根據交易的哈希值進行查詢,得到該交易的完整信息,然后再檢索該交易內的數據信息.數據可操作性低,不具備傳統數據庫的查詢功能.首先提出一種區塊鏈數據庫系統框架,將區塊鏈技術應用于分布式數據管理;其次提出一種基于哈希指針的不可篡改索引,根據該索引快速檢索區塊內數據,以此實現區塊鏈的查詢;最后,通過實驗測試數據庫的讀寫性能,實驗結果表明,所提出的不可篡改索引在保證不可篡改的同時具有較好的讀寫性能.
關鍵詞:區塊鏈;數據庫;可查詢;哈希指針;不可篡改索引;可回溯
隨著比特幣、以太幣等一系列加密貨幣的興起,其底層的區塊鏈技術也受到了越來越廣泛的關注[1,2].比特幣最核心的意圖是為了實現去中心化,即:在沒有第三方信任機構參與的情況下,實現兩個對等實體的數字貨幣交易.然而,現實世界中不可避免地存在很多自然中心,比如提供貸款的銀行、提供電信服務的電信運營商等.雖然我們可以把這些中心機構當作對等實體,將其與用戶的交易記錄到區塊鏈上,比如用比特幣去交話費,但是這種做法是不切實際的,因為這不利于機構管理用戶數據(包括用戶的信用等級等).實際上,現有的中心機構都是由自己管理其存儲用戶相關信息的數據庫,但是這種模式存在很多缺陷:(1)不同的數據庫可能存儲著相同的用戶基本身份信息,導致數據冗余度高;(2)不同的中心機構各自管理自己的數據,不利于機構之間的數據共享;(3)每個數據庫大都由單一機構中心化管理,使得用戶必須無條件信任該機構,存在中心化問題;(4)用戶不能夠獨立驗證數據的正確性,如果數據被惡意篡改,用戶與機構都無法察覺.不僅如此,在供應鏈以及商品溯源等領域,也對數據可信性以及數據可回溯提出了新的要求.
而區塊鏈技術具有去中心化、防篡改以及可回溯的特性,為解決上述這些問題提供了可能.為此,我們提出了區塊鏈數據庫的概念,核心思想是:通過限制中心機構對數據記錄的操作,來達到防篡改和去中心化的目的.該數據庫中有多條區塊鏈,每一條區塊鏈相當于傳統數據庫中的一張表,所有的中心機構充當數據的存儲節點,所有的存儲節點根據共識算法生成區塊鏈,所有節點(包括用戶)存儲區塊頭信息,可以由區塊頭信息檢索到記錄并驗證記錄的正確性.我們希望有高效的共識算法來提高系統的吞吐率,并有高效的查詢算法實現在區塊鏈上檢索數據.當前,在共識算法上已經有很多研究,例如POW[3,4],POS[5,6],PBFT[7].然而針對區塊鏈查詢的研究相對較少,而且現有的區塊鏈系統并不能兼顧數據回溯與數據查詢.在比特幣中可以根據每一筆交易回溯前一筆交易,但是存在的問題是交易本身不易檢索.在以太坊中是狀態樹+交易樹,狀態樹存儲的是用戶賬號信息,狀態樹支持檢索,可以根據狀態樹查詢用戶當前余額,但是狀態樹本身不記錄歷史信息,不能對狀態進行數據回溯,而且狀態樹不直接關聯交易,同樣無法有效對交易進行回溯.雖然已有一些研究利用同步技術將交易數據同步到傳統數據庫,根據各數據項建立索引,從而實現快速查詢,但是這種做法并不能保證索引的不可篡改,所以損失了區塊鏈不可篡改的特性.基于此,本文提出一種不可篡改的索引結構,兼顧數據查詢以及數據回溯.
本文首先提出了區塊鏈數據庫系統框架,將區塊鏈技術應用于數據管理;其次,提出了一種基于哈希指針的不可篡改索引,根據該索引快速檢索區塊內數據,以此實現區塊鏈的查詢;最后,通過實驗測試數據庫的讀寫性能,實驗結果表明,本文提出的不可篡改索引在保證不可篡改的同時具有較好的讀寫性能.1相關工作文獻[3]中,中本聰將數字簽名技術、P2P技術、時間戳技術、Merkle樹技術和工作量證明機制巧妙地結合起來,解決了雙花與女巫攻擊問題,實現了擁有去中心化、防篡改和數據可回溯等特性的數字貨幣系統——比特幣系統.文獻[8]中,Buterin等人對比特幣系統進行擴展,構建了新一代智能合約和去中心化應用平臺——以太坊.除了比特幣的功能之外,以太坊還有圖靈完備的合約語言,內置的持久化狀態存儲,具有可編程性,使開發者可以很快地在以太坊平臺上創建自己的區塊鏈應用.這兩個應用都是自下而上設計區塊鏈,有內置代幣,比特幣主要應用于貨幣,而以太坊的主要功能則是智能合約.
文獻[9]中,超級賬本則采用自上而下的設計方式,去除了內置代幣,提出了商用區塊鏈框架.它采用了松耦合的設計,將共識機制、身份驗證等組件模塊化,使之在應用過程中可以方便地根據應用場景來選擇相應的模塊,除此之外還采用了容器技術,將智能合約放在docker中運行,從而使得智能合約可以用幾乎任意的高級語言來編寫.
比特幣、以太坊和超級賬本三大應用平臺的主要功能是針對數字貨幣與智能合約,但是數據管理性能較弱,一些機構發現了區塊鏈不可篡改、去中心化與數據可回溯特性,力圖將區塊鏈技術與傳統的數據庫技術相結合,提升數據管理的性能,同時兼顧區塊鏈去中心化、數據可回溯、防篡改的特性.
文獻[10]中,Dinh等人受區塊鏈鏈式結構以及Git版本控制的啟發,為每個key創建設計了一個有向無環圖,圖中每一個節點對應key的某一歷史版本,節點的前驅后繼分別對應其版本的前驅后繼,在保證高擴展性和高吞吐率的同時,實現了數據可共享與不可篡改的特性.文獻[11]中,BigchainDB將區塊鏈技術與RethinkDB相結合,在企業級分布式數據庫的基礎上添加區塊鏈不可篡改和去中心化等特性,提出了一種基于管程的一致性策略,提高了數據的安全性,同時解決了區塊鏈的數據存儲容量問題.文獻[12]提供了基于區塊鏈的加密存儲網絡,通過將原始數據加密并簽名后,保存到P2P文件系統中,用戶可以對數據的完整性進行驗證.文獻[13]中,Tuan等人提出了一種區塊鏈測試框架,包括針對區塊鏈應用的一致性算法、數據模型、執行引擎和鏈上應用的測試方法,并且分析了以太坊、超級賬本、Parity以及UStore的讀寫以及查詢能力,對于區塊鏈的設計以及瓶頸發現和解決帶來了極大的幫助.文獻[14]中,Tsai等人總結了基于區塊鏈的應用開發方法,給出了開發區塊鏈應用時需要注意的關鍵問題,設計并實現了”北航鏈”.文獻[15]中,Li等人提出了一種高效的檢索區塊鏈的方法,包括范圍查詢和Top-k查詢,有較好的靈活性.但是其解決方法是通過把區塊鏈數據以及k-v數據庫里面的數據同步到MongoDB數據庫中,利用MongoDB進行查詢操作,沒有從根本上解決區塊鏈的查詢問題.為了將區塊鏈技術應用于數據存儲,ChainSQL[16]將數據庫操作日志存儲于區塊鏈中,將數據存儲于附屬關系型數據庫中,在底層支持SQLite3,MySQL,PostgreSQL等關系數據庫,可以根據區塊鏈里的日志記錄將數據庫表恢復到任意時刻點,但是其恢復粒度是以表為單位,不利于以交易為單位的數據溯源.
2區塊鏈數據庫系統框架
通過結合區塊鏈和數據庫技術,提出一種去中心化、防篡改同時支持查詢的區塊鏈數據庫框架.如圖1所示,分4層,具體如下.•存儲層:在最底部,為k-v數據庫,負責分布式存儲數據,為每一個區塊鏈備份多個副本;
•網絡層:是該框架的核心,負責節點間的數據傳輸以及根據共識協議確定區塊的先后順序.其中,節點由存儲節點以及用戶組成,每一機構為一個存儲節點,用于存儲本機構的數據信息,可以是一個數據庫,也可以是多個數據庫.當添加或者修改用戶相關的數據時,需要由用戶和機構共同簽名認可;簽名后的數據由機構封裝到區塊中,當區塊大小達到某一閾值時,將其打包發送給其他機構進行驗證.機構間根據共識算法驗證區塊的正確性,并決定區塊的先后順序.將驗證正確的區塊發送給存儲節點存儲,將區塊頭廣播給所有節點,包括用戶.在進行查詢操作時,用戶向存儲節點發送查詢請求,存儲節點會返回查詢到的記錄項以及查詢路徑,用戶根據查詢路徑以及區塊頭信息,可以驗證查詢結果的正確性;
•區塊鏈層:顯示的是區塊鏈的“世界狀態”,上層應用可以據此對區塊鏈數據進行查詢操作;
•應用層:是最上層,可以對查詢到的數據進行進一步的分析處理.針對這一框架,本文重新定義了數據庫中的數據結構以及數據操作,并提出了MerkleRBTree索引,基于哈希指針構建不可篡改的索引,在保證不可篡改的前提下實現高效查詢.系統中數據的操作定義如下.
•增加記錄:數據在初次添加時,數據擁有者指定可以進行數據寫操作的公鑰,生成權限鎖定腳本,然后用自己的私鑰對該數據進行簽名;
•修改記錄:操作者用自己的私鑰對其父記錄進行簽名,然后驗證該簽名是否能夠解鎖父記錄的鎖定腳本,當且只當在解鎖鎖定腳本的情況下,才可以添加一條相同key值的記錄,以此實現對父記錄的修改.其中,權限鎖定腳本只有數據擁有者可以修改.需要說明的是,數據修改與數據防篡改并不沖突,本文中的防篡改指的是對應版本的數據不可改且數據的更改歷史不可改,但是支持數據從較老版本更新到新的版本;
•查找記錄:所有的參與者都可以進行查找操作,查找操作返回最新值為有效值,但是可以通過溯源操作查看該記錄的完整修改歷史;•刪除記錄:數據一旦添加便不可刪除,當數據已經被修改多次,處于非常古老的版本時,為了節約磁盤空間,可以刪除該數據的具體信息,但是該數據的哈希值則需要永久保存.
3區塊鏈式數據模型
3.1已有的區塊鏈系統模型
(1)數據結構
為了能夠較好地理解區塊鏈的結構,我們給出了哈希指針的定義.一個數據項的哈希指針是指將該數據項的內容做哈希操作后得到固定長度的哈希值,同時以該哈希值為key,該數據項的內容為value,將此k-v對存儲于k-v數據庫,則該key即為該數據項的哈希指針.
區塊鏈就是一個個的區塊根據哈希指針首尾相連,每一個區塊一旦形成便不可改變.如圖2所示,區塊分為區塊頭和區塊體兩部分:區塊頭包括版本號、前一區塊哈希指針(由前一區塊頭數據哈希得到)、區塊形成時的時間戳、區塊體中交易自下而上哈希得到的Merkle根以及用于工作量證明的隨機數和目標哈希;區塊體中保存著區塊中的所有交易記錄.
如圖3所示,交易(transaction)包含版本號(nVersion)、交易輸入(TxIn)、交易輸出(Txout)以及交易時間(nLockTime).其中:交易輸入包含其要花費的交易輸出(preout)以及鎖定腳本(ScriptSig),并且當且僅當SicriptSig是上一個輸出中ScriptPubk對應的私鑰簽名時才被認為是有效的;交易輸出指定該筆交易的輸出金額(nValue),以及收款人的公鑰(ScripPubk).數字簽名技術[17]保證每筆交易被支付到一個公鑰里,然后只有擁有私鑰的人才能花費掉這筆交易.
(2)數據讀寫流程
對于數據的存儲管理,在寫入數據時,每個區塊的數據操作流程如下.
1)收集交易.將未寫入到區塊內的交易數據進行正確性檢查(包括格式檢查以及雙花檢查),并將有效的交易數據收集在集合(MapTransaction)中,其中,MapTransaction只存放在內存中,其內存放了從交易哈希到交易的map映射;
2)創建區塊.將MapTransaction中的數據添加到區塊體中;之后運行PoW機制,搜索合適的隨機數值,使得區塊頭的哈希值小于目標哈希,從而證明該區塊有效,即挖礦成功并獲得獎勵;
3)存儲區塊.在網絡上將該區塊廣播,在本地將該區塊順序存儲在本地磁盤文件(blk000x.bat)中;
4)更新區塊索引(CblockIndex).在k-v數據庫中更新CblockIndex,CblockIndex記錄著區塊的磁盤存儲位置以及該區塊的前驅和后繼區塊,根據區塊索引,能夠得到區塊鏈的世界狀態;
5)更新交易索引(TxIndex).TxIndex存儲在k-v數據庫中,包含每一筆交易的磁盤存儲位置以及交易的后繼交易(以該交易作為輸入的交易).后繼交易初始為空,標識該交易是未花費的,當該交易被花費后更新其后繼交易,也是根據該標識位判斷交易是否被雙花;
6)將寫入到磁盤的交易數據從MapTransaction中移除.
在讀取數據的時候,必須要提供要讀取數據的hash值,根據hash值,先在內存中的MapTransaction中查找;如果沒有查找到,則根據hash值到k-v數據庫中查找對應索引信息TxIndex;最后,根據TxIndex在磁盤文件blk000x.bat中讀取到數據.
(3)已有模型存在的不足
已有的模型利用數字簽名技術以及MerkleRoot來保證數據不可篡改和數據安全,但是其交易數據結構固定,只能處理固定結構的交易數據,不能處理一般數據,不適合傳統數據庫中的數據處理,缺少一般性;在進行數據讀寫操作時,只能夠根據數據的hash值進行處理,在不知道數據hash值的情況下,無法進行數據查詢操作.
相關期刊推薦:《軟件學報》創刊于1990年,由中國科學院軟件研究所和中國計算機學會聯合主辦。是一本刊登計算機軟件各領域原創性研究成果的期刊,所刊登的論文均經過嚴格的同行專家評議。刊登反映計算機科學和計算機軟件新理論、新方法和新技術以及學科發展趨勢的文章,主要涉及理論計算機科學、算法設計與分析、系統軟件與軟件工程、模式識別與人工智能、數據庫技術、計算機網絡、信息安全、計算機圖形學與計算機輔助設計、多媒體技術及其他相關的內容。
SCISSCIAHCI