How do I delete secret subkeys correctly?
Matheus Afonso Martins Moreira
matheus.a.m.moreira at gmail.com
Wed Apr 10 15:25:08 CEST 2019
I had some revoked subkeys that I was not going to use anymore.
I thought it would be a good idea to delete their secret keys,
so I used the gpg --delete-secret-keys command to do it.
I ended up accidentally deleting all my keys instead,
including my primary key.
I'm trying to learn from my mistake but I don't understand how or why
this happened.
I was able to reproduce what I did.
First, I generated a primary key and a subkey:
$ gpg --batch --passphrase '' --quick-generate-key 'test key' rsa4096 cert 0
# Generated primary key D7D79C32883EA862C586881DA52099E0E7EB77A5
$ 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
Having generated a primary key and subkey,
I asked gpg to delete the subkey by specifying its fingerprint.
However, instead of operating on the specified subkey,
gpg asked me to confirm the deletion of the primary key!
$ gpg --delete-secret-keys 9CAE802DA78E4624BD8F88FE20AA2F4F7A28CD01
sec rsa4096/0xA52099E0E7EB77A5 2019-04-10 test key
Delete this key from the keyring? (y/N)
I admit that I failed to check the fingerprint reported by gpg
before confirming all three prompts, including a graphical pop-up.
However, I did double check the fingerprint I gave as argument.
In my understanding, the program decided to operate on a different key.
I specified the subkey but it acted as if I had given the primary key instead.
It was suggested that I append an exclamation mark to the fingerprint.
Indeed, the manual does seem to support this suggestion:
> an exclamation mark (!) may be appended
> to force using the specified primary or secondary key
> and not to try and calculate which primary or secondary key to use.
When I tried it with new keys, it did not seem to have any effect.
$ gpg --delete-secret-keys 5B139477AE36C2F5D03C29E6920FD2FB0019253E!
sec rsa4096/0x8A1C31D584422F7A 2019-04-10 test key
Delete this key from the keyring? (y/N)
gpg still tried to delete the primary key instead of the specified subkey.
It was also suggested that I use the subkey's ID instead of the fingerprint.
I generated new keys, tried it and it did not work either.
$ gpg --delete-secret-keys 8395C88AD6549DEE
sec rsa4096/0x076968E9FF7991BC 2019-04-10 test key
Delete this key from the keyring? (y/N)
$ gpg --delete-secret-keys 8395C88AD6549DEE!
sec rsa4096/0x076968E9FF7991BC 2019-04-10 test key
Delete this key from the keyring? (y/N)
gpg always deletes the primary key and all subkeys,
no matter what input I give it.
I am using GNU Privacy Guard 2.2.15 on Arch Linux x86_64.
I don't want to make this kind of mistake again.
Am I using the program correctly? If not, what is the correct way to do this?
Is deleting subkeys something I am not supposed to do?
More information about the Gnupg-users
mailing list