方 婷, 王曉華, 楊 敏
電子病歷的發展從提升效率, 到信息集成共享, 再到提升醫療質量與安全, 發生了質的變化, 而隨著遠程醫療技術的發展, 學者們又對電子病歷的跨區域共享展開了大量的研究. 其中, 身份驗證作為信息系統安全的第一道關卡, 對于電子病歷的跨區域[1]安全共享至關重要.
用戶身份驗證[2-7]的方法基本上可分為: 基于口令的身份驗證、基于令牌的身份驗證、基于生物學特征的身份驗證和基于公開密鑰加密算法的身份驗證, 在網絡通信中最常見的是基于公開密鑰加密算法的身份驗證. 文獻[8]針對用戶異地訪問系統中存在用戶身份鑒別和用戶數字證書[9]信息交互的問題, 提出采用分布式PKI/CA 架構, 通過數字證書對兩地操作系統、應用系統提供統一的安全支撐, 形成面向業務應用和數據管理的統一身份、統一認證的信任體系, 實現異地信息資源的整合利用和業務協同. 但是該方案中的證書管理中心(CA)并不是完全安全, 其頒發的主密鑰對都相同, 若主密鑰泄露, 那么入侵者將冒充CA 來頒發證書. 文獻[10]提出了一種通過將大文件分塊, 采用多線程傳輸, 并支持文件斷點續傳的方案, 解決了異地環境下大文件傳輸的穩定性問題. 該方案制定了基于SSL 協議的傳輸安全策略, 首先, 通過數字證書和電子簽名驗證通信雙方的身份信息, 阻止與非法用戶的通信; 其次, 使用對稱/非對稱加密算法對密鑰和數據信息加密, 防止傳輸過程中密鑰和數據信息被非法竊取. 上述方案中都是用第三方CA 認證中心頒發的數字證書來實現客戶與服務器之間的雙向認證, 但是證書申請成本高, 還有使用期限限制, 隨著用戶的增多, 證書的管理難度也越來越大. 文獻[11]為觸覺互聯網輔助遠程手術應用程序設計了一種超高效的相互認證和密鑰協商協議, 外科醫生和機械臂之間通過網關進行相互認證, 然后這3 個實體生成一個公共的秘密會話密鑰,用于當前登錄會話中的未來通信, 從而實現遠程手術操作期間的安全通信. 國密SM9 算法[12]也去除了以CA 簽發數字證書作為憑證的過程, 用戶不需要通過第三方來保證其公鑰來源的真實性, 這一措施極大地拓寬了PKI[13-15]的應用范圍和場景, 也節省了傳統PKI身份認證體制在密鑰產生、證書簽發、密鑰管理等方面的花銷. 對于認證, 私鑰的分發和安全是整個流程安全性的核心, 文獻[16]對SM9 算法的私鑰分發給出了具體的解決方案, 在安全分發私鑰的同時實現了客戶端與服務器的雙向認證.
為保障跨區域醫療信息的安全共享, 鑒別通信雙方的身份至關重要, 本文提出了一種基于SM9 的雙向身份驗證方案(bidirectional authentication scheme based on SM9, BAS)實現了用戶之間的身份信息認證, 為安全有效的實現電子病歷的共享奠定基礎.


(5) 式(3)和式(4)計算得到的結果滿足K=KA=KB,因此雙方經過協商后得到了相同的密鑰K, 達成密鑰協商的目的.
本文將DH 算法協商的共同密鑰作為驗證因子,并將其應用到驗證流程中.

表1 為本文方案所用符號定義.

表1 符號定義
本文以醫院間電子病歷的訪問過程中用戶之間的身份驗證作為案例, 提出BAS 方案來對跨區域信息共享中通信雙方的身份驗證進行分析和研究.
BAS 方案采用了“驗證因子+數字簽名”的驗證方式, 該方法區別于傳統的公鑰加密身份驗證方式, 本文將通信雙方通過DH 算法產生的共同密鑰作為驗證因子來完成第1 階段的身份驗證, 再通過數字簽名完成第2 階段的身份驗證. 圖1 為BAS 方案詳細認證流程圖.

圖1 BAS 方案認證流程圖
認證流程具體步驟如下:
(1) 醫院A向醫院B申請所需患者的電子病歷,醫院B收到醫院A的請求后做出響應. 同時, 雙方通過DH 算法分別產生驗證因子V1和V2并將其保存.
(2) 醫院B保存驗證因子V2后, 使用SM9 算法中的公鑰加密算法加密V2得到密文C, 并將其發送到醫院A, 醫院A對密文C進行解密后得到明文V2′. 對比分析V2與V2′的值, 若二者數值相同則繼續執行驗證流程;若二者數值不同則結束驗證.
(3) 醫院A對比分析V2與V2′的數值相同, 則將患者的身份信息作為待簽名的消息M, 獲取M的數字簽名(h,S) , 最后將M及其數字簽名(h,S)一起發送到醫院B. 醫院B檢驗收到的消息M′及其數字簽名(h′,S′),驗證成功則根據消息M′發送與之身份信息相匹配的患者電子病歷到醫院A; 驗證失敗則駁回醫院A的申請,結束驗證流程.
(1) 系統初始化
系統選取兩個循環加法群G1、G2和一個循環乘法群GT, 這3 個群的階均為素數N,P1是G1的生成元,P2是G2的生成元, 存在G2到G1的同態映射 ψ使得ψ(P2)=P1, 雙線性對e是G2×G1→GT的映射.
系統的密鑰生成中心(KGC) 產生隨機數m∈[1,N-1] 作 為加密主私鑰, 計算G1中 的元素Pubm=mP1作為加密主公鑰, 則加密主密鑰對為(m,Pubm). 秘密保存m, 公開Pubm.
系統的密鑰生成中心(KGC) 產生隨機數s∈[1,N-1] 作為簽名主私鑰, 計算G2中的元素Pubs=sP2作為簽名主公鑰, 則簽名主密鑰對為(s,Pubs) . 秘密保存s,公開Pubs.
(2) 用戶B身份驗證階段
用戶A與用戶B使用DH 算法協商驗證因子保存后, 用戶B需將自己的驗證因子V2加密并發送到用戶A進行身份驗證. 圖2 為用戶B身份驗證.

圖2 用戶B 身份驗證
1) 加密驗證因子
用戶B使用用戶A的標識IDA來計算用戶A的公鑰QA=[H1(IDA||hid,N)]P1+Pubm, 再產生一個隨機數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),至此密鑰封裝完成. 繼續計算C2=Enc(K1,V2) 和C3=MAC(K2,C2) , 即用密鑰K1對 驗證因子V2進行加密生成密文C2, 然后在密鑰K2的控制下產生C2的消息認證碼C3, 防止C2被篡改. 最后, 輸出密文C=C1||C3||C2, 并將其發送給用戶A 進行驗證.
2) 驗證


(3) 用戶A身份驗證階段
用戶B的身份驗證成功后, 用戶A需要獲取消息M(患者身份信息)的數字簽名(h,S)發送給用戶B, 以此來驗證用戶A的身份. 圖3 為用戶A身份驗證.

圖3 用戶A 身份驗證
1) 數字簽名
首先, 計算g=e(P1,Pubs)并保存結果. 其次, 產生隨機數r∈[1,N-1], 然后計算w=gr、h=H2(M||w,N)和l=(r-h)modN(注意l是否為0). 在l不為0 的情況下, 計算S=ldsA, 確定消息M的數字簽名為(h,S). 最后輸出M及其數字簽名(h,S)并將其發送到用戶B處進行驗證.
2) 驗證數字簽名
用戶B收到消息M′及其數字簽名(h′,S′)后, 先檢驗等式h′∈[1,N-1]是否成立, 若不成立則驗證不通過;若成立, 則繼續檢驗等式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′是否成立, 若成立則驗證通過; 否則驗證失敗.
數字簽名及驗簽的正確性關鍵是考慮簽名時w的生成以及驗簽時w的生成, 這兩個階段w的計算如式(5)和式(6):

(1) 密鑰安全
本文方案中的主密鑰對都是通過隨機數產生, 用戶的私鑰是由密鑰生成中心通過主私鑰與用戶的標識計算生成, 且私鑰由用戶加密后存儲在自己的設備上, 只用于數字簽名和公鑰加密, 既不會被泄露, 也避免被竊取.
(2) 中間人攻擊
本文方案是基于DH 算法和標識密碼技術的雙向認證方案. 在第1 階段的身份驗證中, 通信雙方通過DH 算法協商的驗證因子經過了非對稱加密過后進行傳輸, 用戶的私鑰都存儲在本地, 不在網絡上進行傳輸,可以有效地防止攻擊者的竊聽行為. 在第2 階段的身份驗證中, 主私鑰與用戶標識產生的簽名私鑰對數據產生數字簽名, 中間人即使偽造了標識, 也無法偽造數字簽名. 因此, 不能通過仿冒或欺騙等手段達到竊取用戶間的通信信息這一目的.
(3) 重放攻擊
本文方案中驗證因子和密鑰對都是由隨機數計算而來, 加密驗證因子產生的密文也是由隨機數計算而來, 可通過隨機數的信息來識別和確定是否是重放信息, 從而避免重放攻擊.
(4) 前向安全
本文方案中, 密鑰是由KGC 通過主私鑰和用戶的標識結合產生, 而每次加密密鑰或簽名密鑰都是隨機的、不同的, 且每次認證時必須使用對方的標識, 標識若是偽造的將造成認證失敗. 密鑰的隨機性以及標識的全過程參與成為了系統安全的保障. 信息也都是經過加密后再進行傳輸, 所以不會造成以前通信時產生的會話密鑰被泄露, 也不會泄露以前通信的內容.
服務器的基本配置: CPU i3-2120U, 主頻3.30 GHz,內存4.00 GB, 硬盤931.51 GB, IP 地址為202.101.72.84. 同時在服務器上部署了一個基于Java 開發的雙向身份驗證系統, 該系統主要用于BAS 方案的實驗論證.
在BAS 方案的可行性及正確性測試中, 選取兩個用戶A和B進行認證測試, 其中用戶A和用戶B計算驗證因子后由用戶B加密自己的驗證因子發送給用戶A進行驗證. 表2 為實驗具體參數.

表2 BAS 方案用戶B 加密驗證因子實驗參數

對于電子病歷的跨區域共享中通信雙方身份驗證的需求, 本文提出的基于SM9 算法的雙向身份驗證方案, 改變了傳統PKI 身份驗證的流程, 使用“驗證因子+數字簽名”的方式實現了用戶的雙向認證. 且該方案中, SM9 算法無需預先與協商密碼者交換CA 證書, 減少了申請和驗證環節, 滿足跨域用戶安全通訊的需求. 本文方案在滿足正確性的基礎上安全可靠,在跨域醫療協同這一應用場景下具有一定的研究價值和應用前景, 能夠有效的避免因用戶的身份驗證問題造成患者的就診信息被泄露. 在接下來的研究中將將繼續對SM9 算法的相關計算進行優化, 提高驗證效率.

表3 用戶A 解密實驗參數

表4 BAS 方案用戶A 數字簽名實驗參數

表5 用戶B 驗證數字簽名實驗參數