论文部分内容阅读
[摘要]XML作为传输和交换的数据格式标准,保证它在传输和交换过程中的安全性是非常重要的。W3C已提出许多安全相关的规格书,包含有XML数字签名、XML加密和XML密钥管理。针对上述两种方法的特性,从安全性和效率两方面上做比较以及探讨。
[关键词]XML 加密 XSLT
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0820073-01
一、W3C的XML加密方法
W3C所提出的加密方法除了对整份XML文件加密外,还可以针对XML文件中的元素(element)来加密,或是部分的XML文件来加密(包含有子元素的元素),甚至对元素内容(element content)加密。加密过后的XML文件还是以XML的格式呈现。
在加密XML文件时,第一步会先将XML文件转换成DOM对象,第二步是利用对称式加密算法取得加密XML的共享密钥,第三步是利用非对称式加密算法取得公私密钥对中的公钥来加密那把共享密钥,第四步是利用XPath定义并指出需要加密的元素,第五步完成加密产生新的XML文件。
而在解密XML文件时,第一步先把加密过的XML文件转换成DOM对象,第二步利用加密时产生的公私密钥对中的公钥取得私钥,第三步利用XPath指定被加密过的元素,第四步取得加密时的那把共享密钥,第五步完成解密恢复成原先未加密前的XML文件。
二、使用XSLT加密的方法
XSLT(XSL Transformations)是由XSL(Extensible Stylesheet Language)发展而来的一种基于XML的语言,用于将一种XML文档转换成另一种XML文档。这个转换的特性让人联想到可以应用在XML文件加解密上面。以R.G.Bartlett和M.W.Cook所提出的方法为例,它利用XLST以及XSLT的增设功能编写加密以及解密的Stylesheet来达到针对XML文件的部分内容或是单一元素加解密。
加密时,第一步是先读入XML文件以及用来加密的XSL文件。第二步是XSLT处理器读取到用来加密的XSL文件中增设功能所呼叫的Java加密程序时,把欲加密的元素或部分XML文件交给所呼叫的Java加密程序执行产生密文传回。第三步再利用用来加密的XSL文件把传回的密文写入到欲加密的XML文件中。解密的过程则是把上面加密过后的XML文件以及用来解密的XSL文件读进XSLT处理器中,步骤和加密的步骤一样。
三、两种加密方法的比较
(一)两种加密方法的相同点
W3C的方法以及使用XSLT的方法两者相同之处很多:
就对XML文件加密的细致程度来说,两种方法都可以加密整份XML文件、部分XML文件、XML元素、XML元素内容,而加密过后的XML文件都是以XML格式输出。而对选取加解密算法上来说,两种方法都可以使用传统密码学上的加解密演算法来达成针对XML文件加密。
在该如何定位以及指明XML文件加密部分这个问题上,两种方法都是使用到XPath的语法来指定加密的部分。而最吸引人注意的一点就是这两种方法针对一份XML文件加密,都可以针对文件中多个部分加密,并且每个部分可以使用不同的加密算法。
(二)两种加密方法的不同点
W3C的方法以及使用XSLT的方法两者不同之处非常明显:
先以加密过后的XML文件内容来看,W3C的方法是以
元素来取代欲加密的XML文件元素,改变了原先XML文件的形式,而使用XSLT的方法是把密文写进欲加密的XML文件元素,并没有改变原先XML文件的形式。
再来我们来看针对XML文件加密过程中的不同点,W3C的方法一次只能做到针对XML文件的一个区块做加密,而使用XSLT的方法则是利用了XSLT的递归功能可以一次做到针对文件中同样元素名称但是分散在XML文件内不同位置的多个元素加密,且若要针对不同的元素加密只需要修改撰写Stylesheet文件即可。当然最重要的一点,站在程序开发的角度来看W3C的方法只是单纯的程序语言写作,而使用XSLT的方法则是需要先针对加解密Stylesheet下手再利用程序语言来撰写实作,对于提倡属于XML机制的加解密方法来说,XML的使用者更容易去撰写一份加解密Stylesheet文件。
在实现复杂度上的考虑来说,W3C的方法是比较好的,因为在程序开发时使用XSLT的方法需要使用到XSLT的增设功能,虽然使用Stylesheet是很方便的而且在XSLT标准规格里有增设功能这个章节,不过并不是每个XSLT处理器都能够完整的支持增设功能。
(三)两种加密方法的优缺点
在安全性上的考虑来说,W3C的方法是比较好的,电子商务应用中的XML文件每个元素的名称都能够让接收者很清楚地知道到底元素里面的内容为何,例如元素纪录着信用卡号、元素纪录着物品价格等等。使用W3C的方法这些元素都会被元素所取代,就算在传送方传送给收取方途中被扮演中继的第三者所获得,第三者也无法清楚的得知加密内容到底为何;而使用XSLT的方法并不会去取代欲加密的元素,中继第三者可以很清楚的得知这份文件的内容,只是针对元素内容加密,对于安全性来说是比W3C要来的差的。
在效率上的考虑来说,使用XSLT的方法是比较好的,虽然两种方法都能够针对部分XML文件加密,但是如果一份文件中有多个部分需要加密,使用XSLT的方法只要针对加解密Stylesheet文件下手,很轻松就能够达到一次就完成针对多个部分加密。而如果今天一份很大的XML文件有非常多个部分需要加密,甚至有许多空元素也需要加密,使用XSLT的方法,加密过后的XML文件内的元素数量只会少或是持平不会变多,但是如果是使用W3C的方法,则可能加密过后的XML文件可能会产生数量非常庞大甚至比原先还要多的元素出现,造成XML文件变得更加庞大。
虽然目前看起来还是W3C的方法比较容易实现且安全性上来说比较好,不过对于一份有多个部分需要个别加密的XML文件来说,使用XSLT的方法在效率上来说却是远超越W3C的方法。如果针对小份的XML文件,且需要加密的部分不多,推荐使用W3C的方法。但是如果是一份很大的XML文件且有多个部分需要加密,则推荐使用利用XSLT来加密的方法。
参考文献:
[1]耿建勇.XML安全技术的应用研究[D].中国科学院研究生院(计算技术研究所),2005.
[2]R.G.Bartlett,M.W.Cook.XML Security Using XSLT[C].Published in 36thAnnual Hawaii International Conference on System Sciences(HICSS'03),2003.
[3]W3C.XSL Transformations(XSLT) Version 2.0 [C]http://www.w3.org/TR/2005/WD-xslt20-20050211/.W3C,2005-2-11.
[关键词]XML 加密 XSLT
中图分类号:TP3 文献标识码:A 文章编号:1671-7597(2008)0820073-01
一、W3C的XML加密方法
W3C所提出的加密方法除了对整份XML文件加密外,还可以针对XML文件中的元素(element)来加密,或是部分的XML文件来加密(包含有子元素的元素),甚至对元素内容(element content)加密。加密过后的XML文件还是以XML的格式呈现。
在加密XML文件时,第一步会先将XML文件转换成DOM对象,第二步是利用对称式加密算法取得加密XML的共享密钥,第三步是利用非对称式加密算法取得公私密钥对中的公钥来加密那把共享密钥,第四步是利用XPath定义并指出需要加密的元素,第五步完成加密产生新的XML文件。
而在解密XML文件时,第一步先把加密过的XML文件转换成DOM对象,第二步利用加密时产生的公私密钥对中的公钥取得私钥,第三步利用XPath指定被加密过的元素,第四步取得加密时的那把共享密钥,第五步完成解密恢复成原先未加密前的XML文件。
二、使用XSLT加密的方法
XSLT(XSL Transformations)是由XSL(Extensible Stylesheet Language)发展而来的一种基于XML的语言,用于将一种XML文档转换成另一种XML文档。这个转换的特性让人联想到可以应用在XML文件加解密上面。以R.G.Bartlett和M.W.Cook所提出的方法为例,它利用XLST以及XSLT的增设功能编写加密以及解密的Stylesheet来达到针对XML文件的部分内容或是单一元素加解密。
加密时,第一步是先读入XML文件以及用来加密的XSL文件。第二步是XSLT处理器读取到用来加密的XSL文件中增设功能所呼叫的Java加密程序时,把欲加密的元素或部分XML文件交给所呼叫的Java加密程序执行产生密文传回。第三步再利用用来加密的XSL文件把传回的密文写入到欲加密的XML文件中。解密的过程则是把上面加密过后的XML文件以及用来解密的XSL文件读进XSLT处理器中,步骤和加密的步骤一样。
三、两种加密方法的比较
(一)两种加密方法的相同点
W3C的方法以及使用XSLT的方法两者相同之处很多:
就对XML文件加密的细致程度来说,两种方法都可以加密整份XML文件、部分XML文件、XML元素、XML元素内容,而加密过后的XML文件都是以XML格式输出。而对选取加解密算法上来说,两种方法都可以使用传统密码学上的加解密演算法来达成针对XML文件加密。
在该如何定位以及指明XML文件加密部分这个问题上,两种方法都是使用到XPath的语法来指定加密的部分。而最吸引人注意的一点就是这两种方法针对一份XML文件加密,都可以针对文件中多个部分加密,并且每个部分可以使用不同的加密算法。
(二)两种加密方法的不同点
W3C的方法以及使用XSLT的方法两者不同之处非常明显:
先以加密过后的XML文件内容来看,W3C的方法是以
元素来取代欲加密的XML文件元素,改变了原先XML文件的形式,而使用XSLT的方法是把密文写进欲加密的XML文件元素,并没有改变原先XML文件的形式。
再来我们来看针对XML文件加密过程中的不同点,W3C的方法一次只能做到针对XML文件的一个区块做加密,而使用XSLT的方法则是利用了XSLT的递归功能可以一次做到针对文件中同样元素名称但是分散在XML文件内不同位置的多个元素加密,且若要针对不同的元素加密只需要修改撰写Stylesheet文件即可。当然最重要的一点,站在程序开发的角度来看W3C的方法只是单纯的程序语言写作,而使用XSLT的方法则是需要先针对加解密Stylesheet下手再利用程序语言来撰写实作,对于提倡属于XML机制的加解密方法来说,XML的使用者更容易去撰写一份加解密Stylesheet文件。
在实现复杂度上的考虑来说,W3C的方法是比较好的,因为在程序开发时使用XSLT的方法需要使用到XSLT的增设功能,虽然使用Stylesheet是很方便的而且在XSLT标准规格里有增设功能这个章节,不过并不是每个XSLT处理器都能够完整的支持增设功能。
(三)两种加密方法的优缺点
在安全性上的考虑来说,W3C的方法是比较好的,电子商务应用中的XML文件每个元素的名称都能够让接收者很清楚地知道到底元素里面的内容为何,例如
在效率上的考虑来说,使用XSLT的方法是比较好的,虽然两种方法都能够针对部分XML文件加密,但是如果一份文件中有多个部分需要加密,使用XSLT的方法只要针对加解密Stylesheet文件下手,很轻松就能够达到一次就完成针对多个部分加密。而如果今天一份很大的XML文件有非常多个部分需要加密,甚至有许多空元素也需要加密,使用XSLT的方法,加密过后的XML文件内的元素数量只会少或是持平不会变多,但是如果是使用W3C的方法,则可能加密过后的XML文件可能会产生数量非常庞大甚至比原先还要多的元素出现,造成XML文件变得更加庞大。
虽然目前看起来还是W3C的方法比较容易实现且安全性上来说比较好,不过对于一份有多个部分需要个别加密的XML文件来说,使用XSLT的方法在效率上来说却是远超越W3C的方法。如果针对小份的XML文件,且需要加密的部分不多,推荐使用W3C的方法。但是如果是一份很大的XML文件且有多个部分需要加密,则推荐使用利用XSLT来加密的方法。
参考文献:
[1]耿建勇.XML安全技术的应用研究[D].中国科学院研究生院(计算技术研究所),2005.
[2]R.G.Bartlett,M.W.Cook.XML Security Using XSLT[C].Published in 36thAnnual Hawaii International Conference on System Sciences(HICSS'03),2003.
[3]W3C.XSL Transformations(XSLT) Version 2.0 [C]http://www.w3.org/TR/2005/WD-xslt20-20050211/.W3C,2005-2-11.