Como exportar chave ASC privada / secreta para descriptografar arquivos GPG

88

Histórico: Meu chefe tentou exportar uma chave ASC para mim com partes públicas e privadas, mas sempre que recebo o arquivo, a parte privada nunca carrega e não descriptografa nenhum arquivo.

Tentamos exportar a chave ASC usando:

  • Aplicativo Windows Kleopatra 2.1 (incluído no gpg4win)
  • Aplicativo do Windows GNU Privacy Assistant (incluído no gpg4win)

            Error: "Decryption failed. Secret Key Not available." 
    

Como você exporta corretamente uma chave asc secreta ou privada para descriptografar arquivos gpg?

Brian McCarthy
fonte

Respostas:

185

Você pode exportar a chave privada com a ferramenta de linha de comando do GPG . Ele funciona no shell do Windows. Use o seguinte comando:

gpg --export-secret-keys

Uma exportação normal com --exportnão incluirá nenhuma chave privada, portanto, você deve usar --export-secret-keys.

Editar:

Para resumir as informações fornecidas em meus comentários, este é o comando que permite exportar uma chave específica com o ID 1234ABCD para o arquivo secret.asc:

gpg --export-secret-keys --armor 1234ABCD > secret.asc

Você pode encontrar o ID de que precisa usando o seguinte comando. O ID é a segunda parte da segunda coluna:

gpg --list-keys

Para exportar apenas 1 chave secreta específica em vez de todas:

gpg --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber é o número do ID da chave desejada que você está tentando exportar.

Demento
fonte
4
@Brian: Isso irá despejar a chave no console. Se você deseja armazená-lo em um arquivo, pode redirecionar a saída para um nome de arquivo arbitrário ("gpg --export-secret-keys> secret.asc").
Demento
5
@Brian: Fornece a saída em ASCII e não em binário. Se você mantê-lo em um arquivo, isso realmente não importa. Mas se você quiser distribuí-lo de outra maneira, a versão ASCII é muito mais fácil de manusear (enviando inline por e-mail, por exemplo)
Demento
8
Talvez você queira levar sua chave secreta para outro local. Neste caso, você deve criptografar os dados exportados: "gpg --export-secret-keys keyIDNumber | gpg -c> criptografado" descriptografar com "gpg -o não criptografado criptografado".
rockdaboot
2
As chaves exportadas do GnuPG permanecem criptografadas (é por isso que você não precisa inserir a senha da chave privada), portanto, não há realmente necessidade de criptografá-la novamente.
Ferry Boender
1
@FerryBoender Tem certeza disso ?
Josh Habdas
32

Todas as respostas acima estão corretas, mas pode estar faltando uma etapa crucial, você precisa editar a chave importada e "confiar" nessa chave

gpg --edit-key (keyIDNumber)
gpg> trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

e selecione 5 para habilitar a chave privada importada como uma de suas chaves

higuita
fonte
18

Veja o tratamento de Dark Otter

https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

Se o site estiver fora do ar, use a referência do backup archive.org:

https://web.archive.org/web/20170518155052/https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

que inclui uma maneira razoavelmente segura de transferir chaves. Você pode colocar essa recomendação em scripts de shell mostrados abaixo para uso repetido.

Primeiro pegue a KEYID que você deseja da lista mostrada por

$ gpg -K

Na lista resultante, observe o KEYID (os 8 hexadecimais após o segundo) que você precisa para a transferência.

Em seguida, invoque os scipts de shell testados "export_private_key" na primeira conta e gere seu pubkey.gpg + keys.asc. Subseqüentemente, chame na segunda conta "import_private_key". Aqui está o conteúdo mostrado com cat (copiar e colar conteúdo):

$ cat export_private_key 
gpg -K
echo "select private key"
read KEYID
gpg --output pubkey.gpg --export $KEYID
echo REMEMBER THE COMING PASS-PHRASE
gpg --output - --export-secret-key $KEYID | \
   cat pubkey.gpg - | \
   gpg --armor --output keys.asc --symmetric --cipher-algo AES256
ls -l pubkey.gpg keys.asc
####################  E X P O R T _ P R I V A T E _ K E Y  #####################

Agora transfira de alguma forma o "pubkey.gpg" (se necessário) e o "keys.asc" privado para a segunda conta e invoque o programa mostrado abaixo.

$ cat import_private_key 
gpg --no-use-agent --output - keys.asc | gpg --import
###################  I M P O R T _ P R I V A T E _ K E Y  ######################

No espírito de Otter "E isso, deveria ser, isso".

Wolfram J
fonte
Obrigado pelo script para incluir as chaves pública e privada em um arquivo protegido por senha. Torna minha vida muito melhor!
codekoala de
A opção --no-use-agentestá obsoleta na versão 2. do gpg.
Josh Habdas
9

Acho que você ainda não importou a chave privada, conforme a mensagem de erro dizia, Para importar a chave pública / privada do gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key
SIFE
fonte
Eu estava perguntando sobre a exportação de um computador que funciona ... você só pode importar a chave se estiver em um servidor local.
Brian McCarthy
@Brian McCarthy: O que você está tentando dizer?
SIFE
Nós realmente precisamos importar a chave pública se a privada já foi importada? Pelo que entendi, uma chave pública pode ser gerada a partir de uma chave privada qualquer coisa.
farhany
@farhany eu acho que sim, porque você vai precisar quando assinar sua mensagem.
SIFE
6

isso acabou funcionando para mim:

   gpg -a --export-secret-keys > exportedKeyFilename.asc 

você pode nomear keyfilename.asc por qualquer nome, desde que mantenha a extensão .asc.
este comando copia todas as chaves secretas do computador de um usuário para keyfilename.asc no diretório de trabalho de onde o comando foi chamado.

Para exportar apenas 1 chave secreta específica em vez de todas:

   gpg -a --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber é o número do ID da chave desejada que você está tentando exportar.

Brian McCarthy
fonte
1
Você pode listar todas as chaves disponíveis com "--list-keys". A segunda coluna conterá IDs como "2048g / 1234ABCD". Encontre a chave desejada e exporte-a com "gpg --export-secret-keys 1234ABCD> secret.asc", obviamente alterando 1234ABCD com o ID correto. Você também pode adicionar o sinalizador "-a". Ele escreve a saída com caracteres ASCII, apenas no caso de a saída binária estar causando problemas.
Demento
@demento, obrigado pelo feedback adicional ... acrescentarei isso à resposta
Brian McCarthy
2
você ainda precisa do -a se você realmente quiser asc
RichieHH
Como você os importa para outro computador?
Natim
@Natim imagino que você leve exportedKeyFilename.ascpara o outro computador e depois faça gpg --allow-secret-key-import --import exportedKeyFilename.ascno diretório com o .ascarquivo. Veja: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx
5

Semelhante à resposta de @Wolfram J, aqui está um método para criptografar sua chave privada com uma senha longa :

gpg --output - --armor --export $KEYID | \
    gpg --output private_key.asc --armor --symmetric --cipher-algo AES256

E um método correspondente para descriptografar:

gpg private_key.asc
Mateen Ulhaq
fonte
5

1. Exporte uma chave secreta (isso é o que seu chefe deveria ter feito por você)

gpg --export-secret-keys yourKeyName > privateKey.asc

2. Importe a chave secreta (importe sua chave privada)

gpg --import privateKey.asc

3. Ainda não foi feito, você ainda precisa confiar em uma chave. Você precisará certificar-se de que também confia em uma chave.

gpg --edit-key yourKeyName

Insira trust, 5, y, e então saia

Fonte: https://medium.com/@GalarnykMichael/public-key-asymmetric-cryptography-using-gpg-5a8d914c9bca

Michael James Kali Galarnyk
fonte