可以通过哈希结果判断密码猜测是否接近?

信息安全 密码 哈希 密码破解
2021-08-14 06:36:49

我最近一直在阅读有关密码管理的内容(非常有趣的东西!),并且想知道对于类似的字符串,哈希值会有多么不同。

是否可以通过将结果哈希与真实哈希进行比较来知道密码猜测是否接近?

例如,如果真实密码是“password123”并且黑客尝试了“Password123”、“password1234”、“password124”等,生成的哈希是否与黑客或他们的计算机可以分辨的真实哈希足够相似他们走在正确的轨道上吗?

让我们假设黑客知道任何盐、胡椒、辣椒粉、adobo 等等……如果他们尝试正确的密码,他们将生成匹配的哈希。

(我认为这可能会因使用的哈希函数而异,但我不确定。)

4个回答

不,您无法确定您在查看哈希时猜到的距离。哈希函数的设计考虑到了这一点:输入上的单个更改位必须更改输出上的很多位。它被称为雪崩效应

下面是一些示例密码的 SHA1 哈希:

cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123

b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123

2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124

115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple

abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple

一个位的变化将完全改变散列结果。事实上,在理想情况下,对于输入的每一位变化,每一位输出都会以 50% 的概率发生变化。

不,由于雪崩效应,即使输入中的单个位变化也会在输出中产生显着的巨大差异。

还谈论像 md5 或其他散列函数......给定任何输入大小,输出大小都不会改变。在 md5 中,如果您的输入大小为 2 位或 2000 位,则您的输出将始终为 32 位字母数字(十六进制格式)。因此,即使普通用户对 md5 输出进行了哈希处理,也几乎不可能猜测输入大小,猜测密码超出了普通用户的范围,仍然存在通过应用算法和大量排列来进行高端并行计算的方法和如果您有散列代码,则组合找出可能的输入之一......!

md5 输出:
密码123 = 482c811da5d5b4bc6d497ffa98491e38
密码 123 = 42f749ade7f9e195bf475f37a44cafcb
密码1234 = bdc87b9c894da5168059e00ebffb9077

以上结果显示了雪崩效应。

要在上面的答案中添加一个额外的元素 - 哈希函数的全部意义在于不放弃问题中的那种信息 - 如果您可以确定任何关于输入形式比较输出的相似性,这表示失败哈希函数。

不仅仅是散列函数执行一些工作,顺便说一下,你无法弄清楚输入的任何内容,散列函数的工作是给你关于输入的零信息,如果你能找到关于输入的一些信息通过比较两个输出,那将违反该原则。

这取决于您使用的哈希函数。由于您指定了密码哈希,那么明确地 no,您永远不会希望对泄露任何类型信息的密码使用哈希函数。哈希应该只是匹配或不匹配,就是这样。

话虽如此,提供相似性信息的哈希函数确实存在。此答案中提供了更多信息