更新: 我最近从 这个问题了解到,在下面的整个讨论中,我(我相信其他人也是这样做的)有点困惑: 我一直称之为彩虹表,实际上称之为散列表。彩虹桌是更复杂的生物,实际上是赫尔曼散列链的一个变种。虽然我相信答案仍然是相同的(因为它不归结于密码分析) ,但是一些讨论可能有点歪曲。
问题是“ 什么是彩虹桌? 它们是如何使用的?”
通常,我总是建议使用一个加密强的随机值作为 salt,与散列函数一起使用(例如用于密码) ,比如防止 Rainbow Table 攻击。
但是,实际上,在密码学上,盐是随机的真的有必要吗?在这方面,任何唯一的值(每个用户的唯一值,例如 userId)就足够了吗?事实上,它可以防止使用单个 Rainbow Table 破解系统中的所有(或大多数)密码..。
但是,缺乏熵真的会削弱散列函数的密码强度吗?
注意,我不是问为什么要使用 salt,如何保护它(不需要) ,使用单个常量 hash (不要) ,或者使用什么类型的 hash 函数。
盐是否需要熵。
谢谢到目前为止所有的答案,但是我想把重点放在我(有点)不太熟悉的领域。主要是对密码分析的影响——如果有人能从密码数学 PoV 中获得一些信息,我将非常感激。
此外,如果还有其他向量没有被考虑,这也是很好的输入(参见@Dave Sherohman 关于多个系统的观点)。
除此之外,如果你有任何理论、想法或最佳实践,请用证明、攻击场景或经验证明来支持。或者甚至是对于可接受的权衡的有效考虑... ... 在这个问题上,我熟悉最佳实践(大写的 B 大写的 P) ,我想证明这实际上提供了什么价值。
编辑: 这里有一些非常好的答案,但是我认为正如@Dave 所说,归根结底就是彩虹表中的常见用户名... ... 还有可能是不太常见的名字。但是,如果我的用户名是全局唯一的怎么办?对于我的系统来说不一定是独一无二的,但是对于每个用户来说都是独一无二的——比如电子邮件地址。
没有为单个用户构建 RT 的动机(正如@Dave 强调的那样,盐不是保密的) ,而且这仍然会阻止集群。唯一的问题是,我可能有相同的电子邮件和密码在不同的网站-但盐不会阻止无论如何。
所以,回到密码分析-熵是必要的,还是不必要的?(我目前的想法是,从密码分析的角度来看,这没有必要,但这是出于其它实际原因。)