方 婷, 王晓华, 杨 敏
电子病历的发展从提升效率, 到信息集成共享, 再到提升医疗质量与安全, 发生了质的变化, 而随着远程医疗技术的发展, 学者们又对电子病历的跨区域共享展开了大量的研究. 其中, 身份验证作为信息系统安全的第一道关卡, 对于电子病历的跨区域[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 验证数字签名实验参数