张泽宇 郭宜家 刘宇航 刘子馨 赵铠塬
摘要:随着国内“数字化医院”建设的蓬勃发展,各医疗部门对于电子病历系统的需求也在迅速增长,因此电子病历的安全性问题也越加突出。根据该问题对满足安全性的电子病历管理系统进行了设计与实现。文章采用C/S架构完成了电子病历信息管理系统的基本功能,包括数据读写、查找、分类等。为了保障其安全性,本项目组研究了 XML的相关安全技术规范标准,将电子病历信息写入XML文件中进行存储传输。通过AES加密、多重数字签名以及权限管理等方法满足电子病历的机密性需求、认证、完整性与抗抵赖性需求。
关键词:电子病历系统;信息系统;安全性;加密;解密
电子病历(Electronic Medical Record,EMR)也叫计算机化的病案系统或基于计算机的患者记录,是指以电子化方式管理的有关个人医疗、保健和健康状态的信息,是用电子设备保存、管理、传输和重现数字的患者医疗记录。电子病历系统是指支持病历信息的采集、存储、处理、传输、保密的系统。
近年来,IT技术和电子病历的研究应用发展较快,通过电子病历实现医疗信息的共享,已经成为各国医院信息化程度的指标之一。我国对于电子病历应用较晚,所以目前的技术水平仍然处在不断提高的阶段,存在的问题仍然较多。例如我国电子病历软件环境不是很成熟,缺乏统一的电子病历信息标准等。然而目前最主要的是电子病历的安全性问题,想使电子病历拥有足够的法律效力,其安全性一定要得到保证。电子病历是技术性的数据信息,属于电子数据的一种,在计算机上篡改或删除比较容易,且不留痕迹,其证据效力很难保证,因此电子病历的安全性就显得更为重要[1]。
1 电子病历信息管理系统的实现
1.1 系统架构与开发模型
本系统使用的C/S架构进行完成。用户通过与客户端的界面进行交互,完成相应的需求。系统分为3个主要部分,分别为数据显示部分(客户端)、业务逻辑部分(服务器端及数据访问层)和数据库,服务器端使用了Linux语言进行完成。其中数据显示部分用来实现“电子病历系统”的用户界面,为用户操作提供请求平台,将操作请求发送给业务逻辑部分,将用户请求的数据结果以文字或表格等形式显示给用户,该部分选择了无需配置使用环境的C#语言进行编写。数据显示部分与业务逻辑部分的数据传递使用了安全外壳协议(Secure Shell, SSH),并且对数据进行了安全散列算法(Secure Hash Algorithm, SHA)加密和数字签名,保证了数据传输的安全性和完整性,系统架构如图1所示。
业务逻辑部分包括服务器及数据库连接。服务器接收到数据显示层(view)发来的访问请求后,根据不同的操作请求,控制跳转,通过数据访问层实现对数据库的增删查改操作,对数据库返回的信息进行处理,再向数据显示层返回访问结果。数据库部分实现对数据的存储,并根据数据访问层发来的语句进行相应的操作,再将数据结果返回给业务逻辑部分,如图2所示。
1.2 系统需求分析
本系统要对不同数据来源的病人信息统一与集成管理。本系统需要做到在保证安全性的情况下对系统进行有序高效的管理,同时要求系统具有良好的易用性、稳定性和扩展性。本系统主要需要实现以下几部分:用户部分、医生部分、电子病历管理以及检索与数据分析,该系统的具体模块功能如图3所示。医生模块主要实现对病人基本信息的改动,增加或删除病人,改变病人的就诊状态,并且保证医生可以随时打印病人的病历。病历模块就是含有病人的基本信息以及住院信息,能够自行按照时间排序,在处理过后进行存档,以便随时调用。在数据元素的管理上,为了在现有系统上方便对所有页面上的数据项更好地管理,本系统在数据库表中保存了数据项在页面上的控件ID、数据属性等信息。在安全性方面电子病历需要满足机密性、完整性与抗抵赖性,并且可以使其具有法律效益。系统的性能需求需要包括运行时间,系统的安全性,界面的友好性等。对于电子病历而言,首先要确定系统的容量,确保有足够的容量处理数据。其次要考虑到系统的响应时间、处理时间以及高峰期间其允许偏离范围。同时为提高系统的可靠性必须采用模块化和结构化设计以提高系统的容错能力。最后要有适应用户特点的智能化人机交互界面,以便用户能够更加简便地操作系统[2]。
1.3 系统E-R图与表结构设计
本系统的实体类型包括病历、住院病历扩展表、病人、医生、科室、医院。一份病历拥有多份住院病历扩展表,包括该住院期间的日常检查、医生查房结果等,除此之外,每个病历实体包括该次就诊得到的处方、诊断结果、化验结果、影像结果等,完整记录了病人的单次就诊记录。医生、科室、医院3个实体类型在数据库中对应医生信息表;病人和住院病历扩展表在数据库中则分别对应病人个人信息表和病人住院信息表[3],系统E-R图如图4所示。
本系统主要有3个表,分别为用户表(user)、病人病历信息(patient_info)、病人基本信息(patient)。另外还有一些辅助基本信i管理的表如药物表(Medicine)、西医主诉表(West Description)等。其中的病历信息我们使用病人身份号作为主键并与病人基本信息相关联,在病历信息表中存储病人信息的XML文件路径,为了确保安全性服务器存储的文件当然也是被加密过的。用户表则是对使用软件的用户进行管理,其中利用数字代表不同的权限。表中大部分基本元素是采用int型(自增量或手动增量),有效地节省了磁盘的存储空间。
2 电子病历安全性
2.1 电子病历加密与解密本系统采取常用“数字信封”技术的方式同时在加密技术上选择安全性比较高的高级加密标准(Advanced Encryption Standard,AES),加密方式。本文接下来将对如何利用加密方式保证电子病历的安全进行讨论。首先为了保证电子病歷信息的规范化以及便于后期的传输与管理,将电子病历的相关信息以XML文档的方式存储,接着对XML文件进行加密。RSA加密算法在加密过程中首先对密钥进行初始化,获得跟处理密钥相关的RSA公钥和私钥,使—抓蝴)用KeyPairGenerator类的工厂方法获得生成RSA密钥的算法,从中获取密钥对放在Map中以便使用。由客户端使用对称密钥Key加密存储电子病历信息的XML文件,同时使用和服务器协商好的RSA公钥通过base64解码后加密该对称密钥Key,将这两个数据项通过信道传送给服务器。服务器接收到被加密处理过后的电子病历信息之后,先用自己的RSA私钥对对称密钥Key解密,再用该对称密钥Key解密已被加密的电子病历文件。加密中首先使用SHA3-512HASH函数对电子病历文件内容求消息摘要,接着使用AES算法进行加密,密钥长度为256 bits,使用OFB模式(Output Feedback)即输出反馈模式:明文模式被隐藏;分组密码的输入是随机的;用不同的IV,一个密钥可以加密多个消息;明文很容易被控制窜改,任何对密文的改变都会直接影响明文;填充方案选择了PKCS5Padding,明确定义了Block的大小是8位。解密首先定义对已被加密处理过的文件输入流和对解密后的电子病历的文件输出流,对已被加密处理过的电子病历文件的文件头进行检验并进行解密。通过对电子病历的加解密作为保障其安全性的第一步[4]。加解密流程如图5所示。
2.2 多重数字签名
为了保证电子病历信息传输的完整性、医生的身份认证同时防止交易中的抵赖行为发生,本系统对电子病历进行了多重数字签名。签名流程如图6所示,其工作原理是首先医师生成自签名证书,根据相应用使用的签名算法生成密钥对,并将其存在密钥库文件中,由客户端对该医生负责的电子病历文件进行数字签名,服务器进行验证,来保证在传输途中电子病历没有被篡改。同时考虑到一份病历可能需要多个
医师进行审阅,同时医师的等级有所不同,因此使用结构化多重数字签名对电子病歷进行签名认证。在结构化签名方案中,不同用户按照事先指定的签名结构进行签名。密钥库作为存储数字签名及验证的公钥和私钥的地方,是个受信任机构。正式的数字签名工作需要从密钥库文件中取出私钥,首先用hash算法求取该电子病历文件的消息摘要值,使用私钥加密消息摘要值最后用加密的消息摘要值和源文件组成数字签名文件。
验证工作首先由服务器从密钥库文件中取出公钥,用hash算法对已被数字签名的电子病历文件重新计算消息摘要,同时把加密后的消息摘要使用公钥解密,把新生成的消息摘要和解密后的消息摘要进行比对,如果相同,则验证通过,证明电子病历未被篡改,反之,则验证失败,证明电子病历被修改过[5]。
2.3 电子病历权限管理
最后本文就电子病历的权限进行了研究与讨论。考虑到医院接触病人病历的人员较多,不同等级与不同科室之间的医师对不同病人具有的权限也不同,所以对医师的权限进行明确的划分也是电子病历系统的一个主要问题。首先对于不同等级的医师而言,实习医师对病历进行的操作需要有主治医师的签名才可以完成,本身只具备读权限。住院医师对患者住院部分具有读写权限,同时可以对患者出院转院等信息进行修改,对于其他信息包括主治意见等仅具有读权限。主治医生对于病人的基本病理情况、病情诊断等具有读写权限。最后的主任医师对于病人的信息具有读写权限,同时可以对病人的病历进行管理与整合。对于不同等级的医师,在得到上一级医师的签名时才可以进行超过本身权限的操作,而其他不同科室的医生如检验等只能针对自己科室的相关内容对病历进行录入修改等。明确的权限保证了病历能够保证电子病历的真实可靠,出现问题后可以根据权限追责,避免出现无人负责的医疗纠纷等问题。
3 结语
随着当前时代的发展,数字化医院已经成为医院发展的必由之路,而电子病历系统的应用是数字化医院的标志之一,也是医院实现现代化、智能化、科学化、规范化的管理的必然产物。而电子病历的安全性问题也将越来越突出,本文通过实现对电子病历存储传输的加密,多重数字签名的验证以及确定明确的权限等级来保证电子病历的安全性,同时保障其法律效益。然而关于电子病历的安全性还涉及很多其他方面,随着技术的成熟,电子病历系统将最终应用于各大医院并实现跨平台的信息共享,为解决医疗纠纷和处理医患关系提供巨大的帮助。
[参考文献]
[1]CHRIS K,STEPHEN M.ASP.NET XML高级编程一C#篇[M].刘爽,译北京:清华大学出版社,2003.
[2]徐迎晓.JAVA安全性编程实例[M].北京:清华大学出版社,2003.
[3]陈乐君,石锐,李初民.基于XML多重签名的电子病历安全机制[J].计算机科学,2007(12):136-138.
[4]施阳,张海燕,戴德伟.基于JavaEE的毕业设计管理系统设计与实现[J].软件导刊,2015(2):86-88.
[5]王延青.电子病历与医院信息化管理[J].中国卫生统计,2006(4):381.