【问题标题】:How does Timestamp helps in preventing Replay Attacks in webservices时间戳如何帮助防止 Web 服务中的重放攻击
【发布时间】:2012-04-18 19:21:18
【问题描述】:

我正在尝试理解 Web 服务中请求标头中时间戳的概念,但不知何故仍然无法完全理解它是如何工作的。

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

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

【问题讨论】:

    标签: wcf web-services security web timestamp


    【解决方案1】:

    时间戳本身是不够的,但通常它与散列机制相结合以保证值没有被篡改。

    这个想法是客户端生成参数,并使用他们的私钥对参数进行哈希处理。 [哈希 + 原始值 + 公钥] 然后随请求一起发送。服务器可以使用公钥查找私钥,并确保参数正确。

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

    【讨论】:

    • 时间戳的值是否加密?服务器如何验证传入的请求具有有效的时间戳并且在阈值内
    • @Kunal - 就像我说的那样,客户端对输入参数进行哈希处理并将哈希值与输入一起发送。哈希服务器作为校验和防止篡改。服务器使用与用户公钥对应的私钥来计算自己的参数散列。如果两个哈希匹配,那么您知道提供的值是合法的,并且没有被篡改。
    • @Kunal,没有时间戳不加密,应该在soap头中。
    • @Don - 如果您使用的是 SOAP。但是时间戳作为校验和的一部分被加密,这正是 Digest 的用途,它是参数的散列,以验证它们没有被篡改。时间戳与散列版本一起作为校验和发送。这不是仅适用于 SOAP 的技术,因为它也用于 JSON Web 服务。
    【解决方案2】:

    时间戳没有加密,应该在soap头中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2010-12-05
      相关资源
      最近更新 更多