GnuPG
GnuPG (GNU Privacy Guard) est une implémentation libre du standard de chiffrement OpenPGP, qui fonctionne sur un système de clefs asymétriques.
Pour envoyer un message chiffré (quel que soit le protocole utilisé) à une personne, il vous faut à tous les deux un couple de clefs, composé d'une clef privée (que, comme son nom l'indique, chacun garde pour lui) et une clef publique (qui, comme son nom l'indique, est mise à disposition de tout un chacun). Le message que vous allez envoyer sera chiffré avec votre clef privée et la clef publique du destinataire. Pour le décrpyter, ce dernier utilisera sa clef privée et votre clef publique.
Générer un couple de clefs
Il me semble que le programme GnuPG est installé par défaut dans la plupart des distributions. Sous Debian le paquet s'appelle tout simplement gnupg.
aptitude install gnupg
En premier lieu, il faut donc générer un couple de clefs :
$ gpg --gen-key
Les choix par défaut conviennent très bien (validez simplement chaque étape par <Entrée>). Si vous êtes à un degré de paranoïa plus élevé que la moyenne, vous pouvez éventuellement augmenter la longueur de la clef ELG-E (deuxième question), ce qui sera plus sécurisé mais augmentera légèrement les temps de chiffrement/déchiffrement. Vous pouvez aussi fixer une durée de validité de la clef (troisième question), mais cela est inutile si vous générez et mettez en sûreté un certificat de révocation, que vous utiliserez si la clef venait à être corrompue. Dites ensuite que c'est correct en tapant 'o', puis renseignez les champs :
- Nom réel : mettez votre nom ou pseudonyme.
- Adresse e-mail : mettez l'adresse pour laquelle vous désirez chiffrer les messages. Si vous ne destinez pas cette clef à du chiffrement de courriels (et même si c'est le cas), une adresse bidon ou un JID (Jabber ID, pour les incultes) doit fonctionner.
- Commentaire : mettez ce que vous voulez, comme une phrase caractéristique qui permettra de reconnaître votre clef. Exemple : « Oui, c'est bien moi. » si votre pseudo est du genre « Dark Lord » ou « Sangoku », permettra de trouver facilement votre clef parmis les 4569 « Dark Lord » ou « Sangoku » référencés sur le serveur de clefs. Mais je m'égare...
Validez ensuite en tapant 'o'.
On vous demande alors d'« entrer la phrase de passe ». Pas de panique, ne vous cassez pas la tête pour trouver une phrase, c'est simplement d'un mot de passe qu'il s'agit. Et vous aurez à le taper par la suite, donc s'il fait un peu moins de 50 caractères c'est mieux. D'ailleurs on vous demande de la taper une deuxième fois immédiatement.
Voici à présent une étape fort sympathique qui va vous permettre de vous muscler les bras. Voici le message qui apparaît :
Un grand nombre d'octets aléatoires doit être généré. Vous devriez faire autre-chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers; cela donne au générateur de nombres aléatoires une meilleure chance d'avoir assez d'entropie.
Obéissez donc, bougez la souris dans tous les sens, lancez des programmes, tapez comme une brute sur votre clavier, etc. Plus vous y mettrez du votre et plus la génération de la clef sera rapide (il est prouvé que le degré de pression appliqué sur les touches du clavier est un facteur direct de la vitesse d'exécution de ce processus). ls -R / fonctionne assez bien aussi.
Un message apparaît, ressemblant à :
gpg: clé XXXXXXXX marquée comme ayant une confiance ultime. les clés publique et secrète ont été créées et signées.
où XXXXXXXX est une chaîne de huit caractères (chiffres et lettres). Il s'agit des huit derniers caractères de l'empreinte (ou fingerprint dans la langue de Cheik Spir) de la clef publique, qui forment son identifiant. Notez cet identifiant, nous en aurons besoin dans l'étape suivante. C'est en outre lui qui vous permettra d'effectuer toutes les actions possibles sur la clef.
Pour retrouver l'identifiant d'une clef, exécutez :
$ gpg --list-keys
ou, pour afficher également les empreintes des clefs :
$ gpg --fingerprint
Localisez la clef qui vous intéresse dans la liste. Au début de la première ligne lui correspondant (celle qui commence par "pub"), on a la longueur et le type de la clef (normalement 1024D), suivi d'une barre oblique puis de l'identifiant de la clef, ce qui donne quelque chose du genre :
pub 1024D/XXXXXXXX 2006-02-15 [expire: 2006-02-16]
Mettre à disposition sa clef publique
Il faut à présent que nos contacts puissent obtenir facilement notre clef publique. Vous pouvez tout simplement placer le fichier généré sur votre site, ou même l'envoyer aux personnes vous le demandant, mais la meilleure solution consiste à l'envoyer sur un serveur de clefs.
Exporter la clef
Si l'on veut simplement envoyer la clef au cas par cas, ou la mettre sur un site quelconque, il faut l'exporter dans un fichier :
$ gpg --export -a -o ma_clef.asc id_clef
où ma_clef.asc est le fichier où sera enregistrée votre clef publique, et id_clef l'identifiant de ladite clef publique.
Utiliser un serveur de clefs
Deux solutions s'offrent à nous pour mettre une clef sur un serveur de clefs.
Méthode HTTP
Une solution simple est de passer par l'interface web du serveur de clés, si elle existe. Par exemple depuis la page d'accueil de subkeys.pgp.net ou keyserver.net, cliquez sur "envoyer votre clef"i ("submit your key"), puis entrez simplement le chemin du fichier ma_clef.asc que vous venez de générer (ou copiez-collez son contenu, selon les serveurs) et envoyez (bouton "submit").
C'est facile, mais c'est tellement simple que ça vallait à peine le coup d'en parler !
Méthode gpg pur
Voyons maintenant la méthode "autonome", utilisant à 100% notre chère commande gpg.
Votre fichier ~/.gnupg/gpg.conf contient (à la ligne 112 chez moi, mais bon...) une liste de serveurs. Ce sont des lignes de la forme :
keyserver hkp://subkeys.pgp.net
Au départ il ne contient même que cette ligne-là. Libre à vous d'en ajouter. A noter que c'est le dernier serveur déclaré qui est utilisé par défaut.
La commande qui va envoyer votre clef sur le serveur est, si vous voulez utiliser le serveur par défaut de votre gpg.conf :
gpg --send-key id_clef
ou si vous voulez spécifier un serveur :
gpg --send-key --keyserver serveur id_clef
où serveur est l'adresse du serveur, de la forme protocole://nom_DNS (comme dans gpg.conf).
Importer et signer une clef
Maintenant que nous disposons d'un couple de clefs, et que nous avons mis à disposition notre clef publique, on va récupérer les clefs publiques des gens à qui l'on souhaite pouvoir envoyer des messages chiffrés (ou simplement signés).
Importer la clef
La première chose à faire est de télécharger et d'importer la clef.
Méthode "fichier"
On peut vous envoyer, ou vous inviter à télécharger un fichier contenant la clef publique à importer.
Une fois que l'on dispose de ce fichier, on place la clef publique dans notre trousseau par la commande :
$ gpg --import id_clef.asc
où id_clef.asc est le fichier en question.
Méthode gpg pur
On peut aussi simplement vous indiquer un serveur de clefs (on trouve souvent ce type de messages dans les signatures : « Ma clef publique se trouve sur http://keyserver.net »). Il y a deux cas : soit on vous donne l'identifiant de la clef (ou l'empreinte complète), soit vous disposez seulement de l'adresse ou du nom associés.
Dans le premier cas, tapez :
gpg --recv-key id_clef
si le serveur où la clef se trouve figure dans votre ~/.gnupg/gpg.conf, ou, si elle ne s'y trouve pas :
gpg --keyserver serveur --recv-key id_clef
Dans le second cas (vous ne disposez pas de l'identifiant de la clef), il va nous falloir chercher ce dernier :
gpg --search-key nom
où nom est un morceau du nom, du commentaire, ou de l'adresse (s'il contient des espaces, mettez le tout entre guillemets).
Comme d'habitude, si le serveur de clefs à utiliser ne figure pas dans votre fichier de configuration, utilisez plutôt :
gpg --keyserver serveur --search-key nom
Si la recherche fournit des résultats, une liste de clefs correspondant au critère de recherche apparaît, terminée par une ligne de la forme :
Keys 1-11 of 219 for "nom". Entrez le(s) nombre(s), S)uivant, ou Q)uitter >
Si vous ne voyez pas la clef qui vous intéresse, entrez 's' pour afficher la page suivante. Lorsque vous la voyez, entrez son numéro (le nombre tout à gauche dans la liste), et validez. La clef est automatiquement téléchargée et importée.
Bien sûr vous pouvez aussi passer par l'interface web du serveur de clefs pour effectuer la recherche et télécharger un fichier contenant la clef, mais c'est moins amusant (cela revient à la première méthode).
Signer la clef
Si l'on a confiance dans l'origine de la clef et que l'on est certain de l'identité de son possesseur (typiquement, on l'a rencontré en personne et comparé les empreintes des clefs à cette occasion), on peut signer la clef avec sa propre clef privée :
$ gpg --sign-key id_clef
Vous aurez à confirmer, puis à entrer la phrase de passe de votre clef privée.
Il faut ensuite renvoyer la clef sur le serveur par la commande vue précédemment :
gpg --send-key id_clef
Cela veut dire que vous apportez votre garantie sur l'authenticité de la clef et l'identité de son possesseur.
Révoquer une clef
Si vous cessez d'utiliser une clef, par exemple parce qu'elle a été compromise (quelqu'un a forcé votre clef privée par exemple), il est préférable de créer un certificat de révocation.
$ gpg --gen-revoke id_clef > revoke_id_clef
Confirmez par 'o' que vous voulez bel et bien générer un certificat de révocation, puis donnez un motif pour la révocation. Vous avez ensuite le choix de renseigner une "description optionnelle", qui vous permet d'expliquer en long en large et en travers, avec force détails, les raisons qui vous ont poussé à commettre cet acte (de révocation). Comme on vous le demande, revenez à la ligne depuis une ligne vide pour terminer la description, dites que c'est d'accord, et enfin entrez la phrase de passe de la clef.
Nous voilà en possession d'un beau fichier revoke_id_clef contenant le certificat de révocation de notre clef. GnuPG vous invite à prendre moult précautions à son sujet.
Importez maintenant ce certificat par la commande :
$ gpg --import revoke_id_clef
afin de marquer la clef comme révoquée dans votre trousseau.
Si vous n'avez pas utilisé de serveur de clefs, vous pouvez mettre ce fichier à disposition comme bon vous semble, vos contacts devront eux aussi l'importer pour marquer la clef comme révoquée chez eux.
Dans le cas contraire, après avoir importé le certificat de révocation chez vous, renvoyez la clef sur le serveur comme expliqué plus haut (gpg --send-key). Vos contacts devront quant à eux réimporter la clef pour mettre à jour leur trousseau.
Supprimer une clef
Il est parfois utile de pouvoir supprimer une clef de votre trousseau, soit la clef publique de quelqu'un avec qui vous avez cessé de communiquer, soit une clef expirée ou révoquée, ou encore une paire de clefs vous appartenant mais que vous n'utilisez plus (dans ce dernier cas pensez avant tout à générer un certificat de révocation comme vu précédemment).
Pour supprimer une clef publique, tapez :
$ gpg --delete-key id_clef
Pour supprimer une clef privée, tapez :
$ gpg --delete-secret-key id_clef
Pour supprimer un couple de clefs (publique et privée), tapez :
$ gpg --delete-secret-and-public-key id_clef
Modifier une clef
On a parfois besoin de modifier les paramètres d'un couple de clefs, par exemple le mot de passe. Pour entrer dans le mode interactif d'édition de la clef, tapez :
$ gpg --edit-key id_clef
Après quelques informations relatives au programme, ainsi qu'à la clef, vous obtenez une invite :
Commande>
Tapez "help" ou '?' pour voir la liste des commandes disponibles. Par exemple pour changer la phrase de passe de la clef, la commande est passwd :
Commande> passwd
On vous demande l'ancienne phrase, puis deux fois la nouvelle.
Pour quitter le mode d'édition, tapez 'q', "quit", ou encore appuyez sur <Ctrl>+D. Si des modifications ont été effectuées, on vous demande si vous voulez les enregistrer. Répondez 'o' et voilà.
Commande> q Enregistrer les changements? (o/N) o
Alternativement, la commande save permet de sauvegarder et quitter sans confirmation.
À noter qu'il est possible de lancer directement une commande dès l'appel du programme. Par exemple :
$ gpg --edit-key id_clef passwd
lance directement l'invite de changement de la phrase de passe.
Par contre, le programme reste dans le mode d'édition et il faut quitter comme précédemment.
Une fois les changements effectués, n'oubliez pas de renvoyer votre clef à vos correspondants ou à un serveur de clefs avec gpg --send-key (ce qui est tout de même plus simple).
Gestion des adresses (UID)
Pour chaque adresse de courriel supplémentaire que vous comptez utiliser avec cette clef, il faut ajouter un UID, avec l'adresse en question, le nom et éventuellement un commentaire associé.
La commande est adduid. GPG vous demandera donc, comme lors de la création de la clef, d'entrer le nom réel, l'adresse et le commentaire. Vous aurez besoin de la phrase de passe pour terminer l'ajout.
Une fois tous les utilisateurs ajoutés, vous pouvez les lister grâce à la commande uid, les sélectionner avec uid numéro (numéro étant le numéro de l'utilisateur dans la liste), et leur attribuer un niveau de confiance avec trust (le même niveau de confiance sera attribué à tous les utilisateurs sélectionnés).
À noter que les changements sur les niveaux de confiance n'apparaissent pas immédiatement, vous devrez d'abord sauvegarder et relancer l'interface.
Pour supprimer un UID, sélectionnez-le avec uid numéro, puis tapez deluid.
Conclusion
J'ai présenté ici les commandes les plus utiles pour une utilisation de base. Comme d'habitude, man est votre ami :
$ man gnupg $ man gpg
Quelques petites remarques quand même :
- Les options de la forme --*-key peuvent généralement s'écrire --*-keys. Autrement dit le pluriel n'a souvent pas d'importance pour gpg.
- Pour éviter toute ambiguïté, il est possible d'utiliser d'autres méthode pour faire référence à une clef. En effet, il est possible que les huits derniers caractères des empreintes de deux clefs soient identiques. Partout où j'ai écrit "id_clef", on peut donc utiliser l'empreinte complète de la clef (sans espaces). Il y a d'autres possibilités : pour plus d'informations voyez la page de manuel de gpg, sous le titre « How to specify a user ID » (vers la fin).
- Il existe des interfaces graphiques à GnuPG, comme Seahorse pour Gnome ou Kgpg pour KDE. L'extension Enigmail de Thunderbird peut également permettre de gérer son trousseau.
Nous sommes maintenant fin prêts pour chiffrer ses courriels ou des conversations jabber.