作为医疗卫生领域的一个新的关注对象——个人健康档案来说,其在卫生信息化平台中的面向互联网应用的安全传输是当前需要解决的问题之一。因个人健康档案携带有大量敏感信息,为了使其能在公共网络中传输交换,所以要保证个人健康档案的安全性首当其冲,故对个人健康档案实现安全、高效地加密即是本文的目的。

一、个人健康档案的组成

1、个人健康档案

个人健康档案持续记录了一个人一生中的各种健康状态,它必须是收集、存储每个人终身的各种健康信息并在得到授权的情况下可供指定的对象查询。个人健康档案包括的内容如下:

(1)个人基本信息例如姓名、年龄、联系方式等;

(2)各种影像诊断资料;

(3)每个阶段体检情况的记录、亚健康检查等。

(4)各种病史例如用药史、过敏史,注射疫苗史等病史;

(5)各种住院出院小结;

通过以上内容我们可知个人健康档案包括个人基本信息、个人健康信息以及住院信息等。这意味着个人健康档案的信息种类和来源都很复杂而且信息量庞大,更为重要的是其包含敏感的个人信息。

2、个人健康档案的格式

个人健康档案的信息来源于多个方面,数据具有异构性。因此所有的数据定义必须遵循卫生机构颁布的医院基本数据集的相关规定,即数据结构必须拥有统一的规范和标准。近年来,作为医疗信息行业标准制定的组织机构,HL7组织将XML技术和医疗行业标准相结合推出了HL7V3和CDA标准,实现了数据交换,为医疗信息共享打下了基础。在我国医疗体系的平台中,病史、住出院小结及体检的格式一般参照的是HL7 CDA( Health Level 7 Clinical DocumentArchitecture)标准,影像诊断资料参考的格式是DICOM( Digital Imaging and Commumcations in Medi-cine)标准。另外,个人健康档案要求能在一个异构平台上进行传输、交换,由于XML文档具有可扩展性、可读性、平台无关性等特点,能够很好地解决个人健康档案传输过程中的信息共享问题。同时,为了保证数据的一致性和避免非法数据的产生,一般采用XML Schema描述及验证XML文档的结构及格式。XML是跨平台的,面向Internet环境的、只依赖于内容的技术,在处理结构化文档方面具有很大优势。

在DICOM文件中,数据元素是基本单元并通过相应的标签唯一确定,同时数据元素构成了所有的数据集。对于基于XML格式的个人健康档案,可以将DICOM格式的医学影像转换成XML格式并添加到文档中,即依据DICOM中的IOD(Information ObjectDefinition)标准对影像的头部分进行组合,同时,以Base64编码图像部分,最后将头信息和图像一起添加到XML格式文档中。如下是一个带有医学影像的个人健康档案的XML片段:

< ImageDocument >

< Patient >

< Name >

< lastname > zhang < /lastname >

< Firstname > cheng < /Firstname >

< /Name >

< Sex > male

< Age > 32

< /Patient >

< Device > CT

< Image > 4AAQSkZJR--,

< /lmageDocument >

其中从< Patient>元素到元素是头信息部分,而< Image>元素中包含的即为Base64编码后的图像数据。

二、个人档案加密方法

因个人档案一般采用XML Schema描述及验证XML文档的结构及格式,所以我们就来看一下xml格式是如何加密的。

1、XML加密特点

XML加密最大的特点是可以选择多种加密方式,即它可以按照加密粒度的不同分别对整个文档加密、对加密文档中的某些元素加密和对某些元素的内容加密。与现在网络上一些主流安全协议(例如IP安全性IPSec、传输层安全性TLS、安全套接字层SSL)只能对文件中的所有数据加密,而不能对某些数据元素加密,使得加密粒度过粗相比,XML不仅可以加密整个文件的数据,而且可以对指定的子元素数据进行加密,而对其它不重要的数据不加密,因此解决了不同类型的安全性问题。

2加密文档结构

在W3G(World Wide Web Consortium规范中,对基于XML格式的文档或数据进行加密后,按照< EncryptedData>元素的结构创建新元素,替换掉原文中相应的部分,因此得到的加密文档格式仍然是XML格式。其中,EncryptedData元素作为XML加密文档部分的根元素,它又包含若干子元素。EncryptedData元素的语法结构如下:

< EncryptedData ld? Type? MimeType? Encoding? >

< EncryptionMethocV>?

< ds:Keylnfo>

< EncryptedKey>?

< AgreementMethod>?

< ds:KeyName>>?

< ds: RetrievaIMethod>?

< /ds : Keylnfo >

< CipherData >

< CipherValue > ?

< CipherReference URL? > ?

< /CipherData>

< EncryptionProperies>?

< /EncryptedData>

对上述语法结构作简要说明,“?”表示可以出现一次或不出现,“*”代表可以出现多次或不出现。

(1)EncryptedData元素是根元素,代表整个被加密的数据部分,由EncryptionMethod、ds:Keylnfo、CipherData和EncryptionProperties等子元素组成。

(2) EncryptionMethod元素提供了对加密对象加密所使用的加密算法。

(3) ds: Keylnfo元素包含了加密算法的密钥相关信息,该元素具有很大灵活性,根据通信双方约定,可能是一个密钥名称、密钥值、数字证书,甚至是获得密钥的转换方法,目的是确保密钥的安全性,该元素包括EncryptedKey AgreementMethod、ds: KeyName和ds:RetrievalMethod等4个子元素。

(4) CipherData元素包含CipherValue和CipherReference两个子元素,当加密数据信息保存在XML文档中时,直接使用CipherValue子元素密封加密后的数据;如果加密后的数据置于文档外部的某一个URL地址时,则将CipherReference子元素表示该URL地址。

(5) EncryptionProperties元素提供了加密数据和密钥的附加信息,比如时间戳、加密序列号等。

3、加密方式和算法

XML加密采用了对称算法和非对称算法,前者用于XML数据的加密,后者用于管理对称算法的密钥。这样就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。一般来说,非对称加密算法RSA和ECC,建议采用1024位,对称加密算法3DES和AES采用128位即可Q W3C在其XML加密规范中规定了多达11种加密算法,具体可参见《XML Encryption Syntax andProcessing》中的相关规范。本文中的具体加密方式为AES对称加密算法与RSA非对称算法的结合,就是采用RSA算法来加密AES算法的密钥,采用AES算法来加密XML的数据,以达到兼顾速度与安全两方面的目的。

4、XML加密流程

首先,接收方R通过非对称加密算法RSA生成一对非对称密钥,分别为公钥PUK和私钥PRK,并将生成的公钥PUK和非对称加密算法RSA传给发送方;接着,发送方将XML明文数据转换为文档对象模型,提取要加密的对象(包括整个文档、特定的元素或内容);同时,发送方根据对称加密算法AES生成一个秘密的对称密钥SMK,并使用对称密钥SMK对XML文档中的预定对象进行加密;将加密后的信息仍以XML数据格式给出,替换原有的XML数据,同时用接收到的公钥PUK和非对称加密算法RSA对对称密钥SMK加密;最后,发送方将加密的数据、加密的对称密钥SMK以及其它信息结合在一起,生成一个新的加密XML文档,并将新的XML文档发送给接收方。

5、xml解密流程

接收方解析收到的XML文档,取出加密的数据、加密的对称密钥SMK和需要的附加信息,使用相应的非对称算法RSA和私钥PRK解密获得对称密钥SMK,之后使用SMK解密XML文档中被加密的部分得到XML明文文档。

XML加解密流程如图1所示。

XML加解密流程

三、个人档案加密实现与结果分析

1、个人档案加密实现平台

本文采用C#语言在Visual Studio. NET 2008环境下实现基于XML的个人健康档案的加密。由于微软公司不断完善其,NET平台下的XML的各种技术,对XML的加密可以使用其类库来编程,实现了完全的内部支持。在.NET Framework的XML加密技术中有两个重要的命名空间,即System. Xml与System.Security. Cryptography,它们中的一些类可以为加密程序实现提供有力的支持,例如直调用接Cryptography、RSA类来生成RSA非对称密钥,并以XML文档形式分别保存私钥与公钥。

2、实现结果

对< Image>元素进行加密,得到的部分结果如下:

< Name >

< lastname > zhang < /lastname >

< Firstname > cbeng < /Firstname >

< Sex > male < /Sex>

< Age >32< /Age >

< Device > CT< /Device >

-< EncryptedData Type = " http ://www. w3. org/2001/04/xmlenc#Element" >

< EncryptionMethodAl~;onthm = .. http://wwwi w3. org/2001/04/xrnlenc#aes128 -cbcl~ / >

< ds : Keylnfo xmlns : ds = " http ://www. w3. org/2000/09/xmldsig#" >

< ds : Keylnfo>

< ds : KeyName > RSAKey< /ds : KeyName >

< /ds : Keylnfo >

< CipherData >

< CipherValue >

< EncryptedSymmetncKey > Nb4A43dH6 ,

< /EncryptedSymmetricKey >

< EncryptedSymme.tricIV > RQsKljIEBtV--

<< /CipherValue >

< /CipherData >

< /ds : Keylnfo >

< CipherData > --

< C ipherValue > DlbIB + rBYWip2Fxll c6BQg.;.-.- < /Ci-pherValue >

< /CipherData >

< /EncryptedData >

< /ImageDocument >

其中,< EncryptedData>元素部分就是对医学影像部分进行XML加密后的内容显示,其格式仍然是XML下面对其中一些元素作必要的说明:

(1)子元素,使用URI来唯一标识所采用的加密算法,其目的是确保通信双方可以在加密算法上保持一致。

(2)子元素,表达了加密时所使用的密钥信息,它可以根据通信双方的约定,记录密钥名称、密钥值、数字证书,甚至获得密钥转换方法的描述。从而确保密钥的安全性。

(3)子元素,说明被加密了的数据。

(4)子元素,描述加密数据和密钥的附加信息,例如时间戳、加密序列号等。

发送者对XML文档元素加密时,将创建符合以上结构的< EncryptedData>元素;接收者根据从元素中得到的解密所需的加密算法、参数和密钥信息,正确地进行解密。

3、安全与效率分析

本文的加密采用的是对称加密和非对称加密相结合的混合加密方式a其中,对称加密采用的是128位AES加密方法,在对称加密中AES是目前公认的最好的大数据量加密标准,128位也足以满足现在的安全要求,当然随着计算机的快速发展256位AES将成为日后主流选择。另外,非对称加密算法使用的是RSA,RSA和ECC是非对称加密算法的代表,由于在相同的安全强度下,ECC较RSA具有空问需求小、运算速度快、带宽资源需求低等优点,因此ECC更多运用在数字签名方面,菲对称加密一般则采用的是RSA。

同时,实验实现的图像文档加密速率达到IOM/s,如果再采用基于小波变换的JPEC-2000有损压缩算法,对影像进行20:1的有效压缩,那么对压缩图像的加密效率将大大提高。因此,对于几十兆,甚至是几百兆的医学影像文档加密所需时间将控制在几秒以内a故RSA和AES的混合加密方式不仅为数据安全多加了一道保险,同时也保证了加密效率,满足实际使用时的要求。

小知识之健康档案健康档案,是记录每个人从出生到死亡的所有生命体征的变化,以及自身所从事过的与健康相关的一切行为与事件的档案。具体的内容主要包括每个人的生活习惯、以往病史、诊治情况、家族病史、现病史、体检结果及疾病的发生、发展、治疗和转归的过程等。