O que eu consegui descobrir. Me corrija se eu estiver errado.
Existem chaves públicas e privadas, elas vão em pares. Existem chaves primárias e cada chave primária pode ter uma ou mais subchaves. Por padrão, quando você gera uma chave, você obtém quatro chaves ( (1) RSA and RSA (default)
). Um par de chaves para assinatura e certificação (chaves primárias) e um par de chaves para criptografia (subchaves). Além disso, existem dois chaveiros, para chaves privadas e públicas.
E agora para a parte complicada. Eu estava experimentando com importação / exportação de chaves. Para isso criei uma chave com 2 subchaves. Então eu o exportei de diferentes maneiras:
$ gpg --export PRI_ID > ~/_/export-1
$ gpg --export PRI_ID! > ~/_/export-2
$ gpg --export SUB_ID_1! > ~/_/export-3
$ gpg --export SUB_ID_2! > ~/_/export-4
$ gpg --export-secret-keys PRI_ID > ~/_/export-secret-keys-1
$ gpg --export-secret-keys PRI_ID! > ~/_/export-secret-keys-2
$ gpg --export-secret-keys SUB_ID_1! > ~/_/export-secret-keys-3
$ gpg --export-secret-keys SUB_ID_2! > ~/_/export-secret-keys-4
$ gpg --export-secret-subkeys PRI_ID > ~/_/export-secret-subkeys-1
$ gpg --export-secret-subkeys PRI_ID! > ~/_/export-secret-subkeys-2
$ gpg --export-secret-subkeys SUB_ID_1! > ~/_/export-secret-subkeys-3
$ gpg --export-secret-subkeys SUB_ID_2! > ~/_/export-secret-subkeys-4
E comecei a exportar chaves e veja o que acontece:
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-4; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-keys-4; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-1; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-2; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-3; gpg -k; gpg -K
$ gpg --delete-secret-key PRI_ID; gpg --delete-key PRI_ID; gpg --import ~/_/export-secret-subkeys-4; gpg -k; gpg -K
Aqui estão minhas conclusões, que contradizem um pouco o que está nas páginas de manual:
'gpg --export PRI_ID' exports all public keys (3 keys)
'gpg --export PRI_ID!' exports primary public key (1 key)
'gpg --export SUB_ID!' exports public primary key and public subkey (2 keys)
'gpg --export-secret-keys PRI_ID' exports all 3 keypairs (6 keys)
'gpg --export-secret-keys PRI_ID!' exports primary keypair (2 key)
'gpg --export-secret-keys SUB_ID!' exports primary keypair and subkey keypair (4 keys)
gpg --export-secret-subkeys
é como gpg --export-secret-keys
, mas não exporta chave primária privada (ou torna inútil, como dizem, sec#
). Geralmente, PRI_ID
, SUB_ID
s são intercambiáveis, a menos que você coloque um ponto de exclamação atrás deles. Mas para --delete-key
, --delete-secret-key
eles são intercambiáveis mesmo com a tecla de exclamação.
UPD De acordo com gpg --list-packets
, parece estar errado e não há contradição com as man pages. --export-secret-keys
deve estar exportando chaves secretas depois de tudo. É só que uma chave pública pode ser inferida de uma chave privada.
No entanto, ainda resta uma coisa. Que tipo de conexão entre chaves primárias e subchaves? Por que quando eu exporto uma subchave, também obtenho a chave primária?
UPD Ah, e cada par de chaves compartilha um e o mesmo id.