1

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

4

2 回答 2

2

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

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

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

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

于 2011-02-28T14:05:58.763 回答
1

您永远无法从部分哈希中获取密码。

于 2011-02-28T11:01:33.200 回答