Comment utiliser la ligne de commande gpg pour vérifier la phrase secrète est correcte

J'essaie d'automatiser les sauvegardes avec duplicity, mais quand je teste le résultat, j'obtiens

Gpg: échec du déchiffrement de la clé publique: mauvaise phrase secrète

Je veux vérifier si la phrase secrète que j'utilise est en fait la phrase secrète associée à la clé secrète gpg correspondante, mais je ne peux pas voir de toute façon dans les options de ligne de commande gpg pour dire "ne chiffrez pas ou ne déchiffrez rien. Confirmez simplement que j'utilise la bonne phrase de passe."

Cela suggère que peut-être je le suis (encore une fois) malentendu Gnu Privacy Guard. (il a une prédilection pour me narguer jusqu'à ce que je pleure.)

Est-il logique de demander à gpg de vérifier une phrase secrète? Si oui, comment?

66
demandé sur Oddthinking 2012-07-08 10:20:40

1 réponses

Il N'y a pas de méthode intégrée pour le faire, mais il est assez simple de créer un test qui ne modifie rien et vous permet de simplement vérifier votre phrase de passe.

Vous n'avez pas spécifié, donc je suppose que vous utilisez la version GnuPG inférieure à v2 et que vous êtes sous Linux avec Bash pour votre interpréteur de ligne de commande.

Je vais donner la commande ici et ci-dessous, je vais expliquer ce que chaque partie fait - (note: ce qui suit est pour la série GnuPG version 1, Voir ci-dessous pour la série GnuPG v2)

echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

Ce que cela fait est d'abord, envoyer du texte à signer à GnuPG avec echo "1234" | - parce que nous ne voulons pas vraiment signer quoi que ce soit, ce n'est qu'un test, donc nous allons signer du texte inutile.

Ensuite, nous disons à gpg de ne pas utiliser l'agent clé avec --no-use-agent; Ceci est important plus tard car, en fonction de votre agent clé, il peut ne pas retourner "0" en cas de succès, et c'est tout ce que nous voulons faire - vérifier le succès de votre phrase secrète.

Ensuite, nous disons à gpg de mettre les données signées directement dans le fichier /dev/null, ce qui signifie que nous le rejetons et n'écrivons pas le résultat dans le terminal -- NOTE : Si vous n'utilisez pas une variante de Linux / Unix, ce fichier peut ne pas exister. Sous windows, vous devrez peut-être lui permettre d'écrire les données signées à l'écran en omettant simplement la partie -o /dev/null.

Ensuite, nous spécifions la clé avec laquelle nous voulons faire notre test en utilisant --local-user 012345. Vous pouvez utiliser le KeyID pour une spécificité maximale, ou utiliser un nom d'utilisateur, selon les meilleures suites de vos besoins.

Suivant nous spécifiez -as, qui active le mode de sortie ascii, et définit le mode de contexte pour la signature. Le - dit ensuite à GnuPG d'obtenir les données à signer à partir de standard-in, ce qui est la toute première partie de la commande que nous avons donnée echo "1234" |.

Et enfin, nous avons && echo "A message that indicates success" -- Le "& & " signifie, Si la commande précédente a réussi, imprimer ce message. Ceci est juste ajouté pour plus de clarté, car le succès de la commande ci-dessus serait autrement indiqué par aucune sortie du tout.

J'espère que c'est assez clair pour que vous compreniez ce qui se passe, et comment vous pouvez l'utiliser faire les tests que vous voulez faire. Si une partie n'est pas claire ou que vous ne comprenez pas, je serai heureux de clarifier. Bonne chance!

[EDIT] - si vous utilisez GnuPG v2, la commande ci-dessus devra être légèrement modifiée, comme ceci:

echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

La raison étant, GnuPG v2 s'attend à ce que la phrase secrète soit récupérée via un agent, donc nous ne pouvons pas désactiver l'utilisation de l'agent avec --no-use-agent et avoir le désiré effet; au lieu de cela, nous devons dire à GnuPG v2 que nous voulons exécuter un processus "batch", et récupérer la phrase secrète de STDIN (standard in) en utilisant l'option --passphrase-fd 1.

97
répondu kylehuff 2013-01-21 16:35:44