![仅从 gpg 中删除私有签名密钥(无需重新导入子密钥或“rm ~/.gnupg/private-keys-v1.d/KEYGRIP.key”)](https://linux22.com/image/176122/%E4%BB%85%E4%BB%8E%20gpg%20%E4%B8%AD%E5%88%A0%E9%99%A4%E7%A7%81%E6%9C%89%E7%AD%BE%E5%90%8D%E5%AF%86%E9%92%A5%EF%BC%88%E6%97%A0%E9%9C%80%E9%87%8D%E6%96%B0%E5%AF%BC%E5%85%A5%E5%AD%90%E5%AF%86%E9%92%A5%E6%88%96%E2%80%9Crm%20~%2F.gnupg%2Fprivate-keys-v1.d%2FKEYGRIP.key%E2%80%9D%EF%BC%89.png)
据我了解,生成私钥-公钥对、生成用于加密的子密钥、导出所有三个密钥并存储/备份它们(例如使用“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 论坛中并想在这里分享。