密钥过期后,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 上签名的提交。如果密钥已过期,这也有效。
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"。这样,现有的提交仍然有效。
如果我使用具有到期日期的 OpenPGP 密钥签署 git 提交,对于在到期日期之后查看该提交的人来说这意味着什么?像这样用于提交签名的所有密钥都应该是永久的吗?
如果验证方有我的新密钥怎么办?还是只是我的老?或者两者兼而有之?
总的来说,我是 OpenPGP 的新手,尤其是在签署 git 提交方面。
您可以并且仍然应该使用过期密钥。
这个系统的想法是密钥过期并且你生成新的。但在 PGP 世界中,您将密钥上传到密钥服务器。它们本质上就像一本 phone 书 (*),因此每个想要检索您的 public 密钥以向您发送加密消息的人都可以访问它。这也是您问题的解决方案。密钥服务器仍会记住过期的密钥,因此您的签名在过期时仍然有效(验证仅取决于使用一次有效密钥正确应用的签名)。您的用户在验证您的签名时会看到这一点,他们为此检索了您用于此特定签名的密钥。但是随着您开发和发布签名版本,您将始终使用有效密钥进行签名,而人们只会不断检索您的新密钥。
(*) 密钥服务器与 phone 一本书的比较简化了情况,但缺少一个重要的信息部分:如果您使用密钥服务器检索您不认识的人的密钥,请保留请记住,此密钥可能会被泄露。例如。 Alice 想使用加密与 Bob 通信(或者只是验证 Bob 的 git 提交),但她不认识他。她从远程服务器获取 Bobs public 密钥,但不知道 Mallory 伪造并把它放在那里的事实。因此验证过程受到损害,她不会注意到。出路:Bob 可以将他的 public 密钥(或密钥)的指纹连同他在他的网站上签名的软件一起发布。 Alice 现在可以拿到一把钥匙,将其指纹与 Bob 提供的指纹进行比较,以验证她拥有 Bob 的真正 public 钥匙。有了它,她现在可以验证他在 git 上签名的提交。如果密钥已过期,这也有效。
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"。这样,现有的提交仍然有效。