Novo diretório .gnupg: importe chaves secretas antigas para nova instalação

9

Eu reinstalei meu sistema operacional (Ubuntu 16.04) e tenho um diretório .gnupg antigo contendo:

gpg-agent.conf  
gpg-agent-info-<hostname> 
gpg.conf  
private-keys-v1.d  
pubring.gpg  
secring.gpg  
S.gpg-agent  
trustdb.gpg

Gostaria de importar minhas antigas chaves públicas e privadas para o novo gnupg. (Não copiei simplesmente o diretório .gnupg para a nova instalação, porque entendo que o novo gnupg2 possui algumas diferenças no formato do banco de dados que fazem parte das novas opções de criptografia EC.)

O seguinte funcionou para as chaves públicas, mas falhou nas chaves secretas:

gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import

Este respondeu com:

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

Observe que está falhando em abrir meu novo anel secreto. Dá o mesmo erro ao tentar exportar para um arquivo:

gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported

Como minha chave secreta tem a parte privada da chave mestra removida, também tentei o mesmo com --export-secret-subkeys, mas a resposta foi a mesma. Colocar meu ID da chave (endereço de email) após a exportação também não funciona. Por outro lado, posso listar as chaves:

gpg --list-keys --keyring=~/.gnupg.old/secring.gpg

gpg: Oops; key lost!
node 0x1e7ee00 01/00 type=secret-key
node 0x1e9cbd0 00/00 type=user-id  "Me <[email protected]>" ....
node 0x1e99dd0 00/00 type=signature  class=13 keyid=XXXXXXXX ts=1383637282
node 0x1e9c510 00/00 type=secret-subkey
node 0x1eaa210 00/00 type=signature  class=18 keyid=XXXXXXXX ts=1449138073
node 0x1eaf1f0 00/00 type=secret-subkey
node 0x1eaf580 00/00 type=signature  class=18 keyid=XXXXXXXX ts=138363647

(Suponho que "Chave perdida" se refira à chave mestra secreta despojada.) Alguém pode me indicar como resolver isso?

Com a ajuda de @Jens (abaixo), o seguinte funciona:

gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import
Diagon
fonte

Respostas:

7

Primeiro de tudo, você está fazendo um tipo de "não operação". gpgainda é o GnuPG 1.4.20 no Ubuntu 16.04, enquanto gpg2saltou do GnuPG 2.0.28 para o 2.1.11. Então, enquanto o GnuPG 2.1 fez algumas alterações nos formatos de arquivo (novo formato de keystore "keybox" / .kbxe mesclou o chaveiro secreto no público), ele ainda é compatível e fará o chaveiro secreto mesclado na primeira chamada de gpg2. O formato do chaveiro permanece o antigo, a menos que você o converta manualmente . O formato antigo é totalmente suportado, o novo formato oferece apenas melhorias de desempenho. O caminho de migração proposto para o novo formato de caixa de chaves é converter no diretório antigo do GnuPG, em vez de mudar para um completamente novo:

Para converter um arquivo pubring.gpg existente no formato keybox, primeiro faça backup dos valores de trust do proprietário, renomeie o arquivo para (por exemplo) publickeys, para que não seja reconhecido por nenhuma versão do GnuPG, execute a importação e, finalmente, restaure o proprietário confia nos valores:

$ cd ~/.gnupg
$ gpg --export-ownertrust >otrust.lst
$ mv pubring.gpg publickeys
$ gpg2 --import-options import-local-sigs --import publickeys
$ gpg2 --import-ownertrust otrust.lst

Você pode renomear o arquivo publickeys novamente, para que ele possa ser usado em versões mais antigas do GnuPG. Lembre-se de que, nesse caso, você tem duas cópias independentes das chaves públicas. Os valores ownertrust são mantidos por todas as versões do gpg no arquivo trustdb.gpg, mas as precauções acima precisam ser tomadas para mantê-los sob uma importação.

Considerando a mensagem de erro que você postou, parece que algumas permissões no novo ~/.gnupgdiretório inicial ou no chaveiro secreto ~/.gnupg/secring.gpgsão insuficientes para criar a chave. Isso geralmente acontece se o GnuPG foi invocado do usuário root por acidente.

A mensagem de --list-keysnão é uma saída normal, mas parece ser uma mensagem de erro. Para imprimir um chaveiro arbitrária, use os --no-default-keyringe --secret-keyringopções eo --list-secret-keyscommdn (e geralmente sempre tem opções preceda os comandos para GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Jens Erat
fonte
Ok, você acertou em cheio na questão da propriedade. Meu novo secring.gpg era de propriedade do root. Além disso, usar --no-default-keyringe --secret-keyringantes --list-secret-keysproduz uma saída reconhecível. Então, deixe-me ver o que tenho agora.
Diagon 26/06
Trabalho! E obrigado pela informação de atualização. Muito útil.
Diagon 26/06