为什么盐应该与哈希值长度相同?

6
我曾经读到过一篇文章,提到要使用的盐应该与哈希密码的长度相同,这样做的原因是什么?这会增加密码保护吗?
在这里链接中提到:
为了使攻击者无法为每个可能的盐创建查找表,盐必须足够长。一个好的经验法则是使用与哈希函数输出相同大小的盐。例如,SHA256的输出为256位(32字节),因此盐应至少为32个随机字节。

7
你是从哪里看到这个的? - President James K. Polk
3
“为了防止攻击者为每个可能的盐创建查找表,盐必须足够长。” - Kien Truong
2
你的问题最适合在Security.SE上提问。 - jweyrich
2
@jweyrich:或者crypto.SE - Ilmari Karonen
1
我不知道有安全.SE这样的东西,如果有,请移动这个问题。 - user962206
显示剩余3条评论
3个回答

9

这里有一个很好的说明为什么需要密码盐。

不,你不需要让盐的长度与密码相同。事实上,文章中列出的所有实现都没有这样做。通常,每增加一位盐,你就要求攻击者将其存储预算翻倍。

因此,拥有一个10字节的盐对于今天的技术水平应该足够了。另外请注意,盐是二进制值,而密码不是,因此盐的长度应该以位/字节为单位,而不是字符。


4

这个盐并不需要那么长,但是确保长度足够也无伤大雅。

关于的唯一真正要求是它应该是全局唯一的。即使这也不是一个强制性要求,因为拥有一些重复的盐并不能帮助攻击者多少。只有在大量重复的情况下,盐才会失去其有效性。

特别地,由于生日悖论,如果盐是随机选择的,则理想情况下至少应该为2·log2(n)位,其中n是您预计最大用户数(或更一般地说,使用您选择的哈希方法的最大用户数)。当然,在这之上还应该有一些安全裕量。

特别地,地球总人口略超过232。这意味着,即使地球上每个人都为您的系统注册一个帐户,64位的盐仍然足够安全。


2

我认为盐的强度应该与密码的强度大致相同,因为两者都应该抵御暴力攻击。

一个简单的盐更容易受到攻击,但即使是一个简单的盐也比没有盐要困难得多。


2
盐不需要抵抗暴力攻击,也不必保密。它只需要是独一无二的。 - Ilmari Karonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接