目錄
1引言 1
1.1選題背景和意義 1
1.1.1課題背景 1
1.1.2選題意義 2
1.2國內外研究現狀 2
1.2.1區塊鏈信息管理應用研究現狀 2
1.2.2區塊鏈存儲空間擴展研究現狀 3
1.3研究內容及創新點 4
1.4本文組織架構 5
2相關概念和技術 6
2.1區塊鏈的基礎知識 6
2.1.1發展過程 6
2.1.2基本原理 6
2.1.3區塊鏈的分類 9
2.2區塊鏈的核心技術 10
2.2.1共識機制 10
2.2.2智能合約 12
2.2.3關鍵密碼學技術 13
2.3本章小結 14
3區塊鏈存儲空間受限解決方案 15
3.1目前主流擴容方案 15
3.1.1隔離見證 15
3.1.2閃電網絡 16
3.1.3側鏈 16
3.1.4Plasma 17
3.1.5分片 18
3.1.6有向無環圖 DAG 19
3.2提出鏈上鏈外數據分割存儲方案 20
3.2.1etherQL 系統的局限 20
3.2.2數據分割鏈上鏈外分離存儲 21
3.2.3雙包 hash 數據一致性驗證方法 22
3.3本章小結 24
4基于區塊鏈采用數據分割鏈上鏈外存儲的人員信息管理系統 25
4.1需求分析 25
4.1.1功能性需求 25
4.1.2非功能性需求 28
4.2總體設計 28
4.2.1系統架構設計 28
4.2.2成員和組織訪問機制 30
4.2.3數據結構 31
4.3智能合約設計 32
4.3.1鏈碼函數設計 32
青島大學碩士學位論文
4. 3. 2鏈碼與節點通信交互過程 35
4.3.3交易請求流程 36
4.4詳細設計 37
4.4.1基礎網絡環境搭建 37
4.4.2三重隨機測試數據生成 38
4.4.3用戶管理模塊 39
4.4.4數據查詢模塊 42
4.4.5數據寫入模塊 43
4.4.6數據分析模塊 44
4.5本章小結 45
5系統測試 46
5.1系統功能測試 46
5.2數據分割存儲方案測試 47
5.3本章小結 50
6總結與展望 51
6.1總結 51
6.2展望 51
參考文獻 5 3
攻讀學位期間的研究成果 57
致謝 58
學位論文獨創性聲明 錯誤!未定義書簽。
學位論文知識產權權屬聲明 錯誤!未定義書簽。
1引言
1.1選題背景和意義
本文的研究過程是回滾式的,先探索區塊鏈與信息管理相結合的可能性,在這 一過程中發現制約結合可能性最大的問題是區塊鏈存儲空間不足,繼而單獨就存儲 空間這一問題進行探索和解決,并針對性地提出了數據分割鏈上鏈外存儲方案,最 終以人員信息管理作為典型應用場景,驗證區塊鏈結合信息管理的可行性。整個過 程猶如要從區塊鏈山峰到達信息管理山峰,但是兩座山之間有存儲空間這一巨大鴻 溝,于是通過提出數據分割鏈上鏈外存儲這一橋梁來跨越鴻溝連接兩座山峰。
1.1.1課題背景
對人員信息的管理工作一直是人類社會運行的重要環節,包括公司和政府的員 工、學校的師生以及酒店和航空公司的會員等一切涉及到人員信息的數據管理,甚 至包括國家級的社保及征信系統,如何安全地存儲如此龐大且涉及到大量隱私的個 人信息已經成為許多公司和政府面臨的首要問題[1]。目前主流的人員信息管理系統 是采用 B/S 架構對所有人員信息進行集中存儲管理,在這種架構中,用戶客戶端可 以在獲得許可證后隨時更改存儲在中央數據庫中的信息,中央管理員可以控制數據 庫,擁有很高的權限,并且可以授權其他用戶訪問甚至修改數據庫。這種結構最大 的缺點是其對數據進行集中的存儲和管理,并且有人擁有對該數據進行操作的最高 權限,導致數據泄漏和篡改的風險非常高。例如2017 年,美國國防部的數據庫遭到 了攻擊,造成了數億美國公民網絡賬號被泄露,而雅虎在2016年宣布,超過 30億 的賬戶信息被盜,2014 年,中國最大的火車票訂購網站 12306 遭到黑客攻擊,導致 數十萬公民信息泄露[2]。
由于人員信息管理系統不可避免地會存儲大量的隱私信息,所以此類信息的泄 露直接導致被存儲在數據庫中的人員安全,一旦發生信息泄漏事故則會造成無法挽 回的損失。如果身份證或電話等這類信息被泄露,那么就不可能要求大量被泄露的 人群去修改他們的身份證或電話號碼來避免信息泄露所帶來的風險,并且由于撞庫 攻擊的可能性導致若一家機構的信息泄露則會威脅到其他機構的信息安全,所以信 息泄露對全社會產生的影響是鏈式反應指數級增長的[3]。其次征信系統、學歷系統 等信息管理系統涉及很多人的切身利益,被篡改的風險很大。因此人員信息管理的 難點在于保證信息的安全性,即不泄漏,不被篡改和操作可追蹤,而以上問題所產 生的主要原因是傳統數據存儲方式具備極高的中心化。目前解決這些問題的主流方 法是提高數據管理權限的獲取難度,即提高訪問控制的安全性,但這仍取決于決策 者是否正確可信,和決策中心是否安全,并且這種解決辦法猶如不斷地筑高墻,很 難從根本上解決問題[4]。
人員信息管理是數據管理中應用范圍最廣泛也是最基礎的一種管理場景,除人 員信息管理以外,幾乎所有的信息管理系統均會遇到以上問題,只是該問題的嚴重 程度會隨著所存儲管理信息的敏感程度呈線性甚至指數增長。故不僅僅只有人員信 息管理領域才存在數據安全性問題,只要是涉及到數據存儲相關領域均存在數據的 安全性問題,隨著信息技術產業的發展,數據安全性的重要性愈發重要。
1.1.2選題意義
習近平主席在中央政治局第十八次集體學習時強調要把區塊鏈作為核心技術自 主創新重要突破口頃。區塊鏈是是由密碼學、運籌學及P2P協議、零知識證明、共 識機制等多種技術融合的一種基于點對點網絡的分布式數據存儲系統,與傳統的中 心化數據存儲方式不同,區塊鏈為數據的存儲和處理開辟了一條全新的途徑[5]。
區塊鏈是由多個數據塊按生成時間順序前后連接在一起,通過每個節點的一致 性機制生成數據塊,由加密技術保證了數據塊的安全性,因此如果某節點篡改了一 個數據塊,就不可能通過協商一致機制從而使得篡改無效,并且根據Merkel樹和時 間戳可以追溯每個數據塊的操作歷史。
區塊鏈因其獨特的優勢可以有效解決數據存儲的安全問題,特別是需要政府進 行監管背書的涉及大量隱私信息的人員信息更值得與區塊鏈進行結合。
但區塊鏈作為一門新技術其自身也存在嚴重的弊端,其中最重要的是存儲空間 有限,無法存儲大量數據。而人員管理是典型的大數據管理,因此要想利用區塊鏈 解決大數據存儲的安全問題,還必須解決區塊鏈存儲空間有限的問題,否則區塊鏈 目前有限的空間根本無法支撐絕大多數現實場景,這也是除虛擬貨幣外,區塊鏈自 問世至今十年來仍然未被大范圍應用的主要原因[6]。
區塊鏈自身的特性可有效解決數據存儲過程中存在的安全隱患,但區塊鏈自身 的缺陷導致無法存儲大量級數據,故需要研究探索出一種可有效解決區塊鏈存儲空 間不足問題的方案,使其一方面可應用于人員信息管理這一數據管理最廣泛且基礎 的領域,另一方面在打破存儲空間這一瓶頸后極大地釋放出區塊鏈的價值可將其與 更多領域相結合,推動區塊鏈創新發展助力區塊鏈在金融、物流、版權等領域落地, 故本論文的研究具有一定的技術難點解決意義和行業應用發展意義[7]。
1.2國內外研究現狀
1.2.1區塊鏈信息管理應用研究現狀
區塊鏈這一概念自2009 年問世至今已過去十年時間,盡管目前依然處在探索階 段,但不論是民間還是政府層面均對其高度重視,認為區塊鏈是引領下一代信息技
青島大學碩士學位論文 術變革的關鍵性技術,可極大地增強數據安全性,增強信任共識,降低社會運行成 本,提升國家競爭力。區塊鏈是一種不依賴第三方的去中心化獨立自主的數據存儲 管理體系,它是包括計算機科學、密碼學等多種底層技術所融合而成的創新產物, 數據通過這一體系內眾多分布式的節點進行存儲、驗證和傳播。因為區塊鏈擁有數 據可追溯性、不可篡改性等先天性優勢,所以區塊鏈的發展潛力巨大,未來的應用 領域非常廣闊,為社會創造更大價值,推動社會更快更高效發展[8]。
近年來區塊鏈技術研究和產業發展越來越受到各國的關注,區塊鏈已經成為了 各國布局下一代互聯網信息技術的重要競爭環節,中國作為世界信息化程度最高的 國家之一,更應該及時把握住這次信息產業革命的機會,加大資本和政策投入力度, 培養企業和高校區塊鏈人才,加快區塊鏈標準建設,掌握全球區塊鏈發展話語權和 制高點。
美國、英國等各國政府也在積極投資研發區塊鏈技術并將其落地產業化,美國 國土安全部正在基于區塊鏈強化邊境設備捕獲數據的完整性。格魯吉亞政府是世界 上第一個將房產交易與區塊鏈進行結合的國家。委內瑞拉作為世界最大的能源輸出 國之一,發行了以石油天然氣為背書的加密貨幣,用于抵消該國面臨的債務。
區塊鏈作為下一代信息產業革命的突破口,越來越多的國內外政府、企業和高 校紛紛搶占區塊鏈的技術和行業賽道,資本、政策和人才共同為區塊鏈賦能,推動 其向金融管理、版權專利、物流管理、法律法務、公益慈善、社會保障等領域延伸 拓展,促進行業良性發展,加快形成完善的區塊鏈生態體系,區塊鏈是商業和科技 爭奪的高地,同時也是國與國之間核心競爭力的體現。
1.2.2區塊鏈存儲空間擴展研究現狀
目前主要的區塊鏈網絡為比特幣和以太坊,但這兩者均難以有效支持金融、法 律、物流等場景,限制其發展的眾多原因中最主要的是區塊鏈難以有效擴容,有限 的容量導致其只具備有限的應用場景。區塊鏈在最早誕生時最重視的是去中心化和 數據安全這兩點問題,但卻限制了可擴展性,區塊鏈創始人本聰最初將區塊空間限 定在1MB從而保證系統的流暢和穩定,且2009年比特幣誕生初期的接受程度不高, 用戶量和交易量少,不會造成區塊擁堵,十年前信息技術發展相比今天較為落后, 1MB 存儲空間也足夠使用。然而從 2013 年區塊鏈概念被大眾廣泛地接受和重視,越 來越多的機構開始著手研究區塊鏈技術,隨著用戶量的增多,以及信息技術的發展 導致的信息膨脹,造成了區塊鏈網絡越來越擁堵,效率越來越低下,交易費用越來 越高,如比特幣在最高峰時有數十萬筆交易處在排隊中,之前每秒鐘可以處理 7筆 的速度已經無法滿足要求,僅僅1 MB的區塊空間也無法適應主流市場的需要,這些 問題逐漸的成為制約區塊鏈發展的瓶頸[9]。
由于區塊鏈要求所有參與節點同步備份區塊鏈網絡數據才可達到不可篡改和可
青島大學碩士學位論文 追溯的效果,但隨著用戶量和存儲數據越來越多,每個節點設備所備份的數據呈指 數級增長,備份如此大量級數據的目的是作為其余節點的驗證賬本,絕大多數數據 都與其自身無關,故即每個節點都在為別人的數據安全所買單[10]。
所以一方面區塊鏈本身可以存儲的容量越來越有限,另一方面節點設備所備份 存儲的數據急劇增長,比特幣、以太坊等眾多區塊鏈社區開始探索區塊鏈擴容這一 直接制約區塊鏈發展的難題。
目前主流的區塊鏈擴容方案可以分為兩種,第一層擴容方案是通過改變區塊鏈 自身的架構設計,第二層擴容方案則是盡量在不改動區塊鏈設計的情況下使用側鏈 等鏈外擴容方案。其中第一層擴容方案主要包括直接增加單個區塊容量、隔離見證、 改變共識機制、DAG技術、碎片技術等,第二層擴容方案則主要包括狀態頻道、側 鏈、交叉鏈、閃電網絡等[11]。
區塊鏈擴容最難以解決的是如何平衡處理“不可能三角”問題,它是指在區塊 鏈網絡中,去中心化、安全性和處理性能是很難同時兼備,在對這三個方面進行優 化時往往呈現此消彼長的狀態[12]。
1.3研究內容及創新點
本文深入研究學習區塊鏈及現代信息管理技術,在全面掌握區塊鏈技術并充分 了解其發展歷史和各類衍化分支的優缺點后,以人員信息管理這一最為廣泛且基礎 的信息管理領域為突破口,結合區塊鏈對數據較強的安全性完成人員信息管理系統 的設計,并重點研究區塊鏈存儲空間的擴容問題,提出了數據分割鏈上鏈下存儲方 案,提出雙包 hash 數據一致性驗證方法用于確保鏈上鏈外數據一致,從而為區塊鏈 與大數據存儲的結合指出了方向。
本文具體的研究內容和創新點如下:
(1) 針對區塊鏈目前最主要的數據存儲空間小這一瓶頸,提出了一種有效減少 區塊數據冗余從而實現擴容的方案。對區塊鏈擴容進行了重點研究分析,并對第一 層及第二層兩大主要擴容方案,綜合比較進行優缺點分析,結合了傳統的集中式數 據庫的優勢,提出了數據分割鏈上鏈下存儲方案,使其適用于大數據的存儲管理, 并提出雙包 hash 數據一致性驗證方法來確保被分割并分別存儲在鏈上鏈外的數據 保持一致性。
(2) 基于區塊鏈結合存儲空間優化方案,對人員信息管理系統進行了設計與實 現。人員信息管理是所有信息管理領域中最廣泛、最基礎、分支最多的領域,涉及 到了大量的隱私和權益數據,利用區塊鏈可有效的保障數據安全性,以人員信息管 理作為突破口探索區塊鏈在更多數據信息管理領域的應用空間。
1.4本文組織架構
本文由六個章節組成,詳細組織架構如下: 第一章,引言。本章對課題的研究意義和背景進行了說明,對國內外的研究成 果和趨勢進行了闡述,表達了本課題的主要研究內容。
第二章,相關概念和技術。本章主要介紹了使用和涉及到的技術,包括區塊鏈、 密碼學、Hyperledger fabric超級賬本、hash編碼等。
第三章,區塊鏈存儲空間受限改進方案。本章主要分析了區塊鏈存儲空間這一 限制其發展應用的瓶頸問題,并針對性地提出數據分割鏈上鏈外存儲的解決方案。
第四章,基于區塊鏈采用數據分割鏈上鏈外存儲的人員信息管理系統。對預期 系統進行了需求分析、總體設計、智能合約設計和詳細設計,通過系統的功能需求 倒推技術方案,重點描述了系統整體架構設計、事務流程,及數據分割和鏈上鏈外 存儲的過程。
第五章,系統測試。實現所需驗證的原型系統,并測試其可用性,以及采用數 據分割鏈上鏈外存儲擴容方案后的性能。
第六章,總結與展望。概述本文中所做的主要工作,分析目前的不足及下一步 的研究方向,對未來的研究工作加以規劃展望。
2相關概念和技術
2.1區塊鏈的基礎知識
2.1.1發展過程
區塊鏈作為比特幣的底層技術,這一概念的第一次出現是源自中本聰在 2008年 所發表的《Bitcoin:A Peer-to-Peer Electronic Cash System》論文,文中構想了 一套基于點對點網絡傳輸技術、加密技術、時間戳技術等一系列技術體系融合而成 的去中心化電子貨幣理念,并于2009 年將這一理論付諸實踐,上線比特幣網絡系統 并穩定運行至今[13]。
區塊鏈作為一種僅面世10 年的新技術,其發展過程可分為三個階段:
區塊鏈 1.0主要以比特幣為代表的數字貨幣,在具備數字貨幣基礎的支付、流 通等屬性后還具備去中心化的交易平臺,不需要第三方金融機構來對交易進行核實 和背書,使其成為第一個解決雙重支付的數字貨幣。
區塊鏈 2.0使區塊鏈技術產生了革命性的進步,這一進步是由智能合約所推動 的,它使得區塊鏈內可以存在具備自主執行特點的鏈上代碼,當滿足預先設定好的 條件后就可自動觸發執行,使區塊鏈可應用于更多復雜流程化的場景中,其應用范 圍已經超越了區塊鏈1.0時代的數字貨幣,延伸至金融、股票、證券等[14]。
區塊鏈 3.0指區塊鏈突破金融領域之外可應用于各行各業為其賦能,實現“區 塊鏈+”,使區塊鏈能夠支持更復雜的業務需求,將結合各個產業推動其改革發展, 所以區塊鏈 3.0將比之前版本具有更強的實用性和可塑性,可極大地降低社會運行 成本,提高社會運行效率。
區塊鏈的發展是點-線-面的過程,由單一的數字貨幣這一點發展至金融領域這 一條線,再發展至全面的各行各業,實現“區塊鏈+”為行業賦能推動行業發展。目 前區塊鏈正處在介于 2.0與 3.0 之間,若想達到 3.0階段需要區塊鏈概念在各行業 全社會的普及,和解決如存儲空間等制約區塊鏈大規模產業化應用的幾個核心技術 難點。
2.1.2基本原理
區塊鏈的本質是一種鏈式數據結構,通過各節點共識的數據塊會被標記時間戳 打包上鏈,以生成的時間順序前后相連,并從第一個創世區塊開始將其hash值依次 融入新產生的區塊中,作為一種“基因”來保證難以對區塊數據篡改。
區塊鏈的基礎結構如圖2.1所示,每個區塊由區塊頭和區塊體兩大部分組成, 區塊頭包括了該區塊的編號、當前區塊哈希值、上一區塊哈希值、時間戳和 Merkle
青島大學碩士學位論文 樹根節點,區塊體則包括了交易信息[15]。
圖 2.1 區塊鏈的基礎數據結構
其中區塊頭中的哈希值對不可篡改性起到了關鍵作用,每個區塊頭都存儲了該 區塊上一個父區塊的哈希值,從創世區塊開始直至最新生成的區塊使用哈希值首尾 相連,就可以形成一個鎖鏈式的哈希鏈條結構,任何一個區塊都可以向前追溯至第 一個區塊,這種設計在實現了追溯性的同時還實現了不可篡改性,因為每個區塊的 哈希值就像是基因一樣會一代一代的傳遞給后面的區塊[16]。圖 2.2是一個較為形象 的演示圖,將哈希值看做基因的話,它藍色哈希值會被傳遞到第二個區塊中,第二 個再傳遞到后續區塊中,但是如果如果第二個區塊的信息被修改,它的哈希值也會 不同,從而藍色就會變為黃色,繼而到后續區塊則會立刻辨識出修改痕跡,所以若 某個區塊的信息被更改則一定意味著其哈希值也會產生變化,其后續區塊必然會與 之不匹配,若想成功篡改則必須將其子區塊、孫區塊等一系列后綴區塊的區塊數據 同步修改,難度極大,這種鏈鎖效應可以保證該任何篡改都將是一件耗費極大計算 量極高成本的工作,根據比特幣網絡的算力以及現有的計算設備,當一個區塊產生 6 個子區塊后就很難被篡改。
保障區塊鏈不可篡改性的另一項核心技術是分布式賬本,上文說到若某人企圖 修改一個區塊則必須要耗費極大的計算量,但是假使真有人不惜一切代價花費龐大 計算量修改所有后續區塊,也依然無濟于事,因為每一個參與區塊鏈網絡的節點均 會同步一份鏈上數據,即使修改了鏈上數據,但眾多節點所備份的數據與鏈上數據 不同依然可以識別出數據被篡改過,除非將所有節點的數據全部同時篡改一遍,難 度更大[17]。
區塊鏈需要每個網絡內節點同步備份鏈上數據,但是隨著數據量越來越大,節 點越來越多,如此大的存儲開銷普通的設備很難承受,所以產生了兩個弊端,分別 是數據存儲量大,及驗證計算量大。一個區塊中占據絕大多數存儲空間的是區塊體, 所以若只保存區塊頭則可極大地減少節點在本地客戶端存儲的信息量,并且由于區 塊頭中有Merkle樹,所以即使本地沒有存儲區塊體交易信息,只需要Merkle樹就 依然可以對一個交易進行驗證判斷是否是有效的。Merkle樹的結構如圖2. 3所示, 最下面的一層為四個交易,每兩個交易的的hash值再進行計算得到新的哈希值,通 過這樣的方式逐層向上便可以得到根節點哈希值,并將這一 Merkle 樹存儲于區塊頭 中。通過這種方式可以使得用戶只保存區塊頭,不需要保存完整的區塊鏈數據就可 以實現交易驗證,當用戶驗證一個交易是否存在時,只需要將從該葉子節點到根的 運算過程中需要的那些哈希值代入該交易進行計算,得到的最終根節點哈希值如果 與 Merkle 樹根節點哈希值一致,則說明該交易存在[18]。
每一個父區塊的 Merkle 樹根的哈希值都被存儲在了其子區塊的區塊頭中,從某 種程度上相當于每個區塊都存儲了上個區塊的所有交易信息,這樣鏈鎖式的數據結 構使得在整個區塊鏈網絡中存在虛假交易或偽造區塊的可能性極低。
圖 2.3Merkle 結構
2.1.3區塊鏈的分類
目前的區塊鏈根據網絡準入門檻可劃分為公有鏈、私有鏈和聯盟鏈。
公有鏈在各類區塊鏈網絡中的開放程度是最高的,無需對節點進行身份的核驗 和管控,準入門檻很低。并且所有節點權利平等,不會有任何中心管理機構存在于 網絡中,所有節點均可以參加鏈上數據的讀取和存儲活動,也可自由的加入和退出 網絡。公有鏈是區塊鏈的最初形態,也是中本聰在其論文中所構想的完全去中心化 的公平、公正、公開網絡的烏托邦式的構想,所以公有鏈是三種區塊鏈中開放程度 和去中心化程度最高的,比特幣作為全球第一個也是目前最大的區塊鏈網絡就是公 有鏈[19]。
公有鏈雖然是區塊鏈概念提出的最終理想網絡模型,但因其過于理想化導致存 在諸多問題難以被真正應用于真實社會環境中。其主要問題如下:
(1) 激勵問題。在比特幣這類主流的公有鏈網絡中,因為需要大量的參與節點 為爭奪記賬權進行大量的耗費資源計算,所以必須要給與記賬節點足夠的激勵才可 以促使更多節點參與到記賬中,從而保證區塊鏈網絡的正常良好運轉,并且激勵的 收益必須要大于計算成本,所以公有鏈運轉的前提是所有參與節點都是趨利的,這 便限制了其應用場景。如比特幣的激勵機制“挖礦”最大的問題是這一過程是一種 零和游戲,且資源耗費,即獲取記賬權的節點僅占所有參與節點的極少部分,絕大 多數沒有獲得記賬權的節點所付出的計算成本不會有任何回報。
(2) 效率問題。公有鏈由于具備很高的開放和去中心化程度,導致大量全網節 點必須要參與全部交易處理,極大地降低了交易處理性能,越來越擁擠的網絡導致
青島大學碩士學位論文 完全無法支持復雜和高并發業務。
(3)安全及隱私問題。公有鏈意味著所有節點均可參與數據的存儲,若沒有完 善加密環節下則會導致嚴重的信息泄露,且由于工作量證明機制過于依賴算力,在 去中心化無機構監管的情況下,某個組織若掌握了超過51%的算力就會在網絡中擁 有絕對話語權。
私有鏈與公有鏈在很多方面存在對立的理念,對節點的進出擁有嚴格的核驗機 制,并且節點權利不是平等的,存在管理與被管理的關系,由某個中心機構或組織 掌握著節點的數據存儲和讀取權限,這種優勢使得私有鏈更受政府、銀行這類管控 力度很高的機構青睞,并且由于私有鏈的節點具備準入機制,所以節點數量是有限 且可控的,數量上的限制使得私有鏈比公有鏈具備更快的交易速度和更低成本,準 入機制使得私有鏈比公有鏈的數據保護力度更強,也更難以被惡意節點攻擊。與傳 統的中心化存儲數據庫相比,私有鏈也具備更強的數據安全性,并且由于數據備份 于其他節點,當發生異常時,也能夠迅速發現問題相關的成員節點,并根據其余節 點的備份賬本恢復數據。雖然私有鏈的機制直接與區塊鏈的去中心化理念所違背, 但是它卻是目前最被金融、企業、政府等組織機構所接受的一種區塊鏈技術[20]。
聯盟鏈在節點進出和管控程度上介于公有鏈和私有鏈之間,以組織為準入單位, 可以使一個以上的組織加入網絡,并共同參與管理區塊鏈網絡。聯盟鏈網絡相比公 有鏈具備一定的數據私密性,每個組織的數據僅自己可見,其他組織只有獲取到該 組織的秘鑰授權后才可以查看該組織的數據,有限的數據共享和組織準入既可以解 決數據隱私安全問題,同時也具備一定程度的去中心化,相比公有鏈具備更高效的 交易性能和數據安全性,同時也比私有鏈更加靈活,具備一定的組織擴展性。聯盟 鏈在行業中的應用也日漸趨于繁榮,尤其適合于電子商務、金融支付、物流管理等 組織型商業體系中,國外如由 Linux 基金會發起的 HyperLedger Fabric 聯盟鏈已 經得到了 IBM、沃爾瑪、英特爾、百度等組織的參與,騰訊、阿里等企業也在抓緊 布局推進國產聯盟鏈平臺的發展[21]。
2.2區塊鏈的核心技術
2.2.1共識機制
共識機制是保障區塊鏈網絡穩定運行的關鍵環節,它是密碼學、運籌學、經濟 學甚至心理學等融合設計出來的一套保證區塊鏈中各節點互相制約平衡,維持區塊 鏈網絡積極正向發展的體系,它是保障區塊鏈一致性和有效性的關鍵,所有參與節 點都需要遵從共識機制的規則才可在加入區塊鏈網絡后對數據進行操作[22]。
區塊鏈存在多種網絡類型和應用場景,不同的類型和場景對共識機制所要求的 性能和效率均不相同。目前主流的區塊鏈共識機制主要有四類,分別是股份授權證
青島大學碩士學位論文 明機制DPos、工作量證明機制PoW、實用拜占庭容錯算法PBFT、權益證明機制PoS。
股份授權證明機制將區塊鏈網絡看做一家“公司”,所有擁有公司股票的股東 們組成董事會,通過手中持有的股票數量按照權重來投票,選出若干代理節點,為 股東們行使驗證、記賬等權利和職責。全體節點具有對代理節點撤銷和選舉的權利, 所以被選出的代理節點依然受到網絡中全體節點的約束。股份授權證明機制由于是 部分節點代表全部節點進行操作,通過減少在網絡中參與處理的節點數量,從而減 少共識驗證所耗費的時間,提升交易性能[23]。但是該機制依然依賴于虛擬貨幣在系 統中的流轉從而保持代理節點的穩定性,并不是所有的組織都需要代幣,所以依然 存在一定的局限。
工作量證明機制就是需要提供一份證明,用于確認你完成了某項工作。要求所 有參與記賬的節點通過計算無意義的隨機哈希散列的數值來爭奪記賬權,第一個計 算出來的節點必然大概率意味著其付出了最高的算力。所以如果想獲得記賬權,必 須要付出足夠高的成本,也就是收獲與付出成正比,從而保證了記賬權分配的公平 性,其中節點所付出的算力和時間即工作量。由于在如比特幣這類的公有鏈中節點 進入無門檻,所以所有節點均有權利參與爭奪記賬,但這也同時導致了大量的節點 花費了算力和時間但卻一無所獲,造成了很大的資源浪費,而且若某一家機構擁有 極大的計算資源,甚至超過全網節點 51%的算力,則會導致區塊鏈網絡被該機構所 壟斷,并且在工作量證明機制中,隨著其中代幣被挖掘出的越多,計算出數值的難 度也就越大,從而各節點達成的共識的周期也越來越長,因此該機制不適用于大規 模或對時效要求很高的領域中[24]。
實用拜占庭容錯算法PBFT是一種對惡意節點具備容錯能力的共識算法,它允許 全網節點中最多有三分之一為惡意節點。實用拜占庭容錯算法相比其他共識機制最 大的優勢在于不需要發行代幣來維持網絡運行,并且其實現共識的過程不需要大量 的驗證和計算,從而可以節約資源提高利用率。因為每個副本節點都需要和其他所 有節點進行同步,所以PBFT的性能與節點數量是呈線性相關,隨著節點的增加PBFT 算法的性能會逐漸降低,這一缺陷也導致無法適用于公有鏈這類存在大量節點的網 絡環境中,故只能用于私有鏈或者聯盟鏈這類對節點有管控機制的網絡類型[25]。
權益證明機制引入幣齡的概念,它的理念是帳本應由利益最相關即持幣數量和 時間最多的人去維護,節點能夠獲得記賬權的概率是與其幣齡成正比的。幣齡是系 統分配相應節點權益的重要參考因素,某個節點的幣齡是持幣的數量乘以持幣的時 間。權益證明機制無需耗費大量的算計去爭奪記賬權,相比工作量證明機制可以減 少資源耗費,縮短共識周期。相比于工作量證明機制必須要超過 51%算力才可壟斷 網絡的要求,權益證明機制要擁有全網 51%以上的幣齡難度更大,所以作惡難度也 更高。但權益證明機制只是工作量證明機制的一種優化,依然沒有從根本上解決工 作量證明機制所帶來的應用局限性,使得其應用范圍依然受限[26]。
青島大學碩士學位論文 2. 2. 2智能合約
智能合約是一種運行在計算機網絡中的數字化合同代碼,當觸發了事先設定好 的條件后智能合約就會被自動執行,在區塊鏈中它運行在一個可供多人參與的賬本 之上,具備強制執行的權力,是真正意義上的可編碼合約,它的出現標志著區塊鏈 2.0時代的開啟[27]。智能合約因為具備去中心化的條件到達自動觸發特點,使得網 絡中的交易可以自主執行,不需要一個中心化的組織去對所有交易進行監督管理。 由智能合約所執行的這些交易是被動執行且無法終止和撤銷的,一旦某個節點加入 了網絡中,就意味著必須且被動遵守智能合約[28]。將智能合約集成進入區塊鏈可以 產生諸多優勢,不僅可以極大地減少信任成本提升運轉效率,還可以避免某些惡意 節點破壞所有用戶均應該遵守的合約體系。雖然區塊鏈技術具備對數據的操作可以 實現全流程的不可篡改性和可追溯性,但是在智能合約沒有出現之前,區塊鏈依然 是圍繞對數據主動操作的去中心化,無法實現對數據被動操作的去中心化,如一人 約定在某一時間給另外一人轉賬一定數額的虛擬貨幣,這一約定生效的前提必須是 該人信守承諾,到達這一時間時主動進行轉賬操作,因為區塊鏈沒有中心化組織對 所有節點進行管控,若該人違約也很難對他采取強制措施,但是將合同以到達條件 后自動觸發的代碼寫入區塊鏈時,轉賬操作將會從主動變為被動,從而即使該人不 主動進行轉賬,智能合約在達到觸發條件后依然會對其進行被動轉賬操作,所以智 能合約使得區塊鏈煥發出更強的生命力。
智能合約系統包括了一個可用于處理所接收到的各類智能合約狀態機,還包括 當到達預設條件時對系統內事務的處理和保存機制。對事務的處理和保存都是在區 塊鏈上進行,從而可以利用區塊鏈的透明性、可追溯性和不可篡改性保障被智能合 約所處理的事務不會受到惡意干擾。其中事務內有節點需要傳送的數據,而事件即 是對該類數據的內容描述,智能合約接收到事件及事務后被觸發以此來進行狀態機 的判斷。自動狀態機會預設一些動作的觸發條件,當這些條件被滿足時,會根據條 件選擇對應的智能合約自動執行[29]。智能合約僅僅是作為事務的判斷和執行者,在 執行過程中保持中立,完全不受任何個人或組織干擾,從而可以讓一組涉及多方的 且在一定條件下被觸發的協議能夠按照參與者最初的約定被執行下去。
智能合約是實現區塊鏈去中心化、公平公正的關鍵環節,它的存在使得整個系 統的參與者從最初不可確信的主動執行變為被動執行,它使得在這個系統內無需第 三方強力機構去管理維護該體系的運轉,就可以執行不可逆的、可追溯的和安全的 交易,這一數字化的協議對所有參與到區塊鏈網絡中的節點都會平等的實行強有力 的約束,從而實現了節省交易時間、降低信任成本的優點。但是智能合約不可逆轉 強力執行這一最大的優勢也成為了它的一種缺陷,因為如果在最開始編寫合約時存 在不合理或者錯誤的情況,那一旦該合約被觸發執行,則無法停止,所以智能合約
的彈性不夠強。
圖 2.4 區塊鏈智能合約運行機制
2.2.3關鍵密碼學技術
區塊鏈中涉及了很多的密碼學技術,其中保障交易雙方節點安全判別的關鍵加 密技術就是非對稱加密算法,非對稱加密算法由公鑰、私鑰和加密解密算法三元素 組成,因公鑰是可以被公開且不會造成數據泄露,故又稱為公開密鑰加密算法。公 鑰用于對數字簽名的加密和驗證,私鑰則用于數字簽名的生成和解密,也正是由于 該算法對密文的加密和解密所采用的是兩個秘鑰,其中一個秘鑰對數據進行加密, 則必須只能用與其對應的另外一個秘鑰才能解密數據,故被稱之為非對稱加密算法 [30]。
o
與非對稱加密算法相對應的是對稱加密算法,但其安全性和便捷性遠不如非對 稱加密算法,因為對稱加密算法中只有一個秘鑰,如果所有用戶都持有同樣的秘鑰, 則只要該秘鑰被泄露則整個系統的密文均可以被解密,如果所有用戶都持有不同的 秘鑰,則這種情況下服務器必須要保存大量的秘鑰,當該系統存在大量的用戶,則 需要存儲等量的秘鑰,資源占用和維護成本都非常大,所以對稱加密算法相比于非 對稱加密算法存在很多缺陷。
除維護成本高以外,安全性較低也是對稱加密算法面臨的重要問題,在對稱加 密算法中只有一個非公開的秘鑰,所以在解密時對方必須要獲取到該秘鑰,秘鑰泄 露的風險非常大,而非對稱加密算法中有兩個秘鑰分別用在加密和解密中,用公鑰 加密的信息只能用與其對應的私鑰來解密,并且私鑰僅有持有者才知道,這樣安全 性便得到極大提高,且公鑰是非常難以推導出私鑰的,相比對稱加密更安全,密碼 管理成本也更低[31]。
圖 2.5 非對稱加密算法過程
2.3本章小結
這一章主要探究了區塊鏈的發展過程及核心技術。首先通過對區塊鏈從 1.0發 展至 3.0的過程和關鍵節點進行研究,總結出區塊鏈技術及其應用場景下由點到線 最后到面的規律,為區塊鏈3.0實現所需解決的技術難點研究打下了基礎。此外還 研究了不同類別的區塊鏈技術,分別對公有鏈、私有鏈和聯盟鏈的技術特點和場景 進行了探究。在研究學習區塊鏈的關鍵技術時,主要探究了區塊鏈的數據安全性原 理,為下面研究區塊鏈存儲空間這一難題提供了理論基礎。
3區塊鏈存儲空間受限解決方案
區塊鏈作為出現僅十年的新技術自然也存在很多尚未解決的缺陷,如存儲空間 問題、交易速度問題和市場監管問題等,這些缺陷制約著區塊鏈為社會創造出更大 價值,但區塊鏈作為一種數據存儲方式,能否安全存儲足量的數據直接決定其最根 本的核心價值能否實現,所以目前存儲空間問題是區塊鏈最急迫需要解決的問題, 也是制約區塊鏈發展最核心的問題。
隨著區塊鏈所參與的節點和存儲的數據不斷增多,等待確認交易的隊列越來越 長,致使整個區塊鏈網絡更加臃腫。比特幣創始人中本聰將每個塊的大小設置為1 MB,以減少數據量,但這直接導致比特幣系統無法得到更廣泛的使用,因為1 MB對 于任何組織來說都是不夠的,尤其是在大數據領域,現有的主流區塊鏈架構因這一 自身的缺陷,這使得區塊鏈無法被廣泛發揮出價值,隨著區塊鏈技術的普及和網絡 帶寬的增加,區塊鏈的容量限制問題越來越嚴重,對于區塊鏈擴容的呼聲也愈發強
烈[32]。
3.1目前主流擴容方案
現有區塊鏈擴容方案主要分為第一層鏈上擴容和第二層鏈下擴容。前者是直接 對區塊鏈架構層面進行改動,如提高區塊容量將1M擴展為2M,后者則是在通過側 鏈等對現有區塊鏈架構改動不大的解決方案來緩解區塊鏈系統的擁塞情況。可以將 區塊鏈比作一條高速公路,鏈上擴容則是直接將該公路從四車道改為八車道,而鏈 下擴容則是修建高架橋或者地鐵[33]。
以比特幣網絡來看,目前主要的擴容方案有兩種:硬擴容和軟擴容,硬擴容以 礦工為代表,希望直接將區塊容量進行擴大升級[34]。軟擴容主要以開發者為代表, 開發者反對并支持軟擴容的原因有兩個:
一是硬擴容這種簡單粗暴直接提升容量的方式會導致開發團隊很被動,因為如 果對區塊進行硬擴容,隨著用戶量和交易量的增多,容量天花板遲早會再次觸頂, 還需要再對區塊進行更高的硬擴容,這種逐步妥協的方式治標不治本,并且無法做 到向前兼容,每一次擴容都會導致區塊鏈分叉。
二是硬擴容雖然可以直接將區塊空間擴大,但同時也意味著節點客戶端需要存 儲的數據量更大,提高了全節點運行要求和成本,解決一個擴容問題會牽扯出更多 問題,這對區塊鏈行業并不是一個健康的發展方向。
3.1.1 隔離見證
隔離見證最初提出的本意是用來修復交易延展性錯誤,于是便將簽名即見證信
青島大學碩士學位論文 息從區塊數據中取出存儲在外部,但將見證信息從區塊中取出后使得區塊可以容納 更多交易數據,產生了擴容的效果,于是盡可能將與交易無關的數據取出區塊成為 了新的擴容思路,并引出了下一步閃電網絡。
隔離見證通過減少區塊內非必要信息從而達到了擴容的效果,腳本簽名的信息 被從區塊中取出后放在一個新的數據結構當中,并且同時可以降低數據傳輸和驗證 過程中所造成的內存、帶寬、CPU等成本,與此同時安全性也并沒有降低,因為負 責驗證的節點也會通過驗證腳本簽名從而確保交易有效。
3.1.2 閃電網絡
閃電網絡是屬于一種鏈下擴容方案,其主要思想是將原本需要全網廣播占用資 源的大量交易放到區塊鏈之外采用點對點的形式傳輸,通過減少廣播信息和各節點 互相確認時間,提高了交易效率。在閃電網絡中可以將交易直接發送至接收節點, 只有當雙方節點不可信時才會進入鏈上共識。閃電網絡通過將交易放在鏈外執行, 可以極大地提升系統性能和效率,并且具備較強可擴展性[35]。
對于閃電網絡的理解可以使用銀行卡和支付寶的關系,在沒有支付寶產生之前, 兩人之間的轉賬必須通過銀行卡來實現,而銀行卡轉賬則必須經過銀行交易結算中 心,即使再小的額度都需要經過復雜的步驟,大量的小額交易會擠占很多資源,但 是當支付寶出現之后,用戶可以先把自己一部分的錢從銀行卡劃撥到支付寶中,這 時發生小額轉賬的情況也只需要通過支付寶完成,無需再走一遍銀行結算流程,從 而極大地降低銀行結算負擔,節省資源留給更大額的轉賬需求,極大地提高了轉賬 效率。在這個場景下,可以將銀行結算系統看做區塊鏈,而支付寶可看做閃電網絡。
3.1.3側鏈
側鏈是一種可以在多個區塊鏈之間跨越交互的方法,主鏈和側鏈通過 2WP 雙向 掛鉤從而實現比特幣在主鏈和側鏈之間安全“流轉”,實際上并不是真正意義上的 流轉,因為只是將主鏈的一部分資產凍結,并在側鏈中釋放等量的令牌,從而達到 流轉的效果。之前對主鏈的變更可以轉移到側鏈進行,從而減少了分叉、資產安全 等問題,且側鏈為主鏈分擔了一部分的交易壓力,它是以外掛主鏈的形式起到了對 主鏈的擴展效果,使得整個區塊鏈體系在不影響安全的前提下更加的靈活可變。并 且還可以將部分功能從主鏈轉移到側鏈,從而提升主鏈的運轉效率,即使側鏈發生 問題,由于其具備獨立性,也不會影響到主鏈,可見側鏈在起到擴展的同時兼具了
安全性[36]。
側鏈技術可以使開發人員在不修改如比特幣區塊鏈這類主鏈的情況下,通過修 改外掛在主鏈上的側鏈,任然可以變相的改變主鏈的功能,被修改的側鏈依然是被 附著在主鏈上,從某種意義上相當于是對主鏈進行了修改。側鏈雖然依附于主鏈,
青島大學碩士學位論文 但是具備獨立性,可以按照自己的業務定制相應的賬本、共識機制和智能合約,雖 然側鏈本身是不能發行數字貨幣的,但是可以從掛鉤的主鏈比特幣網絡引入部分比 特幣,首先會將主鏈需要被引入的比特幣凍結,然后由礦工確認被凍結數量的比特 幣在側鏈交易,當側鏈比特幣使用完畢被凍結后,再將主鏈當時被凍結的比特幣解 凍。所以側鏈體系可以將交易從主鏈中剝離出來放在側鏈進行,從而減少主鏈的運 算和存儲壓力,實現了主鏈的擴展。
圖 3.1 主鏈與側鏈價值流轉過程
3.1.4Plasma
Plasma 是一種基于以太坊的第二層擴容方案,側鏈可以被理解為“鏈外鏈”, 而Plasma則可被稱為"鏈中鏈,允許在根鏈中存在多個Plasma子鏈,Plasma會 將交易積累一些后一次性寫入區塊,然后將這個區塊的哈希值提交至根鏈。所以在 Plasma 中的交易不需要每一個都在主鏈進行共識,用戶可以先在鏈下發起多個交 易,然后在鏈上批量實現交易,減少鏈上交易次數,從而增加根鏈的吞吐量和交易 處理效率,并且子鏈的可擴展性很強,用戶可以根據自己的業務需求建立專屬子鏈 [37]
。
Plasma MVP是基于UTXO模型的Plasma的最小可行性驗證版本,它屬于區塊鏈 1.0版本,只能提供簡單的持轉賬交易服務,無法支持 2.0才有的智能合約執行。 因為每個子鏈都是具備獨立性的,故其也可擁有自己的共識機制,在Plasma MVP中 子鏈的共識機制是 POA,operator 節點負責處理子鏈交易并將其打包為區塊,然后 定期把子鏈狀態再提交到主鏈上。
3.1.5分片
傳統數據庫解決數據存儲擴展的有效方式是分片,將數據庫分割為多個部分并 分別存放在不同的服務器,從而達到橫向擴展能力,區塊鏈也可將其視為一種數據 庫,于是也可以采取這種分而治之的思想模式。在分片系統中的節點和相應的交易 都會被劃分到不同分片中從而提升了擴展性和處理性能,因為每個節點無需處理全 部交易,只需要處理它分配到的一部分交易,并且可以和在其他分片中的節點并行 執行多線程處理交易。由于對網絡進行分片后達到了并行處理的效果,節點無需排 隊等待驗證,而是可以同時驗證多個區塊,極大地提高了吞吐量和效率。分片系統 中分片的數量越多吞吐量也就越大,呈線性相關,分片使區塊鏈實現了線性擴展[38]。
分片系統中每個節點的容量并未改變,但是由于將數據分成多個部分存儲至各 個節點,單個節點存儲的數據變少,從而達到擴容的效果,并且與之帶來了更高效 的事務處理和更大的吞吐量,促進了區塊鏈的良性發展。分片按技術類型可劃分為 網絡分片,交易分片,狀態分片[39]。
網絡分片是將整個區塊鏈網絡劃分成多個子網絡即分片,網絡分片中處理效率 是和分片數量成線性相關,劃分的子網絡越多交易處理效率也就越高。網絡分片是 所有分片的基礎,在進行交易分片和狀態分片之前都需要先進行網絡分片。
青島大學碩士學位論文 交易分片則是在網絡分片之上添加以交易為維度的分片,不同的交易會按照如 交易類型、發起地址等被分配到不同的分片中被處理,從而更高效的完成交易。
狀態分片是徹底將整個存儲區分開,使得每個分片存儲的數據都具備數據完整 性,如在存儲人員信息時會將某個人的信息全部存儲進入某個分片,而不會將身份 證、性別等數據字段打散存儲,從而降低各個分片之間的數據關聯性,提高存儲擴 展性[40]。
3.1.6有向無環圖 DAG
有向無環圖DAG主要是用于解決公有鏈的諸多問題,如比特幣這類區塊鏈由于 只有一個出度和入度,無法將一條鏈分拆成多個部分,一份交易從入度進入后必須 要經過全鏈到達出度,從而處理效率很慢。有向無環圖DAG大膽的將傳統的只有一 個出入度的鏈式結構升級為存在多個出入度的網狀拓撲圖網絡,可以將圖進行分拆 后連接多個出入度節點,從而同時處理多個交易,極大地提高了處理效率和吞吐量 [41]。DAG具有以下特點:
1•交易速度快,圖結構的DAG可以采取對交易可以異步處理,并且無需將其打 包為區塊就可以直接廣播進入網絡,極大地提高了交易吞吐量和速度。
2•可拓展性強,各個節點間可異步計算從而省去了排隊等待的時間,并且與傳 統區塊鏈參與節點越多速度越慢相反,在DAG中參與的節點越多速度越快,因為網 狀結構中節點越多則出入度越多,交易可選擇的路徑也就更多。
3•作惡難度大,鏈式結構只有一個出度入度,但DAG所采用的網式結構內存在 大量的出度和入度,只要其中某一個節點有所改動,與其對應的出入度全部需要修 改,使得作惡難度大大增加。
由于鏈式結構只有一個出度入度,所以不能并行計算,只能按照區塊生成的時 間順序依次寫入,導致大量時間花費在排隊等待寫入中,DAG由于是網狀拓撲結構, 存在多個出入度從而可以進行并發執行交易,在發起交易時不需要排隊等待之前的 交易。因為DAG是不需要使用區塊存儲信息,所以DAG中不存在區塊的概念,交易 確認的方式是通過驗證新交易時引用舊交易來進行記賬的,從而也就不存在容量限 制的問題。DAG不要求全網數據時刻保持一致,具備一定的容錯能力,允許各賬本 之間在短時間內可以存在一些很小的差異,從而達到減少發生交易阻塞的效果。因 此DAG鏈是一種設計更加合理、性能更高且具備較強擴展性的區塊鏈結構[42]。
3.2提出鏈上鏈外數據分割存儲方案
3.2.1 etherQL 系統的局限
Li Yang 在其論文《A query layer for blockchain system》中構建了 etherQL 系統從而提升對區塊鏈數據的查詢速度,該系統在區塊鏈之外設計了一個單獨的查 詢層,通過將區塊鏈數據全部復制到一個與其獨立的外部數據庫中,并定時同步區 塊鏈數據,在查詢數據時則只需要訪問外部數據庫即可而無需再對區塊鏈網絡發起 請求[43]。因為區塊鏈對數據的操作需要經過各個節點的共識和同步等過程,所以將 區塊鏈數據全部拿到外部數據庫后的查詢速度是要高于在區塊鏈網絡中的,并且將 大量查詢請求放在外部進行,可以有效減少對區塊鏈網絡的請求次數,從而提升區 塊鏈網絡性能。
圖 3.4etherQL 系統架構
etherQL的被構建的目的自始至終并不是為了解決區塊鏈存儲空間有限這一問 題,而是為解決區塊鏈查詢與寫入數據緩慢的問題,但etherQL的思想卻可以被借 鑒用于解決區塊存儲空間有限問題。
etherQL是將區塊鏈的原始數據全部復制到外部數據庫,并且由于完全將數據 庫進行外掛設計,導致區塊鏈數據和外部數據庫數據無關聯存在割裂,需要定時同
青島大學碩士學位論文 步全網數據。通過研究etherQL系統,吸納其思想,總結其局限,本文擴展的提出 了數據分割鏈上鏈外存儲模型,通過將數據塊按照密級分割并分別存儲于鏈上和鏈 下數據庫,使用雙包hash數據一致性驗證方法保證鏈下數據的完整性,從而有效解 決區塊鏈存儲空間不足的問題,并提高了寫入和查詢的性能,減少了耗費時間[44]。
3.2.2 數據分割鏈上鏈外分離存儲
大多數業務場景中的數據按照密級程度均可分為核心數據和非核心數據,如人 員信息管理中,身份證、電話號碼、家庭住址屬于核心數據,年齡、性別、所在部 門則是非核心數據。數據上鏈的核心是為解決數據安全性,而密級不同的數據其所 需的安全性也不相同,低密級數據同高密級數據一起按照高密級安全性存儲進入區 塊鏈,則是對區塊鏈資源的一種浪費,同時也擠占了高密級數據應有的資源。
所以若將低密級數據與高密級數據進行解耦,并將高密級數據進行上鏈操作, 低密級數據存儲進鏈下,并在一定程度上也保障低密級數據的安全性,使得區塊資 源被有效利用,減少非核心數據對區塊資源的擠占,提升區塊鏈性能,降低區塊數 據冗余,實現區塊擴容的效果。此擴容方案的核心思想可以總結為三點:
1.一份數據可以劃分高低密級;
2.不同密級享受不同安全保障;
3.有效利用有限空間實現擴容;
圖3. 5區塊數據分割存儲
如圖 3.5所示,一部分核心數據存儲在區塊鏈中,剩余的大量非核心的數據則 可以進行分割后存儲在區塊鏈外部的中心數據庫中,由于中心數據庫對數據的存儲 相比于區塊鏈有著極其大的可擴展性,存儲性能遠高于區塊鏈,所以大大的減輕了 區塊鏈存儲壓力,降低了區塊鏈數據冗余,使得存儲資源被更高效的利用。
圖 3.6表示的是把數據分割存儲到區塊鏈及中央數據庫的過程。由于大多數的 業務數據均可按照密級劃分為核心和非核心數據,因此當信息被錄入時,可以選擇
青島大學碩士學位論文 某些高密級數據作為核心數據,并將這些數據打包為一個數據塊存儲在區塊鏈網絡 中,其他非核心數據則先對其進行SHA256運算,并且將獲得的哈希值也和核心數據 塊一起打包存儲進入區塊鏈網絡中,作為存證用于后續查詢時的數據完整性驗證, 然后再將非核心數據存儲進入中心數據庫中。存儲在區塊鏈中的核心數據可以利用 區塊鏈自身的特性達到防篡改、可追溯的效果,非核心數據存儲在中央數據庫中, 可以有效減少區塊鏈上數據的冗余性[45]。
圖 3.6 分割存儲流程圖
3. 2. 3雙包hash數據一致性驗證方法
雖然非核心數據的密級低于核心數據,但這一非核心的定義是具備相對性的, 所以依然要保證非核心數據的安全性。在將非核心數據與核心數據進行分割解耦時, 會將非核心數據進行 SHA256 運算后,將得到的哈希值也和核心數據一起存儲進入區 塊鏈中,當從中心數據庫中調取數據時,將調取出的數據再執行一遍SHA256操作, 這樣就得到了新舊兩個針對于非核心數據的哈希值,將得到的新哈希值結果與先前 存儲在區塊鏈中的舊哈希值進行比對,如果兩者相同,則意味著中心數據庫中的數 據具有沒有改變。
圖3. 7顯示了查詢數據和驗證完整性的過程,提出了雙包hash數據一致性驗證 方法。首先使用關鍵字索引在區塊鏈網絡和中心數據庫中搜索對應數據,并對從中
青島大學碩士學位論文 心數據庫查詢的數據進行哈希處理以獲取哈希結果B,將取自區塊鏈中先前保存的 哈希值A與B進行比較。如果它們相等,則證明數據尚未被修改。然后便可將分別 位于區塊鏈中的核心數據和位于中心數據庫的非核心數據進行拼接,從而復原回存 儲進入之前被分割的原始數據。
SHA256 算法可以將任意長度的數據生成一個唯一的 256 位哈希值,這一哈希值 便是該數據的身份證或者是指紋。因為數據產生的哈希值具備唯一性,所以如果將 數據的僅僅一個字符修改,則最終生成的的哈希值將完全不同,因此任何對數據的 微小改動都會導致前后的哈希值存在差異,通過校驗哈希值就可以判斷數據是否被 修改過,這一特性可以使哈希值用于驗證數據的完整性汕。在此介紹一下SHA256算 法計算過程:
(1)初始化參數。取前8個素數的平方根的前32位自然數中的數字(2、3、5、 7、11、13、17、19)得到 8 個參數
H0 = 0x6a09e667; H1 = 0xbb67ae85;
H2 = 0x3c6ef372; H3 = 0xa54ff53a;
H4 = 0x510e527f; H5 = 0x9b05688c;
H6 = 0x1f83d9ab; H8 = 0x5be0cd19;
(2)準備消息列表W
W = Mt⑴(0 < t < 15) 公式 3-⑴
W =攜256) (Wt_2)+ Wt_7 + ^0256) (Wt_15) + Wt_16(16 < t < 63) 公式 3-(2)
( 3 )用每輪哈希值的中間結果初始化8 個變量。
(4)對于0 < t < 63,執行壓縮函數。
256
T1 = h + R (e) + Ch(e, f, g) + K詈 + Wt 公式 3-(3)
T2 = h + 工(a) + M a£a, b, c) 公式 3-(4)
h = g;g = f;f = e;e = d + T1 ;d = c;c = b;b = a;a = T1 + T2 ;
(5)將壓縮塊添加到當前哈希值
H0) = a + HO:1 ; H() = b + H/T); H* = c + H2i^1) ; Hf = d + Hj1 ; H 4) = e + H 4-1) ; H 5) = f + H 5-1) ; H 6) = g + Hf1 ; H = h + ;
(6)合并輸出哈希值即消息摘要
digest = hash = H0 append H1 append H2 append H3 append H4 append H5 append H6 append H7 綜上所述,數據分割鏈上鏈外存儲方案是一種第二層擴容方案,在不對現有區 塊鏈結構進行大范圍的改動下,通過數據分割的形式實現了區塊鏈資源的有效合理 使用,并通過雙包hash數據一致性驗證方法保障鏈下數據的安全性,這一擴容方案 將大量的非核心數據存儲在鏈下,減少了鏈上數據冗余,增大了核心數據的存儲空 間,加快了數據的查詢和寫入速度,提升區塊鏈性能。
3.3本章小結
本章主要介紹了區塊鏈擴容問題的產生背景,以及當前主要采取的解決方案。 擴容一直是制約區塊鏈發展的重要問題,目前業界對擴容方案主要分為第一層及第 二層,并提出了數十種具體的擴容方案,將擴容這一概念跳出其本身字面意義,并 不單單只是指擴充容量,如閃電網絡和分片技術實質上并沒有做到直接擴充容量, 但是通過特定的設計模式與數據存儲方案則可以達到同樣擴容的效果。本文基于 etherQL的理念提出了數據分割鏈上鏈外存儲方案,通過分割數據來減少區塊鏈冗 余,提升數據吞吐性能,使用雙包hash數據一致性驗證方法來保障被分割數據的安 全性。
4基于區塊鏈采用數據分割鏈上鏈外存儲的人員信息管理系統
根據對區塊鏈技術的學習和研究,梳理出存儲空間這一制約區塊鏈發展應用的 重要問題,從而重點探索造成這一問題的歷史和技術原因,以及目前五個主要解決 這一問題的方案,分別對其進行優劣研究后,提出了數據分割鏈上鏈外存儲方案來 在一定程度上解決區塊鏈存儲空間不足問題。本章將利用上述分析和提出的方案, 選取人員信息管理這一具有代表性的場景,利用軟件工程知識,對系統進行架構設 計,嘗試構建基于區塊鏈并且采用了數據分割鏈上鏈外存儲方案的人員信息管理系 統,并對這一系統的功能可用性和性能進行測試,從而探索區塊鏈與信息管理相結 合的可能性[47]。
4.1需求分析
需求分析是軟件開發生命周期的第一步,也是決定最終軟件質量最重要的一環, 對后續的架構設計和開發實施起到了重要作用。本文的研究目標是通過數據分割鏈 上鏈外存儲方案來解決區塊鏈存儲空間不足問題,從而實現區塊鏈與信息管理的結 合,基于區塊鏈技術實現安全穩定、防篡改、可追溯的人員信息管理系統。本節將 分別從功能性需求和非功能性需求兩方面進行分析,并繪制程序流程圖、ER圖、用 例圖等對需求進行更詳細描述,為接下來的整體架構設計和功能模塊實現打下基礎。
4.1.1功能性需求
本系統的核心是能夠基于區塊鏈實現對大量人員信息的存儲和管理,所有信息 管理系統的四大核心需求均為增刪改查,故首要能夠實現這四大需求,并在此之上 實現諸如用戶注冊、登錄、權限管理、用戶角色劃分等,圖 4.1 是系統主干流程圖, 用戶登錄后需要進行身份判斷,本系統內置三級用戶,分別是超級管理員、管理員 以及普通用戶,每級用戶所能夠看到的界面及操作權限均不相同。然后進行信息上 傳及重復校驗,通過校驗后進行數據分割,并將非核心數據生成hash存證與核心數 據打包,然后分別進行中心數據存儲和區塊鏈網絡存儲,兩方存儲完成后執行智能 合約,最終返回客戶端,至此完成該系統主干流程。
從用戶視角出發,用戶可見及可操作模塊分為四大模塊,分別為數據查詢模塊、 數據寫入模塊、用戶管理模塊和數據分析模塊。數據查詢模塊包括了對可查詢數據 的追溯功能,以及根據身份證、工號、姓名字段對用戶信息查詢。數據寫入模塊包 括了錄入數據以及對需要分別保存在鏈上和鏈下的字段進行設置的功能。用戶管理 模塊由用戶權限管理、用戶級別管理、注冊及登錄功能組成。數據分析模塊包括了 對系統內數據諸如地區分布、年齡分布的圖表可視化。用例圖如圖4.2所示。
圖 4.2 系統用例圖
對需求進行更細粒度的拆分后,總共歸納出如表4.1的 19個具體需求。
表 4.1 功能需求表
需求名稱 需求說明 角色
用戶注冊 創建一個新賬號用于登錄系統 用戶
用戶登錄 使用已創建好的賬號用于登錄系統 用戶
用戶級別管理 上級用戶可為下級用戶定義其級別 用戶
用戶權限管理 設置每級用戶可操作權限 用戶
信息追溯 對所有上傳信息可進行歷史操作追溯 用戶
信息查詢 在自有權限下,可根據預設關鍵字段進行相應信息查詢 用戶
信息修改 在自有權限下,可對已查詢數據進行信息修改 用戶
信息寫入 在自有權限下,可寫入數據 用戶
核心數據設置 可設置寫入數據中的核心與非核心數據 用戶
節點信息配置 配置區塊鏈網絡中Orderer節點、Peer節點的地址
等信息 系統
創建通道 在客戶端對區塊鏈網絡里的相關通路執行創建和
初始化操作 系統
部署鏈碼 初始化鏈碼,并將其安裝進區塊鏈網絡中的各
節點上 系統
創建查詢請求 創建對應于鏈碼、對查詢類功能的查詢請求 系統
發送查詢請求 發送查詢請求給區塊鏈網絡 系統
創建寫入請求 創建對應于鏈碼、對寫入類功能的查詢請求 系統
發送寫入請求 發送寫入請求給區塊鏈網絡 系統
生成數據 hash 對目標數據進行哈希運算獲得 hash 值 系統
數據分析可視化 對目前系統內的數據進行分析及可視化 系統
測試數據生成 生成用于測試系統功能和可用性的模擬數據 系統
4.1.2非功能性需求
除功能性需求外,平臺實現還應從安全性、可靠性、可擴展性、易用性等方面 考慮,滿足以下必要的非功能性需求:
1.安全性:平臺存儲了大量人員信息,數據泄露或篡改將會帶來巨大損失,因 此如何結合區塊鏈技術對人員信息更好的保護,是平臺設計的根本目的。
2.可靠性:平臺應具有較強的魯棒性、容錯率和告警機制,能夠在外部攻擊和 內部故障時,較快找出原因,最快速度修復,并及時進行數據備份和做好數據恢復 機制[48]。
3.可擴展性:平臺應該能夠具備合理的設計和編碼,在不影響其他功能和數據 的前提下,可以低成本進行新增功能模塊。
4.易用性:平臺應突出展現其核心功能,具備良好的用戶體驗和視覺界面,讓 新用戶可以無需進行復雜的學習就快速上手簡單操作,當出現錯誤操作或異常操作 時都應有明顯提示及原因告知從而引導用戶排除錯誤。
另外還需保障具備較高的吞吐速度,因為區塊鏈對數據的寫入和查詢速度慢飽 為詬病,其中的原因涉及到各個節點的共識、數據冗余等等問題,本文采用聯盟鏈 和數據分割鏈上鏈外存儲方案,在一定程度上緩解了節點共識和數據冗余的問題, 提升存取性能。
4.2總體設計
本系統使用 MVC 設計模式,采用 Hyperledger Fabric 作為底層區塊鏈技術平臺 來設計人員信息管理系統,并結合上文中所創新性提出的數據分割鏈上鏈外存儲方 案,將原來系統中的核心數據及操作全部存儲進入區塊鏈網絡,所有對數據的操作 過程和經手人員也詳細記錄在區塊鏈中,有效保障了數據安全的同時也解決了傳統 人員信息管理的數據泄露隱患,以及區塊鏈存儲空間不足冗余問題[49]。
4.2.1系統架構設計
基于區塊鏈采用數據分割鏈上鏈外存儲方案的人員信息管理系統架構如圖 4.3 所示。整個系統采用三層設計,從上到下是用戶視圖層,控制層和 Hyperledger Fabric區塊鏈網絡數據層。采用前后端分離的MVC設計模式,將用戶對軟件的操作 與數據處理進行分離,用戶只需關注軟件本身,簡單直接的實現自己需要進行的處 理和操作,復雜的后端數據處理對用戶則是處在一種黑箱狀態,無需讓用戶感知到 具體的實現原理和過程。所以前后端分離的MVC設計模式具備低內聚高耦合特性, 易于系統的開發與維護,具備更高的可擴展性[50]。
青島大學碩士學位論文 交互層主要負責業務數據的顯示、數據可視化、流程可視化、對數據發起操作 等,根據數據模型和業務模型來設計與創建。視圖層是展現到用戶面前并與用戶產 生視覺互動,交互層將用戶的對系統的操作轉化為信息數據后向下轉交給控制層, 同時將從控制層返回的數據結果轉化為用戶可理解的信息展現給用戶,交互層是用 戶能夠直接接觸的系統層面,決定了數據如何展示以及用戶如何對數據進行操作。
控制層包含的是人員信息管理的基本模塊,用來實現系統的核心業務邏輯,起 到了承上啟下的作用,啟下是將視圖層用戶對數據所發起的寫入轉換成區塊鏈交易 發送至底層的數據層,然后進行數據的分割、hash存證、打包及存入。承上則是接 收到用戶對數據發起查詢操作后,將關鍵字段傳入底層數據層獲取到中心數據庫和 區塊鏈網絡的分割數據,并對其進行完整性驗證后,合并打包傳入視圖層展現給用 戶。控制層分為四個功能模塊:用戶管理模塊,信息查詢模塊,信息修改模塊和信 息添加模塊,鏈碼用于對區塊鏈數據進行智能合約操作。
Hyperledger Fabric 區塊鏈網絡數據層接收控制層的業務數據然后分情況處 理,大多數非核心數據存儲在中心數據庫中,只有核心數據存儲在區塊鏈網絡中。
MSP 是用于在區塊鏈中發布和驗證證書和身份的一組加密機制和協議,它是一個可 插入的接口。CA用于生成證書和秘密密鑰,初始化MSP,并且orderer節點用于分 發數據[51]。
其中在數據層可看到整個數據存儲方案由區塊鏈網絡和中心數據庫結合而成, 這一部分便是創新性的數據分割鏈上鏈外存儲方案的核心,其具體的技術和設計架 構已經在第三章進行過詳細闡述,故在此不再進行贅述。
圖 4.3 系統架構圖
4.2.2成員和組織訪問機制
本系統區塊鏈網絡使用的是 Hyperledger Fabric 聯盟鏈,所有要加入網絡的節 點都必須要經過注冊并獲得由CA頒發的證書,然后再通過證書生成Token,最終作 為用戶在聯盟鏈中進行增加、查詢的身份憑證[52]。
圖 4.4Fabric 用戶注冊流程
Hyperledger fabric網絡內的MSP成員服務提供商組件可以對網絡內各成員之 間的關系以及證書頒發、用戶認證等協議都進行抽象。每個MSP可對身份認證、簽 名生成和認證等規則自定義,在為每個成員頒發數字證書后,就可以結合其所屬 MSP 進行身份認證和權限控制,并且由于一個 Hyperledger Fabric 網絡可以存在多個 MSP,通過實現成員的模塊化管理,對不同成員標準與架構的業務也可進行兼容陰。
4.2.3數據結構
根據系統的用戶角色和功能,原型系統的數據結構如圖 4.5 所示。寫入信息后, 管理員可以設置某些高密級字段作為核心字段,繼而在后續的存儲中會將核心信息 與沒有被勾選的非核心信息進行分割存儲。EditTime是當前信息被存儲或修改生效 時的時間戳,Eid tor是當前對數據進行操作的用戶,這兩個字段可以用作數據更改 記錄的證明,日后進行數據追溯時,可清晰地知道該條數據在何時被何人進行過處 理,History作為一個對象數組則會逐條記錄以上過程。
type Personnel struct{
ObjectType string
Name string
Gender string
Nati on string
EntitylD string
teleNumber string
Place st ting
BirthDay string
EntryDate string
EditTime string
GraduateSchool string
Major string
Educati on Degree string
Position string
Positio nLevel string
Department string
WorkNumber string
Editor string
} 5 []Historyltem
圖 4.5 數據結構
4.3智能合約設計
4.3.1鏈碼函數設計
智能合約是區塊鏈的重要組成部分,在 Hyperledger Fabric 中的智能合約被稱 為Chaincode,使用go語言編寫,支持區塊鏈對數據的處理邏輯,表4.2為本系統 對數據操作的基本鏈碼函數及所需傳遞參數[54]。
表 4.2 鏈碼函數表
函數名 參數 描述
Init ChaincodeStubInterface 鏈碼初始化
Invoke ChaincodeStubInterface 接受并處理客戶端請
求
PutPer ChaincodeStubInterface,Personnel 保存人員信息
GetPerInfo ChaincodeStubInterface, entityID 根據身份證號查詢人 員信息
getPerByQueryString ChaincodeStubInterface, queryString 根據指定關鍵詞查詢
人員信息
addPer ChaincodeStubInterface, Personnel 添加人員信息
queryPerByWorkNumberAn
dName ChaincodeStubInterface, WorkNumber 根據工號查詢人員信 息
queryPerInfoByEntityID ChaincodeStubInterface, entityID 根據身份證號碼溯源 人員信息
updatePer ChaincodeStubInterface, entityID 根據身份證號更新人 員信息
Init和Invoke是必須要在鏈碼中創建的兩個函數,Init方法用于對鏈碼實現 的初始化,Invoke方法則在查詢時會被調用,Invoke屬于一種分發函數,其會判斷 用戶意圖然后再出發調用其他的鏈碼。
圖4.6則為鏈碼的結構圖,首先在main文件中引入peer包和shim包,shim 包介于鏈碼與賬本之間,在兩者的交互中起橋梁作用,為鏈碼提供了用于訪問事務 上下文、狀態變量及訪問其他鏈碼的接口,鏈碼再通過 shim.ChaincodeStub 函數來 讀取和修改賬本狀態。然后構建 PersonnelChaincode 結構體,初始化完成后返回 shim.Success。其后為該結構體搭建Invoke方法,Invoke方法主要作用于鏈碼運 行過程中被訪問或查詢的處理邏輯,以捕獲當前用戶意圖并進行鏈碼分發調用,相 當于是鏈碼的中轉站,首先通過stub.getFunctionAndParameters返回一個對象, 對象中包含要調用的鏈碼方法名fun,以及要傳入目標方法的參數對象args,然后 根據獲得的fun判斷并調起相對應的鏈碼函數,可被調用的鏈碼函數必然都是事先 已經寫好的,在調起函數后向其傳入stub和args這兩個參數。然后構建執行主函 數main,在函數內部調用shim. Start并傳入PersonnelChaincode結構體后就可以 啟動鏈碼。
PutPer 鏈碼函數用于保存人員信息,在接收到 personnel 這一 args 參數后, 執行 json.Marshal 將 personnel 序列化編碼 成 json 字 符串, 然 后 調 用 stub. PutState函數存儲狀態,putState函數的作用是在狀態庫中更新指定的狀態 變量鍵,若變量事先已存在,則覆蓋現有的值,該函數接收兩個參數key和value, 此處key便是EntityID身份證,value則為json化的personnel人員信息。
Get PerInfo鏈碼函數用于根據身份證查找人員信息,在接收到entit yID身份 證參數后,首先使用 stub.GetState 查詢信息狀態,然后將獲取到的結果對其進行 json.Unmarshal 反序列化操作,將格式為 json 字符串的 personnel 解碼到相應的 數據結構,最終返回結構化人員數據。json.Unmarshal接受兩個參數,第一個是待 解碼字符串,也就是通過 stub.GetState 查詢到的信息,第二個是數據結構,這里
青島大學碩士學位論文 傳入&per,其中per為已經聲明好的人員信息。
getPerByQueryString 鏈碼函數用于根據指定的查詢字符串實現富查詢,在接 收到 queryString 查詢關鍵詞后,通過 getQueryResult 方法在狀態數據庫上執行一 個 rich 查詢,返回的 resultsIterator 用于遍歷查詢結果集,因為申請了迭代器資 源,便使用 defer 延遲函數使得在返回數據后自動關閉。隨后對 resultsIterator 執行 for 循環并使用 resultsIterator.Next 逐個獲取元素中的數據后, 使用 buffer.WriteString 來對數據進行拼接。
addPer鏈碼函數用于添加信息,接收的args參數為已經進行過序列化json字 符串格式的待添加人員信息,首先判斷參數合法性后,使用 json.Unmarshal 對接收 的待添加人員信息進行反序列化解碼到相應的數據結構,使用Get PerInfo傳入身份 證EntityID進行查重,確保待添加人員與已有人員沒有沖突,然后使用PutPer將 信息狀態保存,調用 stub.SetEvent 發送事件,最終 shim.Success 反饋響應成功信 號。
queryPerByWorkNumberAndName 鏈碼函數用于根據工號和姓名查詢信息,接收 args 參數分別為工號 WorkNumber 和姓名 name, 首先判斷參數合法性后, 使用 fmt. Sprintf拼裝CouchDB所需要的查詢字符串,然后使用getPerByQueryString 方法傳入剛才格式化后的字符串,查詢到信息后使用 shim.Success 反饋響應成功信 號。
queryPerInfoByEntityID鏈碼函數用于根據身份證號查詢信息并進行溯源,接 收 agrs 參數為 entityID 身份證號后,先使用 GetState 傳入 entityID 查詢人員狀 態,然后使用 json.Unmarshal 對查詢到的信息反序列化解析為人員結構化數據,使 用Get His toryForKey傳入entit yID這一 key值后,隨時間返回鍵值的歷史記錄并 賦值給it era tor,對于每一個歷史的key更新,歷史的值,有關聯的交易ID和時 間戳會被返回。對 iterator 進行 for 循環,依次對元素進行反序列化操作,聲明 historys 對象數組將結構化數據壓入。
updatePer 鏈碼函數用于根據身份證號更新人員信息,接收待更新人員信息參 數并校驗合法性后,使用 json.Unmarshal 對其反序列化解析為結構化人員數據,使 用 GetPerInfo 傳入待更新人員身份證 EntityID 查詢相對應的信息,將待更新信息 的字段依次逐個賦值給查詢得到的resul t,然后使用Put Per傳入更新好的result 保存該人員信息,調用 stub.SetEvent 遞交事件。
圖 4.6 鏈碼結構圖
4.3.2鏈碼與節點通信交互過程
鏈碼與節點進行交互從而達到對數據的操作有如下9 個步驟。
1.鏈碼chaincode首先調用shim. St ar t()函數,將注冊消息發送給節點Peer 嘗試進行注冊,隨后客戶端鏈碼進入等待狀態,等候peer節點向其發送反饋消息, 與此同時節點Peer及鏈碼chaincode的初始狀態都被設置為created。
2.當peer節點獲取到鏈碼容器發送的注冊消息后,即將其注冊到本地的handle 結構中,并將注冊消息返回至鏈碼容器,此時節點和鏈碼的狀態被更新為已建立, 隨后準備完畢消息將自動發出到鏈碼chaincode,狀態也被更新為ready。
3.鏈碼chaincode接收到注冊消息時,首先完成注冊操作后將其狀態更新為已 建立,在此之前不進行任何其他操作,在準備消息被接收后,再將其狀態更新為 ready。
4.節點 Peer 將初始化消息發送給鏈碼容器后對鏈碼進行初始化操作[55]。
5.鏈碼容器在收到初始化消息后調用Init()進行初始化,完成后返回完成消息, 結束以上步驟后鏈碼容器達到了可以被調用的狀態。
6.當鏈碼 chaincode 被調用時節點 Peer 會對鏈碼發出交易消息。
7•鏈碼在收到交易消息之后,會調用負責分發函數的Invoke ()方法,根據用戶
意圖觸發相應的操作,可以將之前事先寫好的函數消息發送給節點Peer。
& Peer節點在收到這些函數消息后會先進行相應的處理,然后回復響應消息。 最后待調用完成后鏈碼 chaincode 會將完成消息發送給 Peer 節點。
9.以上消息交互過程完成后,節點和鏈碼兩者為確定彼此依然是處于在線狀態, 會定期相互發送保持激活消息給對方來確認。
4.3.3交易請求流程
交易是否被允許是由背書策略來決定的,交易有效的前提是必須經過背書策略 被合法化。交易接收方在收到交易請求后,會調用作為交易驗證過程的一部分與交 易鏈碼相關聯的 VSCC 驗證系統鏈碼,以確定該交易的有效性。一個事務由若干個對 等背書節點支持,VSCC除了負責驗證背書策略,還負責檢查每個在交易信息的KV 鍵值對的數據版本是否已更改。
交易背書的工作流程如圖 4.8所示,主要為四個步驟,首先客戶端創建一個交 易后,向背書peer節點發起交易,背書peer節點模擬交易和產生背書簽名,客戶
端通過order節點將發起的交易進行排序服務廣播,最終寫入區塊[56]。
4.4詳細設計
4.4.1 基礎網絡環境搭建
搭建區塊鏈基礎網絡環境,使得可以承載上層系統開發是正式進入開發的第一 步,我們使用go語言作為開發腳本語言,底層系統為Ubuntu,需要安裝或使用到 的的依賴即工具有八個,分別為git、cURL、Docker和Docker-compose。安裝cURL 用于上傳和下載數據和Docker鏡像等。數據存儲和服務運行是在Docker容器中的, Docker也擁有若干優勢包括持續集成、版本控制、可移植性、隔離性和安全性,故 需要安裝 Docker。
本系統所搭建的區塊鏈網絡共計六個容器,一個Orderer,屬于兩個Orgs組 織的四個Peer,以及一個CLI。使用docker-compose通過編寫相應的配置文件可 實現對節點容器的管理。
圖 4.9 網絡拓撲結構
Start environment ???
Creating network "fixtures_default" with the default driver
Creating orderer ...
Creating couchdb
Creating ca.orgl .?.
Creating orderer
Creating couchdb
Creating orderer .?? done
Creating peerQ.orgl .??
Creating peerl.orgl ?•?
Creating peerl.orgl
Creating peerl.orgl .** done
Environment up
Start app ...
Fabric SDK初始化成功
通道已成功創建,
peers已成功加入通道.
幵始安裝鏈碼
指定的鏈碼安裝成功
開始實例化鏈碼
鏈碼實例化成功
通道客戶端創建成功,可以利用此客戶端調用鏈碼進行査詢或執行事務
圖 4.10 網絡環境搭建及鏈碼安裝
4.4.2 三重隨機測試數據生成
在文中對區塊鏈進行改進后的應用場景為人員信息存儲及管理,本文選定企業 人員信息管理為目標原型系統,故需要大量的企業人員數據進行系統測試,而人員 信息在當前社會環境及法律框架下屬于絕對保密信息,無法找到大量的開源人員數 據集進行測試,且因系統具備的數據分析功能需要用于測試的數據集的屬性具備波 動性,不能單純的復制大量相同數據進行測試,故為此單獨編寫了生成模擬人員數 據的腳本,可以生成具備波動性的數據用于系統測試。
選定人員數據中的“地區”、“出生日期”、“畢業院校”、“部門”這四個 字段進行模擬數據生成,其余字段則保持一致,系統單獨對這四個字段進行數據分 析及可視化。
其中地區則預設“青島”、“北京”、“蘭州”“上海”、“深圳”、“寧波”、 “杭州”、“成都”、“廣州”、“深圳”這十個城市中選定。出生日期則預設從 1990至2000這20年中選定。畢業院校則預設從“某大學A”、“某大學B” “某 大學C”、“某大學D”、“某大學E”這五所學校中選定。部門則從“信息部”、
“產品部”、“財務部”、“行政部”四個部門中選定。
為保證數據的隨機性和波動性,需要生成帶有一定權重的隨機數據,且權重的 比例也為隨機。若直接隨機生成則會導致多個預設條件在大量數據下呈現等比情況, 無法進行有效的模擬數據分析。生成帶有權重的隨機數據思路如下:
1•預設隨機條件及條件數量N,隨機選定0至100內的N-1個數,從而可以將0 至 100 劃分為五個隨機數段區間,可以保證區間的劃分隨機且不等比。
2•將劃分好的區間與N個條件進行隨機匹配對應,保證區間與條件的匹配隨機。
3.生成一個0至100內的隨機數X,并判定該數字落定的區間及其對應的條件, 保證落點位隨機。
通過以上三步的三重隨機后產出的數據則盡可能的保證了數據的隨機性且帶有 權重波動性。
圖 4.11 三重隨機測試數據生成過程
4.4.3用戶管理模塊
用戶管理模塊分為用戶的登錄、注冊,以及對用戶的級別和權限管理。用戶角 色分為管理員和普通用戶,并且可以單獨對某個用戶進行更細粒度的權限管理。圖 4. 12為本系統的登錄頁,輸入賬號和密碼后調取數據庫中用戶表進行校驗并通過后 即可登錄,點擊注冊后則進入注冊頁,輸入用戶名和密碼,調取數據庫用戶表對用 戶名進行唯一性校驗,通過后即注冊成功,并將注冊數據寫入用戶表。
基于數據分割鏈上鏈夕卜存儲的員工信息薛系統
潯輸入您餌5K戶艇碼
注冊
圖 4.12 登錄頁
圖 4.13 為用戶管理模塊,該模塊可以對當前已注冊的用戶進行全局角色和權限 管理。用戶角色分為管理員和普通用戶兩類,adminl為本系統內置的默認管理員賬 號,其余賬號為后期注冊加入,adminl賬號為永久管理員賬號,不可由自己及其他 管理員切換為普通用戶,也不可對任何初始權限進行修改,故在系統中 admin1 的角 色和權限設置均被置灰。管理員賬號可以對角色進行勾選切換,其中切換到管理員 角色后,則會將權限欄內所有的權限進行自動勾選,切換到用戶角色后,則自動將 權限欄內只默認勾選到查找人員權限。管理員賬號可以對除 adminl 賬號外的所有賬 號進行角色切換及權限賦予,其中權限分拆后包括查找人員、新增人員、修改人員 和追溯信息,不同的角色和被賦予不同權限的賬號所看到的頁面也不相同,并且本 系統不單只做了前端頁面隱藏,還對每一個頁面的前置加載階段均加了用戶身份識 別過程,防止頁面路徑泄露導致的權限溢出,如某個用戶不具備新增人員權限,故 他所打開的頁面便無此權限的入口,若僅僅在前端頁面隱藏該入口,假使他得知該 入口頁面的 url 路徑,則可通過該路徑進入不具備權限的頁面,所以在每個頁面的 加載階段均進行身份及權限的識別,可有效保障數據安全。
融數塞晝詢 塞寫入 JS齬分析用戶管理 JUUBS. adminl 安全退出
扁號 用戶名 角色 權HI «il
0 WAWtH 1 xirrtnl © tt9H (j用戶 @營規人貝 @斷増人員 G 人員 iBil人員 注
直IS上趙外學取設H 2 tdmin2 0 ta» G BttA員 ® WSAB 0 追潮人員 甩擊注
3 userl 0用戶 G賈找人員 ©餉増人員 僅改人員 ia鏑人賈 點擊輻入奮注
4 uter2 ■理員 ◎用戶 0 •找人員 斷1■人員 C •改人員 追潮人員 點擊W)入*注
MSifil
圖 4.l3 用戶管理模塊
圖4.14為權限管理ER圖,采用了權限-角色-用戶分離的低耦合關聯設計,角 色和權限是1 對多的關系,用戶和角色為1 對1 關系,使用角色將權限與用戶之間 隔離開,先對用戶賦予角色,再對角色賦予權限,這樣的設計可以使得權限管理更 加清晰,數據管控更加緊密,防止權限直接對應到用戶所產生的混亂進而導致數據 安全問題。
加、修改、查詢和數據可視化,其依賴于Account賬戶類,包括了賬戶名和密碼, Admin繼承于User,可以實現對用戶的權限劃分。User與Personnel是關聯關系, Personnel由User創建,并可進行修改和查詢操作。Personnel與DataView是聚合 關系,DataView包括了參數類型、比例及圖表類型,OperationHistory與Personnel 是關聯關系,記錄Personnel的變化,包括了操作人、時間、類型和id信息。
+ObjectType: string +Name: string +Gender: string +Nation: string +EntitylD: string +teleNumber: string +Place: string +BirthDay: string +EnterDate: string +Gra duateSchool: string +Major: string +E ducation Degree: string +Position: string +PositionLevel: string +Department: string +WordNumber: string +Editor: string +History: array
圖 4.l5 類圖
4.4.4數據查詢模塊
數據查詢模塊是用戶登錄進入系統后的第一個展示模塊,該模塊具備四個操作 欄目,“所有員工數據”可顯示當前系統內全部已錄入人員數據,以及對數據可進 行三種條件查詢,分別為“根據工號查詢”、“根據姓名查詢”和“根據身份證號 碼查詢”。
在查詢出單條數據后,先檢測當前用戶的角色和所具備的權限,然后顯示權限 下可對數據進行刷新、修改和刪除操作,其中刪除為邏輯刪除非物理刪除。查詢出 的數據上方顯示為最近一次更新的數據,下方則會顯示該條數據所對應人員的歷史 追溯數據,分別由舊至新自上而下排列,所有排列數據是否修改均以第一條原始數 據為基準,若某個字段與原始數據不同則會被標記為紅色,這樣的系統設計可以使 得用戶清晰明了的獲知整個系統內的數據更新情況,具有良好的交互體驗。
圖 4.16 顯示所有數據
圖 4.17 條件查詢數據
4.4.5數據寫入模塊
數據寫入模塊所承擔的主要功能為人員信息數據的錄入以及鏈上鏈外字段的設 置。當用戶第一次錄入數據時,需要首先設置哪些字段是需要存儲在鏈上的,哪些 是需要存儲于鏈下,勾選是否上鏈并保存后,被勾選的字段則會被打包存儲進入區 塊鏈網絡,沒有被勾選的則會被存儲進中心數據庫,通過分離存儲可以使得區塊資 源被有效利用,具體的理論及實現細節已經于第三章詳細描述,此處不再進行贅述。
圖 4.18 人員信息數據錄入
卑業院校
專業 學歷 職位 職級 部門 工號
確宦設養
圖 4.19 鏈上鏈外字段設置
4.4.6數據分析模塊
因本系統屬于管理型系統,數據分析及圖表可視化可以使得管理者清晰地了解
青島大學碩士學位論文 存儲在系統內的數據情況。上文中所描述到的三重隨機測試數據生成方法,可以模 擬生成具有波動性的隨機數據,即帶有一定權重的隨機數據,從而可以更直觀的展 現在圖表上。測試數據中對員工的地區、年齡、學校和部門進行了波動性數據的生 成,故此模塊引入了 echarts分別對這四個字段數據進行了可視化。
圖 4.20 數據分析及可視化
4.5本章小結
本章介紹了基于區塊鏈采用數據分割鏈上鏈外存儲方案所設計開發的一套人員 信息管理系統,結合可行性梳理出功能性和非功能性共24項需求。然后進行了總體 設計、智能合約設計和詳細設計,重點包括了如何將鏈上鏈外數據分割存儲方案與 本系統進行結合,以及為在開發階段生成足夠多的演示數據提出了三重隨機測試數 據生成方法,最后分模塊進行了設計,使得原型系統落地具備可用性。
5系統測試
在軟件運行過程中可能會出現各種意想不到的問題,其中一部分是由于開發者 在開發時的疏忽導致產生的問題,另一部分則是由于用戶在使用軟件時沒有按照開 發者所預期的既定操作路線而導致的。軟件出現問題是不可避免的,只有通過詳盡 全面的測試才可以盡可能的減少軟件出現問題的概率。
軟件測試分為黑盒測試和白盒測試,黑盒測試主要針對功能測試其可用性,白 盒測試則深入到代碼和數據層面測試接口及數據邊界等問題。由于本系統中融合了 文中第三章所提出的鏈上鏈外數據分割存儲方法,不僅僅只是一個功能型管理系統, 故需要單獨對這一數據存儲方法再進行可用性和性能測試。
5.1系統功能測試
對本系統的功能測試主要分為區塊鏈功能測試和系統功能測試,其中區塊鏈功 能測試包括了對鏈上鏈外數據分割存儲方法的測試,主要以白盒測試為主,重點檢 測能否正常的搭建區塊鏈網絡、各接口數據傳輸是否正常、數據可否按照預期分割 存儲等。系統功能測試則主要以黑盒測試為主,重點檢測賬號能否正常登錄、信息 可否正常添加、修改和查詢,以及用戶角色及權限的配置是否正常等。
表 5.1 區塊鏈功能測試用例及結果
測試編號 測試內容 測試過程 測試結果
T-1 區塊鏈網絡是否正常創 建,一個Orderer,兩個 Orgs 組織,四個 Peer, 以及一個 CLI 配置完成網絡后,輸入 docker-compose up 后啟動網絡,并輸入 docker ps 查看 節點是否運行正常 通過
T-2 鏈碼數據初始化是否正
常,即檢測Init函數 在 init 函數中使用 PutState 方法測試 能否正常初始化數據 通過
T-3 更新或查詢數據是否正
常,即檢測 invoke 函數 在 invoke 函數中使用 GetState 方法測 試能否正常讀取數據 通過
T-4 數據是否可以正常分離存
儲 定義一個數據結構,將其分為兩部分數 據,分別進行標識,在存儲時檢測標識 后分別存儲進入區塊鏈網絡和本地數據 庫 通過
T-5 分離存儲后的數據可否正
常進行完整性驗證 將分離存儲后的數據取出后,對本地數 據庫數據進行SHA256后將其結果與先前 存儲進區塊鏈網絡的哈希結果進行比對 是否一致 通過
表 5.2 系統功能測試用例及結果
測試編號 測試內容 測試過程 測試結果
T-1 系統可否正常登錄 創建賬號后輸入相應的賬戶名和密碼進
行登錄 通過
T-2 用戶權限管理是否正常 創建三個賬戶,一個為初始管理員,另 外兩個為普通用戶,并分別取消數據查 看和寫入權限,依次登錄三個賬戶查看 可否僅使用授權功能 通過
T-3 信息寫入是否正常 錄入一位人員信息 通過
T-4 信息查詢是否正常 分別使用身份證關鍵詞和工號關鍵詞進 行查詢,查詢時分別查詢一位已存在用 戶和不存在用戶 通過
T-5 信息修改是否正常 對已經存在的人員信息進行某項字段的
修改 通過
T-6 信息追溯是否正常 查詢到某位存在修改歷史的人員信息, 檢測能否展示修改歷史,并核對展示出 的修改歷史是否正確 通過
T-7 數據可視化是否正常 生成若干測試數據并導入后,查看可否
正常展示所導入數據的各項數據圖表 通過
T-8 核心上鏈數據字段配置是
否正常 對需要上鏈的數據字段進行配置勾選 后,錄入一位人員信息,分別打印出區 塊鏈數據和中心數據庫數據,核對是否 為相應勾選數據。 通過
T-9 鏈上鏈外數據完整性檢測
是否正常 對某個已經分離存儲的數據修改其中心 數據庫數據,然后再在系統中檢測,查 看兩個 hash 結果是否一致以及能否提示 數據經過修改 通過
5.2數據分割存儲方案測試
數據分割鏈上鏈外存儲方案所解決的主要問題就是區塊鏈存儲空間有限,將數 據進行分離存儲后可有效節約區塊存儲空間,但因數據被分離存儲和查詢,其寫入 和讀取速度必然會受到一定影響,故需要進行性能測試。
通過觀察在數據不分離存儲、分離存儲和分離后僅存儲區塊數據的方式,來對 比讀取和存儲響應時間的變化。設定單個人員信息占用空間大小為50kb,在單獨存 儲方案中,40kb數據存儲在中央數據庫中,10kb數據存儲在區塊鏈網絡中,在非單 獨存儲方案中,50kb數據全部存儲在區塊鏈網絡中。從2000人的數據量開始測試, 2000 遞增,直到 20000 人。圖5.1 與圖5.2 中的藍色曲線是將所有數據存儲在區塊 鏈網絡中。紅色曲線是僅將10 kB的數據存儲到區塊鏈中,以便僅通過減小存儲數
據的大小來觀察對性能的影響。黃色曲線將10 kB的數據存儲到區塊鏈中,其余40 kB的數據存儲在中央數據庫中。
30000 -
人員信息數量
♦全部存儲進入區塊鏈網絡
將數據分離為兩部分,分別存儲進入區塊鏈和中心數據庫
十 將數據分離為兩部分,只將一部分存儲進入區塊鏈,另一部分不做操作
圖5. 1分離存儲寫入數據響應時間
♦全部存儲進入區塊鏈網絡
♦將數據分離為兩部分,分別存儲進入區塊鏈和中心數據庫
—將數據分離為兩部分,只將一部分存儲進入區塊鏈,另一部分不做操作
圖5.2分離存儲查詢數據響應時間
圖5.1 與圖 5.2 示出了隨著區塊鏈上數據量的增加而存儲和查詢數據的響應時 間。由此可見,減少數據量可以有效縮短存儲和查詢響應和時間。由于分離數據存 儲和查詢時需要將數據分別存儲在區塊鏈和本地數據庫中,或從區塊鏈和本地數據 庫中查詢并合并,比不分離存儲,即僅將數據存儲在區塊鏈網絡中多了一步,因此, 當數據量較小時,分離存儲的響應時間將高于不分離存儲的響應時間,但是在本地 數據庫中存儲數據不需要一致性驗證和節點數據同,隨著數據量的增加,分離存儲 的優勢逐漸顯現[57]。
圖 5.3 是對分離與不分離存儲這兩種方法的優劣性分析。在數據管理等需要存 儲大量數據的應用場景中,分離數據存儲的讀寫性能優于非分離數據存儲,特別是 隨著數據量的增加,優勢更加明顯。由于數據是分離存儲的,可以有效減少區塊鏈 網絡上的數據量,中心數據庫是本地存儲的,因此不受存儲容量的限制,可以隨時 擴展,從而具備諸多優點,如加快寫入和查詢速度,提高系統可擴展性和空間利用 率等,但由于部分數據存儲在中心數據庫中,因此該部分數據的安全性低于將所有 數據存儲在區塊鏈中的方案。
還需要對雙包hash數據一致性驗證方法進行有效性測試,即當鏈下數據被修改 后,在進行數據合并時能否被檢測出來。首先預置一個對象用于測試,分別含有姓 名、年齡、性別、身份證和住址,其中身份證和住址為需要上鏈的核心數據,其余 三個為可存儲在鏈下的非核心數據,姓名為張三,年齡為 20,性別為男,此時這三
青島大學碩士學位論文 個字段json化后生成的hash值為:
E57AC22C1A64C7F265021FAF852AFF545172CB3D97395CA429324CAB722BE444
將年齡20改為21后,生成的hash值為:
A82891691FD2D6E7AF5EF9199DCE29C23D950AF1A0469134B7AB4DE8F873159C
當檢測到兩者hash數值不一致后,則進行反序列化,對字段進行逐一核對,找出不 匹配的字段,經過測試后可以成功的對數據進行核驗。
檢測到鋌下數據與初始數據存在不匹酉障段 揪黴捐館亡:26
鋌下姦揺age: 21
圖 5.4 檢測到雙包數據不一致
5.3本章小結
本章對系統進行了測試,包括了功能測試和性能測試,通過黑盒、白盒及接口 測試等方法保障系統可用性,其次對本文中提出的數據分割鏈上鏈下存儲方案單獨 進行了測試,驗證了該方案的可行性。
6總結與展望
6.1總結
區塊鏈被譽為自互聯網誕生以來的又一次數據革命,其眾多優勢如可追溯性、 分布性、不可篡改性等特性是解決現今社會運行過程中所面臨到的如欺詐、盜版、 假貨等問題的有效手段,但是區塊鏈因其自身的一些技術及設計缺陷導致難以真正 落地實施并產業化,尤其是存儲空間的限制與現今越來越龐大的信息數據格格不入。 故本文主要完成了以下工作:
(1)提出了一種鏈上鏈外數據分割存儲方法,以此優化解決了區塊鏈存儲空間 不足及可擴展性低的問題。首先全面的分析了區塊鏈存儲空間受限及難以擴展的歷 史背景和技術難點,綜合對比目前已有的各項解決方案分析優劣性,最后將區塊鏈 與傳統數據庫相結合,對需要存儲的數據進行分割處理,從而極大地減少了鏈上數 據的冗余,節約了有限的存儲空間實現了擴容的效果。
(2) 提出了雙包hash數據一致性驗證方法,從而可以判斷被分割存儲數據的 一致性,一定程度保障鏈下數據的安全。通過在分割時將鏈下數據的hash值與鏈上 數據打包存儲,并在查詢時再對鏈下數據進行散列運算得到新的hash值,兩者進行 對比從而識別數據一致性。
(3) 以大數據人員信息管理作為試驗場景,將優化后的區塊鏈與該場景進行結 合,設計并開發出了一套原型系統,通過測試驗證了數據分割鏈上鏈外存儲方法對 存儲空間的優化程度及區塊鏈與信息管理相結合的可行性。并提出三重隨機數據生 成方法用于產生需要進行測試的數據,可以有效生成帶有隨機權重的隨機數據。
綜上所述,本文分別從區塊鏈大數據存儲的理論創新與應用實踐兩部分實現了 一定的工作成果。
6.2展望
本文目前已完成的工作是對區塊鏈的存儲空間限制問題提出了一定的解決方 案,并基于此設計開發了一套可適用于大數據信息存儲管理的原型系統,但是以上 研究工作依然存在著可以被改進、優化和深入研究擴展的機會:
(1)數據分割鏈上鏈外存儲確實可以有效解決區塊鏈存儲空間有限的問題,但 是盡管使用了雙包hash數據一致性驗證方法保證了鏈下數據一定的安全性,但是對 這一安全性的保障卻是后置而非前置的,即已經對數據篡改后可以識別出來,但是 卻難以實現在數據被篡改前就進行一定的干預,所以可以考慮將在對鏈下數據操作 的事務也進行上鏈處理,進一步保障數據安全性。
(2)所開發的原型系統目前擴展性不足,后期可以向saas化發展,提供更多 可配字段及功能,覆蓋更多業務場景,使得第三方用戶可以簡易接入。
本人將繼續深入研究區塊鏈技術,積極向同行與老師交流,爭取早日優化解決 以上問題,夯實自己的專業素養,為行業奉獻自己的綿薄之力。
參考文獻
[1]Sokolova M, Matwin S. Personal privacy protection in time of big data[M]. Challenges in computational statistics and data mining, 2016: 365-380.
[2]Nisar and S. G. Sahar. Security and Privacy Issues[C]. 2019 2nd International Conference on Computing, Mathematics and Engineering Technologies, 2019: 1-6.
[3]J. Xu et al. Healthchain: A Blockchain-Based Privacy Preserving Scheme for Large-Scale Health Data[C]. In IEEE Internet of Things Journal, 2019: 8770-8781.
[4]Cheng L , Liu F , Yao D D. Enterprise data breach: causes, challenges, prevention, and future directions[J]. Wiley Interdisciplinary Reviews Data Mining & Knowledge Discovery, 2017:e1211.
[5]習近平在中央政治局第十八次集體學習時強調 把區塊鏈作為核心技術自主創新重要突破 口加快推動區塊鏈技術和產業創新發展J] •中國信息安全,2019(11):30.
[6]袁勇,王飛躍.區塊鏈技術發展現狀與展望J].自動化學報,2016,42(04):481-494.
[7]L. Yue, H. Junqin, Q. Shengzhi and W. Ruijin. Big Data Model of Security Sharing Based on Blockchain[C]. 2017 3rd International Conference on Big Data Computing and Communications, 2017: 117-121.
[8]Z. Meng, T. Morizumi, S. Miyata and H. Kinoshita. Design Scheme of Copyright Management System Based on Digital Watermarking and Blockchain[C]. 2018 IEEE 42nd Annual Computer Software and Applications Conference, 2018: 359-364.
叨 劉明達,陳左寧,拾以娟,湯凌韜,曹丹.區塊鏈在數據安全領域的研究進展J/OL].計算機學 報,2020:1-28.
[10]J. Gobel and A. E. Krzesinski. Increased block size and Bitcoin blockchain dynamicsJ]. 2017 27th International Telecommunication Networks and Applications Conference, 2017: 1-6.
[11]A. Marsalek, T. Zefferer, E. Fasllija and D. Tackling Data Inefficiency: Compressing the Bitcoin Blockchain[J]. In Computing And Communications/13th IEEE International Conference On Big Data Science And Engineering, 2019: 626-633.
[12]常興,趙運磊.比特幣擴容技術的發展現狀與展望J].計算機應用與軟件,2019,36(03):49-56.
[13]曾帥,袁勇,倪曉春,王飛躍.面向比特幣的區塊鏈擴容:關鍵技術,制約因素與衍生問題J].自動 化學報,2019,45(06):1015-1030.
[14]S. Nakamoto. Bitcoin: Apeer-to-peer electronic cash system[J], 2009.
[15]P. Manimaran and R. Dhanalakshmi. Blockchain-Based Smart Contract for E-Bidding System[C]. 2019 2nd International Conference on Intelligent Communication and Computational Techniques, 2019: 55-59.
[16]Z. Zheng, S. Xie, H. Dai, X. Chen and H. Wang. An Overview of Blockchain Technology: Architecture, Consensus, and Future Trends[J]. 2017 IEEE International Congress on Big Data (BigData Congress), 2017: 557-564.
[17]許重建,李險峰.區塊鏈交易數據隱私保護方法[J].計算機科學,2020,47(03):281-286.
[18]D. Puthal, N. Malik, S. P. Mohanty, E. Kougianos and C. Yang. The Blockchain as a Decentralized Security Framework [Future Directions]. In IEEE Consumer Electronics Magazine, 2018: 18-21.
[19]S. Dhumwad, M. Sukhadeve, C. Naik, M. K.N. and S. Prabhu. A Peer to Peer Money Transfer Using SHA256 and Merkle Tree[C]. 2017 23RD Annual International Conference in Advanced Computing and Communications, 2017: 40-43.
[20]張偲.區塊鏈技術原理、應用及建議[J].軟件,2016,37(11):51-54.
[21]Dinh T T A , Wang J , Chen G , et al. BLOCKBENCH: A Framework for Analyzing Private Blockchains[J]. 2017.
[22]P. Thakkar, S. Nathan and B. Viswanathan. Performance Benchmarking and Optimizing Hyperledger Fabric Blockchain Platform[C]. 2018 IEEE 26th International Symposium on Modeling, Analysis, and Simulation of Computer and Telecommunication Systems, 2018:264-276.
[23]韓璇,劉亞敏.區塊鏈技術中的共識機制研究[J].信息網絡安全,2017(09):147-152.
[24]陳夢蓉,林英,蘭微,單今朝.基于“獎勵制度”的DPoS共識機制改進[J].計算機科 學,2020,47(02):269-275.
[25]X. Yang, Y. Chen and X. Chen. Effective Scheme against 51% Attack on Proof-of-Work Blockchain with History Weighted Information[C]. 2019 IEEE International Conference on Blockchain, 2019: 261-265.
[26]韓鎮陽,宮寧生,任珈民.一種區塊鏈實用拜占庭容錯算法的改進[J].計算機應用與軟 件,2020,37(02):226-233+294.
[27]鄭敏,王虹,劉洪,譚沖.區塊鏈共識算法研究綜述[J].信息網絡安全,2019(07):8-24.
[28]S. J. Pee, E. S. Kang, J. G. Song and J. W. Jang. Blockchain based smart energy trading platform using smart contract[C]. 2019 International Conference on Artificial Intelligence in Information and Communication, 2019: 322-325.
[29]W. Hu, Z. Fan and Y. Gao. Research on Smart Contract Optimization Method on Blockchain[C]. In IT Professional, 2019: 33-38.
[30]王錫亮,劉學楓,趙淦森.區塊鏈綜述:技術與挑戰[J].無線電通信技術,2018,44(06):5-11.
[31]A. Boicea, F. Radulescu, C. Truica and C. Database Encryption Using Asymmetric Keys: A Case Study[C]. 2017 21st International Conference on Control Systems and Computer Science, 2017: 317-323.
[32]M. B. Yassein, S. Aljawarneh, E. Qawasmeh, W. Mardini and Y. Comprehensive study of symmetric key and asymmetric key encryption algorithms[C]. 2017 International Conference on Engineering and Technology, 2017: 1-7.
[33]Karafiloski E , Mishev A . Blockchain solutions for big data challenges: A literature review[C]. IEEE Eurocon -international Conference on Smart Technologies, 2017.
[34]U. Nadiya, K. Mutijarsa and C. Y. Block Summarization and Compression in Bitcoin
青島大學碩士學位論文 Blockchain[C]. 2018 International Symposium on Electronics and Smart Devices, 2018: 1-4.
[35]喻 輝 , 張 宗 洋 , 劉 建 偉 . 比 特 幣 區 塊 鏈 擴 容 技 術 研 究 [J]. 計 算 機 研 究 與 發 展,2017,54(10):2390-2403.
[36]E. Erdin, M. Cebe, K. Akkaya, E. Bulut and A. S. A Heuristic-Based Private Bitcoin Payment Network Formation Using Off-Chain Links[C]. 2019 IEEE International Conference on Blockchain, 2019: 294-301.
[37]B. N. Musungate, B. Candan, U. C. Qabuk and G. Sidechains: Highlights and Challenges[C]. 2019 Innovations in Intelligent Systems and Applications Conference, 2019: 1-5.
[38]M. Bez, G. Fornari and T. The scalability challenge of ethereum: An initial quantitative analysis[C]. 2019 IEEE International Conference on Service-Oriented System Engineering, 2019: 167-176.
[39]Z. Ren, K. Cong, T. Aerts, B. de Jonge, A. Morais and Z. A Scale-Out Blockchain for Value Transfer with Spontaneous Sharding[C]. 2018 Crypto Valley Conference on Blockchain Technology, 2018: 1-10.
[40]J. Yun, Y. Goh and J. Trust-Based Shard Distribution Scheme for Fault-Tolerant Shard BlockchainNetworks[C]. In IEEEAccess, 2019: 135164-135175.
[41]L. N. Nguyen, T. D. T. Nguyen, T. N. Dinh and M. T. OptChain: Optimal Transactions Placement for Scalable Blockchain Sharding[C]. 2019 IEEE 39th International Conference on Distributed Computing Systems, 2019: 525-535.
[42]S. Yang, Z. Chen, L. Cui, M. Xu, Z. Ming and K. CoDAG: An Efficient and Compacted DAG-Based Blockchain Protocol[C]. 2019 IEEE International Conference on Blockchain, 2019: 314-318.
[43]B. Wang, M. Dabbaghjamanesh, A. Kavousi-Fard and S. Cybersecurity Enhancement of Power Trading Within the Networked Microgrids Based on Blockchain and Directed Acyclic Graph Approach[C]. In IEEE Transactions on Industry Applications, 2019: 7300-7309.
[44]Li Y., Zheng K., Yan Y., Liu Q., Zhou X. EtherQL: A Query Layer for Blockchain System[C]. Database Systems for Advanced Applications, 2017.
[45]呂建富,賴英旭,劉靜.基于鏈上鏈下相結合的日志安全存儲與檢索[J].計算機科 學,2020,47(03):298-303.
[46]李亞楠.基于區塊鏈的數據存儲應用研究[D].北京交通大學,2018.
[47]Rachmawati D , Tarigan J T , Ginting A B C . A comparative study of Message Digest 5(MD5) and SHA256 algorithm[J]. Journal of Physics Conference, 2018, 978.
[48]林凡,鐘萬春,成杰,張廣馳,崔苗,張秋鎮.基于區塊鏈的人員信息管理系統設計J].通信技 術,2019,52(01):222-226.
[49]趙哲.基于區塊鏈的檔案管理系統的研究與設計[D].中國科學技術大學,2018.
[50]Androulaki E , Barger A , Bortnikov V , et al. Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains[J]. 2018.
[51]仵冀穎,杜聰,馬志遠,鄭剛.應用于食品追溯體系的區塊鏈架構設計J].計算機應用與軟 件,2019,36(12):46-50+86.
[52]A. Mohite and A. Blockchain for government fund tracking using Hyperledger[C]. 2018 International Conference on Computational Techniques, Electronics and Mechanical Systems, 2018: 231-234.
[53]C, Cachin. Architecture of the hyperledger blockchain fabric[C]. Workshop on Distributed Cryptocurrencies and Consensus Ledgers, 2016: 310.
[54]丁平.基于去中心化的物聯網安全的研究與應用[D].北京郵電大學,2018.
[55]T. Alshalali, K. M'Bale and D. Security and Privacy of Electronic Health Records Sharing Using Hyperledger Fabric[C]. 2018 International Conference on Computational Science and Computational Intelligence, 2018: 760-763.
[56]朱濤,姚翔,許玉壯,周鈺.基于Fabric的跨境匯款追蹤平臺實現[J].信息安全學 報,2018,3(03):50-61.
[57]張棟珀.基于區塊鏈的電能交易平臺設計與實現[D].電子科技大學,2018.
[58]M. Kuzlu, M. Pipattanasomporn, L. Gurses and S. Performance Analysis of a Hyperledger Fabric Blockchain Framework: Throughput, Latency and Scalability[C]. 2019 IEEE International Conference on Blockchain, 2019: 536-540.