常源恒,丁有偉,胡孔法
(南京中醫(yī)藥大學人工智能與信息技術(shù)學院,江蘇南京 210046)
中醫(yī)藥是中華文明的瑰寶,近年來隨著大數(shù)據(jù)技術(shù)的發(fā)展,中醫(yī)藥大數(shù)據(jù)的管理與應用備受關(guān)注[1-2]。中醫(yī)藥大數(shù)據(jù)中包含許多敏感信息,如中醫(yī)電子病歷中包含病人私人信息、中醫(yī)藥方等敏感數(shù)據(jù),一旦發(fā)生泄漏,后果不堪設(shè)想。當前在中醫(yī)藥數(shù)據(jù)共享方面一般采用中心化的方案,由數(shù)據(jù)中心集中分配密鑰與權(quán)限并存儲所有數(shù)據(jù),但這種中心化的數(shù)據(jù)共享方法存在一定安全隱患,如因數(shù)據(jù)中心抗攻擊能力不足導致外部攻擊者竊取數(shù)據(jù),或因數(shù)據(jù)中心本身不可信造成數(shù)據(jù)泄漏等。因此,安全、高效的中醫(yī)電子病歷共享方法是中醫(yī)藥大數(shù)據(jù)應用中亟待解決的關(guān)鍵問題。
現(xiàn)有的中醫(yī)電子病歷大多使用集中化的共享方法[3-4],各級醫(yī)院將自己的電子病歷保存在本地數(shù)據(jù)庫中,但隨著數(shù)據(jù)規(guī)模的增長,對存儲設(shè)備、機房空間和管理人員的需求也隨之增長。同時,中心化的共享方法存在某些固有的安全漏洞,如數(shù)據(jù)庫被破解、內(nèi)部人員監(jiān)守自盜等均可能會導致隱私信息泄露,極大地阻礙了中醫(yī)藥大數(shù)據(jù)共享。另外,由于當前中醫(yī)藥電子病歷標準尚未統(tǒng)一,各醫(yī)療機構(gòu)的數(shù)據(jù)格式及屬性存在較大差異,很難使用傳統(tǒng)的數(shù)據(jù)共享方案。因此,需要設(shè)計一種針對非標準化中醫(yī)藥電子病歷的數(shù)據(jù)安全共享方案。
區(qū)塊鏈技術(shù)是目前的熱門技術(shù)之一,作為網(wǎng)絡(luò)安全方面的佼佼者,區(qū)塊鏈具有去中心化、不可篡改等特性[5],對于交易雙方又具有非對稱加密、多方存證防篡改等安全機制,數(shù)據(jù)安全性可得到很好的保障[6]。區(qū)塊鏈技術(shù)目前已成功應用于金融[7-8]、保險、物流[9]、電子票據(jù)、醫(yī)學[10-12]等領(lǐng)域,但在中醫(yī)藥領(lǐng)域的應用較少。目前區(qū)塊鏈在中醫(yī)藥領(lǐng)域的應用主要是探索其可行性,尚未考慮實際性能問題[13]。如肖麗等[14]提出基于區(qū)塊鏈的中醫(yī)電子病歷系統(tǒng),其需要各級醫(yī)院配合使用相同電子病歷,但目前各醫(yī)院的中醫(yī)電子病歷標準并不相同,實際上難以實現(xiàn)。其他相關(guān)研究使用完全的去中心化方案[15],如生慧等[16]提出基于聯(lián)盟鏈的中醫(yī)藥海量異構(gòu)數(shù)據(jù)共享方案,使用戶可安全地分享自己的醫(yī)療數(shù)據(jù),但這種方案并不利于醫(yī)療數(shù)據(jù)監(jiān)管。從應用角度看,中醫(yī)電子病歷需要一種既能保證數(shù)據(jù)傳輸過程中的安全性,又能滿足衛(wèi)生部門監(jiān)管要求的共享方案。
針對上述問題,本文提出一種基于區(qū)塊鏈的中醫(yī)電子病歷共享方案。該方案結(jié)合區(qū)塊鏈技術(shù)與傳統(tǒng)數(shù)據(jù)共享的集中管理及中心化方法,將中醫(yī)電子病歷用區(qū)塊鏈形式存儲在中醫(yī)藥大數(shù)據(jù)中心,并搭建電子病歷共享聯(lián)盟鏈以保存共享過程中的請求答復信息。同時,為提高區(qū)塊鏈傳輸速度,使用一條額外的區(qū)塊鏈側(cè)鏈進行數(shù)據(jù)傳輸,使中醫(yī)藥大數(shù)據(jù)能更好地實現(xiàn)安全共享。
在傳統(tǒng)區(qū)塊鏈中,多個陌生節(jié)點在區(qū)塊鏈中通過共識機制達成信任,每個區(qū)塊擁有上個區(qū)塊的哈希值用于追溯,是一種去中心化結(jié)構(gòu),而傳統(tǒng)數(shù)據(jù)庫是中心化結(jié)構(gòu)。本文將兩者結(jié)合,使用中心化的數(shù)據(jù)中心作為區(qū)塊鏈存儲中心,并利用區(qū)塊鏈可追溯、防篡改的特性,提出一種中醫(yī)電子病歷安全共享方法,即弱中心化方法。該方法包括主側(cè)兩條區(qū)塊鏈,主鏈的用戶有研究人員、數(shù)據(jù)中心和各級醫(yī)院,用戶加入?yún)^(qū)塊鏈后,由系統(tǒng)分發(fā)唯一標識uID 和密鑰對(uPk,uSk),其中uPk、uSk 分別為用戶的公鑰和私鑰。醫(yī)院作為數(shù)據(jù)所有者,也有唯一的身份標識符hID 以及公鑰hPk 與私鑰hSk。由于區(qū)塊鏈的整體效率較低,因此使用一條由數(shù)據(jù)中心監(jiān)管的側(cè)鏈以提升數(shù)據(jù)傳輸效率。
區(qū)塊鏈主鏈存儲請求數(shù)據(jù)信息及對于請求的答復信息。在主鏈上,研究人員與各級醫(yī)院具有訪問數(shù)據(jù)中心目錄、發(fā)起交易的權(quán)限,數(shù)據(jù)中心具有簽發(fā)證書與存儲數(shù)據(jù)的權(quán)限。側(cè)鏈用于臨時存儲交易中請求者所請求的數(shù)據(jù)。數(shù)據(jù)中心具有完全的權(quán)限,包括發(fā)送區(qū)塊、刪除區(qū)塊,而研究人員和各級醫(yī)院只有讀取區(qū)塊的權(quán)限。整體網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示。
Fig.1 Overall network structure圖1 整體網(wǎng)絡(luò)結(jié)構(gòu)
在整體框架中,數(shù)據(jù)中心的各服務器負責完成去中心化的區(qū)塊打包排序、分發(fā)區(qū)塊鏈認證證書等任務,但數(shù)據(jù)中心對于整體而言依然是網(wǎng)絡(luò)結(jié)構(gòu)的中心,負責所有數(shù)據(jù)的存儲與分發(fā),既具有去中心化的高安全性,又保留了中心化的高性能特征。
假設(shè)中醫(yī)電子病歷包含總編號、標準化臨床表現(xiàn)、標準化病機、膏方、劑量、備注等屬性,數(shù)據(jù)中心以區(qū)塊鏈形式存儲所有醫(yī)院的數(shù)據(jù),每30 條數(shù)據(jù)打包為一個區(qū)塊。每個數(shù)據(jù)區(qū)塊的區(qū)塊頭包含該區(qū)塊內(nèi)所有電子病歷的Merkle根與上個區(qū)塊的哈希,區(qū)塊體包含數(shù)據(jù)內(nèi)容及其擁有者ID。
由于所有數(shù)據(jù)都存儲在一條鏈上,為便于查詢每個區(qū)塊的大致內(nèi)容,且數(shù)據(jù)中心能快速遍歷整條鏈為數(shù)據(jù)創(chuàng)建目錄,數(shù)據(jù)目錄格式為列表,用戶可訪問目錄表查詢需要的數(shù)據(jù)。數(shù)據(jù)目錄表如表1 所示,其中hID 為醫(yī)院ID,num?ber 為數(shù)據(jù)所在區(qū)塊高度。
Table1 Data catalog table表1 數(shù)據(jù)目錄表
在主鏈上,每次用戶的電子病歷數(shù)據(jù)訪問請求為一個交易,請求內(nèi)容包括用戶ID、請求的數(shù)據(jù)區(qū)塊及被請求的醫(yī)院ID。如圖2 中的主鏈請求區(qū)塊體部分,其中number 為請求數(shù)據(jù)所在區(qū)塊高度。醫(yī)院審核后,向區(qū)塊鏈廣播一條帶有認證人信息的答復信息,并對該信息進行簽名。答復格式如圖2 中的主鏈答復區(qū)塊體部分,其中,uID 為用戶ID,verifier 為認證人,answer 為該次請求的結(jié)果。數(shù)據(jù)中心判斷審核是否通過,如果通過,則數(shù)據(jù)中心將數(shù)據(jù)請求人的公鑰加密后發(fā)送到側(cè)鏈上。
Fig.2 Main chain and side chain blocks圖2 主鏈與側(cè)鏈區(qū)塊
對于非法請求,如出現(xiàn)所請求的數(shù)據(jù)與醫(yī)院不匹配的情況,除醫(yī)院對該請求的答復設(shè)置為非法(即將answer 屬性值設(shè)為n)外,區(qū)塊鏈會將該請求永久存儲,未來該請求者再次請求其他數(shù)據(jù)時,醫(yī)院可查詢該請求者非法請求的數(shù)量,酌情考慮對該節(jié)點的許可。如果非法數(shù)據(jù)連續(xù)超過5條,則該請求節(jié)點會被禁止發(fā)送請求。
如圖2 所示,主鏈上的區(qū)塊均為用戶請求區(qū)塊與醫(yī)院對該請求的答復區(qū)塊,區(qū)塊頭包含上個區(qū)塊的哈希,區(qū)塊體則是交易具體信息。
若醫(yī)院對請求者的認證通過,則數(shù)據(jù)中心使用請求者的公鑰對授權(quán)區(qū)塊加密后發(fā)送到側(cè)鏈上,即側(cè)鏈區(qū)塊,側(cè)鏈區(qū)塊經(jīng)過一定時間后被自動銷毀。
如圖3 所示,用戶通過在數(shù)據(jù)中心存儲的數(shù)據(jù)目錄查尋自己所需數(shù)據(jù),數(shù)據(jù)所屬醫(yī)院對用戶訪問請求進行審核。如果審核通過,數(shù)據(jù)中心通過側(cè)鏈將數(shù)據(jù)提供給用戶。
Fig.3 Flow of safe sharing of TCM electronic medical records圖3 中醫(yī)電子病歷安全共享流程
數(shù)據(jù)共享具體流程如下:
(1)用戶加入?yún)^(qū)塊鏈,區(qū)塊鏈向用戶分發(fā)證書與密鑰對,若需電子病歷數(shù)據(jù),查看數(shù)據(jù)中心的目錄查詢當前已存儲數(shù)據(jù)。
(2)查詢到所需數(shù)據(jù)的區(qū)塊高度,用戶將區(qū)塊高度number、數(shù)據(jù)所屬醫(yī)院hID 及自身uID 打包為一個請求消息,使用自身的私鑰加密后形成一個區(qū)塊,廣播到主鏈上。
(3)醫(yī)院接收到該區(qū)塊后使用用戶公鑰解密,并對用戶身份進行審核,之后向主鏈發(fā)送對該請求的答復信息。答復信息中應包含所請求的數(shù)據(jù)高度number、請求用戶uID、審核人verifier 及審核結(jié)果answer,醫(yī)院打包答復信息并使用自身的私鑰加密形成區(qū)塊,廣播到主鏈上。
(4)數(shù)據(jù)中心使用醫(yī)院公鑰解密并檢查審核結(jié)果,對于審核結(jié)果answer 為y 的答復消息中提到的數(shù)據(jù)高度,遍歷數(shù)據(jù)區(qū)塊鏈找到處在該高度上的區(qū)塊,復制區(qū)塊內(nèi)容并使用答復消息中用戶的公鑰加密,發(fā)送到側(cè)鏈上。
(5)用戶接收從側(cè)鏈上發(fā)送的區(qū)塊,使用自身私鑰解密得到所請求的數(shù)據(jù)。
(6)經(jīng)過一定時間后,側(cè)鏈上的數(shù)據(jù)將被自動銷毀,保證非法用戶無法獲得數(shù)據(jù),流程結(jié)束。
實驗使用計算機1:Intel? Core ?i5-2400 CPU @3.10GHz × 4,Ubuntu 18.04.5 LTS 系統(tǒng),4GB 內(nèi)存;計算機2:Intel? Core?i5-4200M CPU @2.50 GHz × 4,Windows7 系統(tǒng),并使用VMware WorkStation 虛擬機Ubuntu 18.04.5 LTS,均搭建Hyperledger fabric 平臺,版本為1.4.4。數(shù)據(jù)集為脫敏后近兩年的中醫(yī)電子病歷數(shù)據(jù),內(nèi)容包含數(shù)據(jù)編號、標準化臨床表現(xiàn)、標準化病機、中醫(yī)膏方4 個屬性,共有2 665條數(shù)據(jù),抽取其中部分數(shù)據(jù)作為實驗用例。
首先構(gòu)建網(wǎng)絡(luò),該網(wǎng)絡(luò)使用一個排序(order)節(jié)點模擬數(shù)據(jù)中心,具有Org1、Org2 兩個組織,Org1 代表數(shù)據(jù)中心的內(nèi)部組織,Org2 代表公有的區(qū)塊鏈組織。兩個節(jié)點peer0.Org2 和peer1.Org2 模擬醫(yī)院與請求數(shù)據(jù)的研究人員,兩個通道(channel)模擬區(qū)塊鏈主鏈與側(cè)鏈。然后對每個節(jié)點進行存儲私有數(shù)據(jù)智能合約和請求數(shù)據(jù)智能合約的安裝與初始化,其中針對存儲數(shù)據(jù)的背書策略,設(shè)定為只能在數(shù)據(jù)中心組織內(nèi)部查看其私有內(nèi)容。在Org1 中存儲中醫(yī)電子病歷數(shù)據(jù),在Org2 中的研究人員節(jié)點peer0 請求該數(shù)據(jù),請求處理后order 節(jié)點將請求數(shù)據(jù)發(fā)送至channel2 上。
實驗按照不同的總體存儲數(shù)據(jù)量及每個區(qū)塊存儲數(shù)據(jù)量進行對照實驗,在安全性由區(qū)塊鏈進行保障的情況下,主要對其性能進行測試。對于傳統(tǒng)數(shù)據(jù)庫MySQL,通常研究人員請求某醫(yī)院電子病歷數(shù)據(jù)需要等待的請求及審核時間與使用本文方法相同,二者的時間差值主要體現(xiàn)在發(fā)送數(shù)據(jù)給請求者的傳輸時間,故實驗對傳輸時間進行比較。每組實驗傳輸10 次數(shù)據(jù),在實驗過程中,首次對接收者所在組織的錨節(jié)點進行傳輸時會產(chǎn)生一定延遲,若對組織的首次傳輸不是該組織的錨節(jié)點,則不存在該延遲情況。由于實驗存在偶然性,故每組實驗去除最大值和最小值,對剩余幾次傳輸時間取平均值,得出實驗結(jié)果。
首先使用4 個節(jié)點構(gòu)建網(wǎng)絡(luò)進行3 組實驗,每組實驗使用不同的單個區(qū)塊存儲量,每個區(qū)塊分別存儲1/50/60 條數(shù)據(jù),總共存儲600~1 800 條數(shù)據(jù)在側(cè)鏈進行傳輸,結(jié)果如圖4 所示。由此可見,在節(jié)點數(shù)不變的情況下,不論區(qū)塊鏈中存儲數(shù)據(jù)總量為多少,每個區(qū)塊存儲數(shù)據(jù)量大小對傳輸時間影響不大,均在一個較穩(wěn)定的區(qū)間內(nèi)。
Fig.4 Comparison of transmission speed of different total data圖4 不同數(shù)據(jù)總量傳輸速度對比
同理,使用4 個節(jié)點構(gòu)建網(wǎng)絡(luò)進行3 組實驗,控制數(shù)據(jù)存儲總量分別為600、1 200、1 800 條,每個區(qū)塊存儲數(shù)據(jù)量從1~60 遞增,對比數(shù)據(jù)傳輸耗時。如圖5 所示,實驗結(jié)果表明,在數(shù)據(jù)總量相同的情況下,隨著區(qū)塊內(nèi)存儲量的增大,傳輸速度逐步增加,但在實際應用過程中,每個區(qū)塊僅傳輸一條數(shù)據(jù)會使得每次傳輸過多區(qū)塊,側(cè)鏈變得冗雜,不利于接收與銷毀。故在實際應用中,每個區(qū)塊傳輸數(shù)據(jù)量應選擇在20~50 之間。
Fig.5 Comparison of different transmission speeds for different numbers of data stored in each block圖5 每個區(qū)塊存儲數(shù)據(jù)量不同時傳輸速度對比
最后,維持數(shù)據(jù)總量為1 200 條進行兩組實驗,將節(jié)點數(shù)量由2 個增加到10 個,如圖6 所示。隨著節(jié)點數(shù)的增多,數(shù)據(jù)傳輸效率有小幅增長,這是網(wǎng)絡(luò)增大所帶來的必然結(jié)果。由于實驗環(huán)境限制,本實驗未對大數(shù)據(jù)量的環(huán)境進行測試,因此在小數(shù)據(jù)量的情況下,本文方案的效果優(yōu)于傳統(tǒng)方案。
Fig.6 Comparison of transmission speed with different number of nodes圖6 不同節(jié)點數(shù)傳輸速度對比
本文方案的安全性主要通過區(qū)塊鏈進行保障,使用SHA-256 算法保證區(qū)塊鏈的不可篡改性,對于一條任意長度的消息,SHA-256 都會生成一條256 位的哈希值,稱為消息指紋。當消息內(nèi)容出現(xiàn)任何改變,就會使該指紋發(fā)生改變。目前對于SHA-256 的破解方法主要是窮舉法,這對于數(shù)據(jù)有2256種可能的哈希值來說,破解幾乎是不可能的。
對于數(shù)據(jù)加密,區(qū)塊鏈數(shù)據(jù)加密過程中使用的公鑰和私鑰由加密算法ECDSA(Elliptic Curve Digital Signature Al?gorithm,橢圓曲線數(shù)字簽名算法)得出,該算法由私鑰可得出公鑰,但私鑰無法由公鑰逆推。破解橢圓算法除非解決離散對數(shù)難題,否則只能在一個巨大的空間內(nèi)進行暴力破解。ECDSA 算法原理復雜,且具有嚴格的證明過程,本文不再贅述。
對于傳統(tǒng)數(shù)據(jù)庫結(jié)構(gòu),假設(shè)惡意節(jié)點想要竊取數(shù)據(jù),惡意攻擊者僅需攻破數(shù)據(jù)庫本身(數(shù)據(jù)中心的防火墻)即可獲得數(shù)據(jù),且不會存在記錄。而對于本文結(jié)構(gòu),攻擊者首先需要在實名進入聯(lián)盟鏈的情況下攻擊數(shù)據(jù)中心防火墻,其次要破解使用SHA-256 與ECDSA 算法加密后的區(qū)塊鏈。又假設(shè)惡意節(jié)點是已加入?yún)^(qū)塊鏈的節(jié)點,想要篡改被醫(yī)院駁回的請求信息,首先需要破解醫(yī)院的私鑰,對駁回信息所在區(qū)塊A 的內(nèi)容進行更改。由于更改了區(qū)塊內(nèi)容,區(qū)塊A 的消息指紋發(fā)生了改變,惡意節(jié)點需要對區(qū)塊A的區(qū)塊頭進行更改,生成新的消息指紋。又由于區(qū)塊鏈中每個區(qū)塊都包含上一個區(qū)塊的消息指紋,對區(qū)塊A 的更改使得A 的下一個區(qū)塊發(fā)生變化。因此,惡意節(jié)點需要對下一個區(qū)塊的消息指紋進行更改,之后所有區(qū)塊才能成功進行攻擊,這需要極大的算力,幾乎不可能實現(xiàn)。
針對現(xiàn)今中醫(yī)藥數(shù)據(jù)共享方案研究中不能有效保證安全性的問題,本文提出一種基于區(qū)塊鏈的弱中心化中醫(yī)電子病歷分享方案。該方案使用區(qū)塊鏈技術(shù)結(jié)合傳統(tǒng)方案的中心化結(jié)構(gòu),可安全存儲中醫(yī)藥數(shù)據(jù),保留數(shù)據(jù)共享過程以便于追溯,并使用側(cè)鏈提升區(qū)塊鏈傳輸效率,在保證較好傳輸性能的同時,還能保證共享過程的安全性,最后通過實驗證明本方案的可行性。但本文未對區(qū)塊鏈本身的協(xié)議進行更改,未來將會對區(qū)塊鏈協(xié)議進行針對性地修改,使其符合中醫(yī)藥電子病歷數(shù)據(jù)特性,以期進一步提升方案的傳輸性能。