密钥过期后,OpenPGP 签名的 git 提交会怎样?

What happens to OpenPGP-signed git commits after key expiration?

如果我使用具有到期日期的 OpenPGP 密钥签署 git 提交,对于在到期日期之后查看该提交的人来说这意味着什么?像这样用于提交签名的所有密钥都应该是永久的吗?

如果验证方有我的新密钥怎么办?还是只是我的老?或者两者兼而有之?

总的来说,我是 OpenPGP 的新手,尤其是在签署 git 提交方面。

您可以并且仍然应该使用过期密钥。

这个系统的想法是密钥过期并且你生成新的。但在 PGP 世界中,您将密钥上传到密钥服务器。它们本质上就像一本 phone 书 (*),因此每个想要检索您的 public 密钥以向您发送加密消息的人都可以访问它。这也是您问题的解决方案。密钥服务器仍会记住过期的密钥,因此您的签名在过期时仍然有效(验证仅取决于使用一次有效密钥正确应用的签名)。您的用户在验证您的签名时会看到这一点,他们为此检索了您用于此特定签名的密钥。但是随着您开发和发布签名版本,您将始终使用有效密钥进行签名,而人们只会不断检索您的新密钥。

(*) 密钥服务器与 phone 一本书的比较简化了情况,但缺少一个重要的信息部分:如果您使用密钥服务器检索您不认识的人的密钥,请保留请记住,此密钥可能会被泄露。例如。 Alice 想使用加密与 Bob 通信(或者只是验证 Bob 的 git 提交),但她不认识他。她从远程服务器获取 Bobs public 密钥,但不知道 Mallory 伪造并把它放在那里的事实。因此验证过程受到损害,她不会注意到。出路:Bob 可以将他的 public 密钥(或密钥)的指纹连同他在他的网站上签名的软件一起发布。 Alice 现在可以拿到一把钥匙,将其指纹与 Bob 提供的指纹进行比较,以验证她拥有 Bob 的真正 public 钥匙。有了它,她现在可以验证他在 git 上签名的提交。如果密钥已过期,这也有效。

阅读 here, here and especially here 了解更多信息。

OpenPGP 的到期日期仅指示 "this key should not be used after a given date",但不会导致密钥无用:数学仍然有效。

If I sign a Git commit with a PGP key that has an expiration date, what does that mean for people looking at that commit after the expiration date?

验证签名时,OpenPGP 实现会将到期日期与签名签发日期进行比较。如果签名是在有效期内签发的,就没问题。如果没有,它会发出警告(类似于“签名很好,但在过期后发出”)。

What if the verifying party have a new key from me? Or just my old? Or both?

如果他们有您的旧密钥,他们可以验证您的旧密钥发出的签名。对于您的新密钥,他们可以验证您的新密钥颁发的那些。如果他们都有,他们可以验证两者。

Should all keys used for commit signing like this be permanent?

请注意,到期日期并不能真正增加任何安全性,因为只要您可以控制秘密主键,它就可以任意更改。此外,签名日期可以任意设置,它由用于创建签名的 OpenPGP 实现编写;攻击者可能只是设置了伪造的系统时间。问题"Does OpenPGP key expiration add to security?".

中信息安全姊妹站详细讨论过期安全问题

如果您想表明密钥在给定时间后不再使用,则可以使用到期日期,但不要将其视为安全功能。许多使用高级 OpenPGP 密钥的人都有一个没有到期日期的主密钥,并定期托管子密钥,他们发布的子密钥的有效期有限。

创建新的主键意味着其他人必须再次验证您的新键。主键是 OpenPGP 中常见的信任锚,创建一个新的意味着失去所有 trust/certifications.

git show-signature/verify 认为撤销的密钥无效,即使在密钥被撤销之前签名也是如此,请参阅已撤销的 yubikey 签名的示例:https://www.flickr.com/photos/steve_l/37493124630/in/datetaken/

考虑到这个结果,我认为在这种情况下不撤销密钥可能会减少创伤,但更改到期日期并向密钥服务器推送更新说 "The key is expired"。这样,现有的提交仍然有效。