XML加密技術(shù)

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

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

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

1、部分數(shù)據(jù)加密

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

2、多方之間的安全對話

使用XML加密,對話中的每一方都可以與任何通信方保持安全和非安全狀態(tài)。可以在同一個文檔中交換安全和不安全數(shù)據(jù)。

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

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

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

XML加密標準如下:

<EncryptedDataID?Type?>

<EncryptionMethod/>?

<ds:KeyInfo>

<EncryptedKey>?

<AgreemenMtethod>?

<ds:KeyName>?

<ds:RetrievaMlethod>?

<ds:*>?

</ds:Keylnfo>?

<CipherData>

<CipherValue>?

<CipherReferenceURI>?

</CipherlData>

<EncryptionProperties/>?

</EncryptedData>

其中,<EncryptedData>元素是XML加密語法中的最重要的元素,其可選的ID屬性是直接的任意標識符,可用于特定于具體應用的處理,或者用于像在單個XML文檔中區(qū)分多個<EncryptedData>元素這樣簡單的處理。Type屬性用于確定明文的類型(用于確定加密了XML元素、元素內(nèi)容或其它的媒體類型),當加密元素或元素內(nèi)容時,<EncryptedData>元素替換XML文檔加密版本中的該元素或內(nèi)容。當加密整個XML文檔時,<EncryptedData>元素成為新XML文檔的根。<CipherData>元素以某種形式(直接存儲或引用)表示加密后的數(shù)據(jù)。<EncryptionMethod>元素用來識別加密算法和可能的一些輔助參數(shù)。<ds:Keylnfo>元素描述了如何獲得密鑰從而對<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>

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

1、使用XML加密對整個文檔加密

<?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>

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

2、使用XML加密對單個元素加密

<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元素,這個加密后的文件Payment元素被保護,order子元素保持原樣,這就實現(xiàn)了一個文檔傳送給不同部門,而又保證數(shù)據(jù)安全的策略。

3、使用XML加密對元素內(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的加密方式使得加密越來越輕量級,更加適合解決我們在分布式、跨平臺的網(wǎng)絡環(huán)境下的安全性問題。

小知識之SOAP協(xié)議

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