类似的密码有类似的哈希吗?

时间:2010-04-21 14:09:49

标签: security language-agnostic passwords hash brute-force

我们的计算机系统需要用户每隔几周更改一次密码,并且您不能拥有与以前相同的密码。它记得你最近的20个密码。我发现大多数人只是在密码末尾增加一个数字,所以“thisismypassword1”变成“thisismypassword2”然后是3,4,5等。

由于所有这些密码都存储在某处,我想知道哈希本身是否存在任何弱点,因为标准哈希算法用于存储密码,如MD5。如果黑客有一个类似密码的哈希列表,黑客是否会增加暴力破解密码的机会?

10 个答案:

答案 0 :(得分:11)

使用良好的哈希算法,类似的密码将分布在哈希中。因此类似的密码将具有非常不同的哈希值。

您可以尝试使用MD5和不同的字符串。

"hello world" - 5eb63bbbe01eeed093cb22bb8f5acdc3
"hello  world" - fd27fbb9872ba413320c606fdfb98db1

答案 1 :(得分:10)

这取决于散列算法。如果它有任何好处,类似的密码不应该有类似的哈希值。

答案 2 :(得分:10)

类似的密码是否有类似的哈希值?

没有

任何相似性,甚至是复杂的相关性,都会被认为是散列中的弱点。一旦被加密社区发现它就会被发布,并且哈希中发现的足够多的弱点最终会增加建议不再使用该哈希值。

当然,没有办法知道哈希是否具有未发现的弱点,或者攻击者已知但尚未发布的弱点,在这种情况下,攻击者很可能是资金充足的政府组织。国家安全局当然拥有对某些加密组件的非公开理论攻击,但这些攻击是否可用是另一回事。 GCHQ可能是。我猜其他一些国家有秘密的加密程序,有足够的数学家来完成原创工作:中国将是我的第一个猜测。您所能做的就是根据最佳信息采取行动。如果最好的可用信息表明散列“对加密有利”,那么其中一个意思就是没有这种相似之处。

最后,一些系统使用弱哈希密码 - 由于实施者或传统的无知。对于哈希计划的属性,所有投注都没有进行公开评审,或者已经过审查并且发现缺乏,或者已经足够大,最终发现了重大缺陷。 MD5因某些目的而被破坏(因为存在产生冲突的实用方法)但并非出于所有目的。 AFAIK可以这样做,因为没有实际的前映像攻击,并且拥有一些相关明文的哈希并不比拥有一些不相关的明文更好。但是出于无关的原因,你不应该真正使用任何哈希的单个应用程序进行密码存储,你应该使用多轮。

如果黑客有一个类似密码的哈希列表,黑客是否会增加暴力破解密码的机会?

间接地,是的,知道那些是你的旧密码。不是因为哈希的任何属性,而是假设攻击者设法(非常缓慢地)使用那些旧哈希暴力破解一个或多个旧密码,并且发现它过去曾是“thisismypassword3”和“thisismypassword4”

您的密码已更改为“thisismypassword5”。干得好,通过在攻击者破解之前更改它,您已成功确保攻击者无法恢复有价值的密码!胜利!除非它没有用,否则攻击者无论如何都可以使用旧密码快速猜出新的密码。

即使攻击者只有一个旧密码,因此无法轻易发现趋势,密码破解程序通过尝试与字典单词和其他值类似的密码来工作。为了过度简化,它将首先尝试字典单词,然后添加,删除或更改一个单词和添加了一个额外字符的字符串,然后是两个更改的字符串,依此类推。

通过将旧密码包含在“其他值”中,攻击者可以确保在破解过程的早期检查与其非常相似的字符串。因此,如果您的新密码与旧密码类似,那么使用旧密码确实对攻击者有一些价值 - 反转其中任何一个都会给他一个很好的种子来破解您当前的密码。

因此,定期增加密码不会增加太多。将密码更改为可从旧密码中猜出的密码,如果他们一无所知,您的攻击者就会处于与他们所处的位置相同的位置,但您的密码根本无法猜测。

目前对密码系统的主要实际攻击是窃听(通过键盘记录程序和其他恶意软件)和网络钓鱼。试图反转密码哈希不是一个很好的百分比攻击,虽然如果攻击者以某种方式获得了/ etc / passwd文件或等效文件,他们打破一些弱密码,就像在普通系统上那样

答案 3 :(得分:6)

加密哈希的重点是类似的密码绝对不会产生类似的哈希值。

更重要的是,您很可能会将密码加密,以便即使是相同的密码也不会生成相同的哈希值。

答案 4 :(得分:4)

这取决于使用的哈希算法。一个好的将分配类似的输入到不同的输出。

答案 5 :(得分:4)

不同的输入可能会导致相同的哈希,这就是所谓的哈希冲突。

点击此处:

http://en.wikipedia.org/wiki/Collision_%28computer_science%29

Hash colisions可用于增加成功暴力攻击的机会,请参阅:

http://en.wikipedia.org/wiki/Birthday_attack

答案 6 :(得分:4)

为了扩展其他人所说的内容,快速测试表明,如果对输入进行微小的更改,则会得到截然不同的哈希值。

我使用以下代码运行快速测试:

<?php
for($i=0;$i<5;$i++)
        echo 'password' . $i . ' - ' .md5('password' . $i) . "<br />\n";
?>

我得到了以下结果:

password0 - 305e4f55ce823e111a46a9d500bcb86c
password1 - 7c6a180b36896a0a8c02787eeafb0e4c
password2 - 6cb75f652a9b52798eb6cf2201057c73
password3 - 819b0643d6b89dc9b579fdfc9094f28e
password4 - 34cc93ece0ba9e3f6f235d4af979b16c

答案 7 :(得分:1)

简短回答,不!

即使增加一个字符,哈希函数的输出也会有很大差异。

但这只是你想打破哈希函数本身。

当然,这是不好的做法,因为它使得强制执行变得容易。

答案 8 :(得分:1)

不,如果您稍微检查密码,它会产生全新的哈希值。

答案 9 :(得分:1)

作为一般规则,“好散列”不会将两个相似(但不相等)的字符串散列为类似的散列。 MD5足够好,这不是问题。但是,对于相当多的常用密码(以及一些密码哈希,例如传统的基于DES的unix密码),存在“彩虹表”(基本上是密码:哈希对)存在完整的彩虹表。