我是加密新手,我有一个疑问。这可能是一个愚蠢的问题,但我会问。我知道SHA1不可解密。但是想想,如果黑客创建一个包含两列的表 - 非加密密码及其SHA1加密值。行包含他在6个月内使用程序生成的所有字符组合的密码(比如9亿条记录)。如果他获得SHA1加密密码,他不能轻易获得非加密密码吗?
如果是,是否有任何解决方案可以阻止这种情况?
提前致谢。
答案 0 :(得分:8)
您所描述的攻击称为rainbow table。是的,它肯定是短密码的有效问题 - 因此对最小密码长度的典型安全要求。但是,表的大小需要随密码的长度呈指数级增长;例如,对于每个附加字符,字母数字区分大小写的密码会将表增加62倍。因此,计算超出一定长度变得棘手。 (只有8个字符会产生大约218个万亿组合。)
您可以采取的另一项预防措施是salt您的密码(这可能简单地涉及在计算其哈希值之前为每个密码附加一个常量字符串)。这样,即使攻击者可以访问预先计算的彩虹表,也不会对你的哈希有用;必须为每种盐计算一个新的彩虹表。
答案 1 :(得分:5)
防止彩虹表攻击的常见解决方案是使用Salt。
我想补充一点,SHA1不被认为是非常安全的。使用功能强大的计算机,使用强力查找未解密的密码非常容易。对于存储密码,建议使用慢速散列算法,如bcrypt或PBKDF2。
答案 2 :(得分:1)
是。这就是为什么重要的是你的哈希值。只要你有正确的盐渍,你所谈论的表格类型只对一个密码有用。
答案 3 :(得分:1)
字典攻击,例如你所描述的字典攻击,可以通过盐析哈希来防止。从本质上讲,您强制明文的长度和复杂性超出了所使用字典的范围。
实施起来也很简单。一种方法是维护密码,例如“0shunF1ave”并将其附加到您的明文。因此,不是存储SHA1(密码),而是存储SHA1(“0shunF1ave”+密码)。验证密码时,对候选者执行相同的哈希,例如SHA1(“0shunF1av1”+候选者)到原始存储的哈希,看看它们是否匹配。