我知道,为您使用的每个密码生成一个长盐是最好的做法。但是,使用一种盐是否能从根本不吃盐中获得安全好处?
发布于 2014-07-10 18:27:41
共享盐会让你稍微安全一些。它防止攻击者使用预先计算的彩虹表攻击,但它并不阻止他们为您的密码数据库构建一个单一的、新的彩虹表。因此,攻击者很难用给定的salt破解单个密码,但使用该salt破解每个密码要容易得多。
例如,考虑以下一组简化的密码、盐类和散列:
Password Salt Hash
aaaaaz y03sar ze4lap
zzzzza y03sar enbe65攻击者知道您的salt是y03sar,并开始计算从a到zzzzzz的每个密码的每个哈希。在很久以前(就迭代而言,对于如此复杂的密码和盐类来说,实际破解将很快完成)他们会发现密码zzzzza,他们会意识到他们也发现了密码aaaaaz。换句话说,在最坏的情况下,强行强制数据库中的一个密码并不比强制每个密码更困难。
对于不同的盐类,必须对每个密码分别进行攻击。
Password Salt Hash
aaaaaz bbq9f0 i2chf1
zzzzza y03sar enbe65如果攻击者再次开始用salt y03sar计算从a到zzzzzz的每一个密码的哈希数,那么i2chf1就不会出现在他们的输出列表中(至少对于合理的长度哈希输出是不太可能的;即使是这样,salt y03sar的计算密码仍然无法获得对aaaaaz帐户的访问,因为哈希与salt bbq9f0不同)。
要在混合中添加一些数字,使用单一盐可以将攻击时间从瞬时(彩虹表提供了对散列摘要的固定时间查找)延长到线性时间。一旦攻击者计算出系统允许的每个密码的哈希数,他们就可以访问您系统中的每个帐户。即使您有16个字符密码允许[a-zA-Z0-9],那么您的整个系统将在days or weeks中受到破坏。(链接问题只是一个例子--GPU的密码破解速度甚至比答案中的硬件还要快。)
现在,如果您对每个密码都有不同的盐类,那么攻击者在相同的时间内就会破解整个数据库,它们只破解了一个密码。
这是一个相当大的区别。使用独特的盐类。(以及good hashing algorithm,在我们讨论这个话题的时候。)
https://stackoverflow.com/questions/24682650
复制相似问题