Encryption 散列冲突的含义是什么?

Encryption 散列冲突的含义是什么?,encryption,hash,Encryption,Hash,我理解,冲突将减少对哈希算法进行暴力攻击所需的工作量,因为存在具有相同输出的多个输入 然而,我不清楚的是碰撞会导致的其他类型的攻击,以及它们到底有多有害?并非哈希算法中发现的所有弱点都会使算法在技术上变得薄弱。即使在发生碰撞的情况下,使用蛮力也可能是不可行的。那么,碰撞使哪些攻击变得更容易呢 另外,是否不可能附加某种附加校验和或摘要作为最终哈希的附加部分以防止冲突?例如,通过在输出上添加一对校验和字节,可以降低冲突产生与校验和耦合的相同哈希输出的概率?甚至可以在附加校验和之前对校验和进行哈希运算

我理解,冲突将减少对哈希算法进行暴力攻击所需的工作量,因为存在具有相同输出的多个输入

然而,我不清楚的是碰撞会导致的其他类型的攻击,以及它们到底有多有害?并非哈希算法中发现的所有弱点都会使算法在技术上变得薄弱。即使在发生碰撞的情况下,使用蛮力也可能是不可行的。那么,碰撞使哪些攻击变得更容易呢

另外,是否不可能附加某种附加校验和或摘要作为最终哈希的附加部分以防止冲突?例如,通过在输出上添加一对校验和字节,可以降低冲突产生与校验和耦合的相同哈希输出的概率?甚至可以在附加校验和之前对校验和进行哈希运算,使该值更安全

o=散列(i)和(散列(校验和(i))

  • 如果您使用散列来分配负载,攻击者可以将所有散列的输入手工输入到同一台机器,并使该机器过载
  • 如果您使用散列作为用户数据的标识符,攻击者可以创建文件,生成与随机其他用户数据相同的散列,从而替换该数据
可能还有更多,但这两个马上就来了


在第一种情况下,通过将进程ID包含在哈希中以防止冲突来解决此问题。在第二种情况下,当一个新文件将替换现有文件时,添加了一条错误消息。

给出注释后,问题似乎与密码破解有关

发现散列密码的问题通常是通过经常使用的密码列表来完成的,请参阅

阻止此类攻击的主要方法是使用密码散列方法创建密码验证器,该验证器需要大量时间,通常约为100ms。此类函数包括PBKDF2、Argon2、password_hash、bcrypt等

在SHA2和更高版本中,发现冲突的机会非常小,因此在密码破解中不考虑冲突,没有额外的优势

此外,攻击者通常对单个密码不感兴趣,而是对通过访问用户数据库获得的大部分密码感兴趣。然后,这些凭据在黑暗的网络上大量出售。尤其是一个用户受到攻击,这就是矛式网络钓鱼,通常有更好的方法

有关更多信息,请参阅:

  • 信息安全

  • 阿尔斯特尼卡

  • 高级密码恢复


首先,每个散列函数都有冲突(根据鸽子洞原理)。加密散列是抗冲突的,因为很难找到冲突(特别是,没有比暴力更好的算法可以发现冲突;这是一个定义。失败的散列不是加密的)。添加额外的校验和等,只是一个不同的哈希函数,该哈希函数也会发生冲突。也就是说,这是堆栈溢出的离题。您想讨论的地方是crypto.stackexchange.com。我投票将此问题作为离题题,因为它与编程无关。请参阅crypto.stackexchange.com、 Mooning Duck在非加密散列中的冲突问题上确实提出了一个很好的观点。当您将此内容带到crypto.se时,您应该清楚您指的是哪种散列。我指的是可以使发现输入变得更容易的攻击。特别是当涉及到加密和散列密码以用作加密中的密钥时。因此rry不知道stackexchange有一个特定的加密部分。很高兴知道!发现输入的攻击不是冲突攻击。它们是预映像攻击,这是另一回事。如果您试图避免预映像攻击,则需要使用加密哈希(如SHA-256).不要试图自己发明一个特殊的加密散列。这比看起来要困难得多。