一個加密後的SOAP 報文<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
下面的SOAP報文示例有一個payment節點,含有一些敏感的客戶信息.
OAP:Envelope SOAP:xmlsn="http://www.w3.org/2002/12/SOAP-envelope">
<SOAP:Header>
...
</SOAP:Header>
<SOAP:Body>
...
<x:Order Type="Purchase" x:xmlns="http://example.com/order">
<x:Payment Type="CreditCard">
<x:CreditCard Type="Visa">
<x:CardNumber>123456789123456</CardNumber>
<x:ExperationDate>1108</ExperationDate>
</x:CreditCard>
</x:Payment>
...
</x:Order>
...
</SOAP:Body>
</SOAP:Envelope>
因爲payment節點含有敏感的數據,所以它應該被加密.下面的例子顯示了相同的信息,但是payment節點被EncryptedData節點代替了.EncryptedData節點內含有對payment 節點內部內容加密後的密文. EncryptedData節點是參考自security頭中的DataReference 節點的
<SOAP:Envelope SOAP:xmlsn="http://www.w3.org/2002/12/SOAP-envelope"
xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
xmlns:xsig="http://www.w3.org/2000/09/xmldsig#"
xmlns:WSse="http://schemas.xmlSOAP.org/WS/2002/04/secext">
<SOAP:Header>
<WSse:Security>
<xenc:ReferenceList>
<xenc:DataReference URI="#OrderID"/>
</xenc:ReferenceList>
</WSse:Security> ...
</SOAP:Header>
<SOAP:Body>
...
<x:Order Type="Purchase" x:xmlns="http://example.com/order">
<xenc:EncryptedData Id="OrderId">
<xenc:EncryptionMethod
Algorithm= "http://www.w3.org/2001/04/xmlenc#tripledes-cbc"
<xsig:KeyInfo>
<xsig:KeyName>My Symmetric Key</xsig:KeyName>
</xsig:KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>...</CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
...
</x:Order>
...
</SOAP:Body>
</SOAP:Envelope>
當然,在這個例子中,你可以用數字簽名來簽署該報文,來防止懷有惡意的人來竄改數據,或者用時間戳或者其他唯一的標識來判斷信息是否受到攻擊.
加密的種類
對稱加密和不對成加密
加密得算法可以分爲對稱加密和不對稱加密.在對稱加密算法中,一個密鑰被用來進行信息交換得兩方共享.發送方利用私鑰得拷貝來加密數據.在接收方,利用同樣得私鑰的拷貝來解密數據.絕大多數得加密,如基於共享密碼和共享安全標識都是對成加密得例子.
在這種類型的系統中,一箇中心的服務器分發共享的密鑰給需要安全交互的使用者.對稱加密的缺點是共享密鑰的管理,分發和保護它們的安全性,特別是在象internet這樣的公網上.
爲了克服在公共網絡中管理密鑰的的難度,使用成對的密鑰來取代單一的密鑰.在不對成加密算法中,雙方都互相擁有一個私鑰和一個密鑰.
公鑰是利用一種不可逆的方法對私鑰進行操作後產生的,因此一旦兩者中的一種用來加密數據,另外一種就可以用來解密.另外,不可由公鑰來推測出私鑰,而且只有用私鑰來解密用公鑰加密的數據.當發送異步加密的報文時,發送者利用接收者的公鑰加密報文,確保只有接收者可以利用他的私鑰來解密報文.如果你用另外一種方式來處理,任何人都可利用可利用的公鑰來解密報文.不對稱加密是PKI的基礎,pki是x.509安全標準的基礎.不對成加密算法是一種典型基於對大數處理的算法,如指數合對數運算.它比對成加密算法需要更多的cpu時間來進行加密和解密.,因爲這個原因,不對稱加密經常用來安全的傳送一個對稱的”會話”密鑰,用來加密交互的剩餘部分,這也只是在信息交換的持續週期內有效.
因爲公鑰可以很容易的獲得,使用公鑰進行加密減輕了分發和管理密鑰的難度.不幸的是,這種方便性的代價是不對成加密算法通常比對成加密算法慢幾個數量級.由於此,不對稱加密方法只用來處理比較小的數據.例如安全密鑰和標識以及數字簽名.