Garbage Collector


The little space of a writer, tinkerer, and a coffee addict

Chiffrer ses mails avec OpenPGP/GPG

Chiffrer ses mails avec OpenPGP/GPG
Logo GnuPG sous licence GNU General Public License

Nous sommes à une époque où le chiffrement des échanges informatiques est désormais la norme. Les flux de données en clair sont de plus en plus proscrits et les principaux outils Internet tendent à réduire leur usage en privilégiant les versions sécurisées lorsque disponibles ou en affichant des messages d’alerte. L’email est l’un des moyens de communication d’Internet les plus historiques (sa création datant d’avant le Web), mais il est souvent considéré comme une carte postale en raison de l’absence de chiffrement par défaut du contenu. Au travers de ce petit article, je vous propose de voir comment utiliser GnuPG pour chiffrer ses échanges par e-mail avec le client Evolution.

Mais pourquoi chiffrer ses e-mails ? (et le reste aussi)

A titre personnel, je suis très attaché au respect de la vie privée et de l’intimité. Cela ne doit pas faire exception sur les réseaux, surtout quand on sait que les principaux acteurs d’Internet ont une grande partie de leur business model basé sur l’exploitation des données et la traque des utilisateurs. Je n’irai pas trop dans le détail ici car ce n’est pas l’objet de l’article. Néanmoins, j’ai récemment vu sur Fosstodon un message d’un utilisateur qui résume beaucoup la problématique telle que je la conçois :

I demand privacy not because my actions are questionable but because your judgement is

@elkhair

Traduction pour les non anglophones :

Je demande le respect de la vie privée non pas parce que mes actes sont discutables, mais parce que votre jugement l’est

La vie privée est malmenée depuis quelques temps pour diverses raisons. Les lois et discours sécuritaires en réponse à la menace terroriste, la crise sanitaire du moment qui a provoqué quelques de dérives (entreprises prises en flagrant délit de fichage de l’état de santé de leurs employés, systèmes de suivi des cas contact qui a beaucoup inquiété, etc), et j’en oublie certainement. On dit souvent que l’enfer est pavé de bonnes intentions et la plupart de ces actions en sont … Mais lorsqu’on fini par accepter d’être mis à nu en permanence (que ce soit par les autorités ou les services commerciaux qui veulent notre bien), on se rend compte tardivement qu’on a perdu une des composantes essentielles de nos personnalités. Tout le monde aime avoir son petit jardin secret, et c’est parfaitement légitime. Celui qui voudra vous prouver l’inverse sera clairement la personne la plus discutable de débat ! Et sans aller aussi loin, les atteintes à la vie privée sont multiples sur le Web avec le suivi permanent d’utilisateurs et tous ces services qui demandent constamment plein d’informations injustifiées.

Enfin, dans le cas qui nous concerne, si un courrier physique est envoyé au travers d’une enveloppe masquant le contenu, pourquoi un courrier électronique ne le serait pas ?

Accepteriez-vous que La Poste ou votre facteur ouvre vos courriers pour analyser leur contenu avant de vous les remettre ? (et vous proposer ainsi comment réduire vos impôts parce qu’il a lu votre déclaration avant vous ?)

En France, le secret des correspondances est un principe garanti par la Loi. Le courrier électronique n’y fait donc pas exception, comme l’a expliqué la CNIL en 2017 à la suite de la publication d’un décret relatif aux secret des correspondances numériques.

Pour plus de lecture à ce sujet, je vous propose de consulter les quelques références disponibles sur https://jenairienacacher.fr. Je n’adhère pas spécialement à la totalité du contenu ou des propos, mais il y a dessus quelques documents et conférences très enrichissantes.

Comment ça marche ?

L’email

Tout d’abord voyons comment fonctionne l’email. De manière très vulgarisée, c’est la même idée que le courrier traditionnel physique : le message est constitué d’une enveloppe (headers) avec des données techniques publiques utilisées par les différents composants de la chaîne (adresse de l’émetteur, adresse du destinataire, etc). Ensuite, il y a le contenu du courrier, qui est le corps (body) du message. Tout ceci circule sur Internet au travers de différents services qui se résument ainsi :

envoi mail Image réalisée par Denisg, licence GNU Free Documentation License, source Wikimedia

  1. L’expéditeur envoie un email à destination de “destinataire” résident chez domaine2.org. Son Mail User Agent (MUA), soit son logiciel de messagerie, envoie le message au SMTP.
  2. Le SMTP, pour Simple Mail Transfer Protocol, c’est La Poste. Il joue le rôle de MTA dans la chaîne, soit Mail Transfer Agent. En regardant l’entrée MX de “domaine2.org”, il obtient en retour l’adresse à laquelle transférer le message. Cette adresse n’est autre que le serveur MTA de domaine2.org. Le MTA de domaine2.org reçoit le message provenant de celui de domaine1.com, il le met alors à disposition du MUA de destinataire@domaine2.org. Ceci se fait généralement dans un serveur de messagerie de type POP (Post Office Protocol) ou IMAP (Interactive Message Access Protocol). Durant cette étape, le serveur SMTP prend le rôle de MDA, soit Mail Delivery Agent au sein de la chaîne car il doit s’assurer localement que la boîte de l’utilisateur est bien disponible. Le MDA est donc le facteur.
  3. Le serveur de messagerie (POP ou IMAP) qui héberge les courriers de destinataire@domaine2.org possède un nouveau message. Son MUA demande alors à consulter les nouveaux messages (l’utilisateur ouvre sa boîte aux lettres).
  4. Le MUA reçoit le message du serveur de messagerie. Dans le cas du protocole POP, il est alors effacé du serveur de messages (sauf si le client demande à le conserver) et conservé localement. Dans le cas de l’IMAP, il est consultable depuis le serveur et le client peut avoir une copie locale.

Voilà dans les grandes lignes comment fonctionne l’envoi d’email sur Internet. Durant tout ce fonctionnement, une partie de la chaîne communique via des protocoles chiffrés : le MUA peut chiffrer l’échange avec le SMTP et ou le serveur de messagerie, tout comme les SMTP peuvent chiffrer leur communication pour le transfert du message. Mais le message restera une donnée lisible par tous qui peut être potentiellement interceptée ou corrompue. De plus, le stockage de celui-ci sur le serveur de message (ex : Gmail, Outlook.com, messagerie du FAI, etc) n’est quasiment jamais chiffré pour diverses raisons (analyse à des fins de profilage, analyse Spam, etc). Certains opérateurs ont fait du chiffrement intégral leur argument de vente comme Protonmail. C’est ce qu’on appelle le chiffrement de bout en bout, ou end-to-end encryption en anglais. L’hébergeur ne stocke que de la bouillie qui lui est illisible, seuls les clients sont capables de déchiffrer la communication.

PGP, OpenPGP et GnuPG

Je préviens, je ne suis en aucun cas un expert en cryptographie et l’explication sera donc très vulgarisée. Pour une explication détaillée, je vous invite à consulter cet article de Next-INpact qui est aussi complet qu’il est accessible.

PGP pour Pretty Good Privacy (ou “assez bon niveau de confidentialité” comme proposé par Wikipedia fr) est un programme de chiffrement, déchiffrement et de signature de données pour réaliser des actions de confidentialité, authentification, et communication. Initialement développé par la société Symantec, il s’agit d’un logiciel propriétaire qui fonctionne par un principe de clé privée et clé publique avec signatures.

PGP a depuis été standardisé à la demande de nombreux acteurs voulant implémenter le procédé dans leurs solutions logicielles. Sa spécification a ainsi permis la création de variantes ouvertes telles que OpenPGP. Donc lorsque je parlerai de PGP, il s’agira plus de la méthode de chiffrement que du logiciel original de Symantec.

Enfin, GnuPG (ou GPG pour les intimes) pour GNU Privacy Guard, est le logiciel développé par le projet GNU qui implémente le standard OpenPGP. Il se présente sous la forme de la commande gpg mais aussi de la libgcrypt disponible sur Linux (et pas que). La bibliothèque libgcrypt permet d’interfacer des logiciels avec cette API pour un support natif. Dans cet article nous utiliserons par exemple Seahorse du projet GNOME comme outil graphique.

PGP repose sur un principe de clé privée et clé publique. Comme leur nom l’indique, l’une est confidentielle et restreinte à l’usage de son propriétaire, l’autre est une information publiquement partageable. La clé publique servira à chiffrer le message que seul le propriétaire de la clé privée pourra lire.

Le principe de chiffrement d’un texte en PGP est donc le suivant :

  1. Emetteur veut envoyer un message à Destinataire par email
  2. Destinataire possède une clé privée et une clé publique
  3. Destinataire donne sa clé publique à émetteur et garde précieusement sa clé privée pour lui
  4. Emetteur chiffre le message en utilisant la clé publique de Destinataire
  5. Emetteur envoie le message à Destinataire (note : l’email peut être un message chiffré, ou plus simplement une pièce jointe chiffrée)
  6. Destinataire déchiffre le message grâce à sa clé privée

De manière imagée, Destinataire fourni à Emetteur une boîte ouverte dans laquelle Emetteur peut placer son secret, c’est la clé publique. Lorsqu’il referme la boîte, il lui est désormais impossible de la rouvrir car seul Destinataire en possède la clé, c’est la clé privée.

A noter qu’une partie de ce mécanisme repose sur la confiance : lorsque Destinataire a fourni sa clé à Emetteur, celui-ci peut confirmer (signer) que cette clé atteste l’identité de Destinataire. Par défaut, GPG considérera une clé publique comme non sûre et limitera son utilisation. De même qu’une clé privée importée (ex : d’un PC à l’autre) doit être validée par son propriétaire. Dans le cas où une clé serait corrompue (la clé privée est dans la nature), une révocation est possible grâce à la création d’un certificat de révocation.

Créer sa clé PGP

Attaquons maintenant le sujet. Pour commencer, nous allons devoir générer notre propre clé PGP si ce n’est pas déjà fait. Tout ceci peut se faire en ligne de commandes avec gpg, mais à titre personnel je préfère utiliser Seahorse pour administrer ceci en graphique.

Seahorse est un gestionnaire graphique pour les outils crypto sous Linux, il fait partie des logiciels de l’environnement de bureau GNOME. Il peut aussi bien gérer vos clés PGP que vos clés SSH par exemple, ainsi que les mots de passe stockés dans le trousseau du système.

gpg1

Nous créons une nouvelle clé en cliquant sur “+” => nouvelle clé GPG.

gpg2

Dans le formulaire, renseignez le nom sous lequel vous souhaitez apparaître et mettez l’adresse email associée. Une clé PGP peut avoir plusieurs adresses, cela peut se rajouter ultérieurement avec l’outil. Certains comme le générateur de Keybase permettent d’en saisir plusieurs d’affilé.

J’ai modifié la force à 4096 pour augmenter le niveau de chiffrement. Vous pouvez spécifier si vous le souhaitez une date de fin.

Sur l’écran suivant, il va vous demander une Passphrase. Ce mot de passe servira à déverrouiller la clé privé pour son utilisation courante, tâchez donc de bien la mémoriser.

Une fenêtre de progression apparaîtra vous invitant à faire des mouvements de souris ou tapoter au clavier. Cette étape sert à ajouter une part d’aléatoire à l’algorithme de génération.

Votre clé apparaîtra ensuite dans le gestionnaire.

En mode commande, la clé peut être vue ainsi : gpg --list-keys

pub   rsa4096 2021-01-24 [SC]
      FCC5DC373B4FCFDCC5EE9F74A06B189328EA6BE8
uid          [  ultime ] Seb Test GPG <seb+testgpg@zedas.fr>
sub   rsa4096 2021-01-24 [E]

Tester le chiffrement

Faisons un petit exemple d’utilisation. Ici j’ai créé une clé seb+testgpg@zedas.fr pour l’exemple. Je veux m’envoyer un fichier chiffré.

$ cat coucou.txt 
Hello,
ceci est un message chiffré !
Bisou

GPG utilisera l’adresse email spécifiée dans la clé publique comme destinataire. On peut aussi lui donner l’identifiant de la clé, mais c’est moins pratique. Vous pouvez spécifier autant de destinataires que vous le souhaitez, y compris vous-même si vous voulez déchiffrer le fichier.

Pour chiffrer coucou.txt, il suffit d’utiliser la commande suivante :

$ gpg -e --sign -r seb+testgpg@zedas.fr -o coucou.txt.gpg coucou.txt 
# -e pour passer en mode "encrypt"
# --sign = signer permet d'indiquer que la clé publique est de confiance
# la passphrase de la clé privée de l'émetteur sera alors demandée
# -r = destinataire
# -o = fichier de sortie
# puis le fichier à chiffrer

Si on affiche le fichier coucou.txt.gpg, c’est de la bouillie.

$ file coucou.txt.gpg 
coucou.txt.gpg: PGP RSA encrypted session key - keyid: DFE456AC 55D2CAAC RSA (Encrypt or Sign) 4096b .

$ cat coucou.txt.gpg 
 ��V�U�ʬ�4����
���<2X��8:���R��27��v�����(���)>G�xރ,+��(..........)

Si on veut déchiffrer le fichier, il suffit de lancer la commande suivante : gpg -d coucou.txt.gpg. Il retournera le contenu dans la sortie standard. Pour l’envoyer dans un fichier, il suffit de spécifier -o ou bien faire une redirection dedans > fichier.txt.

Au moment de déchiffrer, le passphrase de la clé privée du destinataire sera demandée.

$ gpg -d coucou.txt.gpg 
gpg: chiffré avec une clef RSA de 4096 bits, identifiant DFE456AC55D2CAAC, créée le 2021-01-24
      « Seb Test GPG <seb+testgpg@zedas.fr> »
Hello,
ceci est un message chiffré !
Bisou
gpg: Signature faite le dim. 24 janv. 2021 15:03:50 CET
gpg:                avec la clef RSA BCE31FF866963F1B141C90A04C47CF1D8592D50F
gpg: Bonne signature de « Seb <seb@zedas.fr> » [ultime]
gpg:                 alias « Seb <seb+blog@zedas.fr> » [ultime]

Importer la clé de votre destinataire

Chiffrer un fichier pour soit-même c’est bien gentil, mais le but est de communiquer avec d’autres personnes. Pour pouvoir envoyer un email chiffré à une tierce personne, il est nécessaire que celle-ci vous fournisse sa clé publique.

Il existe des annuaires publics où des personnes référencent leur clé. Il y a par exemple celui de Symantec mais aussi celui d’Ubuntu ou encore du MIT. Les Keyservers causent entre eux et leurs bases de données se propagent. Ils permettent aussi de publier un certificat de révocation dans le cas où la clé doit être supprimée. Sinon, la personne avec qui vous souhaitez échanger peut vous la fournir directement sous format ASCII. Vous pouvez retrouver la mienne dans la section Contact de ce site par exemple. GPG peut s’interfacer avec les keyservers pour obtenir le nécessaire.

Pour importer la clé d’une personne, vous pouvez le faire en ligne de commandes ou via Seahorse. Admettons que votre interlocuteur vous a fourni sa clé publique en fichier texte.

Pour importer la clé :

gpg --import fichier_de_cle

Ensuite, si vous avez la certitude que la clé de votre destinataire est bien la sienne, vous pouvez la signer.

gpg --sign-key destinataire@adresse.com

Ceci demandera la passphrase de votre clé privée. En signant sa clé publique, vous attestez de votre confiance envers celle-ci.

En retour, vous pouvez envoyer ce gage de confiance à votre interlocuteur qui pourra l’importer à sa propre clé publique pour établir une preuve sociale de confiance. Ceci vous demandera une nouvelle fois votre passphrase.

gpg --output ~/cle_signee.key --export --armor destinaire@adresse.com

En envoyant cle_signee.key à votre destinataire, il pourra l’importer pour amender sa propre clé avec votre approbation de confiance.

Je pense que nous avons fait le tour des grandes lignes pour GPG. Si vous souhaitez approfondir le sujet, vous pouvez notamment regarder du côté du certificat de révocation qui est un élément important de la chaîne. Je n’ai pas souhaité l’aborder ici pour éviter d’alourdir l’article.

Paramétrer Evolution avec PGP

Evolution est le client de mail/agenda/contacts du projet GNOME, il est globalement similaire à Microsoft Outlook. Si je cite celui-ci, c’est d’un parce que je l’utilise, de deux il possède nativement le support openPGP et GnuPG. Je ne sais pas si Mozilla Thunderbird le supporte nativement aussi, il me semble qu’il fallait un plugin à un moment. Je vous invite à consulter sa documentation si cet outil a votre préférence.

Pour activer le support du chiffrement, il suffit d’ouvrir les Préférences (menu Edition), et éditer votre compte de messagerie. Dedans, allez dans la section “Sécurité”.

gpg3

Il vous suffit de renseigner votre adresse email (celle rattachée à la clé privée) dans le champ “ID de la clé OpenPGP” et voilà ! Dans l’exemple ci dessus, il s’agit de la clé que j’ai créé plus haut.

Gardez cochée l’option de chiffrement des mails envoyés, cela permettra de ne pas conserver votre boite d’envoi en clair sur le serveur.

Envoyer un mail chiffré

Créez un nouveau mail dans Evolution et rédigez votre contenu. De préférence, rédigez le message en texte simple et non en HTML. Pour le test, vous pouvez l’envoyer à vous-même. Dans mon cas je l’ai envoyé à l’adresse créée précédemment qui possède une clé différente.

Deux options s’offrent à vous ensuite dans le menu “Options” de la fenêtre de rédaction : Chiffrer avec PGP et Signer avec PGP. Cochez-les toutes les deux, la passphrase sera alors demandée, puisez envoyez le mail. Durant la séquence d’envoi, vous devriez voir “Chiffrement du message” apparaître.

Et voilà !

gpg4

Etant paramétrée dans Evolution via l’identifiant indiqué précédemment, ma clé privée GPG a été utilisée pour déchiffrer le message (la passphrase est réclamée à l’ouverture, sauf si vous avez demandé la sauvegarde dans le gestionnaire).

Si je vais voir sur le webmail de mon hébergeur, il ne peut rien lire et propose le mail en pièce jointe.

gpg5

Ma correspondance est désormais confidentielle !

Conclusion

Comme vous pouvez le constater, chiffrer ses emails est relativement simple mais nécessite une étape de préparation assez lourde. Hélas, ce moyen n’est clairement pas à la portée de tous et restera employé par quelques geeks et connaisseurs signifiant que l’utilisateur moyen devra garder en tête que l’email est aujourd’hui un moyen de communication déconseillé pour la confidentialité. Bien que les annuaires de clés PGP soient disponibles en ligne, cela reste pour les initiés et le grand public se tournera plutôt vers des solutions clés en main plus simplistes.

L’email est un des services Internet les plus anciens du réseau, et nous ne comptons plus les annonces dans le secteur qui promettent de révolutionner l’email considéré comme “obsolète” par certains… Mais obsolète en quoi ?

Obsolète parce qu’il est interopérable et ouvert évidemment !

Il s’agit là d’un des rares protocoles de communication à ne pas avoir été enfermé dans tout un écosystème propriétaire non interopérable par un géant du Web. On peut utiliser un client tiers pour Gmail, même si Google fait tout pour dissuader et limiter ces usages (bah oui, utiliser les applications et webapp de tracking c’est plus intéressant pour eux), cela reste possible. L’email permet encore d’envoyer un message à une personne qui a sa boite hébergée par Machin sans avoir besoin d’être soit-même inscrit chez Machin (et prostitué par Machin, accessoirement). Quand on prend du recul sur les usages d’Internet, c’est devenu vraiment marginal de voir encore une solution décentralisée utilisée aussi massivement !!

L’email a bien besoin d’une refonte technique, mais il est important de garder en tête que l’hyper centralisation des services Internet dans les mains d’une poignée d’acteurs n’est pas bon pour nous. Donc ne laissons pas ces grandes entreprises continuer de détruire l’espace de liberté qu’est Internet. Privilégiez autant que possible les solutions décentralisées et chiffrées, et remettez toujours en question un formulaire d’inscription qui commence à être un peu trop curieux sur vous.


📑 Table of Contents

📚 Read my latest book

Follow me on Mastodon

🏷️ All Tags 📄 All Posts 🗺 Sitemap RSS Feed