仅从 gpg 中删除私有签名密钥(无需重新导入子密钥或“rm ~/.gnupg/private-keys-v1.d/KEYGRIP.key”)

仅从 gpg 中删除私有签名密钥(无需重新导入子密钥或“rm ~/.gnupg/private-keys-v1.d/KEYGRIP.key”)

据我了解,生成私钥-公钥对、生成用于加密的子密钥、导出所有三个密钥并存储/备份它们(例如使用“paperkey”),然后仅重新导入公钥被认为是良好的做法和子项(参见https://paul.fawkesley.com/gpg-for- humans-protecting-your-primary-key/https://riseup.net/en/security/message-security/openpgp/best-practices#only-use-your-primary-key-for-certification-and-possibility-signing-have-a-separate-subkey-用于加密)。此外,密钥应该有一个到期日期(请参阅https://riseup.net/en/security/message-security/openpgp/best-practices#use-an-expiration-date-less-than-two-years)。

要更新到期日期,我目前手动执行以下步骤:

gpg --import /PATH/TO/FULL-PRIVATE-KEY.asc
gpg --edit-key BADC0FFE0DDF00D
> expire      # the main key
> 1y          # expire in 1 year
> key 1       # select the first subkey
> key 2       # select the second subkey in addition
> expire      # for both of the subkeys
> y           # perform action on both keys
> 1y          # expire in 1 year
> save

现在我想再次删除导入的私钥。目前我知道有两种方法可以做到这一点:

gpg -K BADC0FFE0DDF00D         # here I should see the key
gpg --delete-secret-and-public-keys BADC0FFE0DDF00D
gpg -K BADC0FFE0DDF00D         # now nothing should be visible
gpg --import /PATH/TO/PRIVATE-SUB-KEY.asc /PATH/TO/PUBLIC-KEY.pub

或者

gpg -K --with-keygrip BADC0FFE0DDF00D     # copy the keygrip and use it below
rm -i ~/.gnupg/private-keys-v1.d/8BADF00DBEEFCACEDEFEC8EDDEADFA11.key

我不喜欢这两种方法:第一种方法有很多步骤,需要我导出然后导入(公共和子)密钥文件,第二种方法感觉很容易出错(你不会被问到用于确认(忽略“rm -i”),例如,如果这是您要删除的正确密钥)。

难道我就没有什么更优雅的事情可以做吗?

gpg --delete-only-the-private-signing-key-if-you-have-already-created-other-subkeys BADC0FFE0DDF00D 

或者类似的东西?我将不胜感激任何想法!

我正在使用 Debian Stable(实际上是 PureOS amber,它基于 Debian Stable)和 gpg (GnuPG) 2.2.12

答案1

要更改到期日期,我建议使用

gpg --quick-set-expire  FINGERPRINT \*

这更容易编写脚本。请参阅手册页(这里或者这里)了解详情。

要仅删除主密钥,您可以使用常规命令;例如:

$ gpg --delete-secret-key 502D1A5365D1C0CAA69945390BA52DF0BAA59D9C\!
sec  nistp256/0BA52DF0BAA59D9C 2010-09-17 ec_dsa_dh_256 <[email protected]>
Note: Only the secret part of the shown primary key will be deleted.
Delete this key from the keyring? (y/N) y
This is a secret key! - really delete? (y/N) y

请注意指纹末尾的感叹号 - 它强制使用特定的主键或子键,以便该命令不适用于整个键。由于 shell 要求,引用感叹号。要避免出现确认提示,请添加--batch--yes

请注意:您的 2.2.12 版本无法正常工作;我们在 2.2.16 中修复了此问题 - 因此最好更新到最新版本(2020 年 7 月初发布的 2.2.21)。


披露:我收到了这个答案沃纳·科赫@dev.gnupg.org  在 gnupg.org 论坛中并想在这里分享。

相关内容