kaiyun官方注册
您所在的位置:首页 > 其他 > 业界动态 > XML文档信息的加密方法及其实现

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语法规则的数据标签元素,它是XML加密语法的核心。元素从抽象类型派生,与元素一起用来将加密密钥从发起方传送到已知的接收方。元素描述的加密数据可以是根元素对应的非空树、中间元素对应的非空树或叶子元素中的数据内容。
    采用元素对XML数据进行加密的过程,就是以元素替换XML文档中的相应非空树的过程。根据被加密元素在原XML中的层次关系,加密后的 元素可能成为新的XML文档的根元素的子元素,但一个元素不能是另一个元素的父元素或子元素,即元素不能嵌套使用。在应用中,若需要对元素中的内容进行加密,则元素将作为的子元素进行替代。
4 XML文档加密实现
    使用对称加密算法3DES对XML文件进行加密首先要使用XML 的DOM编程接口技术选择需要加密的内容,然后使用加密算法对其进行加密。
    清单1:
   
   
    ……
    
            123456789 
            2007-2-26 
      

   

    清单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:
   
   
        Wang Jun
        02512345678
        wangjun@sohu.com
        
       
       
        QWU8DkJHdmHS2frkeFj414F+b85EQ
             …… t5ml0DpqO /CipherValue>
       

       
  

    清单5是加密元素后的XML 文件。在加密后的XML文件中,整个元素都被元素取代,加密后的数据以Base-64编码格式存放于元素的子元素内。
    属性被指定为媒介类型,本例是对整个元素进行加密的明文替换,所以使用了http:// www.w3.org/2001/04/xmlenc#Element作为属性值。元素是的一个子元素,其主要功能是识别加密算法和可能的辅助参数,如密钥长度、填充长度、加密模式等。加密算法用URI标识符表示。在本例中通过URI表示使用了tripledes加密,并使用CBC进行填充。
    本文以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.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。
Baidu
map