最好的方法是什么当 gpg 密钥对过期时更新它该方法的原因是什么?
该密钥对已由许多用户签名并可在公共服务器上使用。
新密钥应该是过期私钥的子密钥吗?
它应该由旧的签名吗(我可以尝试编辑密钥并将到期日期更改为明天)?
新密钥应该签署旧密钥吗?
答案1
私钥永不过期。只有公钥可以。否则,世界永远不会注意到过期,因为(希望)世界永远不会看到私钥。
对于重要的部分,只有一种方法,这样就不用讨论利弊了。
您必须延长主密钥的有效期:
gpg --edit-key 0x12345678
gpg> expire
...
gpg> save
您必须决定是延长子项的有效性还是替换子项。替换它们会给您带来有限的前向安全性(仅限于相当长的时间范围)。如果这对您很重要,那么您应该拥有用于加密和签名的(单独的)子密钥(默认值仅用于加密)。
gpg --edit-key 0x12345678
gpg> key 1
gpg> expire
...
gpg> key 1
gpg> key 2
gpg> expire
...
gpg> save
您需要key 1
两次选择和取消选择,因为一次只能延长一个密钥的有效期。
您也可以决定延长有效期,除非您有理由认为密钥已被泄露。只有在您拥有离线主密钥的情况下,在发生泄露时不丢弃整个证书才有意义(在我看来,这是使用 OpenPGP 的唯一合理方法)。
无论如何,您的证书的用户都必须获取其更新版本(无论是新的密钥签名还是新的密钥)。更换会使钥匙变大一点,但这不是问题。
如果您使用智能卡(或计划这样做),那么拥有更多(加密)密钥会带来一定的不便(具有新密钥的卡无法解密旧数据)。
答案2
添加到“Hauke Linging”的答案,gpg 提供了一个选项2.1.22* 向前,您可以使用单个非交互式命令扩展主键或其未撤销、未过期的子键。
它有 3 种形式(第一个参数始终是密钥指纹,第二个参数始终是有效期,例如8w
8 周):
- 2个参数:按周期扩展密钥
- 3 个参数,其中第 3 个是星号 (
*
):使主密钥的所有未撤销、未过期的子密钥过期 - 3 个或更多参数,其中第 3 个以上是特定子密钥指纹:使主密钥的指定子密钥过期
- 形式的示例*
:
gpg --quick-set-expire <1> <2> <3>
意义:
<1> 您密钥的指纹(来自gpg --list-secret-keys
)
<2> 您希望将过期期限延长多长时间
<3>*
对于每个子密钥,例如:
gpg --quick-set-expire 7BCDED693SECRETKEY1552ACB71237 7w \*
*--quick-set-expire
仅适用于主键版本2.1.17。
答案3
您似乎混淆了两件事:用新密钥对替换旧密钥对,以及更改到期日期。
基本上,不需要创建新的密钥对:如果您仍然拥有旧的密钥对,您可以通过更改到期日期并发布更新的密钥来“延长”其生命周期。这是完全正常且符合预期的。
过期日期的处理是为了确保如果你丢失了密钥(例如忘记了密码 - 我不是在谈论密钥被泄露,在这种情况下你会想立即撤销它)它不会一直悬而未决永远在露天。