一个加密后的soap 报文
下面的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时间来进行加密和解密.,因为这个原因,不对称加密经常用来安全的传送一个对称的”会话”密钥,用来加密交互的剩余部分,这也只是在信息交换的持续周期内有效.
因为公钥可以很容易的获得,使用公钥进行加密减轻了分发和管理密钥的难度.不幸的是,这种方便性的代价是不对成加密算法通常比对成加密算法慢几个数量级.由于此,不对称加密方法只用来处理比较小的数据.例如安全密钥和标识以及数字签名.