sha1sum 对于可下载的软件包签名仍然安全吗?

信息安全 sha256 面向未来
2021-09-05 05:02:35

我们sha1sum用来计算我们包的 SHA-1 哈希值。

使用说明: 我们分发了一些软件包,我们希望用户能够检查他们下载的软件包是否正确,直到最后一点。

SHA-1 加密哈希算法已被 SHA-2 取代,因为已知 SHA-1 相当弱。

我们还能用sha1sum吗?

或者我们应该将其替换为sha256sum, 或sha512sum

4个回答

我想您sha1sum在以下情况下“使用”:您分发了一些软件包,并且您希望用户能够检查他们下载的软件包是否正确,直到最后一点。这假设您有办法以“不可更改”的方式(例如,作为通过 HTTPS 提供的网页的一部分)传达散列值(使用 SHA-1 计算)。

我还假设我们在这里讨论的是攻击,即某些恶意个人可以在下载包时以某种方式更改包,并希望注入一些不会被发现的修改。

此处使用的散列函数应该提供的安全属性是对第二原像的抵抗力最重要的是,这抗碰撞能力不同。冲突是指攻击者可以制作两条不同的消息mm',它们的哈希值相同;第二个原像是当攻击者被赋予一个固定的m并挑战找到一个不同的m'散列到相同的值。

第二原像比碰撞更难获得。对于输出大小为 n位的“完美”散列函数,查找冲突的计算量约为散列函数的 2 n /2 次调用;对于第二个原像,这是 2 n此外,允许更快碰撞攻击的结构弱点不一定适用于第二原像攻击。尤其是对于 SHA-1 的已知弱点,这是正确的:现在(2015 年 9 月),SHA-1 存在一些已知的理论上的弱点,应该允许在少于理想的 2 80努力中计算碰撞(这仍然是一项巨大的努力,大约 2 61,所以还没有实际演示过);但这些弱点是本质上需要攻击者制作mm'的差异路径,因此它们不会携带第二原像。

目前,没有已知的对 SHA-1 的二次原像攻击在理论上或学术上比一般攻击更快,其2160成本远远超出了技术可行性

底线:在您尝试做的事情的范围内,SHA-1 是安全的,并且可能在一段时间内保持安全(即使 MD5 仍然是合适的)。

使用的另一个原因sha1sum是客户端工具的可用性:特别是 Microsoft 为 Windows 提供的命令行散列工具(称为FCIV)知道 MD5 和 SHA-1,但不知道 SHA-256(至少文档是这样说的) )(*)。

Windows 7 及更高版本还包含一个名为“certutil”的命令行工具,可以使用“-hashfile”子命令计算 SHA-256 哈希。这并不广为人知,但有时很方便。


话虽这么说,反对使用 SHA-1 的一个强有力的原因是图像:目前很流行嘘和嘲笑任何 SHA-1 的使用;群众要求将其拆除、诅咒、逮捕和公开处决。通过使用 SHA-1,您可以告诉全世界您绝对不是时髦人士。从商业角度来看,不屈服于时尚几乎没有任何好处因此您应该使用 SHA-2 函数之一,例如 SHA-256 或 SHA-512。

没有充分的理由更喜欢 SHA-256 而不是 SHA-512 或相反;一些小型的、仅 32 位的架构更适合 SHA-256,但这在实践中并不重要(即使 SHA-512 的 32 位实现仍然能够在贫血的情况下每秒散列几十兆字节的数据笔记本电脑,甚至在 32 位模式下,一个不太旧的 x86 CPU 具有一些使用 SSE2 进行 64 位计算的能力,这为 SHA-512 提供了很好的提升)。任何营销专家都会告诉您使用 SHA-512 的唯一基础是 512 大于 256,因此以某种(神奇的)方式“它必须更好”。

您应该使用 SHA-256 或 SHA-512。

如果您只是对自己创建的包进行签名,那么从技术上讲,SHA-1 仍然是安全的。现在被削弱的属性是你没有严格依赖的“防撞”。然而,SHA-1 的安全性只会随着时间的推移而变得更糟,所以现在继续前进是有意义的。

Tom Leak 有一个漂亮的答案(这就是它被接受的原因)。它关注使用 SHA-1 背后的数学可证明的事实。第二种方法基于较少的事实,但可以提供有价值的启发式信息。我从阅读 Bruce Schneier 的意见中学到了这种方法,但我无法立即找到链接,因此 Bruce 将不得不处理我的名字丢失问题。

从理论上讲,算法在被破坏之前不会被破坏。在有人找到一种方法来做 X 之前,其中 X 应该是计算上不可行的,它不会被认为是“损坏的”。1 然而,事实证明,这在密码学中的实际应用中价值有限。密码学家真的宁愿在他们的产品崩溃之前得到一点通知,而不是之后。

从历史上看,算法很少在一大步中被打破。是的,它可能会发生,密码学家必须为此做好计划,但根据经验发现,它们通常会随着时间的推移而逐渐消失,一纸接一纸。已经发现,观察产生碰撞的难度是猜测算法何时实际被破坏的一个相当好的指标。因此,当 Tom 指出碰撞应该进行 2 80操作而现在需要 2 61时,正如他所做的那样,指出 2 61是非常有效的操作是理论上的,因为它仍然太大而不能保证尝试。但是,也可以将其视为“算法的强度降低了 19 位”,并将其用作穷人的经验法则来预测并估计何时会成为问题。

这种想法就是为什么现在有 SHA-3,尽管理论上 SHA-1 还没有完全破解。参与 SHA-3 开发和测试的密码学家知道,要建立对 SHA-3 的信心需要相当长的时间,他们希望确保信心在 SHA-1 崩溃之前存在,而不是之后。

1. 我知道“破碎”哈希在技术上最严格的定义只是攻击者可以比蛮力做得更好的定义,而不是它实际上在计算上可行的时候。但是,在讨论散列的实际方面时,更通常使用后一种定义。

即使您不是为联邦政府工作,以下文档的链接也是一个很好的参考,说明人们应该在未来日期之前使用散列密钥长度多长时间来完成特定任务(例如验证签名)。对于包身份验证,我还将包含一个大小,这使得创建冲突变得更加困难(匹配相同哈希的已更改包)。为什么不同时使用 SHA1 和 SHA512(如果计算时间不那么繁重)?还要考虑用于对给定哈希进行签名的非对称密钥长度。虽然您正在考虑这一点很好,但可能还有其他更紧迫的完整性问题,例如如何确保一个人不会收到用于比较的伪造哈希以及所有包含的库的来源风险。

PS 如果您正在考虑浏览器的证书,Chrome 和 IE 都将或已经设置 UI 以取消使用 SHA1。如果您要存储密码,请查看使用 PBKDF2 的加盐(可能还有胡椒)散列。

http://csrc.nist.gov/publications/nistpubs/800-131A/sp800-131A.pdf http://googleonlinesecurity.blogspot.com/2014/09/gradually-sunsetting-sha-1.html https:// en.wikipedia.org/wiki/PBKDF2