一种基于xml的电子病历数字签名方法

文档序号:7763891阅读:435来源:国知局
专利名称:一种基于xml的电子病历数字签名方法
技术领域
本发明涉及一种电子病历数字签名方法,尤其是一种基于XML文件格式的电子病历数字签名方法,属于医疗信息化技术领域。
背景技术
随着信息化建设的不断发展,各医院都逐渐建立了自己的电子病历系统,用电子病历文档代替现有纸质病历文档。随着《电子签名法》的诞生,数字签名技术正被越来越多的应用在电子病历系统中,用来保证病历信息的真实性、完整性以及签名者的不可抵赖性。 通过国内外专利文献检索发现,目前国内外电子病历的研究主要集中在电子病历文档的安全性(包括防篡改,修改留痕等)以及跨平台电子病历共享。数字签名方面主要集中在研究安全高效的数字签名算法以及安全可靠的数字签名装置,对于如何节约XML数字签名占用存储空间未见任何报导。XML因其开放性、可扩展性、内容与形式分离以及结构化等诸多优势,成为电子病历存储格式的首选。所以,现有对电子病历文档的签名问题基本都是基于XML的电子病历数字签名。XML数字签名规范由IETF(Internet Engineering Task Force)和W3C共同组建的XML Signature工作组在2001年8月20日公布。该签名规范因考虑到数字签名的所有可能应用领域,签名结构比较冗余,占用大量存储空间。若使用标准的数字签名规范对一份病历文档签名,其签名部分有时甚至比病历文档的正文占用更多的存储空间。因此,在使用该数字签名规范对电子病历文档签名时,要尽量避免签名的重复以节约存储空间。据申请人了解,目前电子病历系统采用的数字签名方法都是医生每产生一份病历文档,则导入其私钥对该文档产生一个数字签名,然后存入数据库。这样做对签名者来说虽然比较方便,但不利于数据库的管理。且在现实中一个病人往往有一个或多个确定的主治医生,病人的绝大多数病历都由主治医生生成然后签名。因此,一个病人的大量病历文档中有很多签名都由同一个医生所签,这种重复的签名造成了存储空间的大量浪费。

发明内容
本发明的目的在于针对电子病历系统在使用基于XML的数字签名过程中,造成的签名冗余过多以至存储空间大量浪费的问题,提出一种基于XML的电子病历数字签名方法, 从而使签名冗余最小化。为达到上述目的,本发明的技术方案是一种基于XML的电子病历数字签名方法, 在相互通讯连接的客户端、签名认证端、以及远程数据库服务器构成的数字签名认证系统中,认证步骤为
步骤一客户端生成新建电子病历文档后,向签名认证端发送包含签名者身份以及病人身份信息的追加签名请求;
步骤二 签名认证端提取出追加签名请求中的签名者身份、病人身份信息; 步骤三签名认证端按以下步骤完成身份认证 A、签名认证端发送随机消息给客户端;B、客户端签名者用私钥对该消息加密后反馈给签名认证端;
C、签名认证端调用签名者的公钥对消息解密,并比较与随机消息是否一致,如是则进行步骤四,否则执行步骤十一;
步骤四签名认证端通过身份认证,与远程数据库建立连接,通过提取出的签名者身份、病人身份信息对数据库进行查询操作,并返回查询结果给客户端;若查询结果为空,执行步骤五,否则执行步骤六;
步骤五(查询结果为空,表明这是签名者对病人的第一份需要签名的病历文档)客户端直接对新建电子病历文档签名后,发送给签名认证端,然后执行步骤九;
步骤六(查询结果不为空,表明数据库中已有该签名者对该病人的签名病历)签名认证端从数据库中提取出对应的原有电子病历文档,去除文档签名信息后保存,并发送一份到客户端;
步骤七客户端将新建电子病历文档追加到接收的原有电子病历文档后,形成更新电子病历文档,并对更新电子病历文档签名后发送给签名认证端;
步骤八签名认证端将签名后的更新电子病历文档中与原有电子病历文档对应部分进行比较,如被篡改,执行步骤十一,否则执行步骤九;
步骤九签名认证端调用签名者的公钥对来自客户端的电子病历文档签名进行解密后,与对应电子病历文档的相应数据进行对比,若对比结果一致则通过签名验证,执行步骤十,否则执行步骤十一;
步骤十将通过签名认证的电子病历文档存入数据库中,如存在原有电子病历文档则进行删除;
步骤十一反馈结果消息给客户端。由于本发明将同一个医生对同一病人的不同病历文档进行合并后一起签名,实时保证数据库中同一个病人的病历文档中,同一个医生的签名只有一个,因而使签名冗余最小化,从而为医院卫生信息化建设节省大量存储空间。本发明的进一步完善是所述步骤七中,还将电子病历文档中的重复内容(比如病人姓名,年龄,出生日期等)合并处理,从而使病历文档的信息冗余更少,节省更多的存储空间。归纳起来本发明具有以下优点
(1)签名认证端设置方便。任何一台具有上述功能的硬件或软件都可以作为签名认证端,实现客户端跟远程数据库之间的交互。(2)节省存储空间。通过实时保证数据库中一个签名者对同一个病人的病历文档签名只有一个,为医院卫生信息化节省大量存储空间。(3)安全性高。通过身份认证模块、防篡改认证模块和签名认证模块的三重认证, 保证客户端签名者的身份始终一致,若中途数据遭到篡改,必然不能通过其中任何一个认证,保证了数据库中数据的绝对真实可靠。


下面结合附图对本发明作进一步的说明。图1为本发明的硬件构成框图。
图2为本发明一个实施例的数字签名逻辑流程图。图3是图2中数字签名过程流程图。图4是图2中数字签名验证过程流程图。图5是图2实施例中的新建电子病历文档。图6是图2实施例中直接签名后的新建电子病历文档。图7是图2实施例中数据库中原有电子病历文档。图8是追加病历内容并签名后的更新电子病历文档。
具体实施例为使本发明的目的、技术方案和优点更加清楚明白,以下参照附图,对本发明进一步详细说明。如图1所示,本实施例包括客户端110、签名认证端120及远程数据库服务器130。 客户端110包含访问远程数据库的应用程序111和签名认证端访问接口 112 ;签名认证端120可以按序设置在数据库服务器端,也可设置在客户端附近的计算机内,包含签名认证端接口 121、核心模块122和数据库访问接口 123;核心模块122又包含防篡改认证模块122-1、数据缓存模块122-2、签名认证模块122-3、证书管理模块122-4、身份认证模块 122-5以及指令处理模块122-6 ;远程数据库服务器130包含数据库接口 131和远程数据库 132。其中
签名认证端访问接口 112、签名认证端接口 121、数据库访问接口 123、数据库接口 131 依次连通。在签名认证端接口 121、数据库访问接口 123之间,核心模块122完成系统的主要功能。应用程序111通过签名认证端访问接口 112与签名认证端120建立通信连接。签名认证端120通过数据库访问接口 123与数据库服务器130建立通信连接。签名认证端 120通过签名认证端接口 121向客户端110回送消息。核心模块122是整个设计结构的核心。防篡改认证模块122-1负责对追加新的病历文档前的内容进行完整性检验,保证旧的签名文档内容没有遭到篡改。数据缓存模块 122-2负责暂时存储从客户端110发送过来的签名文档以及从数据库132中提取出来的签名文档。签名认证模块122-3负责对客户端110发送过来的签名文档进行签名验证,确保签名的合法性。证书管理模块122-4负责存储签名者的公钥证书,并在需要时将证书提供给签名认证模块122-3和身份认证模块122-5。身份认证模块122-5负责与客户端110交互,验证签名者的真实身份。指令处理模块122-6负责分析客户端指令,指导身份认证模块 122-5、防篡改认证模块122-1以及签名认证模块122-3在合适的时间完成各自的功能认证。以上硬件可以采用现有设备,只要加载按本发明方法编制的软件即可,无需专用硬件。本实施例的总流程如图2所示,完成电子病历数字签名的全过程为
步骤201 客户端生成新建电子病历文档(参见图5 )后,向签名认证端发送包含签名者身份以及病人身份信息的追加签名请求;
步骤202 签名认证端提取出追加签名请求中的签名者身份、病人身份信息; 步骤203 签名认证端按以下步骤完成身份认证Α、签名认证端发送随机消息给客户端;
B、客户端签名者用私钥对该消息加密后反馈给签名认证端;
C、签名认证端调用签名者的公钥对消息解密,并比较与随机消息是否一致。步骤204:如是则进行步骤205,否则执行步骤215 ;
步骤205 签名认证端通过身份认证,与远程数据库建立连接,通过提取出的签名者身份、病人身份信息对数据库进行查询操作,并返回查询结果给客户端; 步骤206 若查询结果为空,执行步骤207,否则执行步骤208 ; 步骤207 查询结果为空,表明这是签名者对病人的第一份需要签名的病历文档,客户端直接用私钥签名后发送给签名认证端存储(如图6),具体签名过程示意图如图3所示,首先将待签名电子病历借助哈希函数映射为哈希值,再用私钥加密,形成数字签名;然后执行步骤212 ;
步骤208:查询结果不为空,表明数据库中已有该签名者对该病人的签名病历,签名认证端从数据库中提取出对应的原有电子病历文档(如图7),去除文档签名部分后保存,并发送一份到客户端;
步骤209 客户端将新建电子病历文档追加到接收的原有电子病历文档后,并对更新电子病历文档签名后(如图8)发送给签名认证端保存;
步骤210 签名认证端将更新电子病历中与原有电子病历文档对应部分进行比较。步骤211 如被篡改,执行步骤215,否则执行步骤212 ;
步骤212 签名认证端调用签名者的公钥对文档签名进行验证,具体验证过程示意图如图4所示,调用公钥将数字签名解密为哈希值,与对应电子病历借助哈希函数映射成的哈希值相比较。步骤213:判定签名是否为客户端签名者所签,若是执行步骤214,否则执行步骤 215 ;
步骤214 将签过名的更新电子病历文档存入数据库中,并删除原有电子病历文档; 步骤215 反馈结果消息给客户端。这样,就完成了整个基于XML的电子病历数字签名过程。由此过程可见,采用本实施例基于XML的电子病历数字签名方法,在实现对数据库中数据的查询、插入、修改、删除等操作的同时,还能保证数据库中数据的安全可靠,极大的方便了数据库的管理。且每个签名者只能查看自己签过名的病人的病历文档,可以防止病人隐私信息的暴露,避免了不必要的医疗纠纷。除上述实施例外,本发明还可以有其他实施方式。例如,硬件环境可以根据实际情况另行设置。凡采用等同替换或等效变换形成的技术方案,均落在本实用新型要求的保护范围。
权利要求
1.一种基于XML的电子病历数字签名方法,在相互通讯连接的客户端、签名认证端、以及远程数据库服务器构成的数字签名认证系统中,其特征在于认证步骤为步骤一客户端生成新建电子病历文档后,向签名认证端发送包含签名者身份以及病人身份信息的追加签名请求;步骤二 签名认证端提取出追加签名请求中的签名者身份、病人身份信息; 步骤三签名认证端按以下步骤完成身份认证 签名认证端发送随机消息给客户端; 客户端签名者用私钥对该消息加密后反馈给签名认证端;签名认证端调用签名者的公钥对消息解密,并比较与随机消息是否一致,如是则进行步骤四,否则执行步骤十一;步骤四签名认证端通过身份认证,与远程数据库建立连接,通过提取出的签名者身份、病人身份信息对数据库进行查询操作,并返回查询结果给客户端;若查询结果为空,执行步骤五,否则执行步骤六;步骤五客户端直接对新建电子病历文档签名后发送给签名认证端,然后执行步骤九;步骤六签名认证端从数据库中提取出对应的原有电子病历文档,去除文档签名信息后保存,并发送一份到客户端;步骤七客户端将新建电子病历文档追加到接收的原有电子病历文档后,形成更新电子病历文档,对更新电子病历文档签名后发送给签名认证端;步骤八签名认证端将签名后的更新电子病历文档中与原有电子病历文档对应部分进行比较,如发现被篡改,执行步骤十一,否则执行步骤九;步骤九签名认证端调用签名者的公钥对来自客户端的电子病历文档签名进行解密后,与对应电子病历文档的相应数据进行对比,若对比结果一致则通过签名验证,执行步骤十,否则执行步骤十一;步骤十将通过签名认证的电子病历文档存入数据库中,如存在原有电子病历文档则进行删除;步骤十一反馈结果消息给客户端。
2.根据权利要求1所述基于XML的电子病历数字签名方法,其特征在于所述步骤七中,还对电子病历文档中的重复内容进行合并处理。
3.根据权利要求2所述基于XML的电子病历数字签名方法,其特征在于所述步骤五中对新建电子病历文档签名以及步骤七中对更新电子病历文档签名的过程为,首先将待签名电子病历借助哈希函数映射为哈希值,再用私钥加密,形成数字签名。
4.根据权利要求3所述基于XML的电子病历数字签名方法,其特征在于所述步骤九的验证具体过程为,调用公钥将数字签名解密为哈希值,与对应电子病历借助哈希函数映射成的哈希值相比较,比较结果一致则通过认证。
5.根据权利要求4所述基于XML的电子病历数字签名方法,其特征在于所述客户端包含访问远程数据库的应用程序和签名认证端访问接口 ;所述签名认证端包含签名认证端接口、核心模块和数据库访问接口 ;所述远程数据库服务器包含数据库接口和远程数据库; 所述签名认证端访问接口、签名认证端接口、数据库访问接口、数据库接口依次连通。
6.根据权利要求5所述基于XML的电子病历数字签名方法,其特征在于所述核心模块包含用以对追加病历文档前的内容进行完整性检验、保证原有电子病历文档没有遭到篡改的防篡改认证模块,用以暂存客户端发来的电子病历签名文档以及从数据库提取的原有电子病历文档的数据缓存模块;用以对客户端发来的电子病历签名文档进行签名验证、确保其合法性的签名认证模块;用以存储签名者的公钥证书、并在需要时提供给签名认证模块的证书管理模块;用以与客户端交互、验证签名者真实身份的身份认证模块以及用以分析客户端指令、指导其它模块完成各自功能的指令处理模块。
全文摘要
本发明涉及一种基于XML的电子病历数字签名方法,属于医疗信息化技术领域。该方法在相互通讯连接的客户端、签名认证端、以及远程数据库服务器构成的数字签名认证系统中,通过生成新建电子病历文档后发送追加签名请求;提取出追加签名请求中的信息;完成身份认证;与远程数据库建立连接;以及防篡改验证等步骤,将通过签名认证的电子病历文档存入数据库中,如存在原有电子病历文档则进行删除;实现所需电子病历的数字签名。具有签名认证端设置方便、节省存储空间、安全性高等显著优点。
文档编号H04L29/06GK102457508SQ20101052790
公开日2012年5月16日 申请日期2010年11月2日 优先权日2010年11月2日
发明者冯江, 宋余庆, 陈健美 申请人:江苏大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1