我听说 SHA-1 散列变得越来越不安全,并且大多数 GPG 密钥都使用 SHA-1 保护。有没有办法确定 SHA-1 是否在我的 GPG 密钥中,如果是这种情况该怎么办?
GPG 密钥和 SHA-1
SHA-1 只是 OpenPGP 标准中可用的众多散列算法之一。您可以(并且应该)选择更好的算法来签署文档或密钥。
但是,SHA-1 是唯一用于生成 OpenPGP V4 指纹的算法。
这是一个问题吗?我认为不会在不久的将来。哈希算法有两种攻击方式。碰撞攻击允许攻击者找到具有相同哈希的两条消息。原像攻击允许攻击者找到散列到给定散列的消息。
对 SHA-1 的碰撞攻击,比蛮力攻击更好,早已为人所知,并且随着时间的 推移越来越好。实际攻击现在被认为是资金充足的组织可以实现的,并且由于摩尔定律,随着时间的推移会变得更便宜。
但是,由于 PGP 密钥通常由其用户生成,因此冲突攻击不是问题。在某人的密钥由第三方生成的情况下,它们可能会成为问题,这可能发生在某些公司环境或其他大型组织中。对于任何期望指纹是唯一密钥的密钥服务器软件来说,这也可能是一个问题:有人可以上传两个具有相同指纹的密钥,并且可能会在软件被修补之前将事情进行升级。(我不知道是否有任何密钥服务器软件实际上是这样做的。)
如果只依赖指纹,对 SHA-1 的原像攻击可能会成为一个问题。我可以想象攻击者可以欺骗某人接受他们的密钥代替另一个密钥的各种场景。Alice 从某个地方下载了一个密钥并调用 Bob 来验证指纹。攻击者组织了一个密钥签名方,并用他们的密钥代替了其他人的密钥。这样的攻击将是困难的,但也是可行的。
然而,据我所知,短期内不可能对 SHA-1 进行实际的原像攻击。我能找到的最好的是 Kelsey 和 Schneier 的 2004 年论文,该论文在 2106 步中找到了原像。
也就是说,SHA-1 肯定已经过时了,你永远不知道什么时候会发现更好的攻击。如果 OpenPGP 标准被修改为使用 SHA-2 或 SHA-3 添加 V5 指纹,我会非常高兴。我希望人们很快就会开始研究这个问题。
'gpg --version' 将显示您的首选项。
添加类似于 gpg.conf (当然是你的偏好):
个人密码偏好 AES256 TWOFISH AES192 AES
个人摘要偏好 SHA512 SHA384 SHA256
个人压缩首选项 ZLIB BZIP2 ZIP
至于你的钥匙,我没有那个答案。但是,由于您的日常密钥应该是 SUB,因此请撤销 SUB 并重新颁发新密钥。如果它不是一个 SUB,那么你有一个更大的问题。
GnuPG是OpenPGP的一个实现。您可以使用 GnuPG(GPG)对您的数据和消息进行加密和签名。您还可以使用 GPG 来计算某些数据的哈希值。当你这样做时,你可以选择你使用的散列算法。看起来 GPG 支持多种算法,包括“较新”的 SHA-2 函数。
您可以使用各种密码来使用 GPG 加密您的数据。加密时,您选择一个密码。从此密码生成密钥。因此,如果您使用 AES 256,则密钥将为 256 位。从密码短语生成密钥的方式是使用密钥调度。有些算法可能使用 SHA1,但我不相信 GnuPG 会这样做。
哈希算法确实出现的一个地方是签名时。根据这篇随机博客文章(从 2013 年开始),GPG 默认使用 SHA1。但是您可以按照另一个答案中的暗示(以及随机博客文章中的描述)来更改它。
所以最后,您不必担心,因为 SHA1 与密钥没有任何关系。
此外,据我了解,SHA1 通常仍被认为是安全的。我猜很多人正试图摆脱它,因为它已经存在了一段时间。尽管他是一个有争议的人物,但“安全专家”史蒂夫吉布森在最近的一期 Security Now 中讨论了 SHA1 。这可能很有趣(尽管他实际上可能不是“安全专家”)。(请不要仅仅因为你不喜欢史蒂夫·吉布森就投反对票。)他提出的一点是,当发现 MD5 不安全时,人们有点意外。因此,为了避免这种情况,有些人会建议不要使用 SHA1,因为它太旧并且很可能很快就会崩溃(如果它还没有崩溃的话)。)。
其他一些有趣的阅读可能是