Google 建议使用 130 位加密安全随机数作为防伪令牌。
为什么我们需要这么多位?如果攻击者决定发起蛮力攻击,你难道不能在几次尝试后检测到并锁定他们吗?只需 30 位,您就可以为 1000 个并发用户获得 100 万个可能的令牌。使用蛮力猜测令牌似乎极不可能。
我的观点是,30-40 位的数据似乎很难用蛮力破解。那么为什么 Google 推荐 130 位呢?这不是矫枉过正吗?
更新:好的,说你无法阻止暴力攻击......
- 根据这篇 Quora 帖子, Facebook 每分钟有 500,000 名独立访问者。
- 假设每个用户每秒发出一个请求,那么您每 2 微秒就有一个请求。
- 因此,我们可以安全地假设(截至今天)最强大的攻击者将能够每 2 微秒最多发送一个请求。
- 接下来,假设我们在 5 分钟后使令牌过期。这意味着攻击者可以在令牌过期之前发出 1.5*10 8个请求。
- 接下来,假设我们希望攻击者猜到令牌的机会小于 1%。因此,我们需要一个由每个活跃代币组成的 1.5*10 10 个代币池。
- 因此,如果您有 500,000 个并发用户 (Facebook),您需要 7.5*10 15 个令牌(每个用户一个池)。
- 这意味着您需要 53 位数据,这与 Google 要求的 130 位数据相差甚远。