授权令牌应该有多少字节?

信息安全 随机的 授权
2021-08-31 22:24:05

假设我使用安全 PRNG 生成随机字节,我需要多少字节才能使授权令牌安全?

具体来说,当用户登录网站时,会生成一个令牌并将其存储在 cookie 中以授权未来的请求。在服务器端,令牌将存储在数据库中,并在收到请求时进行查找。

2个回答

由于授权令牌是随机的,因此您的主要攻击向量是暴力猜测。

在在线攻击中,您的防御策略可能会限制猜测率或允许的猜测总数,因此会限制必要的位长度。

如果在您的环境中可能发生这种攻击,那么离线攻击会更有趣。使用今天的技术,64 位(10 到 11 个字母数字字符)只是在相当长的时间和愚蠢的金额下处于可猜测的边缘。另一方面,除非我们对时间热力学的理解发生巨大变化,否则 128 位(21 到 22 个字母数字字符)几乎无限期地超出了蛮力攻击的范围。

防范什么?

尽管实际上您不必担心回答这个问题,但至于任何可能的问题,@terry-chia 的 16 个字节的回答就足够了。

如果您需要防止意外冲突(两个用户被授予相同的令牌),那么您需要查看您可以拥有多少不同的用户并做一些数学运算。因此,如果您的令牌用于识别(如用户名)以及身份验证,那么您需要担心这些类型的冲突。

不过,我猜你的用户数量不可能超过数万亿,所以即使你确实使用这些令牌进行识别,16 个字节就足够了。

在大约 8*10^14 个用户的情况下,您将有大约十亿分之一,10^{-9},有至少一对用户最终获得相同令牌的机会。如果风险太大,则使用 20 个字节。可以在生日问题的描述下找到此数学