XML加密技術(shù)

XML作為一種描述數(shù)據(jù)的標(biāo)記語(yǔ)言,它具有可擴(kuò)展性好、所占存儲(chǔ)空間小等特點(diǎn),大大降低了數(shù)據(jù)管理和交換的成本,作為一種表示和存儲(chǔ)數(shù)據(jù)的標(biāo)準(zhǔn),廣泛應(yīng)用于移動(dòng)數(shù)據(jù)存儲(chǔ)領(lǐng)域,實(shí)現(xiàn)數(shù)據(jù)交換、數(shù)據(jù)共享等。在XML越來(lái)越被廣泛應(yīng)用的同時(shí),XML安全性問(wèn)題也更加受到關(guān)注,如果不能保證數(shù)據(jù)交換過(guò)程中的安全,這種數(shù)據(jù)交換格式是不完整的,針對(duì)XML安全性問(wèn)題,我們今天就來(lái)探討一下XML加密技術(shù)。

一、XML加密技術(shù)的優(yōu)勢(shì)

目前TLS/SSL(傳輸層安全性/安全套接字層)已經(jīng)是在網(wǎng)絡(luò)上提供通信雙方端到端的安全對(duì)話(huà)非??煽康膮f(xié)議,XML這種有結(jié)構(gòu)的數(shù)據(jù)在網(wǎng)絡(luò)傳輸方面有它自己的安全需求,比如我們將同一個(gè)文件發(fā)送給不同的接收者,我們對(duì)他們需要保密的信息不同時(shí),使用TLS/SSL不能解決,這是TLS/SSL未涉及的領(lǐng)域,還有一個(gè)方面也是TLS/SSL未能覆蓋的功能那就是多方之間的安全對(duì)話(huà)。

1、部分?jǐn)?shù)據(jù)加密

XML加密可以對(duì)被傳輸?shù)臄?shù)據(jù)文件進(jìn)行加密粒度的控制,以在線(xiàn)購(gòu)書(shū)為例,每次提交訂單時(shí)用戶(hù)提供的信息應(yīng)包括書(shū)籍信息(書(shū)名,作者,訂購(gòu)數(shù)量等)和賬戶(hù)信息(信用卡帳號(hào),密碼等),所有信息以XML的數(shù)據(jù)格式發(fā)給圖書(shū)商的發(fā)貨處和財(cái)務(wù)。對(duì)財(cái)務(wù)來(lái)說(shuō),所有信息都可以公開(kāi),對(duì)發(fā)貨處來(lái)說(shuō),我們應(yīng)該對(duì)讀者的賬戶(hù)信息進(jìn)行加密,TLS/SSL只保證傳輸過(guò)程安全,數(shù)據(jù)在傳輸結(jié)束后的信息是全部公開(kāi)的。

2、多方之間的安全對(duì)話(huà)

使用XML加密,對(duì)話(huà)中的每一方都可以與任何通信方保持安全和非安全狀態(tài)??梢栽谕粋€(gè)文檔中交換安全和不安全數(shù)據(jù)。

3、作為SOAP協(xié)議的安全性擴(kuò)展

SOAP協(xié)議可以通過(guò)嵌入加密的XML數(shù)據(jù)文件,實(shí)現(xiàn)在消息傳輸?shù)膽?yīng)用層靈活的加密策略,并且在分布式環(huán)境下能交換有結(jié)構(gòu)的數(shù)據(jù)。

二、XML加密技術(shù)實(shí)現(xiàn)

XML加密標(biāo)準(zhǔn)如下:

<EncryptedDataID?Type?>

<EncryptionMethod/>?

<ds:KeyInfo>

<EncryptedKey>?

<AgreemenMtethod>?

<ds:KeyName>?

<ds:RetrievaMlethod>?

<ds:*>?

</ds:Keylnfo>?

<CipherData>

<CipherValue>?

<CipherReferenceURI>?

</CipherlData>

<EncryptionProperties/>?

</EncryptedData>

其中,<EncryptedData>元素是XML加密語(yǔ)法中的最重要的元素,其可選的ID屬性是直接的任意標(biāo)識(shí)符,可用于特定于具體應(yīng)用的處理,或者用于像在單個(gè)XML文檔中區(qū)分多個(gè)<EncryptedData>元素這樣簡(jiǎn)單的處理。Type屬性用于確定明文的類(lèi)型(用于確定加密了XML元素、元素內(nèi)容或其它的媒體類(lèi)型),當(dāng)加密元素或元素內(nèi)容時(shí),<EncryptedData>元素替換XML文檔加密版本中的該元素或內(nèi)容。當(dāng)加密整個(gè)XML文檔時(shí),<EncryptedData>元素成為新XML文檔的根。<CipherData>元素以某種形式(直接存儲(chǔ)或引用)表示加密后的數(shù)據(jù)。<EncryptionMethod>元素用來(lái)識(shí)別加密算法和可能的一些輔助參數(shù)。<ds:Keylnfo>元素描述了如何獲得密鑰從而對(duì)<CipherData>元素的內(nèi)容解密。<EncryptionProperties>包括其它一些額外的屬性。文件加密后仍舊是格式良好的xml文件。

為了便于描述,用做示例的文檔如下order.xml

<purchaseOrder>

<Order>

<Item>xmlontology</Item>

<Id>123-958-74598</Id>

</Order>

<Payment>

<CardId>123654-8988889-9996874</CardId>

<CardName>visa</CardName>

</Payment>

</purchaseOrder>

這里盡量選用較簡(jiǎn)單的XML文檔,有助于我們把注意力集中在加密技術(shù)上。

1、使用XML加密對(duì)整個(gè)文檔加密

<?xmlversion="1.0"?>

<EncryptedDataxmlns="http://www.w3.org/2001/04/xmlenc#"Type="http://www.is.iedu/in-notes/iana/assignments/media-types/text/xml">

<CipherData>

<CipherValue>A23B45C56</CipherValue>

</CipherData>

</EncryptedData>

當(dāng)我們需要保護(hù)整個(gè)文檔時(shí),可以對(duì)整個(gè)文檔加密,此時(shí)EncryptedData就成為整個(gè)文件的根元素,C-ipherData元素存儲(chǔ)的是我們要保護(hù)的數(shù)據(jù)。http://www.is.iedu/in-notes/iana/assignments/media-types/text/xml是原xml文件被isi正式定義的類(lèi)型,http://www.w3.org/2001/04/xmlenc#是原文件所在的命名空間。

2、使用XML加密對(duì)單個(gè)元素加密

<EncryptedDataType=h'ttp://www.w3.org/2001/04/xmlenc#Element'xmlns=h'ttp://www.w3.org/2001/04/xmlenc#>

<CipherData>

<CipherValue>A23B45C564587</CipherValue>

</CipherData>

</EncryptedData>

這里僅加密了原文件的Payment元素,這個(gè)加密后的文件Payment元素被保護(hù),order子元素保持原樣,這就實(shí)現(xiàn)了一個(gè)文檔傳送給不同部門(mén),而又保證數(shù)據(jù)安全的策略。

3、使用XML加密對(duì)元素內(nèi)容加密

<Payment>

<CardId>

<EncryptedDataType=h'ttp://www.w3.org/2001/04/xmlenc#Content'xmlns=h'ttp://www.w3.org/2001/04/xmlenc#>'<CipherData>

<CipherValue>A23B45C564587</CipherValue>

</CipherData>

</EncryptedData>

</CardId>

<CardName>visa</CardName>

</Payment>

這種加密方式更直接,只加密了元素CardId的內(nèi)容,這里的type屬性值里面的#Content表明加密的僅僅是元素內(nèi)容,加密方式2和加密方式3的加密方式使得加密越來(lái)越輕量級(jí),更加適合解決我們?cè)诜植际?、跨平臺(tái)的網(wǎng)絡(luò)環(huán)境下的安全性問(wèn)題。

小知識(shí)之SOAP協(xié)議

簡(jiǎn)單對(duì)象訪(fǎng)問(wèn)協(xié)議(Simple Object Access Protocol,SOAP),是一種輕量的、簡(jiǎn)單的、基于XML的協(xié)議,它被設(shè)計(jì)成在WEB上交換結(jié)構(gòu)化的和固化的信息。 SOAP 可以和現(xiàn)存的許多因特網(wǎng)協(xié)議和格式結(jié)合使用,包括超文本傳輸協(xié)議(HTTP),簡(jiǎn)單郵件傳輸協(xié)議(SMTP),多用途網(wǎng)際郵件擴(kuò)充協(xié)議(MIME)。它還支持從消息系統(tǒng)到遠(yuǎn)程過(guò)程調(diào)用(RPC)等大量的應(yīng)用程序。SOAP使用基于XML的數(shù)據(jù)結(jié)構(gòu)和超文本傳輸協(xié)議(HTTP)的組合定義了一個(gè)標(biāo)準(zhǔn)的方法來(lái)使用Internet上各種不同操作環(huán)境中的分布式對(duì)象。