web-dev-qa-db-fra.com

gpg2: pas de clé secrète

J'utilise énigmail depuis plus d'un an sans problème et aujourd'hui, cela ne fonctionne pas.

J'ai trouvé le fait intéressant suivant:

gpg --decrypt something.gpg # this works
gpg2 --decrypt something.gpg # this fails

Donc, quelque chose est cassé avec la version 2 de gpg sur ma machine.

Cela m'a amené à voir que:

gpg --list-secret-keys # reads from ~/.gnupg/secring.gpg
gpg2 --list-secret-keys # reads from ~/.gnupg/pubring.gpg (pubring?!) 

Cela semble être la racine du problème ... Bien sûr, gpg2 ne peut pas trouver la clé secrète car elle cherche dans le mauvais fichier.

Comment mon gpg2 peut-il échouer lorsque ma gpg fonctionne correctement? Je ne vois aucune option permettant de spécifier l'emplacement de lecture des clés secrètes.

Quelqu'un a des idées?


Réponse à @grawity :

Merci, j'apprécie votre aide. J'ai couru strace et je vois de quoi vous parlez.

Cependant, même après gpg2 --import ..., je ne constate aucune différence de comportement. Je ne peux le faire fonctionner que si je redémarre (sans démarrer gpg-agent), lance gpg2 --import ..., puis lance gpg2 --decrypt .... Après cette séquence, Thunderbird + enigmail se comporte également bien. Cependant, au bout de 15 minutes environ (je suppose que le mot de passe que j'ai entré pour déchiffrer a expiré), gpg-agent a repris son ancien comportement. Cette séquence est répétable.

Donc, voici quelques résultats si cela aide à clarifier quelque chose:

sortie de gpg2 -K:

/home/<username>/.gnupg/pubring.gpg
---------------------------------
sec   rsa4096/AAAAAAAA <date> [SC]
uid         [ultimate] <description of me>
ssb   rsa4096/BBBBBBBB <date> [E]

sortie de gpg-connect-agent

> keyinfo --list
S KEYINFO <keygrip associated with AAAAAAAA> D - - - P - - -
S KEYINFO <keygrip associated with BBBBBBBB> D - - - P - - -
OK

sortie de gpg2 -v -r <my email> -e testfile

gpg: using PGP trust model
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: This key belongs to us
gpg: reading from 'testfile'
gpg: writing to 'testfile.gpg'
gpg: RSA/AES256 encrypted for: "BBBBBBBB <description of me>"

sortie de gpg2 -v -d testfile.gpg

gpg: public key is BBBBBBBB
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA
gpg: encrypted with 4096-bit RSA key, ID BBBBBBBB, created <date>
      "<description of me>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key
17
rexroni

Finalement, j'ai décidé que le problème était que j'utilisais Debian Unstable et qu'il y avait une incompatibilité de version introduite par un apt-get dist-upgrade. Je suppose que c'est pourquoi ils l'appellent "instable".

1
rexroni

… Bien sûr, gpg2 ne peut pas trouver la clé secrète car elle cherche dans le mauvais fichier.

Ce n'est pas seulement le fichier qu'il est en train de regarder.

Dans GnuPG 1.x (et 2.0), le "secret" consistait également en une copie des données publiques de votre clavier, donc elle était entièrement autonome (et la seule différence entre gpg -k et gpg -K était de savoir quel fichier il lire), mais en même temps plus difficile à maintenir pour le programme.

Dans GnuPG 2.1, les clés secrètes sont maintenant stockées indépendamment - elles sont gérées par gpg-agent , ce qui les garde dans ~/.gnupg/private-keys-v1.d/. Donc, gpg -k et gpg -K doivent maintenant lire les informations OpenPGP du pubring, mais ce dernier demande en outre gpg-agent quels certificats possèdent des clés secrètes associées. Si vous utilisez strace , vous devriez remarquer un appel connect() juste après la lecture de la brochure.

Si GnuPG n'a pas migré automatiquement les clés, il suffit d'importer directement l'intégralité du secret:

gpg2 --import ~/.gnupg/secring.gpg

Pour vérifier le contenu de l'agent manuellement:

$ gpg-connect-agent > keyinfo --listBouteille de bricolage "SAC", CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC, CAC ____ KE Y KE KE. ]D'ACCORD
>/au revoir

Ce sont des "keygrips" - comparez-les avec le secreting de GnuPG:

$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx 
 ----------------------------- ---. 
20
grawity