Como importar a chave secreta do gpg (copiada de uma máquina para outra)?

153

Estou tentando copiar minha chave gpg de uma máquina para outra.

Eu faço:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

Mova os arquivos para a nova máquina e, em seguida:

gpg --import public.key
gpg: nyckel [ID]: public key [Name, e-mail] was imported
gpg: Total number of treated keys: 1
gpg:                 imported: 1  (RSA: 1)

gpg --allow-secret-key-import private.key
sec  [?]/[ID] [Creation date] [Name, e-mail]
ssb  [?]/[SUB-ID] [Creation date]

Tudo parece bom para mim, mas depois:

$ gpg -d [file].gpg
gpg: encrypted with 4096-bit RSA-key, id [SUB-ID], created [Creation date]
  [Name, e-mail]
gpg: decryption failed: secret key not accessible

Portanto, a mensagem de erro informa que o arquivo foi criptografado com [SUB-ID], que a importação da chave secreta parece indicar que foi importada. (O [SUB-ID] nas duas mensagens é o mesmo).

Então, estou claramente fazendo algo errado, mas não sei o quê.

user50849
fonte

Respostas:

164

Você precisa adicionar --importà linha de comando para importar a chave privada. Você não precisa usar a --allow-secret-key-importbandeira. De acordo com a página do manual: "Esta é uma opção obsoleta e não é usada em nenhum lugar".

gpg --import private.key
Celada
fonte
Alguma chance de você saber por que gpg2 -e -r [ID]diz "Não há garantia de que essa chave pertence ao usuário nomeado"? Eu gostaria de incluí-lo na pergunta original, mas só o notei mais tarde.
user50849
1
O GnuPG mantém um banco de dados de confiança que ele usa para decidir quanto confiar em quais chaves. Por exemplo, confie mais em suas próprias chaves, chaves que não são direta ou indiretamente assinadas por nenhuma chave confiável. Depois de importar para um banco de dados vazio, provavelmente nenhuma chave é confiável. Esse banco de dados confiável é separado do banco de dados ou das próprias chaves, portanto, a importação de chaves não as torna confiáveis, a menos que sejam assinadas por alguma chave já confiável. Você precisa definir o GnuPG em quais chaves você deseja confiar separadamente.
Celada
3
@ Celeda, obrigado, com --edit-key e o comando trust, consegui obter a chave confiável. Como minha pergunta original era como copiar a chave de uma máquina para outra, acho que seria apropriado adicionar algo sobre isso à sua resposta. Prefiro não editar sua resposta, e você parece saber muito mais do que eu sobre isso.
user50849
Não acho que entendi bem o trustdb o suficiente para falar sobre isso na minha resposta. Fico feliz que você tenha conseguido resolver o problema usando as dicas vagas que dei no meu comentário.
Celada
Ok, renomeei a pergunta original para que ela se encaixe mais especificamente na resposta. Dessa forma, posso fazer uma pergunta separada no trustdb. Obrigado pela ajuda. :)
user50849
81

Acima é apenas uma resposta parcial. A resposta completa é:

gpg --import private.key
  • Dado o KEYID (por exemplo FA0339620046E260) da saída:

    gpg --edit-key {KEY} trust quit
    # enter 5<RETURN>
    # enter y<RETURN>
    
  • OU use o comando automatizado abaixo:

    expect -c "spawn gpg --edit-key {KEY} trust quit; send \"5\ry\r\"; expect eof"
    

Por fim, verifique se a chave agora é confiável em [ultimate]vez de[unknown]

gpg --list-keys
cmcginty
fonte
6
Essa deve ser a resposta aceita. Muito mais completo.
Ben Lindsay
O que esses comandos extras fazem?
steinybot
@Steiny Torna a chave confiável com [ultimate] em vez de [unknown]. gpgtools.tenderapp.com/kb/faq/…
cmcginty
0

Eu estava importando de um backup que tinha uma versão antiga do gpg. Como o computador antigo não estava disponível, apenas o backup, não pude exportá-lo primeiro. Isto é o que funcionou para mim.

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg

Se você deseja importar chaves secretas sem inserir a senha imediatamente, use a --batchopção

Para verificar as chaves públicas:

gpg --list-keys

Para verificar as chaves secretas:

gpg --list-secret-keys
Jonathan Tran
fonte