2010-04-21 87 views
10

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

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

+16

如果您每隔几周就必须更改一次密码,并且无法在20次尝试中重复使用密码,这并不奇怪用户只是递增。这听起来像是,如果你需要经常更改密码以确保安全,那么密码并不是确保安全的手段。 – CaffGeek 2010-04-21 14:21:16

+2

请注意,虽然哈希中没有相似之处,但更改密码只会增加任何安全性,因为它可以防止攻击者以某种方式找出旧密码使用它。例如,如果攻击者每个月都需要执行字典/暴力攻击(假设他们知道散列),那么每个月更改一次密码意味着攻击毫无用处。 *除非*,密码与旧密码相似,在这种情况下,攻击者使用旧密码作为对新散列的新蛮力攻击的起点,该散列在微秒内完成,并且他们踢你的屁股。 – 2010-04-21 15:07:31

+0

我非常肯定,在实践中,强制执行频繁的密码更改会降低安全性,而不会增加安全性,因为这会让用户更难以选择并记住好的密码。它基于古代的“当日密码”惯例,在这种情况下,经常需要更改密码,因为*你的整个军队都知道它*,并且保证在适当的时候泄漏给敌人。计算机密码应该只对一个人知道。 – 2010-04-21 15:09:41

回答

10

做类似的密码,也有类似的哈希?

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

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

最后,有些系统使用弱哈希来表示密码 - 或者是由于实施者或传统的无知。所有的赌注都是针对哈希计划的特性而关闭的,哈希计划要么没有公开审查,要么已经被审查过,并且被发现有缺陷,或者已经足够老旧,以致最终发现了重大缺陷。由于某些目的,MD5被破坏(因为存在产生冲突的实际手段),但不是出于所有目的。对于这一点,AFAIK没有问题,因为没有实际的前映像攻击,并且有少量相关明文的散列并不比不相关的明文有一些散列更好。但由于不相关的原因,你不应该真的使用任何散列的单个应用程序密码存储,你应该使用多轮。

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

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

您的密码已经更改为“thisismypassword5”。做得好,通过在攻击者破解之前修改它,你已经成功地确保攻击者没有恢复有价值的密码!胜利!除了它不好之外,因为攻击者有办法使用旧密码快速猜测新的。

即使攻击者只有一个旧密码,因此也不能轻易发现趋势,密码破解程序通过尝试使用与字典单词和其他值类似的密码来工作。要过度简化一点,它会首先尝试字典中的单词,然后再添加,删除或更改一个额外字符的单词组成的字符串,然后再进行两次更改的字符串,依此类推。

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

因此,定期增加密码不会增加太多。将密码更改为旧密码中可猜测的内容,如果他们完全不知道什么,则可以将攻击者置于与他们处于同一位置的位置,但密码从无到有可以猜测。

这些天对密码系统的主要实际攻击是窃听(通过键盘记录器和其他恶意软件)和网络钓鱼。尝试反转密码散列并不是一个很好的百分比攻击,但是如果攻击者以某种方式获得了/ etc/passwd文件或等效文件,它们将在平均系统上打破一些弱密码。

+0

接受了,这个问题最详细,并提到了我在思考问题时错过了很多东西。谢谢! – NibblyPig 2010-04-22 13:51:13

10

它取决于哈希算法。如果它是好的,类似的密码不应该有类似的哈希值。

+2

是的,如果您使用哈希来加密目的,它最好拥有该属性。 (请注意,还有其他的领域需要*类似的输入以获得相似的散列。) – 2010-04-21 14:46:38

+0

应该,是的。但是他们呢? – NibblyPig 2010-04-21 15:30:15

+0

好的是的。你总是可以创建一个没有的哈希算法。它因算法而异。 – kemiller2002 2010-04-21 16:07:44

11

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

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

"hello world" - 5eb63bbbe01eeed093cb22bb8f5acdc3 
"hello world" - fd27fbb9872ba413320c606fdfb98db1 
+0

以这种方式在.NET或Windows中使用的标准算法是“好”吗?尽管对我来说,这些哈希看起来完全不一样,但对于一台并非如此的计算机来说。 – NibblyPig 2010-04-21 15:25:42

+0

就像你说的那样,他们是这样的'好'。 – Oded 2010-04-21 15:30:37

1

简答题,不!

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

但是,这只有当你想打破散列函数本身。

当然,这是不好的做法,因为它使bruteforcing更容易。

4

它取决于所使用的散列算法。一个好的人会分发类似的输入给不同的输出。

+0

当然,如果可能的话,一个好的散列算法会将* all *个输入分配给不同的输出? – RCIX 2010-04-22 05:34:51

+0

@RCIX:“所有输入到不同的输出” - 只有当结果散列与输入空间一样宽时才可能!首先使用散列的原因是创建一个比输入小得多的结果。 – 2010-04-22 05:53:30

+0

我认为你们都指的是前像抵抗和碰撞抵抗:http://en.wikipedia.org/wiki/Cryptographic_hash_function – jasonh 2010-04-22 06:19:29

1

不,如果你稍微检查密码,它会产生全新的散列。

6

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

更重要的是,你很可能会使用密码,以至于即使是相同的密码也不会产生相同的散列。

1

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

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 
+1

+1,用于显示获得答案的最佳方式...测试! – CaffGeek 2010-04-21 14:37:39

+1

对我来说,他们看起来不同,但ABC看起来与ZYX不同,但转换它们的算法非常简单。 – NibblyPig 2010-04-21 15:31:48

+0

@Chad我可以说,它是一个编程站点,想知道答案,并且可以测试它。这样做! – UnkwnTech 2010-04-21 16:46:15