XML加密技術(shù)在校園網(wǎng)中的應(yīng)用

近幾年,隨著校園網(wǎng)的建設(shè)和高校一卡通工程的實施,校園網(wǎng)中信息保密問題變得尤為突出。由于校園網(wǎng)中存在大量的WEB訪問,對WEB的服務(wù)請求和響應(yīng)主要是利用XML消息,因此要保證WEB
服務(wù)的重要信息的安全首先要保證XML的安全。 XML( Extensible Markup Language)語言是標準通用標記語言SGML( Standard Generic Markup Language)的一個子集,它結(jié)合了SGML的豐富功能與HTML的易用性。 XML使用文本來描述內(nèi)容,在WEB廣泛應(yīng)用,它可以在不同操作系統(tǒng)平臺之間進行正常的數(shù)據(jù)交換,使XML成為不同系統(tǒng)平臺、不同應(yīng)用系統(tǒng)、不同語言之間數(shù)據(jù)交換的標準,成為互聯(lián)網(wǎng)應(yīng)用的標準描述語言。

本文提出了對XML加密的思路,使XML消息在存儲狀態(tài)和傳輸狀態(tài)下保持機密性,任何未授權(quán)的一方不能訪問處于存儲狀態(tài)和傳輸狀態(tài)下的XML消息內(nèi)容,這將大大提高校園網(wǎng)上重要信息的保密性。

一、XML加密的目標

目前已有的Internet上運行的加密和安全的傳統(tǒng)協(xié)議,如安全套接字層SSL、傳輸層安全性TLS,這些傳統(tǒng)的協(xié)議用于通信雙方之間保護數(shù)據(jù)的隱私和確保數(shù)據(jù)的完整性a但是XML加密用于對文件中的元素、文件中元素的內(nèi)容、整個XML文件進行加密,生成的文件是格式正規(guī)的XML文件,并確保經(jīng)過加密的文件在數(shù)據(jù)傳輸過程中的每個節(jié)點保持數(shù)據(jù)的安全性,而且保證數(shù)據(jù)在某個特定節(jié)點停留時的安全性。XML加密技術(shù)與傳統(tǒng)加密相比最大的區(qū)別是能加密傳遞文件中的部分內(nèi)容,而且能將加密的文件傳遞給兩個以上的用戶,而傳統(tǒng)加密,必須加密所有的傳遞資料,不能用于加密數(shù)據(jù)存儲,加密資料交換時要在雙方建立一個安全通道,無法同時將資料傳給多個用戶??傊瑐鹘y(tǒng)的SSL、TLS安全寫于和XML文檔加密是互為補充,解決完全不同類型的文件保密問題。

二、XML文件的加密方式

XML文件的加密是加密結(jié)構(gòu)化數(shù)據(jù)和以標準XML格式表示加密結(jié)果。通過加密一個文件中的指定元素、內(nèi)容或完整的XML文件,加密結(jié)果隨后被表示為一個XML加密元素,這個XML加密元素既可
以直接含有加密的數(shù)據(jù),也可以直接地從外部引用加密的數(shù)據(jù)。

1、XML文件中元素的加密

XML加密有加密XML文件中的元素、加密XML文件中元素的內(nèi)容、加密整個XML文件以及對加密過的內(nèi)容進行再加密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格式編碼后存放在的元素中。即使該文件被截獲,竊取者也無法從文件本身得知文件中包含的學生卡號以及其他任何有關(guān)學生卡的信息。加密后的文件如代碼段一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元素內(nèi)容的加密

仍以代碼段-1為例。若要公開學生卡的額度,則信息就必須公開,但是學生卡的信息,如號碼和到期日等信息仍須被隱藏。因此可以通過加密< CreditCard>內(nèi)容來達到上述效果,如代碼段-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超級加密是指對加密后的數(shù)據(jù)進行再加密,這種加密方式能夠控制文件選定部分內(nèi)容的查閱權(quán)限,將數(shù)據(jù)資料傳遞給不同的用戶,并且保證數(shù)據(jù)的保密性。如代碼段-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文件中元素中的內(nèi)容“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加密方案及其算法實現(xiàn)

1、XMl加密方案

不管采用XML文件的哪種加密方式,都需要具 體的加密實現(xiàn)。圖1描述的是接收和發(fā)送加密的XML文件時所使用的典型方案。

圖1中XML加密的邏輯流程是:

XML加密技術(shù)在校園網(wǎng)中的應(yīng)用

(1)接收方生成一個非對稱密鑰對,其中一個用作公鑰,另一個用作私鑰。這樣,任何人都可以使用公鑰來加密數(shù)據(jù),隨后,只有私鑰的所有者才能夠解密數(shù)據(jù);

(2)發(fā)送方可以通過非安全的方式獲取接受方的公鑰,如果需要驗證公鑰,發(fā)送方還可以通過認證機構(gòu)獲取接收方的公鑰;

(3)發(fā)送方生成一個秘密的對稱密鑰,用這個對稱密鑰加密XML文件中的預定元素;

(4)發(fā)送方使用接收方的公鑰加密這個對稱密鑰;

(5)發(fā)送方將加密的數(shù)據(jù)、加密的對稱密鑰以及可選信息(如算法參數(shù))結(jié)合在一起,生成一個新的加密的XML文件。這個操作是按照在XML加密規(guī)范中定義的標準語法規(guī)則完成的;

(6)發(fā)送方將加密的XML文件發(fā)送給接收方;

(7)接收方分析取出加密的數(shù)據(jù)、加密的對稱密鑰和可能需要的任何附加可選信息;

(8)接收方使用正確的非對稱算法和自己保管的私鑰來解密對稱密鑰;

(9)接收方使用解密的對稱密鑰來解密XML文件中被加密的元素。

2、XMI加密的算法實現(xiàn)

將XML文件轉(zhuǎn)換成DOM對象,獲得共享密鑰來加密XML內(nèi)容;利用RSA算法生成公一私密鑰對中的公鑰,用這個公鑰給共享密鑰加密;利用一個數(shù)據(jù)加密密鑰、一個密鑰加密密鑰、與這兩個密鑰相關(guān)聯(lián)的算法、以及將來包含在輸出信息中的密鑰信息,根據(jù)它們來創(chuàng)建一個Encryptor對象,創(chuàng)建Encryptor對象時指定的算法必須與密鑰相符,Encryptor是加密過程中的主要對象,是根據(jù)W3C XML加密規(guī)范進行加密,可以指定想要使用哪種加密類型;調(diào)用Encryptor對象encryptlnPlace方法,并將XPath作為輸入?yún)?shù)傳人,XPath定義了XML內(nèi)部需要進行加密的元素o以下是用Java語言實現(xiàn)的代碼片段。

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文檔中的指定元素、內(nèi)容或完整的文檔,經(jīng)過這種處理,使校園網(wǎng)中保密信息得到保護。但是XML加密的語法和處理模型非常復雜,沒有適當?shù)膶崿F(xiàn)工具來支持,因而程序發(fā)現(xiàn)使用XML加密很困難;XML加密沒有為加密和解密提供標準的編程API,這對于那些跨平臺的應(yīng)用來說可能會產(chǎn)生可移植性的問題等。因此,關(guān)于XML的加密的快速、簡便實現(xiàn),有待進一步研究。

小知識之xml

xml 即 可擴展標記語言 。
可擴展標記語言,標準通用標記語言的子集,一種用于標記電子文件使其具有結(jié)構(gòu)性的標記語言。
它可以用來標記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標記語言進行定義的源語言。 它非常適合萬維網(wǎng)傳輸,提供統(tǒng)一的方法來描述和交換獨立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。