羅文俊,聞勝蓮,程 雨
(重慶郵電大學 計算機科學與技術學院,重慶 400065)
隨著醫(yī)療行業(yè)的飛速發(fā)展、醫(yī)療健康數(shù)據的急劇增多,許多醫(yī)院開始使用電子醫(yī)療病歷(Electronic Health Record, EHR)[1]記錄病患的醫(yī)療健康數(shù)據。使用電子醫(yī)療病歷的好處也有許多,例如:為醫(yī)療數(shù)據提供了便利的存儲方式、為醫(yī)生開處方提供了數(shù)據來源、為研究機構提供了研究數(shù)據等。通常,病人在一個醫(yī)院就醫(yī)后就會產生自己的電子醫(yī)療病歷,當該病人到另一家醫(yī)院就醫(yī)時,往往需要該病人之前的一些就診記錄或醫(yī)療數(shù)據,這時就要在不同的醫(yī)療機構間共享電子醫(yī)療病歷。
由于醫(yī)療數(shù)據類型繁多,如何對其進行合理的整合存儲,以及如何進行有效的共享,始終是一個研究熱點;同時,電子醫(yī)療病歷包含病患的許多隱私信息,在共享時如何防止隱私數(shù)據的泄露,這也是一個研究難題。
云計算[2-3]的發(fā)展為電子醫(yī)療病歷的共享提供了一個好的方法。通常醫(yī)院會將電子醫(yī)療病歷外包給云服務器,當其他的用戶想要獲取云上的某些醫(yī)療病歷時,需要經過云的驗證,驗證通過后云才會將數(shù)據共享給該用戶;但是基于云的電子醫(yī)療病歷共享方案[4-5]也有一個弊端:數(shù)據存儲中心化。這也就意味著,所有的醫(yī)療數(shù)據都集中存儲在云上,一旦云服務器被惡意攻破,那么云上存儲的醫(yī)療數(shù)據將會泄露,從而造成用戶的隱私泄露等一系列問題,由此引發(fā)的后果十分嚴重。
區(qū)塊鏈技術[6-8]的發(fā)展與應用為解決這一問題帶來了新機遇。2008年,中本聰發(fā)表了論文“Bitcoin: A peer-to-peer electronic cash system”[9],論文中提到了基于比特幣的區(qū)塊鏈技術,此項技術一經提出立馬引起了廣泛關注。區(qū)塊鏈技術具有去中心化和分布式存儲、不可篡改等優(yōu)點,可提供更高的安全性。基于該技術的優(yōu)點,逐漸有研究人員開始使用區(qū)塊鏈技術構建電子醫(yī)療病歷共享系統(tǒng)[10-13]。Xia等[14]提出了一個基于區(qū)塊鏈的醫(yī)療數(shù)據共享模型——MeDShare,系統(tǒng)中使用區(qū)塊鏈存儲醫(yī)療數(shù)據包,利用智能合約跟蹤對數(shù)據的所有操作,一旦監(jiān)測到惡意行為時,可以及時撤銷對數(shù)據的訪問權限;根據訪問權限,對數(shù)據請求者身份的合法性進行驗證,通過驗證后再實現(xiàn)數(shù)據安全共享,防止數(shù)據隱私泄露。Fan等[15]提出了MedBlock方案,方案利用區(qū)塊鏈的分布式賬本實現(xiàn)有效的電子病歷(Electronic Medical Record, EMR)訪問和檢索,在授權用戶之間共享電子病歷。方案中使用了加密策略,確保信息的安全性和隱私性,同時降低了成本;由于方案對共識機制進行改進,所以有效地提高了區(qū)塊共識的效率。此外,Zhang等[16]提出了一種基于區(qū)塊鏈的個人健康記錄共享方案;該方案構建了兩種不同的區(qū)塊鏈來實現(xiàn)醫(yī)療數(shù)據的安全共享,方案分別構建了私鏈和聯(lián)盟鏈,私鏈實現(xiàn)個人醫(yī)療數(shù)據的加密存儲,聯(lián)盟鏈保存?zhèn)€人醫(yī)療數(shù)據對應的安全索引,通過驗證醫(yī)生的身份令牌進行數(shù)據安全共享,很好地保護了醫(yī)療數(shù)據隱私;但是利用兩種類型的區(qū)塊鏈不僅會增加成本,其執(zhí)行效率也會降低。
在本文中,提出了一個基于區(qū)塊鏈的電子醫(yī)療病歷安全共享方案,本文方案在文獻[17]中提出的模型上進行了改進,并設計了數(shù)據安全共享協(xié)議,協(xié)議將分布式密鑰生成(Distributed Key Generation, DKG)技術[18-19]和基于身份的代理重加密(Identity-Based Proxy Re-Encryption, IBPRE)方案[20]相結合。與傳統(tǒng)的基于身份的加密方案相比,本文方案不用PKG生成主密鑰,而是采用DKG技術,讓每個機構用戶共同協(xié)商生成私鑰,不僅防止了PKG被惡意攻破時,各機構的私鑰泄露的問題,還有效抵抗了用戶間的合謀攻擊。方案采用IBPRE技術,在保證EHR的保密性、完整性和隱私性的基礎上,實現(xiàn)了單對用戶間的加密數(shù)據共享。
代理重加密是一種可以在密文間使用的轉換機制,最初由Balze等[21]提出。使用代理重加密的目的是解決用戶共享數(shù)據時的不便,在減輕用戶負擔的同時,還可以增強數(shù)據的可靠性和安全性。在代理重加密的過程中,每個參與者都無法獲取任何明文消息。其具體工作過程涉及到三種角色:數(shù)據擁有者、數(shù)據用戶和代理者。當數(shù)據所有者Alice想要將已加密的文件共享給數(shù)據用戶Bob時,Alice為Bob生成代理重加密密鑰,并將代理密鑰通過安全信道傳送給第三方的半可信代理者,半可信代理者用代理密鑰根據代理重加密算法對加密文件進行重加密,Bob獲取重加密的文件后,可利用自己的私鑰對重加密文件解密,解密后可獲取明文文件。
區(qū)塊鏈技術是一種特定的數(shù)據結構,這種數(shù)據結構按照時間順序將數(shù)據區(qū)塊組合成鏈條,當前區(qū)塊通常由前一個區(qū)塊的哈希值、有效負載、貢獻簽名和時間戳等組成,以此來保證其不可篡改性和不可偽造性;區(qū)塊鏈也是一種去中心化的分布式數(shù)據庫,傳統(tǒng)的分布式數(shù)據庫只有一個中心服務器維護數(shù)據,而區(qū)塊鏈不一樣,它由區(qū)塊鏈網絡中的所有節(jié)點共同維護數(shù)據,每一個節(jié)點都會對數(shù)據進行備份。如果單個節(jié)點上的數(shù)據被篡改或破壞,也不會對區(qū)塊鏈存儲的數(shù)據產生影響,除非有51%的節(jié)點都被篡改,那么區(qū)塊鏈上存儲的數(shù)據才會被篡改成功。區(qū)塊鏈網絡包含兩種重要實體,分別是礦工和驗證者。礦工指為區(qū)塊鏈生成新區(qū)塊的節(jié)點,不同的應用場景中可以定義不同的節(jié)點為礦工。在比特幣區(qū)塊鏈中,只有提供工作證明的礦工節(jié)點能夠保存交易記錄,而驗證者則會在驗證礦工提交的區(qū)塊后,生成新區(qū)塊。
本文方案的模型對文獻[17]進行了改進,如圖1所示,該模型主要由4種角色組成,分別是N個權威中心、數(shù)據擁有者、數(shù)據用戶、代理者。其中,N個權威中心是本文新增加的角色,其余角色是原模型中本就包含的。區(qū)塊鏈節(jié)點由一個聯(lián)盟組織內的醫(yī)院、銀行、保險公司、研究所等構成,每一個節(jié)點可以至少扮演一種角色。模型采用分布式數(shù)據庫和區(qū)塊鏈共同存儲醫(yī)療數(shù)據:數(shù)據庫存儲加密的EHR,區(qū)塊鏈存儲EHR的對應訪問控制策略、其在數(shù)據庫上的存儲地址和EHR的數(shù)據哈希。采用這種存儲模式既解決了數(shù)據集中存儲在各醫(yī)療機構的數(shù)據庫中的問題,同時也減輕了區(qū)塊鏈上的數(shù)據存儲和高頻訪問的壓力。
圖1 基于區(qū)塊鏈的電子醫(yī)療病歷共享模型Fig.1 Blockchain-based electronic health record sharing model
1)N個權威中心。N個權威中心分別代表聯(lián)盟鏈內不同的醫(yī)療相關機構,例如:醫(yī)院、研究所、銀行、保險公司等。各權威中心可自己生成一部分秘密,然后根據各自的身份信息協(xié)商出每個機構的私鑰。
2)數(shù)據擁有者。數(shù)據擁有者擁有自己的EHR,可以將EHR分享給其他機構。數(shù)據擁有者將原始的醫(yī)療數(shù)據加密存儲在分布式數(shù)據庫中并且將該醫(yī)療記錄的hash值、存儲地址、訪問控制策略存儲到區(qū)塊鏈,以防止數(shù)據被惡意篡改。在數(shù)據共享的過程中,數(shù)據擁有者需生成代理重加密密鑰并將該密鑰分發(fā)給代理節(jié)點。
3)數(shù)據用戶。數(shù)據用戶可從數(shù)據所有者處獲取EHR,授權數(shù)據用戶可通過發(fā)送驗證請求來獲取重新加密的EHR,也可使用自己的私鑰來解密重加密后的EHR。
4)代理者。根據委托權益證明(Delegated Proof Of Stake, DPOS)共識算法[22]所推舉出來的礦工節(jié)點作為代理節(jié)點。該代理執(zhí)行重加密算法重新加密EHR。具體而言,代理節(jié)點根據來自數(shù)據所有者的重加密密鑰來重新加密EHR。
根據本文方案的模型,本文采用一種多中心的基于身份的代理重加密方案作為數(shù)據共享協(xié)議。協(xié)議根據Matthew Green提出的IBPRE方案進行改進。在Matthew Green的方案中,用戶私鑰是由PKG(Private Key Generation)產生的主密鑰生成,但是這里存在一個問題:如果PKG的真實性無法信任或PKG被惡意攻擊,那么主密鑰就有可能泄露,從而泄露用戶的私鑰。為了提高用戶密鑰生成的安全性,本文方案對IBPRE方案的密鑰生成部分采用DKG技術進行優(yōu)化,用DKG以后,每一個用戶的私鑰都根據其余用戶的秘密值協(xié)商生成,即使單個用戶被惡意攻擊也能保證密鑰的安全性。具體的數(shù)據共享協(xié)議由以下5個步驟組成:系統(tǒng)初始化,密鑰生成,數(shù)據存儲,數(shù)據共享,數(shù)據恢復。
2)密鑰生成。每個權威根據輸入的參數(shù)和身份標志idi,返回其私鑰skidi=H1(idi)s。
5)數(shù)據恢復。當用戶接收到重加密后的EHR時,可使用自己的私鑰skidj對重加密密文進行解密,解密后就可獲取EHR明文文件M。其第一層密文解密過程如下:首先用戶計算Xj=Decrypt(skidj,(c3,c4))=c4/e(c3,skidj),然后計算Xi=c2/e(c1,H2(Xj)),計算所得的Xi即為EHR明文文件M。
3.1.1 用戶私鑰的正確性
本文提出的方案和其他的基于身份的加密方案[23-24]類似,都是先產生主密鑰,再根據主密鑰生成用戶私鑰。在這些方案中,需要一個可信第三方權威(例如PKG)來保護主密鑰并生成用戶私鑰;但是在本文方案的模型中沒有可信第三方,所以采用文獻[18-19]中的DKG技術來實現(xiàn)沒有可信第三方時的密鑰生成,用戶私鑰生成的正確性可以由DKG技術來保證。
3.1.2 密文的正確性
在本文方案中,需要驗證兩層密文的正確性,即加密密文的正確性和重加密密文的正確性。首先,第一層密文m經過用戶idi加密后得到密文cidi=(gr,m·e(gs,H1(idi))r),其用戶私鑰為skidi=(H1(idi)s),通過如下等式來驗證其正確性:(m·e(gs,H1(idi))r)/e(gr,H1(idi)s)=m。
在重加密過程中,重加密密文cidj=〈c1,(c2·e(c1,R3)),R1,R2〉,重加密密文是由重加密密鑰對第一層密文cidi計算得到的。經計算后,可得cidj=(gr,m·e(g,H2(X))r,R1,R2),給出解密密鑰skidj=H1(idj)s,可以解密第二層密文cidj。
將此解密過程分為兩部分,首先將重加密密文的后兩部分cidj′=〈R1,R2〉看作用戶在私鑰skidj下加密的單層密文,然后根據單層密文解密過程對其進行解密,計算可得到X=Decrypt(params,skidj,cidj′)=R2/e(R1,skidj),再使用得到的X對重加密密文的前兩部分繼續(xù)進行解密,計算m·e(g,H2(X))r/e(gr,H2(X))可獲取明文。
綜上所述,本文提出的協(xié)議是正確的。
本文的模型和協(xié)議共同保證了數(shù)據的安全性和隱私性。
首先,從方案所提出的模型上來講:模型使用分布式數(shù)據庫保存加密的EHR,這保證了即使加密數(shù)據泄露,在沒有數(shù)據擁有者的私鑰的情況下,加密數(shù)據也無法被攻擊者解密從而獲取明文內容。此外,模型使用區(qū)塊鏈存儲數(shù)據的hash、存儲地址和訪問控制策略,根據區(qū)塊鏈自身可防篡改的特性,極大地提高了數(shù)據的安全性和隱私性。具體而言,由于區(qū)塊鏈本身包含許多個節(jié)點,一旦數(shù)據被寫入區(qū)塊鏈,那么每個節(jié)點都會備份該數(shù)據,所以除非發(fā)生51%攻擊,否則區(qū)塊鏈上的數(shù)據是無法被篡改的;即便最后發(fā)生了51%攻擊,由于區(qū)塊鏈上并未存儲原始的EHR,這種篡改對EHR的元數(shù)據也并不會產生影響。
其次,從方案所提出的協(xié)議上來講:本文采用的基于身份的代理重加密協(xié)議由于經過了優(yōu)化改進,其用戶私鑰生成部分不再依靠PKG來生成,而是每一個機構用戶自己選擇多項式生成秘密值,再由秘密值來生成自己的私鑰,相比PKG這種密鑰集中生成的辦法,分布式密鑰生成法可以有效地防止私鑰泄露的問題,其安全性在于:即使單個用戶遭受到惡意攻擊,攻擊者也無法獲取該用戶的秘密值,更無法獲取其私鑰,那么利用用戶公鑰加密存儲在分布式數(shù)據庫的EHR也無法被攻擊者利用其私鑰解獲。如果遭受惡意攻擊的是多個用戶,或者多個用戶進行合謀攻擊,也無法獲取私鑰,因為協(xié)議中會對每一個用戶發(fā)過來的秘密值進行檢驗,檢驗不成功是無法生成私鑰的。由此得出,用戶的私鑰是安全的,且不易被惡意攻擊造成私鑰泄露。
在用戶私鑰生成以后,假設某一個數(shù)據用戶想要獲取EHR的明文內容,首先需要滿足訪問控制策略,其次需要解密EHR密文。將協(xié)議剩下的步驟分為兩個階段,如下所示。
階段一 數(shù)據用戶B首先發(fā)送含有自己簽名的請求給數(shù)據擁有者A,數(shù)據擁有者查看該用戶對應的訪問策略,確認有讀取權限后再生成代理密鑰并發(fā)給代理者S,同時也將加密數(shù)據存儲的地址發(fā)給代理者。在此階段,假設數(shù)據擁有者是可信的,且數(shù)據用戶從未將自己的身份憑證暴露給其他人,攻擊者C無法恢復密鑰,可以設想攻擊者的不同攻擊情況:
1)情況一。C發(fā)送給A一個請求,試圖獲取加密數(shù)據,由于C沒有用戶的身份憑證,那么A接收到C的請求后,查看不到對應C的訪問控制策略,那么就不會執(zhí)行接下來的協(xié)議步驟,C攻擊不成功。
2)情況二。允許攻擊者C攔截用戶B發(fā)送給A的請求消息并執(zhí)行重放攻擊。假設C可以成功欺騙A,這導致A將C視為B,那么A可以查詢到B的相應訪問控制策略,如果B有讀取權限,A會生成針對B的代理密鑰,然后發(fā)送代理密鑰和請求數(shù)據的地址給代理者,代理者正常執(zhí)行余下步驟后,再將重加密的密文發(fā)送給C,但這段密文對C來說仍是無法解密的,因為該密文是用針對B的代理密鑰加密生成的。
總之,協(xié)議的第一階段能有效抵抗身份偽裝和重放攻擊。
階段二 代理者接收到數(shù)據擁有者發(fā)送的重加密密文和加密數(shù)據的存儲地址后,代理者再根據協(xié)議下載加密數(shù)據并重加密該數(shù)據密文,然后將重加密密文發(fā)送給用戶。在重加密過程中,仍然假設數(shù)據擁有者是可信的,同時數(shù)據用戶的身份憑證從未暴露給其他人,代理者是半可信的,即代理者對存儲的EHR文件感興趣,并且嘗試獲取文件內容從而獲得好處,但是會按照協(xié)議規(guī)定執(zhí)行協(xié)議的每一步,不會中途退出協(xié)議也不會提供虛假數(shù)據,那么代理者嘗試獲取EHR明文的方式有兩種:方法一,根據數(shù)據擁有者的私鑰直接對第一層密文解密;方法二,對加密文件進行重加密,重加密后利用數(shù)據用戶的私鑰解密密文。對于方法一,由于數(shù)據擁有者可信,其身份憑證也未暴露,根據分布式密鑰生成的數(shù)據擁有者的私鑰無法被代理者獲取,那么代理者在獲取到第一層密文文件時無法使用私鑰解密文件,即代理者不能通過此方法獲取EHR明文。對于方法二,假設代理者通過代理密鑰將密文重加密,然后得到重加密密文,那么此時要獲取EHR明文,代理者需要獲得數(shù)據用戶的私鑰才能解密第二層密文。與方法一同理,由于數(shù)據用戶的身份憑證未暴露,且其私鑰是根據分布式密鑰生成法生成的,代理者無法獲取數(shù)據用戶的私鑰,那么代理者也無法解密第二層密文來獲取EHR明文。總之,雖然代理者是半可信的,但是這也不會影響方案的安全性,也不會影響數(shù)據用戶獲取EHR的真實性。
由于目前醫(yī)療信息化存在一些問題,現(xiàn)列舉這些問題,并分析了本文方案中針對這些問題所提出的解決措施:
1)隱私和安全問題。本文方案采用非對稱加密技術加密數(shù)據,可以保證隱私數(shù)據不會受到威脅。將醫(yī)療相關數(shù)據的hash存儲在區(qū)塊鏈,保證醫(yī)療數(shù)據的不可篡改性,也保證其不可抵賴性。
2)數(shù)據可訪問性、操作性和完整性問題。本文方案采用分布式數(shù)據庫存儲加密數(shù)據,并將原始數(shù)據哈希、訪問權限存入區(qū)塊鏈,方便檢測各機構的不同權限,實現(xiàn)各機構間的數(shù)據共享,保證數(shù)據可訪問性和操作性。由于區(qū)塊鏈具有分布式數(shù)據庫的特性,數(shù)據在每一個節(jié)點上都有備份,可有效防止數(shù)據丟失,以保證其完整性。
此外,本文采用對照分析的方法來評估所提出的電子醫(yī)療病歷共享方案。由于本文方案是基于區(qū)塊鏈的,且是為了解決醫(yī)療數(shù)據共享問題所提出的,與文獻[12]、文獻[17]、文獻[25]所提出的方案屬于同類型的醫(yī)療區(qū)塊鏈方案,所以將本文方案與以上三種方案對比,從各方案所采用的共識機制、區(qū)塊鏈類型、算力需求等幾方面著手,能夠有效對比出本文方案的優(yōu)缺點,結果如表1所示。
表1 不同方案的優(yōu)缺點對比 Tab. 1 Comparison of advantages and disadvantages of different schemes
由表1的對比可知,本文方案使用DPOS算法作為共識機制,相對于文獻[17]和文獻[25]使用的POW算法,本文方案所需要啟動的節(jié)點數(shù)相對更少,且不需要花費大量的算力去維護區(qū)塊鏈;雖然文獻[12]需要耗費的算力也較小,但是該方案方案涉及到兩種類型的區(qū)塊鏈,分別是聯(lián)盟鏈和私有鏈,兩種類型的區(qū)塊鏈要進行維護肯定耗費的成本更高,同時,私鏈的去中心化程度不如聯(lián)盟鏈。
為了比較三種共識算法的效率,將三種共識算法進行仿真,通過對實驗數(shù)據的仿真測試得出各共識算法運行時的CPU占用率,其結果如圖2所示。仿真結果表明,DPOS雖然不如PBFT響應快速,但是相對于POW,DPOS對CPU的占用率明顯小很多。
圖2 3種共識機制對CPU占用率的對比Fig. 2 Comparison of CPU utility by three consensus mechanisms
綜上所述,相對于其他三種方案,本文方案的效率雖比不上文獻[12]方案,但是遠高于文獻[25]和文獻[17]方案,不僅保證了更高程度的去中心化,同時也不需要花費太高的算力和成本。本文方案明顯具有一定優(yōu)勢。
由于當前在各醫(yī)療相關機構間進行醫(yī)療數(shù)據共享始終是一個熱門研究問題,因此保證醫(yī)療數(shù)據隱私性、實現(xiàn)基于區(qū)塊鏈的電子醫(yī)療病歷共享具有重要意義。本文基于區(qū)塊鏈的去中心化和不可篡改性等特點,提出了基于區(qū)塊鏈的電子醫(yī)療病歷共享方案。本文方案改進了文獻[17]的模型,并提出了數(shù)據共享協(xié)議,實現(xiàn)了單對授權用戶間的醫(yī)療數(shù)據安全共享功能;但方案只能實現(xiàn)單對用戶間的數(shù)據共享,且方案中的DPOS算法效率還有待提高。
如何改進共識算法,提高共識效率,實現(xiàn)一個用戶到多個用戶的數(shù)據共享是下一步研究的主要工作。