【问题标题】:Secure Token URL - How secure is it? Proxy authentication as alternative?安全令牌 URL - 它有多安全?代理身份验证作为替代方案?
【发布时间】:2011-09-04 00:58:11
【问题描述】:

我知道它是安全令牌 URL,可能还有另一个名字。但我想你们都知道。

如果您想将内容交付限制到某个客户端,则它主要适用于您已经提前提交了特定网址。

您获取一个秘密令牌,将其与您要保护的资源连接起来,拥有它,当客户端在您的一台服务器上请求此 URL 时,哈希值会根据从请求中收集的信息和比较哈希。如果相同,则传递内容,否则用户将被重定向到您的网站或其他内容。

您还可以在必须在 URL 上放置时间的时间戳,或包含用户 ip 地址以限制投递到他的连接。

Amazon(S3 和 Cloudfront)、Level 3 CDN、Rapidshare 和许多其他公司都使用此技术。它也是 http 摘要身份验证的基本部分,尽管它在链接失效和其他方面更进了一步。

如果您想了解更多信息,这里是Amazon docs 的链接。

现在我对这种方法的担忧是,如果有人破解了你的链接的一个令牌,攻击者会得到你的令牌纯文本,并可以自己签署任何以你的名义的 URL。

或者更糟糕的是,就亚马逊而言,在管理范围内访问您的服务。

当然,这里散列的字符串通常很长。你可以包含很多东西,甚至可以通过在请求中添加一些不必要的数据来强制数据具有最小长度。可能在 URL 中添加一些未使用的伪变量,并用随机数据填充它。

因此,蛮力攻击来破解 sha1/md5 或任何你使用的哈希是相当困难的。但是协议是开放的,所以你只需要填补秘密令牌所在的空白,然后用请求中已知的数据填充其余部分。而且今天的硬件很棒,可以以每秒数十兆字节的速度计算 md5。这种攻击可以分布到计算云上,并且您不限于“登录服务器每分钟尝试 10 次左右”之类的东西,这使得散列方法通常非常安全。现在有了亚马逊 EC2,你甚至可以短时间租用硬件(用他们自己的武器打败他们哈哈!)

那你怎么看?我的担忧有根据还是我偏执?

然而,

我目前正在为特殊需求(集成媒体转码和流媒体等特殊交付方法)设计对象存储云。

现在 level3 引入了一种替代方法来保护令牌 URL。它目前是测试版,只对特别要求它的客户开放。他们称之为“代理身份验证”。

发生的情况是内容交付服务器向您(客户端)设置中指定的服务器发出 HEAD 请求并模仿用户请求。因此传递了相同的 GET 路径和 IP 地址(作为 x_forwarder)。您使用 HTTP 状态代码进行响应,告诉服务器是否先进行内容交付。

您也可以在其中引入一些安全令牌过程,您还可以对其施加更多限制。比如让一个 URL 只被请求 10 次左右。

它显然会带来很多开销,因为会发生额外的请求和计算,但我认为它是合理的,我没有看到任何警告。你呢?

【问题讨论】:

    标签: security http hash token


    【解决方案1】:

    据我所知,它叫MAC

    我不明白哈希有什么问题。简单的计算表明,160 位的 SHA-1 哈希为我们提供了非常好的保护。例如。如果你有一个每秒进行 10 亿次尝试的超级云,你需要大约 30000 亿年的时间来暴力破解它。

    【讨论】:

    • 问题 sha1 哈希的背后是什么。即使它是一个 sha512 哈希,当秘密是 1234 时它也不会有什么好处。
    • @TheSurrican 当然这应该是一个很好的秘密。维基页面提到你必须在 MAC 中有一个密钥。在 Amazon/Rapidshare 的情况下,密钥不会离开公司服务器。当然,除非它被盗/暴力破解,否则它可以工作。秘密可能是 256 个安全随机字节,因此至少在我们的宇宙中不能被暴力破解。什么是被盗,这是完全不同的问题,没有答案。如果亚马逊有一个错误并且允许在任何时候轻松地检索秘密,那么它应该多久重新生成都没有关系。如果它是安全的,那么也没关系
    【解决方案2】:

    您基本上可以将您的问题重新表述为:秘密令牌需要多长时间才能安全。

    要回答这个问题,请考虑可能的字符数(字母数字 + 大写字母已经是每个字符 62 个选项)。其次确保秘密令牌是随机的,而不是在字典或其他东西中。然后,例如,如果您要使用 10 个字符长的秘密令牌,则需要 62^10 (= 839.299.365.868.340.224 ) 次尝试暴力破解(最坏情况;平均情况当然是一半)。我真的不会害怕,但如果你是,你总是可以确保秘密令牌至少有 100 个字符长,在这种情况下,暴力破解需要 62^100 次尝试(这是在我的终端)。

    结论:只要取一个足够大的令牌,就足够了。

    当然,代理身份验证确实为您的客户提供了额外的控制权,因为他们可以更直接地控制谁可以查看和不可以查看,例如,这也可以击败电子邮件嗅探。但我不认为暴力破解需要考虑足够长的令牌。

    【讨论】:

    • @TheSurrican 回答重新制定的问题很容易。正如我从 HMAC 描述中看到的那样,密钥长度被标准化为散列函数块大小(长密钥缩短,拍摄密钥填充)。 IE。 sha512 hmac 的最佳性能/安全平衡将是 72 字节。并且永远不要试图发明任何加密系统,例如安全令牌的幼稚实现可能容易受到攻击,例如看这里:blog.skullsecurity.org/2012/…
    【解决方案3】:

    您有很多方法来保护令牌:

    • 在 X 令牌解码失败后阻止 IP
    • 在您的令牌中添加时间戳(散列或加密)以在 X 天或 X 小时后撤销令牌
    • 我的最爱:使用快速的数据库系统,例如 Memcached 或更好的:Redis 来存储您的令牌
    • 像 Facebook 一样:生成带有时间戳、IP 等的令牌并加密它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-12
      • 2017-04-27
      • 2010-10-02
      • 2019-08-30
      • 1970-01-01
      • 2010-10-24
      • 2013-08-19
      • 2011-06-08
      相关资源
      最近更新 更多