盐需要多强?
目前,我使用此功能在用户注册时生成“唯一”盐:
$salt = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 0, 12);
然后我用sha1
和密码一起散列它。
您怎么看?
PS。我不打算让MySpace变大。
答案 0 :(得分:2)
在安全方面,实际上并不是盐的强度问题,而是散列函数计算成本如何昂贵的问题。 SHA1和MD5很便宜。如果您要坚持使用快速(弱)散列函数 - 这对于小型站点来说可能是完全可以接受的,我并不是要暗示其他 - 那么我不会担心盐的加密随机性如何。只要它是随机的,它的目的就是消除恰好一个攻击向量(彩虹表)。
答案 1 :(得分:1)
洗牌和取前12的方法相当于在订单重要时挑选(不重复)12个字符。你有36个!/(36-12)! ~~ 2 ^ 59可能的方法。
如果从36个字母的集合中选择所有12个元素(可能重复),则有36 ^ 12〜2 ^ 62种可能的方法。
因此,在您使用的方法中,最终得到大约59位的熵。我想说它对于任何应用程序来说已经足够了,并且只重复使用重复元素的组合少8倍。
答案 2 :(得分:1)
随机盐的目的是确保如果泄漏数据库表,简单的彩虹表将无法解密密码。如果每条记录都有自己的盐,那么每一行都需要一个新的彩虹表。
你的洗牌方法很好。重点是每个记录的盐都不同,因此单个彩虹表不会损害整个密码表。盐的“强度”并不重要。
答案 3 :(得分:0)
盐的强度取决于您对安全性的担忧程度。你可以简单地用用户名(不是很强大)加盐,或者像你一样为每个用户生成一个独特的盐。
如果您真的很担心,您还可以创建加密密钥,并加密其中的每一项。
你添加的越多,显然就越强烈。这就是你对安全的担忧。
您可以尝试在该盐中添加一些特殊字符,它会更强大。
答案 4 :(得分:0)
12个字符或更长的盐长度难以破解,但您也可以通过使用其他字符(即大写字母和特殊字符)轻松地使盐更强。
你已经在腌制哈希并确保每条记录都有自己的个体盐very important。
答案 5 :(得分:0)
任何足够随机的盐都很强“足够”。盐的随机性越多,字符越多,散列越好,但任何多个字符长且随机的东西都会起作用。
以下是一些有关密码安全性的有趣链接: