我们工作中的计算机系统要求用户每隔几周更改一次密码,您不能使用与以前相同的密码。它会记住您最近的 20 个密码。我发现大多数人只是在密码末尾增加一个数字,所以“thisismypassword1”变成了“thisismypassword2”,然后是 3、4、5 等等。
由于所有这些密码都存储在某个地方,我想知道哈希本身是否存在任何弱点,用于存储密码的标准哈希算法,如 MD5。如果黑客拥有类似密码的哈希列表,他们是否会增加暴力破解密码的机会?
我们工作中的计算机系统要求用户每隔几周更改一次密码,您不能使用与以前相同的密码。它会记住您最近的 20 个密码。我发现大多数人只是在密码末尾增加一个数字,所以“thisismypassword1”变成了“thisismypassword2”,然后是 3、4、5 等等。
由于所有这些密码都存储在某个地方,我想知道哈希本身是否存在任何弱点,用于存储密码的标准哈希算法,如 MD5。如果黑客拥有类似密码的哈希列表,他们是否会增加暴力破解密码的机会?
使用良好的散列算法,相似的密码将分布在散列中。所以类似的密码会有非常不同的哈希值。
您可以尝试使用 MD5 和不同的字符串。
"hello world" - 5eb63bbbe01eeed093cb22bb8f5acdc3
"hello world" - fd27fbb9872ba413320c606fdfb98db1
这取决于哈希算法。如果有任何好处,类似的密码不应该有类似的哈希值。
相似的密码是否有相似的哈希值?
不。
任何相似性,甚至是复杂的相关性,都将被视为散列中的一个弱点。一旦被加密社区发现,它将被发布,并且在散列中发现的足够多的弱点最终加起来建议不要再使用该散列。
当然,没有办法知道哈希是否有未被发现的弱点,或者攻击者已知但未公布的弱点,在这种情况下,攻击者很可能是一个资金充足的政府组织。美国国家安全局当然拥有对某些加密组件的非公开理论攻击,但这些攻击是否可用是另一回事。GCHQ 可能是。我猜其他几个国家有秘密的加密程序,有足够多的数学家完成原创工作:我的第一个猜测是中国。您所能做的就是根据可用的最佳信息采取行动。如果最好的可用信息表明哈希“对加密有好处”,那么其中一件事就是没有这种可用的相似性。
最后,一些系统使用弱散列作为密码——要么是由于实施者的无知,要么是由于遗留问题。哈希方案的属性要么没有经过公开审查,要么已经过审查并发现有缺陷,要么已经足够老以至于最终发现了重大弱点。MD5 出于某些目的而被破坏(因为存在产生冲突的实际方法),但并非出于所有目的。AFAIK 这没关系,从某种意义上说,没有实际的图像前攻击,并且拥有少量相关明文的散列并不比拥有少量不相关明文的散列好。但是由于不相关的原因,无论如何您都不应该真正使用任何哈希的单个应用程序来存储密码,您应该使用多轮。
如果黑客拥有类似密码的哈希列表,他们是否会增加暴力破解密码的机会?
间接地,是的,知道这些是您的旧密码。不是因为散列的任何属性,而是假设攻击者设法(非常缓慢地)使用这些旧散列暴力破解您的一个或多个旧密码,并看到过去是“thisismypassword3”和“thisismypassword4” .
您的密码已更改为“thisismypassword5”。干得好,通过在攻击者破解之前更改它,您已经成功确保攻击者没有找回有价值的密码!胜利!除非它对你没有好处,因为攻击者有办法使用旧密码快速猜出新密码。
即使攻击者只有一个旧密码,因此无法轻易发现趋势,密码破解者也会通过尝试类似于字典单词和其他值的密码来工作。为了简化一点,它会首先尝试字典单词,然后是由一个单词组成的字符串,其中添加、删除或更改了一个额外的字符,然后是具有两个更改的字符串,依此类推。
通过在“其他值”中包含您的旧密码,攻击者可以确保在破解过程的早期检查与其非常相似的字符串。因此,如果您的新密码与旧密码相似,那么拥有旧哈希值对攻击者来说确实有一些价值 - 反转其中任何一个都会给他一个很好的种子来破解您当前的密码。
因此,定期增加密码并不会增加太多。将您的密码更改为可以从旧密码中猜到的密码会使您的攻击者处于与他们一无所知的情况相同的位置,但您的密码完全可以猜到。
如今,对密码系统的主要实际攻击是窃听(通过键盘记录器和其他恶意软件)和网络钓鱼。尝试反转密码哈希并不是一个好的百分比攻击,尽管如果攻击者以某种方式获得了 /etc/passwd 文件或等效文件,他们将在普通系统上以这种方式破解一些弱密码。
加密哈希的全部意义在于类似的密码绝对不会创建类似的哈希。
更重要的是,您很可能会对密码加盐,这样即使是相同的密码也不会产生相同的哈希值。
这取决于使用的哈希算法。一个好的人会将相似的输入分配给不同的输出。
不同的输入可能导致相同的哈希,这就是所谓的哈希冲突。
在这里检查:
http://en.wikipedia.org/wiki/Collision_%28computer_science%29
Hash colisions 可用于增加成功蛮力攻击的机会,请参阅:
为了扩展其他人所说的内容,一个快速测试表明你得到了非常不同的哈希值,只是对输入进行了微小的更改。
我使用以下代码运行快速测试:
<?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
简短的回答,不!
即使增加一个字符,散列函数的输出也会有很大的不同。
但这仅适用于您想破坏哈希函数本身。
当然,这是不好的做法,因为它使暴力破解更容易。
不,如果您稍微检查一下密码,它就会产生全新的哈希值。
作为一般规则,“好哈希”不会将两个相似(但不相等)的字符串散列到相似的哈希中。MD5 足够好,这不是问题。但是,对于相当多的常见密码(对于某些密码哈希,例如传统的基于 DES 的 unix 密码),存在“彩虹表”(本质上是密码:哈希对)完整的彩虹表。