主键
OpenPGP 主键拥有您的信任。如果您的密钥获得认证,这些认证将在主键和用户 ID 的元组上颁发。传出证书(在其他密钥上)也由您的主密钥专门颁发。用户 ID 和子键都与主键耦合。总而言之,您的主键是将所有内容粘合在一起的实体。
您的主键具有哪些功能取决于选择的算法和实际启用的功能(您可以在--expert模式下运行 GnuPG 时更改此设置)。所有主键都必须具有认证能力C,但可以具有签名能力S(必须始终支持,因为认证也是签名),最后是加密能力E(并非所有适合主密钥的算法都支持,例如 DSA 只能用于认证/签名,而不是加密)。
子键
目前我不明白的是,如果我的子密钥过期,但公钥仍然存在且有效,会发生什么。gpg 会退回使用公钥来加密和验证数据吗?
选择哪个子密钥取决于实现,通常他们会选择能够执行您想要执行的最新的非撤销密钥。如果您添加另一个子项,则会选择该子项。如果您删除所有子键,将使用主键 - 假设它设置了必要的功能位。如果主键不支持所需的能力,则根本无法使用该键!
在 GnuPG 中,您可以强制执行特定的子键:通过指定键 ID 后跟!. 例如,如果您想强制使用子键DEADBEEFDEADBEEF作为收件人,请使用选项--recipient DEADBEEFDEAEDBEEF!.
可以任意撤销和重新生成子密钥,而不会失去信任网络中的声誉。
如果存在子密钥,我也不确定公钥的确切作用。我的猜测是它仅用于在子密钥用于实际加密/验证之前验证子密钥,对吗?
这不是必需的,但被认为是最佳实践。很多人甚至使主(秘密)密钥处于离线状态。
到期日期
如果所有子密钥都设置了过期日期,那么使用公钥的过期日期仍然有意义吗?
过期日期在子密钥上使用是合理的,因为它们要求发送方在给定时间后更新您的密钥。但是,它们可以任意更改。这也是为什么使用主键的到期日期不是一个合理的事情的原因;如果攻击者掌握了您的主密钥,他可以简单地更改甚至完全删除它,即使您的密钥已经过期!有关更深入的讨论,请参阅“ OpenPGP 密钥过期是否增加了安全性? ” 。
相反,手头有一个预先生成的吊销证书(并在您的备份中)。
但是,我想要做的是在公钥上设置过期日期,同时保持密钥不会过期。我怎样才能做到这一点?
我认为您在这里混淆了公共 和初级。到期日期始终设置在您的主公钥上的公共特殊“配置”签名上,但由您的主密钥颁发(因此可以通过公共主密钥进行验证)。如果你真的想在你的主键上指定一个过期日期,你仍然可以随时更改它,旧的过期日期被简单地覆盖。
但是如上所述,无论如何,主键的到期日期提供了错误的安全性。