方 婷, 王曉華, 楊 敏
電子病歷的發(fā)展從提升效率, 到信息集成共享, 再到提升醫(yī)療質(zhì)量與安全, 發(fā)生了質(zhì)的變化, 而隨著遠程醫(yī)療技術(shù)的發(fā)展, 學者們又對電子病歷的跨區(qū)域共享展開了大量的研究. 其中, 身份驗證作為信息系統(tǒng)安全的第一道關(guān)卡, 對于電子病歷的跨區(qū)域[1]安全共享至關(guān)重要.
用戶身份驗證[2-7]的方法基本上可分為: 基于口令的身份驗證、基于令牌的身份驗證、基于生物學特征的身份驗證和基于公開密鑰加密算法的身份驗證, 在網(wǎng)絡(luò)通信中最常見的是基于公開密鑰加密算法的身份驗證. 文獻[8]針對用戶異地訪問系統(tǒng)中存在用戶身份鑒別和用戶數(shù)字證書[9]信息交互的問題, 提出采用分布式PKI/CA 架構(gòu), 通過數(shù)字證書對兩地操作系統(tǒng)、應(yīng)用系統(tǒng)提供統(tǒng)一的安全支撐, 形成面向業(yè)務(wù)應(yīng)用和數(shù)據(jù)管理的統(tǒng)一身份、統(tǒng)一認證的信任體系, 實現(xiàn)異地信息資源的整合利用和業(yè)務(wù)協(xié)同. 但是該方案中的證書管理中心(CA)并不是完全安全, 其頒發(fā)的主密鑰對都相同, 若主密鑰泄露, 那么入侵者將冒充CA 來頒發(fā)證書. 文獻[10]提出了一種通過將大文件分塊, 采用多線程傳輸, 并支持文件斷點續(xù)傳的方案, 解決了異地環(huán)境下大文件傳輸?shù)姆€(wěn)定性問題. 該方案制定了基于SSL 協(xié)議的傳輸安全策略, 首先, 通過數(shù)字證書和電子簽名驗證通信雙方的身份信息, 阻止與非法用戶的通信; 其次, 使用對稱/非對稱加密算法對密鑰和數(shù)據(jù)信息加密, 防止傳輸過程中密鑰和數(shù)據(jù)信息被非法竊取. 上述方案中都是用第三方CA 認證中心頒發(fā)的數(shù)字證書來實現(xiàn)客戶與服務(wù)器之間的雙向認證, 但是證書申請成本高, 還有使用期限限制, 隨著用戶的增多, 證書的管理難度也越來越大. 文獻[11]為觸覺互聯(lián)網(wǎng)輔助遠程手術(shù)應(yīng)用程序設(shè)計了一種超高效的相互認證和密鑰協(xié)商協(xié)議, 外科醫(yī)生和機械臂之間通過網(wǎng)關(guān)進行相互認證, 然后這3 個實體生成一個公共的秘密會話密鑰,用于當前登錄會話中的未來通信, 從而實現(xiàn)遠程手術(shù)操作期間的安全通信. 國密SM9 算法[12]也去除了以CA 簽發(fā)數(shù)字證書作為憑證的過程, 用戶不需要通過第三方來保證其公鑰來源的真實性, 這一措施極大地拓寬了PKI[13-15]的應(yīng)用范圍和場景, 也節(jié)省了傳統(tǒng)PKI身份認證體制在密鑰產(chǎn)生、證書簽發(fā)、密鑰管理等方面的花銷. 對于認證, 私鑰的分發(fā)和安全是整個流程安全性的核心, 文獻[16]對SM9 算法的私鑰分發(fā)給出了具體的解決方案, 在安全分發(fā)私鑰的同時實現(xiàn)了客戶端與服務(wù)器的雙向認證.
為保障跨區(qū)域醫(yī)療信息的安全共享, 鑒別通信雙方的身份至關(guān)重要, 本文提出了一種基于SM9 的雙向身份驗證方案(bidirectional authentication scheme based on SM9, BAS)實現(xiàn)了用戶之間的身份信息認證, 為安全有效的實現(xiàn)電子病歷的共享奠定基礎(chǔ).
(5) 式(3)和式(4)計算得到的結(jié)果滿足K=KA=KB,因此雙方經(jīng)過協(xié)商后得到了相同的密鑰K, 達成密鑰協(xié)商的目的.
本文將DH 算法協(xié)商的共同密鑰作為驗證因子,并將其應(yīng)用到驗證流程中.
表1 為本文方案所用符號定義.
表1 符號定義
本文以醫(yī)院間電子病歷的訪問過程中用戶之間的身份驗證作為案例, 提出BAS 方案來對跨區(qū)域信息共享中通信雙方的身份驗證進行分析和研究.
BAS 方案采用了“驗證因子+數(shù)字簽名”的驗證方式, 該方法區(qū)別于傳統(tǒng)的公鑰加密身份驗證方式, 本文將通信雙方通過DH 算法產(chǎn)生的共同密鑰作為驗證因子來完成第1 階段的身份驗證, 再通過數(shù)字簽名完成第2 階段的身份驗證. 圖1 為BAS 方案詳細認證流程圖.
圖1 BAS 方案認證流程圖
認證流程具體步驟如下:
(1) 醫(yī)院A向醫(yī)院B申請所需患者的電子病歷,醫(yī)院B收到醫(yī)院A的請求后做出響應(yīng). 同時, 雙方通過DH 算法分別產(chǎn)生驗證因子V1和V2并將其保存.
(2) 醫(yī)院B保存驗證因子V2后, 使用SM9 算法中的公鑰加密算法加密V2得到密文C, 并將其發(fā)送到醫(yī)院A, 醫(yī)院A對密文C進行解密后得到明文V2′. 對比分析V2與V2′的值, 若二者數(shù)值相同則繼續(xù)執(zhí)行驗證流程;若二者數(shù)值不同則結(jié)束驗證.
(3) 醫(yī)院A對比分析V2與V2′的數(shù)值相同, 則將患者的身份信息作為待簽名的消息M, 獲取M的數(shù)字簽名(h,S) , 最后將M及其數(shù)字簽名(h,S)一起發(fā)送到醫(yī)院B. 醫(yī)院B檢驗收到的消息M′及其數(shù)字簽名(h′,S′),驗證成功則根據(jù)消息M′發(fā)送與之身份信息相匹配的患者電子病歷到醫(yī)院A; 驗證失敗則駁回醫(yī)院A的申請,結(jié)束驗證流程.
(1) 系統(tǒng)初始化
系統(tǒng)選取兩個循環(huán)加法群G1、G2和一個循環(huán)乘法群GT, 這3 個群的階均為素數(shù)N,P1是G1的生成元,P2是G2的生成元, 存在G2到G1的同態(tài)映射 ψ使得ψ(P2)=P1, 雙線性對e是G2×G1→GT的映射.
系統(tǒng)的密鑰生成中心(KGC) 產(chǎn)生隨機數(shù)m∈[1,N-1] 作 為加密主私鑰, 計算G1中 的元素Pubm=mP1作為加密主公鑰, 則加密主密鑰對為(m,Pubm). 秘密保存m, 公開Pubm.
系統(tǒng)的密鑰生成中心(KGC) 產(chǎn)生隨機數(shù)s∈[1,N-1] 作為簽名主私鑰, 計算G2中的元素Pubs=sP2作為簽名主公鑰, 則簽名主密鑰對為(s,Pubs) . 秘密保存s,公開Pubs.
(2) 用戶B身份驗證階段
用戶A與用戶B使用DH 算法協(xié)商驗證因子保存后, 用戶B需將自己的驗證因子V2加密并發(fā)送到用戶A進行身份驗證. 圖2 為用戶B身份驗證.
圖2 用戶B 身份驗證
1) 加密驗證因子
用戶B使用用戶A的標識IDA來計算用戶A的公鑰QA=[H1(IDA||hid,N)]P1+Pubm, 再產(chǎn)生一個隨機數(shù)r∈[1,N-1]用 于加密. 首先, 計算C1=rQA、g=e(Pubm,P2)、w=gr、klen=K1_len+K2_len(令K1為K最左邊的K1_len比 特,K2為剩下的K2_len比 特串, 注意K1是否為全0 比特串)和K=KDF(C1||w||IDA). 最后輸出(K,C1),至此密鑰封裝完成. 繼續(xù)計算C2=Enc(K1,V2) 和C3=MAC(K2,C2) , 即用密鑰K1對 驗證因子V2進行加密生成密文C2, 然后在密鑰K2的控制下產(chǎn)生C2的消息認證碼C3, 防止C2被篡改. 最后, 輸出密文C=C1||C3||C2, 并將其發(fā)送給用戶A 進行驗證.
2) 驗證
(3) 用戶A身份驗證階段
用戶B的身份驗證成功后, 用戶A需要獲取消息M(患者身份信息)的數(shù)字簽名(h,S)發(fā)送給用戶B, 以此來驗證用戶A的身份. 圖3 為用戶A身份驗證.
圖3 用戶A 身份驗證
1) 數(shù)字簽名
首先, 計算g=e(P1,Pubs)并保存結(jié)果. 其次, 產(chǎn)生隨機數(shù)r∈[1,N-1], 然后計算w=gr、h=H2(M||w,N)和l=(r-h)modN(注意l是否為0). 在l不為0 的情況下, 計算S=ldsA, 確定消息M的數(shù)字簽名為(h,S). 最后輸出M及其數(shù)字簽名(h,S)并將其發(fā)送到用戶B處進行驗證.
2) 驗證數(shù)字簽名
用戶B收到消息M′及其數(shù)字簽名(h′,S′)后, 先檢驗等式h′∈[1,N-1]是否成立, 若不成立則驗證不通過;若成立, 則繼續(xù)檢驗等式S′∈G1是 否成立, 若S′∈G1不成立則驗證不通過; 若S′∈G1成立, 則計算g=e(P1,Pubs)、t=gh′、h1=H1(IDA||hid,N)、P=h1P2+Pubs、u=e(S′,P)、w′=ut和h2=H2(M′||w′,N). 最后,檢驗等式h2=h′是否成立, 若成立則驗證通過; 否則驗證失敗.
數(shù)字簽名及驗簽的正確性關(guān)鍵是考慮簽名時w的生成以及驗簽時w的生成, 這兩個階段w的計算如式(5)和式(6):
(1) 密鑰安全
本文方案中的主密鑰對都是通過隨機數(shù)產(chǎn)生, 用戶的私鑰是由密鑰生成中心通過主私鑰與用戶的標識計算生成, 且私鑰由用戶加密后存儲在自己的設(shè)備上, 只用于數(shù)字簽名和公鑰加密, 既不會被泄露, 也避免被竊取.
(2) 中間人攻擊
本文方案是基于DH 算法和標識密碼技術(shù)的雙向認證方案. 在第1 階段的身份驗證中, 通信雙方通過DH 算法協(xié)商的驗證因子經(jīng)過了非對稱加密過后進行傳輸, 用戶的私鑰都存儲在本地, 不在網(wǎng)絡(luò)上進行傳輸,可以有效地防止攻擊者的竊聽行為. 在第2 階段的身份驗證中, 主私鑰與用戶標識產(chǎn)生的簽名私鑰對數(shù)據(jù)產(chǎn)生數(shù)字簽名, 中間人即使偽造了標識, 也無法偽造數(shù)字簽名. 因此, 不能通過仿冒或欺騙等手段達到竊取用戶間的通信信息這一目的.
(3) 重放攻擊
本文方案中驗證因子和密鑰對都是由隨機數(shù)計算而來, 加密驗證因子產(chǎn)生的密文也是由隨機數(shù)計算而來, 可通過隨機數(shù)的信息來識別和確定是否是重放信息, 從而避免重放攻擊.
(4) 前向安全
本文方案中, 密鑰是由KGC 通過主私鑰和用戶的標識結(jié)合產(chǎn)生, 而每次加密密鑰或簽名密鑰都是隨機的、不同的, 且每次認證時必須使用對方的標識, 標識若是偽造的將造成認證失敗. 密鑰的隨機性以及標識的全過程參與成為了系統(tǒng)安全的保障. 信息也都是經(jīng)過加密后再進行傳輸, 所以不會造成以前通信時產(chǎn)生的會話密鑰被泄露, 也不會泄露以前通信的內(nèi)容.
服務(wù)器的基本配置: CPU i3-2120U, 主頻3.30 GHz,內(nèi)存4.00 GB, 硬盤931.51 GB, IP 地址為202.101.72.84. 同時在服務(wù)器上部署了一個基于Java 開發(fā)的雙向身份驗證系統(tǒng), 該系統(tǒng)主要用于BAS 方案的實驗論證.
在BAS 方案的可行性及正確性測試中, 選取兩個用戶A和B進行認證測試, 其中用戶A和用戶B計算驗證因子后由用戶B加密自己的驗證因子發(fā)送給用戶A進行驗證. 表2 為實驗具體參數(shù).
表2 BAS 方案用戶B 加密驗證因子實驗參數(shù)
對于電子病歷的跨區(qū)域共享中通信雙方身份驗證的需求, 本文提出的基于SM9 算法的雙向身份驗證方案, 改變了傳統(tǒng)PKI 身份驗證的流程, 使用“驗證因子+數(shù)字簽名”的方式實現(xiàn)了用戶的雙向認證. 且該方案中, SM9 算法無需預(yù)先與協(xié)商密碼者交換CA 證書, 減少了申請和驗證環(huán)節(jié), 滿足跨域用戶安全通訊的需求. 本文方案在滿足正確性的基礎(chǔ)上安全可靠,在跨域醫(yī)療協(xié)同這一應(yīng)用場景下具有一定的研究價值和應(yīng)用前景, 能夠有效的避免因用戶的身份驗證問題造成患者的就診信息被泄露. 在接下來的研究中將將繼續(xù)對SM9 算法的相關(guān)計算進行優(yōu)化, 提高驗證效率.
表3 用戶A 解密實驗參數(shù)
表4 BAS 方案用戶A 數(shù)字簽名實驗參數(shù)
表5 用戶B 驗證數(shù)字簽名實驗參數(shù)