OpenPGP签名的git提交在密钥过期后会发生什么?

9
如果我使用一个有过期日期的OpenPGP密钥签署git提交,那么在过期日期之后查看该提交的人会发生什么?像这样用于提交签名的所有密钥都应该是永久的吗?
如果验证方有我的新密钥呢?或者只有我的旧密钥?或者两者都有?
总的来说,我对OpenPGP和签署git提交的相关知识还比较陌生。
3个回答

9
OpenPGP的到期日期只表示“在给定日期之后不应使用此密钥”,但并不会使密钥无用:数学仍然有效。
如果我使用一个带有到期日期的PGP密钥签署Git提交,那么在到期日期之后查看该提交的人会发生什么?
在验证签名时,OpenPGP实现将比较到期日期和签名发出的日期。如果签名是在到期期间内发出的,则没有问题。如果不是,则会发出警告(类似于“签名没问题,但是在过期后发出”)。
如果验证方拥有您的旧密钥,则可以验证由旧密钥发出的签名。对于新密钥,他们可以验证由新密钥发出的签名。如果他们两个都有,则可以验证两个。
像这样用于提交签名的所有密钥是否都应永久存在?
请注意,过期日期并不会增加任何安全性,只要您控制秘密主密钥,它就可以任意更改。此外,签名日期可以任意设置,它是由用于创建签名的OpenPGP实现编写的;攻击者可能会设置虚假系统时间。我在Information Security姐妹站点上详细讨论了过期日期的安全性问题,请参考"Does OpenPGP key expiration add to security?"
如果您想要表明密钥在特定时间后将不再使用,则使用到期日期是可以的,但不要认为它是一种安全功能。许多高级OpenPGP密钥用户都具有没有到期日期的主密钥,并定期托管子密钥,这些子密钥具有有限的有效期。
创建新的主密钥意味着其他人必须重新验证您的新密钥。主密钥是OpenPGP中的公共信任锚点,创建新的主密钥意味着失去所有的信任/认证。

1
我相信这里有一个笔误(太小了不需要修改):“他们发布的证书具有有限的有效期”。 - user6365161
确实有。一旦您达到了2k声望点,您也可以发出这样的小修改(因此您的修改将不再需要审核)。 - Jens Erat

1
你仍然可以并且应该使用过期的密钥。
这个系统的想法是密钥会过期,然后你会生成新的密钥。但在PGP世界中,你需要将你的密钥上传到密钥服务器。它们实际上类似于电话簿(*),所以每个想要检索你的公钥以发送加密消息的人都能够获取到它。这也是你问题的解决方案。密钥服务器仍然会记住过期的密钥,因此即使过期,你的签名仍然有效(验证仅取决于正确应用的曾经有效的密钥的签名)。当用户验证你的签名时,他们将看到这一点,因为他们检索了你用于此特定签名的密钥。但当你继续开发和发布已签名的版本时,你将始终使用有效的密钥进行签名,人们只需要检索你的新密钥即可。
(*)将密钥服务器与电话簿进行比较,简化了情况,但缺少一个重要的信息:如果您使用密钥服务器检索一个未知的人的密钥,请记住该密钥可能已被攻击。例如,Alice想要使用加密与Bob通信(或仅验证Bob的git提交),但她不认识他。她从远程服务器获取Bobs公钥,但不知道Mallory伪造了它并放置在那里。因此,验证过程受到损害,她将不会注意到。解决方法:Bob可以在他的网站上发布他的公钥指纹(或密钥)以及他签名的软件。现在,Alice可以取一把钥匙,将其指纹与Bob提供的指纹进行比较,以验证她拥有Bob的真实公钥。这样,她现在可以验证他在git上签署的提交。即使密钥过期,这也适用。

阅读这里这里,特别是这里获取更多信息。


我在 生成吊销证书 部分看到了 吊销的公钥仍然可以用于验证您过去签名。那么过期的公钥也是这样吗?我认为这就是我的疑问所在。 - Captain Man
不。从技术上讲,这应该是不可能的,但在概念上肯定不是你想要的。工作流程如下: 您生成一对密钥,将公钥放在密钥服务器上,并使用私钥签署内容。这会生成有效的签名,您可以正确地将有效的密钥应用于提交后的 Git 标记上。 - harmonica141
有一天,密钥对将会过期,你需要重新开始。需要验证你的签名并检索旧提交的人们将不得不从密钥服务器中检索你的旧密钥才能进行。但使用旧密钥来签名没有任何意义,因为你想要证明当前签名是由你当前的自己创建的。这就是这些密钥的作用。使用过期的密钥进行签名意味着要证明在过去版本的你的存在下创建的提交。永远不需要这样做... - harmonica141
1
好的,现在我正确地理解了你的问题。是的,使用过期密钥验证签名是非常可能且绝对必要的,详见上文。一开始我误解了你想要用过期密钥进行签名,抱歉。当然,如果你检索到一个过期或被吊销的密钥,旧的签名仍然有效。不过,如果它被吊销,你就必须问问自己它是否可能已经被泄露。对于这里的混淆感到抱歉。 - harmonica141
我并不完全同意你的回答。请不要将OpenPGP密钥服务器与电话簿(由某些公司控制,列出其自己的客户信息)进行比较!OpenPGP密钥服务器分发未经验证的、可能是恶意的密钥信息。在没有额外验证的情况下,它们不应该用于查询密钥。此外,在推荐过期密钥之前,请注意OpenPGP到期日期的限制。最后,请注意创建和分发全新密钥集的(行政)成本。 - Jens Erat
是的,谢谢你指出来。我会相应地编辑我的答案。 - harmonica141

0

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

考虑到这种结果,我认为在这种情况下不吊销密钥,而是更改到期日期并向密钥服务器推送更新,说“密钥已过期”,可能会减轻一些创伤。这样,现有的提交仍然可以得到验证。


那个密钥已被吊销,我说的是已过期的密钥。吊销是你选择做的事情,而过期的密钥只是在其过期日期之后被使用。 - Captain Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接