是否可以从(部分)MD5哈希中检索密码?

时间:2011-02-28 10:58:47

标签: hash passwords md5 brute-force rainbowattack

假设我只有MD5哈希的前16个字符。如果我使用暴力攻击或彩虹表或任何其他方法来检索原始密码,我可以期待多少兼容的候选人? 1? (我不认为)10,100,1000,10 ^ 12?即使是粗略的答案也是受欢迎的(对于数字,但请与哈希理论和方法一致)。

2 个答案:

答案 0 :(得分:2)

MD5的输出为16 字节(128位)。我想你在谈论一个十六进制表示,因此是32个字符。因此,“16个字符”表示“64位”。您正在考虑将MD5的输出截断为64位。

MD5接受的输入最长为 2 64 位;假设MD5表现为随机函数,这意味着 2 18446744073709551616 可能的输入字符串将或多或少均匀映射到 2 64 输出,因此给定输出的平均候选数约为 2 18446744073709551552 ,接近 10 5553023288523357112.95 < / SUP>

但是,如果您认为找到至少一个候选者,那么这意味着您考虑的可能密码空间会大大减少。 rainbow table是一种特殊的预计算表,它接受紧凑的表示(以相对昂贵的查找过程为代价),但如果它涵盖 N 密码,那么这意味着,某些时候,有人可以应用散列函数 N 次。在实践中,这严重限制了 N 的大小。假设 N = 2 60 (这意味着表格构建器具有大约一百个NVidia GTX 580 GPU并且可以运行它们六个月;此外,该表将使用相当于然后,平均而言,只有1/16的64位输出在表中具有匹配的密码。对于表中的那些密码,表中没有其他密码导致相同输出的概率为93.75%;如果您愿意,如果您找到匹配的密码,那么您平均会找到0.0625个其他候选人(即大部分时间,没有其他候选人)。

简而言之,您的问题的答案取决于您考虑的可能密码空间的大小 N (彩虹表构建期间涵盖的那些);但是,在使用基于地球的技术的实践中,如果你能找到64位输出的一个匹配密码,那么你可能无法找到另一个(尽管还有很多其他的) )。

答案 1 :(得分:1)

您永远不可能从部分哈希中获取密码。

相关问题