張樂君 劉智棟 謝 國 薛 霄
云輔助電子病歷(Electronic health record,EHR) 系統(tǒng)的廣泛部署顯示出在管理醫(yī)療機(jī)構(gòu)和EHR 方面的巨大好處[1],世界各地紛紛采用新技術(shù)來管理EHR.然而除了巨大的優(yōu)勢之外,EHR 在云上的存儲還面臨著安全問題[2-3]:1)未經(jīng)患者授權(quán)的第三方可能會惡意訪問EHR,這對于EHR共享中數(shù)據(jù)的完整性、隱私性和安全性存在不利影響[4].2)患者很難跟蹤和管理存儲在云中的EHR.
針對這些問題,許多研究[5-8]提出了用于云服務(wù)器的存儲、管理和共享技術(shù).這些研究使用不同的密碼學(xué)技術(shù)和云技術(shù)設(shè)計(jì)EHR 共享訪問控制模型以實(shí)現(xiàn)隱私保護(hù)和訪問控制.盡管這些研究高度重視數(shù)據(jù)安全和隱私保護(hù),但系統(tǒng)仍然存在患者密鑰管理困難、EHR 共享透明度不高以及密鑰存在泄露風(fēng)險(xiǎn)等問題.
隨著區(qū)塊鏈技術(shù)的發(fā)展,其特有的去中心化、可追溯性和隱私性推動了信息互聯(lián)網(wǎng)向價(jià)值互聯(lián)網(wǎng)的轉(zhuǎn)變[9].越來越多的學(xué)者開始研究基于區(qū)塊鏈的EHR 共享模型.MedRec[10]是一種使用區(qū)塊鏈技術(shù)處理EHR 的新型的、分布式的管理系統(tǒng).MedRec將模塊化設(shè)計(jì)與醫(yī)療提供商現(xiàn)有的本地?cái)?shù)據(jù)存儲解決方案集成在一起.薛騰飛等[11]提出基于改進(jìn)的DPOS(Delegated proof of stake)共識的區(qū)塊鏈醫(yī)療共享模型,詳細(xì)介紹了模型的組件以及實(shí)現(xiàn)原理.基于以太坊區(qū)塊鏈的Ancile[12]利用智能合約增強(qiáng)訪問控制和數(shù)據(jù)混淆.文中詳細(xì)描述了患者、EHR 提供商和第三方之間的交互過程.MedChain[13]與 Ancile 類似,通過精心設(shè)計(jì)智能合約實(shí)現(xiàn)訪問控制,同時,MedChain 加入了激勵機(jī)制,給出了計(jì)算EHR質(zhì)量的方法.張超等[14]提出基于PBFT (Practical Byzantine fault tolerance)的聯(lián)盟式醫(yī)療區(qū)塊鏈系統(tǒng),具有較好的適用性.文獻(xiàn)[10-14]為現(xiàn)有分散在各個機(jī)構(gòu)的醫(yī)療數(shù)據(jù)提供基于區(qū)塊鏈的訪問控制模型,但分散在各個醫(yī)療服務(wù)商手中的數(shù)據(jù)仍然存在被破壞的風(fēng)險(xiǎn).
另一部分研究人員將云服務(wù)和區(qū)塊鏈技術(shù)相結(jié)合來實(shí)現(xiàn)EHR 的共享.Xia 等[15]提出BBDS(Blockchain-based data sharing)模型,該模型利用用戶的身份和成員加密密鑰來驗(yàn)證用戶是否可以從共享池中獲取數(shù)據(jù).但是,對于成功加入共享組的成員沒有其他限制.Tang 等[16]著重研究了基于區(qū)塊鏈的云存儲模式下EHR 共享的身份驗(yàn)證問題,提出了多方授權(quán)的身份簽名模型,并具有很好的抗共謀能力.Liu 等[17]設(shè)計(jì)了基于CP-ABE (Ciphertext-policy attribute based encryption)的訪問控制機(jī)制和內(nèi)容提取簽名模型,在數(shù)據(jù)共享方面提供了強(qiáng)大的隱私保護(hù).此外,通過在智能合約中預(yù)設(shè)訪問權(quán)限確保數(shù)據(jù)被安全共享.文獻(xiàn)[15-17]采用云服務(wù)和區(qū)塊鏈技術(shù)相結(jié)合的新模式,但它們的訪問控制策略較單一,無法滿足患者對EHR 動態(tài)訪問控制的需求.
現(xiàn)有的EHR 共享研究中缺乏信用度評估機(jī)制,本文采用云服務(wù)和區(qū)塊鏈技術(shù)相結(jié)合的模式,在區(qū)塊鏈智能合約中加入用戶信用度評估機(jī)制,為患者提供動態(tài)可調(diào)節(jié)的訪問控制策略.本文的主要貢獻(xiàn)有以下幾個方面:
1) 提出了一種信用度評估機(jī)制,將信用度評估機(jī)制集成到智能合約訪問控制中,在患者缺乏對第三方信任的環(huán)境中為患者提供信用度參考.通過智能合約,患者可以動態(tài)地調(diào)節(jié)訪問控制策略.
2) 提出將云存儲和基于權(quán)威證明(Proof of authority,PoA)共識機(jī)制的區(qū)塊鏈相結(jié)合的框架.云存儲用于存儲加密的EHR,PoA 共識區(qū)塊鏈保留加密EHR 的索引.我們對交易處理速度進(jìn)行了統(tǒng)計(jì)分析,證明了所提模型的可行性.
3) 基于以太坊Go Ethereum 開發(fā)了所提模型的系統(tǒng),建立了一個私有鏈測試網(wǎng)絡(luò).我們分析了系統(tǒng)中可能存在的惡意攻擊和共謀行為,并建立了基于信用度的獎懲機(jī)制和監(jiān)督機(jī)制.實(shí)驗(yàn)結(jié)果表明我們的機(jī)制能有效阻止惡意攻擊行為并及時發(fā)現(xiàn)共謀行為.最后,理論分析表明,我們的模型較現(xiàn)有一些通過智能合約實(shí)現(xiàn)EHR 訪問控制的模型更簡單,交易反饋延時更少.
本節(jié)將介紹本文用到的智能合約技術(shù)和密碼學(xué)技術(shù).
智能合約是存儲在區(qū)塊鏈上自動運(yùn)行的腳本.1994 年Nick Szabo 提出相關(guān)概念,將智能合約定義為一種通過代碼程序自動執(zhí)行的交易協(xié)議.滿足合約條款的交易相關(guān)者,無需第三方管理者的監(jiān)督就可自動執(zhí)行交易.由于缺乏可支撐合約自動執(zhí)行的平臺和相關(guān)技術(shù),直到區(qū)塊鏈技術(shù)的出現(xiàn),才使得智能合約這項(xiàng)技術(shù)得到應(yīng)用.隨著區(qū)塊鏈的不斷發(fā)展,以太坊的出現(xiàn)[18]首次將區(qū)塊鏈和智能合約結(jié)合,通過以太坊虛擬機(jī)(Ethereum virtual machine,EVM)來處理區(qū)塊鏈上的交易.區(qū)塊鏈確保了智能合約的用戶在可信的環(huán)境下遵循合約規(guī)則自動執(zhí)行合約代碼,同時利用區(qū)塊鏈的透明性和可追溯性,跟蹤合約狀態(tài).智能合約的可擴(kuò)展性、自動化為EHR共享提供了便利.利用區(qū)塊鏈中存儲的醫(yī)療數(shù)據(jù)、支持外部數(shù)據(jù)的預(yù)言機(jī)[19]以及信用度機(jī)制,患者可以在智能合約中設(shè)置信用度閾值和其他訪問控制參數(shù),實(shí)現(xiàn)復(fù)雜的訪問控制策略.
智能合約預(yù)言機(jī)機(jī)制[19]驗(yàn)證外部數(shù)據(jù).在智能合約中使用合約自帶的函數(shù)ecrecover 可以驗(yàn)證外部數(shù)據(jù)寫入者的簽名,該函數(shù)需要數(shù)據(jù)的Hash 值和簽名對{v,r,s}.所以對數(shù)據(jù)的簽名需要遵循ecrecover 函數(shù)的規(guī)則.實(shí)際上,數(shù)據(jù)需要經(jīng)過兩次sha256的Hash 操作后才能進(jìn)行簽名,簽名結(jié)果中32 字節(jié)的r和s來自橢圓曲線數(shù)字簽名算法(Elliptic curve digital signature algorithm,ECDSA)的輸出值,一個字節(jié)的v則是用于恢復(fù)簽名結(jié)果的標(biāo)識,以太坊中為27 或28.
在智能合約中,數(shù)據(jù)主要分為Storage 和Memory兩種類型,Storage 類型數(shù)據(jù)也可稱為合約的狀態(tài)變量,會永久存儲在區(qū)塊鏈中;Memory 則是臨時變量,交易處理完成后該類型變量會被清空.所以在編寫合約時,需要為永久存儲的數(shù)據(jù)定義Storage 類型變量,而不僅僅是處理交易邏輯.
本節(jié)設(shè)計(jì)了一種基于智能合約的電子病歷共享訪問控制模型(EHR smart contract access control model),為方便描述,將其簡稱為EHR-SCAC.下面分別從模型的整體框架和工作流程進(jìn)行介紹.
如圖1 所示,EHR-SCAC 分為三層架構(gòu),由數(shù)據(jù)獲取層、數(shù)據(jù)存儲層和數(shù)據(jù)共享層組成.
圖1 EHR-SCAC 整體架構(gòu)Fig.1 EHR-SCAC overall framework
2.1.1 數(shù)據(jù)獲取層
在本層中,EHR 由醫(yī)生創(chuàng)建并發(fā)送給醫(yī)院,醫(yī)院整理格式后,由醫(yī)生簽名發(fā)送給患者.簽名的目的是確保 EHR 的完整性.EHR 的共享權(quán)和所有權(quán)屬于患者.同時,機(jī)構(gòu)在研究患者 EHR 時,可能發(fā)現(xiàn)EHR 存在誤診,所以機(jī)構(gòu)可以共享他們的研究報(bào)告.
2.1.2 數(shù)據(jù)存儲層
數(shù)據(jù)存儲層的主要功能是存儲加密的EHR 和給區(qū)塊鏈提供EHR 的存儲索引url,數(shù)據(jù)存儲層由以下兩部分組成.
1) 云存儲.存儲患者加密的EHR,給出EHR的存儲索引url.
2) PoA 區(qū)塊鏈.存儲EHR 的索引url并實(shí)現(xiàn)EHR 共享.患者通過區(qū)塊鏈中智能合約預(yù)先定義訪問控制策略,確保EHR 的安全共享,任何人對EHR的訪問都將保存在區(qū)塊鏈網(wǎng)絡(luò)中.同時,身份管理中心 (Identity management center,IDM)和審計(jì)節(jié)點(diǎn)充當(dāng)了鏈外數(shù)據(jù)進(jìn)入?yún)^(qū)塊鏈的媒介,起到身份認(rèn)證、審計(jì)和監(jiān)督的作用.
2.1.3 數(shù)據(jù)共享層
在本層中,已身份認(rèn)證過的醫(yī)療工作者、機(jī)構(gòu)可以訪問患者的EHR.方便醫(yī)生了解患者的病歷史和給予患者更好的治療,同時也為醫(yī)療機(jī)構(gòu)提供了重要的研究資料.
如圖1 所示,模型的工作流程大致如下:
① 用戶身份登記:用戶將真實(shí)身份ID和身份證明VID發(fā)送給IDM,IDM 驗(yàn)證用戶身份.同時,IDM 會調(diào)用智能合約對用戶進(jìn)行成員登記,用戶以太坊公鑰pk即為成員公鑰.將必要的用戶信息存儲在區(qū)塊鏈中.如果用戶是機(jī)構(gòu),則機(jī)構(gòu)會成為審計(jì)節(jié)點(diǎn).
② 身份認(rèn)證后的患者,可以調(diào)用智能合約設(shè)置EHR 的全局訪問控制策略.
③ EHR 的生成:該過程參與的實(shí)體有醫(yī)生、醫(yī)院和患者.為了確保EHR 的完整性,在醫(yī)院將EHR發(fā)給患者前,醫(yī)生需要對EHR 的Hash 值ehr_hash使用以太坊私鑰進(jìn)行簽名,記為sigd.如果EHR 存在問題,則醫(yī)療糾紛的責(zé)任最終由醫(yī)生承擔(dān),這也符合實(shí)際情況.醫(yī)院將EHR、醫(yī)生的簽名sigd發(fā)給患者.
④ 患者從醫(yī)院獲取到EHR 和sigd后,患者的本地客戶端隨機(jī)生成一個對稱密鑰smk加密EHR,得到[EHR]smk.
⑤ 患者將[EHR]smk和ehr_hash上傳到云端,云端返回EHR 的存儲索引url.
⑥ 患者使用以太坊公鑰pkp加密smk獲得,然后調(diào)用智能合約的共享EHR 接口函數(shù),將EHR 的索引等信息存入?yún)^(qū)塊鏈.智能合約檢測患者的身份注冊信息,驗(yàn)證通過后合約會記錄url與患者以太坊公鑰pkp的對應(yīng)關(guān)系,將必要的數(shù)據(jù)存儲到合約相關(guān)的變量中.同時,合約會為該EHR初始化一個白名單并將患者加入其中.隨后,患者便可調(diào)用合約給白名單添加成員,方便非機(jī)構(gòu)用戶如醫(yī)生的訪問.
⑦ 機(jī)構(gòu)在研究EHR 時可能發(fā)現(xiàn)患者的EHR存在誤診,機(jī)構(gòu)可以更正EHR,將研究報(bào)告證明發(fā)布到云端.云端返回研究報(bào)告的索引r_url.機(jī)構(gòu)調(diào)用智能合約共享研究報(bào)告r_url.與預(yù)言機(jī)機(jī)制相同,合約會觸發(fā)投票事件通知審計(jì)節(jié)點(diǎn)根據(jù)研究報(bào)告索引在鏈下對報(bào)告進(jìn)行審核.審計(jì)節(jié)點(diǎn)會調(diào)用智能合約改變研究報(bào)告投票狀態(tài)變量.當(dāng)投票數(shù)超過設(shè)定的閾值,機(jī)構(gòu)便成功共享研究報(bào)告,這有利于機(jī)構(gòu)信用度的增加.同時,機(jī)構(gòu)鏈下通知IDM,IDM聯(lián)系患者重新共享更正后的EHR.該過程患者重復(fù)②③④操作,EHR 的醫(yī)療糾紛也由原先的醫(yī)生負(fù)責(zé)變?yōu)闄C(jī)構(gòu)負(fù)責(zé),且需要將更正后的EHR 的索引記錄到錯誤EHR 記錄的結(jié)構(gòu)體變量中.
⑧ 如⑥中所述,若請求者在EHR 的白名單中,則可以直接查詢到解密密鑰.否則,請求者需要調(diào)用智能合約獲取EHR 的請求權(quán)限,智能合約會觸發(fā)事件隨機(jī)選擇一個審計(jì)節(jié)點(diǎn)對請求者發(fā)起工作量證明 (Proof of work,PoW)難度挑戰(zhàn)(第2.3.2 節(jié)中將詳細(xì)介紹).完成PoW 挑戰(zhàn)后,請求者獲得審計(jì)節(jié)點(diǎn)的簽名sigA,然后請求者再次調(diào)用智能合約請求EHR 的解密密鑰.智能合約根據(jù)患者制定的訪問控制策略驗(yàn)證請求者.通過訪問控制策略后,請求者會被加入患者EHR 的白名單中,同時合約觸發(fā)代理重加密事件,IDM 通知患者生成重加密密鑰[K]p-r并發(fā)送給云端,云端執(zhí)行代理重加密任務(wù),生成并發(fā)給請求者,請求者可以調(diào)用智能合約將解密密鑰存入智能合約中.
本節(jié)提出一種信用度評估方法,同時設(shè)計(jì)信用度獎懲機(jī)制和監(jiān)督機(jī)制用來維護(hù)系統(tǒng)的穩(wěn)定和安全.
2.3.1 EHR-SCAC 信用度評估
機(jī)構(gòu)的信用度并不能從單一特性進(jìn)行評判,本文采用模糊層次分析法(Fuzzy analytic hierarchy process,F(xiàn)AHP)[20-21]對用戶的信用度進(jìn)行評判.先將用戶的信用度分為n個特性,再把每個特性分為若干個特征類型,將模糊的用戶行為信用評估問題轉(zhuǎn)化為簡單的、明確的信用特征加權(quán)求和問題.
FAHP 解決問題的步驟分為4 步:1) 分析問題,將問題劃分為多層次結(jié)構(gòu);2)以上一級要素為準(zhǔn),將同一層次的特征兩兩比較,獲得初始判斷矩陣;3)將初始判斷矩陣轉(zhuǎn)換為模糊判斷一致矩陣,通過計(jì)算確定各特征以及各特性的權(quán)重;4)根據(jù)規(guī)范化的特征值和權(quán)重計(jì)算出信用度.
步驟 1.如圖2 所示,將信用度分為3 層.為了不給區(qū)塊鏈造成負(fù)擔(dān),需要建立易檢測、易收集的用戶行為特征方案.在處理合約交易時會更新機(jī)構(gòu)的這些行為特征(在第2.4 節(jié)中將作詳細(xì)說明).
圖2 用戶行為特征分類Fig.2 Classification of user behavior characteristics
步驟 2.建立行為特征矩陣C=[cij]n×m,n為特性個數(shù),m為特性中行為特征個數(shù)的最大值,不足的項(xiàng)用零表示.由于各特征的值區(qū)別較大,我們需要對矩陣C進(jìn)行歸一化處理,將值規(guī)范為[0,1]的特征矩陣E=[eij]n×m. 將同一特性下的特征的重要性兩兩比較獲得初始判斷矩陣EQ=[eqij]v×v,v是某個特性下行為特征的個數(shù),如服務(wù)特性P下v=5.
以服務(wù)特性為例,其特征矩陣Ep=[e1,e2,···,ev],利用式(1)獲得初始判斷矩陣EQ.
然后,通過式(2)將初始判斷矩陣轉(zhuǎn)化為模糊判斷一致矩陣Q=[qij]v×v.
步驟 3.使用式(3)計(jì)算服務(wù)特性下各特征的權(quán)重向量
從而得到wP=[wp1,wp2,wp3,wp4,wp5].對于其他特性,同樣利用式(1)~ (3)可得可靠特性R的特征權(quán)重向量wR=[wr1,wr2],安全特性S的特征權(quán)重向量wS=[ws1,ws2],以及特性權(quán)重向量wF=[wf1,wf2,wf3].
步驟 4.根據(jù)式(4)計(jì)算機(jī)構(gòu)的信用度.
即正面信用度為正面行為特征與其權(quán)重乘積的和,負(fù)面信用度為負(fù)面行為特征與其權(quán)重乘積的和.但是,對于圖2 中s1 和s2 這類違規(guī)行為的計(jì)算需要進(jìn)行改進(jìn).對這兩個行為目的是監(jiān)督,同時考慮到機(jī)構(gòu)的誤操作會導(dǎo)致此類事件發(fā)生,所以機(jī)構(gòu)如果存在s1 和s2 違規(guī)時,系統(tǒng)應(yīng)能及時對機(jī)構(gòu)的信用度進(jìn)行懲罰,并且機(jī)構(gòu)的信用度隨時間流逝能夠逐漸恢復(fù).所以,eij為s1 和s2 時,這兩個行為特征的計(jì)算需乘以一個系數(shù)ε,ε如式(6)所示.nij表示機(jī)構(gòu)做出負(fù)面行為特征eij的次數(shù).bn表示當(dāng)前區(qū)塊號,bnij表示負(fù)面行為特征eij最后一次發(fā)生時所在的區(qū)塊號.
2.3.2 信用度獎懲機(jī)制
比特幣和以太坊采用PoW 共識機(jī)制來維護(hù)區(qū)塊鏈的安全,使得惡意節(jié)點(diǎn)很難成功攻擊區(qū)塊鏈,除非惡意節(jié)點(diǎn)掌握了全網(wǎng)51%的算力.雖然PoW機(jī)制對于交易驗(yàn)證速度要求極高的場景應(yīng)用十分有限,但其思想值得學(xué)習(xí)[22].
第2.3.1 節(jié)給出了計(jì)算信用度的方法.從第2.3.1節(jié)中的圖2 可以看到兩種惡意行為,在介紹信用度獎懲機(jī)制前首先了解兩種惡意行為.
1)未經(jīng)授權(quán)訪問行為
機(jī)構(gòu)請求EHR 時,url對應(yīng)的患者pkp可能會被未通過患者訪問控制策略的機(jī)構(gòu)替換,選擇訪問控制策略要求低的患者,從而繞過EHR 持有者的訪問控制策略.與前面類似,未通過患者訪問控制策略的機(jī)構(gòu)利用其他高信用度節(jié)點(diǎn)的成員公鑰pk來發(fā)送合約交易,以此達(dá)到訪問患者EHR 的目的.
2)偽造簽名行為
機(jī)構(gòu)請求EHR 的解密密鑰前需要獲取審計(jì)節(jié)點(diǎn)的簽名sigA,所以機(jī)構(gòu)可能偽造簽名直接申請解密密鑰.
在我們的系統(tǒng)中,患者共享EHR 時,智能合約會記錄url與患者的成員公鑰pk的關(guān)系.IDM 在用戶通過系統(tǒng)身份認(rèn)證后調(diào)用智能合約將以太坊地址和成員公鑰pk的對應(yīng)關(guān)系寫入了區(qū)塊鏈.同時,智能合約的ecrecover 函數(shù)可以驗(yàn)證簽名.所以,以上行為可以得到阻止.但系統(tǒng)無法阻止惡意節(jié)點(diǎn)發(fā)送大量此類的無效交易,如果不能有效制約,將會對系統(tǒng)的穩(wěn)定性造成影響.考慮到比特幣和以太坊通過PoW 機(jī)制使得惡意節(jié)點(diǎn)的攻擊成本很高.所以本文設(shè)計(jì)了基于信用度的PoW 獎懲機(jī)制.在我們的系統(tǒng)中,智能合約記錄了機(jī)構(gòu)的信用度屬性(即圖2 中的行為特征),一旦檢測到違規(guī)行為,違規(guī)行為會被保存到信用度屬性中,機(jī)構(gòu)的信用度也隨之下降.式(7)給出了PoW 難度與信用度的關(guān)系
其中,Diff表示機(jī)構(gòu)請求EHR 的難度.λ是一個固定值,其應(yīng)該根據(jù)機(jī)構(gòu)的普遍算力進(jìn)行設(shè)置,實(shí)際應(yīng)用中可以參考比特幣的算力更新方法,根據(jù)出塊時間即算力調(diào)整λ.本文測試了實(shí)驗(yàn)設(shè)備的PoW難度與PoW 算法執(zhí)行時間,根據(jù)測試結(jié)果將λ設(shè)為8,使機(jī)構(gòu)違規(guī)情況下PoW 算法執(zhí)行時間能夠達(dá)到懲罰目的,同時保證正常信用度機(jī)構(gòu)PoW 算法執(zhí)行時間很低.
下面介紹機(jī)構(gòu)請求EHR 前解決PoW 難題的過程.如圖3 所示,1) 機(jī)構(gòu)調(diào)用智能合約請求索引url;2) 智能合約觸發(fā)事件隨機(jī)選舉一個審計(jì)節(jié)點(diǎn)處理機(jī)構(gòu)的請求;3) 審計(jì)節(jié)點(diǎn)根據(jù)機(jī)構(gòu)信用度將挑戰(zhàn)難度Diff和時間戳timestamp發(fā)送給機(jī)構(gòu);4) 機(jī)構(gòu)根據(jù)式(8)算出能夠使得out小于Diff的nonce,并將out和nonce發(fā)送給審計(jì)節(jié)點(diǎn);5) 審計(jì)節(jié)點(diǎn)對pk和url進(jìn)行簽名,并將簽名sigA發(fā)送給機(jī)構(gòu),機(jī)構(gòu)再次調(diào)用智能合約請求EHR 的解密密鑰,智能合約會檢測審計(jì)節(jié)點(diǎn)的簽名是否有效.
通過審計(jì)節(jié)點(diǎn)發(fā)起PoW 挑戰(zhàn)是一個可行辦法,但審計(jì)節(jié)點(diǎn)不是IDM 這樣的可信政府機(jī)構(gòu).所以,如果攻擊者買通了大部分的審計(jì)節(jié)點(diǎn),則攻擊者可以直接拿到審計(jì)節(jié)點(diǎn)的簽名sigA,這樣依舊可以短時間發(fā)起大量攻擊.為了遏止審計(jì)節(jié)點(diǎn)的共謀行為,需要在智能合約中建立檢測共謀行為的機(jī)制,及時通知IDM 采取相應(yīng)的懲罰.注意到如果攻擊者連續(xù)攻擊,式(6)中nij就會起到關(guān)鍵作用,攻擊者的信用度會快速下降,所以攻擊者的挑戰(zhàn)難度會隨之升高.定義
圖3 機(jī)構(gòu)解決PoW 難題的過程Fig.3 The process of the institution solving the PoW problem
其中,ng表示攻擊的區(qū)塊間隔,由當(dāng)前區(qū)塊號bn減去上一次攻擊發(fā)生的區(qū)塊號bnij獲得,可知連續(xù)攻擊時ng很小.表示未違規(guī)情況下系統(tǒng)中信用度最低的用戶對應(yīng)的難度,表示最后一次違規(guī)時機(jī)構(gòu)信用度對應(yīng)的PoW 難度,η則表示審計(jì)節(jié)點(diǎn)共謀的概率.當(dāng)η超過了合約中設(shè)定的閾值,就會觸發(fā)事件通知IDM 對共謀雙方采取相應(yīng)的懲罰.
以上是本文通過信用度獎懲機(jī)制實(shí)現(xiàn)對機(jī)構(gòu)惡意行為的約束,從而保護(hù)系統(tǒng)穩(wěn)定性的方法.
在我們的系統(tǒng)中,智能合約負(fù)責(zé)所有交易的邏輯處理.客戶端利用Web3.js[23]使患者、機(jī)構(gòu)可以調(diào)用智能合約接口函數(shù).圖4 展示了合約中數(shù)據(jù)結(jié)構(gòu)和函數(shù)的設(shè)計(jì).圖中展示了變量在合約中的實(shí)際存儲類型、合約的內(nèi)部函數(shù)和對外的接口函數(shù)以及系統(tǒng)中涉及的結(jié)構(gòu)體.函數(shù)的參數(shù)圖中未給出,在后文算法描述過程中將給出函數(shù)的參數(shù).其中,“+”表示外部可調(diào)用,“-”表示只能是合約內(nèi)部可調(diào)用,“:”后表示數(shù)據(jù)存儲類型,“→”表示映射關(guān)系.
從圖4 中可以看到智能合約分為三個部分:智能合約狀態(tài)變量、智能合約事件以及智能合約函數(shù).其中智能合約狀態(tài)變量提供了永久性存儲在區(qū)塊鏈中的數(shù)據(jù),為用戶身份驗(yàn)證、患者共享EHR、機(jī)構(gòu)共享研究報(bào)告、機(jī)構(gòu)信用度計(jì)算提供數(shù)據(jù)支撐;智能合約事件用于通知鏈外世界,實(shí)現(xiàn)鏈外信息與區(qū)塊鏈信息的交互;智能合約函數(shù)分為內(nèi)部函數(shù)和接口函數(shù),內(nèi)部函數(shù)用于合約內(nèi)部事務(wù)的處理,接口函數(shù)供用戶調(diào)用.表1 給出了這三個部分變量和函數(shù)的具體作用.
以上是EHR-SCAC 系統(tǒng)合約的設(shè)計(jì),接下來將對系統(tǒng)中節(jié)點(diǎn)注冊、患者共享EHR、機(jī)構(gòu)共享研究報(bào)告、患者設(shè)置訪問控制參數(shù)、機(jī)構(gòu)請求EHR 和信用度特征收集這六個過程進(jìn)行詳細(xì)描述.
2.4.1 節(jié)點(diǎn)注冊
算法1 由用戶和IDM 執(zhí)行,輸入的參數(shù)有用戶的真實(shí)身份ID,用戶身份證明信息VID,用戶以太坊地址Eth_address,用戶以太坊公鑰pk.該算法用于登記用戶,同時將必要的用戶信息存入?yún)^(qū)塊鏈中.
算法 1.節(jié)點(diǎn)注冊算法
用戶注冊了以太坊賬號后可以向IDM 申請將信息登記到區(qū)塊鏈中.在該過程中,IDM 驗(yàn)證用戶身份信息,身份驗(yàn)證成功后IDM 調(diào)用合約接口node_register()將用戶的信息寫入?yún)^(qū)塊鏈.如果用戶是機(jī)構(gòu),智能合約會初始化機(jī)構(gòu)的信用度屬性,屬性信息被記錄到變量pk_credit[pk]中,然后將機(jī)構(gòu)信息更新到審計(jì)節(jié)點(diǎn)變量audit_node中.節(jié)點(diǎn)注冊使得用戶成為EHR-SCAC 系統(tǒng)的一員,為患者共享EHR和機(jī)構(gòu)請求患者共享的EHR 做準(zhǔn)備.
2.4.2 訪問控制參數(shù)設(shè)置
算法2 由患者執(zhí)行,輸入的參數(shù)有患者成員公鑰pkp,患者以太坊地址Eth_address,訪問控制參數(shù)集attr.交易成功返回交易ID:Policy_TXID,失敗則返回faile.
患者成功加入?yún)^(qū)塊鏈后可以調(diào)用合約設(shè)置訪問控制參數(shù),患者調(diào)用合約函數(shù)set_strategy()創(chuàng)建交易Policy_TXID,合約通過verify_pk()驗(yàn)證患者是否完成節(jié)點(diǎn)注冊,驗(yàn)證后將患者訪問控制策略attr存入合約變量strategy[pk]指向的結(jié)構(gòu)體pk_strategy中.
算法 2.訪問控制參數(shù)設(shè)置算法
2.4.3 EHR 的共享
算法3 由患者執(zhí)行,輸入的參數(shù)有EHR 的索引url,url的hash 值url_hash,患者成員公鑰pkp,患者以太坊地址Eth_address,患者加密EHR 的對稱密鑰,EHR 的hash 值ehr_hash,醫(yī)院的成員公鑰pkh,醫(yī)生的簽名sigd.交易成功返回交易ID:EHR_TXID,失敗則返回faile.
算法 3.EHR 共享算法
圖4 EHR-SCAC 的智能合約實(shí)現(xiàn)Fig.4 Smart contract implementation of EHR-SCAC
表1 EHR-SCAC 智能合約變量和函數(shù)說明Table 1 Description of EHR-SCAC smart contract variables and functions
該過程的執(zhí)行前提是患者已經(jīng)完成第2.2 節(jié)工作流程的②③兩步,得到必要的參數(shù)后患者調(diào)用合約函數(shù)contribute_EHR()創(chuàng)建共享EHR 合約交易EHR_TXID.合約內(nèi)部執(zhí)行函數(shù)verify_pk()驗(yàn)證患者注冊身份,驗(yàn)證通過后,EHR 的相關(guān)信息存入EHR_share[url_hash]變量中,該變量指向EHR_sharing結(jié)構(gòu)體,同時合約為該EHR 初始化白名單url_whitelist[url_hash],將患者的信息以及解密密鑰存入該白名單所指向的結(jié)構(gòu)體pk_whitelist中.最后,合約調(diào)用內(nèi)部函數(shù)set_url_pk()將患者與EHR 的關(guān)系記錄到變量url_pk[url_hash]中.
2.4.4 研究報(bào)告的共享
算法4 由機(jī)構(gòu)和審核節(jié)點(diǎn)執(zhí)行,輸入的參數(shù)有研究報(bào)告索引r_url,索引的hash 值r_hash,機(jī)構(gòu)成員公鑰pkI,機(jī)構(gòu)的以太坊地址Eth_addressI,審核節(jié)點(diǎn)成員資格公鑰pkA,審核節(jié)點(diǎn)的以太坊地址Eth_addressA.交易成功返回此次交易ID:Research_TXID;失敗返回faile.
算法 4.研究報(bào)告共享算法
患者看病時無法避免誤診情況,機(jī)構(gòu)在發(fā)現(xiàn)患者共享的EHR 存在誤診后,可以進(jìn)行修改,并將研究報(bào)告發(fā)送到云端供審計(jì)節(jié)點(diǎn)審查.隨后機(jī)構(gòu)調(diào)用合約函數(shù)contribute_research() 共享研究報(bào)告.contribute_research()會觸發(fā)事件audit_vote(),監(jiān)聽該事件的審計(jì)節(jié)點(diǎn)鏈下審核研究報(bào)告.審計(jì)節(jié)點(diǎn)pkA審核通過后調(diào)用合約函數(shù)agree_research()來增加con_research[r_hash].voteCount的值,重復(fù)投票不會增加投票數(shù).Research_TXID中的voteCount需在規(guī)定時間set_timestamp內(nèi)超過預(yù)先設(shè)定的閾值set_threshold.同時鏈下機(jī)構(gòu)將修改的EHR 和對EHR 的hash 值的簽名sigI發(fā)送給IDM,IDM 轉(zhuǎn)發(fā)給患者,患者重復(fù)算法3 的過程重新共享更正后的EHR,并通過調(diào)用correct_new_url()函數(shù)將更正后的url存入錯誤EHR 的記錄中.
2.4.5 EHR 的訪問
算法5 由請求患者EHR 的機(jī)構(gòu)執(zhí)行.輸入的參數(shù)有患者的成員資格公鑰pkp,EHR 索引hash值url_hash,請求者成員資格公鑰pkr,請求者的以太坊地址Eth_address,審計(jì)節(jié)點(diǎn)的簽名sigA,審計(jì)節(jié)點(diǎn)的成員資格公鑰pkA.交易成功返回交易ID:Requet_TXID,失敗則根據(jù)失敗類型返回illegal_request,forged,faile.
如果機(jī)構(gòu)在患者EHR 白名單中,則可以直接查詢到存儲的解密密鑰.否則機(jī)構(gòu)執(zhí)行該算法前需要獲取申請?jiān)揈HR 的權(quán)限,所以機(jī)構(gòu)需要先調(diào)用函數(shù)request_EHR()獲取審計(jì)節(jié)點(diǎn)的簽名sigA.拿到簽名sigA后機(jī)構(gòu)調(diào)用合約函數(shù)request_smk_pk(),智能合約執(zhí)行函數(shù)verify_pk(),verify_url(),verify_request()驗(yàn)證請求者是否存在違規(guī)行為,其中第一個驗(yàn)證函數(shù)檢測s1 違規(guī)行為,其余兩個驗(yàn)證函數(shù)檢測s2 違規(guī)行為.一旦驗(yàn)證出請求者存在違規(guī),就會計(jì)算審計(jì)節(jié)點(diǎn)的共謀概率η,η超過閾值則會觸發(fā)事件collusion()通知IDM,IDM 鏈下給與共謀雙方懲罰.通過驗(yàn)證以及患者訪問控制策略strategy[pkp]后,合約觸發(fā)事件store_smk_pk(),IDM通知患者生成重加密密鑰[K]p-r,患者將重加密密鑰發(fā)送到云端,云端執(zhí)行代理重加密后將解密密鑰發(fā)給請求者.
算法 5.EHR 訪問算法
2.4.6 信用度屬性收集
算法6 由區(qū)塊鏈中的共識節(jié)點(diǎn)執(zhí)行.輸入的參數(shù)有新區(qū)塊new_blockId,機(jī)構(gòu)成員公鑰pkI和區(qū)塊中的合約交易TXID.該算法應(yīng)該包含在算法3~ 5 中,為了方便說明,將所有涉及改變機(jī)構(gòu)信用度屬性的交易集中到一起說明.
為了給患者營造可信任的EHR 共享環(huán)境,在智能合約中我們提供了機(jī)構(gòu)信用度屬性的實(shí)時更新和計(jì)算.共識節(jié)點(diǎn)生成新區(qū)塊時,智能合約在處理這些交易時會自動更新交易中相關(guān)機(jī)構(gòu)的信用度屬性信息,即圖2 中的行為特征的值.
算法 6.信用度屬性收集算法
本節(jié)對系統(tǒng)的模型特點(diǎn)、安全性、用戶信用度以及區(qū)塊鏈性能進(jìn)行理論和實(shí)驗(yàn)分析.我們在配置為I7-4720HQ 處理器、12 GB 內(nèi)存、1 TB 機(jī)械硬盤的Windows 10 系統(tǒng)下進(jìn)行實(shí)驗(yàn).我們給出了EHRSCAC 模型系統(tǒng)的實(shí)現(xiàn),如圖5 所示.區(qū)塊鏈維護(hù)方面使用geth@1.8.3-stable,智能合約的部署使用truffle@v5.1.18.使用Web3.js@1.2.6 開發(fā)與區(qū)塊鏈交互的前端.數(shù)據(jù)分析采用MATLAB R2018a.
圖5 EHR-SCAC 系統(tǒng)整體框架Fig.5 EHR-SCAC system overall framework
通過Go Ethereum[24]我們建立了PoA[25]私有區(qū)塊鏈.Web 客戶端通過Web3.js 發(fā)送交易并與用Solidity[26]編寫的智能合約進(jìn)行交互.
與其他訪問控制模型相比,EHR-SCAC 具有一定的優(yōu)勢.EHR-SCAC 采用模糊層次分析法,提供具有參考性的信用度計(jì)算方法.且機(jī)構(gòu)信用度屬性的動態(tài)變化使得機(jī)構(gòu)的信用度具有實(shí)時性,較文獻(xiàn)[15]的組織成員訪問控制和文獻(xiàn)[17]中屬性訪問控制更具動態(tài)性.患者可以根據(jù)合約中提供的參數(shù),動態(tài)地修改訪問控制策略,較文獻(xiàn)[12-13]的訪問控制更加靈活,智能合約的設(shè)計(jì)更輕量.表2展示了EHR-SCAC 模型與其他文獻(xiàn)模型的對比.
表2 EHR-SCAC 與其他模型功能特性的對比Table 2 Comparison of the functional characteristics of EHR-SCAC and other models
1) 隱私性.本文利用密碼學(xué)技術(shù)和區(qū)塊鏈技術(shù),保證共享數(shù)據(jù)的隱私性,患者EHR 中的真實(shí)身份可以采用成員公鑰pk,保證了用戶的匿名性,并且不會對監(jiān)管造成困擾.
2) 不可偽造性.在患者將EHR 上傳到云服務(wù)器之前,醫(yī)生需要簽署EHR.當(dāng)患者將EHR 上傳到云時,必須將醫(yī)生的簽名一起上傳.這不僅劃定了醫(yī)療糾紛責(zé)任歸屬,還確保了電子病歷的完整性.
3) 透明性.請求者對EHR 的訪問會記錄在區(qū)塊鏈中.請求EHR 交易中記錄了請求者的各項(xiàng)屬性和請求時間,這些屬性無論是通過區(qū)塊鏈獲取還是通過預(yù)言機(jī)模式獲取都是公開可信的.患者可以在區(qū)塊鏈中查看獲取請求權(quán)限的訪問者以及他們訪問的時間,保證了系統(tǒng)的透明性.
4) 穩(wěn)定性.我們采用PoA 共識機(jī)制,只有少數(shù)節(jié)點(diǎn)需要對區(qū)塊進(jìn)行驗(yàn)證,隨著區(qū)塊鏈規(guī)模的擴(kuò)大,這項(xiàng)措施可以降低區(qū)塊的挖掘成本.同時,我們的信用度獎懲機(jī)制和監(jiān)督機(jī)制有效地阻止了節(jié)點(diǎn)的無效交易攻擊行為,維護(hù)了區(qū)塊鏈的穩(wěn)定性.
第2.3.1 節(jié)中介紹了信用度的計(jì)算方法,使用FAHP 對行為特征的重要性程度進(jìn)行劃分,最后計(jì)算出各部分的特征權(quán)重和特性權(quán)重.其中:功能特性P的重要性劃分為p2 >p1=p3 >p4=p5,可靠特性R的重要性劃分為r1=r2,安全特性的重要性劃分為s1 >s2,特性的重要性劃分為S>R>P.通過MATLAB 計(jì)算出各特性下特征的權(quán)重以及特性的權(quán)重分別為
得到權(quán)重?cái)?shù)據(jù)后,就可以在智能合約寫出信用度計(jì)算公式.需要注意的是目前以太坊的智能合約還不支持浮點(diǎn)數(shù)運(yùn)算,所以在實(shí)際設(shè)計(jì)中需要將這些權(quán)重?cái)U(kuò)大為整數(shù).為了模擬現(xiàn)實(shí)應(yīng)用場景,我們預(yù)先配置了兩家三級、兩家二級和兩家一級共6 個授權(quán)的醫(yī)院節(jié)點(diǎn)和一個IDM 節(jié)點(diǎn),其中三個級別醫(yī)院正面行為特征數(shù)值變化速度約為3:2:1,負(fù)面行為特征數(shù)值變化約為1:2:3.通過Web3.js編寫的客戶端模擬用戶發(fā)送合約交易到區(qū)塊鏈的過程,在共識節(jié)點(diǎn)處理這些合約交易時,智能合約會記錄各醫(yī)院信用度屬性的變化.
當(dāng)PoA 私有鏈運(yùn)行一段時間后,可以看到三種級別的醫(yī)院信用度的波動范圍,如圖6 所示,三個級別醫(yī)院信用度最終分別在0.94,0.86 和0.73 左右波動.高等級的機(jī)構(gòu)擁有雄厚的資金和人力去研究醫(yī)學(xué)難題,隨著機(jī)構(gòu)等級的降低,機(jī)構(gòu)信用度下降,這不僅符合實(shí)驗(yàn)結(jié)果,也符合實(shí)際情況.
圖6 三種信用度變化趨勢Fig.6 Three levels of credit changes
圖7 違規(guī)行為s1 信用度變化Fig.7 Changes in credit rating of s1 violation
待系統(tǒng)運(yùn)行穩(wěn)定后,對三個級別的醫(yī)院分別執(zhí)行違規(guī)行為s1 操作,信用度變化如圖7 所示,其中三甲醫(yī)院一開始信用度處于恒定不變的原因是該醫(yī)院此階段信用度屬性是系統(tǒng)中最高的,由于要對信用度屬性進(jìn)行歸一化操作(系統(tǒng)中信用屬性最低值均為0),所以三甲醫(yī)院各項(xiàng)信用度屬性歸一化后的值保持不變.然后對三個級別的醫(yī)院執(zhí)行違規(guī)行為s2 操作,信用度變化如圖8 所示.從這兩張圖可以看出,機(jī)構(gòu)在做出違規(guī)行為s1 操作后,信用度有明顯的下降,而做出違規(guī)行為s2 操作后,機(jī)構(gòu)信用度的下降不是很明顯.隨著時間的推移,三個級別醫(yī)院的信用度逐漸恢復(fù)到原來的水平.違規(guī)行為s2 操作對醫(yī)院信用度懲罰不是很明顯,在合約中我們記錄了醫(yī)院違規(guī)行為的次數(shù),如式(6)中所示,如果醫(yī)院再進(jìn)行一次違規(guī)行為s2 操作,其信用度將快速下降.
為了避免s1,s2 行為攻擊占用系統(tǒng)資源,我們將信用度和請求EHR 的難度相關(guān)聯(lián).醫(yī)院請求EHR時必須解決PoW 難題.經(jīng)過測試,難度變化與完成PoW 難題的時間如圖9 所示.根據(jù)圖9 的結(jié)果,當(dāng)醫(yī)院進(jìn)行違規(guī)操作時,醫(yī)院執(zhí)行PoW 算法的時間將迅速上升.
圖8 違規(guī)行為s2 信用度變化Fig.8 Changes in credit rating of s2 violation
圖9 PoW 難度變化與運(yùn)行時間Fig.9 PoW difficulty change and running time
圖10 基于信用度的PoW 難度Fig.10 PoW difficulty based on credit
圖10 展示了三個等級醫(yī)院正常信用度、s1 違規(guī)一次、s2 違規(guī)一次以及s2 違規(guī)兩次情況下請求EHR 交易的PoW 難度對應(yīng)圖.可以看到當(dāng)惡意攻擊發(fā)生時,醫(yī)院請求EHR 的PoW 難度增加.
圖11 當(dāng)機(jī)構(gòu)與審計(jì)節(jié)點(diǎn)共謀攻擊系統(tǒng)時,共謀概率 η 的變化Fig.11 Changes in the collusion probability η when the organization and the audit node collude to attack the system
在第2.3.2 節(jié)中,我們提到機(jī)構(gòu)與審計(jì)節(jié)點(diǎn)存在共謀行為并設(shè)計(jì)了監(jiān)測共謀行為的方法.圖11展示了機(jī)構(gòu)與審計(jì)節(jié)點(diǎn)共謀攻擊系統(tǒng)時,系統(tǒng)監(jiān)測到的共謀概率η的變化.從圖11 中可以看出,s1 共謀攻擊更容易被監(jiān)測到.圖11(b)中高信用度的節(jié)點(diǎn)第2 次執(zhí)行s2 攻擊后,信用度懲罰不夠明顯.但是,高信用度節(jié)點(diǎn)不斷發(fā)起s2 攻擊后,系統(tǒng)監(jiān)測到的共謀概率持續(xù)上升.所以,我們制定的共謀監(jiān)測制度可以很好地維護(hù)系統(tǒng)穩(wěn)定.
我們在PoA 私有鏈中設(shè)置了6 個節(jié)點(diǎn),以1個節(jié)點(diǎn)挖礦,其余5 個節(jié)點(diǎn)不停地發(fā)送交易.我們分別測試了發(fā)送共享EHR 和請求EHR 交易的處理時間.同時對PoA 私有鏈出塊時間進(jìn)行了更改,通過出塊時間與區(qū)塊中交易數(shù)的比值來觀察交易的處理速度.從表3 中可以看出交易平均處理時間在一定的范圍內(nèi)波動,出塊速度對于交易處理速度沒有影響.由于出塊速度的快慢會影響用戶客戶端的響應(yīng)速度,所以更快的出塊速度有利于及時向用戶反饋交易結(jié)果.
表3 不同出塊時間區(qū)塊吞吐量和交易處理速度Table 3 Block throughput and transaction processing speed at different block generation times
本文是通過智能合約實(shí)現(xiàn)訪問控制,而文獻(xiàn)[14,16]主要使用密碼學(xué)技術(shù)實(shí)現(xiàn)訪問控制,與本文差異較大,性能上不適合進(jìn)行比較.文獻(xiàn)[12-13]與本文均采用智能合約進(jìn)行訪問控制的設(shè)計(jì).文獻(xiàn)[12-13]通過觸發(fā)合約事件通知代理重加密節(jié)點(diǎn),使用同態(tài)代理重加密技術(shù)為請求者重新加密解密EHR 的對稱密鑰[smk]pk.不同于文獻(xiàn)[12-13],本文由患者生成重加密密鑰[K]p-r,再由云端鏈下為請求者重新加密解密EHR 的對稱密鑰.文獻(xiàn)[13]與文獻(xiàn)[12]的智能合約類似,所以我們僅討論文獻(xiàn)[12]中的交易流程.為了更好地研究本文智能合約訪問控制性能,我們將節(jié)點(diǎn)登記、患者共享EHR 和請求者請求EHR三個主要交易的交易反饋時延與文獻(xiàn)[12]進(jìn)行比較.
為了方便比較,將區(qū)塊生成時間、同態(tài)代理重加密時間、本文的代理重加密時間分別記為TBT,THT,TRT.對文獻(xiàn)[12]和本文節(jié)點(diǎn)登記、患者共享EHR和請求者請求EHR 的分析如下:
1) 文獻(xiàn)[12]中節(jié)點(diǎn)注冊首先由患者所在的醫(yī)療提供商調(diào)用智能合約創(chuàng)建節(jié)點(diǎn)登記交易,然后智能合約觸發(fā)事件讓投票節(jié)點(diǎn)驗(yàn)證新節(jié)點(diǎn),投票節(jié)點(diǎn)創(chuàng)建交易寫入驗(yàn)證結(jié)果,最后智能合約觸發(fā)事件通知患者節(jié)點(diǎn),患者節(jié)點(diǎn)創(chuàng)建交易寫入是否同意加入?yún)^(qū)塊鏈,所以文獻(xiàn)[12]的節(jié)點(diǎn)登記至少需要3TBT的時間.本文節(jié)點(diǎn)登記需要用戶調(diào)用合約創(chuàng)建一筆交易,即至少需要TBT的時間.
2) 文獻(xiàn)[12]中患者共享EHR 時,由醫(yī)療提供商調(diào)用智能合約創(chuàng)建交易將EHR 相關(guān)信息寫入?yún)^(qū)塊鏈.本文患者共享EHR 時,由患者調(diào)用智能合約創(chuàng)建交易將EHR 相關(guān)信息寫入?yún)^(qū)塊鏈中,與文獻(xiàn)[12]類似,均至少需要TBT的時間.
3) 文獻(xiàn)[12]中請求者請求患者EHR 時,首先需要患者EHR 所在的醫(yī)療服務(wù)商調(diào)用智能合約創(chuàng)建交易驗(yàn)證請求者身份.然后觸發(fā)合約事件,代理重加密節(jié)點(diǎn)需要響應(yīng)事件創(chuàng)建交易將各自加密的大素?cái)?shù)p發(fā)送給智能合約,智能合約利用同態(tài)加密方法將這些大素?cái)?shù)p生成主密鑰master-p,并用請求者的公鑰加密,同時智能合約使用同態(tài)加密方法用master-p加密smk(用于加密EHR 的對稱密鑰)并發(fā)送給代理節(jié)點(diǎn).代理節(jié)點(diǎn)最后解密自己的部分,然后再創(chuàng)建交易發(fā)送給智能合約將部分解密后的盲信息寫入?yún)^(qū)塊鏈,最后由智能合約利用同態(tài)法計(jì)算出解密EHR 的對稱密鑰.所以在文獻(xiàn)[12]中請求EHR 的交易的反饋時延至少需要3TBT+THT.在本文中,請求者需要調(diào)用兩次合約,一個是獲取審計(jì)節(jié)點(diǎn)的簽名sigA,另一個是請求EHR 的解密密鑰,最終由云端執(zhí)行代理重加密將解密密鑰發(fā)給請求者.
由上述分析可知,本文基于智能合約的EHR共享訪問控制模型較文獻(xiàn)[12-13]交易反饋延時更具優(yōu)勢,具體比較如表4 所示.
表4 區(qū)塊鏈交易時延比較Table 4 Blockchain transaction delay comparison
在當(dāng)今信息爆炸的時代,數(shù)據(jù)共享對各行各業(yè)的發(fā)展起著至關(guān)重要的作用.本文就醫(yī)療行業(yè)中EHR 共享的特點(diǎn)和安全隱私問題,提出一種基于集成信用度評估智能合約的安全數(shù)據(jù)共享訪問控制模型.我們將信用度評估和訪問控制策略集成到智能合約中,并提出信用度獎懲機(jī)制和共謀監(jiān)督機(jī)制來維護(hù)區(qū)塊鏈的安全和穩(wěn)定.同時,借助區(qū)塊鏈所具有的不可篡改、可追溯、透明性的特點(diǎn),為患者提供了安全可信的EHR 共享平臺.實(shí)驗(yàn)表明,該模型可以有效地分析用戶行為,動態(tài)更新用戶的信用度屬性和動態(tài)控制EHR 的訪問.未來我們將研究多鏈合作,將信用度、審計(jì)、共享等分隔開來,形成各功能領(lǐng)域的去中心化和全局上的統(tǒng)一.