我用 散列我的密码MD5
。我并不真正关心使用那里最好的算法对它们进行散列,因为我相信添加最随机的盐,一个简单的MD5
散列不能被所谓的“MD5 解码器”识别。唯一困扰我的是暴力破解。我想知道如果我在密码的盐中包含来自不同字母(阿拉伯文、中文、日文、西里尔文)的字符是否会有所不同。问题是这是否会使暴力破解复杂化?
2 回答
加盐密码散列的优点之一是降低在散列列表受损时使用查找列表(等)的风险。
为了说明的目的,考虑;
Alice 有密码“Ford”,其哈希值为 x Bob 也有密码“Ford”,其哈希值为 x
现在,如果用户/哈希列表被破坏并且Alice 的密码被暴力破解,那么攻击者也可以破坏 bob 的帐户。
有一个固定的盐并没有帮助,因为虽然两个用户之间的密码可能相同,但哈希的结果将与以前不同,但对两个用户来说都是相同的。查找 Alice 的密码也适用于 Bob。
使用每个用户的确定性字符串对密码进行加盐(它必须是确定性的,因为您每次都必须为用户使用相同的东西)现在意味着即使 Alice 和 Bob 拥有相同的密码,他们的哈希值也可能不同(也许如果salt 是他们的用户名)。任何试图破坏帐户的人现在都必须强制每个用户破坏列表。
因此,了解了为什么哈希有用之后,您就可以进入下一点;角色重要吗?如果你考虑一个 16 字节的散列(例如 MD5,它确实不应该用于加密目的,但你已经知道了),这会给你 128 位的熵。如果您的密码策略具有适当的最小密码长度,并且可能需要良好的字符组合(即使 € 也足以成为 UTF-8 中的多字节字符,这将在所有 8 位上产生熵以汉字的方式显示字符),那么任何(每个用户)盐都可以同样有效地工作。
当然,它使蛮力攻击更加困难。使用蛮力时,您只需从有限的字符池中尝试所有组合。其中很可能不包含阿拉伯文、中文、日文、西里尔字符。想要攻击您的密码的人不太可能选择具有这些字符的池,因为随着池大小的增加,获取密码的时间呈指数增长。
您可以像这样计算组合的数量 -
Charpool = 52(小写+大写字母)
组合 = 52^长度
这将在 380204032 组合中解析 5 个字母的密码。
但是回答你的问题 - 是的,它会使蛮力更加复杂。不仅因为增加了字符池,而且更因为攻击者必须在他的攻击中包含这些外来字符。