更新:我最近从this question了解到,在下面的整个讨论中,我(我相信其他人却太)是一个有点混乱:我把什么叫彩虹表,实际上是在称为哈希表。彩虹表是更复杂的生物,实际上是Hellman Hash Chains的变种。虽然我相信答案仍然是一样的(因为它不归结为密码分析),但一些讨论可能有点偏差。
的问题:“What are rainbow tables and how are they used?”密码的非随机盐哈希
通常,我总是建议使用密码强随机值作为盐,为与散列函数(例如,用于密码),例如,以防止彩虹表攻击中使用。
但它实际上是加密必需的盐是随机的?在这方面,任何唯一值(每个用户唯一,例如userId)是否足够?这实际上将阻止使用单一的彩虹表破解所有(或大多数)密码系统...
但确实缺乏熵的真正削弱的散列函数的加密强度?
注意,我不是问为什么要使用盐,如何保护它(它并不需要是),使用单个常量哈希值(不),或者什么样的散列函数使用。
盐是否需要熵。
感谢所有迄今为止的答案,但我想专注于我(一点)不太熟悉的领域。密码分析的主要含义 - 如果有人从加密数学PoV中获得一些输入,我会非常感激。
另外,如果还有其他向量没有考虑到,那也是很好的输入(请参阅@Dave Sherohman指向多个系统)。
除此之外,如果您有任何理论,想法或最佳实践 - 请通过证明,攻击场景或经验证据来支持这一点。或者甚至可以考虑可接受的权衡......我对这个主题的最佳实践(大写B资本P)很熟悉,我想证明这实际上提供了什么样的价值。
编辑:这里一些很好的答案,但我认为,作为@戴夫说,它归结为彩虹表,共同的用户名...并可能不太常见的名字了。但是,如果我的用户名是全球唯一的呢?对我的系统不一定是唯一的,但每个用户 - 例如电子邮件地址。
没有激励为单个用户构建RT(如@Dave所强调的,盐不会保密),这仍然会阻止集群。唯一的问题是,我可能在不同的网站上有相同的电子邮件和密码 - 但盐无论如何不会阻止。所以,它回归到密码分析 - 熵是必要的,还是不是? (我现在的想法是这不是从一个密码分析点必要的,但它是从其他实际原因。)
我必须说我很困惑下面的许多答案。使用盐的主要目的是防止彩虹桌攻击,因此任何用户独有的东西都应该这样做,因为它会迫使攻击者为每个盐重新创建一个彩虹桌。我的2c。 – Goran 2009-02-11 13:31:56