近几年,随着校园网的建设和高校一卡通工程的实施,校园网中信息保密问题变得尤为突出。由于校园网中存在大量的WEB访问,对WEB的服务请求和响应主要是利用XML消息,因此要保证WEB
服务的重要信息的安全首先要保证XML的安全。 XML( Extensible Markup Language)语言是标准通用标记语言SGML( Standard Generic Markup Language)的一个子集,它结合了SGML的丰富功能与HTML的易用性。 XML使用文本来描述内容,在WEB广泛应用,它可以在不同操作系统平台之间进行正常的数据交换,使XML成为不同系统平台、不同应用系统、不同语言之间数据交换的标准,成为互联网应用的标准描述语言。
本文提出了对XML加密的思路,使XML消息在存储状态和传输状态下保持机密性,任何未授权的一方不能访问处于存储状态和传输状态下的XML消息内容,这将大大提高校园网上重要信息的保密性。
一、XML加密的目标
目前已有的Internet上运行的加密和安全的传统协议,如安全套接字层SSL、传输层安全性TLS,这些传统的协议用于通信双方之间保护数据的隐私和确保数据的完整性a但是XML加密用于对文件中的元素、文件中元素的内容、整个XML文件进行加密,生成的文件是格式正规的XML文件,并确保经过加密的文件在数据传输过程中的每个节点保持数据的安全性,而且保证数据在某个特定节点停留时的安全性。XML加密技术与传统加密相比最大的区别是能加密传递文件中的部分内容,而且能将加密的文件传递给两个以上的用户,而传统加密,必须加密所有的传递资料,不能用于加密数据存储,加密资料交换时要在双方建立一个安全通道,无法同时将资料传给多个用户。总之,传统的SSL、TLS安全写于和XML文档加密是互为补充,解决完全不同类型的文件保密问题。
二、XML文件的加密方式
XML文件的加密是加密结构化数据和以标准XML格式表示加密结果。通过加密一个文件中的指定元素、内容或完整的XML文件,加密结果随后被表示为一个XML加密元素,这个XML加密元素既可
以直接含有加密的数据,也可以直接地从外部引用加密的数据。
1、XML文件中元素的加密
XML加密有加密XML文件中的元素、加密XML文件中元素的内容、加密整个XML文件以及对加密过的内容进行再加密4种方式。
以下通过一个具体实例说明4种加密方式。代码段-l是一个加密前的XML文档。
<? Xml version=“1.0”encoding=“utf -8"? >
< Customer>
< Name>Zhang Jianyong
< Tel>0971 - 6419463
< Address>WuXi District
< CreditCard Limit=’5000' Currency=’USD’>
< Number>123456789
< ExpirationDate > 2008 - 12 - 31
< /Customer >
代码段-1
在代码段-1,由于学生卡号即元素是隐私资料,当希望将这个资料隐藏起来时,就对< CreditCard>这个元素进行加密,加密后元素将取代元素,加密后的资料以Base64格式编码后存放在的元素中。即使该文件被截获,窃取者也无法从文件本身得知文件中包含的学生卡号以及其他任何有关学生卡的信息。加密后的文件如代码段一2所示。
<? Xml version=“1.O”encoding =:utf -8"? >
< Customer>
< Name>Zhang Jianyong
< Tel>0971-6419463
< Address>WuXi DisUict
< EncryptedData Type='http://www. w3. org/2001/04/xmlenc#Element' xmlns=thttp://www. w3. org/2001/04/xmlenc#'>
< CipherData>
< CipherValue>ECDnQyE9D.,…:.nramtSHPaV
代码段-2
2、XML元素内容的加密
仍以代码段-1为例。若要公开学生卡的额度,则信息就必须公开,但是学生卡的信息,如号码和到期日等信息仍须被隐藏。因此可以通过加密< CreditCard>内容来达到上述效果,如代码段-3所示:
< Customer>
< Name>Zhang Jianyong
< Tel > 0971 - 6419463
< Address > WuXi District
< CreditCard Limit = '5,000' Currency = 'USD' >
< EncryptedData Type = 'http ://www. w3. org/2001/04/xmlenc#Element' xmlns = 'http ://www. w3. org/2001/04/xmlenc#' >
< CipherData >
< CipherValue > ECDnQyE ...... nramtSHP< /CipherValue >
< EncryptedData >
< /CreditCard >
< /customer >
代码段 - 3
3、加密整个XML文件
XML加密也可以针对整个XML文件,即对XML文件的根元素加密,这时元素会成为整份文件的根元素,将代码段-1的XML文件加密根元素后如代码段-4所示。
< EncryptedData Type='http://www. w3. org/2001/04/xmlenc#Element' xmlns='http://www. w3. org/2001/04/xmlenc#'>
< CipherData>
< CipherValue>ECDnQyE9D......nramtSHPaV
< /EncryptedData>
代码段-4
4、超级加密
XML超级加密是指对加密后的数据进行再加密,这种加密方式能够控制文件选定部分内容的查阅权限,将数据资料传递给不同的用户,并且保证数据的保密性。如代码段-5所示的加密后的XML文件。
< EncryptedData Id='EDI’ Type=‘bttp://www. w3. org/2001/04/xmlenc#Element' xmlns='http://www. w3. org/2001/04/xmlenc#'>
< CipherData>
< CipherValue>ECDnQyE9D......nramtSHPaV
< /CipherData>
代码段-5
代码段-6所示的XML文件中元素中的内容“newEcryptedDataP'是针对代码段-5中ID=‘EDl'的< EncryptedData>元素加密后得到的Base64字符串。
< ? Xml version = "I.O" encoding - "utf -8"? >
< Customer >
< EncryptedData Id = 'ED2' Type='http ://www. w3. org/2001/04/xmlenc#Element’ xmlns =‘http ://www. w3. org/2001/04/xmlenc#' >
>
< cipherData >
< CipherValrle > newEncryptedData < /CipherValue >
代码段 -6
三、XMl加密方案及其算法实现
1、XMl加密方案
不管采用XML文件的哪种加密方式,都需要具 体的加密实现。图1描述的是接收和发送加密的XML文件时所使用的典型方案。
图1中XML加密的逻辑流程是:
(1)接收方生成一个非对称密钥对,其中一个用作公钥,另一个用作私钥。这样,任何人都可以使用公钥来加密数据,随后,只有私钥的所有者才能够解密数据;
(2)发送方可以通过非安全的方式获取接受方的公钥,如果需要验证公钥,发送方还可以通过认证机构获取接收方的公钥;
(3)发送方生成一个秘密的对称密钥,用这个对称密钥加密XML文件中的预定元素;
(4)发送方使用接收方的公钥加密这个对称密钥;
(5)发送方将加密的数据、加密的对称密钥以及可选信息(如算法参数)结合在一起,生成一个新的加密的XML文件。这个操作是按照在XML加密规范中定义的标准语法规则完成的;
(6)发送方将加密的XML文件发送给接收方;
(7)接收方分析取出加密的数据、加密的对称密钥和可能需要的任何附加可选信息;
(8)接收方使用正确的非对称算法和自己保管的私钥来解密对称密钥;
(9)接收方使用解密的对称密钥来解密XML文件中被加密的元素。
2、XMI加密的算法实现
将XML文件转换成DOM对象,获得共享密钥来加密XML内容;利用RSA算法生成公一私密钥对中的公钥,用这个公钥给共享密钥加密;利用一个数据加密密钥、一个密钥加密密钥、与这两个密钥相关联的算法、以及将来包含在输出信息中的密钥信息,根据它们来创建一个Encryptor对象,创建Encryptor对象时指定的算法必须与密钥相符,Encryptor是加密过程中的主要对象,是根据W3C XML加密规范进行加密,可以指定想要使用哪种加密类型;调用Encryptor对象encryptlnPlace方法,并将XPath作为输入参数传人,XPath定义了XML内部需要进行加密的元素o以下是用Java语言实现的代码片段。
Document doc =XmlUtil,getDocument (xmIFileName) ;
String xpath=V StudentOrderRequest/ Payment";
Key dataEncryptionKey=get Key();
AlgorithmType dataEncryptionAlgoType =' AlgorithmType'TRIPLEDES
KeyPair keyPair = get KeyPair () ;
Key keyEncryptionKey ; keyPair : get Public() ;
AlgorithmType keyEncryptionAlgoType = AlgorithmType. RSAl - 5 ;
Keylnfo keylnfo = new Keylnfo () ;
try { Encryptor enc = new Encryptor ( doc , dataEncryptionKey) ;
dataEncryptionAlgoType , keyEncryptionKey . keyEncryp2tionAlgoType . keylnfo) ;
XPath xpath= new XPath(xPath) ;
try { enc. encrypt InPlace (xpath) ;
}
catch ( XPathException el)
{
System. out l prindn("XPath is not correct") ;
el. printStackTrace ( ) '; '
XmIUtil d XmlOnStdOut (doc) ;
}
cacch ( Exception e)
{
System. out , println("Some exception") ;
e. printStackTrace () ;
}
通过XML加密算法,即加密XML文档中的指定元素、内容或完整的文档,经过这种处理,使校园网中保密信息得到保护。但是XML加密的语法和处理模型非常复杂,没有适当的实现工具来支持,因而程序发现使用XML加密很困难;XML加密没有为加密和解密提供标准的编程API,这对于那些跨平台的应用来说可能会产生可移植性的问题等。因此,关于XML的加密的快速、简便实现,有待进一步研究。
小知识之xml
xml 即 可扩展标记语言 。
可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言。
它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。