À la demande de mes petits (étudiants), un tutoriel résumant le principe général de l’encryptage asymétrique avec GnuPG (fichiers et emails). Le tuto est principalement écrit pour OS Linux mais les utilisateurs de Windows, ou plus encore, de Mac OS X devraient pouvoir y trouver des informations utiles.

Gnu Privacy Guard (GnuPG) est un utilitaire libre permettant l’encryptage et le décryptage de données. Il est basé sur un principe asymétrique qui repose sur une paire de clés :

  • une clé publique permet l’encryptage des données ;
  • une clé privée, associée à la clé publique, permet le décryptage.

Ce principe permet d’utiliser la méthode pour l’échange d’emails cryptés : le destinataire publie sa clé publique qui est utilisée par ses correspondants pour encrypter les emails. Le destinataire seul, à l’aide de sa clé privée, peut alors les décrypter.

Le tutoriel ci-dessous décrit comment générer une paire de clés, la manipuler et se servir des clés pour encrypter et décrypter des données. Il est conçu pour les utilisateurs de Linux mais les utilisateurs des OS Unix-like (type Mac OS X) devraient pouvoir en utiliser la majorité et les principes généraux sont applicables à Windows (pour plus de détails sur la manière d’utiliser GnuPG sous Windows, nous renvoyons à Gpg4Win). Dans le tutoriel, les parties pouvant être utilisées sous Mac OS X et Windows sont respectivement indiquées par [MAC] et [Win].

Générer une paire de clés

GnuPG doit être installé sur le système. Sous Ubuntu, il est installé de base (présent dans le paquet gnupg). [MAC] Une paire de clés (publique et privée) peut alors être générée par la commande suivante :

gpg --gen-key

Vous pouvez choisir une clé DSA and ElGamal, de 1024 bits au moins (2048 pour plus de sécurité). Choisissez alors dans combien de temps votre clef expirera (si vous entrez “0”, la clé n’expirera jamais, ce qui est plus simple mais en diminue la sécurité).
Ensuite, l’identifiant de la clé sera créé ; pour cela, donnez vos prénom et nom puis votre adresse de courriel. Enfin, un mot de passe vous sera demandé : choisissez un mot de passe relativement long et sécurisé (au moins 8 caractères, des majuscules, des minuscules, des caractères spéciaux et CONSERVEZ LE PRÉCIEUSEMENT) : c’est lui seul qui vous permettra de récupérer vos données cryptées. En cas de perte de la clé privée ou du mot de passe, le décryptage devient absolument impossible.

Une fois cette opération effectuée, on peut vérifier que la clé a bien été générée en listant les clés disponibles par :

gpg --list-keys

qui doit répondre quelque chose ressemblant à :

pub   1024D/3726611E 2008-09-05
uid                  Nathalie Villa-Vialaneix
sub   2048g/29F53AD2 2008-09-05

Pour exporter sa clé publique afin de la publier pour que d’autres personnes puissent l’utiliser pour crypter les emails qu’ils vous envoient (par exemple), utiliser la commande :

gpg –armor –export 372661E > ma-cle-publique.pub
où “372661E” correspond à l’identifiant de la clé, qui apparaît dans la liste à la première ligne.
[/MAC]

Manipuler ses clés


[MAC] Dans cette partie, nous allons voir comment importer une clé publique, ajouter des identités à une paire de clés et signer une clé publique pour certifier l’identité de son possesseur.

Lorsqu’une des personnes avec qui vous voulez communiquer un document crypté vous envoie sa clé publique ou que vous la récupérez sur un site web (comme ici pour ma clé personnelle), vous l’importer en sauvant la clé dans un fichier texte, par exemple une-cle-publique.pub et en l’important dans votre trousseau de clés par :

gpg --import une-cle-publique.pub

La commande pour lister les clés

gpg --list-keys

doit alors répondre

pub   1024D/3726611E 2008-09-05
uid                  Nathalie Villa-Vialaneix
sub   2048g/29F53AD2 2008-09-05

pub   1024D/69F1E288 2004-06-23
uid                  Fabrice Rossi
uid                  Fabrice Rossi
sub   2048g/A5F8CA43 2004-06-23

Dans l’exemple ci-dessous, j’ai importé la clé publique de Fabrice Rossi, qui a deux identités (deux adresses emails). Pour vérifier l’authenticité de sa clé, j’en extrait le “fingerprint” :

gpg --fingerpint 69F1E288

que je compare au fingerprint publié par le propriétaire (ici dans l’exemple).

Une fois l’authenticité de la clé et de son propriétaire établis avec certitude, vous pouvez signer la clé publique de votre interlocuteur pour la certifier avec votre propre identité (et la lui renvoyer pour qu’il la réimporte, mise à jour, dans son propre trousseau) :

gpg --sign-key 69F1E288

puis pour exporter la clé signée dans un fichier texte et la renvoyer à Fabrice Rossi :
gpg –armor –export 69F1E288 > cle-fab-sign.pub
Enfin, on peut ajouter à sa propre paire de clés des identités si on possède plusieurs adresses emails. Pour cela, il faut éditer la clé :

gpg --edit-key 3726611E

renvoie :

gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

La clé secrète est disponible.

pub  1024D/3726611E  créé: 2008-09-05  expire: jamais       utilisation: SC
                     confiance: ultime        validité: ultime
sub  2048g/29F53AD2  créé: 2008-09-05  expire: jamais       utilisation: E
[  ultime ] (1). Nathalie Villa-Vialaneix

On ajoute une identité en tapant adduid, on en enlève une en tapant deluid, on vérifie les signatures en tapant check (dans mon cas, cela renvoie, par exemple :

uid  Nathalie Villa-Vialaneix
sig!3        3726611E 2011-10-02  [auto-signature]
sig!         C44ECCEC 2012-02-07  Nicolas Edwards

). Enfin, on peut passer à l’édition de la clé privée par toggle (et revenir à la clé publique par la même commande).

[/MAC]

Crypter/décrypter un fichier

[MAC] La clé publique peut être utilisée pour crypter un fichier que vous décrypterez ensuite avec la clé privée. Pour crypter un fichier exemple.txt, taper

gpg --encrypt exemple.txt

L’identité du destinataire (qui doit avoir la clé privée correspondante) est alors rentrée, par exemple sous la forme d’une adresse email qui correspond à une des identités de la clé. Le fichier exemple.txt.gpg est généré qui est le fichier exemple.txt crypté avec la clé publique demandée. On peut alors (si on le souhaite) supprimer le fichier exemple.txt.

Pour décrypter un fichier qui a été encrypté avec notre propre clé publique, le fichier exemple2.gpg, par exemple, on tape :
gpg –decrypt exemple2.gpg > exemple2.txt
Le contenu décrypté de exemple2.gpg est inscrit dans exemple2.txt.

[/MAC]

Crypter/décrypter des emails

J’explique ici comment crypter/décrypter des emails avec notre paire de clés et les clés publiques de nos correspondants. Le principe est expliqué pour Thunderbird et donc applicable à [MAC] et [Win] ; d’autres approches sont possibles pour d’autres clients de messagerie (voir ici). Thunderbird dispose d’un pluggin, enigmail, permettant de gérer très simplement GnuPG. Sous Ubuntu, ce pluggin est disponible dans le package enigmail. Enigmail fonctionne très simplement en cryptant avec la clé dont l’identité est l’adresse email à laquelle le message est envoyé. En cas de doute, enigmail demande quelle clé utiliser. De manière similaire, lorsqu’un message arrive, enigmail demande le mot de passe d’accès à la clé privée pour le décrypter. Attention toutefois au bug décrit dans ce post, qui interfère avec l’agent GnuPG.
Mes étudiants sont autorisés à utiliser mon adresse email pour vérifier qu’ils arrivent à envoyer des emails cryptés correctement. Cela ne rapporte toutefois aucun point supplémentaire aux examens !