C# 盐长度与总散列长度之比
我使用keydrivation.Pbkdf2生成密码散列,我想知道与Pbkdf2输出的总散列长度相比,salt长度的一般建议是什么 在下面的实现中,我使用HMACSHA512,并假设salt是512位,hashBitLength也是512位C# 盐长度与总散列长度之比,c#,security,hash,passwords,pbkdf2,C#,Security,Hash,Passwords,Pbkdf2,我使用keydrivation.Pbkdf2生成密码散列,我想知道与Pbkdf2输出的总散列长度相比,salt长度的一般建议是什么 在下面的实现中,我使用HMACSHA512,并假设salt是512位,hashBitLength也是512位 KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA512, iterationCount, hashBitLength / 8); 我见过一个使用HMACSHA256的示例,但是它将s
KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA512, iterationCount, hashBitLength / 8);
我见过一个使用HMACSHA256的示例,但是它将salt设置为128位,而总哈希位长度设置为256位。
为什么要采取这种做法
我曾读到512位可能是多余的,但就存储而言,这与我无关(但我不确定性能会受到什么影响,我还没有测量到这一点)
盐的长度应该与产生的整个散列长度相同。
应该是一半吗?
或者应该是高于某个阈值、低于总长度的任何值
我的直觉告诉我这样做是正确的(除了512位之外),因为我怀疑我得到了最大熵,但我不是密码学家
有人能帮我澄清一下吗?它真的不需要那么大,但让我们理解为什么。盐的用途是:
备注:为了完全排除彩虹桌,不要使用计数器。取而代之的是,选择“足够大”(如上所述)且不可预测的盐。感谢你的文章链接,里面有很多值得阅读的内容。还有一些问题我还需要回答:1)盐的长度应该和散列的长度一样吗?i、 e.如果我使用HMAC512,盐应该是512位吗?我看到一些消息来源说salt和散列算法是不相关的,其他人说它们应该是相同的长度。2) 更长的盐不会使攻击在计算上更昂贵吗?或者仅仅是唯一性才算数,而不是盐长度(例如,256位的盐和4096位的盐一样安全?@Steviebob:1)不,盐长度和哈希之间没有关系。事实上,昨天刚刚发现NIST现在说盐只需要32位——见。那些声称其长度必须与散列长度相同的人不知道他们在谈论什么,因为他们缺乏对该声明的正当性。2) 盐并没有使任何东西在计算上更昂贵。它用于唯一性,防止重复输出和彩虹攻击。