更新:我最近从这个问题中学到,在下面的整个讨论中,我(而且我相信其他人也这样做)有点令人困惑:我一直称其为Rainbow表的实际上是一个哈希表。彩虹桌是更复杂的生物,实际上是Hellman哈希链的变体。尽管我相信答案仍然是相同的(因为它不能归结为密码分析),但其中的某些讨论可能有些偏斜。
问题是:“ 什么是彩虹桌?如何使用它们? ”
通常,我总是建议使用加密强度高的随机值作为盐,与哈希函数(例如,密码)配合使用,例如,防止Rainbow Table攻击。
但是,实际上在密码学上盐必须是随机的吗?在这方面,任何唯一值(每个用户唯一,例如userId)是否足够?实际上,这将防止使用单个Rainbow Table破解系统中的所有(或大多数)密码...
但是缺乏熵真的会削弱哈希函数的加密强度吗?
注意,我不是在问为什么使用盐,如何保护它(不需要),使用单个常量哈希(不要)或要使用哪种哈希函数。
只是盐是否需要熵。
到目前为止,感谢所有人提供的答案,但我想重点介绍一下我不太熟悉的领域。对密码分析的主要影响-如果有人从密码数学PoV中获得一些输入,我将不胜感激。
另外,如果还没有考虑其他向量,那也是很好的输入(请参阅多个系统上的@Dave Sherohman点)。
除此之外,如果您有任何理论,想法或最佳实践,请提供证明,攻击场景或经验证据作为支持。甚至是可以接受折衷的合理考虑...我对这个问题的最佳实践(B资本P大写)很熟悉,我想证明这实际上提供了什么价值。
编辑:这里有一些非常好的答案,但是我认为正如@Dave所说的,归结于Rainbow Tables的常见用户名...以及可能不太常见的名称。但是,如果我的用户名是全局唯一的怎么办?对于我的系统而言,不一定是唯一的,但对于每个用户而言,例如,电子邮件地址。
没有动力为单个用户建立RT(正如@Dave所强调的那样,salt不会保密),并且这仍然可以防止群集。唯一的问题是,我在不同的站点上可能拥有相同的电子邮件和密码-但无论如何,萨尔特不会阻止它。
因此,可以归结为密码分析-是否需要熵?(我目前的想法是,从密码分析的角度来看这不是必需的,但是从其他实际原因出发。)