gpg --delete-secret-keys
を使用して失効したサブキーをいくつか削除しようとしましたが、代わりに誤って主キーを削除してしまいました。
次のコマンドで間違いを再現できました。
$ gpg --batch --passphrase '' --quick-generate-key 'test key' rsa4096 cert 0
gpg: key 0xA52099E0E7EB77A5 marked as ultimately trusted
gpg: revocation certificate stored as '~/.gnupg/openpgp-revocs.d/D7D79C32883EA862C586881DA52099E0E7EB77A5.rev'
$ gpg --batch --passphrase '' --quick-add-key D7D79C32883EA862C586881DA52099E0E7EB77A5 rsa4096 sign 0
$ gpg --list-keys
pub rsa4096/0xA52099E0E7EB77A5 2019-04-10 [C]
Key fingerprint = D7D7 9C32 883E A862 C586 881D A520 99E0 E7EB 77A5
uid [ultimate] test key
sub rsa4096/0x20AA2F4F7A28CD01 2019-04-10 [S]
Key fingerprint = 9CAE 802D A78E 4624 BD8F 88FE 20AA 2F4F 7A28 CD01
$ gpg --delete-secret-keys 9CAE802DA78E4624BD8F88FE20AA2F4F7A28CD01
sec rsa4096/0xA52099E0E7EB77A5 2019-04-10 test key
Delete this key from the keyring? (y/N)
サブキーをフィンガープリントで指定しましたが、gpg
はの削除を確認するように要求します主キー。
manual の状態:
--delete-secret-keys name
秘密鍵リングから
key
を削除します。バッチモードでは、key
をフィンガープリントで指定する必要があります。オプション--yes
は、確認を要求しないようにgpg-agentにアドバイスするために使用できます。 gpgは、(gpg-agentによって制御される)秘密鍵が特定のOpenPGP公開鍵にのみ使用されることを確信できないため、この追加の予防措置が行われます。
私もバッチモードを使ってみました:
$ gpg --batch --yes --delete-secret-keys 9CAE802DA78E4624BD8F88FE20AA2F4F7A28CD01
$ gpg --list-secret-keys
# Empty output.
# Primary key has been deleted.
subkeyを指紋で指定しましたが、gpg
はコマンドをprimaryを指定したかのように解釈しました代わりにkey。
これを行う正しい方法は何ですか?私はそれが間違っていると理解しましたか?
メーリングリスト の Peter Lebbing および Daniel Kahn Gillmor で説明されているように、gpg 2.2.15
の答えはgpg-agent
に秘密のサブキーを削除するように依頼することです。
# Obtain the keygrip of the subkey you want to delete.
$ gpg --with-keygrip --list-secret-keys "$YOUR_FINGERRINT"
# Ask gpg-agent to delete the key for you.
# There should be a graphical confirmation Prompt.
$ gpg-connect-agent "delete_key $KEYGRIP" /bye
gpg-agent
は、実際に秘密鍵を管理するプログラムです。各秘密鍵は、"$GNUPGHOME"/private-keys-v1.d/"$KEYGRIP".key
という名前のファイルに対応しています。秘密のサブキーを削除するには、ユーザーはそのキーグリップを取得して、gpg-agent
に削除を依頼する必要があります。
delete_key
コマンドのドキュメント:
$ gpg-connect-agent 'help delete_key' /bye
# DELETE_KEY [--force|--stub-only] <hexstring_with_keygrip>
#
# Delete a secret key from the key store. If --force is used
# and a loopback pinentry is allowed, the agent will not ask
# the user for confirmation. If --stub-only is used the key will
# only be deleted if it is a reference to a token.
OK
どうやら、gpg
にgpg-agent
にユーザーに代わって秘密のサブキーを削除するように依頼する方法はありません。 問題 これについて公開されました。