mutt: Utilisez gpgme ou gpg classique?

13

Le wiki de Mutt sur l'intégration de GnuPG et de nombreux autres endroits (comme par défaut sur Debian) utilise la manière classique de connecter mutt à gnupg. Autrement dit, on configure un tas de commandes à appeler gpgdirectement. D'un autre côté, il existe une bibliothèque appelée gpgme, qui essaie de normaliser exactement cela. La recherche sur le Web de "mutt gpgme" ne m'a pas donné de résultats vraiment utiles.

Quels sont les avantages et les inconvénients de l'utilisation set crypt_use_gpgme=yesdans .muttrc? Pourquoi est-il si rarement utilisé?

Elrond
la source

Réponses:

8

Beaucoup de gens ne comprennent vraiment pas GPGME et cela n'aide probablement pas que la documentation qui existe est essentiellement le commentaire de code écrit à l'époque. Cependant, il permettra un accès programmatique complet ou presque complet à l'ensemble de la suite GNU Privacy Guard et est censé également permettre l'accès à des choses comme libassuan, gpg-agent et divers autres composants. C'est pourquoi par défaut, il inclut également l'implémentation S / MIME que presque personne en dehors de quelques sociétés qui s'exclamaient fortement à la fin des années 90.

Actuellement, GPGME comprend quelque chose comme 500 fonctions distinctes ou plus et couvre certainement à peu près tout ce que vous feriez avec GPG sur la ligne de commande. Cependant, il contient également certaines reliques de choix de conception antérieurs qui ont été par la suite déterminés comme n'étant pas la bonne direction. Par exemple, il s'agit d'une API contenant de gros morceaux de GTK 2. Évidemment, cela doit disparaître (et ce le sera lorsque le temps le permettra). Un autre problème qu'il a ces jours-ci, peut-être le plus grand obstacle à l'adoption est que lorsque quelqu'un dit «API», la plupart des codeurs ne pensent pas immédiatement aux fichiers d'en-tête C à compiler avec leur propre code afin d'accéder à la chose; avouons-le, ces jours-ci, la plupart des gens pensent à quelque chose qui est RESTful ou du moins les laissons interagir avec des données au format JSON. GPGME est à peu près aussi loin que cela » s possible d'obtenir. Notez que bien qu'il devrait être possible de le faire jouer correctement avec JSON, il ne peut jamais être RESTful car les clés d'édition ne peuvent pas l'être. De plus, la gestion des clés via le Web pose simplement des problèmes.

Il existe également de nombreuses fonctionnalités et aspects non documentés, de sorte que même les personnes travaillant avec le logiciel depuis sa création peuvent encore être surpris par certaines choses. Comme, disons, le format XML pour les données de trousseau de clés qui avaient tout sauf un schéma formel (jusqu'à ce qu'il soit généré il y a quelques mois).

D'un autre côté, pour toutes les bonnes choses que fait Mutt, il fait aussi des choses plutôt choquantes. Par exemple, que GPGME soit utilisé ou non, il ne devrait y avoir aucune raison pour que Mutt mette en cache les phrases secrètes; dans les deux cas, il doit être remis à GPG (avec ou sans gpg-agent). De même, il devrait respecter les paramètres de configuration dans le ~/.gnupg/gpg.conffichier (et d'autres dans ce répertoire). Bien sûr, définir un ID de clé alternatif pour différents comptes pour changer la façon dont les commandes sont appelées ou même pouvoir spécifier des fichiers de configuration alternatifs ou des répertoires entiers (par exemplegpg --homedir ~/.gnupg-work/gpg.conf). Dans l'état actuel des choses, cependant, Mutt perd du temps à essayer de résoudre des problèmes qui sont déjà résolus par le programme avec lequel il interagit, comme la phrase secrète ou la gestion des clés, mais ne permet pas d'accéder aux fonctionnalités normales de GPG, dont beaucoup sont fantastiques pour le courrier électronique. comme utiliser des lignes de groupe pour plusieurs destinataires ou pour remplacer la sélection de clés pour des destinataires particuliers (car il y a toujours un gars qui continue de perdre sa clé secrète ou oublie la phrase secrète et maintenant vous avez 15 clés publiques avec la même adresse que l'UID et le comportement par défaut est de choisir la première correspondance qui est très probablement incorrecte). Emacs est un peu mieux là-bas, mais même il ne parvient pas à récupérer le gpg.conffichier qui répond généralement automatiquement aux choses qu'il souhaite inviter.

Maintenant, pour quelque chose d'un peu plus utile et tangentiellement lié, GPGME est livré avec une autre petite astuce astucieuse appelée gpgme-tool. C'est une interface rudimentaire de GPGME qui fonctionnera sur un socket UNIX (et bien sûr, vous pouvez utiliser ncat ou quelque chose pour le faire reposer sur un port réseau si vous le souhaitez). Bien qu'il ne soit pas documenté, il est assez explicite si vous l'exécutez et interagissez avec lui pendant un petit moment et commencez par la commande help. Alternativement, cela fonctionne plutôt bien:

echo help | gpgme-tool > gpgme-tool-cheatsheet.txt

Il se fera un plaisir de faire toutes les bases (chiffrer, déchiffrer, signer, vérifier, changer les phrases de passe, générer des clés, répertorier les clés, répertorier les clés secrètes, rechercher des clés spécifiques ou les sélectionner, etc.). Si vous voulez voir le format XML "caché" essayez ceci:

echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml

Cela n'exportera pas les clés secrètes, il suffit de les répertorier et les données les concernant. De plus, il sera exporté avec un format de sortie qui devra être filtré avant que quoi que ce soit ne le reconnaisse vraiment comme XML (supprimez la ligne supérieure, les deux premiers caractères de chaque ligne suivante et le% 0A à la fin de chaque ligne ). Quoi qu'il en soit, gpgme-tool peut donner une meilleure idée de ce que GPGME peut vraiment faire. Les liaisons PyME Python pour GPGME, par exemple, tentent de faire correspondre automatiquement les fonctions GPGME (et y parviennent généralement sans problème); la liste actuelle des fonctionnalités de pyme.core.pygpgme s'élève à 534. Comparez cela à la ligne de commande et GPG 1.4.20 a 322 options, tandis que 2.1.11 en a 347 (j'ai sauté 2.0 donc je ne peux pas vérifier, mais il devrait être quelque part entre ces deux).

Comme pour la réponse précédente faisant référence à la correspondance des raccourcis clavier, celle-ci devrait être uniquement motivée par les options de configuration et si Mutt "autorise" ou non un accès complet à GPG. J'utilise actuellement Mutt avec GPGME et les deux fonctions mentionnées (clé de messagerie et clés d'extraction) sont correctes, bien que Mutt ait du mal à reconnaître le contenu PGP / en ligne s'il a attribué ou récupéré le type de contenu texte / simple à partir de quelque part. Lorsque cela se produit, alors oui, il est généralement nécessaire de passer à Emacs ou quelque chose. Pourtant, cela semble être un problème avec la façon dont Mutt vérifie si le contenu est vraiment juste du texte ou comment il vérifie le contenu au format OpenPGP. Bien que je n'aime rien de mieux que de simplement dire que nous devrions tous utiliser PGP / MIME à la place (et nous devrions l'être),

Fondamentalement, il semble que Mutt repose uniquement sur le message MIME en plusieurs parties avec une ou plusieurs de ces parties contenant la clé, les signatures et / ou le contenu crypté pour qu'il puisse faire quoi que ce soit. Il ne recherchera pas uniquement un e-mail simple à la recherche de contenu correspondant, mais ce n'est ni la faute de GPG ni de GPGME. La solution consiste à ajouter ces fonctionnalités à Mutt ou à ouvrir le message dans quelque chose avec cette capacité (par exemple Emacs avec EPA / EasyPG, qui devrait être activé par défaut ces jours-ci) ou à diriger le message vers une commande directe (ou gpgme-tool si vous le souhaitez, mais lors de la tuyauterie, il est généralement plus facile de passer directement à une commande régulière).

Quant à GPGME, tout le monde ne l'a pas disponible car il doit toujours être compilé à partir de la même version source que celle installée sur le système. Si vous mettez à niveau GPG et ne recompilez pas GPGME pour correspondre, il y aura probablement des problèmes. D'un autre côté, l'installation de GPG à partir de la source est généralement recommandée dans la mesure du possible, donc si vous suivez la route GPGME, il devient de bonne pratique de simplement exécuter cette recompilation lors de la mise à jour de GPG et tout devrait bien se passer.

Alors que les personnes qui s'appuient uniquement sur les packages fournis par la distribution choisie seront également soumises à tout ce que les responsables de ces packages peuvent être gênés de maintenir et ils peuvent ou ne peuvent pas toujours comprendre les exigences de GPG et GPGME travaillant ensemble. Par exemple, le package MacPorts pour GPGME est défini pour dépendre de GPG 2.0.x, qui à son tour est en conflit avec GPG 2.1.x, de sorte que la plupart des personnes installant 2.1 ne peuvent pas également installer GPGME, même si elles fonctionnent clairement ensemble. Pour que GPGME fonctionne dans ce scénario, il faut faire des choses contre lesquelles MacPorts ne recommande pas (compiler des choses en dehors du système de gestion des ports, mais à l'intérieur /opt/local). Certaines distributions Linux peuvent avoir des problèmes similaires.

Donc, si vous n'utilisez que PGP / MIME, l'utilisation de l'intégration GPGME ne devrait poser aucun problème et cela signifie que vous n'aurez jamais à configurer des commandes spécifiques dans votre .muttrcfichier. Si vous traitez avec PGP / en ligne, vous allez rencontrer des problèmes, mais ils ne peuvent pas être évités de toute façon avec Mutt, donc je recommanderais d'utiliser GPGME si vous le pouvez de toute façon.

AVIS DE NON-RESPONSABILITÉ: Je suis impliqué dans le travail de développement pour créer une API pour l'API pour que tous les développeurs non-C puissent utiliser la chose après la révision. J'ai également porté PyME 0.9 de Python 2 vers Python 3 (il est actuellement dans une branche de GPGME et seule la version Python 2 est disponible via PyPI et pip).

MISE À JOUR: ce port de PyME vers Python 3 est maintenant dans la branche principale de GPGME et disponible sur PyPI en tant que pyme3.

Ben
la source
3

Parce que certaines fonctions ne fonctionnent pas directement avec l' gpgmeinterface.

Par exemple, les fonctions suivantes ne fonctionnent pas dans mon environnement:

^K      extract-keys
<Esc>k  mail-key

lorsque toutes les fonctions clés de base fonctionnent gpgme.

dan
la source
0

les gars de crypto sont paranoïaques et comprennent la ligne de commande. la bibliothèque est nouvelle et non testée mais offre des avantages théoriques. essayez-le, vous pouvez être notre mannequin de test.

hildred
la source
1
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article.
Anthon
la question était pourquoi pas comment. maintenant, certes, pourquoi est-ce plus dans le domaine de la psychologie ...
hildred
1
La bibliothèque est loin d'être neuve, elle a été validée dès 2000, probablement plus tôt.
Ben