假设我使用安全 PRNG 生成随机字节,我需要多少字节才能使授权令牌安全?
具体来说,当用户登录网站时,会生成一个令牌并将其存储在 cookie 中以授权未来的请求。在服务器端,令牌将存储在数据库中,并在收到请求时进行查找。
假设我使用安全 PRNG 生成随机字节,我需要多少字节才能使授权令牌安全?
具体来说,当用户登录网站时,会生成一个令牌并将其存储在 cookie 中以授权未来的请求。在服务器端,令牌将存储在数据库中,并在收到请求时进行查找。
由于授权令牌是随机的,因此您的主要攻击向量是暴力猜测。
在在线攻击中,您的防御策略可能会限制猜测率或允许的猜测总数,因此会限制必要的位长度。
如果在您的环境中可能发生这种攻击,那么离线攻击会更有趣。使用今天的技术,64 位(10 到 11 个字母数字字符)只是在相当长的时间和愚蠢的金额下处于可猜测的边缘。另一方面,除非我们对时间热力学的理解发生巨大变化,否则 128 位(21 到 22 个字母数字字符)几乎无限期地超出了蛮力攻击的范围。
防范什么?
尽管实际上您不必担心回答这个问题,但至于任何可能的问题,@terry-chia 的 16 个字节的回答就足够了。
如果您需要防止意外冲突(两个用户被授予相同的令牌),那么您需要查看您可以拥有多少不同的用户并做一些数学运算。因此,如果您的令牌用于识别(如用户名)以及身份验证,那么您需要担心这些类型的冲突。
不过,我猜你的用户数量不可能超过数万亿,所以即使你确实使用这些令牌进行识别,16 个字节就足够了。
在大约 8*10^14 个用户的情况下,您将有大约十亿分之一,10^{-9},有至少一对用户最终获得相同令牌的机会。如果风险太大,则使用 20 个字节。可以在生日问题的描述下找到此数学