XML文档信息的加密方法及其实现
2008-07-17
作者:王 军, 李 菊
摘 要: 以XML文档的结构模型为基础,研究了XML 的加密原理。着重探讨了XML文档的加密及解密机制,详细叙述了运用3DES" title="3DES">3DES算法实现XML文档信息的加密方法。
关键词: 加密 XML 3DES
XML由于其开放性现已成为万维网重要的信息发布标准和信息交互标准,越来越多的应用之间采用XML作为数据交换的格式[1],XML的数据表示和数据交换两大功能可以很好地满足各类应用的要求。然而,基于Web的数据信息服务中的安全问题却有待进一步解决[2],XML数据的安全问题现已成为当今各类应用的瓶颈之一。
典型安全协议如SSL/TLS受限于网络通信端点,只能对全部信息进行加密,而不能有选择地对部分信息进行加密,传送大量数据时会有性能方面的问题,而且SSL只能确保点对点的安全,无法保障端到端的安全[3]。GSS-API和基于GSS-API的安全机制" title="安全机制">安全机制SPKM和Kerberos主要是为松散连接的体系结构而设计的,GSS-API应有独立于传输的安全机制,安全机制独立性意味着密码技术、身份表示和数据签名等潜在技术被完全封装。VPN的解决方案存在费用昂贵,维护配置烦琐的缺点[4]。为更好地实现网络数据的安全交换,本文讨论运用3DES加密算法进行XML文档信息的加密及解密,并给出具体实现方法。
1 XML文档结构
XML文档结构可以表示成类树形结构" title="树形结构">树形结构,称之为元素树。树的顶点由唯一的字符串标记,称为对象标识;树的边用Element Tag标记;树的内部节点用一组属性值标记,属性列表包含了该元素的所有属性,即属性名、属性值和属性类型,树只有一个根节点。
一棵元素树就是一个DTD所包含元素之间的关系树,它的叶子节点表达式是一个树表达式,该表达式定义了以叶子节点的父节点为根的关系树。元素树的每一个节点对应于DTD中的一个元素。每个节点包含属性列表、子元素列表和其他信息。子元素列表包含该元素的所有子元素,每个子元素对应一个新的节点。其他信息包括:父节点、元素内容模式、元素内容出现次数和元素文本内容等[5]。
2 3DES加密算法
加密算法主要分为两大类:对称密码加密算法与非对称" title="非对称">非对称密码加密算法[6]。对称密码加密算法如DES、3DES、AES等,非对称密码加密算法如DSA、RSA等。由于算法复杂度的区别,采用对称密码进行加密和解密的速度通常比采用非对称密码进行加密和解密的速度快得多[7]。XML加密支持当前流行的一系列加密算法如:块加密、流加密、对称加密、非对称加密、消息摘要等。考虑到电子商务的安全性及加密效率的需求,XML中的数据加密" title="数据加密">数据加密采用对称密码实现。
3DES(即Triple DES)是DES加密算法的一种模式,是DES向AES过渡的一种加密算法。DES采用分块加密方式,将明文分割成64bit的块,使用56bit密钥对数据块进行加密,并对64bit的数据块进行16轮编码。3DES使用三条64bit的密钥对数据进行三次加密。加密分为三步,每一步的密钥都不一样,破译将比较复杂,与DES相比,3DES更为安全。
3 XML文档加密方法
根据XML的类树形结构,可以建立符合XML语法规则的数据标签
采用
4 XML文档加密实现
使用对称加密算法3DES对XML文件进行加密首先要使用XML 的DOM编程接口技术选择需要加密的内容,然后使用加密算法对其进行加密。
清单1:
……
清单1给出了企业会员信息的XML形式样例。其中,会员卡号是属于保密信息,需采用加密方法进行加密。
清单2:
……
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load("Example.xml");
TripleDESCryptoServiceProvider tDESkey = new TripleDES
CryptoServiceProvider();
TrippleDESDocumentEncryption xmlTDES = new TrippleDES
DocumentEncryption(xmlDoc, tDESkey);
xmlTDES.Encrypt("creditcard");
清单2是XML文档相关信息的加密实现。首先,将Example.xml文件读入,通过创建用户自定义类,传入参数Creditcard进行加密。如果要加密XML文件中的其他元素或节点,可以结合使用XPath表达式定位该节点。微软在.NET框架中扩展了W3C的DOM标准,对XmlNode对象提供了OuterXml、InnerXml和InnerText三个属性,分别用来表示当前节点和它所有子节点的XML标记。
清单3:
protected XmlDocument docValue;
protected TripleDES algValue;
public XmlDocument Doc { set { docValue = value; } get
{ return docValue; } }
public TripleDES Alg { set { algValue = value; } get {
return algValue; } }
public TrippleDESDocumentEncryption(XmlDocument Doc,
TripleDES Key)
{if (Doc != null) docValue = Doc;
else throw new ArgumentNullException("Doc");
if (Key != null) algValue = Key;
else throw new ArgumentNullException("Key"); }
清单3列出了Tripple- DESDocumentEncryption类的具体实现。在清单3的基础上加入XML文档的输入及输出,即成为一个完整的XML加密程序。经过加密的XML文档发送到接收方后,使用相同的密钥按相同的算法就能进行解密,解密过程与加密过程正好相反。
清单4:
public static void Decrypt(XmlDocument Doc, Symmetric
Algorithm Alg, string KeyName)
{ EncryptedXml exml = new EncryptedXml(Doc);
exml.AddKeyNameMapping(KeyName,Alg);
exml.DecryptDocument(); }
清单4列出了XML解密过程的核心算法。其中,参数Doc指向XML密文;Alg存储解密该XML密文所需要的3DES Key;字符型变量KeyName说明该密钥的名称。
清单5:
…… t5ml0DpqO /CipherValue>
清单5是加密
本文以XML文档的文档结构模型为基础,运用3DES对称加密算法实现了基于XML文档的数据加密与解密,实现了对XML文档内部相关信息的加密,把加密粒度细化到XML文档元素和属性级别,同时还实现了对同一文档的不同信息部分实施不同的XML安全策略,使得同一文档加密后对不同的用户可以呈现不同视图,这对与XML相关的安全领域应用很有意义。
参考文献
[1] 曹颖,苏锦海. 基于XML 的信息加密方法及其实现[J].计算机工程与设计, 2006,27(6):1045-1047.
[2] 李斌,陈钟荣.J2EE平台技术在气象信息系统中的应用研究[J].南京气象学院学报, 2006,29(2):274-281.
[3] RESCORLA E. SSL与TLS[M]. 北京:中国电力出版社, 2002.
[4] GUDIVADA V N, RAGHAVAN V V. Content based image retrieval systems[J]. IEEE Computer, 1995,28(9):
18-22.
[5] SODIUM B. Exploring XML encryption [EB /OL]. http://www.106. ibm. com/developerworks/xml/,2003.
[6] HUGHES M. Decryption transform for XML signature [EB/ OL].http: //www.w3.org/TR /xmlenc-decrypt, 2003.
[7] 叶晓彤. 基于XML部分加密的局部安全通的实现[J].四川师范大学学报:自然科学版, 2003,26(4):433-436.