2012-06-13 249 views
1

可能重复:
Is SHA-1 secure for password storage?SHA1不安全?

我是新来加密和我有一个疑问。这可能是一个愚蠢的问题,但我会问。我知道SHA1不可解密。但是一个快速的想法是,如果黑客创建一个包含两列的表 - 非加密密码及其SHA1加密值。并且这些行包含他在6个月内使用程序生成的所有字符组合(例如9亿条记录)的密码。如果他获得了SHA1加密密码,他不能轻易获得未加密的密码吗?

如果是,是否有解决方案来防止这种情况?

在此先感谢。

+0

您的9亿条记录的价值来自哪里?例如,8个字母或数字的密码给出2.18 * 10^14的可能性。 –

+0

不要严重考虑这个数字:D我只是用它来说黑客在他的分贝中有所有密码组合。 – Matt

+1

你所指的是[彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)。除此之外,这个问题是重复的。 –

回答

7

您所描述的攻击称为rainbow table。是的,它确实是短密码的有效担忧 - 因此是密码最小长度的典型安全要求。但是,表的大小需要随密码长度呈指数级增长;例如,对于每个附加字符,字母数字区分大小写的密码将使表增加62倍。因此,计算超过一定的长度变得难以处理。 (仅8个字符都会引起周围218 万亿组合。)

你可以采取另一种预防措施是salt你的密码(这可以简单地涉及计算其散列之前追加一个字符串常量每个密码)。这样,即使攻击者可以访问预先计算好的彩虹表,它也不会对付你的散列;必须为每种盐计算一个新的彩虹表。

1

词典攻击,如你所描述的,可以通过盐析散列来防止。从本质上讲,你迫使明文的长度和复杂度超出了正在使用的字典的范围。

实现也很简单。一种方法是维护一个密码,如“0shunF1ave”并将其附加到您的明文。因此,不是存储SHA1(密码),而是存储SHA1(“0shunF1ave”+密码)。当你验证密码时,你对像SHA1(“0shunF1av1”+候选人)这样的候选人执行相同的哈希到最初存储的哈希,并查看它们是否匹配。

5

防止彩虹表攻击的常用解决方案是使用Salt

虽然我会加上,但SHA1并不被认为是非常安全的。强大的计算机使用强力找到解密的密码是相当容易的。为了存储密码,建议使用像bcrypt或PBKDF2这样的慢哈希算法。