999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于智能合約的以太坊可信存證機制

2019-08-01 01:54:12曹迪迪陳偉
計算機應用 2019年4期

曹迪迪 陳偉

摘 要:針對以太坊平臺提供的數據管理功能簡單且存在低吞吐率和高延遲的問題,提出一種基于智能合約的以太坊可信存證機制。首先針對以太坊平臺暴露的數據管理問題提出一個基于智能合約的以太坊可信存證框架,然后通過集中化數據統一處理、認證數據分布式存儲以及高效動態取證這幾個方面闡述所提機制的框架和實現,最后通過基于智能合約的系統開發表明了該機制的可實現性。實驗及分析結果表明,該方法與傳統關系數據庫存證相比,增加了處理可信性、存儲可信性和訪問可信性;與區塊鏈存證相比,豐富了數據管理功能、降低了區塊存儲成本、提高了存證效率。

關鍵詞:以太坊;智能合約;區塊鏈;可信存證

中圖分類號:TP311; TP393.08

文獻標志碼:A

文章編號:1001-9081(2019)04-1073-08

Abstract: Aiming at the problem that Ethereum platporm has simple data management function and poor performance of low throughput and high latency, a trusted storage mechanism based on smart contract in Ethereum was proposed. Firstly, a framework of trusted storage based on smart contract was proposed for solving data management problem exposed in Ethereum. Secondly, the framework and implementation of the proposed mechanism were expounded from the aspects of centralized data processing, authenticated data distributed storage and dynamic forensics. Finally, the feasibility of the mechanism was proved by the system development based on smart contract. The experimental and analysis results show that compared with the traditional relational database storage, the proposed method increases processing credibility, storage credibility and access credibility; compared with blockchain storage, it enriches data management function, reduces the cost of block storage and improves the efficiency of storage.

Key words: Ethereum; smart contract; blockchain; trusted storage

0?引言

區塊鏈(Blockchain)是一種基于數據加密、時間戳、分布式共識等機制實現去中心化的分布式數據管理技術,具有不可篡改、可追溯、高可信和高可用的特點。區塊鏈的概念最早是在中本聰提出的比特幣(Bitcoin)這一虛擬貨幣中體現,并隨著比特幣的快速發展得到了應用[1]。隨后,以太坊(Ethereum)區塊鏈平臺以創建一個永不停止、無審查、自動維護的去中心化的世界計算機為愿景而被提出[2],不僅支持加密貨幣交易,即內置了類似于比特幣的以太幣(Ether),而且提供了圖靈完備的編程環境,因而可以通過智能合約(Smart Contract)實現去中心化應用程序(Decentralized APP, DAPP)。目前以太坊已擁有超過4200萬個賬戶,部署了超過60萬個智能合約,基于以太坊的DAPP也已經超過1000例[3]。以太坊平臺提供了相對完善的區塊鏈開發與應用基礎,也推動了新問題的發現與研究。

中本聰最早設計區塊鏈是為了實現虛擬加密貨幣的交易,區別于傳統的數據庫管理系統,它只能提供有限的數據管理服務[4];同時,區塊鏈中使用的共識機制是基于工作量證明(Proof-of-Work, PoW)的,高度依賴節點算力,復雜度與消耗成本較高,導致系統吞吐率較低、延遲較長[5]。因此,如何提供豐富的數據處理、存證和取證功能,實現高性能的數據管理系統,成為了當前區塊鏈領域研究的熱點問題之一。

本文結合以太坊平臺的特征,構建一種基于智能合約的可信存證機制,主要包括集中化數據統一處理、認證數據分布式存儲與高效動態取證等內容,以實現電子數據在以太坊上的存證交易與還原驗證,保證數據的真實唯一、可溯源與防篡改。從數據存證角度來看,區塊鏈的本質是一個構建在對等網絡(Peer-to-Peer Network)上的分布式賬本,能夠保證存證數據的原始性、真實性和完整性,適合應用于司法鑒定、審計、公證、仲裁等權威機構,一旦產生糾紛,權威機構可直接從節點中取證、核證,更有利于司法落地。

1?相關研究

已有的區塊鏈研究多圍繞加密貨幣[6]、協議[7]、架構[8]、安全[9]和發展前景[10]角度進行探討,而本文從可信存證的角度疏通以太坊平臺與數據管理功能之間的聯系渠道,實現以智能合約為數據存儲方式的可信存證機制,并分析數據的存儲編碼過程,提供兩種取證方式及核證還原方法,聚焦于系統的處理可信性、存儲可信性和訪問可信性。

處理可信性是指數據處理的正確性,要求事務的并發控制,系統需要保存數據的最終狀態。傳統的數據庫管理系統有諸多的基本要求,其中之一就是處理可信性,但是傳統的數據庫管理系統在某種程度上是集中式地保持事務的原子性、一致性、隔離性和耐久性,關于這方面已有成熟并相對高效的技術[11-12]。在數據管理方面雖然已有較多的關于分布式系統中共識機制的研究[13-14],但是受制于性能,共識機制通常只應用于主控節點的選擇上,一般情況下不會直接應用于事務處理[15]。因此,如何確保數據的處理可信性,同時兼顧事務處理的高效性,是以太坊這一去中心化對等網絡平臺亟須解決的問題之一。

存儲可信性是指數據在存儲前后應保持一致性,數據處理過程中不會發生數據丟失或被篡改的情況。這就要求系統一方面既要保證在傳統數據庫管理系統[11]和事務處理[12]中所要求的事務持久性,另一方面又要在系統發生故障或被惡意攻擊時,仍能保證數據在存儲前后的一致性和正確性。目前基于區塊鏈技術的可信存證方案大多是在原有的存證機制上引入區塊鏈思想,Zhang等[16]提出了一個基于區塊鏈的云取證流程源,將云系統的存在證明記錄通過區塊鏈技術進行加密簽名,增強云取證的可信度。Bahga等[17]基于工業物聯網(Internet of Things, IoT)平臺向云計算制造引入區塊鏈理念,使得不受信任的對等網絡不需要可信第三方,用戶能夠按需訪問制造資源。但該類文獻中沒有涉及在以太坊平臺上通過智能合約進行可信存證,且缺少對數據的取證與驗證環節。

訪問可信性是指數據存證后的可審計及可追溯。在分布式對等網絡環境中,為了確保數據被訪問時是準確可靠的,需要在驗證數據的歷史狀態時,進行一些查詢和事務的相關處理[18]。在傳統的數據庫管理系統中,數據的當前狀態存儲于數據庫當中,而數據庫日志通常記錄的是數據的存儲過程和歷史數據,僅用于發生故障時恢復系統,但不能直接提供查詢服務[11],因此,傳統的數據管理技術無法直接應用于這一場景。數據溯源在科學數據管理中有著廣泛的應用,例如集中式數據庫或對等的分布式環境[19],但不能直接應用于以太坊的平臺場景。

2?以太坊基礎

2.1?區塊數據結構

區塊鏈的兩大應用:一是比特幣,二是引入了智能合約的以太坊。二者在數據結構的具體細節上雖有差異,但整體上基本相同,都是以區塊為單位的鏈式結構,分為區塊間的鏈式結構與區塊內的數據結構[20]。如圖1所示,每個區塊由區塊頭和區塊體兩部分組成,頭信息是區塊的元數據,用于驗證區塊,并與其父區塊和子區塊建立關聯。通常,區塊頭中存放了父區塊哈希(Parent Block Hash)、時間戳(Timestamp)、隨機數(Nonce)、難度目標(Difficulty)、Merkle根(Merkle Root)等。體信息則是交易的序列,存放了自前一區塊之后發生的多筆交易(Transaction)。

區塊鏈的兩個哈希結構保障了數據的不可篡改性,即區塊鏈表和Merkle樹。區塊鏈表基于父區塊哈希、隨機數、難度目標等數值,通過雙SHA256哈希運算得到區塊哈希值[21],這就保證了區塊之間的環環相扣。Merkle樹是一種樹形數據結構,其非葉子節點是所有子節點的哈希值,葉子節點是區塊的交易哈希,數量為偶數。Merkle樹節點從下往上,兩兩成對,將組合哈希值作為新的哈希值,即新的樹節點。重復該過程,直到僅存在一個節點,也就是根節點,而根節點的哈希值就認為是整棵Merkle樹的簽名值。以太坊不同于比特幣的地方在于以太坊擁有針對交易哈希的交易Merkle根,以及針對賬戶狀態數據的狀態Merkle根(State Root)[20]。除此之外,以太坊塊頭還含有收據Merkle根(Receipts Root),用于交易執行日志。以太坊是使用MPT(Merkle Patricia Tree)來計算Merkle根的,其本質是Merkle樹與前綴樹的結合,提供查找能力,查找路徑為以太坊的賬戶地址,從其樹根向下查找到葉子節點中賬戶的狀態數據。

2.2?以太坊賬戶與交易

以太坊是基于賬戶的模型,能夠針對狀態數據處理復雜的業務邏輯。以太坊賬戶由一個20字節的地址構成,包含四個部分,即:用于確定每筆交易只能被處理一次的隨機數,賬戶當前的以太幣余額,賬戶的合約代碼,以及默認為空的賬戶存儲。其中以太幣是以太坊內部的加密燃料,用于支付交易或以太坊虛擬機(Ethereum Virtual Machine, EVM)中的計算服務費用,目前市值已達570美元[3]。

一般而言,以太坊賬戶分為兩種類型:一是外部賬戶(External Owned Account, EOA),二是合約賬戶(Contract Account)。兩者區別在于外部賬戶由用戶控制,而合約賬戶由可執行代碼,即合約代碼控制。以太坊的賬戶包含四個部分,分別是Nonce、Balance、StorageRoot和CodeHash。Nonce是確定每筆交易只能被處理一次的隨機數,用于防范區塊鏈的重放攻擊,區別在于外部賬戶的Nonce表示從該賬戶地址發送的交易序號,合約賬戶的Nonce表示該賬戶創建的合約序號;Balance代表的是賬戶的以太幣余額;StorageRoot是Merkle樹的根節點哈希值,默認為空;CodeHash表示賬戶EVM代碼的哈希值,區別在于外部賬戶的CodeHash是一個空字符串的哈希值,合約賬戶的CodeHash就是合約代碼的哈希值。

以太坊交易被定義為存儲從EOA發出的消息的簽名數據包,包含三種類型,即以太幣轉賬交易、部署智能合約與調用智能合約。其中,當且僅當合約變量值發生改變時,調用合約才屬于交易。以太坊交易包含七個參數,分別是To、Value、gasLimit、gasPrice、Nonce、Data及Signature。To代表了20字節的交易接收方地址,如果交易屬于部署智能合約,則To為空;Value表示支付交易的以太幣費用,單位是Wei;gasLimit指Gas限制額,用于防止代碼的指數型爆炸和無限循環;gasPrice是每一計算步驟需要支付礦工的費用;Nonce是用于確定每筆交易只能被處理一次的計數器,防止重放攻擊;Data是調用智能合約時的消息數據,或者是智能合約的二進制代碼;Signature是確認發送者的橢圓曲線數字簽名算法(Elliptic Curve Digital Signature Algorithm, ECDSA)哈希值。

2.3?智能合約

智能合約是定位于以太坊其中一個特定地址上的代碼(其功能)和數據(其狀態)的集合[2],是一段計算機程序,通過調用智能合約,依照合約內部規則執行交易,訪問合約狀態數據,從而實現DAPP。因此智能合約的存在擴展了區塊鏈的功能,豐富了區塊鏈的上層應用[22]。

智能合約首先由以太坊自定義的Solidity、Serpent等圖靈完備的腳本語言編寫,編譯為以太坊特有的二進制格式以太坊虛擬機字節碼后,可將部署后的合約存放在區塊鏈上,廣播至區塊鏈的其他網絡節點上,之后合約每次被調用時才被EVM加載運行。智能合約內部包含了表示“賬戶地址”的address數據類型,相應地,外部賬戶的賬戶地址常被用來進行虛擬貨幣的交易,合約賬戶的賬戶地址常用于調用合約。智能合約的Gas消耗是根據執行時所占用的CPU和內存來計算的,Gas一旦耗盡,合約自動停止執行,從而有效避免了合約死循環與無效交易的發生[20]。

一個智能合約可以由外部賬戶來部署,也可以由合約賬戶來部署,部署成功后,以太坊上的任何用戶都可以調用該合約進行交易。從數據的可信性角度來看,賬戶調用智能合約的歷史操作將被記錄在區塊中的交易信息中,調用過程和結果可審計、可追溯。

3?基于智能合約的可信存證

由于區塊鏈技術所能提供的數據管理功能較為簡單,且其共識機制的計算量耗費巨大,本文通過結合智能合約的方法來達到更好的系統性能。如圖2所示的系統架構,本文提出的基于智能合約的可信存證系統可分為三大部分:1)集中式數據統一處理。為提高系統的處理可信性,本文對需要存證的電子數據進行標準化和集中化的收集與處理,靈活、高效快速、一致地處理數據有助于訪問和使用數據來開展以太坊存放交易與應用。

2)認證數據分布式存儲。本文在以太坊平臺上,通過智能合約定義交易邏輯及訪問狀態數據的業務規則,將存證數據封存在以太坊交易屬性信息中,在區塊鏈中不僅記錄了交易結果,而且保存了智能合約本身。隨著區塊鏈各個節點間的同步,確保了不同節點下智能合約的一致性與正確性,也保證了系統的存儲可信性。

3)動態數據取證。引入復雜的智能合約后,以太坊平臺所管理的數據隨著規模擴大而越來越多,基于區塊內的事務之間的Merkle樹結構以及智能合約方法來實現數據的取證查詢,與此同時可以與原數據的處理結果進行比對,保證數據存證前后的一致性以及系統的訪問可信性。

3.1?集中式數據統一處理

通常需要進行可信存證的數據多為具有法律效益或其他重要用途的文件,包括但不限于醫療行業的電子病歷、健康檔案、問診記錄、知情同意書,金融行業的證券基金交易,旅游行業的出游人信息、出游合同,家政行業的簽約合同、服務照片,產權行業的版權證明、品牌保護、打假維權,等等。數據類型包括但不限于辦公文件(doc、txt、 pdf、 ppt、xls、rtf)、圖片(bmp、 jpg、 png、gif)、音頻(wav、mp3、midi)、視頻(avi、rmvb、mov、wmv)等。因此,這就涉及到了對不同文件格式數據的統一處理。

以太坊的區塊鏈與索引是以Key-Value數據組織形式存儲在內部的LevelDB數據庫[5],如果直接將以太坊作為數據庫來使用,這樣可以保證數據從一個以太坊節點傳送到另一個節點時,傳送的數據、發送者、接收者和傳送時間戳能夠永久保存,且永久不可變。但是這種方式有明顯的缺陷:一是無法處理不同文件格式的數據;二是無法提供查詢功能;三是區塊鏈作為數據庫來使用效率很低,存儲成本也很昂貴,系統吞吐率極低,單個確認寫入所產生的延遲時間卻足足有十幾分鐘,容量更是達到幾十GB[11]。此外,隨著節點數量的增加,工作量、延遲時間以及容量上都無法與傳統關系數據庫系統相比。

因此,本文考慮在基于智能合約進行存證之前,先對不同文件格式的數據進行集中式統一處理,利用傳統數據庫統一最小化數據,將數據的標識符散列存儲至智能合約的存儲區。這種方式能夠最大限度地降低了區塊鏈存證成本,提高了系統效率,既保證了數據永久抗干擾,又補充了以太坊存證的查詢功能。

本文選用MongoDB數據庫進行集中式數據統一處理。與其他分布式數據庫相比,MongoDB具有文檔型存儲的優勢,任何文件格式的數據都會以二進制的Json格式Bson存儲[23],既解決了文件格式不同的問題,又能夠最大限度上減少文件所占用的空間,提高數據傳輸效率,也便于后臺服務器與前端的交互。對于文件存儲驅動,本文選擇的是GridFS,將上傳的文件按照256kb的大小分割塊,塊集合存儲于fs.chunks,文件元數據存儲于fs.files。如圖2所示的系統架構,原始文件經過MongoDB統一處理后會得到很多屬性信息,例如表1給出的一個圖片證據的處理結果,而需要存儲進區塊鏈中的數據僅為文件ID與MD5值,大幅地降低了存證成本,更易于訪問和使用數據。

類似地,BigchainDB[24]項目也是使用MongoDB處理數據,但它的查詢功能大部分直接使用MongoDB的API來完成,這種方式對黑客來說無疑是一種入侵通道。相比較而言,本文的數據查詢功能依賴于智能合約,保證了系統的可信性與安全性。

3.2?認證數據分布式存儲

以太坊的智能合約使網絡在功能上類似計算平臺,系統借助以太坊建立對等網絡,合約一旦被共識節點執行,則以太坊中的節點都會遵循相應的規則,可以實現認證數據的分布式存儲,同時確保存儲可信性。具體地,認證數據分布式存儲的步驟可以分為三步:以太坊賬戶的創建、智能合約的部署交易和智能合約的調用。

3.2.1?創建以太坊賬戶

對于以太坊集成開發環境(Integrated Development Environment, IDE),本文選擇的是Geth(Go ethereum),它是以太坊基金會提供的運行以太坊節點的Go語言客戶端程序[25],可與智能合約交互開發DAPP,擴展區塊鏈功能。由2.2節可知以太坊具有外部賬戶和內部賬戶,這里的創建是指在以太坊客戶端上創建外部賬戶,而內部賬戶的創建是通過智能合約的部署來實現。在Geth中本文設置gasLimit、Difficulty、Nonce等參數創建創世區塊,在當前節點創建數據存放地址,ChainData存放區塊信息,KeyStore存放當前節點下的所有賬戶文件,設置網絡監聽端口及用于區分不同網絡的唯一標識ID后即可啟動以太坊節點,通過personal.newAccount命令創建以太坊的外部賬戶。

3.2.2?部署智能合約

由2.2節可知,部署智能合約屬于以太坊交易,由外部賬戶來部署,部署成功會返回合約地址與合約賬戶,實現合約賬戶的創建。具體地,部署智能合約在本文中包括以下4個步驟:步驟1?使用Solidity編寫可信存證合約代碼。本文在智能合約中使用一個非固定大小字符串類型的狀態變量來聲明進行過集中式統一處理的存證數據,聲明存證函數用來存儲變量值,輸入為字符串變量,交易執行成功后返回交易哈希。再聲明取證函數用來獲取變量值,輸出為存證函數的輸入,返回區塊中最新存儲的數據。該合約允許所有人在合約中存儲非固定大小的字符串,該數據可以被所有人訪問,且沒有可行的方法阻止用戶發布。所有人也可以再次調用存證函數,傳入不同的數據覆蓋原字符串,但是之前的數據仍會存儲在區塊鏈的歷史區塊中,無法篡改或抹去。如果想添加訪問限制,可以設置合約函數確保只有特定用戶可以訪問存證函數。

步驟2?編譯智能合約。本文使用Remix在線編譯器將智能合約編譯為EVM字節碼,獲取合約二進制碼和應用程序二進制接口(Application Binary Interface, ABI)。ABI描述了合約函數的調用簽名和返回值,是智能合約進行交互的標準方法,包括區塊鏈外部與合約之間的交互和以太坊已存在合約之間的交互。

步驟3?啟動以太坊節點。

步驟4?部署智能合約。創建合約對象,聲明EVM字節碼,部署交易來創建合約賬戶。該筆交易包含了外部賬戶地址、智能合約內容、合約賬戶地址這三個關鍵信息,其中合約賬戶的生成是由部署者外部賬戶和發送的交易數作為隨機數輸入,通過Kecca-256加密算法創建產生的。外部賬戶交易會經歷5個步驟,即設置礦工賬戶、解鎖賬戶、發送交易、啟動挖礦及查看賬戶,其中發送交易后交易池中會顯示正在等待被打包的交易次數,礦工消耗一定Gas挖礦成功后生成一個新區塊,交易信息存儲在新區塊中,字節碼通過Geth的遠程過程調用(Remote Precedure Call, RPC)發送至以太坊網絡,經過全網驗證后,寫入到Geth管理的區塊鏈中。

3.2.3?調用智能合約

智能合約的調用方法有三種,以本文合約的存證方法SetData為例,分別是:SetData.sendTransaction、SetData.call和SetData()。三種調用方法的區別在于:第一種會創建新交易,交易被打包后返回一個交易哈希值廣播至網絡中,會造成Gas的消耗;第二種方法本質是一個本地調用,不會向區塊鏈網絡廣播任何消息,它的返回值取決于合約中函數的具體代碼,不會消耗Gas;第三種是若合約函數的代碼有constant標識,則執行call的本地調用操作,若沒有constant標識,則執行sendTransaction操作。本文調用智能合約的方法使用的是第三種,且代碼中沒有設置constant標識,完整的部署與調用流程如圖3所示。

由2.2節可知,調用智能合約時如果合約狀態值發生了更改,那么該次調用事屬于交易,需要礦工消耗Gas進行挖礦打包交易。在以太坊平臺上聲明智能合約ABI,獲得合約實例,此時輸入合約名稱可返回在代碼中定義的合約規則,調用SetData()方法,參數添加進行過集中式統一處理的存證數據,交易完成后將返回交易哈希值,用于后文定位區塊及查詢訪問存證數據。

3.3?動態數據取證

本文提供兩種查詢取證方式:一是利用智能合約中定義的取證函數,返回最新存入區塊的數據;二是借助智能合約的存儲編碼規則,遍歷以太坊的區塊信息和交易信息,逆向解碼分析展示數據。

對于第一種取證方式,合約中聲明的取證函數返回值是存證函數的輸入,沒有更改合約狀態值,所以這種智能合約調用不屬于交易,不會消耗Gas,在以太坊平臺上調用取證函數即可獲取到最新存入區塊的數據,但是這種方式無法獲取其他區塊中的數據,因此本文提出第二種取證方式。

第二種取證方式基于以太坊內部的存儲編碼規則。由2.1節可知,以太坊計算Merkle根使用的是MPT,它是以太坊用來將Key-Value進行緊湊編碼的一種數據組織形式,任何存儲數據的細微變化都會導致MPT的根節點發生變更,因此可以校驗數據的一致性。MPT包含3種節點類型[26],即葉子節點、擴展節點和分支節點。葉子節點用于數據的存儲,其Key對應數據的16進制編碼,Value存儲的是數據的遞歸長度前綴(Recursive Length Prefix, RLP)編碼[27];擴展節點處理具有共同前綴的數據,Key為共同前綴的16進制邊,Value為擴展出的分支節點的哈希值;分支節點處理沒有共同前綴的數據,Key為分叉節點哈希值數據,Value一般為空,否則為終止擴展節點的Value值。其中,RLP編碼是以太坊中數據序列化的一個主要編碼方式,可以將任意的嵌套二進制數據進行序列化,具有5個規則,如表2所示。

以太坊以Key-Value形式來存儲數據,賬戶以哈希散列和RLP數據編碼為基礎,結合智能合約對數據對象進行映射和轉換,將數據按照編碼規則映射為MPT,所有節點的Key和Value構建為一個RLP列表,計算根節點唯一證明并保存于以太坊賬戶中。綜上,以太坊采用如下5個編碼規則來將智能合約數據結構映射為Key-Value形式:規則1?智能合約中所有數據結構都會被映射為Key-Value的形式,其中Key和Value均是無符號32字節的數據。

規則2?存儲成員依照定義位置從零開始索引編排,每次累加數值一,作為對應的Key值存儲。

規則3?對于固定長度的數據類型,例如enum、uint8、uint16、uint32等,Value值按照32字節右對齊的規律存儲具體的成員屬性值。如果長度不滿足32字節,則將相鄰的存儲成員進行壓縮合并存儲Value值。

規則4?對于可變長度的數據類型,例如string、bytes等,Value值按照32字節左對齊的規律存儲;

規則5?如果可變長度類型變量的數據長度大于31字節,則拆分為多條記錄來存儲,第一條記錄的Key值為其索引編號,Value值為數據長度再累加1,數據內容按照32字節大小拆分為多條記錄,每條記錄的Key值為第一個Key值的SHA3哈希值再累加1,Value值對應拆分的數據內容。

基于上述編碼規則,以太坊將智能合約的數據對象映射轉換為Key-Value

形式封存在交易區塊當中,能夠標識區塊中是否含有交易信息的字段是transaction.length,若不為0,則該區塊存有交易,此時以區塊信息中的交易哈希值為索引可獲取區塊體中的交易序列。區塊體中的交易信息包含6個字段,分別是區塊號、區塊哈希值、交易哈希值、交易發送者、交易接收者以及Input字段。

Input字段包含合約的函數選擇器與參數編碼,記錄了編碼后的存證數據。Input的前4個字節指定了函數選擇器,是合約函數的KECCAK256算法哈希值[28];接下來的32個字節為參數編碼的第一個參數,表示非固定大小字符串的字節偏移量;再接著32個字節為參數編碼的第二個參數,是存證數據的字符串長度的十六進制編碼;參數編碼的第三個參數所占字節是32的倍數,左對齊輸出,若數據長度不足32字節的倍數,則在數據右邊補0擴展到32字節的倍數。此時對Input字段參數編碼的第三個參數進行ASCII解碼獲取到的就是該交易信息中存儲的合約信息,即存證數據。

為辨別存有存證數據的區塊,本文在與用戶操作交互的應用層,采用B/S架構通過Node.js的Express框架將用戶與以太坊可信存證系統相互連接,建立前后端交互,后端與Geth、MongoDB相連,前端循環遍歷以表格形式輸出當前以太坊節點中的所有區塊信息,提供可交互式用戶界面。對區塊體的交易序列添加索引輸出自前一區塊之后發生的多筆交易。例如表3給出了一個圖片證據存儲在以太坊中的交易信息,該交易位于實驗節點中第323個區塊上,Input字段記錄了經過集中式統一處理后得到的文件ID與MD5值。

解碼得到的文件ID與MD5值后,通過MongoDB使用GridFS以file_id為索引查詢文件,查詢成功返回文件名稱,再通過mongofiles的get命令下載文件到本地,完成對原始數據的還原。而以太坊中保存的MD5值可與數據庫中存儲的MD5值作比較,驗證訪問可信性,驗證數據在存證前后的真實唯一、未篡改。

綜上,本節實現了集中式數據統一處理、智能合約存證、以太坊取證及核證的過程,基于智能合約的可信存證相對于傳統的關系數據庫存證具有三大優勢:1)分布式完整。傳統數據庫存證只是將電子數據以備份的形式存放在服務器上,傳輸過程中數據易破損、易斷點、易篡改,而基于智能合約的可信存證采取區塊鏈技術,數據全鏈條每個節點都有存證,保證了存證信息的完整性和真實性,實現了分布式存證服務。

2)不可篡改。傳統數據庫中的電子數據因服務器問題或機制不完全容易被篡改,而基于智能合約的可信存證在數據固定前采用哈希算法進行了校驗值計算,數據固定過程中運用了時間戳機制、加密機制及分布式共識機制,數據一經存儲,任何一方也無法篡改。

3)安全可信。傳統數據庫存證是第三方本地保存的電子數據,屬于自證證據,數據的法律效力容易遭到質疑,而在以太坊平臺上基于智能合約的可信存證適用于司法仲裁機構,數據全鏈條每個節點都有存證,數據安全可信,權威機構可直接從節點中獲取驗證證據,將存證數據視為直接證據,不需要第三方機構再出具證明。

4?可信性分析

本文在以太坊平臺上基于智能合約進行可信存證,指出所有的數據及操作都被永久地記錄在區塊鏈數據區塊供用戶訪問。這些存證數據所在的數據區塊被同步存儲在系統的每一個參與運算的節點中,所有這些節點構成了可信存證系統及其堅韌的分布式數據管理系統,任何一個節點上的數據被破壞可以通過同步節點或訪問其他哈希節點來驗證確認;同時,任何一個節點上如果數據區塊被惡意篡改或刪除,都不會影響整個可信存證系統的正常運轉。因此,本文提出的基于智能合約的可信存證系統很好地解決了區塊鏈上數據管理效率低延遲長的問題,豐富了數據處理、存證和取證功能,下面對系統的可信性進行分析。

4.1?處理可信性

處理可信性是指數據處理的正確性,系統需要保存數據的最終狀態。在傳統的數據庫管理系統中,用戶通過提交事務來處理數據,事務常由過程型語言與SQL語句組合共同構成,事務執行的過程或結果通過日志進行記錄。區塊鏈與傳統數據庫管理系統中的日志在邏輯功能上有所相似,但不同之處在于,比特幣區塊鏈僅支持挖礦與轉賬功能,功能上更傾向于數字貨幣的交易,對于數據的處理具有很大的局限性。

以太坊的智能合約提供了區塊鏈中的數據處理功能,但如果直接將以太坊作為傳統的數據庫系統來處理數據,會有無法處理不同文件格式、無法提供查詢功能及存儲成本昂貴效率低下的缺陷。

因此,本文借助MongoDB數據庫對存證數據進行集中式統一處理,將任意文件格式的數據分割為塊,塊集合存儲于fs.chunks,文件元數據存儲于fs.files,提取數據的ID和MD5值進行后續的分布式智能合約存儲。MD5算法具有壓縮性、容易計算、抗修改性、弱抗碰撞和強抗碰撞的特點,如果在分布式存儲的過程中數據被某些人作了改動,那么得到的MD5值將有很大變化。此外,原始文件經過MD5加密后為32位的字符串,能夠給定固定大小的空間存儲、傳輸和驗證,大幅地降低了存證成本,也提供了通道驗證數據的完整性,確保系統的處理可信性。

4.2?存儲可信性

存儲可信性是指數據存儲的正確性,即使系統在存儲、通信過程中發生故障,甚至被惡意攻擊時,只要數據處理結果被確認,存儲的數據就不被篡改或者丟失。

以太坊平臺整體上可劃分為五個層次,依次為網絡層、共識層、數據層、智能合約層和應用層[4]。在網絡層,以太坊平臺的網絡傳輸協議為完全分布且可容忍單點故障的P2P協議,協議用于節點間傳輸交易數據和區塊數據[5]。節點之間以扁平拓撲結構相互連通,不存在中心化節點,具有平等、自治、分布等特性。在數據傳輸過程中,當相鄰節點監聽到新交易和新區塊時,節點首先會通過工作量證明共識機制或者數字簽名哈希運算等來驗證交易和區塊的有效性,只有驗證順利通過,新交易才能被記錄到正在構建的區塊當中,隨著新區塊的成功構建,也就確保了數據的有效性與可信性。

在共識層,以太坊依賴于工作量證明機制來解決區塊的容錯一致問題。PoW機制能夠保證全網數據的一致性和安全性,它依賴的是節點間的算力競爭,要求每個節點基于自身算力來求解SHA256運算,該運算是一個求解復雜但驗證簡單的計算難題,目的是尋找一個能夠滿足哈希結果小于區塊設定的難度目標的隨機數值[29]。任何一個節點上,如果有人想要惡意篡改某一數據區塊,需要對該區塊及其后續所有區塊重新進行哈希運算,計算出合適的隨機數,構建出一條比當前被公認的區塊鏈主鏈更長的鏈,這個惡意過程所需要消耗的算力超過了整個區塊鏈中正在進行正常挖礦運算的算力總和,因此惡意攻擊的難度和成本很高。PoW機制融合了經濟激勵政策與共識算法,使得以太坊中更多的節點能夠參與到挖礦運算當中,主動性的增強了平臺的可靠性與安全性。

在數據層,以太坊中每個區塊都包含區塊體和區塊頭兩個部分。區塊體存放了當前區塊的所有交易信息,區塊頭記錄父區塊哈希、時間戳、Merkle根等數據,其中父區塊哈希構建了區塊鏈以區塊為單位的鏈式結構,保證了數據數據的不可篡改性,時間戳是該區塊的生成時間,基于交易哈希生成的Merkle根確保了區塊內交易數據的完整性與可信性。因此,區塊鏈特殊的數據結構保證了所有區塊以鏈相連、環環相扣,其中任何一個區塊被篡改,都會引起該區塊后面的所有區塊的連環變化。

在智能合約層,以太坊實現了Casper共識[30]。從前所述,PoW犧牲性能來換取數據的一致性和安全性,針對PoW機制低效耗能的缺陷,以太坊平臺引入權益證明(Proof-of-Stake, PoS)機制[30-31],根據礦工在區塊鏈中擁有的股權來決定其挖礦的難度,當礦工擁有越多的以太幣,越容易找到合適的隨機數,挖礦的整體難度就會越低。以太坊又基于PoS機制提出Casper共識,要求節點必須先鎖定保證金,才可以參與出塊和共識形成,礦工使用保證金對共識結果進行下注,如果投注正確,則可以獲得區塊的記賬權和經濟獎勵。Casper共識通過對保證金的直接控制來約束礦工的行為,具體來說,如果一個礦工做出了任何系統認為是無效甚至是惡意的行為,其預繳的保證金將會沒收,同時也將失去出塊和參與共識的權利。因此,共識機制的存在既提高了以太坊平臺的性能,又保障了數據的一致性和安全性。

4.3?訪問可信性

訪問可信性是指數據存證后的可審計及可追溯。本文提供了兩種訪問方式:一是調用智能合約方法, 二是依據智能合約的編碼規則對交易信息進行解碼,兩種方式都保證了數據被訪問時的正確性。

在數據層,以太坊以Key-Value數據庫存儲索引數據與狀態數據,使得系統可以通過哈希鍵值檢索數據。這與傳統數據庫的預寫式日志非常類似,區塊數據按照日志文件格式存儲,以追加形式寫入,支持數據重放,維護了所有的歷史操作記錄。另外,Merkle樹的結構維護一個區塊內的事務之間的關系,以太坊區塊數據具備了預寫式日志不具備的不可篡改性和可追溯性。

在智能合約層,本文系統中的合約方法提供了查詢操作,無需共識,也不會更改合約狀態值,調用取證函數則就獲取到最新存入區塊的數據。此外,本文依據智能合約的編碼規則還原數據的存儲過程,基于區塊哈希檢索區塊數據,又基于區塊數據中的交易哈希檢索交易數據,通過解碼交易數據中的Input字段來還原存證數據。

在應用層,以太坊除了基于以太幣的數字貨幣交易,還支持去中心化應用,本文基于Node.js語言構建Web前端應用界面,通過JSON-RPC請求對以太坊節點上的智能合約進行部署和調用,支持訪問可信的區塊數據、交易數據和狀態數據,使應用程序擁有良好交互性的用戶界面。

5?結語

本文區別于傳統關系數據庫存證,提出了一種在以太坊平臺上基于智能合約的可信存證系統。存證后數據全鏈條每個節點都有存證,數據分布式完整、不可篡改、安全可信,適合應用于司法鑒定、審計、公證、仲裁等權威機構,可直接從運維的節點中獲取和驗證數據,把存證數據視為直接證據,不再需要第三方機構出具證明。

首先,因為區塊鏈存儲成本較大,為提高存證效率,節省計算費用,本文通過MongoDB的GridFS對數據進行集中式統一處理,提高系統的處理可信性;其次,通過部署和調用智能合約對認證數據進行分布式存儲,確保系統的存儲可信性;最后,通過兩種動態數據取證方法提取文件ID與MD5值來進行數據核證,一是調用智能合約方法,二是根據以太坊數據編碼規則逆向分析交易信息,保證系統的訪問可信性。

在未來的工作中,本研究考慮在智能合約中增加訪問限制,只有特定用戶可以調用合約方法,但仍然允許任何人訪問合約,確??尚糯孀C系統的公開公正。

參考文獻(References)

[1] NAKAMOTO S. Bitcoin: a peer-to-peer electronic cash system [EB/OL]. [2018-05-10]. http://www.academia.edu/download/54517945/Bitcoin_paper_Original_2.pdf.

[2] BUTERIN V. A next-generation smart contract and decentralized application platform [EB/OL]. [2018-05-10]. https://cryptorating.eu/whitepapers/Ethereum/Ethereum_white_paper.pdf.

[3] Etherscan. Ethereum unique address growth chart [EB/OL]. [2018-09-02]. https://etherscan.io/chart/address/.

[4] 錢衛寧, 邵奇峰, 朱燕超, 等.區塊鏈與可信數據管理: 問題與方法[J]. 軟件學報, 2018, 29(1): 150-159. (QIAN W N, SHAO Q F, ZHU Y C, et al. Research problems and methods in blockchain and trusted data management [J]. Journal of Software, 2018, 29(1): 150-159.)

[5] 袁勇, 王飛躍.區塊鏈技術發展現狀與展望[J]. 自動化學報, 2016, 42(4): 481-494. (YUAN Y, WANG F Y. Blockchain: the state of the art and future trends [J]. Acta Automatica Sinica, 2016, 42(4): 481-494.)

[6] TSCHORSCH F, SCHEUERMANN B. Bitcoin and beyond: a technical survey on decentralized digital currencies [J]. IEEE Communications Surveys & Tutorials, 2016, 18(3): 2084-2123.

[7] PASS R, SEEMAN L, SHELAT A. Analysis of the blockchain protocol in asynchronous networks [C]// Proceedings of the 2017 Annual International Conference on the Theory and Applications of Cryptographic Techniques. Berlin: Springer, 2017: 643-673.

[8] GERVAIS A, KARAME G O, WUST K, et al. On the security and performance of proof of work blockchains [C]// Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM, 2016: 3-16.

[9] ATZEI N, BARTOLETTI M, CIMOLI T. A survey of attacks on Ethereum smart contracts (SoK) [C]// Proceedings of the 2017 International Conference on Principles of Security and Trust. Berlin: Springer, 2017: 164-186.

[10] LIN I C, LIAO T C. A survey of blockchain security issues and challenges [J]. International Journal of Network Security, 2017, 19(5): 653-659.

[11] GARCIA-MOLINA H. Database Systems: the Complete Book [M]. New Delhi: Pearson Education India, 2008: 555-615.

[12] GRAY J, REUTER A. Transaction Processing: Concepts and Techniques [M]. Amsterdam: Elsevier, 1992: 22-40.

[13] TSENG L. Recent results on fault-tolerant consensus in message-passing networks [C]// Proceedings of the 2016 International Colloquium on Structural Information and Communication Complexity. Berlin: Springer, 2016: 92-108.

[14] LYNCH N A. Distributed Algorithms [M]. Amsterdam: Elsevier, 1996: 53-73.

[15] BAILIS P, FEKETE A, FRANKLIN M J, et al. Coordination avoidance in database systems [J]. Proceedings of the VLDB Endowment, 2014, 8(3): 185-196.

[16] ZHANG Y, WU S, JIN B, et al. A blockchain-based process provenance for cloud forensics [C]// Proceedings of the 2017 3rd IEEE International Conference on Computer and Communications. Piscataway, NJ: IEEE, 2017: 2470-2473.

[17] BAHGA A, MADISETTI V K. Blockchain platform for industrial Internet of things [J]. Journal of Software Engineering and Applications, 2016, 9(10): 533-546.

[18] VU Q H, LUPU M, OOI B C. Peer-to-Peer Computing: Principles and Applications [M]. Berlin: Springer, 2009: 229-277.

[19] CHENEY J, CHITICARIU L, TAN W C. Provenance in databases: why, how, and where [J]. Foundations and Trends in Databases, 2009, 1(4): 379-474.

[20] 邵奇峰, 金澈清, 張召, 等.區塊鏈技術: 架構及進展[J]. 計算機學報, 2018, 41(5): 969-988. (SHAO Q F, JIN C Q, ZHANG Z, et al. Blockchain: architecture and research progress [J]. Chinese Journal of Computers, 2018, 41(5): 969-988.)

[21] MERKLE R C. A digital signature based on a conventional encryption function [C]// Proceedings of the 1987 Conference on the Theory and Application of Cryptographic Techniques. Berlin: Springer, 1987: 369-378.

[22] LUU L, CHU D H, OLICKEL H, et al. Making smart contracts smarter [C]// Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM, 2016: 254-269.

[23] MongoDB. What is MongoDB? [EB/OL]. [2018-09-05]. https://www.mongodb.com/what-is-mongodb/.

[24] BigchainDB. Meet BigchainDB, the blockchain database [EB/OL]. [2018-09-05]. https://www.bigchaindb.com/.

[25] Github. Go Ethereum [EB/OL]. [2018-08-08]. https://github.com/ethereum/go-ethereum/wiki/.

[26] BONNEAU J. EthIKS: using Ethereum to audit a CONIKS key transparency log [C]// Proceedings of the 2016 International Conference on Financial Cryptography and Data Security. Berlin: Springer, 2016: 95-105.

[27] Github. RLP encoding of Ethereum [EB/OL]. [2018-09-08]. https://github.com/ethereum/wiki/wiki/RLP/.

[28] BERTONI G, DAEMEN J, PEETERS M, et al. Keccak sponge function family main document [EB/OL]. [2018-05-10]. https://pdfs.semanticscholar.org/0978/de0c295f158cd5afe3a145a 2e1fe6497eec7.pdf.

[29] EYAL I, SIRER E G. Majority is not enough: bitcoin mining is vulnerable [J]. Communications of the ACM, 2018, 61(7): 95-102.

[30] 楊保華, 陳昌.區塊鏈原理, 設計與應用[M]. 北京: 機械工業出版社, 2017: 93-97. (YANG B H, CHEN C. Principle, Programming and Applications of Blockchain[M]. Beijing: China Machine Press, 2017: 93-97.)

[31] 申屠青春.區塊鏈開發指南[M]. 北京: 機械工業出版社, 2017: 109-146. (SHENTU Q C. Development Guide of Blockchain[M]. Beijing: China Machine Press, 2017: 109-146.)

主站蜘蛛池模板: 日韩欧美91| 91在线一9|永久视频在线| 99免费在线观看视频| 青草娱乐极品免费视频| 狠狠躁天天躁夜夜躁婷婷| 国产9191精品免费观看| 日韩国产 在线| 无码人妻免费| 亚洲成在人线av品善网好看| 激情综合网址| 日本成人在线不卡视频| 国产成人久久综合777777麻豆| 一边摸一边做爽的视频17国产| 人妻丰满熟妇αv无码| 无码人中文字幕| 国产精品99久久久| 人妻91无码色偷偷色噜噜噜| 欧美高清三区| 国产自在线播放| 亚洲最大情网站在线观看| 国产真实乱了在线播放| 四虎永久在线| 最新国产麻豆aⅴ精品无| 国产青青草视频| 国产高清无码第一十页在线观看| 91九色国产porny| 天天色天天综合网| 99久久精品久久久久久婷婷| 亚洲中文字幕97久久精品少妇| 国产亚洲精品97AA片在线播放| 99视频精品全国免费品| 2021国产精品自拍| 国产小视频免费| 亚洲国产av无码综合原创国产| 亚洲日本中文字幕乱码中文 | 欧美日韩午夜| 欧美激情第一欧美在线| 国产午夜精品一区二区三| 欧美在线视频不卡第一页| 精品人妻一区无码视频| 亚洲欧美日韩成人高清在线一区| 91色在线观看| 欧美精品伊人久久| 孕妇高潮太爽了在线观看免费| 在线亚洲天堂| 毛片a级毛片免费观看免下载| 色偷偷综合网| 国产精品女人呻吟在线观看| 91香蕉国产亚洲一二三区 | 国产精品久久久久久搜索| 亚洲高清无在码在线无弹窗| 91久久偷偷做嫩草影院电| 99九九成人免费视频精品| 无码日韩精品91超碰| 99人体免费视频| 一级全黄毛片| 极品尤物av美乳在线观看| 日韩精品一区二区三区免费在线观看| 26uuu国产精品视频| 欧美黄网站免费观看| 老司机午夜精品网站在线观看| 国产日韩精品欧美一区灰| 久热re国产手机在线观看| 国产成人高清精品免费软件 | 老色鬼欧美精品| 97视频免费看| 九色91在线视频| 伊人网址在线| 国产欧美网站| www.91在线播放| 久久国产av麻豆| 久久五月天国产自| 全免费a级毛片免费看不卡| 少妇精品网站| 亚洲最新在线| 欧美日韩成人在线观看| 国产精品亚洲一区二区三区z| 国产Av无码精品色午夜| 国产人人乐人人爱| 美女被操91视频| 玩两个丰满老熟女久久网| 国产中文一区a级毛片视频|