SHA1 漏洞

信息安全 攻击向量
2021-09-11 14:22:57

我们目前正在与我们的 Web 应用程序中的第三方组件集成。此集成的一部分需要通过 http 发送数据。这是通过 POST 参数完成的。请求中包含一个附加参数,它是其他参数的 SHA1 哈希,加上密钥,组合如下:

param1.param2.param3.param4.param5.param6.secretkey

中间攻击的恶意用户或人可以访问参数和输出哈希,但不能访问未通过 http 发送的密钥。我一直在读到 SHA1 被认为很弱,并且在资源充足的情况下被破坏了。我想更多地了解此设置的稳健性以及 SHA1 的弱点。

我的问题如下:

  1. 攻击者可以遍历所有可能的密钥组合,创建一个新的散列,直到找到匹配的散列。一旦找到密钥,修改我们之间发送的数据(然后生成新的哈希)将是微不足道的,而且至关重要的是,无法检测到。是否有其他方法(除了暴力破解)来找出密钥?蛮力可以用于任何算法,让我相信有更好/更快/更便宜的方法来做到这一点。换句话说,攻击者如何利用 SHA1 的弱点?
  2. 如果我们无法让他们通过使用 SHA2 或 SHA3 来提高消息的安全性,那么带有 SHA1 的适当长度的密钥是否可以保护我们免受任何攻击?
4个回答

你应该阅读这篇文章在任何情况下,HMAC 都是首选。使用键控散列的方式暴露了散列算法的所有弱点。然而,HMAC 仍然是安全的,因为它的安全性依赖于对散列算法的不太强的假设。

请注意,计算哈希 HASH(KEY || MESSAGE) 的相反方式(与您打算这样做的 HASH (MESSAGE || KEY) 不同)被认为是完全不安全的,您可以在此处此处阅读。

SHA-1 通常不会针对每种用例进行破坏。但是,它被认为对碰撞攻击提供的保护不足,这使得它不适合作为签名算法,例如在证书中。尽管它与您的用例相似(但不等于),但它仍然足够安全,可以在 HMAC中使用。

因此,我认为您方法中的 SHA-1 目前只能通过蛮力破解。由于 SHA-1 是一个旨在快速的哈希,您可以通过使用更长的密钥或使用设计为更慢的算法来强化您的附加参数。这两种方法都使暴力破解更加困难,因为攻击者需要更多时间来尝试所有可能的秘密。

此外,您应该使用真正的 HMAC,因为kaidentity在他的回答中指出, 因为最好使用经过验证的东西来发明自己的东西,特别是在涉及密码学的情况下。

在大密钥的情况下,知道参数但不知道密钥与不知道两者都没有太大区别,因为密钥中的任何额外位都会生成完全不同的 SHA。如果攻击者知道您的秘密附加密钥的长度,他可能会有一个小优势,但如果该密钥足够大,您就没有任何问题。如果密钥足够大,蛮力将是徒劳的尝试。

研究人员现在已经成功地对 SHA1 执行了碰撞攻击,这就是 MD5 死亡的原因

密码学家将周四披露的攻击称为“相同前缀”冲突,这意味着它允许攻击者创建两条具有相同哈希值的不同消息。这个变种没有Flame进行的“选择前缀”MD5碰撞那么强大。在后一种情况下,攻击者可以针对一个或多个现有文件,例如公司用来验证其更新机制的数字证书。尽管与 SHA1 的冲突没有那么强大,但密码学专家表示,任何现实世界的相同前缀攻击都代表了散列函数的游戏结束事件。

有一个专门用于攻击的网站

现在实际上可以制作两个冲突的 PDF 文件并在第一个 PDF 文件上获得 SHA-1 数字签名,该签名也可以被滥用为第二个 PDF 文件的有效签名。

换句话说,停止使用 SHA1