我正在构建一个api身份验证层,它基本上像安全cookie协议一样工作,在这里,我给api客户机一个令牌,它们必须在随后的请求中提供这个令牌,而不是cookie。该令牌是通过HMAC使用保存在服务器上内存中的秘密密钥进行签名的。键是一个64个字符的随机十六进制字符串。目前,我正在使用密钥直接对令牌进行签名,但基于我在rails源代码中看到的内容,他们使用一个通过使用pbkdf2扩展秘密密钥库派生的秘密密钥对cookie进行签名。这种防御方式是什么威胁?据我所知,键拉伸应该有助于防止对存储密码的离线暴力攻击。我不清楚它的目的是什么,它是否是我应该实现的东西。
发布于 2015-06-02 15:01:52
键拉伸基本上给了一个低熵的键更强的强度,它通过多次迭代得到一个散列。
一个64个字符的十六进制字符串,假设它是完全随机生成的,它将有256位的熵。当使用HMAC验证字符串时,任何128位或更高的内容都被认为是“不可打破的”。
键拉伸可以降低使用弱密钥的风险,因为攻击者找到密钥的唯一方法是通过脱机密码猜测攻击。通过使用例如1024次迭代的键拉伸,这实际上使密码10位“更强”,因为攻击者必须对每个密码运行1024次哈希函数(相当于密码本身有更大的熵--它弥补了更强的密码所需的额外密钥空间)。
因此,对于Rails,这是为了防止站点所有者选择一个弱键(< 128位)。如果你能控制你的钥匙,你使它足够强大,没有必要任何键伸展。
https://security.stackexchange.com/questions/90692
复制相似问题