Nuevo directorio .gnupg: importe claves secretas antiguas en una nueva instalación

9

He reinstalado mi sistema operativo (Ubuntu 16.04) y tengo un antiguo directorio .gnupg que contiene:

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

Me gustaría importar mis viejas claves públicas y privadas en el nuevo gnupg. (No simplemente copié el directorio .gnupg en la nueva instalación, porque entiendo que el nuevo gnupg2 tiene algunas diferencias en el formato de la base de datos que forman parte de las nuevas opciones de cifrado de la CE).

Lo siguiente funcionó para las claves públicas pero falló para las claves secretas:

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

Este último respondió con:

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

Tenga en cuenta que no se puede abrir mi nuevo anillo secreto. Da el mismo error al intentar exportar a un archivo:

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 mi clave secreta tiene la parte privada de la clave maestra eliminada, también intenté lo mismo con --export-secret-subkeys, pero la respuesta fue la misma. Poner mi clave ID (dirección de correo electrónico) después de la exportación tampoco funciona. Por otro lado, puedo enumerar las claves:

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

(Supongo que "Clave perdida" se refiere a la clave maestra secreta despojada). ¿Alguien puede indicarme cómo resolver esto?

Con la ayuda de @Jens (abajo), funciona lo siguiente:

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

Respuestas:

7

En primer lugar, estás haciendo una especie de "no-op". gpgsigue siendo GnuPG 1.4.20 en Ubuntu 16.04, mientras que gpg2saltó de GnuPG 2.0.28 a 2.1.11. Luego, aunque GnuPG 2.1 realizó algunos cambios en los formatos de archivo (nuevo formato de almacén de claves "keybox" / .kbxy fusionó el llavero secreto en el público), sigue siendo compatible y hará la fusión del llavero secreto en la primera invocación de gpg2. El formato de llavero permanece el antiguo a menos que lo convierta manualmente . El formato anterior es totalmente compatible, el nuevo formato solo ofrece mejoras de rendimiento. La ruta de migración propuesta al nuevo formato de caja de claves se está convirtiendo dentro del antiguo directorio GnuPG en lugar de pasar a uno completamente nuevo:

Para convertir un archivo pubring.gpg existente al formato de cuadro de claves, primero haga una copia de seguridad de los valores de propiedad de propiedad, luego cambie el nombre del archivo a (por ejemplo) teclas públicas, para que ninguna versión de GnuPG lo reconozca, luego ejecute la importación y finalmente restaure Los valores de Ownertrust:

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

Luego puede cambiar el nombre del archivo publickeys para que pueda ser utilizado por versiones anteriores de GnuPG. Recuerde que en este caso tiene dos copias independientes de las claves públicas. Los valores de ownertrust se mantienen en todas las versiones de gpg en el archivo trustdb.gpg, pero se deben tomar las precauciones anteriores para mantenerlos durante una importación.

Teniendo en cuenta el mensaje de error que publicó, parece que algunos permisos en el nuevo ~/.gnupgdirectorio de inicio o en el llavero secreto ~/.gnupg/secring.gpgson insuficientes para crear la clave. Esto sucede a menudo si GnuPG fue invocado por el usuario root por accidente.

El mensaje de --list-keysno es una salida normal, pero parece ser un mensaje de error. Para imprimir un llavero arbitraria, utilizar los --no-default-keyringy --secret-keyringlas opciones y la --list-secret-keyscommdn (y por lo general siempre tienen opciones preceden a los comandos de GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Jens Erat
fuente
Ok, lo diste en el tema de la propiedad. Mi nuevo secring.gpg era propiedad de root. Además, el uso --no-default-keyringy --secret-keyringantes --list-secret-keysproduce una salida reconocible. Entonces, déjame ver lo que tengo ahora.
Diagon
¡Trabajos! Y gracias por la información de actualización. Muy útil.
Diagon