Cómo exportar una clave ASC privada / secreta para descifrar archivos GPG

88

Antecedentes: Mi jefe ha intentado exportarme una clave ASC con partes públicas y privadas, pero cada vez que obtengo el archivo, la parte privada nunca se carga y no descifra ningún archivo.

Hemos intentado exportar la clave ASC usando:

  • Aplicación de Windows Kleopatra 2.1 (incluida en gpg4win)
  • Asistente de privacidad GNU para aplicaciones de Windows (incluido en gpg4win)

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

¿Cómo se exporta correctamente una clave asc secreta o privada para descifrar archivos gpg?

Brian McCarthy
fuente

Respuestas:

185

Puede exportar la clave privada con la herramienta de línea de comandos de GPG . Funciona en el shell de Windows. Utilice el siguiente comando:

gpg --export-secret-keys

Una exportación normal con --exportno incluirá ninguna clave privada, por lo tanto, debe usar --export-secret-keys.

Editar:

Para resumir la información dada en mis comentarios, este es el comando que le permite exportar una clave específica con el ID 1234ABCD al archivo secret.asc:

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

Puede encontrar la ID que necesita usando el siguiente comando. El ID es la segunda parte de la segunda columna:

gpg --list-keys

Para exportar solo 1 clave secreta específica en lugar de todas:

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

keyIDNumber es el número de identificación de clave para la clave deseada que está intentando exportar.

Demento
fuente
4
@Brian: Esto volcará la clave a la consola. Si desea almacenarlo en un archivo, puede redirigir la salida a un nombre de archivo arbitrario ("gpg --export-secret-keys> secret.asc").
Demento
5
@Brian: Esto le da la salida en ASCII y no en binario. Si lo guarda en un archivo, realmente no importa. Pero una vez que desee pasarlo de otra manera, la versión ASCII es mucho más fácil de manejar (enviándola en línea en un correo electrónico, por ejemplo)
Demento
8
Tal vez quieras llevar tu clave secreta a otra ubicación. En este caso, debe cifrar los datos exportados: "gpg --export-secret-keys keyIDNumber | gpg -c> encrypted" descifrarlos con "gpg -o unencrypted encrypted".
rockdaboot
3
Las claves exportadas desde GnuPG permanecen encriptadas (por eso no es necesario que ingrese la frase de contraseña de la clave privada), por lo que realmente no es necesario volver a encriptarlas.
Ferry Boender
1
@FerryBoender ¿Estás seguro de eso ?
Josh Habdas
32

Todas las respuestas anteriores son correctas, pero es posible que le falte un paso crucial, debe editar la clave importada y "finalmente confiar" en esa clave.

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

y seleccione 5 para habilitar esa clave privada importada como una de sus claves

higuita
fuente
18

Ver el tratamiento de Dark Otter

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

Si el sitio no funciona, utilice la referencia de la copia de seguridad de archive.org:

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

que incluye una forma razonablemente segura de transferir claves. Puede poner esa recomendación en los scripts de shell que se muestran a continuación para un uso repetido.

Primero obtenga el KEYID que desea de la lista mostrada por

$ gpg -K

De la lista resultante, anote el KEYID (los 8 hexadecimales siguientes a la sec) que necesita para la transferencia.

Luego invoque los scipts de shell probados "export_private_key" en la primera cuenta y genere su pubkey.gpg + keys.asc. Posteriormente invocar en la segunda cuenta "import_private_key". Aquí está su contenido que se muestra con gato (copiar y pegar contenido):

$ 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  #####################

Ahora transfiera de alguna manera el "pubkey.gpg" (si es necesario) y el "keys.asc" privado a la segunda cuenta y invoque el programa que se muestra a continuación.

$ 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  ######################

En el espíritu de Otter "Y eso, debería ser, eso".

Wolfram J
fuente
Gracias por el script para incluir tanto la clave pública como la privada en un archivo protegido con frase de contraseña. ¡Hace mi vida mucho mejor!
codekoala
La opción --no-use-agentestá obsoleta en gpg versión 2.
Josh Habdas
9

Creo que aún no ha importado la clave privada como decía el mensaje de error, Para importar la clave pública / privada de gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key
SIFE
fuente
estaba preguntando sobre la exportación desde una computadora que funciona ... solo puede importar la clave si está en un servidor local.
Brian McCarthy
@Brian McCarthy: ¿Qué estás tratando de decir?
SIFE
¿Realmente necesitamos importar la clave pública si la privada ya se ha importado? Según tengo entendido, se puede generar una clave pública a partir de una privada.
farhany
@farhany Creo que sí, porque lo necesitarás cuando firmes tu mensaje.
SIFE
6

esto terminó funcionando para mí:

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

puede nombrar keyfilename.asc con cualquier nombre siempre que mantenga la extensión .asc.
este comando copia todas las claves secretas en la computadora de un usuario a keyfilename.asc en el directorio de trabajo donde se llamó al comando.

Para exportar solo 1 clave secreta específica en lugar de todas:

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

keyIDNumber es el número de identificación de clave para la clave deseada que está intentando exportar.

Brian McCarthy
fuente
1
Puede enumerar todas las claves disponibles con "--list-keys". La segunda columna contendrá ID como "2048g / 1234ABCD". Busque la clave deseada y expórtela con "gpg --export-secret-keys 1234ABCD> secret.asc", por supuesto cambiando 1234ABCD con la ID correcta. También puede agregar la bandera "-a". Escribe la salida con caracteres ASCII, por si acaso la salida binaria está causando problemas.
Demento
@demento, gracias por los comentarios adicionales ... agregaré eso a la respuesta
Brian McCarthy
2
todavía necesita la -a si realmente quiere asc
RichieHH
¿Cómo se pueden importar luego a otra computadora?
Natim
@Natim me imagino que lo llevas exportedKeyFilename.asca la otra computadora y luego lo haces gpg --allow-secret-key-import --import exportedKeyFilename.ascen el directorio con el .ascarchivo. Ver: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx
5

Similar a la respuesta de @Wolfram J, aquí hay un método para encriptar su clave privada con una frase de contraseña :

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

Y un método correspondiente para descifrar:

gpg private_key.asc
Mateen Ulhaq
fuente
5

1.Exportar una clave secreta (esto es lo que debería haber hecho tu jefe por ti)

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

2.Importar clave secreta (importar su clave privada)

gpg --import privateKey.asc

3.Todavía no ha terminado, todavía necesita confiar en una clave. Deberá asegurarse de que, en última instancia, también confíe en una clave.

gpg --edit-key yourKeyName

Ingrese confianza, 5, y, y luego salga

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

Michael James Kali Galarnyk
fuente