帮我理解GPG公钥、子密钥和过期日期之间的关系

信息安全 gnupg
2021-08-14 05:27:53

遵循最佳实践,我现在将一个未过期的密钥存储在保存位置,一组子密钥与公钥一起存储在本地计算机上。但是,我想要做的是在公钥上设置过期日期,同时保持密钥不会过期。我怎样才能做到这一点?

我也对子密钥和公钥之间的确切关系感兴趣。查看密钥服务器提供的一些密钥,我注意到那些也将包括(公共部分)子密钥。这对于验证我使用子密钥签名的消息以及在为收件人找到加密子密钥的情况下加密数据是必要的。目前我不明白的是,如果我的子密钥过期,但公钥仍然存在且有效,会发生什么。gpg 会退回使用公钥来加密和验证数据吗?如果所有子密钥都设置了过期日期,那么使用公钥的过期日期仍然有意义吗?

如果存在子密钥,我也不确定公钥的确切作用。我的猜测是它仅用于在子密钥用于实际加密/验证之前验证子密钥,对吗?

1个回答

主键

OpenPGP 主键拥有您的信任。如果您的密钥获得认证,这些认证将在主键和用户 ID 的元组上颁发。传出证书(在其他密钥上)也由您的主密钥专门颁发。用户 ID 和子键都与主键耦合。总而言之,您的主键是将所有内容粘合在一起的实体。

您的主键具有哪些功能取决于选择的算法和实际启用的功能(您可以在--expert模式下运行 GnuPG 时更改此设置)。所有主键都必须具有认证能力C,但可以具有签名能力S(必须始终支持,因为认证也是签名),最后是加密能力E(并非所有适合主密钥的算法都支持,例如 DSA 只能用于认证/签名,而不是加密)。

子键

目前我不明白的是,如果我的子密钥过期,但公钥仍然存在且有效,会发生什么。gpg 会退回使用公钥来加密和验证数据吗?

选择哪个子密钥取决于实现,通常他们会选择能够执行您想要执行的最新的非撤销密钥。如果您添加另一个子项,则会选择该子项。如果您删除所有子键,将使用主键 - 假设它设置了必要的功能位。如果主键不支持所需的能力,则根本无法使用该键!

在 GnuPG 中,您可以强制执行特定的子键:通过指定键 ID 后跟!. 例如,如果您想强制使用子键DEADBEEFDEADBEEF作为收件人,请使用选项--recipient DEADBEEFDEAEDBEEF!.

可以任意撤销和重新生成子密钥,而不会失去信任网络中的声誉。

如果存在子密钥,我也不确定公钥的确切作用。我的猜测是它仅用于在子密钥用于实际加密/验证之前验证子密钥,对吗?

这不是必需的,但被认为是最佳实践。很多人甚至使主(秘密)密钥处于离线状态。

到期日期

如果所有子密钥都设置了过期日期,那么使用公钥的过期日期仍然有意义吗?

过期日期在子密钥上使用是合理的,因为它们要求发送方在给定时间后更新您的密钥。但是,它们可以任意更改。这也是为什么使用主键的到期日期不是一个合理的事情的原因;如果攻击者掌握了您的主密钥,他可以简单地更改甚至完全删除它,即使您的密钥已经过期!有关更深入的讨论,请参阅OpenPGP 密钥过期是否增加了安全性? ” 。

相反,手头有一个预先生成的吊销证书(并在您的备份中)。

但是,我想要做的是在公钥上设置过期日期,同时保持密钥不会过期。我怎样才能做到这一点?

我认为您在这里混淆了公共初级到期日期始终设置在您的主公钥上的公共特殊“配置”签名上,但由您的主密钥颁发(因此可以通过公共主密钥进行验证)。如果你真的想在你的主键上指定一个过期日期,你仍然可以随时更改它,旧的过期日期被简单地覆盖。

但是如上所述,无论如何,主键的到期日期提供了错误的安全性。