Nouveau répertoire .gnupg: importez les anciennes clés secrètes dans la nouvelle installation

9

J'ai réinstallé mon système d'exploitation (Ubuntu 16.04) et j'ai un ancien répertoire .gnupg contenant:

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

Je voudrais importer mes anciennes clés publiques et privées dans le nouveau gnupg. (Je n'ai pas simplement copié le répertoire .gnupg dans la nouvelle installation, car je comprends que le nouveau gnupg2 présente des différences de format de base de données qui font partie des nouvelles options de chiffrement EC.)

Les éléments suivants ont fonctionné pour les clés publiques mais ont échoué pour les clés secrètes:

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

Ce dernier a répondu par:

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

Notez qu'il n'ouvre pas mon nouvel anneau secret. Il donne la même erreur lors de l'exportation vers un fichier:

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

Étant donné que ma clé secrète a la partie privée de la clé principale supprimée, j'ai également essayé la même chose avec --export-secret-subkeys, mais la réponse était la même. Mettre mon ID de clé (adresse e-mail) après l'exportation ne fonctionne pas non plus. Je peux par contre lister les clés:

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

(Je suppose que "Clé perdue" fait référence à la clé principale secrète supprimée.) Quelqu'un peut-il me dire comment résoudre ce problème?

Avec l'aide de @Jens (ci-dessous), les travaux suivants:

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

Réponses:

7

Tout d'abord, vous faites une sorte de "no-op". gpgest toujours GnuPG 1.4.20 sur Ubuntu 16.04, tout gpg2en passant de GnuPG 2.0.28 à 2.1.11. Ensuite, alors que GnuPG 2.1 a apporté quelques modifications aux formats de fichiers (nouveau format de fichier de .kbxclés "keybox" / et fusion du trousseau de clés secret dans le public), il est toujours compatible et fera le trousseau de clés secret fusionnant lors de la première invocation de gpg2. Le format du trousseau de clés reste l'ancien, sauf si vous le convertissez manuellement . L'ancien format est entièrement pris en charge, le nouveau format offre simplement des améliorations de performances. Le chemin de migration proposé vers le nouveau format de boîte à clés se convertit dans l'ancien répertoire GnuPG plutôt que de passer à un tout nouveau:

Pour convertir un fichier pubring.gpg existant au format de boîte à clés, vous devez d'abord sauvegarder les valeurs de confiance du propriétaire, puis renommer le fichier en (par exemple) publickeys, afin qu'il ne soit reconnu par aucune version de GnuPG, puis exécuter l'importation et enfin restaurer les valeurs de confiance du propriétaire:

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

Vous pouvez ensuite renommer le fichier publickeys afin qu'il puisse être utilisé par les anciennes versions de GnuPG. N'oubliez pas que dans ce cas, vous disposez de deux copies indépendantes des clés publiques. Les valeurs de trusttrust sont conservées par toutes les versions de gpg dans le fichier trustdb.gpg mais les précautions ci-dessus doivent être prises pour les conserver lors d'une importation.

Compte tenu du message d'erreur que vous avez publié, il semble que certaines autorisations sur le nouveau ~/.gnupgrépertoire de base ou le trousseau de clés secret ~/.gnupg/secring.gpgsont insuffisantes pour créer la clé. Cela se produit souvent si GnuPG a été invoqué par l'utilisateur root par accident.

Le message de --list-keysn'est pas une sortie normale, mais semble être un message d'erreur. Pour imprimer un porte - clé arbitraire, utilisez les --no-default-keyringet --secret-keyringoptions et la --list-secret-keyscommdn (et ont généralement toujours des options pour les commandes précèdent GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Jens Erat
la source
Ok, vous l'avez cloué sur la question de la propriété. Mon nouveau secring.gpg appartenait à root. De plus, l'utilisation de --no-default-keyringet --secret-keyringavant --list-secret-keysproduit une sortie reconnaissable. Alors, laissez-moi voir ce que j'ai maintenant.
Diagon
Travaux! Et merci pour les informations de mise à niveau. Très utile.
Diagon