李 莉,楊祉坤,張 超,吳 怡,陳云鵬
(東北林業(yè)大學(xué) 信息與計(jì)算機(jī)工程學(xué)院,黑龍江 哈爾濱 150040)
目前,現(xiàn)有醫(yī)藥溯源將所有藥品統(tǒng)一化管理,主要有兩種方式。一種是傳統(tǒng)數(shù)據(jù)庫的醫(yī)藥溯源方式,系統(tǒng)將所有相關(guān)醫(yī)藥溯源信息存放在中心數(shù)據(jù)庫中,也就是中心記賬。另外一種是利用區(qū)塊鏈技術(shù)進(jìn)行去中心化。單鏈區(qū)塊鏈技術(shù)解決了中心化記賬方式的信息存儲(chǔ)安全等問題[1],但也不可避免擁有著自身缺陷,主要表現(xiàn)為:單鏈區(qū)塊鏈吞吐率低以及可伸縮性不高,不能滿足醫(yī)藥溯源的大數(shù)據(jù)量與大交易量的處理需求[2,3];并且每個(gè)節(jié)點(diǎn)均需要存儲(chǔ)所有的醫(yī)藥數(shù)據(jù),存儲(chǔ)開銷較大,對節(jié)點(diǎn)設(shè)備要求過高;此外,多條鏈之間無法進(jìn)行信息交互,存在信息孤島的現(xiàn)象。
為解決以上問題,本文在圖型區(qū)塊鏈(directed acyclic graph區(qū)塊鏈,DAG區(qū)塊鏈)基礎(chǔ)上,構(gòu)建出基于圖型區(qū)塊鏈的分級醫(yī)藥溯源模型。該模型改進(jìn)了DAG區(qū)塊鏈的數(shù)據(jù)層和共識層,提升信息驗(yàn)證效率,增大了吞吐量。并且在原有的圖型區(qū)塊鏈結(jié)構(gòu)上加以改進(jìn),對區(qū)塊鏈進(jìn)行分區(qū)處理:在醫(yī)藥溯源信息存儲(chǔ)前通過標(biāo)志字段進(jìn)行醫(yī)藥分級,實(shí)現(xiàn)不同級別醫(yī)藥信息存儲(chǔ)在不同的區(qū)塊鏈分區(qū)中。模型還將全網(wǎng)節(jié)點(diǎn)劃分為主網(wǎng)絡(luò)和多個(gè)子網(wǎng)絡(luò),以減輕節(jié)點(diǎn)存儲(chǔ)壓力。
2008年,比特幣創(chuàng)始人中本聰發(fā)表了比特幣白皮書,介紹了世界上第一個(gè)分布式加密貨幣,開啟了區(qū)塊鏈1.0。而以以太坊為代表的區(qū)塊鏈2.0在智能合約系統(tǒng)的支撐下,拓寬了區(qū)塊鏈的應(yīng)用場景。智能化物聯(lián)網(wǎng)時(shí)代的區(qū)塊鏈3.0在行業(yè)應(yīng)用方面體現(xiàn)了應(yīng)用場景的較大差異,該時(shí)代下的區(qū)塊鏈技術(shù)具備企業(yè)級屬性,可以在更好地解決信任問題的同時(shí),大幅提升系統(tǒng)的運(yùn)作能力。
2013年,研究者首次提出將DAG算法[4]引入?yún)^(qū)塊鏈中作為共識算法,即“GHOST協(xié)議”。DAG區(qū)塊鏈雖然也是分布式賬本技術(shù),但不同于單鏈區(qū)塊鏈。單鏈區(qū)塊鏈的主要特征是會(huì)產(chǎn)生一條由區(qū)塊連接形成的單鏈,而DAG區(qū)塊鏈?zhǔn)菑慕灰壮霭l(fā),生成一個(gè)有向無環(huán)圖。兩者在本質(zhì)上都繼承了分布式賬本的優(yōu)點(diǎn)。DAG區(qū)塊鏈的最小單元是交易,先前的交易要被驗(yàn)證,后面的交易才能順利進(jìn)行,而驗(yàn)證結(jié)果則通過單元的形式記錄下來。這也就使得DAG區(qū)塊鏈具有了傳統(tǒng)區(qū)塊鏈沒有的并行處理能力。
圖型區(qū)塊鏈結(jié)構(gòu)如圖1所示,其中G區(qū)塊為創(chuàng)世紀(jì)區(qū)塊,1~16區(qū)塊為普通的存儲(chǔ)醫(yī)藥信息區(qū)塊,箭頭指向表示每個(gè)區(qū)塊加入DAG區(qū)塊鏈網(wǎng)絡(luò)時(shí)與前面已經(jīng)存在區(qū)塊的驗(yàn)證關(guān)系,其中15區(qū)塊、16區(qū)塊是未被后續(xù)驗(yàn)證的區(qū)塊。
圖1 圖型區(qū)塊結(jié)構(gòu)
關(guān)于醫(yī)藥溯源系統(tǒng)的研究,禹忠等設(shè)計(jì)了基于區(qū)塊鏈的醫(yī)藥防偽溯源系統(tǒng),此系統(tǒng)在超級賬本(Hyperledger)的Fabric區(qū)塊鏈平臺上開發(fā)[5],將所有品類藥品統(tǒng)一化管理,但仍然存在著數(shù)據(jù)量較大時(shí),系統(tǒng)的吞吐率過低和單節(jié)點(diǎn)的存儲(chǔ)開銷大的問題。
為提高區(qū)塊鏈吞吐量,現(xiàn)有3種解決方式:
(1)提高出塊效率。Micali教授提出了Algogrand算法[6],算法改進(jìn)了拜占庭共識機(jī)制,通過VRF產(chǎn)生委員會(huì),并通過BA*產(chǎn)生一致性輸出。
(2)變相增大區(qū)塊大小。通過增大區(qū)塊的大小也可以提高區(qū)塊鏈的吞吐量,但網(wǎng)絡(luò)延遲會(huì)隨著區(qū)塊的增大而提高,所以不能單純地增大區(qū)塊??的螤柎髮W(xué)博士后Ittay Eyal等提出了bitcoin-ng協(xié)議[7]將大區(qū)塊拆分成小區(qū)塊。此外,針對增大區(qū)塊大小的問題,康奈爾大學(xué)的 Elaine 教授提出了Thunderella 協(xié)議[8]。
(3)分片技術(shù)。Elastico[9]、Omniledger[10]等系統(tǒng)引入了分片技術(shù),對系統(tǒng)進(jìn)行水平擴(kuò)容,減小單個(gè)節(jié)點(diǎn)的存儲(chǔ)開銷進(jìn)一步提高吞吐量。
2.1.1 分級模型整體設(shè)計(jì)
《中華人民共和國藥品管理法》對藥品按照性質(zhì)進(jìn)行分類,如中藥材、中成藥、抗生素、化學(xué)原料藥及其試劑、放射性藥品、疫苗、診斷藥品等。本模型按照這種分類方法對醫(yī)藥進(jìn)行分級,并對每一級的醫(yī)藥標(biāo)準(zhǔn)名稱通過非對稱加密算法進(jìn)行處理,生成唯一的標(biāo)識,該標(biāo)識在本文中稱為標(biāo)志字段值。
模型把全網(wǎng)節(jié)點(diǎn)劃分為主網(wǎng)絡(luò)和多個(gè)分區(qū)子網(wǎng)絡(luò),主網(wǎng)絡(luò)存儲(chǔ)所有區(qū)塊信息,各個(gè)子網(wǎng)絡(luò)存儲(chǔ)不同標(biāo)志字段值的醫(yī)藥溯源信息,也就是每個(gè)子網(wǎng)絡(luò)存儲(chǔ)一種分級的醫(yī)藥信息。并且模型將這些子網(wǎng)絡(luò)中的節(jié)點(diǎn)IP地址存儲(chǔ)在Tag數(shù)據(jù)庫中(該數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù)為:醫(yī)藥屬性標(biāo)志字段和節(jié)點(diǎn)IP地址的對應(yīng)關(guān)系),該數(shù)據(jù)庫由全網(wǎng)節(jié)點(diǎn)共同存儲(chǔ)。
該模型交互終端涉及4個(gè)組織:醫(yī)藥廠商、經(jīng)銷商、醫(yī)院和消費(fèi)者。業(yè)務(wù)邏輯圖如圖2所示。醫(yī)藥廠商將醫(yī)藥出廠信息(包括藥材原材料的選取、醫(yī)藥加工過程、藥品成分、出廠日期等)上傳,模型根據(jù)上傳醫(yī)藥名稱到Tag數(shù)據(jù)庫中查詢該醫(yī)藥對應(yīng)的標(biāo)志字段值和存儲(chǔ)該分級醫(yī)藥信息的子分區(qū)節(jié)點(diǎn)IP地址,將對應(yīng)標(biāo)志字段值與醫(yī)藥信息一同加密,并選取打包區(qū)塊節(jié)點(diǎn),被選節(jié)點(diǎn)打包區(qū)塊上鏈存儲(chǔ)并等待驗(yàn)證,驗(yàn)證后廣播到全網(wǎng)。經(jīng)銷商與醫(yī)院將醫(yī)藥發(fā)送到其他經(jīng)銷商、醫(yī)院、消費(fèi)者時(shí),同樣需要進(jìn)行上述流程將流通信息交給相應(yīng)的節(jié)點(diǎn)打包區(qū)塊進(jìn)行上鏈存儲(chǔ)。消費(fèi)者可通過指定終端查詢某醫(yī)藥溯源信息。
圖2 業(yè)務(wù)邏輯
2.1.2 DAG區(qū)塊鏈分區(qū)設(shè)計(jì)
基于圖型區(qū)塊鏈的分區(qū)結(jié)構(gòu)如圖3所示。
圖3 分區(qū)結(jié)構(gòu)
(1)將醫(yī)藥溯源區(qū)塊網(wǎng)絡(luò)劃分多個(gè)分區(qū),方便用于醫(yī)藥溯源場景,減少存儲(chǔ)開銷。
本文建立在區(qū)塊鏈網(wǎng)絡(luò)分區(qū)技術(shù)的基礎(chǔ)之上,并且將整個(gè)DAG區(qū)塊鏈劃分出一條主鏈和多個(gè)子DAG鏈。醫(yī)藥廠商的醫(yī)藥生產(chǎn)信息作為主鏈存儲(chǔ)的信息,多個(gè)子鏈分別存儲(chǔ)經(jīng)銷商或醫(yī)院等中間商上傳的不同標(biāo)志字段值的醫(yī)藥信息區(qū)塊。而整個(gè)網(wǎng)絡(luò)環(huán)境中,主網(wǎng)絡(luò)存儲(chǔ)DAG區(qū)塊鏈上所有區(qū)塊,分區(qū)子網(wǎng)絡(luò)存儲(chǔ)主鏈信息和該分區(qū)標(biāo)志字段值所對應(yīng)的DAG子鏈。
(2)實(shí)現(xiàn)跨域信息交互,不同分區(qū)子網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行交互。
跨域交互處理流程如圖4所示,具體步驟如下:
圖4 跨域交互
(1)發(fā)送跨域交互信息的節(jié)點(diǎn)查詢Tag數(shù)據(jù)庫,判定信息的標(biāo)志字段值是否在數(shù)據(jù)庫中。如果存在根據(jù)匹配的結(jié)果(目標(biāo)分區(qū)子網(wǎng)絡(luò)節(jié)點(diǎn)的IP地址)選取節(jié)點(diǎn),并將信息發(fā)送給該節(jié)點(diǎn),進(jìn)行步驟(2)。否則拋出異常,終止交互。
(2)被選節(jié)點(diǎn)根據(jù)請求信息重新構(gòu)建一個(gè)區(qū)塊。
(3)分區(qū)子網(wǎng)絡(luò)所有節(jié)點(diǎn)完成信息驗(yàn)證、信息廣播以及信息存儲(chǔ)。
2.2.1 區(qū)塊數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
區(qū)塊解碼后,其中信息包含如表1所示的字段。
表1 區(qū)塊數(shù)據(jù)結(jié)構(gòu)
在實(shí)際操作過程中,節(jié)點(diǎn)向網(wǎng)絡(luò)發(fā)送一條溯源信息,需要提供以下參數(shù):
(1)Autograph:每個(gè)節(jié)點(diǎn)擁有唯一的獨(dú)有的私鑰用于對請求上鏈的信息進(jìn)行簽名。得到的簽名數(shù)據(jù)中包含本節(jié)點(diǎn)身份標(biāo)志。
(2)Address:指定醫(yī)藥接收方公鑰地址。
醫(yī)藥廠商、經(jīng)銷商、醫(yī)院通過RSA算法(公私鑰對生成算法)生成公鑰和私鑰,并根據(jù)公鑰取值可以得出公鑰地址。公鑰生成地址算法如圖5所示,具體步驟如下:
圖5 公鑰地址生成
1)將公鑰依次進(jìn)行SHA256、RIPEMD160運(yùn)算得出公鑰地址哈希值(Public Key Hash)。
2)將得到的哈希值直接在前端拼接版本號屬性,生成21字節(jié)數(shù)據(jù)。
3)將本21字節(jié)數(shù)據(jù)(稱之為A)復(fù)制生成21字節(jié)數(shù)據(jù)B。
4)數(shù)據(jù)B進(jìn)行兩次連續(xù)的SHA256。
5)取(4)得到的結(jié)果前4個(gè)字節(jié)數(shù)據(jù)與數(shù)據(jù)A進(jìn)行拼接,得到25字節(jié)數(shù)據(jù)。
6)將(5)得到的數(shù)據(jù)進(jìn)行BASE58編碼操作得出最終的公鑰地址(Address)。
(3)Count:指定醫(yī)藥流通的數(shù)量。
(4)Tag:標(biāo)志字段。
(5)Message:醫(yī)藥溯源信息。其中包括醫(yī)藥敏感數(shù)據(jù)和非敏感數(shù)據(jù)。敏感數(shù)據(jù)是醫(yī)藥的生產(chǎn)過程中的核心資料,不可直接記錄到區(qū)塊鏈上,必須對其做一定處理,模型利用非對稱加密算法對其進(jìn)行加密。對于非敏感數(shù)據(jù),即醫(yī)藥的基本信息和流通信息,無需加密,直接存儲(chǔ)。
(6)MessageHash:溯源信息數(shù)據(jù)哈希值。運(yùn)算公式如下(其中‖表示拼接)
HashData1=Hash(SentiveData)HashData2=Hash(InsentiveData)HashData=HashData1‖HashData2MessageHash=Hash(HashData)
(1)
在節(jié)點(diǎn)打包區(qū)塊時(shí)還需添加以下關(guān)鍵數(shù)據(jù):
父節(jié)點(diǎn)哈希值:當(dāng)節(jié)點(diǎn)預(yù)將所生成區(qū)塊加入DAG區(qū)塊鏈網(wǎng)絡(luò)中時(shí),需選取兩個(gè)網(wǎng)絡(luò)中區(qū)塊進(jìn)行驗(yàn)證。驗(yàn)證成功后將兩區(qū)塊的信息分別進(jìn)行SHA256算法運(yùn)算,得到的兩組256 bit數(shù)據(jù)作為本區(qū)塊的父節(jié)點(diǎn)哈希值。
隨機(jī)數(shù)與目標(biāo)哈希:為了避免無代價(jià)攻擊,區(qū)塊在加入?yún)^(qū)塊鏈網(wǎng)絡(luò)前,要進(jìn)行一次自我pow工作量證明運(yùn)算。生成區(qū)塊之前,需設(shè)置本區(qū)塊的目標(biāo)哈希值,即設(shè)置本次pow工作難度。目標(biāo)哈希值越小,工作運(yùn)算難度越大。區(qū)塊不斷設(shè)置隨機(jī)數(shù)的取值,直到
Hash(區(qū)塊數(shù)據(jù)+隨機(jī)數(shù))≤目標(biāo)哈希值
(2)
此時(shí)的隨機(jī)數(shù)為最終取值。
2.2.2 標(biāo)志字段分區(qū)處理
選取字段Autograph和Tag作為分區(qū)標(biāo)志。標(biāo)志字段的分區(qū)處理流程如圖6所示。
圖6 標(biāo)志字段處理
字段Autograph與Tag的處理規(guī)則是:
(1)加入對字段Autograph的檢查,通過Autograph值判斷該條數(shù)據(jù)是否為醫(yī)藥廠商上傳。若是,則至(2);否則至(3)。
(2)廣播主網(wǎng)和分區(qū)子網(wǎng)節(jié)點(diǎn)更新網(wǎng)絡(luò),并且等待全網(wǎng)驗(yàn)證,驗(yàn)證后存儲(chǔ),處理結(jié)束。
(3)判斷Tag字段是否是本節(jié)點(diǎn)應(yīng)存儲(chǔ)的Tag值醫(yī)藥信息。若是,則域內(nèi)認(rèn)證并廣播等待驗(yàn)證、存儲(chǔ),處理結(jié)束;否則至(4)。
(4)進(jìn)行跨域交互,查詢Tag數(shù)據(jù)庫。若數(shù)據(jù)庫中不存在該Tag值,拋出異常,處理結(jié)束;否則至(5)。
(5)根據(jù)Tag數(shù)據(jù)庫中該Tag值對應(yīng)的IP地址,選取處理節(jié)點(diǎn),被選節(jié)點(diǎn)進(jìn)行打包區(qū)塊、廣播區(qū)塊、等待驗(yàn)證、存儲(chǔ)。
流程偽代碼如下:
算法1:標(biāo)志字段處理
輸入: Autograph,Address,Count
Tag,Message,MessageHash
輸出: isSendSuccess
//打包區(qū)塊成功標(biāo)志, sendData()的返回值
//sendData()表示打包、 上傳區(qū)塊
Begin
api;
If (Autograph == Manufacturer) do
information=transfer(Autograph,Address,
Count,Tag,Message,MessageHash);
Return sendData(information);
//判斷是否為主鏈信息。 若是, 則打包區(qū)塊。
Else if(Tag==nowTag)
information=transfer(Autograph,Address,
Count,Tag,Message,MessageHash);
sendData(information);
//判斷信息標(biāo)志字段值是否符合為本節(jié)點(diǎn)存儲(chǔ)條件。 若符合, 則該節(jié)點(diǎn)打包區(qū)塊。
Else if((ip=mysql(tagip)!=null)
newapi;
information=transfer(Autograph,Address,
Count,Tag,Message,MessageHash);
sendData(infomation);
Else
Throw anexception
//判斷標(biāo)志字段是否在Tag數(shù)據(jù)庫中。 若在, 則選擇節(jié)點(diǎn)打包區(qū)塊; 否則拋出異常。
End;
用戶通過客戶端發(fā)送溯源信息上鏈請求,直到信息確認(rèn),需要經(jīng)過圖7中所示流程。其中,從發(fā)送上鏈請求至創(chuàng)建區(qū)塊由一個(gè)或兩個(gè)節(jié)點(diǎn)完成,信息的存儲(chǔ)、傳播、確認(rèn)由本子網(wǎng)全部節(jié)點(diǎn)共同完成。
圖7 共識過程
發(fā)送上鏈請求的客戶端(本節(jié)稱為節(jié)點(diǎn)A)根據(jù)數(shù)據(jù)中標(biāo)志字段確定存儲(chǔ)網(wǎng)絡(luò)位置。若存儲(chǔ)位置為節(jié)點(diǎn)A所在子網(wǎng)絡(luò),后續(xù)操作由節(jié)點(diǎn)A完成;否則交給存儲(chǔ)位置所在網(wǎng)絡(luò)的另一個(gè)客戶端(本節(jié)稱為節(jié)點(diǎn)B)進(jìn)行處理。
節(jié)點(diǎn)A或節(jié)點(diǎn)B創(chuàng)建數(shù)據(jù)的基本信息后,通過MCMC算法選擇本分區(qū)子鏈或主鏈的其它區(qū)塊進(jìn)行驗(yàn)證,驗(yàn)證結(jié)束后對該區(qū)塊使用SHA256算法不斷嘗試不同的隨機(jī)數(shù)值,直到哈希值小于目標(biāo)哈希,最終創(chuàng)建好區(qū)塊,即區(qū)塊上鏈前節(jié)點(diǎn)進(jìn)行自我pow運(yùn)算。此過程與IOTA系統(tǒng)[11]相似。
模型規(guī)定一個(gè)區(qū)塊要加入?yún)^(qū)塊鏈網(wǎng)絡(luò),必須要驗(yàn)證已存在的兩個(gè)區(qū)塊,即需要證明這兩個(gè)區(qū)塊中的數(shù)據(jù)與已被確認(rèn)的區(qū)塊沒有沖突。本模型使用MCMC的tips選擇算法進(jìn)行兩個(gè)區(qū)塊的選擇。MCMC的tips選擇算法是馬爾科夫鏈與門特卡洛算法的結(jié)合。MCMC的tips選擇算法的步驟如下:
(1)選擇全部累積權(quán)重在[W,2W]之間的區(qū)塊。W是個(gè)足夠大的數(shù)。其中累計(jì)權(quán)重是指區(qū)塊自身工作量證明難度值與所有證明該區(qū)塊的區(qū)塊工作量證明難度值的和。
(2)將N個(gè)粒子放到(1)中選中的區(qū)塊上。
(3)粒子分別隨機(jī)行走。行走指向區(qū)塊網(wǎng)絡(luò)中的tips。若當(dāng)y區(qū)塊證明了x區(qū)塊,說明x能夠轉(zhuǎn)移到y(tǒng)。
(4)若y證明了x,Hx、Hy分別為區(qū)塊x、y的累積權(quán)重,則粒子從x轉(zhuǎn)移到y(tǒng)概率正比于exp(-α(Hx-Hy)), 計(jì)算公式為
(3)
其中,α為可調(diào)節(jié)參數(shù)且為正數(shù)。
刪除很快到達(dá)tips的粒子,因?yàn)檫@些tips是懶惰的。找到最先到達(dá)tips的兩個(gè)粒子。若兩個(gè)tips沒有沖突,則輸出這兩個(gè)tips;否則,另選兩個(gè)沒有沖突的tips。
偽代碼如下:
算法2:MCMC的tips選擇
輸入:block1,block2…blockn
輸出:tips1,tips2
Begin
Particle[]particles;
//粒子在累計(jì)權(quán)重為[W,2W]的區(qū)塊上分布
For(i=0;i If(blocki.weight>=W&&blocki.weight<=2W) particles.insert(blocki); Foreach(particles) //粒子根據(jù)轉(zhuǎn)移概率隨機(jī)行走 particles.randomWalk(Pxy); If(firstParticle==tips&&secondParticle==tips) //判斷最先到達(dá)的兩個(gè)tips是否包含信息沖突 If(!conflict(firstParticle,secondParticle)) break; ReturnfirstParticle,secondParticle; End; 模型用“確認(rèn)置信度”來表示醫(yī)藥溯源信息區(qū)塊被其它區(qū)塊的接受程度。驗(yàn)證該區(qū)塊的區(qū)塊數(shù)與運(yùn)行選擇算法(MCMC)次數(shù)的比值為確認(rèn)置信度,只有當(dāng)確認(rèn)置信度達(dá)到97%時(shí),認(rèn)為該區(qū)塊是被完全確認(rèn)的。 在模型運(yùn)行期間可能存在大權(quán)重攻擊,攻擊者可憑借超強(qiáng)的計(jì)算能力對模型進(jìn)行攻擊。攻擊者發(fā)布許多小型交易驗(yàn)證沖突交易,并且可能會(huì)操控大量“女巫”節(jié)點(diǎn),不去驗(yàn)證末端交易,進(jìn)而產(chǎn)生新的區(qū)塊網(wǎng)絡(luò)。針對該攻擊本節(jié)進(jìn)行以下分析: W(n)為發(fā)布一個(gè)自身權(quán)重為3n的區(qū)塊所需的工作量證明時(shí)間,并且是以μ3-n為參數(shù)的指數(shù)分布隨機(jī)變量,其中μ是有關(guān)攻擊者攻擊能力參數(shù)。假設(shè)時(shí)間過去t0個(gè)時(shí)間單元,區(qū)塊累計(jì)權(quán)重為w0以上,視為該區(qū)塊被完全確認(rèn)。經(jīng)計(jì)算在t時(shí)刻區(qū)塊累計(jì)權(quán)重H(t)公式如下 (4) 其中,h為節(jié)點(diǎn)打包上傳區(qū)塊的平均時(shí)間,W為勃朗函數(shù)??傻弥塾?jì)權(quán)重的增長速度呈線性,速度為λw。λ為交易流入的速度,w表示一般交易的均值權(quán)重。那么在接受交易時(shí)合法分支的典型累計(jì)權(quán)重是 wl=λwt0 (5) 若攻擊者發(fā)布的大權(quán)重沖突交易想超過合法分支的權(quán)重,應(yīng)在t0內(nèi)產(chǎn)生權(quán)重為3n0≥w1的沖突交易,其中 (6) 并且該事件發(fā)生的概率為 (7) 攻擊者還可以尋找一個(gè)權(quán)重為3n(n>n0) 的沖突交易,合法分支的累計(jì)權(quán)重不超過3n,計(jì)算概率 (8) 下面分析自身權(quán)重不超過1時(shí)攻擊的成功概率。假設(shè)G1,G2,G3…是以μ為參數(shù)的獨(dú)立同分布指數(shù)分布隨機(jī)變量,分別表示發(fā)布一個(gè)權(quán)重為1的交易工作量證明時(shí)間,期望值為μ-1,記為 Vk=μGk,k≥1 (9) V1,V2,V3…是以1為參數(shù)的獨(dú)立同分布指數(shù)分布隨機(jī)變量。攻擊者成功的條件是w0無意義交易所花費(fèi)時(shí)間總和小于t0,其成功概率為 (10) 其中 φ(α)=-lnα+α-1 (11) 可得知,在調(diào)整階段累計(jì)權(quán)重的增長小于λw, 所以通常情況下有 (12) 無論如何成功的概率不超過 (13) 進(jìn)而驗(yàn)證本文模型具有很強(qiáng)的安全性,大權(quán)重攻擊、女巫攻擊可能會(huì)對本模型產(chǎn)生威脅,但都可以通過模型自身機(jī)制來實(shí)現(xiàn)預(yù)防。 搭建好網(wǎng)絡(luò)以后,首先向網(wǎng)絡(luò)發(fā)送任意條數(shù)目溯源信息,啟動(dòng)4個(gè)分區(qū)網(wǎng)絡(luò)節(jié)點(diǎn)并完成連接,即完成子網(wǎng)絡(luò)存儲(chǔ)初始化。分別針對表2中兩種情況進(jìn)行實(shí)驗(yàn),兩種情況各發(fā)出1500條信息(包括應(yīng)存儲(chǔ)在主鏈的醫(yī)藥出廠信息500條、應(yīng)存儲(chǔ)在4個(gè)不同子鏈的4種不同性質(zhì)藥品的溯源信息各250條)。對上鏈請求的發(fā)出者分情況測試,情況1的發(fā)出者為4種藥品性質(zhì)對應(yīng)的子網(wǎng)絡(luò)中的節(jié)點(diǎn);情況2的發(fā)出者均不是對應(yīng)的子網(wǎng)絡(luò)中的節(jié)點(diǎn)。 表2 實(shí)驗(yàn)條件 實(shí)驗(yàn)以情況1、情況2的順序進(jìn)行測試,并且記錄各個(gè)子網(wǎng)絡(luò)中某節(jié)點(diǎn)的數(shù)據(jù)庫大小。 對子網(wǎng)絡(luò)節(jié)點(diǎn)的數(shù)據(jù)庫分析得出,各個(gè)子網(wǎng)絡(luò)成功接收符合該子網(wǎng)絡(luò)對應(yīng)標(biāo)志字段的250條數(shù)據(jù)以及500條主鏈信息。并且子網(wǎng)絡(luò)有效隔絕了其它子網(wǎng)絡(luò)中不符合本子網(wǎng)絡(luò)數(shù)據(jù)規(guī)則的數(shù)據(jù)。圖8為各個(gè)子網(wǎng)節(jié)點(diǎn)、主網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)據(jù)庫接收數(shù)據(jù)前后的大小變化。主網(wǎng)絡(luò)節(jié)點(diǎn)存儲(chǔ)區(qū)塊網(wǎng)絡(luò)所有數(shù)據(jù),所以其節(jié)點(diǎn)的存儲(chǔ)開銷較大,相比之下子網(wǎng)絡(luò)中節(jié)點(diǎn)的存儲(chǔ)壓力大大減少。 圖8 節(jié)點(diǎn)數(shù)據(jù)庫大小對比 傳統(tǒng)區(qū)塊鏈溯源系統(tǒng)沒有進(jìn)行分區(qū)存儲(chǔ),其所有節(jié)點(diǎn)要存儲(chǔ)區(qū)塊網(wǎng)絡(luò)的全部數(shù)據(jù)(相當(dāng)于本實(shí)驗(yàn)中的主網(wǎng)絡(luò)節(jié)點(diǎn))。本模型劃分了若干分區(qū)子網(wǎng),每個(gè)分區(qū)子網(wǎng)的節(jié)點(diǎn)只需存儲(chǔ)部分區(qū)塊網(wǎng)絡(luò)數(shù)據(jù),減少了存儲(chǔ)開銷。 測試環(huán)境與3.2節(jié)中相同,子網(wǎng)絡(luò)1存儲(chǔ)中成藥類藥品信息,子網(wǎng)絡(luò)2存儲(chǔ)抗生素類藥品信息,子網(wǎng)絡(luò)3存儲(chǔ)中藥材信息,子網(wǎng)4存儲(chǔ)疫苗信息。 子網(wǎng)絡(luò)1中的節(jié)點(diǎn)A,預(yù)將抗生素類(設(shè)其標(biāo)志字段為Tag 2)藥品信息存儲(chǔ)到區(qū)塊網(wǎng)絡(luò)中。節(jié)點(diǎn)查詢Tag數(shù)據(jù)庫,找到子網(wǎng)絡(luò)2所有節(jié)點(diǎn)IP地址,并構(gòu)建一個(gè)跨域區(qū)塊。實(shí)驗(yàn)結(jié)果表明,子網(wǎng)絡(luò)2中節(jié)點(diǎn)B成功接收到了節(jié)點(diǎn)A發(fā)送的信息,跨域交互成功執(zhí)行。隨著跨域數(shù)據(jù)量的增加,模型執(zhí)行時(shí)間的變化如圖9所示。從圖9可以看出,隨著數(shù)據(jù)量的增加,跨域交互的效率逐漸降低,與子網(wǎng)內(nèi)部處理的情況相比,數(shù)據(jù)庫的查詢和區(qū)塊信息的傳遞造成了額外的時(shí)間開銷。 圖9 時(shí)間開銷對比 此外,本實(shí)驗(yàn)與傳統(tǒng)區(qū)塊鏈溯源模型也進(jìn)行了隨數(shù)據(jù)量增加,時(shí)間開銷的對比。實(shí)驗(yàn)結(jié)果表明(如圖9所示),在區(qū)塊網(wǎng)絡(luò)數(shù)據(jù)量較小時(shí),傳統(tǒng)單鏈區(qū)塊鏈模型消耗時(shí)間較少,但隨著數(shù)據(jù)量的增大,本文模型并未因跨域操作失去高處理效率的優(yōu)勢。 模型在4 核 1.5 Ghz CPU、16 GB內(nèi)存的主機(jī)上進(jìn)行測試。網(wǎng)絡(luò)帶寬40 M/S,操作系統(tǒng)為Ubuntu 14.04.1,評測指標(biāo)包括吞吐率和確認(rèn)延遲。在硬件情況完全相同的情況下,模擬用戶行為使區(qū)塊鏈網(wǎng)絡(luò)不斷接收事務(wù)請求。完成上鏈?zhǔn)聞?wù)請求數(shù)以及確認(rèn)延遲時(shí)間見表3。隨著上鏈請求次數(shù)的增加,確認(rèn)延遲時(shí)間也有所增長,但請求的平均響應(yīng)時(shí)間符合用戶需求,具有較好的網(wǎng)絡(luò)響應(yīng)效果,可以使用戶獲得良好的體驗(yàn)。 表3 請求數(shù)與響應(yīng)時(shí)間 將本文模型與現(xiàn)有研究中其它針對提高吞吐量模型進(jìn)行吞吐量以及性能比對,其中Algorand、bitcoin-ng、OmniLedger分別通過變相增大區(qū)塊大小、把參與者分片以及將區(qū)塊分為主區(qū)塊和微區(qū)塊兩種角色來提升模型吞吐量。 在藥品信息溯源的應(yīng)用背景下,實(shí)驗(yàn)結(jié)果見表4。處于相同環(huán)境下,本模型吞吐量基本穩(wěn)定在6400 TPS以上,相較比特幣系統(tǒng)提升了910倍,相較其它模型的380 TPS、6000 TPS、5600 TPS的吞吐率也有較大提升。其它3種提升吞吐率的算法存在數(shù)據(jù)安全性高,易造成網(wǎng)絡(luò)擁堵的缺陷。本文模型保證了效率,但是在鏈上區(qū)塊較少時(shí),驗(yàn)證速度相對較慢。 表4 算法對比 由于模型將DAG區(qū)塊網(wǎng)絡(luò)劃分為多個(gè)分區(qū),各個(gè)分區(qū)只存儲(chǔ)相應(yīng)標(biāo)志字段醫(yī)藥溯源信息,查詢時(shí)只需搜索對應(yīng)分區(qū),目標(biāo)區(qū)塊范圍大大縮小。所以在保證溯源信息查詢正確的前提下,驗(yàn)證效率也有所提高。 現(xiàn)有溯源系統(tǒng)查詢命令發(fā)出后的平均響應(yīng)時(shí)間為20 ms至25 ms?,F(xiàn)與3.4節(jié)測試環(huán)境相同的情況下,進(jìn)行查詢的正確性與速度測試。實(shí)驗(yàn)結(jié)果如圖10所示,圖中橫軸坐標(biāo)代表當(dāng)前查詢?yōu)榈趲状握埱螅v軸為當(dāng)前查詢響應(yīng)時(shí)間,單位為ms。實(shí)驗(yàn)結(jié)果表明,本模型查詢正確率為100%,每次查詢的請求響應(yīng)時(shí)間圍繞16 ms上下波動(dòng)。 圖10 查詢請求響應(yīng)時(shí)間 本方案基于對區(qū)塊鏈溯源系統(tǒng)安全性、吞吐量以及節(jié)點(diǎn)存儲(chǔ)開銷的考慮,提出了多域下的DAG區(qū)塊鏈模型。模型平衡了確認(rèn)延遲和存儲(chǔ)開銷等制約因素,設(shè)計(jì)了標(biāo)志字段的處理規(guī)則,實(shí)現(xiàn)了將DAG區(qū)塊網(wǎng)絡(luò)分區(qū),并且將全網(wǎng)節(jié)點(diǎn)劃分為主網(wǎng)絡(luò)和子網(wǎng)絡(luò)。實(shí)驗(yàn)結(jié)果表明,模型在具有良好的抗大權(quán)重攻擊、女巫攻擊的安全性基礎(chǔ)上,有效減少節(jié)點(diǎn)存儲(chǔ)開銷,保證了模型高吞吐的性能。3 實(shí)驗(yàn)與實(shí)驗(yàn)分析
3.1 安全性分析
3.2 分區(qū)子網(wǎng)節(jié)點(diǎn)存儲(chǔ)開銷測試
3.3 跨域測試
3.4 吞吐量測試
3.5 溯源信息驗(yàn)證效率測試
4 結(jié)束語