4 XML加密
XML加密为加密结构化数据与以标准XML格式表示加密结果提供了一种标准的方法。XML加密允许加密任何数据,这些数据既可以是一个完整的XML文档或者XML文档中的特定元素,也可以是从外部引用的任意非XML格式数据。加密结果最后被表示为一个XML加密元素<EncryptedDada>。
电子病历的加密意义在于将一些敏感的数据保护起来,而将不敏感的数据开放,而不是将整个文件加密,发送方使用接受访的公钥加密数据,只有接受方才能使用自己的私钥解密出数据,提高了数据的安全性。
W3C关于XML加密有详细的描述,可见正式出版的《XML Encryption Syntax and Processing》规范2,规范中规定了多达11种的加密算法,本文采用其中的3DES对称加密算法与RSA非对称算法。针对具体的应用,就是采用3DES算法来加密XML的数据,采用RSA算法来加密3DES算法的密钥,以达到速度与安全性两方面的优化组合。
针对清单1的XML病历文档,病人的个人信息是不希望其他人看见的,所以对这些信息进行加密,加密后用<EncryptedData>元素替换<PersonalInfo>元素得到加密后的XML文档如下,清单2给出加密后的XML片段。
<PersonalInfo>
<EncrytpedData Type=http://www.w3.org/2001/04/xmlenc#Content xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm=http://www.w3.org/2001/04/xmlenc#tripledes-cbc xmlns="" />
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmlsig#">
<EncryptedKey xmlns="">
<ds:KeyInfo>
<ds:KeyName>RSAKey</ds:KeyName>
</ds:KeyInfo>
<CipherData>
<CipherValue>
<EncryptedSymmetricKey>Nb4A43dH6…</EncryptedSymmetricKey>
<EncryptedSymmetricIV>RQsK1jlEBtV…</EncryptedSymmetricIV>
</CipherValue>
</CipherData>
</EncryptedKey>
</ds:KeyInfo>
<CipherData xmlns="">
<CipherValue>Hfrd1Pd0yVSGo6k…</CipherValue>
</CipherData>
</EncrytpedData>
</PersonalInfo>
在清单中<EncryptionMethod>元素指定了加密的算法,< KeyInfo >元素指定的是密钥信息,其中< KeyName >元素是指RSA非对称密钥的名称,第一个<CipherData>下的<. CipherValue >元素指使用RSA的公钥加密3DES密钥后的密文。第二个<CipherData>下的<. CipherValue >元素指使用3DES算法加密原文档<PersonalInfo>元素后的密文。
|