如果我使用具有到期日期的 OpenPGP 密钥签署 git 提交,这对于在到期日期之后查看该提交的人意味着什么?像这样用于提交签名的所有密钥都应该是永久性的吗?
如果验证方有我提供的新密钥怎么办?还是只是我的老?或两者?
一般来说,我是 OpenPGP 的新手,尤其是在签署 git 提交方面。
如果我使用具有到期日期的 OpenPGP 密钥签署 git 提交,这对于在到期日期之后查看该提交的人意味着什么?像这样用于提交签名的所有密钥都应该是永久性的吗?
如果验证方有我提供的新密钥怎么办?还是只是我的老?或两者?
一般来说,我是 OpenPGP 的新手,尤其是在签署 git 提交方面。
OpenPGP 的到期日期仅表示“在给定日期之后不应使用此密钥”,但不会使密钥无用:数学仍然可以正常工作。
如果我使用具有到期日期的 PGP 密钥签署 Git 提交,这对于在到期日期之后查看该提交的人意味着什么?
在验证签名时,OpenPGP 实现会将到期日期与签名发出的日期进行比较。如果签名是在有效期内签发的,那就没问题了。如果不是,它将发出警告(类似于“签名很好,但在过期后发出)。
如果验证方有我提供的新密钥怎么办?还是只是我的老?或两者?
如果他们有您的旧密钥,他们可以验证您的旧密钥发出的签名。对于您的新密钥,他们可以验证您的新密钥颁发的那些。如果两者都有,他们可以验证两者。
像这样用于提交签名的所有密钥都应该是永久性的吗?
请注意,到期日期并没有真正增加任何安全性,因为只要您可以控制秘密主密钥,它就可以任意更改。另外,签名日期可以任意设置,由用于创建签名的OpenPGP实现编写;攻击者可能只是设置了一个伪造的系统时间。我在信息安全姐妹网站上的问题“OpenPGP 密钥过期是否增加了安全性?”中详细讨论了过期日期的安全性。.
如果您想指示密钥在给定时间后将不再使用,则可以使用到期日期,但不要将其视为安全功能。许多使用高级 OpenPGP 密钥的人都有一个没有到期日期的主密钥,并定期托管子密钥,他们发行的子密钥具有有限的有效期。
创建新的主键意味着其他人必须再次验证您的新键。主键是 OpenPGP 中的公共信任锚,创建一个新的主键意味着失去所有信任/认证。
您可以而且应该仍然使用过期密钥。
这个系统的想法是密钥过期并且你生成新的。但是在 PGP 世界中,您将密钥上传到密钥服务器。它们本质上就像电话簿 (*) 一样工作,因此每个想要检索您的公钥以向您发送加密消息的人都可以访问它。这也是您问题的解决方案。密钥服务器仍会记住过期的密钥,因此您的签名在过期后仍然有效(验证仅取决于正确应用的签名和曾经有效的密钥)。您的用户将在验证您的签名时看到,他们检索了您用于此特定签名的密钥。但是随着您开发和发布签名版本,您将始终使用有效密钥进行签名,人们只会不断检索您的新密钥。
(*) 将密钥服务器与电话簿进行比较可以简化情况,但缺少一个重要部分的信息:如果您使用密钥服务器检索您不认识的人的密钥,请记住该密钥可能已被泄露。例如,Alice 想使用加密与 Bob 通信(或者只是验证 Bob 的 git commit),但她不认识他。她从远程服务器获取 Bobs 的公钥,但不知道 Mallory 伪造了公钥并将其放置在那里。所以验证过程受到了损害,她不会注意到。出路:Bob 可以将他的公钥(或密钥)的指纹与他在网站上签名的软件一起发布。Alice 现在可以获取一把密钥,将其指纹与 Bob 提供的指纹进行比较,以验证她拥有 Bob 的真实公钥。有了这个,她现在可以验证他在 git 上的签名提交。如果密钥过期,这也有效。
git show-signature/verify 认为已撤销的密钥是无效的,即使在密钥被撤销之前已签名,请从撤销的 yubikey 签名中查看此示例:https ://www.flickr.com/photos/steve_l/37493124630/in/datetaken/
鉴于这种结果,我认为在这种情况下不撤销密钥可能会减少创伤,而是更改到期日期并向密钥服务器推送更新说“密钥已过期”。这样,现有的提交仍然得到验证。