代码之家  ›  专栏  ›  技术社区  ›  user3795202

单个Salt是否提供额外的安全性?

  •  0
  • user3795202  · 技术社区  · 10 年前

    我知道,最好的做法是为您使用的每个密码生成一个长盐。但是,使用一种盐是否能从根本不含盐中获得安全益处?

    1 回复  |  直到 10 年前
        1
  •  2
  •   Community Egal    7 年前

    共享盐会让你稍微更有安全感。它可以防止攻击者使用预先计算的彩虹表攻击,但不能阻止他们为密码数据库构建一个新的彩虹表。因此,攻击者很难用给定的盐破解一个密码,但用该盐破解每个密码要容易得多。

    例如,考虑以下一组简化的密码、盐和散列:

    Password  Salt     Hash
    aaaaaz    y03sar   ze4lap
    zzzzza    y03sar   enbe65
    

    攻击者知道你的盐 y03sar 并开始计算每个哈希,每个密码从 a zzzzzz 很久以前(就迭代而言,对于密码和如此复杂的盐,实际破解会很快完成),他们发现了密码 zzzzza ,他们会意识到自己也发现了密码 aaaaaz 也就是说,在最坏的情况下,强行在数据库中输入一个密码并不比强行输入更难 每一个 暗语

    使用不同的盐,每个密码必须分别受到攻击。

    Password  Salt     Hash
    aaaaaz    bbq9f0   i2chf1
    zzzzza    y03sar   enbe65
    

    如果攻击者再次开始计算来自 嗡嗡声 用盐 y03合成孔径雷达 然后 i2chf1 不会 在他们的输出列表中(至少对于合理长度的哈希输出来说这是不可能的;即使是这样,salt的计算密码也是不可能的 y03合成孔径雷达 仍然无法访问 aaaaa z型 因为哈希值与salt不同 bbq9f0 ).

    为了向混合中添加一些数字,使用一个盐将攻击时间从瞬时(彩虹表提供了对哈希摘要的恒定时间查找)延长到线性时间。一旦攻击者计算出系统允许的每个密码的哈希值,他们就可以访问 每一个 您的系统中的帐户。即使您有16个字符的密码 [a-zA-Z0-9] ,那么你的整个系统在 days or weeks 。(链接问题只是一个例子-GPU破解密码的速度甚至比答案中的硬件更快。)

    现在,如果每个密码都有不同的盐,那么在攻击者破解整个数据库所花费的相同时间内,他们只破解了一个密码。

    这是一个很大的区别。使用独特的盐。(和a good hashing algorithm ,而我们正在讨论这个话题。)