Authentifiez, chiffrez vos mails

Par nature, le courrier électronique n'est pas un modèle de confidentialité. Si tout un chacun peut lire le contenu de vos échanges épistolaires, il peut s'avérer encore plus grave qu'une tierce personne se fasse passer pour vous. Et c'est pourtant chose très facile. C'est là que la cryptographie vient à notre secours.

Note : article publié dans Linux Pratique n°26 en novembre 2004. Il est librement diffusable selon les termes de la licence Creative Common By-NC-ND.

Authentique mon mail ?

Le protocole SMTP, qui régit l'envoi de courrier électronique, ne prévoit aucune mesure d'authentification : très basique, il ne requiert qu'une adresse de destinataire et un sujet pour envoyer un e-mail.

Pas convaincu ? Faisons tout de suite un petit test... Par exemple, avec Mozilla Mail. Reparamétrez votre compte e-mail (« Édition → Paramètres des comptes courrier et forums... » et sélectionnez le compte cobaye ; pas de panique, c'est sans danger) en changeant tout simplement le champ « Identité » (figure 1). Ensuite, envoyez un e-mail à un ami ou encore à vous-même pour vous convaincre du résultat. Dans KMail, la manipulation est encore plus facile : depuis la fenêtre de composition d'un nouveau courrier, vous pouvez éditer directement l'adresse de l'expéditeur.

Un e-mail falsifié
Un e-mail falsifié

Dans ces conditions, comment faire confiance à une missive électronique provenant de Brad Pitt ? Ou de votre patron vous informant que vous allez être augmenté/diminué ? Cela contribue beaucoup au fait que l'e-mail n'a aucune reconnaissance juridique...

Cependant, n'essayer pas de faire des canulars avec cette méthode : même si l'adresse d'expéditeur ne montre pas votre origine, d'autres éléments de l'en-tête de l'e-mail ne manqueront pas de vous trahir. Jetez un coup d'½il sur ce dernier : dans Mozilla, il suffit de sélectionner un message et d'afficher son source (« Affichage → Code source du message »).

Évitez les infos sensibles

Une lettre postale sous enveloppe simple offre bien plus de sécurité pour son contenu qu'un courrier électronique. En fait, on peut le comparer à une carte postale. Iriez-vous inscrire le code secret de votre carte bleue sur une carte postale ? Alors ne le faites pas avec un e-mail !

Comment cela est-il possible ? Auriez-vous été trompé(e) par un vendeur empressé ou incompétent désireux de vous refourguer un abonnement à Internet ? Là encore, le protocole SMTP est très simpliste et date d'une époque où l'infiltration informatique n'existait pas. Envoyer un e-mail consiste à créer un fichier texte, et à faire transiter ce fichier sur le réseau jusqu'au destinataire. Si vous copiez le contenu d'un e-mail dans un fichier, vous pouvez le lire avec n'importe quel éditeur de texte. Le réseau sur lequel circule votre e-mail est constitué d'autres ordinateurs. Sur chacun peut se trouver une personne un peu trop curieuse vis-à-vis de votre prose et lire votre fichier au moment où il passe (par simple « écoute du réseau »). Pire que cela, cette personne peut le modifier sans que vous ou votre destinataire n'en soyez informé.

Pour vous faire une idée du risque potentiel lié au nombre de n½uds traversé par votre e-mail, exécutez la commande suivante (par exemple, si votre destinataire possède une adresse sur yahoo.com) :

$ traceroute www.yahoo.fr 
traceroute to www.euro.yahoo.akadns.net 
(216.109.118.60), 30 hops max, 
38 byte packets
 1  AVelizy-103-1-5-1.w80-13.abo.wana...
 2  GE4-458.ncidf103.Puteaux.francete...
 3  pos6-0.nraub103.Aubervilliers.fra...
 4  pos13-3.ntaub201.Aubervilliers.fr...
 5  193.251.126.154 (193.251.126.154)...
 6  P14-0.OAKCR1.Oakhill.opentransit....
 7  P3-0.OAKCR2.Oakhill.opentransit.n...
 8  So6-0-0.ASHBB2.Ashburn.opentransi...
 9  Yahoo2.GW.opentransit.net (193.25...
10  vlan201-msr1.dcn.yahoo.com (216.1...
11  vl30.bas1-m.dcn.yahoo.com (216.10...
12  alteon4.124.dcn.yahoo.com (216.10...

Ici, nous avons douze chances de se faire intercepter et modifier. Si vous avez des informations sensibles à transmettre, absolument par e-mail, vous êtes chaudement invité à recourir à la cryptographie.

Notre cher gouvernement, qui ne veut que notre bien, vient de voter une loi retirant tout caractère privé au courrier électronique. Alors que la confidentialité du courrier postal est protégée, les contenus électroniques, non reconnus comme étant de la correspondance. Face aux inquiétudes de violations de la vie privée que cela pourrait entraîner, le très compétant Jean Dionis du Séjour, rapporteur du texte de la LEN à l'Assemblée nationale, a déclaré que tout cela n'était que « fantasmes ».

Il est évident que le cryptage de votre correspondance électronique vous accorde ce caractère privé volé par le gouvernement, mais cela ne constitue pas une solution à terme. Seule la disparition de cette loi liberticide en est une.

Le principe des clés asymétriques

La méthode de chiffrement utilisée pour l'authentification de courrier électronique repose sur l'emploi de clés asymétriques.

Rappelons tout de même le principe, très simple, du cryptage symétrique : on se sert d'une clé (un mot de passe dont la complexité et la longueur font la résistance au cassage) pour chiffrer un message et le destinataire doit disposer de la même clé pour le décrypter puis le lire. Un problème apparaît tout de suite : comment transmettre la clé à son destinataire ?

Par e-mail ? Comme nous l'avons indiqué précédemment, l'e-mail n'est pas sûr du tout. Donc, votre clé de chiffrement peut très facilement être interceptée sans que vous vous en doutiez.

En la transmettant physiquement à votre destinataire sur une disquette ou une clé USB ? Effectivement, le risque d'interception est limité (mais pas nul), mais, plusieurs problèmes se dessinent. Si le destinataire se trouve à l'autre bout du monde, une rencontre peut s'avérer difficile. Est-ce que l'ordinateur de votre interlocuteur est fiable (forcément, il va y copier votre clé secrète) ? Il n'est pas à l'abri d'une effraction. Ou même, vous n'êtes pas certains des précautions qu'il prendra avec votre clé (d'autres personnes utilisant le même ordinateur pourraient y avoir accès). Mieux vaudrait que vous soyez le seul à posséder cette clé. Mais alors, personne ne pourrait déchiffrer vos messages !

C'est là qu'intervient le concept des clés asymétriques. Vous ne disposez plus d'une mais de deux clés, une privée que vous êtes seul à conserver et l'autre publique que vous donnez à la terre entière. S'il est mathématiquement possible de déduire la clé privée à partir de la clé publique, la durée d'une telle opération se mesure à l'échelle géologique. Donc, pas de soucis.

Chiffrement d'un message

Voyons les deux cas de figure traités dans cet article en commençant par le chiffrement d'un message à destination d'une personne en particulier. L'expéditeur utilise la clé publique de son destinataire pour chiffrer le message qui sera alors le seul à pouvoir le décrypter avec sa propre clé privée. En effet, un message chiffré avec une clé ne peut être déchiffré qu'avec sa clé jumelle. En revanche, une clé utilisée pour chiffrer ne permet pas de déchiffrer ; c'est d'ailleurs là toute la force de cette méthode de chiffrement.

Sur la figure 2 vous pouvez observer le processus. Tout d'abord, la personne désirant recevoir des messages chiffrés doit communiquer sa clé publique (étape 1). À l'étape 2 l'expéditeur utilise la clé publique de la personne à qui il souhaite envoyer un message pour chiffrer ce même message. À ce moment-là, seul le destinataire détenteur de la clé privée correspondante pourra lire le message (étape 3) ; même l'expéditeur ne le peut pas !

Processus de chiffrement asymétrique
Processus de chiffrement asymétrique

Signature électronique

Ce cas-ci est opposé au précédent : c'est l'expéditeur qui doit donner sa clé publique à ses destinataires potentiels. Voyons la figure 3 pour mettre les idées au clair. Après avoir diffusé sa clé publique (étape 1) l'expéditeur commence par créer un condensé du message qu'il veut signer (étape 2). Le condensé est un résumé des informations originales. On l'appelle également somme de contrôle. Ce sont par exemple, les fameux fichiers MD5 accompagnant généralement de gros fichiers à télécharger (images ISO) : une fois le fichier téléchargé on calcule la somme de contrôle de ce dernier et l'on vérifie qu'il s'agit bien de la même que celle proposée avec le fichier. S'il a différence, cela atteste d'un problème lors du transfert. Dans notre c'est le même principe : l'on calcule une somme de contrôle de notre message. Statistiquement il y a infiniment peu de chance qu'une même somme désigne deux messages différents.

Notre but étant seulement de produire un message authentifiable il ne sera donc pas crypté (afin que tous puissent le lire). C'est le condensé qui est donc chiffré (étape 3) et accolé à la fin du message. Le message est sa somme de contrôle chiffrée (que l'on nomme tout simplement « signature ») peuvent donc être envoyés.

Le destinataire désireux de s'assurer de l'authenticité du message fraîchement reçu commence par séparer le message de sa signature. À partir du message il crée un condensé (étape 4). Possesseur de la clé publique de l'expéditeur il utilise ensuite cette dernière pour déchiffrer la signature (étape 5). Il ne reste alors plus qu'à comparer que les deux sommes de contrôle produites soient parfaitement identiques.

Dans la négative cela signifierait simplement que soit le message a été modifié lors du transfert (du coup la somme de contrôle produite par le destinataire est forcément différente), soit que l'expéditeur n'est pas le propriétaire de la clé privée correspondant à la clé publique (il y a donc usurpation d'identité).

Processus de signature électronique
Processus de signature électronique

GnuPG, la base de tout

GnuPG est une implémentation d'un système utilisant des clés asymétriques pour authentifier ou chiffrer un texte. Il s'agit d'un logiciel libre. Il repose sur la norme OpenPGP. Avant GnuPG existait un logiciel propriétaire nommé PGP (pretty good privacy) développé par Philip R. Zimmermann. Ce dernier a depuis rejoint le groupe de travail autour d'OpenPGP et appelle à l'usage des logiciels libres.

Aujourd'hui, les interfaces graphiques permettant le chiffrement des données reposent sur GnuPG. Ce dernier étant un logiciel en ligne de commande, il est aisé d'en réaliser des surcouches graphiques.

Enigmail, la pratique avec Mozilla

Installation

Note : avec Thunderbird l'installation d'extensions est grandement simplifiée : chacun peut installer ce qu'il veut sans avoir les droits d'administration. Bien sûr, les extensions ainsi installées ne le seront pas pour tous les utilisateurs de l'ordinateur.

Deux possibilités : soit Enigmail est packagé pour votre distribution, alors vous savez comment le trouver et l'installer. Soit il ne l'est pas ou vous avez installé Mozilla depuis le kit fourni sur le site www.mozilla.org, alors vous devez installer Enigmail par les paquets XPI que vous trouverez sur le CDROM ou, probablement en plus fraîche version, sur le site d'Enigmail.

Pour installer un plugin pour Mozilla vous devez avoir les mêmes droits que l'utilisateur ayant installé Mozilla : si c'était en tant que root pour en faire préférer tous les utilisateurs, alors il ne vous reste plus qu'à exécuter Mozilla en tant que root.

Note : Exécuter Mozilla en tant que root

Évidemment vous ne devez absolument pas démarrer votre environnement graphique en tant que root ! C'est techniquement possible mais au combien dangereux. Vous pourriez utiliser sudo. Pour cela reportez-vous à l'article « Être ou ne pas être root » dans Linux Pratique 15.

Vous pouvez aussi simplement, dans un élan de générosité, accorder à root le droit d'exécuter des applications graphiques dans votre environnement. Pour cela tapez cette commande dans une console :

$ xhost +local:root

Ainsi, vous autorisez « root » à utiliser votre « X », uniquement en local, c'est-à-dire que root ne pourra lancer d'application en étant connecté depuis un autre ordinateur. En tant que root vous devrez alors signifier au Shell que l'affichage doit se faire en local ainsi :

# export DISPLAY=:0.0

Ensuite il ne reste plus qu'à lancer Mozilla en tapant simplement mozilla au prompt.

Fin de note

Ouvrez donc Mozilla et parcourez soit le CDROM, soit le site Web d'Enigmail à la section « Download ». Cliquez sur enigmail-0.83.6.xpi (le numéro de version peut varier). Une fenêtre s'ouvre et vous propose l'installation (figures 4 et 5. Faîtes de même pour enigmime-0.83.2-linux.xpi et enigmail-fr-FR-0.8x.xpi (depuis le site Web, vous devez passer par le lien « Language packs »).

Installation du fichier XPI
Installation du fichier XPI Installation du fichier XPI

Pour que les nouveaux plugins soient pris en compte vous devez redémarrer Mozilla.

Configurez Enigmail

Réouvrez Mozilla et plus particulièrement le module de courrier. Un nouveau menu « Enigmail » s'est glissé entre « Messages » et « Outils ». La première étape sera de générer une paire de clés. Cliquez donc sur « Enigmail → Générer une clef ». S'ouvre alors la fenêtre de la figure 6. Vous devez alors saisir, à deux reprises histoire d'éviter une faute de frappe malencontreuse, une phrase secrète ou mot de passe afin de protéger votre paire de clés. Cliquez ensuite sur « Générer la clef ». Enigmail vous confirme que votre paire a été créée.

Génération d'une paire de clés
Génération d'une paire de clés

Nous pouvons maintenant passer à l'utilisation de ces clés. Vous pouvez paramétrer Enigmail de manière générale en passant par le menu « Enigmail → Préférences » (depuis Mozilla Mail) ou « Édition → Préférences → Confidentialité et Sécurité → Enigmail » (depuis tout module de Mozilla). C'est là que vous informez Enigmail de l'outil qu'il doit utiliser (rappelons qu'Enigmail n'est qu'une surcouche à GnuPG), la liste des serveurs de clés publiques (figure 7). Vous pouvez également définir des règles de comportement à adopter suivant telle ou telle adresse de destinataire (figure 8).

Configuration d'Enigmail - Général
Configuration d'Enigmail - Général Configuration d'Enigmail - Règles spécifiques
Configuration d'Enigmail - Règles spécifiques

Si vous avez plusieurs adresses e-mail, vous pouvez configurer un comportement différent par adresse en passant par le menu « Édition → Paramètres des comptes courriers et forums ». Pour chaque compte a été rajoutée la nouvelle entrée « Sécurité OpenPGP » (figure 9). C'est également là que vous pouvez déterminer si vous souhaitez signer/chiffrer vos e-mails par défaut.

Configuration par compte
Configuration par compte

Envoyer un e-mail signé et/ou chiffré

Pour envoyer un e-mail signé électroniquement, commencez par ouvrir le module de rédaction d'un nouveau courrier. Là encore, Enigmail a rajouté sa marque. Un nouveau bouton figure dans la barre de boutons sous la barre de menu. Maintenez le bouton gauche enfoncé sur ce bouton et apparaîtra le sous-menu visible sur la figure 10. Vous pouvez ainsi modifier, pour chaque courrier, le comportement par défaut défini dans les préférences.

Écrire un e-mail signé ou chiffré
Écrire un e-mail signé ou chiffré

Vous pouvez ainsi choisir de signer et/ou de chiffrer votre prose. Ces deux choix allument chacun un voyant en bas à droite de la fenêtre de composition de courrier (figure 11) Notez que ces voyants sont cliquables ; n'êtes donc pas obligés d'utiliser le menu précédemment cité. Une fois que vous avez rédigé votre courrier vous cliquez sur le bouton d'envoi. Enigmail vous demande alors les destinataires pour le chiffrement. C'est-à-dire, les clés publiques à utiliser pour crypter le message. Enfin, Enigmail vous demande votre phrase secrète afin de s'assurer que vous êtes bien celui que vous prétendez être et pas quelqu'un qui utiliserait un ordinateur allumé par quelqu'un d'autre (figure 12).

Cet e-mail sera signé et chiffré
Cet e-mail sera signé et chiffré Vérification de la phrase secrète
Vérification de la phrase secrète

Réception d'un e-mail signé et/ou chiffré

Par défaut Enigmail déchiffre et vérifie automatiquement les messages que vous recevez. Pour changer cet état de fait, il suffit de décocher l'option correspondante dans le menu « Enigmail ».

Lorsque vous recevez un e-mail signé, Enigmail vous informe, la première fois, que la signature n'a pas été vérifiée car la clé est inconnue (figure 13). On vous demande alors de cliquer sur le « stylo ». Une fenêtre vous informe alors qu'Enigmail va chercher la clé sur un serveur de clés (figure 14).

Signature non vérifiée
Signature non vérifiée Recherche de la clé publique
Recherche de la clé publique

Une fois cette opération effectuée, tout e-mail signé avec la même clé apparaîtra automatiquement avec la mention « NON CERTIFIÉE Signature correcte de ... » suivi du nom et de l'adresse de propriétaire déclaré (au niveau du serveur de clés, donc pas fiable à 100 %). Pour que le correspondant soit reconnu comme « personne de confiance » il faut que vous contresigniez sa clé publique. Pour cela il vous faudra utiliser un gestionnaire de trousseau car Enigmail ne remplit pas cette fonction. Et surtout, avant de contresigner une clé, il faudra vous assurer de l'authenticité de son propriétaire. Voyons cela en détail dans la partie suivante.

Lorsque l'expéditeur est clairement authentifié, Enigmail affiche un message similaire à celui de la figure 15.

Expéditeur authentifié
//// fig15-reception-sig-chif.png

Gérez votre trousseau

Il est bien sûr possible d'utiliser GnuPG en ligne de commande : il offre toutes les possibilités de bien gérer son trousseau de clés publiques. Cependant, je pressens que vous préféreriez une interface graphique où il suffit simplement de cliquer pour accéder au bonheur. Voici donc KGPG, un outil pour KDE (pour Gnome il existe aussi « No One Fears GPG »).

Authentification d'une clé

Une fois que KGPG est configuré (on vous pose deux ou trois questions qu'il suffit généralement de valider) et lancé, rafraîchissez la liste des clés collectées (« Affichage → Rafraîchir la liste ». Toutes les clés collectées ou entrées à la main avec GnuPG ou KGPG, doivent apparaître. La troisième colonne indique si l'on a confiance en la clé.

Si vous estimez avoir confiance en une clé comme étant bien celle appartenant au propriétaire supposé, alors cliquez du bouton droit sur le rectangle blanc et choisissez « Signer une clé ». On vous averti alors que vous devez vérifier minutieusement l'empreinte (ou fingerprint) que vous a transmis votre correspondant. Le cas échéant, on vous invite à le vérifier par téléphone ou directement avec la personne concernée (figure 16).

Contresignez une clé publique
Contresignez une clé publique

Comme OpenPGP se veut un protocole très sécurisé et très fiable, GnuPG insiste sur le fait que vous ayez vérifié une clé avant de la contresigner. On vous demande alors avec quel niveau de sérieux vous avez fait la chose. Puis, une console texte s'ouvre et vous montre les coulisses de GnuPG (qui risque de vous redemander le niveau de sérieux). Une clé peut correspondre à plusieurs adresses e-mail, donc, vous devez spécifier lesquelles vous signez. Puis, pour valider l'opération, GnuPG vous demande votre mot de passe.

Avec GnuPG directement il vous suffit de taper cette commande et de vous laisser guider (les questions sont les mêmes que dans KGPG) :

$ gpg --sign-key identifiant

De la validité d'une keysigning party

L'on a coutume de générer une empreinte de notre clé publique. Cela se fait en sélectionnant votre propre clé dans la liste et en choisissant « Clic droit → Modifier » ou plus rapidement en appuyant sur [Entrée]. Une nouvelle boîte s'ouvre et tout en bas se trouve l'empreinte. Notez que les huit derniers chiffres (c'est de l'hexadécimal, ce qui explique la présence des lettres A, B, C, D, E et F) correspondent à la clé publique. Comme exemple vous pouvez voir mon empreinte en fin d'article avec la signature.

Cette empreinte s'échange donc au cours de ce que l'on appelle une « keysigning party ». Ce genre de rencontre suit un rituel bien ficelé : deux personnes s'échangent leur empreinte et se montre leurs papiers d'identité afin d'authentifier.

Le souci c'est que cela n'authentifie rien du tout. Plusieurs problèmes apparaissent : les papiers peuvent être faux, le nom sous lequel la clé est enregistrée peut être un pseudonyme (l'emploi des pseudonymes est très courant chez les informaticiens) et au final, cela n'apporte pas grand chose de savoir que « Tartempion » a écrit tel logiciel ou telle documentation. En revanche il m'importe plus de savoir que c'est bien la même personne qui publie une nouvelle version d'un texte sous le même nom, et non un usurpateur.

En résumé, une clé révèle son utilité lorsqu'elle est associée à une publication, un fait, une action, et non spécifiquement à une personne dont le nom importe peu. Guillaume Rousse a publié une réflexion détaillée et très intéressante à ce sujet dans Linux Magazine France 58, dans un article intitulé « Tes papiers ! ». Je vous invite à la lire.

Diffusez votre clé publique

Ce n'est pas le tout de se créer une paire de clé. Mais il faudrait songer à la transmettre à vos correspondants. Deux modes de diffusion vous sont proposés : soit par e-mail en pièce attachée pour des destinataires identifiés, ou en l'envoyant sur un serveur de clés afin qu'elle soit disponible pour la terre entière (enfin, pour ceux ayant une connexion à Internet...).

Dans les deux cas vous devrez commencer par sélectionner votre clé et choisir dans le menu du clic droit « Exporter la clé publique ». Pour un envoi par e-mail choisissez soit « adresse électronique » et votre client mail par défaut s'ouvrira automatiquement avec la clé dans le corps de l'e-mail. Une autre possibilité est de l'exporter dans un fichier portant traditionnellement l'extension .asc (figure 17). Vous pourrez ensuite joindre ce fichier à un e-mail ou le mettre en téléchargement sur votre site.

Export de clé publique
Export de clé publique

Pour informer les serveurs de clés de la création de votre paire de clé, choisissez plutôt « Serveur de clefs par défaut » (figure 18). Ce dernier se chargera ensuite de renseigner les autres serveurs de clés.

Envoi de la clé publique sur un serveur dédié
Envoi de la clé publique sur un serveur dédié

Ajouter une adresse e-mail à votre clé

Enfin, dernier point et puis on arrête (ou sinon vous aller finir par croire que signer ses e-mails est compliqué) : vous disposez de plusieurs adresses e-mails. Inutile de créer une paire de clé par adresse, il suffit de toutes les grouper sous la même paire.

Utilisons toujours KGPG. Sélectionnez votre clé et cliquez à droite. Choisissez « Ajouter l'identifiant de l'utilisateur ». Vous devez alors remplir le nom et l'adresse e-mail obligatoirement (le commentaire est facultatif). Comme pour toute opération d'écriture d'information dans vos données GnuPG vous demande votre mot de passe. Une fois cette formalité passée un nouveau couple identifiant-adresse a été ajouté à votre paire de clé. Vous pouvez ainsi utiliser les différentes adresses avec la même signature numérique.

Dimitri Robert :: 09CF D59D B491 1876 2364 A046 23FD 1463 0C1B DCF7

Liens