拜亞萌,滿君豐,張 宏
(1. 焦作大學(xué)信息工程學(xué)院,河南焦作454000; 2. 湖南工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,湖南株洲412007)
(?通信作者電子郵箱jzbym@163.com)
目前,移動(dòng)醫(yī)療和在線醫(yī)療被認(rèn)為是解決現(xiàn)有醫(yī)療資源分配不均的有效途徑,在不同醫(yī)療機(jī)構(gòu)或醫(yī)患間共享電子健康記錄能顯著增加醫(yī)學(xué)研究和臨床診斷的有效性。但是,電子健康記錄的共享是一個(gè)非常復(fù)雜的任務(wù):一方面,醫(yī)療機(jī)構(gòu)不愿意共享數(shù)據(jù),因?yàn)殡娮咏】涤涗洶∪说闹匾[私數(shù)據(jù),隱私泄露會(huì)給醫(yī)療機(jī)構(gòu)帶來(lái)嚴(yán)重的經(jīng)濟(jì)和法律后果;另一方面,電子健康記錄作為醫(yī)療機(jī)構(gòu)的寶貴資產(chǎn),非授權(quán)的訪問(wèn)可能會(huì)造成自身競(jìng)爭(zhēng)優(yōu)勢(shì)的降低。歸其本質(zhì),阻礙電子健康記錄共享的原因在于缺乏一種安全的技術(shù)方法來(lái)保證數(shù)據(jù)的安全,包括病人的隱私保護(hù)和數(shù)據(jù)的授權(quán)訪問(wèn)[1-2]。傳統(tǒng)中心化存儲(chǔ)和訪問(wèn)控制方法容易成為網(wǎng)絡(luò)攻擊者的感興趣目標(biāo),中心化信任機(jī)制暴露出了很多問(wèn)題。區(qū)塊鏈作為一種去中心化的分布式賬本技術(shù),在數(shù)據(jù)安全性方面具有較大優(yōu)勢(shì)[3]。本文提出一種基于區(qū)塊鏈的電子健康記錄安全存儲(chǔ)模型,旨在提出一種通用的電子健康記錄存儲(chǔ)基礎(chǔ)架構(gòu),為后續(xù)的機(jī)構(gòu)間共享數(shù)據(jù)提供支撐。
自2008 年中本聰首次提出比特幣以來(lái),區(qū)塊鏈作為比特幣的核心技術(shù),經(jīng)過(guò)十多年的發(fā)展逐步為人們所熟知,研究者們也開(kāi)始探索區(qū)塊鏈在除數(shù)字貨幣外其他領(lǐng)域中的應(yīng)用。近年來(lái),區(qū)塊鏈在醫(yī)療衛(wèi)生領(lǐng)域的應(yīng)用,已經(jīng)證明了其在保護(hù)病人隱私[4]、確保數(shù)據(jù)授權(quán)訪問(wèn)[5]的優(yōu)勢(shì)。William 等[6]介紹了區(qū)塊鏈技術(shù)在衛(wèi)生領(lǐng)域的應(yīng)用場(chǎng)景,提出醫(yī)療衛(wèi)生區(qū)塊鏈系統(tǒng)要注重病人驅(qū)動(dòng)的可互操作性;Koshechkin等[7]介紹了區(qū)塊鏈技術(shù)在俄羅斯政府中的公共衛(wèi)生保健系統(tǒng)中的應(yīng)用,但兩者均并未提出具體的數(shù)據(jù)存儲(chǔ)和共享模型。Gaby等[8]提出使用區(qū)塊鏈技術(shù)來(lái)實(shí)施電子健康記錄的訪問(wèn)控制和互操作模型,并詳細(xì)分析了模型如何在隱私保護(hù)和數(shù)據(jù)交互需求中達(dá)到有效折中,但模型缺乏相應(yīng)的實(shí)驗(yàn)論證。Peng 等[9]提出利用區(qū)塊鏈對(duì)臨床診斷數(shù)據(jù)進(jìn)行安全和精確共享,方法使用快速衛(wèi)生保健可操作性資源(Fast Health Interoperable Resources,F(xiàn)HIR)標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)一致性存儲(chǔ),但不能適用于我國(guó)醫(yī)療信息系統(tǒng)的現(xiàn)狀。Alex等[10]提出了一個(gè)基于區(qū)塊鏈的個(gè)人健康記錄實(shí)施模型,并對(duì)該模型進(jìn)行了性能分析,實(shí)驗(yàn)結(jié)果表明模型在數(shù)據(jù)一致性存儲(chǔ)、響應(yīng)時(shí)間和CPU 利用率等上具有優(yōu)勢(shì),但該模型來(lái)源于歐美國(guó)家提出的OmniPHR 體系標(biāo)準(zhǔn),同樣不適合于在我國(guó)的應(yīng)用。Chen 等[11]提出了一種基于區(qū)塊鏈的電子健康記錄可搜索加密方法,方法詳細(xì)介紹了如何在電子健康記錄區(qū)塊鏈中安全獲取數(shù)據(jù),并盡可能降低隱私泄露風(fēng)險(xiǎn);但該方法的前提是電子健康記錄區(qū)塊鏈已經(jīng)存在,缺乏對(duì)其基礎(chǔ)結(jié)構(gòu)的描述。Shaimaa等[12]提出基于物聯(lián)網(wǎng)電子健康記錄系統(tǒng)的多層區(qū)塊鏈框架,框架通過(guò)物聯(lián)網(wǎng)設(shè)備采集健康數(shù)據(jù)并自動(dòng)存儲(chǔ)于區(qū)塊鏈系統(tǒng)中,并設(shè)計(jì)了數(shù)據(jù)共享的智能合約;但框架中沿用了傳統(tǒng)區(qū)塊鏈網(wǎng)絡(luò)中的共識(shí)算法,在運(yùn)行效率上存在不足。Gao 等[13]提出結(jié)合區(qū)塊鏈和云服務(wù)的電子健康數(shù)據(jù)防篡改系統(tǒng),系統(tǒng)通過(guò)將電子健康數(shù)據(jù)云中的數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中,實(shí)現(xiàn)了數(shù)據(jù)的不可篡改;但區(qū)塊鏈中的共識(shí)機(jī)制選取不夠高效,另外基于中心信任的云數(shù)據(jù)來(lái)源具有較大的安全隱患。
綜上所述,區(qū)塊鏈應(yīng)用于醫(yī)療衛(wèi)生領(lǐng)域是可行的,但在存儲(chǔ)結(jié)構(gòu)通用性、共識(shí)算法執(zhí)行效率、實(shí)驗(yàn)論證上存在著不足。針對(duì)上述問(wèn)題,本文提出一種基于區(qū)塊鏈的電子健康記錄安全存儲(chǔ)模型,利用區(qū)塊鏈在隱私保護(hù)和數(shù)據(jù)防篡改上的優(yōu)勢(shì)安全存儲(chǔ)電子健康記錄。根據(jù)目前我國(guó)主要醫(yī)療機(jī)構(gòu)中存儲(chǔ)電子健康記錄的方式,設(shè)計(jì)新的電子健康記錄區(qū)塊鏈存儲(chǔ)結(jié)構(gòu),解決現(xiàn)有存儲(chǔ)結(jié)構(gòu)無(wú)法通用的問(wèn)題;設(shè)計(jì)相對(duì)應(yīng)的區(qū)塊數(shù)據(jù)入鏈算法,優(yōu)化了區(qū)塊鏈工作流程,減少了點(diǎn)到點(diǎn)(Peer-to-Peer,P2P)網(wǎng)絡(luò)中信息傳播量;設(shè)計(jì)基于隨機(jī)數(shù)選舉的區(qū)塊鏈節(jié)點(diǎn)間的共識(shí)算法,克服現(xiàn)有共識(shí)算法在執(zhí)行效率上的不足。
1.1.1 區(qū)塊鏈基礎(chǔ)架構(gòu)
區(qū)塊鏈實(shí)際上并不是一種全新的技術(shù),而是分布式數(shù)據(jù)存儲(chǔ)、去中心化的點(diǎn)對(duì)點(diǎn)傳輸、共識(shí)機(jī)制、加密算法等計(jì)算機(jī)技術(shù)在互聯(lián)網(wǎng)時(shí)代的創(chuàng)新應(yīng)用模式。區(qū)塊鏈采用鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ)數(shù)據(jù),除創(chuàng)始區(qū)塊外,區(qū)塊鏈中的每一個(gè)區(qū)塊都有著前驅(qū)和后繼區(qū)塊,并且這些相互聯(lián)系的區(qū)塊有著強(qiáng)的依賴關(guān)系,一旦某個(gè)區(qū)塊的值發(fā)生變化,都會(huì)造成整個(gè)區(qū)塊鏈發(fā)生改變,加上每個(gè)區(qū)塊中的時(shí)間戳,確保了區(qū)塊鏈中的數(shù)據(jù)是可溯源和不可篡改的。圖1給出了比特幣中區(qū)塊鏈的存儲(chǔ)結(jié)構(gòu)[14]。
1.1.2 區(qū)塊鏈工作原理
區(qū)塊鏈的工作原理可用比特幣網(wǎng)絡(luò)中新區(qū)塊的入鏈過(guò)程進(jìn)行說(shuō)明,如圖2 所示。新區(qū)塊的入鏈分為四個(gè)過(guò)程:交易產(chǎn)生及傳播、區(qū)塊生成、區(qū)塊驗(yàn)證和區(qū)塊入鏈。假設(shè)網(wǎng)絡(luò)中有4個(gè)節(jié)點(diǎn)A、B、C、D,TAB表示節(jié)點(diǎn)A 和B 之間的交易,BL1為新產(chǎn)生的區(qū)塊,BC1為新的區(qū)塊鏈。
1)交易產(chǎn)生及傳播。
圖2(a)左圖表示交易的產(chǎn)生,生成新的交易TAB,圖2(a)右圖表示交易的傳播,將TAB通過(guò)四個(gè)節(jié)點(diǎn)形成的P2P 網(wǎng)絡(luò)進(jìn)行傳播,每個(gè)節(jié)點(diǎn)均會(huì)收到此交易信息。
2)區(qū)塊生成。
圖2(b)表示區(qū)塊生成,四個(gè)節(jié)點(diǎn)通過(guò)約定好的共識(shí)機(jī)制,如工作量證明(Proof of Work,PoW)機(jī)制競(jìng)爭(zhēng)記賬權(quán),假設(shè)C 節(jié)點(diǎn)獲得礦工身份,則負(fù)責(zé)產(chǎn)生新的區(qū)塊BL1,并將此區(qū)塊簽名和蓋上時(shí)間戳。
3)區(qū)塊驗(yàn)證。
圖2(c)表示區(qū)塊驗(yàn)證,礦工節(jié)點(diǎn)C將新產(chǎn)生的區(qū)塊BL1通過(guò)P2P 網(wǎng)絡(luò)傳播給網(wǎng)絡(luò)所有節(jié)點(diǎn),其他節(jié)點(diǎn)對(duì)此區(qū)塊的有效性進(jìn)行驗(yàn)證,如交易TAB是否合法有效。
4)區(qū)塊入鏈。
圖2(d)表示區(qū)塊入鏈,網(wǎng)絡(luò)中節(jié)點(diǎn)通過(guò)新區(qū)塊的驗(yàn)證,并將新產(chǎn)生的區(qū)塊增加到區(qū)塊鏈中,每個(gè)節(jié)點(diǎn)擁有當(dāng)前時(shí)刻區(qū)塊鏈的最新?tīng)顟B(tài)BC1。
圖1 比特幣網(wǎng)絡(luò)中的區(qū)塊存儲(chǔ)結(jié)構(gòu)Fig. 1 Block storage structure in Bitcoin network
圖2 比特幣網(wǎng)絡(luò)中新區(qū)塊入鏈過(guò)程Fig. 2 Process of a new block addition in Bitcoin network
在圖1 所示的區(qū)塊結(jié)構(gòu)中,區(qū)塊頭中實(shí)際上定義了網(wǎng)絡(luò)節(jié)點(diǎn)間的共識(shí)機(jī)制,如比特幣系統(tǒng)中定義的PoW 機(jī)制,每個(gè)節(jié)點(diǎn)嘗試尋找一個(gè)“幸運(yùn)數(shù)”,使得將當(dāng)前區(qū)塊(區(qū)塊鏈中的最后一個(gè)區(qū)塊)的哈希值、最新產(chǎn)生的交易、隨機(jī)數(shù)三部分組合起來(lái),通過(guò)SHA256算法計(jì)算出散列值X(256位),如果X 滿足目標(biāo)哈希中的條件(比如前20 位均為0),那么該節(jié)點(diǎn)獲得創(chuàng)建新區(qū)塊的權(quán)利。事實(shí)上,這種共識(shí)機(jī)制消耗了大量的計(jì)算資源,新區(qū)塊入鏈的時(shí)間效率較低,比特幣每10 min增加一個(gè)新的交易區(qū)塊,并不適合于實(shí)際的電子健康記錄區(qū)塊鏈應(yīng)用。因此,需要設(shè)計(jì)新的共識(shí)機(jī)制來(lái)確保區(qū)塊入鏈的時(shí)間效率。另外,在圖1 所示的區(qū)塊體中,比特幣是將所有交易的詳細(xì)記錄保存在區(qū)塊中,這種方法對(duì)數(shù)據(jù)量較大的電子健康記錄顯然是不合適的,因?yàn)獒t(yī)學(xué)診斷圖像需要大量的存儲(chǔ)空間。因此,需要對(duì)現(xiàn)有區(qū)塊體結(jié)構(gòu)進(jìn)行改進(jìn)。
在圖2 所示的區(qū)塊鏈工作原理中,除了上述的礦工節(jié)點(diǎn)競(jìng)爭(zhēng)所存在的低效率問(wèn)題外,交易傳播和區(qū)塊驗(yàn)證過(guò)程均需要在全網(wǎng)進(jìn)行廣播,如果網(wǎng)絡(luò)中的節(jié)點(diǎn)數(shù)較多,將會(huì)占用大量的網(wǎng)絡(luò)帶寬。另外,參與本次交易的節(jié)點(diǎn)仍然有機(jī)會(huì)成為礦工,這就造成了自己對(duì)自己參與的交易進(jìn)行驗(yàn)證,這極大增加了數(shù)據(jù)造假的風(fēng)險(xiǎn)。因此,在實(shí)際的電子健康記錄區(qū)塊鏈中需要設(shè)計(jì)新的區(qū)塊入鏈過(guò)程,保證數(shù)據(jù)的安全性和入鏈效率。
本文設(shè)計(jì)的電子健康記錄區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)參照?qǐng)D1 進(jìn)行改進(jìn),其中,對(duì)區(qū)塊頭和區(qū)塊體中的交易進(jìn)行說(shuō)明,如圖3 所示。區(qū)塊頭中保留了原來(lái)的時(shí)間戳和Merkle 根,增加了前驅(qū)區(qū)塊的哈希值,用作驗(yàn)證目的。增加了參與交易節(jié)點(diǎn)的簽名集合,每個(gè)參與交易的節(jié)點(diǎn)需對(duì)交易進(jìn)行簽名驗(yàn)證,用來(lái)確認(rèn)交易的有效性。將原來(lái)區(qū)塊頭中用于工作量證明的隨機(jī)數(shù)和目標(biāo)哈希替換為現(xiàn)有的隨機(jī)數(shù)集合,用來(lái)產(chǎn)生下一個(gè)區(qū)塊入鏈時(shí)的礦工節(jié)點(diǎn),具體機(jī)制將在2.3 節(jié)中介紹。為了節(jié)省區(qū)塊鏈占用的存儲(chǔ)空間,區(qū)塊體中不再保存電子健康記錄的詳細(xì)信息,事實(shí)上,目前的醫(yī)療機(jī)構(gòu)更希望將完整的記錄保存在自己的服務(wù)器中,便于實(shí)施控制和進(jìn)行必要的審計(jì)。區(qū)塊體中具體交易由資源Hash、交易發(fā)起者簽名、資源統(tǒng)一資源定位(Uniform Resource Locator,URL)和可搜索加密索引四部分組成。資源Hash 即當(dāng)前交易中電子健康記錄的Hash 值,用來(lái)保證記錄的完整性;交易發(fā)起者簽名用來(lái)驗(yàn)證本次交易的真實(shí)性;資源URL 用來(lái)指向電子健康記錄的訪問(wèn)地址;可搜索加密索引為后續(xù)安全檢索指定的交易提供準(zhǔn)備,此部分內(nèi)容和數(shù)據(jù)共享的智能合約[15]將在后續(xù)工作中展開(kāi)研究,在本文中不作詳細(xì)介紹。
圖3 電子健康記錄區(qū)塊鏈存儲(chǔ)結(jié)構(gòu)Fig. 3 Blockchain storage structure of electronic health records
優(yōu)化后的區(qū)塊入鏈過(guò)程如圖4 所示。一個(gè)區(qū)塊從產(chǎn)生到成功入鏈經(jīng)歷四個(gè)過(guò)程:
1)交易分發(fā)階段。參與交易的節(jié)點(diǎn)A和C將交易TAC發(fā)給礦工節(jié)點(diǎn)B(礦工節(jié)點(diǎn)的產(chǎn)生將在2.3 節(jié)中介紹),B 負(fù)責(zé)收集指定時(shí)間范圍內(nèi)所有其他節(jié)點(diǎn)發(fā)過(guò)來(lái)的交易,為了降低潛在的風(fēng)險(xiǎn),礦工節(jié)點(diǎn)并不處理涉及自己的交易。
2)區(qū)塊驗(yàn)證階段。B 負(fù)責(zé)將收集到的交易形成新的區(qū)塊b,并將該區(qū)塊發(fā)回給參與交易的節(jié)點(diǎn)A和C,請(qǐng)求驗(yàn)證交易的有效性。
3)簽名區(qū)塊返回階段。A 和C 對(duì)區(qū)塊b 進(jìn)行驗(yàn)證,無(wú)誤則進(jìn)行簽名,選擇一個(gè)隨機(jī)數(shù)rA和rC與b一起發(fā)回給B(隨機(jī)數(shù)rA和rC用于2.3節(jié)中的礦工選舉)。
4)區(qū)塊鏈同步階段。B 將區(qū)塊加入到區(qū)塊鏈中,得到新的區(qū)塊鏈BC并將其發(fā)給所有其他節(jié)點(diǎn)同步。
區(qū)塊入鏈算法如下所示:
圖4 優(yōu)化的區(qū)塊入鏈過(guò)程Fig. 4 Optimized process of block addition
本文設(shè)計(jì)的共識(shí)算法核心是選舉礦工節(jié)點(diǎn),在每一個(gè)區(qū)塊入鏈開(kāi)始前進(jìn)行選舉,意味著每次區(qū)塊入鏈時(shí)礦工節(jié)點(diǎn)是已知的,這樣做的好處是交易能有目的性地發(fā)給礦工節(jié)點(diǎn)而不是整個(gè)網(wǎng)絡(luò),在進(jìn)行區(qū)塊驗(yàn)證時(shí)也不需要所有非參與交易的節(jié)點(diǎn)驗(yàn)證,驗(yàn)證通過(guò)后,由礦工節(jié)點(diǎn)統(tǒng)一發(fā)布當(dāng)前最新的區(qū)塊鏈狀態(tài)進(jìn)行全網(wǎng)統(tǒng)一。下一輪礦工節(jié)點(diǎn)的選舉由本輪區(qū)塊中參與交易的節(jié)點(diǎn)提供的隨機(jī)數(shù)產(chǎn)生,基于隨機(jī)數(shù)選舉的共識(shí)算法由兩個(gè)部分組成:礦工節(jié)點(diǎn)產(chǎn)生和基于信用的激勵(lì)機(jī)制。
2.3.1 礦工節(jié)點(diǎn)產(chǎn)生
在2.2 節(jié)介紹的簽名區(qū)塊返回階段,參與交易的節(jié)點(diǎn)會(huì)提供下一次區(qū)塊入鏈時(shí)用來(lái)選舉礦工節(jié)點(diǎn)的隨機(jī)數(shù),這些隨機(jī)數(shù)與當(dāng)前區(qū)塊的Hash值一起采用SHA256算法得到一個(gè)新的Hash 值h,對(duì)于所有區(qū)塊鏈中的節(jié)點(diǎn),求節(jié)點(diǎn)公鑰與h 的差的絕對(duì)值,其絕對(duì)值最小對(duì)應(yīng)的節(jié)點(diǎn)就是礦工節(jié)點(diǎn)。這樣做的目的是確保任何一個(gè)節(jié)點(diǎn)成為礦工節(jié)點(diǎn)的概率為1/N,并且防止單一節(jié)點(diǎn)決定礦工節(jié)點(diǎn)的情況。礦工節(jié)點(diǎn)選舉算法如下所示。
2.3.2 基于信用的激勵(lì)機(jī)制
在比特幣網(wǎng)絡(luò)中,成為礦工的節(jié)點(diǎn)將獲得比特幣的獎(jiǎng)勵(lì),用以激勵(lì)礦工節(jié)點(diǎn)參與記賬作出的貢獻(xiàn)。在本文設(shè)計(jì)的電子健康記錄區(qū)塊鏈中,礦工節(jié)點(diǎn)在區(qū)塊入鏈過(guò)程中承擔(dān)了大量的工作,為了激勵(lì)礦工節(jié)點(diǎn),設(shè)計(jì)基于信用的激勵(lì)機(jī)制,其基本思路是初始化時(shí)網(wǎng)絡(luò)中所有節(jié)點(diǎn)的信用值相等,當(dāng)每次一個(gè)節(jié)點(diǎn)成為礦工節(jié)點(diǎn)并完成區(qū)塊入鏈后對(duì)其信用值進(jìn)行調(diào)整,礦工節(jié)點(diǎn)信用值計(jì)算公式[16]如下所示:
其中:CV 為礦工節(jié)點(diǎn)信用值;TN 為礦工節(jié)點(diǎn)產(chǎn)生正確區(qū)塊的次數(shù);FN 為礦工節(jié)點(diǎn)產(chǎn)生錯(cuò)誤區(qū)塊的次數(shù)。從式(1)可以看出:礦工節(jié)點(diǎn)一旦產(chǎn)生錯(cuò)誤區(qū)塊將會(huì)降低其信用值,并且當(dāng)產(chǎn)生錯(cuò)誤區(qū)塊的次數(shù)大于正確區(qū)塊時(shí),信用值將減為0;而當(dāng)沒(méi)有錯(cuò)誤區(qū)塊產(chǎn)生時(shí),礦工節(jié)點(diǎn)的信用值將恒定增加。節(jié)點(diǎn)的信用值將記錄在電子健康記錄區(qū)塊鏈系統(tǒng)中,作為對(duì)節(jié)點(diǎn)進(jìn)行獎(jiǎng)勵(lì)的依據(jù)。
節(jié)點(diǎn)信用值的更新和維護(hù)策略如下:
1)對(duì)于有N 個(gè)節(jié)點(diǎn)的區(qū)塊鏈,構(gòu)建一個(gè)一維信用值數(shù)組CV=[cv1,cv2,…,cvn],cvi為第i 個(gè)節(jié)點(diǎn)的信用值,所有節(jié)點(diǎn)的信用值初值為0。
2)在礦工節(jié)點(diǎn)選舉結(jié)束后,礦工節(jié)點(diǎn)將區(qū)塊中待驗(yàn)證的交易發(fā)給參與節(jié)點(diǎn)進(jìn)行驗(yàn)證,各參與節(jié)點(diǎn)計(jì)算礦工節(jié)點(diǎn)處理與本節(jié)點(diǎn)相關(guān)的交易獲得的信用值,更新礦工節(jié)點(diǎn)的信用值。
3)礦工節(jié)點(diǎn)將所有參與節(jié)點(diǎn)計(jì)算的信用值求和,獲得自己的信用值,更新信用值數(shù)組。
4)下一輪礦工節(jié)點(diǎn)產(chǎn)生后,檢查上一個(gè)區(qū)塊中總的交易數(shù),重新計(jì)算上一輪礦工節(jié)點(diǎn)應(yīng)得的信用值,無(wú)誤則將信用值數(shù)組(有誤則以新計(jì)算的信用值為準(zhǔn))和本輪區(qū)塊一起存入?yún)^(qū)塊鏈系統(tǒng)中。為了防止礦工節(jié)點(diǎn)修改自己的信用值,增加了下一輪礦工節(jié)點(diǎn)對(duì)上一輪礦工節(jié)點(diǎn)信用值的驗(yàn)證操作。
為了驗(yàn)證本文提出模型的可行性,利用Hyperledger Fabric1.4 工具進(jìn)行電子健康記錄聯(lián)盟鏈的部署,并生成創(chuàng)始區(qū)塊,在本地局域網(wǎng)中部署6 個(gè)節(jié)點(diǎn),用來(lái)模擬聯(lián)盟鏈中的用戶,每個(gè)節(jié)點(diǎn)提供電子健康記錄的訪問(wèn)URL,電子健康記錄按照產(chǎn)生時(shí)間生成獨(dú)立的URL。實(shí)驗(yàn)開(kāi)始時(shí),在6 個(gè)節(jié)點(diǎn)均部署事先生成的20 個(gè)電子健康記錄,每個(gè)節(jié)點(diǎn)每10 s 隨機(jī)發(fā)起一次交易(將一個(gè)電子健康記錄添加到區(qū)塊鏈中)。實(shí)驗(yàn)中相關(guān)環(huán)境和主要參數(shù)如表1所示。
表1 實(shí)驗(yàn)相關(guān)環(huán)境和參數(shù)配置Tab. 1 Experimental environment and parameter configuration
3.2.1 正確性分析
表2 給出了6 個(gè)節(jié)點(diǎn)在區(qū)塊鏈系統(tǒng)運(yùn)行20 min 和30 min時(shí)成為礦工節(jié)點(diǎn)的次數(shù)和數(shù)據(jù)成功更新的數(shù)據(jù),從表2 中可以看出,每個(gè)節(jié)點(diǎn)請(qǐng)求的數(shù)據(jù)更新服務(wù)都已成功執(zhí)行,并且隨著區(qū)塊鏈運(yùn)行時(shí)間的增長(zhǎng),每個(gè)節(jié)點(diǎn)成為礦工節(jié)點(diǎn)的概率趨向相等。這也充分說(shuō)明了本文提出模型的正確性及共識(shí)機(jī)制在公平公正上的有效性。
表2 正確性實(shí)驗(yàn)結(jié)果Tab. 2 Experimental results of correctness
3.2.2 安全性分析
本文提出的電子健康記錄存儲(chǔ)模型基于區(qū)塊鏈技術(shù),相比傳統(tǒng)的中心化存儲(chǔ)具有明顯優(yōu)勢(shì),去中心化的存儲(chǔ)降低了黑客攻擊的風(fēng)險(xiǎn),也避免了單一節(jié)點(diǎn)失效帶來(lái)的系統(tǒng)數(shù)據(jù)丟失的隱患。另外,區(qū)塊鏈中存儲(chǔ)的數(shù)據(jù)僅僅是電子健康記錄的URL,并不存儲(chǔ)完整的記錄,在隱私保護(hù)上具有優(yōu)勢(shì)。在用戶真正需要訪問(wèn)完整的記錄時(shí)(存儲(chǔ)在機(jī)構(gòu)服務(wù)器中的記錄用擁有者的公鑰進(jìn)行加密存儲(chǔ)),存儲(chǔ)在機(jī)構(gòu)中的記錄需要用戶提供相應(yīng)的私鑰進(jìn)行驗(yàn)證,保證了數(shù)據(jù)訪問(wèn)的可追溯性,另外可以采用相關(guān)的智能合約對(duì)數(shù)據(jù)訪問(wèn)進(jìn)行進(jìn)一步控制。最后,區(qū)塊頭中存儲(chǔ)了電子健康記錄的Hash 值,用來(lái)驗(yàn)證電子健康記錄的內(nèi)容是否受到篡改,另外區(qū)塊鏈本身的不可篡改性也確保了區(qū)塊中存儲(chǔ)的電子健康記錄對(duì)應(yīng)的URL 的真實(shí)性。綜上,所提出的安全存儲(chǔ)模型在抵抗黑客攻擊、單點(diǎn)失效、隱私保護(hù)和不可篡改性上具有優(yōu)勢(shì)。
1)針對(duì)礦工節(jié)點(diǎn)偽造交易的攻擊。
首先,礦工節(jié)點(diǎn)因?yàn)榫哂猩蓞^(qū)塊的權(quán)利,極有可能偽造交易來(lái)獲取特定的利益,由于所有的交易均要發(fā)給參與交易的節(jié)點(diǎn)進(jìn)行驗(yàn)證,否則無(wú)法寫(xiě)入到區(qū)塊中。假設(shè)礦工節(jié)點(diǎn)偽造2 筆交易,涉及到4 個(gè)參與節(jié)點(diǎn),則礦工節(jié)點(diǎn)需要偽造4 個(gè)節(jié)點(diǎn)的私鑰來(lái)對(duì)交易進(jìn)行驗(yàn)證,在現(xiàn)有的公私鑰密碼體制下是非常困難的。
2)針對(duì)礦工節(jié)點(diǎn)偽造信用值的攻擊。
為了防止礦工節(jié)點(diǎn)偽造自己的信用值,采取兩種方案確保信用值的真實(shí)性:a)礦工節(jié)點(diǎn)的信用值由所有參與節(jié)點(diǎn)計(jì)算;b)下一輪礦工節(jié)點(diǎn)對(duì)上一輪礦工節(jié)點(diǎn)信用值進(jìn)行再次核驗(yàn),確保所有節(jié)點(diǎn)的信用值真實(shí)性。
3.2.3 存儲(chǔ)空間分析
傳統(tǒng)的比特幣網(wǎng)絡(luò)將所有交易存儲(chǔ)在區(qū)塊中,造成以太坊的存儲(chǔ)空間呈指數(shù)級(jí)增長(zhǎng),雖然聯(lián)盟鏈中用戶數(shù)量和交易數(shù)均有效,但存儲(chǔ)海量的醫(yī)學(xué)診斷圖像數(shù)據(jù)對(duì)區(qū)塊鏈系統(tǒng)的容量仍是巨大的挑戰(zhàn);另外,在P2P網(wǎng)絡(luò)中進(jìn)行區(qū)塊鏈同步所需的網(wǎng)絡(luò)帶寬和處理時(shí)間也是影響模型實(shí)際應(yīng)用的關(guān)鍵因素。本文提出的安全存儲(chǔ)模型僅存儲(chǔ)每次交易包含的電子健康記錄的URL,不會(huì)顯著增加區(qū)塊鏈的存儲(chǔ)容量。
3.2.4 運(yùn)行時(shí)間分析
模型的運(yùn)行時(shí)間主要由共識(shí)機(jī)制決定,為了比較本文提出的共識(shí)機(jī)制在時(shí)間效率上的優(yōu)勢(shì),將其與傳統(tǒng)的PoW 和權(quán)益證明(Proof of Stake,PoS)機(jī)制進(jìn)行對(duì)比,對(duì)比結(jié)果如圖5所示。PoW 中設(shè)置的隨機(jī)數(shù)解為5 個(gè)0,PoS 中設(shè)置的節(jié)點(diǎn)股權(quán)占比與節(jié)點(diǎn)信用值進(jìn)行關(guān)聯(lián),區(qū)塊鏈運(yùn)行時(shí)間設(shè)置為30 min。從圖5 中可以看出,三種機(jī)制在網(wǎng)絡(luò)中交易數(shù)量增加時(shí),所需的執(zhí)行時(shí)間都呈上升趨勢(shì),其中,PoW 所需的執(zhí)行時(shí)間最多,其原因是所有節(jié)點(diǎn)均需競(jìng)爭(zhēng)礦工身份,并且隨著隨機(jī)數(shù)難度增大,時(shí)間會(huì)顯著提升。PoS 相比PoW,大大減少了礦工節(jié)點(diǎn)產(chǎn)生的時(shí)間,通過(guò)股權(quán)占比決定礦工節(jié)點(diǎn),所需的執(zhí)行時(shí)間次之,但由于每次區(qū)塊入鏈時(shí)的礦工節(jié)點(diǎn)不確定,造成P2P網(wǎng)絡(luò)中所傳輸?shù)臄?shù)據(jù)量相比本文方案大得多,本文方案優(yōu)化了工作量證明所需的競(jìng)爭(zhēng),并且增加了交易收集和驗(yàn)證的針對(duì)性,所需的執(zhí)行時(shí)間最少。
圖5 共識(shí)機(jī)制時(shí)間效率對(duì)比Fig. 5 Time efficiency comparison of consensus mechanisms
電子健康記錄共享是移動(dòng)醫(yī)療和在線醫(yī)療的關(guān)鍵技術(shù),本文針對(duì)電子健康記錄安全存儲(chǔ)問(wèn)題進(jìn)行了深入研究,提出了基于區(qū)塊鏈的電子健康記錄存儲(chǔ)模型;設(shè)計(jì)了新的電子健康記錄區(qū)塊鏈存儲(chǔ)結(jié)構(gòu),降低了區(qū)塊鏈中數(shù)據(jù)存儲(chǔ)的容量和增強(qiáng)了模型使用的通用性;設(shè)計(jì)了基于隨機(jī)數(shù)選舉的共識(shí)機(jī)制,提高了區(qū)塊入鏈的時(shí)間效率;在此基礎(chǔ)上,優(yōu)化了區(qū)塊入鏈的算法,保證了數(shù)據(jù)操作的安全性和時(shí)間效率。如何在本文提出的數(shù)據(jù)存儲(chǔ)模型基礎(chǔ)上實(shí)施安全有效的數(shù)據(jù)共享,設(shè)計(jì)相應(yīng)的數(shù)據(jù)訪問(wèn)控制智能合約將是下一步研究的主要工作。