如果您有多个哈希值,是否更容易获得原始密码?

信息安全 密码 哈希 蛮力 密码分析
2021-08-29 20:11:19

大多数用户通常对多个应用程序使用相同的密码。假设所有这些应用程序都以某种方式对密码进行哈希处理。如果攻击者可以访问所有不同的哈希值,它会更容易获得原始密码吗?当然,可能查看哈希的攻击者可能知道哪个是较弱的,并且只会尝试暴力破解,但是他是否获得了可以访问相同密码的其他哈希的任何东西?还假设攻击者没有任何包含这些哈希值的彩虹表。

那么,如果攻击者可以访问相同密码的所有这些散列,他能否比仅仅尝试暴力破解其中一个 md5 散列更快(因为在这种情况下是较弱的链接)?

  • 33c38d9db9759da0d0a813968bc3c1fb
  • 7b8758cf3cb6e540d60b3e9999c48fbef0502ac6
  • faa81286aa90907253a58acfd83d2d89e58120031630d60dc05d0cd365b6df8d
  • $1$NPeNiNCA$AwpOWKuur2LZvXiJxNM6U1
  • $5$VHVZwDnI4aAEUG2m$ZhSJ537JmYJ5ISDxPQ6doWxPOrz9AMjyvxYxecViK23
  • $5$3bRXBWCpG9GEHdm$a2xIBbgK.fyr5k26BhUGo2QCvl25yQU1I9mwFp7mmh5p
  • $6$Hcdqud1hDgz$5MOEbgtOdxfF289OSXrmIevt7NnZBLaQkNGKeijR/X09ZDEbQ/ZfObJjNo0J64t4haSSqihRhfPe4z8l.ptro1
  • $6$hqaQ3RzX$bk8dgMsAlmDPpOX0IWWIrJ9T3awblvI.PCipeqJDdJZSVDQJgCRsQRX8pKpFU2XNcvRr56e3MARcTQR5oJ94V/
  • $2a$13$Hdz8T8vlEqwCvhixyu4rlel2cjj.TfA1qXEZ2dXhabogN35Idd8Je
  • $2a$15$hLPoYhbVJNA48A/Wmv1I5.5XBv/G/1s8BGfDLU7mt37ojGhNjETd2

顺便说一句,原始密码是hello12345world12345,我不是要(让你)破解某人的密码;-)

2个回答

理论上,拥有多个哈希值可能会有所帮助;在实践中,没有那么多。

理论

让我们考虑一下 SHA-256。从这个函数中,我们可以定义另一个散列函数,我们称之为 SHB-256,这样 SHB-256( m ) = SHA-256( m ) XOR m简单来说,我计算了 SHA-256 和m的前 256 位的 XOR 。

这个“SHB-256”是一个与 SHA-256 一样好的加密散列函数:它同样可以抵抗冲突、原像和第二原像。但是,如果我同时给您SHA-256( m ) 和 SHB-256( m ),那么两个值的简单 XOR 将产生m的前 256 位。

实践

利用使用相同密码计算的多个散列然后依赖于散列函数的“相似性”,以便允许彼此“取消”。这是一个非常不明确的属性,并且(迄今为止)尚未彻底调查。据我所知,现有的散列函数不知道这样的捷径。有很多细节需要注意;迭代函数和盐的使用使事情变得更加复杂。

当面对多个哈希时,现实的攻击者可以做的是使用最容易攻击的一个,而忽略其他的。如果其中一个是未加盐的,那么攻击者将针对那个,这允许同时攻击多个散列密码和使用预先计算的(彩虹)表。否则,他将使用在他的硬件上实现时最有效的功能(例如,如果面对PBKDF2Bcrypt,攻击者将瞄准 PBKDF2,这在 GPU 上更容易实现)。正如@Polynomial 所说,您的散列将与其中最弱的一样强。

一个额外的间接影响是关于你的 CPU 预算。注册时,您将使用所有散列函数对用户密码进行散列对于“可配置缓慢”的哈希函数,如 bcrypt 或 PBKDF2,这可能会促使您将它们配置为比仅使用一个时所做的“快一点”,以保持您自己的成本在可容忍的范围内。这相应地降低了攻击者的努力,因为只需破解一个哈希,而不是全部。

这取决于您的密码强度和用于散列的散列算法。有些程序使用 CPU + GPU 来使用蛮力攻击来破坏哈希值。因此,如果您使用普通密码,则很容易通过使用 PC 和显卡来破解。有很多应用程序可以使用 GPU 和 CPU 的强大功能。不管你给密码的两种或三种类型的哈希值,暴力破解时间取决于密码强度和哈希算法。

如果我有 5 个不同的密码哈希值,其中一个非常弱,那么可以通过攻击最弱哈希算法的哈希值快速恢复该密码。