Timestamp如何帮助防止Web服务中的重播攻击

问题描述:

我想了解Web服务中请求标头中时间戳的概念,但不知何故仍不能完全理解它是如何工作的。Timestamp如何帮助防止Web服务中的重播攻击

如果有人能够解释Web服务的请求和响应中的时间戳的端到端使用,我将不胜感激。

它真的是防止重播攻击的万无一失的方法吗?

时间戳本身并不足够,但通常它与哈希机制相结合,以保证这些值不被篡改。

这个想法是,客户端生成参数,并使用他们的私钥来散列参数。 [hash +原始值+公共密钥]随后与请求一起发送。服务器可以使用公钥查找私钥,并确保参数是正确的。

使用时间戳和一些阈值来确保特定请求不能多次使用。如果阈值很小(几百毫秒),那么重放攻击实际上是不可能的。

+0

时间戳的值是否被加密?服务器如何验证传入的请求有一个有效的时间戳,并在阈值内 – 2012-04-05 03:43:59

+0

@Kunal - 就像我说的客户端散列输入参数并将散列和输入一起发送。哈希服务器作为防篡改检查总和。服务器使用与用户公钥对应的私钥来计算他们自己的参数散列。如果两个哈希匹配,那么您知道提供的值是合法的,并且没有被篡改。 – Josh 2012-04-05 13:38:13

+0

@Kunal,没有时间戳未加密,它应该在肥皂标题中。 – Don 2014-07-02 05:17:15

时间戳未加密,它应该在肥皂标题中。

<wsu:Timestamp wsu:Id="timestamp"> 
     <wsu:Created>2014-07-01T11:30:28.123+05:30</wsu:Created> 
     <wsu:Expires>2014-07-01T11:35:28.123+05:30</wsu:Expires> 
    </wsu:Timestamp> 

如果到期时间创建时间后很少,它可以减少重播攻击。其实它不只是时间戳。您应该将时间戳的摘要添加到SignedInfo部分。

<ds:Reference URI="#timestamp"> 
    <ds:Transforms> 
     <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
      <InclusiveNamespaces PrefixList="wsse soap" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
     </ds:Transform> 
    </ds:Transforms> 
    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> 
    <ds:DigestValue>TGgFBvglhb+jZCvjV0+oVnNaivpVBp5iVbJEqkTfaCU=</ds:DigestValue> 
</ds:Reference> 

所以在服务器端这些摘要必须匹配。即使这并不是全部,那么您使用私钥签署整个signedInfo并将签名值添加到Signature元素,如下所示。

<ds:SignatureValue>jdO5GIZ9v1VTngFZcMpz5hz62RwToq2W24A9KhJ5JNySZW1AHhd3s+eTduZZPD0Ok6Wtgzu5kquK 
    IinPdi5IbGjlg6mXGDbVkLd79RBdnbzFxsJFBtRr9r3mQZp9xfU7zSJW3kbizz6Jjk3h+S2nNbUu 
    f7rFrNN53ciRtj9RlKzQzmW7BDaFuq18DUfcr70muSkmd4DIqxYDGScjEjgIqLE2pYwIdDDRUGPD 
    MuwuIN3DgB051QwcE75SVrKBKsTHmFADmN3nKzmQ/JUQuLot0vW6WUFRMLVlAcl5C09SGPOcpow2 
    kjbuWx/bI7Aj4nAaAnmAYsWKIA3xVao+nPBOWmM0Lg7kpC4Dr5DwahmjH0/78aVUU23DEiMc0kR0 
    YDg5CxD8MUuj24w8tAjuzoHrvcsIYw+vWCTKvucnXwTlZ+K3QFB6gkct2zVOyQeYaPpkAnmPYS3W 
    DDpNmsx3lDcNr+5QWTsUbSQaFDddjHT/zoOJ8+iZKY/RujOI5vfXVwgN</ds:SignatureValue> 

现在我们可以确保重放攻击是不可能的。由于其他人不能拥有相同的私钥,因此无法更改时间戳并仍具有有效的签名。