GnuPG : Différence entre versions

De La Mouche VII
Aller à la navigationAller à la recherche
 
m (s/crypter/chiffrer + tassage)
Ligne 1 : Ligne 1 :
'''''[http://www.gnupg.org/ GnuPG]''''' (''GNU Privacy Guard'') est une implémentation libre du standard de cryptage ''OpenPGP'', qui fonctionne sur un système de clefs asymétriques.
+
[[Catégorie:Informatique]]
 
 
 
 
Pour envoyer un message crypté (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 crypté 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.
 
 
 
 
 
 
 
  
 +
'''''[http://www.gnupg.org/ 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 ==
 
== Générer un couple de clefs ==
Ligne 13 : Ligne 9 :
 
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'''.
 
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
 
  aptitude install gnupg
 
  
 
En premier lieu, il faut donc générer un couple de clefs :
 
En premier lieu, il faut donc générer un couple de clefs :
Ligne 19 : Ligne 14 :
 
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), et fixer une durée de validité de la clef (troisième question). Dites ensuite que c'est correct en tapant ''''o'''', puis renseignez les champs :
 
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), et fixer une durée de validité de la clef (troisième question). Dites ensuite que c'est correct en tapant ''''o'''', puis renseignez les champs :
 
:* '''Nom réel''' : mettez votre nom ou pseudonyme.
 
:* '''Nom réel''' : mettez votre nom ou pseudonyme.
:* '''Adresse e-mail''' : mettez l'adresse pour laquelle vous désirez crypter les messages. Si vous ne destinez pas cette clef à du cryptage de courriel (et même si c'est le cas), une adresse bidon ou un JID (''Jabber ID'', pour les incultes) doit fonctionner.
+
:* '''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...
 
:* '''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''''.
 
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.
 
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 :
 
Voici à présent une étape fort sympathique qui va vous permettre de vous muscler les bras. Voici le message qui apparaît :
Ligne 33 : Ligne 26 :
 
  nombres aléatoires une meilleure chance d'avoir assez d'entropie.
 
  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).
 
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).
 
  
 
Un message apparaît, ressemblant à :
 
Un message apparaît, ressemblant à :
Ligne 39 : Ligne 31 :
 
  les clés publique et secrète ont été créées et signées.
 
  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.
 
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 :
 
Pour retrouver l'identifiant d'une clef, exécutez :
Ligne 47 : Ligne 38 :
 
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 :
 
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]
 
  pub  1024D/XXXXXXXX 2006-02-15 [expire: 2006-02-16]
 
 
 
 
 
  
 
== Mettre à disposition sa clef publique ==
 
== 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.
 
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 ===
 
=== Exporter la clef ===
Ligne 65 : Ligne 48 :
 
  $ gpg --export -a -o ma_clef.asc id_clef
 
  $ 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.
 
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 ===
 
=== Utiliser un serveur de clefs ===
  
 
Deux solutions s'offrent à nous pour mettre une clef sur un serveur de clefs.
 
Deux solutions s'offrent à nous pour mettre une clef sur un serveur de clefs.
 
  
 
==== Méthode HTTP ====
 
==== 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 [http://subkeys.pgp.net/ subkeys.pgp.net] ou [http://keyserver.net 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").
 
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 [http://subkeys.pgp.net/ subkeys.pgp.net] ou [http://keyserver.net 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 !
 
C'est facile, mais c'est tellement simple que ça vallait à peine le coup d'en parler !
 
  
 
==== Méthode gpg pur ====
 
==== Méthode gpg pur ====
  
 
Voyons maintenant la méthode "autonome", utilisant à 100% notre chère commande '''gpg'''.
 
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 :
 
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
 
  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.
 
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'' :
 
La commande qui va envoyer votre clef sur le serveur est, si vous voulez utiliser le serveur par défaut de votre ''gpg.conf'' :
Ligne 97 : Ligne 72 :
 
  gpg --send-key --keyserver serveur id_clef
 
  gpg --send-key --keyserver serveur id_clef
 
où '''serveur''' est l'adresse du serveur, de la forme ''protocole://nom_DNS'' (comme dans ''gpg.conf'').
 
où '''serveur''' est l'adresse du serveur, de la forme ''protocole://nom_DNS'' (comme dans ''gpg.conf'').
 
 
 
 
 
  
 
== Importer et signer une clef ==
 
== 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 cryptés.
+
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 ===
 
=== Importer la clef ===
  
 
La première chose à faire est de télécharger et d'importer la clef.
 
La première chose à faire est de télécharger et d'importer la clef.
 
  
 
==== Méthode "fichier" ====
 
==== Méthode "fichier" ====
Ligne 122 : Ligne 88 :
 
  $ gpg --import id_clef.asc
 
  $ gpg --import id_clef.asc
 
où ''id_clef.asc'' est le fichier en question.
 
où ''id_clef.asc'' est le fichier en question.
 
  
 
==== Méthode gpg pur ====
 
==== 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.
 
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 :
 
Dans le premier cas, tapez :
Ligne 133 : Ligne 97 :
 
si le serveur où la clef se trouve figure dans votre ''~/.gnupg/gpg.conf'', ou, si elle ne s'y trouve pas :
 
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
 
  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 :
 
Dans le second cas (vous ne disposez pas de l'identifiant de la clef), il va nous falloir chercher ce dernier :
Ligne 144 : Ligne 107 :
 
  Keys 1-11 of 219 for "nom".  Entrez le(s) nombre(s), S)uivant, ou Q)uitter >
 
  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.
 
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).
 
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 ===
 
=== Signer la clef ===
Ligne 158 : Ligne 115 :
 
  $ gpg --sign-key id_clef
 
  $ gpg --sign-key id_clef
 
Vous aurez à confirmer, puis à entrer la phrase de passe de votre clef privée.
 
Vous aurez à confirmer, puis à entrer la phrase de passe de votre clef privée.
 
  
 
Vous pouvez ensuite, si vous le souhaitez, renvoyer la clef sur le serveur par la commande vue précédemment :
 
Vous pouvez ensuite, si vous le souhaitez, renvoyer la clef sur le serveur par la commande vue précédemment :
 
  gpg --send-key id_clef
 
  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.
 
Cela veut dire que vous apportez votre garantie sur l'authenticité de la clef et l'identité de son possesseur.
 
 
 
 
 
  
 
== Révoquer une clef ==
 
== Révoquer une clef ==
Ligne 174 : Ligne 125 :
 
  $ gpg --gen-revoke id_clef > revoke_id_clef
 
  $ 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.
 
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.
 
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.
Ligne 181 : Ligne 131 :
 
  $ gpg --import revoke_id_clef
 
  $ gpg --import revoke_id_clef
 
afin de marquer la clef comme révoquée dans votre trousseau.
 
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.
 
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. Vos contacts devront quant à eux réimporter la clef pour mettre à jour leur trousseau.
 
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. Vos contacts devront quant à eux réimporter la clef pour mettre à jour leur trousseau.
 
 
 
 
 
  
 
== Supprimer une clef ==
 
== Supprimer une clef ==
Ligne 204 : Ligne 148 :
 
Pour supprimer un couple de clefs (publique et privée), tapez :
 
Pour supprimer un couple de clefs (publique et privée), tapez :
 
  $ gpg --delete-secret-and-public-key id_clef
 
  $ gpg --delete-secret-and-public-key id_clef
 
 
 
 
 
  
 
== Modifier une clef ==
 
== Modifier une clef ==
Ligne 219 : Ligne 158 :
 
  Commande> passwd
 
  Commande> passwd
 
On vous demande l'ancienne phrase, puis deux fois la nouvelle.
 
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à.
 
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
 
  Commande> q
 
  Enregistrer les changements? (o/N) o
 
  Enregistrer les changements? (o/N) o
 
  
 
A noter qu'il est possible de lancer directement une commande dès l'appel du programme. Par exemple :
 
A noter qu'il est possible de lancer directement une commande dès l'appel du programme. Par exemple :
Ligne 231 : Ligne 168 :
  
 
Par contre, le programme reste dans le mode d'édition et il faut quitter comme précédemment.
 
Par contre, le programme reste dans le mode d'édition et il faut quitter comme précédemment.
 
 
 
 
 
  
 
== Conclusion ==
 
== Conclusion ==
Ligne 242 : Ligne 174 :
 
  $ man gnupg
 
  $ man gnupg
 
  $ man gpg
 
  $ man gpg
 
  
 
Quelques petites remarques quand même :
 
Quelques petites remarques quand même :
Ligne 249 : Ligne 180 :
 
:* 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).
 
:* 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 ''[[Thunderbird : crypter ses courriels | Enigmail]]'' de ''Thunderbird'' peut également permettre de gérer son trousseau.
+
:* 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 [[chiffrer ses conversations jabber|conversations jabber]].
Nous sommes maintenant fin prêts pour [[Thunderbird : crypter ses courriels | crypter des courriels]] ou des [[Psi : crypter ses conversations | conversations jabber]].
 
 
 
 
 
 
 
 
 
[[Catégorie:Informatique]]
 

Version du 27 mai 2009 à 17:06


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), et fixer une durée de validité de la clef (troisième question). 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).

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.

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

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

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

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

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, 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.

Vous pouvez ensuite, si vous le souhaitez, 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. 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

A 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.

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.