在一个web应用程序中,我从/dev/urandom读取一些字节,以获得用于散列密码的随机盐。
放散之前先把盐base64好吗?因为base64编码有时会在结尾附加一些=,这可能会导致已知的明文攻击。但这可能没什么问题,因为盐仍然储存在db中,或者我错了吗?
这对应用程序的安全性有影响吗?
发布于 2014-12-21 22:46:21
大部分情况下,很可能不是。您的salt必须知道才能解密密码,因此我们可以假设任何攻击者都可以获得哈希密码和所使用的salt。您的salt现在所保护的是防止基于彩虹表的攻击和增加工作量(因为每个明文现在需要散列n次数,而不是一次来与n密码进行比较)。
只要你的盐有合理的长度,你可能会没事的。
发布于 2014-12-21 22:39:45
这取决于使用的哈希算法,字符的字母表被接受为salt。例如,BCrypt将接受以下字符,这些字符与base64编码的文本几乎(但不完全相同):./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz。
已知的纯文本攻击在这里是没有问题的,因为我们不加密任何东西,尤其是盐。
发布于 2014-12-21 22:54:30
不不安全。
您不应该对用户密码使用任何哈希函数。相反,您应该使用一个基于密码的密钥派生函数,例如PBKDF2或scrypt,并使用适当的迭代次数,以减缓散列,从而减少蛮力攻击的风险。
What's the difference between a Key Derivation Function and a Password-Hash?
如果您在web应用程序中使用PHP:
https://stackoverflow.com/questions/27594385
复制相似问题