Do similar passwords have similar hashes?
我们的工作计算机系统要求用户每隔几周更改一次密码,而您的密码不能与以前的密码相同。它能记住大约20个你最后的密码。我发现大多数人只是在密码末尾增加一个数字,所以"thisismypassword1"变成"thisismypassword2",然后是3、4、5等。
由于所有这些密码都存储在某个地方,我想知道哈希本身是否存在弱点,因为用于存储密码(如MD5)的标准哈希算法。如果黑客有类似密码的散列列表,他们是否会增加暴力破解密码的机会?
使用一个好的哈希算法,类似的密码将在哈希中分布。所以类似的密码会有非常不同的哈希值。
您可以使用MD5和不同的字符串来尝试此操作。
1 2 | "hello world" - 5eb63bbbe01eeed093cb22bb8f5acdc3 "hello world" - fd27fbb9872ba413320c606fdfb98db1 |
相似的密码有相似的哈希值吗?
不。
任何相似性,即使是复杂的相关性,都会被认为是散列中的一个弱点。一旦被加密社区发现,它将被发布,并且在散列中发现的足够多的弱点最终加起来就是不再使用该散列的建议。
当然,没有办法知道哈希是否有未发现的弱点,或者攻击者知道但未发布的弱点,在这种情况下,攻击者很可能是一个资金充足的政府组织。国家安全局当然对一些加密组件进行了非公开的理论攻击,但这些攻击是否可用则是另一回事。GCHQ可能是。我想其他一些国家也有秘密的密码程序,有足够的数学家来完成原创性的工作:中国是我的第一个猜测。你所能做的就是根据现有的最佳信息采取行动。如果可用的最佳信息表明散列值"有利于加密",那么其中一个意思就是没有这种可用的相似性。
最后,有些系统对密码使用弱散列值,这可能是由于实现者或遗留的原因造成的。对于一个哈希方案的属性,所有的赌注都被取消了,要么是该方案没有经过公开审查,要么是该方案已经被审查并发现有缺陷,要么是该方案已经足够老,以至于最终发现了明显的缺陷。MD5因某些目的(因为存在产生碰撞的实际方法)而中断,但并非所有目的。阿法克,这是可以的,在这个意义上,没有实际的图像前攻击,有一些相关的明文散列并不比有一些无关的明文散列更好。但是由于不相关的原因,您不应该真正使用任何哈希的单一应用程序来存储密码,无论如何,您应该使用多轮。
如果黑客有类似密码的散列列表,他们是否会增加暴力破解密码的机会?
间接地,是的,知道那些是你的旧密码。不是因为散列的任何属性,而是假设攻击者设法(非常缓慢地)使用这些旧散列强制一个或多个旧密码,并发现在过去它是"thisismypassword3"和"thisismypassword4"。
您的密码已更改为"thisismypassword5"。干得好,在攻击者破解它之前更改它,您已经成功地确保了攻击者没有恢复一个有价值的密码!胜利!但这对您没有好处,因为攻击者可以使用旧密码快速猜测新密码。
即使攻击者只有一个旧密码,因此无法轻易发现趋势,密码破解器也可以通过尝试类似字典单词和其他值的密码来工作。为了过度简化一点,它将首先尝试字典中的单词,然后是由添加、删除或更改一个额外字符的单词组成的字符串,然后是两个更改的字符串,依此类推。
通过将旧密码包含在"其他值"中,攻击者可以确保在破解过程的早期检查与之非常相似的字符串。因此,如果您的新密码与旧密码相似,那么使用旧散列对攻击者来说确实有一些价值——颠倒其中任何一个散列值都会给攻击者一个破解当前密码的好种子。
因此,定期增加密码并不会增加太多内容。将您的密码更改为可以从旧密码猜测到的密码会使攻击者处于与他们相同的位置,如果他们什么都不知道,那么他们也会处于相同的位置,但您的密码完全可以从零猜到。
目前对密码系统的主要实际攻击是窃听(通过键盘记录器和其他恶意软件)和网络钓鱼。试图逆转密码散列并不是一个好的攻击百分比,尽管如果攻击者以某种方式获得了/etc/passwd文件或等效文件,他们将以这种方式在普通系统中破坏一些弱密码。
这取决于散列算法。如果有任何好处,类似的密码不应该有类似的哈希值。
密码散列的关键是相似的密码绝对不会创建相似的散列。
更重要的是,您很可能会在密码上撒盐,这样即使相同的密码也不会产生相同的哈希值。
为了扩展其他人所说的内容,一个快速的测试表明,通过对输入进行小的更改,可以得到非常不同的散列。
我使用以下代码运行快速测试:
1 2 3 4 5 | <?php for($i=0;$i<5;$i++) echo 'password' . $i . ' - ' .md5('password' . $i) ."<br /> "; ?> |
号
我得到了以下结果:
1 2 3 4 5 | password0 - 305e4f55ce823e111a46a9d500bcb86c password1 - 7c6a180b36896a0a8c02787eeafb0e4c password2 - 6cb75f652a9b52798eb6cf2201057c73 password3 - 819b0643d6b89dc9b579fdfc9094f28e password4 - 34cc93ece0ba9e3f6f235d4af979b16c |
不同的输入可能导致相同的哈希,这就是所谓的哈希冲突。
请在此处检查:
http://en.wikipedia.org/wiki/collision28computeru science%29
散列大肠杆菌可用于增加暴力攻击成功的机会,请参见:
http://en.wikipedia.org/wiki/birthday_攻击
这取决于使用的哈希算法。一个好的将把相似的输入分配到不同的输出。
一般来说,"好的哈希"不会将两个相似(但不相等)的字符串哈希到相似的哈希。MD5足够好,这不是问题。但是,对于相当多的常见密码(以及对于某些密码哈希,例如传统的基于DES的Unix密码),存在"彩虹表"(基本上是密码:哈希对)完整的彩虹表。
不,如果您稍微检查一下密码,它就会产生全新的哈希。
简短的回答,不!
哈希函数的输出变化很大,即使增加了一个字符。
但这只是在您想要破坏hashfunction本身的情况下。
当然,这是不好的做法,因为它使野蛮变形更容易。