基于XML的数字签名在电子病历的应用方法
2016-07-20黄海平
黄海平
摘 要:针对文件数字签名在电子病历应用中存在只能整体签名、重复性签名等诸多限制和问题,提出改用XML数字签名。实现结果表明,XML数字签名可支持多种方式的文档数据转换,可以实现对电子病历进行部分和多方签名验证,并能提供清晰易读的密钥信息,更加便于签名的自动检验处理。因此,在电子病历的应用中,XML数字签名较文件数字签名在平衡安全性和数据库空间节约性上具有明显优势。
关键词:空间节约XML;语言数字签名
中图分类号:TP311.52 文献标识码:A
1 引言
目前,随着医疗信息化建设的不断深入开展,国内的各个层级的医院已经普遍淘汰了纸质电子病历,采用电子病历系统,而电子签名法的诞生,意味着数字签名技术将逐步保障电子病历的安全性和保密性[1]。近年来,国内外医疗信息化科技工作者对数字签名技术在电子病历的应用方面做了诸多研究,尤其是防篡改和安全可靠保障的相关技术已经比较成熟,在美国推出了《数字签名法》[2-3],鼓励信息行业采用数字签名技术保证电子病历的安全,国内学者开展了数据结构加密、数字水印等多种电子病历加密方法[4-5],但是,更具应用潜力的XML数字签名技术在电子病历上的应用研究相对较少,本文着重从平衡安全性和数据库空间节约性上,讨论XML数字签名技术在电子病历的应用。
2 文件数字签名和XML数字签名的技术
原理
2.1 电子病历XML数字签名生成
电子病历XML数字签名算法生成过程中,针对要的签名对象计算其摘要值,然后执行签名。XML数字签名的形成分为两部分操作,第一是形成Reference元素,第二是形成Signature元素[6]。
1.Reference 元素的生成:
步骤1:先用Transform对需要产生摘要的内容进行统一化处理;
步骤2:根据哈希函数产生摘要哈希值,可用于对数据的接收方进行摘要核对;
步骤3:创建一个 Reference 元素,作为父元素,子元素包含 DigestMethod、DigestValue元素。可选的Transforms元素中的子元素要先后顺序处理。
2.Signature元素的生成:
步骤1:首先创建SignedInfo元素,并作为父元素,子元素包括SignatureMethod元素、CanolicalizationMethod元素以及若干个 Reference 元素。
步骤2:把步骤1创建的SignedInfo元素输入到CanolicalizationMethod元素中,进行规范化的处理,输出结果以便作为数字签名的输入内容,再结合KeyInfo中的信息进行数字签名。
步骤3:创建Signature元素,把步骤2的结果赋值给SignatureValue 元素,同时将SignatureValue 元素连同Signedlnfo元素、Keylnfo 元素,三个元素作为子元素封装到 Signature 元素中,在封装式签名的情况下,也可把Object元素也封装进来。
图1 电子病历XML数字签名过程流程图
2.2 电子病历XML数字签名的验证原理
电子病历XML数字签名的验证是一个发送方封装公钥解密过程,具体是根据Reference元素里被签名的文档和被签名的加密算法重新计算得出被签名文档的摘要,与发送方提供的摘要对比,如果一致则说明没有被篡改[7]。验证过程包括了引用验证和签名验证两个部分。
图2 电子病历XML数字签名验证过程流程图
1.引用验证给过程是首先用CanolicalizationMethod元素规范化处理SignedInfo元素;然后从中提取出数据源引用并作转换处理,将这时的输出作为Digest要处理的输入生成数据摘要值;最后将 signedInfo元素中提取的DigestValue元素值与前面生成的摘要值两两匹配,一致则验证完成。
2.签名验证流程是先从KeyInfo元素提取出验证密钥;然后通过SignatuerMethod元素的规范处理确定发送方使用的签名算法。把收到的签名值和经过算法计算出来的SignatureValue元素值对照,一致则证明签名正确[8]。
3 电子病历XML数字签名的设计和实现
3.1 电子病历XML数字签名的算法流程设计
步骤1:客户端新建一份电子病历文档,对签名的验证端发送包含签名者和病人身份信息的追加签名请求;
步骤2:签名验证端提取追加签名请求的签名者和病人身份信息;
步骤3:签名验证端按照以下的步骤完成对签名者的身份验证:
1.签名验证端发送随机信息给客户端;
2.客户端签名者用私钥对信息加密后反馈给签名验证端;
3.签名验证端向CA认证机构调用了签名者的公钥进行消息解密,并将结果与所发送的随机消息比照。
图3 数字签名逻辑流程图[9]
步骤4:若一致,则进行步骤5,不一致,则行步骤15;
步骤5:签名验证端通过身份验证,建立远程数据库连接,通过对数据库的查询提取出签名者和病人的身份信息,并把查询结果反馈给客户端;
步骤6:若查询结果为空,则进行步骤7,若不为空,则进行步骤8;
步骤7:若查询结果为空,证明是签名者对病人的第一份签名的病历(不是要追加的病历),客户端直接用私钥签名后发送给签名验证端(具体案例内容见下面3.2.1的内容),首先签名者用把要签名的病历代入哈希函数,得出一个哈希值,也就是文章摘要,再用私钥加密,形成数字签名,然后,执行步骤12;endprint
步骤8:如果查询结果不为空,则表明这一份不是签名者对该病人的初始病历,签名认证端远程访问数据库,提取除去签名信息的已有的电子病历文档,再重新发送给客户端;
步骤9:客户端将步骤1新建的电子病历文档追加到原有的电子病历文档中,并对复合后更新的电子病历文档进行签名,再发送给签名认证端保存;
步骤10:签名认证端将追加后更新的电子病历与原有的电子病历对应部分进行比照;
步骤11:如果被篡改,则进行步骤15,如果没有被篡改,则进行步骤12;
步骤12:签名认证端通过CA认证机构调用了签名者的公钥对文档签名进行验证,具体验证过程如图2所示,用公钥解密将数字签名转化为哈希值,与接收的电子病历代入哈希函数得出的哈希值,两相比较;
步骤13:若一致,则执行步骤14,若不一致,则执行步骤15;
步骤14:将已签名的更新后的电子文档存入数据库,并删除原有的电子病历文档,避免空间的重复浪费;
步骤15:将结果反馈给客户端。
3.2 基于XML数字签名电子病历的语言实现
为了实现图3XML数字签名逻辑流程图步骤7 “直接签名”需要新建一个XML电子病历文档medicalRecords类[10],该新建文档经过图3流程图“直接签名”后,所形成医生签名了的“新建电子文档”PatientCrecord类。
根据图3的流程图在原有已经签名电子病历文档的基础上,追加内容并再次签名的实现。
原签名的电子病历:
2014-01-20
xmldsig#sha 1”/> =
追加了2.1病历内容以后数字签名并在数据库更新后的电子病历文档如下:
4 XML数字签名与文件数字签名的比较
分析
文件数字签名是医生针对整份电子病历采用私钥签名存档,表面看上去比较方便,但实际不易于数据库的管理,因为存在多位医生对同一份病历进行重复性签名,这对于存储空间无疑是一种浪费,而XML数字签名可以针对一份病历中任一部分的内容进行签名,比如医生A对第一部分签名,医生B对第二部分,以此类推。因此,XML数字签名在平衡安全性和数据库空间节约性上具有明显优势[11]。
另外,由于XML语言本身的可扩展性和开放性的特征,可以实现对XML文档进行部分签名和多方签名,而文件的数字签名[12],如下图所示,只能对整个电子病历文档进行整体签名。
图4 文件数字签名运行界面
同文件数字签名对比,XML数字签名可支持多种方式的文档数据转换,并对文档特定部分进行签名和验证,并且其提供的密钥信息的表示清晰易读,更加便于签名的自动检验处理[13]。下图5,则是根据图4所示的同一内容的电子病历,其中一部分进行签名。
图5 XML数字签名运行界面
参考文献
[1] 高春芳,唐晓东,罗娟.电子病历系统应用现状及前景展望[J].医疗卫生设备,2013,3:76-78.
[2] Zhang Wenji,Yang Jinshe. Discussion on the development trend of electronic Medical records management[J]. Journal of Practical Medical Techniques, 2013, (10): 124-125.
[3] Xue Manguo. The Research Development of Electronic Medical Records in China[J]. Chinese Hospital Management, 2012,25(02): 17-20.
[4] 陈海彪.对电子病历存储及签名的研究[J].广东科技,2013,7(14):43-47.
[5] 隋暖.基于数字签名技术的移动公文流转系统的研究与实现[D].山东:中国海洋大学,2014.
[6] 袁博.浅谈电子病历的数据安全控制策略[J].数字技术与应用,2014,7:185-185.
[7] 朱建娜.医院信息化建设电子病历法律效力如何保障[J].吉林医学信息,2014,30(2):20-22.
[8] 梁方舟.数字签名在门急诊信息化中的应用研究[J].中国循环杂志,2013,8:102-107.
[9] 宋余庆,陈健美,冯江.一种基于XML的电子病历数字签名方法:中国,ZLCN102457508A [EB/P].2012.05.16.http://www.epub.sipo.gov.cn/
[10]马锡坤,杨国斌,于京杰.国内电子病历发展与应用现状分析[J].计算机应用与软件,2015,(1):10-12.
[11]任晓刚.数字签名在医院电子病历中的应用研究[J].信息技术,2013,(1):118-120.
[12](04-O5).卫生部统计信息中心关于征求《基于居民健康档案的区域卫生信息平台技术规范(征求意见稿)》和《基于电子病历的医院信息平台技术规范(征求意见稿)》意见的函Available:[EB/OL]http://www.moh.gov.cn/publicfiles/business/htmlfiles/mohwsbwstjxxzx/s8553/201203/54263.htm
[13]维克托·迈尔-舍恩伯格,肯尼思·库克耶著,盛杨燕,周涛译.大数据时代:生活、工作与思维的大变革[M].杭州:浙江人民出版社,2013:2-3.