盐需要多强?

时间:2010-01-03 17:38:16

标签: php encryption hash salt

盐需要多强?

目前,我使用此功能在用户注册时生成“唯一”盐:

$salt = substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz'), 0, 12);

然后我用sha1和密码一起散列它。

您怎么看?

PS。我不打算让MySpace变大。

6 个答案:

答案 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)

任何足够随机的盐都很强“足够”。盐的随机性越多,字符越多,散列越好,但任何多个字符长且随机的东西都会起作用。

以下是一些有关密码安全性的有趣链接: