web-dev-qa-db-ja.com

シークレットサブキーを正しく削除するにはどうすればよいですか?

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

これを行う正しい方法は何ですか?私はそれが間違っていると理解しましたか?

2
Matheus Moreira

メーリングリスト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

どうやら、gpggpg-agentにユーザーに代わって秘密のサブキーを削除するように依頼する方法はありません。 問題 これについて公開されました。

3
Matheus Moreira