馬 雪,潘 恒,姚中原,斯雪明,3
1.中原工學(xué)院前沿信息技術(shù)研究院,河南鄭州450007
2.河南省區(qū)塊鏈數(shù)據(jù)共享國際聯(lián)合實(shí)驗(yàn)室,河南鄭州450007
3.復(fù)旦大學(xué)計(jì)算機(jī)學(xué)院,上海201203
4.鄭州經(jīng)貿(mào)學(xué)院大數(shù)據(jù)與人工智能學(xué)院,河南鄭州450007
電子病歷(electronic medical record,EMR)是數(shù)字形式的患者疾病記錄,包括患者的個(gè)人基本信息、病史、過敏史、疾病檢測(cè)結(jié)果和診療方案等[1],其中涉及多項(xiàng)敏感信息。目前,醫(yī)院通常由獨(dú)立的醫(yī)療信息系統(tǒng)存儲(chǔ)并處理病歷,這導(dǎo)致病歷數(shù)據(jù)孤島現(xiàn)象嚴(yán)重,不同醫(yī)院間的病歷數(shù)據(jù)難以互通[2-3]。
云計(jì)算的出現(xiàn)可以使大量病歷集中存放到中心化云端服務(wù)器中,既能降低本地?cái)?shù)據(jù)的存儲(chǔ)開銷,又為病歷數(shù)據(jù)共享提供了解決思路。然而,云端存儲(chǔ)存在的主要問題是透明度低、可信度差、敏感數(shù)據(jù)的安全得不到保證,這對(duì)患者的隱私構(gòu)成嚴(yán)重的威脅[4-5]。在現(xiàn)有的基于云存儲(chǔ)的數(shù)據(jù)共享方案中,大多采用中心化的密文檢索機(jī)制,仍然由醫(yī)院完成整個(gè)病歷的加密檢索與安全訪問。在這種情況下,各醫(yī)療機(jī)構(gòu)對(duì)患者電子病歷擁有絕對(duì)控制權(quán),而患者的參與度不高,無法控制甚至了解自己病歷的被訪問情況,因此存在隱私泄露風(fēng)險(xiǎn),容易出現(xiàn)醫(yī)患矛盾和糾紛。
自2008 年比特幣[6]出現(xiàn)以來,區(qū)塊鏈技術(shù)得到了迅速發(fā)展。區(qū)塊鏈采用分布式存儲(chǔ)架構(gòu),并依托健壯的加密原語保證其安全性;利用強(qiáng)大的共識(shí)協(xié)議使分布式網(wǎng)絡(luò)中的節(jié)點(diǎn)達(dá)成一致。若能將區(qū)塊鏈的分布式存儲(chǔ)思想引入數(shù)據(jù)共享領(lǐng)域,則有望解決上述中心化電子病歷共享存在的問題,于是涌現(xiàn)出了多種基于區(qū)塊鏈技術(shù)的電子病歷共享框架及病歷訪問控制方案,但由醫(yī)院和患者共同授權(quán)管理病歷的方案并不多見。實(shí)際上,由于電子病歷不僅包括患者個(gè)人信息,同時(shí)也有醫(yī)院的診療信息,因此如何憑借區(qū)塊鏈的去中心化共享優(yōu)勢(shì)實(shí)現(xiàn)醫(yī)院和患者對(duì)病歷的共同管理是一個(gè)值得研究的問題。
為了解決上述問題,本文提出了一種支持鏈上病歷關(guān)鍵字密文檢索的電子病歷雙重授權(quán)安全共享方案——DaseChain,主要包含以下內(nèi)容:
1)基于可搜索加密的病歷關(guān)鍵字密文檢索方法,利用醫(yī)院端的私鑰控制檢索權(quán)限值的生成,實(shí)現(xiàn)了鏈上密文數(shù)據(jù)檢索權(quán)限的細(xì)粒度訪問控制,并在分布式存儲(chǔ)環(huán)境下提高了檢索結(jié)果的準(zhǔn)確性,保證了檢索過程中患者的隱私安全。
2)提出了一種電子病歷鏈上授權(quán)方法?;诖碇丶用芗夹g(shù)設(shè)計(jì)了訪問控制密鑰鏈上傳遞算法,不僅增強(qiáng)了患者對(duì)所屬病歷的可控性,還實(shí)現(xiàn)了醫(yī)院與患者對(duì)病歷的共同授權(quán)和管理。
3)在隨機(jī)預(yù)言機(jī)模型下,基于n-QBDH 假設(shè)證明了本文方案的安全性,并通過模擬實(shí)驗(yàn)證明了該方案在計(jì)算開銷方面的能耗較少。
在電子病歷共享模型及方案設(shè)計(jì)方面,多數(shù)方案采用云鏈結(jié)合方式,主要利用區(qū)塊鏈可追溯的特性進(jìn)行數(shù)據(jù)及操作的存證。文獻(xiàn)[7] 提出一種安全的云輔助電子健康系統(tǒng),對(duì)電子健康記錄外包到云端的每一項(xiàng)操作都以交易的形式存儲(chǔ)到分布式賬本中,保證電子健康記錄訪問的可追溯性。文獻(xiàn)[8] 介紹了一種基于區(qū)塊鏈的用戶可控制數(shù)據(jù)共享的穿戴健康數(shù)據(jù)共享系統(tǒng)。文獻(xiàn)[9] 基于私有區(qū)塊鏈提出了一種輕量級(jí)的電子健康記錄共享系統(tǒng),可實(shí)現(xiàn)電子病歷數(shù)據(jù)的安全存儲(chǔ)和隱私保護(hù)。文獻(xiàn)[10] 為解決基于云的數(shù)據(jù)共享系統(tǒng)的可擴(kuò)展性和信任問題,提出一種基于區(qū)塊鏈的代理重加密的物聯(lián)網(wǎng)數(shù)據(jù)共享方案,可確保傳感器收集到的數(shù)據(jù)安全地傳輸給用戶。
在病歷密文數(shù)據(jù)安全檢索方面,傳統(tǒng)的可搜索加密方案[11-14]主要從功能性、安全性和檢索效率等方面進(jìn)行研究。文獻(xiàn)[15] 提出了一種新的云存儲(chǔ)數(shù)據(jù)共享服務(wù)方案。當(dāng)密文數(shù)據(jù)中需要添加新關(guān)鍵字時(shí),云服務(wù)提供商能夠基于新的關(guān)鍵字和原始重加密密鑰生成新的重加密密鑰,實(shí)現(xiàn)了云端密文數(shù)據(jù)的安全檢索,同時(shí)也提高了重加密的效率。然而在云計(jì)算環(huán)境下,中心化服務(wù)器可能存在單點(diǎn)故障,于是許多研究人員試圖以分布式區(qū)塊鏈代替中心化服務(wù)器,實(shí)現(xiàn)可靠且保密的數(shù)據(jù)檢索。文獻(xiàn)[16] 在區(qū)塊鏈環(huán)境下提出了一種電子病歷可搜索加密方案,用邏輯表達(dá)式構(gòu)建病歷索引并存儲(chǔ)在區(qū)塊鏈中,便于用戶搜索病歷索引。文獻(xiàn)[17] 基于許可區(qū)塊鏈和私有區(qū)塊鏈聯(lián)合的方法提出一種支持關(guān)鍵字檢索的電子病歷共享方案,由云服務(wù)器存儲(chǔ)加密后的電子病歷,私有鏈存儲(chǔ)密文哈希值,聯(lián)盟鏈存儲(chǔ)關(guān)鍵字索引,實(shí)現(xiàn)了電子病歷的安全存儲(chǔ)檢索與共享。文獻(xiàn)[18] 結(jié)合區(qū)塊鏈技術(shù)與可搜索加密技術(shù)提出了一個(gè)醫(yī)學(xué)圖像數(shù)據(jù)共享方案,將特定醫(yī)學(xué)影像數(shù)據(jù)相關(guān)的關(guān)鍵詞生成陷門發(fā)送到云服務(wù)器中搜索相應(yīng)的密文,便于用戶利用區(qū)塊鏈驗(yàn)證病歷密文的真實(shí)性。文獻(xiàn)[19] 基于云存儲(chǔ)和區(qū)塊鏈提出了一個(gè)在不同實(shí)體之間共享電子病歷的框架。在該框架中,云服務(wù)器負(fù)責(zé)存儲(chǔ)電子病歷密文,聯(lián)盟區(qū)塊鏈可以保存電子病歷索引,關(guān)鍵字可搜索加密能夠確保鏈上密文數(shù)據(jù)的安全檢索,所構(gòu)建的聯(lián)盟區(qū)塊鏈網(wǎng)絡(luò)模型、數(shù)據(jù)結(jié)構(gòu)和共識(shí)機(jī)制旨在保證系統(tǒng)高效運(yùn)行。上述方法雖然利用區(qū)塊鏈去中心化的特點(diǎn)彌補(bǔ)了傳統(tǒng)云存儲(chǔ)中心化安全檢索的一些問題,但大多未涉及用戶檢索權(quán)限的可控性。
在電子病歷的訪問控制研究方面,文獻(xiàn)[20] 提出了云計(jì)算環(huán)境下基于屬性的可搜索加密電子病歷系統(tǒng)。該方案可隱藏訪問結(jié)構(gòu),根據(jù)數(shù)據(jù)擁有者的請(qǐng)求增加或撤銷用戶的訪問權(quán)限,實(shí)現(xiàn)了數(shù)據(jù)擁有者對(duì)病歷的訪問控制。文獻(xiàn)[21] 提出一種云鏈協(xié)同的數(shù)據(jù)安全共享方案,利用屬性加密方案對(duì)電子病歷進(jìn)行加密,同時(shí)可以讓病人自主設(shè)置訪問策略,實(shí)現(xiàn)細(xì)粒度的訪問控制。文獻(xiàn)[22] 在聯(lián)盟區(qū)塊鏈環(huán)境下提出一種K-匿名和關(guān)鍵字可搜索加密的醫(yī)療數(shù)據(jù)共享方案,設(shè)計(jì)了基于屬性的訪問控制智能合約,雖然可以實(shí)現(xiàn)患者本人對(duì)所屬病歷的訪問控制,但是大大增加了患者端的運(yùn)行負(fù)擔(dān)。文獻(xiàn)[23] 考慮到用戶無法實(shí)際控制自己的醫(yī)療數(shù)據(jù)以及電子病歷數(shù)據(jù)共享存在安全隱患問題,提出了一種基于區(qū)塊鏈的新型電子健康系統(tǒng)。該方案在代理重加密機(jī)制中嵌入基于屬性的密碼體制,實(shí)現(xiàn)了電子病歷共享的高安全性和細(xì)粒度的訪問控制。上述研究逐漸呈現(xiàn)出以患者為中心的發(fā)展趨勢(shì),即讓患者擁有對(duì)病歷的控制權(quán),但對(duì)醫(yī)院和病患如何共同控制電子病歷訪問的研究尚少。
區(qū)塊鏈?zhǔn)且环N將分布式存儲(chǔ)、P2P 傳輸、共識(shí)機(jī)制、加密算法和智能合約等傳統(tǒng)技術(shù)結(jié)合應(yīng)用的分布式賬本技術(shù),能夠?qū)⒁粋€(gè)個(gè)區(qū)塊鏈接起來形成一個(gè)有序的記錄列表,具有分布式、防篡改、可追溯、多方維護(hù)、公開透明和強(qiáng)大的共識(shí)機(jī)制等特點(diǎn)。根據(jù)準(zhǔn)入機(jī)制可將區(qū)塊鏈分為3 種類型:公有鏈、私有鏈、聯(lián)盟鏈。聯(lián)盟鏈以節(jié)點(diǎn)授權(quán)方式設(shè)置準(zhǔn)入機(jī)制,確保數(shù)據(jù)的產(chǎn)生和使用是可控的,從而在一定程度上實(shí)現(xiàn)多準(zhǔn)入節(jié)點(diǎn)共同維護(hù)數(shù)據(jù),避免了隱私數(shù)據(jù)的泄露[24-26]。
令G和GT是q階的兩個(gè)循環(huán)群,群上的運(yùn)算分別稱為加法和乘法,令e:G×G →GT為一個(gè)雙線性映射,且滿足以下性質(zhì):
性質(zhì)1 雙線性性對(duì)于?g1,g2∈G,且a,b ∈,有=e(g1,g2)ab。
性質(zhì)2 可計(jì)算性對(duì)于任意?g1,g2∈G,存在有效算法能夠計(jì)算e(g1,g2)。
性質(zhì)3 非退化性存在g1,g2∈G,使e(g1,g2)1GT。
對(duì)于兩個(gè)q階循環(huán)群G和GT、一個(gè)雙線性映射e:G×G →GT以及從G中隨機(jī)選取的一個(gè)元素g,n-QBDH 問題是指給定一個(gè)元組∈Gn+2,并計(jì)算,其中a,b ←。n-QBDH 假設(shè)是指不存在攻擊者B可以在多項(xiàng)式時(shí)間內(nèi)以不可忽略的優(yōu)勢(shì)解決n-QBDH 問題,即不存在B使得式(1) 成立
本文構(gòu)建的DaseChain 模型框架如圖1 所示。病歷的產(chǎn)生及加密存儲(chǔ)由醫(yī)院實(shí)現(xiàn),鏈上密文索引數(shù)據(jù)的檢索權(quán)限由醫(yī)院控制,病歷的解密權(quán)限由患者授予,從而實(shí)現(xiàn)了醫(yī)院和患者對(duì)病歷訪問的共同授權(quán)。
圖1 DaseChain 模型框架Figure 1 Framework of DaseChain model
該方案涉及的實(shí)體參與者包括云端服務(wù)器CS、醫(yī)療聯(lián)盟鏈MCB、患者O、病歷請(qǐng)求者U和醫(yī)院HD,各角色具體描述如下:
1)云服務(wù)器CS 是云存儲(chǔ)服務(wù)提供者,負(fù)責(zé)存儲(chǔ)電子病歷大數(shù)據(jù)密文文件并響應(yīng)聯(lián)盟鏈節(jié)點(diǎn)用戶文件的下載請(qǐng)求。
2)醫(yī)療聯(lián)盟鏈MCB 由多家醫(yī)療機(jī)構(gòu)、醫(yī)療科研機(jī)構(gòu)以及醫(yī)療保險(xiǎn)公司等協(xié)商構(gòu)建。聯(lián)盟鏈節(jié)點(diǎn)用來存儲(chǔ)患者病歷的關(guān)鍵字索引信息和執(zhí)行關(guān)鍵字密文檢索算法,聯(lián)盟鏈的CA 認(rèn)證機(jī)構(gòu)負(fù)責(zé)生成系統(tǒng)全局公共參數(shù)并為系統(tǒng)用戶頒發(fā)數(shù)字證書。
3)醫(yī)院HD 是患者就診服務(wù)提供方。醫(yī)院的醫(yī)生為就診患者生成電子病歷,并用對(duì)稱加密算法將病歷文件加密存儲(chǔ)到云端服務(wù)器;之后提取病歷文件的關(guān)鍵詞集,利用病歷加密密鑰、關(guān)鍵詞集以及病歷摘要等構(gòu)造關(guān)鍵字密文索引信息,并存儲(chǔ)到聯(lián)盟鏈賬本中。
4)病歷請(qǐng)求者U 即訪問電子病歷的用戶,包括醫(yī)療機(jī)構(gòu)、醫(yī)療科研機(jī)構(gòu)、醫(yī)保機(jī)構(gòu)或者保險(xiǎn)公司等。當(dāng)病歷請(qǐng)求者希望獲取與某關(guān)鍵字相關(guān)的EMR 時(shí),需要獲得醫(yī)院醫(yī)生和對(duì)應(yīng)患者的許可。首先U 需要與醫(yī)療合作單位HD 進(jìn)行交互獲取鏈上檢索權(quán)限,再向聯(lián)盟鏈中發(fā)送檢索交易提案;然后聯(lián)盟鏈節(jié)點(diǎn)響應(yīng)交易提案并執(zhí)行關(guān)鍵字密文匹配算法,將檢索結(jié)果返回給U;最后U 根據(jù)檢索結(jié)果向患者本人請(qǐng)求授權(quán)。
5)患者O 即病歷文件的所有者,根據(jù)用戶U 發(fā)送的授權(quán)請(qǐng)求,決定是否同意對(duì)數(shù)據(jù)請(qǐng)求者授權(quán)。若同意授權(quán),則患者O 生成重加密密鑰對(duì)病歷關(guān)鍵字密文進(jìn)行重加密,并將重加密密文發(fā)送到聯(lián)盟鏈中;用戶U 通過聯(lián)盟鏈獲取重加密密文后可用自己的私鑰解密出文件密鑰和病歷文件的云端存儲(chǔ)地址,進(jìn)而獲取原始病歷文件。
Setup(λ)→GP 輸入一個(gè)安全參數(shù)λ,輸出一個(gè)全局公共參數(shù)GP。
KeyGen(GP)→(pko,sko,pkh,skh,pku,sku) 輸入系統(tǒng)公共參數(shù)GP,輸出患者的公私鑰對(duì)(pko,sko)、醫(yī)院的公私鑰對(duì)(pkh,skh) 和病歷請(qǐng)求者的公私鑰對(duì)(pku,sku)。
RKeyGen(sko,pku)→rko,u輸入患者的私鑰sko和病歷請(qǐng)求者的公鑰pku,輸出部分重加密密鑰rko,u。
WKeyGen(sko,W)→cko,w輸入患者的私鑰sko和關(guān)鍵字集W,輸出病歷關(guān)鍵字密鑰cko,w。
Encrypt(pko,k,W)→CT 輸入患者的公鑰pko、病歷文件密鑰k以及文件對(duì)應(yīng)的關(guān)鍵字W,輸出病歷關(guān)鍵字密文CT。
KeySearch(Wx,skh)→CT 輸入目標(biāo)檢索關(guān)鍵字Wx、醫(yī)院的私鑰skh。聯(lián)盟鏈節(jié)點(diǎn)調(diào)用該算法進(jìn)行密文關(guān)鍵字匹配,并返回滿足關(guān)鍵字條件的密文CT。
ReEncrypt(CT,rko,u,cko,w) 輸入部分重加密密鑰rko,u、病歷關(guān)鍵字密鑰cko,w和病歷關(guān)鍵字密文CT,輸出重加密密文CT′。
Decrypt1(CT,sko) 輸入密文CT 和患者私鑰sko,輸出解密成功后的病歷文件M或者解密失敗信息。
Decrypt2(CT′,sku) 輸入重加密密文CT′和病歷請(qǐng)求者的私鑰sku,輸出解密成功后的病歷文件M或者解密失敗信息。
通過攻擊者A和挑戰(zhàn)者C之間的游戲來定義本文所提出的電子病歷可控共享方案在選擇密文攻擊下的語義安全性。
3.3.1 參數(shù)設(shè)置階段
挑戰(zhàn)者C執(zhí)行Setup(λ) 算法進(jìn)行全局參數(shù)設(shè)置,并將全局參數(shù)返回給A。A發(fā)起一系列q1,···,qm詢問如下:
1)未攻破的密鑰生成詢問。C首先運(yùn)行密鑰生成算法KeyGen(GP),生成公私鑰對(duì)(ski,pki) 后將pki發(fā)送給A。
2)已攻破的密鑰生成詢問。C運(yùn)行密鑰生成算法KeyGen(GP),生成(skj,pkj)返回給A。
3)部分重加密密鑰詢問。C運(yùn)行部分重加密密鑰生成算法RKeyGen(ski,pkj),生成部分重加密密鑰rki,j返回給A。
4)關(guān)鍵字密鑰詢問。C運(yùn)行關(guān)鍵字密鑰生成算法WKenGen(ski,W),生成關(guān)鍵字密鑰cki,w后返回給A。
5)重加密詢問。C運(yùn)行重加密算法ReEncrypt(CT,rki,j,cki,w),輸入重加密密鑰rki,j‖cki,w和密文CTi,輸出重加密密文CTj發(fā)送給A。
6)解密詢問。挑戰(zhàn)者C根據(jù)獲取的私鑰和重加密密文運(yùn)行解密算法Decrypt(CT,sk),最后將解密結(jié)果返回給A,而對(duì)應(yīng)的公鑰pk 是提前根據(jù)KeyGen() 算法生成的。
3.3.2 挑戰(zhàn)階段
攻擊者A確定參數(shù)設(shè)置階段結(jié)束后,輸出一個(gè)目標(biāo)公鑰pk*和目標(biāo)關(guān)鍵字W*,之后輸出兩個(gè)長度相同的消息M0和M1;挑戰(zhàn)者C隨機(jī)選coinδ ∈{0,1},且將密文CT*=Encrypt(pk*,kδ,W*) 發(fā)送給攻擊者A。
3.3.3 猜測(cè)階段
在這個(gè)階段,A輸出δ′∈{0,1},若δ′=δ,則A贏得此游戲。
根據(jù)上述游戲定義的IND-CCA 安全性,可知敵手A贏得此游戲的概率為
基于上述安全模型,本文所提出的方案是滿足(t,qu,qc,qrk,qck,qre,qd,∈)IND-CCA 安全的。假設(shè)存在一個(gè)IND-CCA 敵手A進(jìn)行多次未攻破的密鑰生成詢問qu、多次已攻破的密鑰生成詢問qc、多次部分重加密密鑰詢問qrk、多次條件密鑰詢問qck、多次重加密詢問qre以及多次解密詢問qd后仍以可忽略的∈優(yōu)勢(shì)贏得此游戲,則說明本方案所提出的共享協(xié)議是基于IND-CCA 安全的。
DaseChain 共享流程如圖2 所示,主要包含以3 個(gè)階段:系統(tǒng)初始化、病歷加密存儲(chǔ)、病歷數(shù)據(jù)訪問。該方案涉及到的符號(hào)定義如表1 所示。
表1 方案符號(hào)定義Table 1 Notations definition of scheme
圖2 DaseChain 安全共享流程Figure 2 DaseChain sharing security process
本方案包含系統(tǒng)初始化階段、病歷加密存儲(chǔ)階段和病歷數(shù)據(jù)共享階段。
3.4.1 系統(tǒng)初始化階段
在系統(tǒng)初始化階段,CA 認(rèn)證中心首先為該系統(tǒng)生成全局公共參數(shù)GP,然后聯(lián)盟鏈中的節(jié)點(diǎn)用戶根據(jù)系統(tǒng)公共參數(shù)生成相應(yīng)的公私鑰對(duì)。該階段包含以下兩個(gè)步驟:
步驟1系統(tǒng)全局公共參數(shù)設(shè)置
CA 認(rèn)證中心輸入一個(gè)安全參數(shù)λ,生成參數(shù)集合(q,G,GT,e),q為λ比特長的大素?cái)?shù),g1是從G中隨機(jī)選取的一個(gè)元素,l0和l1是定義的兩個(gè)安全參數(shù)。5 個(gè)哈希函數(shù)分別為H1:{0,1}*→,H2:GT→,H3:×G×G×G×→G,H4:GT→,H5:{0,1}*→G。待加密信息的消息空間為。最后本系統(tǒng)的全局公共參數(shù)為GP={(q,G,GT,e),g,g1,H1,H2,H3,H4,H5}。
步驟2密鑰對(duì)產(chǎn)生
3.4.2 病歷加密存儲(chǔ)階段
在病歷加密存儲(chǔ)階段,醫(yī)院HD 將不同類型病歷數(shù)據(jù)分別加密存儲(chǔ)在云端服務(wù)器和聯(lián)盟鏈中。其中,將原始病歷大文件加密存儲(chǔ)到云端,將文件密鑰密文、病歷的哈希值、病歷關(guān)鍵字及文件云端存儲(chǔ)地址等生成病歷關(guān)鍵字密文索引存儲(chǔ)到聯(lián)盟鏈賬本中。具體執(zhí)行步驟如下:
步驟1病歷密文鏈下存儲(chǔ)
醫(yī)生為患者O 就診后生成電子病歷M ∈{0,1}*,并提取病歷關(guān)鍵字集為W ∈{0,1}*;然后醫(yī)生用AES 加密算法生成一次性文件密鑰k對(duì)M進(jìn)行加密,生成病歷密文LM=AESk(M) 存儲(chǔ)到云端服務(wù)器CS;最后CS 將存儲(chǔ)地址FM返回給醫(yī)院HD。
步驟2病歷關(guān)鍵字索引上鏈
醫(yī)院醫(yī)生HD 執(zhí)行病歷關(guān)鍵字密文生成算法,如算法1 所示。首先根據(jù)條件關(guān)鍵字W、文件密鑰k、病歷文件在CS 端存儲(chǔ)地址FM生成密文CTo,h;然后按照所設(shè)計(jì)的區(qū)塊交易單的數(shù)據(jù)結(jié)構(gòu),將CTo,h、H(M)和患者的偽身份標(biāo)識(shí)IDo生成索引數(shù)據(jù)包δh=H(M)‖CTo,h‖IDo發(fā)送到區(qū)塊鏈節(jié)點(diǎn)中,在節(jié)點(diǎn)驗(yàn)證達(dá)成共識(shí)后存儲(chǔ)到分布式區(qū)塊鏈賬本中。
算法1病歷關(guān)鍵字密文生成
3.4.3 病歷數(shù)據(jù)共享階段
此階段為病歷數(shù)據(jù)共享的關(guān)鍵階段,包括病歷檢索請(qǐng)求、病歷授權(quán)請(qǐng)求和病歷解密3 個(gè)步驟。
步驟1病歷檢索請(qǐng)求
數(shù)據(jù)請(qǐng)求者U 訪問EMR 時(shí),需要獲得醫(yī)院和患者雙方許可才可共享病歷數(shù)據(jù)。U 首先將所需病歷的關(guān)鍵字W′發(fā)送給醫(yī)院HD,請(qǐng)求共享HD 機(jī)構(gòu)內(nèi)部與W′相關(guān)的患者病歷數(shù)據(jù)。若HD 同意共享數(shù)據(jù),則根據(jù)自己的私鑰xh和關(guān)鍵字W′生成哈希值H1(W′,) 發(fā)送給U。U 獲取到檢索權(quán)限后,根據(jù)H1(W′,) 生成檢索請(qǐng)求交易提案發(fā)送到聯(lián)盟鏈MCB中;MCB 節(jié)點(diǎn)執(zhí)行如算法2 所示的鏈上關(guān)鍵字密文檢索算法,并根據(jù)等式e(Qo,Ts)=e(B,E)對(duì)密文關(guān)鍵字W′進(jìn)行匹配。
算法2鏈上關(guān)鍵字密文檢索
步驟2病歷授權(quán)請(qǐng)求
用戶U 收到病歷數(shù)據(jù)請(qǐng)求階段反饋的檢索信息后,根據(jù)患者的偽身份信息IDo向?qū)?yīng)用戶O 請(qǐng)求授權(quán)。若患者O 同意授權(quán),則執(zhí)行如算法3 所示的關(guān)鍵字密文重加密算法。該算法根據(jù)用戶O 的私鑰sko、病歷請(qǐng)求者U 的公鑰信息Qu和關(guān)鍵字W′生成重加密密鑰rk=rko,u‖cko,w對(duì)密文CTo,h進(jìn)行重加密,利用生成的重加密密文CTu構(gòu)造授權(quán)交易提案發(fā)送到MCB 節(jié)點(diǎn)中。聯(lián)盟鏈節(jié)點(diǎn)驗(yàn)證通過后,將授權(quán)信息保存到分布式賬本中。
算法3關(guān)鍵字密文重加密
實(shí)際運(yùn)算后的重加密密文CTu=(B′,D′) 形式如下:
步驟3病歷解密
當(dāng)患者O為病歷請(qǐng)求者U 授權(quán)后,U 可通過聯(lián)盟鏈獲取重加密密文CTu=(B′,D′),并執(zhí)行如算法4 所示的關(guān)鍵字密文解密算法,解密CTu獲取文件密鑰k。
算法4關(guān)鍵字密文解密
在算法4 中,用戶U 以自己的私鑰sku計(jì)算D′⊕H2=k‖r′‖F(xiàn)M,根據(jù)r′驗(yàn)證等式==B′是否成立。若等式成立,則說明病歷文件密鑰k是有效的。最后,用戶U 根據(jù)解密出的云端存儲(chǔ)地址FM下載病歷密文LM=AESk(M),利用文件密鑰k解密LM即可獲取包含關(guān)鍵字集W′=W的原始病歷M。
病歷文件解密密鑰k的正確性驗(yàn)證公式如下:
本方案采用了加密算法和雜湊算法,可以滿足病歷數(shù)據(jù)的機(jī)密性和完整性等基本安全需求。接下來重點(diǎn)討論DaseChain 如何實(shí)現(xiàn)病歷數(shù)據(jù)的安全檢索和病歷數(shù)據(jù)的訪問控制。
4.1.1 病歷數(shù)據(jù)的安全檢索
在病歷檢索階段,鏈上關(guān)鍵字密文檢索算法WIndex 輸入的是醫(yī)院為用戶U 生成的摘要值H1(W′,),因此聯(lián)盟鏈中其他節(jié)點(diǎn)無法得知檢索關(guān)鍵字W′的真實(shí)信息,也就無法得知數(shù)據(jù)請(qǐng)求者想要獲取的真實(shí)病歷數(shù)據(jù)信息,從而保證了患者病歷數(shù)據(jù)的隱私。
4.1.2 病歷數(shù)據(jù)的訪問控制
在生成病歷關(guān)鍵字密文CTo,h=(A,B,D,E) 時(shí),E的產(chǎn)生與醫(yī)院HD 的私鑰相關(guān)。在HD 許可的情況下,醫(yī)生為用戶U 生成鏈上關(guān)鍵字檢索條件H1(W′,Axh);用戶U 一旦獲取到此哈希值H1(W′,) 即擁有了檢索權(quán)限。因此,該方法既可以保證鏈上密文檢索的可控性,又能防止非法用戶的惡意檢索。用戶U 在獲取檢索權(quán)限的前提下,仍然需要向患者O 本人請(qǐng)求獲取病歷的解密權(quán)限。O 同意后生成授權(quán)交易提案發(fā)送到聯(lián)盟鏈中,用戶U 可通過聯(lián)盟鏈獲取授權(quán)交易信息,之后才有權(quán)限解密出原始病歷文件。因此,本方案能夠?qū)崿F(xiàn)醫(yī)院和患者對(duì)病歷的雙重可控共享。
定理1當(dāng)3-QBDH 困難問題的安全假設(shè)在(G,GT) 上成立時(shí),本文算法在隨機(jī)預(yù)言機(jī)下是IND-CCA 安全的。
推理1如果存在一個(gè)敵手A,在隨機(jī)預(yù)言機(jī)下,針對(duì)每個(gè)哈希Hi,i ∈{1,2,···,5},系統(tǒng)建立次哈希詢問來攻破(t,qu,qc,qrk,qck,qre,qd,∈) IND-CCA 安全協(xié)議,那么可以利用A構(gòu)造一個(gè)算法B在t′時(shí)間內(nèi)以∈′優(yōu)勢(shì)解決3-QBDH 困難問題。
證明假定B的輸入是一個(gè)3-QBDH 挑戰(zhàn)元組I=(g,g1/a,ga,,gb),a和b是從中隨機(jī)選取的。算法B計(jì)算后,從中隨機(jī)選取參數(shù)u并定義g1=,再將(g,g1) 發(fā)送給攻擊者A。
4.2.1 參數(shù)設(shè)置階段
4.2.1.1 哈希詢問
敵手A對(duì)隨機(jī)預(yù)言機(jī)Hi進(jìn)行多次哈希詢問,其中i ∈{1,2,···,5}。5 類哈希詢問完成后,B擁有5 個(gè)哈希列表,i ∈{1,2,···,5}。當(dāng)收到詢問qi,j(qi,j為第i個(gè)哈希函數(shù)的第j次詢問)時(shí),查詢qi,j是否在哈希列表中出現(xiàn)。若存在,則將對(duì)應(yīng)的詢問值返回給A;若不存在,則從哈希函數(shù)的值域中隨機(jī)選取一個(gè)值αi,j,將(qi,j,αi,j) 添加到哈希列表中,并將αi,j值返回給A。
4.2.1.2B響應(yīng)A的詢問
B執(zhí)行以下6 種詢問對(duì)敵手A發(fā)來的信息做出響應(yīng)。
2)已攻破的密鑰生成詢問B從中隨機(jī)選取xj,定義pkj=(Pj,Qj)=,coinj=‘-’,之后將元組(pkj,xj,coinj) 添加到Klist列表中,并將(pkj,xj) 發(fā)送給A。
6)解密詢問B解析pki,pki=(Pi,Qi),從Klist列表中獲取元組(pki,xi,coini),若coini=‘-’,意味著ski=xi,則B用xi解密密文發(fā)送給敵手A,否則執(zhí)行如下步驟:
步驟1利用公鑰pk′重加密密文CTj=(B′,D′),首先保證pkipk′。
步驟3若步驟2 中的目標(biāo)元組存在,則判斷等式W=W′、=B′、β⊕(k‖r′‖F(xiàn)M)=D′、U=e(g1,g1)1/r是否成立。若成立,則將k,FM返回給A,否則返回⊥。
4.2.2 挑戰(zhàn)階段
4.2.3 猜測(cè)階段
敵手A輸出δ′的猜測(cè)返回給挑戰(zhàn)者B,然后B從中隨機(jī)選取一個(gè)元組(U,β),輸出U1/y*作為所給出的3-QBDH 實(shí)例的解決方案。
B解決3-QBDH 困難問題假設(shè)的優(yōu)勢(shì)為
若存在IND-CCA 敵手A能以∈優(yōu)勢(shì)攻破上述游戲,則存在B至少能以∈′的優(yōu)勢(shì)解決3-QBDH 困難問題,與假設(shè)相矛盾。
比較表2 的結(jié)果可以看出,本方案DaseChain 與相關(guān)對(duì)比文獻(xiàn)都實(shí)現(xiàn)了數(shù)據(jù)共享。文獻(xiàn)[10,15,18] 未采用許可聯(lián)盟鏈架構(gòu),文獻(xiàn)[10,18] 雖然以云鏈結(jié)合的存儲(chǔ)方式提高了數(shù)據(jù)的共享效率,但是未實(shí)現(xiàn)加密數(shù)據(jù)的檢索,不夠貼近實(shí)際的應(yīng)用場(chǎng)景需求。文獻(xiàn)[17] 采用私有鏈和聯(lián)盟鏈的方式存儲(chǔ)數(shù)據(jù),導(dǎo)致系統(tǒng)存儲(chǔ)開銷方面性能較差。本方案基于聯(lián)盟鏈和云存儲(chǔ)架構(gòu),在確保密文數(shù)據(jù)安全檢索的基礎(chǔ)上實(shí)現(xiàn)了醫(yī)院和患者對(duì)病歷數(shù)據(jù)的共同授權(quán),同時(shí)增強(qiáng)了患者對(duì)自身病歷數(shù)據(jù)的訪問控制。
表2 不同方案工作對(duì)比Table 2 Comparison of diffierent scheme works
本方案基于Hyperledger Fabric v1.4.3 平臺(tái),在Raft 排序服務(wù)模式下部署了1 個(gè)多機(jī)聯(lián)盟鏈網(wǎng)絡(luò)。此網(wǎng)絡(luò)架構(gòu)包含3 個(gè)排序節(jié)點(diǎn)Orderer 和3 個(gè)組織HOrg1、POrg2、UOrg3,每個(gè)組織下包含2 個(gè)對(duì)等節(jié)點(diǎn)Peer 和1 個(gè)證書節(jié)點(diǎn)CA。各節(jié)點(diǎn)配置環(huán)境均為Intel?CoreTMi7-8700 CPU@3.20 GHz,16 GB 內(nèi)存,運(yùn)行在Window10 和Ubuntu16.04 操作系統(tǒng)上。分別以SHA-256 和AES-256 作為哈希函數(shù)和對(duì)稱加密方案,用C++語言為密碼算法編程,并調(diào)用PBC 庫和OpenSSL 庫對(duì)本方案算法進(jìn)行實(shí)驗(yàn)測(cè)試。本次實(shí)驗(yàn)共使用7 臺(tái)宿主機(jī),其中1臺(tái)模擬醫(yī)院客戶端,1 臺(tái)模擬患者客戶端,1 臺(tái)模擬云存儲(chǔ)服務(wù)端,1 臺(tái)模擬數(shù)據(jù)請(qǐng)求者客戶端,3 臺(tái)作為區(qū)塊鏈網(wǎng)絡(luò)平臺(tái)。該實(shí)驗(yàn)拓?fù)鋱D如圖3 所示。
圖3 DaseChain 網(wǎng)絡(luò)拓?fù)銯igure 3 DaseChain network topology
對(duì)比相關(guān)方案與本方案在4 個(gè)階段的計(jì)算代價(jià)如表3 所示,其中h表示哈希函數(shù)運(yùn)算,p表示雙線性對(duì)運(yùn)算,e表示指數(shù)運(yùn)算。
表3 不同方案的計(jì)算代價(jià)Table 3 Computational overhead among diffierent schemes
圖4 顯示了不同方案在加密、陷門檢索、重加密和解密這4 個(gè)階段的計(jì)算開銷,分別用Encrypt、Search、ReEncrypt 和Decrypt 表示。從表3 和圖4 中可以看出:本方案在加密階段耗費(fèi)的總時(shí)間比其他方案略高,但因?yàn)榧用懿僮饔捎?jì)算能力強(qiáng)的醫(yī)院服務(wù)器端承擔(dān),所以在可接受范圍內(nèi)。檢索和重加密算法的平均耗時(shí)與其他方案的平均耗時(shí)相差不大。
圖4 不同方案不同階段計(jì)算開銷對(duì)比Figure 4 Comparison of calculation cost in diffierent phases of diffierent schemes
本文基于可搜索代理重加密機(jī)制,在聯(lián)盟鏈環(huán)境下提出了一種支持關(guān)鍵字密文檢索的電子病歷雙重授權(quán)共享方案——DaseChain。設(shè)計(jì)云鏈結(jié)合的EMR 安全共享模型,實(shí)現(xiàn)了電子病歷大數(shù)據(jù)的安全存儲(chǔ)和高效共享;利用分布式存儲(chǔ)條件下構(gòu)建的關(guān)鍵字密文檢索方法,將病歷關(guān)鍵字和文件密鑰等信息構(gòu)造密文索引存儲(chǔ)到聯(lián)盟鏈上,在用戶從醫(yī)院方獲取檢索權(quán)限的前提下,憑借區(qū)塊鏈分布式賬本各節(jié)點(diǎn)數(shù)據(jù)能同步更新且存儲(chǔ)內(nèi)容一致的特性,保證了醫(yī)療聯(lián)盟鏈節(jié)點(diǎn)對(duì)密文數(shù)據(jù)的安全及時(shí)檢索;基于所提出的EMR 鏈上授權(quán)方法實(shí)現(xiàn)了患者對(duì)所屬病歷較細(xì)粒度的訪問控制,同時(shí)也實(shí)現(xiàn)了醫(yī)院和患者對(duì)共享病歷的共同管控;在隨機(jī)預(yù)言機(jī)模型下證明了本方案在n-QBDH 下的語義安全性,以及在性能方面的總體計(jì)算開銷相對(duì)較低。