我们工作中的计算机系统要求用户每隔几周更改一次密码,并且您不能使用与以前相同的密码。它会记住您最近使用的 20 个密码。我发现大多数人只是在密码末尾添加一个数字,因此“thisismypassword1”变为“thisismypassword2”,然后是 3、4、5 等。

由于所有这些密码都存储在某个地方,我想知道哈希本身是否存在任何弱点,对于用于存储密码(如 MD5)的标准哈希算法。如果黑客拥有相似密码的哈希值列表,他们是否会增加暴力破解密码的机会?

有帮助吗?

解决方案

相似的密码是否具有相似的哈希值?

不。

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

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

最后,一些系统使用弱哈希值作为密码——要么是由于实施者的无知,要​​么是遗留问题。对于哈希方案的属性,所有的赌注都已经结束,要么没有经过公众审查,要么已经经过审查并发现不足,要么已经足够老以至于最终发现了重大缺陷。MD5 出于某些目的而被破坏(因为存在产生冲突的实用方法),但并非出于所有目的。AFAIK 这样做是可以的,因为没有实际的原像攻击,并且拥有少量相关明文的哈希值并不比拥有少量不相关明文的哈希值更好。但出于不相关的原因,无论如何,您都不应该真正使用任何哈希的单个应用程序来存储密码,您应该使用多轮。

如果黑客拥有相似密码的哈希值列表,他们是否会增加暴力破解密码的机会?

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

您的密码已更改为“thisismypassword5”。干得好,通过在攻击者破解之前更改它,您已经成功确保攻击者无法恢复有价值的密码!胜利!但这对您没有任何好处,因为攻击者无论如何都有办法使用旧密码快速猜出新密码。

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

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

因此,定期增加密码并不会增加太多。将您的密码更改为可以从旧密码中猜出的密码,将使攻击者处于与他们一无所知的情况相同的境地,但您的密码却可以从一无所知中猜出。

目前对密码系统的主要实际攻击是窃听(通过键盘记录器和其他恶意软件)和网络钓鱼。尝试反转密码散列并不是一个好的百分比攻击,尽管如果攻击者以某种方式掌握了 /etc/passwd 文件或等效文件,他们就会 将要 在普通系统上以这种方式破解一些弱密码。

其他提示

使用良好的哈希算法,类似的密码将在整个哈希之间分发。因此,类似的密码将具有非常不同的哈希。

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

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

这取决于哈希算法。如果有任何好的,类似的密码不应具有类似的哈希。

加密哈希的全部要点是,类似的密码绝对不会产生类似的哈希。

更重要的是,您很可能会加盐密码,以便甚至相同的密码也不会产生相同的哈希。

这取决于使用的哈希算法。一个好的将分发相似输入以不同的输出。

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

在这里检查:

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

哈希殖民地可用于增加成功的蛮力攻击的机会,请参阅:

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

为了扩展其他人所说的话,快速测试表明,您会得到大不相同的哈希,并对输入进行了微小的更改。

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

<?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密码)有“彩虹表”(本质上是密码:哈希对)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top