Ce que vous apportera ce guide
Ce guide présume que vous êtes relativement familier avec la cryptographie à clé publique, le chiffrement et les signatures numériques. Si ce n'est pas le cas, sautez à la section crytographie à clé publique ou jetez un œil au manuel GNU de la confidentialité chapitre 2, puis reprenez votre lecture ici.
Ce guide vous apprendra comment installer GnuPG, comment créer votre paire de clés, comment ajouter des clés à votre trousseau, comment soumettre votre clé publique au serveur de clés et comment signer, chiffrer, vérifier ou déchiffrer les messages que vous envoyez ou recevez. Vous apprendrez aussi comment chiffrer des fichiers de votre système pour empêcher sa lecture par une autre personne.
Installation des logiciels requis
Pour commencer, vous devez lancer emerge gnupg. De plus en plus d'applications supportent gpg de nos jours, vous pouvez ajouter crypt dans votre variable USE si vous le souhaitez. Si vous souhaitez utiliser gnupg avec un logiciel de messagerie, vous pouvez utiliser pine (emerge pinepgp), mutt (emerge mutt), Mozilla Thunderbird (emerge mozilla-thunderbird), Evolution (Evolution est un clone GNOME de Microsoft Outlook) et KMail de KDE (KMail fait partie du paquet kdepim).
Kgpg devrait vous intéresser si vous utilisez KDE. Ce petit programme vous permet de générer des paires de clés, d'importer des clés à partir de fichiers ASCII, de signer des clés, d'exporter des clés et plus encore.
2. Génération de votre clé et ajout de clés à votre trousseau
Pour créer votre clé, il vous suffit de faire gpg --gen-key. La première fois que vous la lancez, cette commande créera quelques répertoires. Lancez-la à nouveau pour créer les clés :
Exemple de code 2.1 : Création de la clé |
$ gpg --gen-key gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. Please select what kind of key you want: (1) DSA and ElGamal (default) (2) DSA (sign only) (4) ElGamal (sign and encrypt) (5) RSA (sign only) Your selection? 1 |
Vous avez ici la possibilité de choisir le type de clé que vous voulez utiliser. En général, les utilisateurs choisissent le défaut, DSA et ElGamal. Ensuite, il faut choisir la taille de la clé. Sachez que plus elle est grande, mieux c'est. Néanmoins, n'utilisez pas une taille supérieure à 2048 avec une clé DSA/ElGamal, 1024 est largement suffisant pour une utilisation normale de la messagerie.
Après la taille vient la date d'expiration. Ici, par contre, plus c'est petit, mieux c'est, mais la plupart des utilisateurs peuvent choisir une clé qui n'expire jamais ou bien dans deux ou trois ans.
Exemple de code 2.2 : Choisir la taille de la clé |
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
|
Vous devez maintenant entrer quelques informations personnelles. Si vous comptez distribuer votre clé publique, mettez votre adresse de messagerie réelle.
Exemple de code 2.3 : Renseignements personnels |
Is this correct (y/n)? y You need a User-ID to identify your key; the software constructs the user id from Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>" Real name: John Doe Email address: john@nowhere.someplace.flick Comment: The Real John Doe You selected this USER-ID: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. Enter passphrase: |
Entrez maintenant votre mot de passe deux fois. Utilisez de préférence un mot de passe robuste. En effet, si quelqu'un réussissait à s'emparer de votre clé privée et à trouver votre mot de passe, il pourrait envoyer des messages signés à votre nom, de telle sorte que quiconque pensera que c'est vous qui l'avez envoyé.
Ensuite, GnuPG vous génère votre clé. Vous pouvez déplacer la souris ou jouer un MP3 pour accélérer le processus de création de la clé, car cela aide la génération de valeurs aléatoires.
Générer un certificat de révocation
Important : Cette partie est très importante, faites-le DE SUITE. |
Après avoir créé vos clés, vous devez créer un certificat de révocation. Il vous permettra d'annuler votre clé si quelque chose de fâcheux venait à se produire (une personne l'a volée, par exemple).
Exemple de code 2.4 : Génération d'un certificat de révocation |
$ gpg --list-keys /home/humpback/.gnupg/pubring.gpg --------------------------------- pub 1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick> sub 2048g/96D6CDAD 2002-12-08 $ gpg --output revoke.asc --gen-revoke 75447B14 sec 1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick> Create a revocation certificate for this key? y Please select the reason for the revocation: 0 = No reason specified 1 = Key has been compromised 2 = Key is superseded 3 = Key is no longer used Q = Cancel (Probably you want to select 1 here) Your decision? 1 Enter an optional description; end it with an empty line: > Someone cracked me and got my key and passphrase. > On m'a piraté et volé ma clé avec son mot de passe. > Reason for revocation: Key has been compromised Someone cracked me and got my key and passphrase. On m'a piraté et volé ma clé avec son mot de passe. Is this okay? y You need a passphrase to unlock the secret key for user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>" 1024-bit DSA key, ID 75447B14, created 2002-12-08 ASCII armored output forced. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! |
La commande gpg --list-keys liste les clés de votre trousseau de clés publiques. Vous pouvez l'utiliser pour repérer l'ID de votre clé afin de créer le certificat de révocation. Maintenant, il est sage de copier tout le répertoire ~/.gnupg/ et le certificat de révocation (le fichier ASCII revoke.asc) sur un support sécurisé (deux disquettes ou bien un CD-ROM stockés dans un endroit sûr). Rappelez-vous bien que ce fichier revoke.asc peut être utilisé pour annuler votre clé et la rendre inutilisable.
Note : Si vous voulez utiliser plusieurs adresses de messagerie avec cette clé, vous pouvez lancer gpg --edit-key VOTRE_ID et ensuite utiliser la commande adduid. GnuPG vous demandera alors un nom, une adresse et un commentaire pour ce deuxième ID. |
Pour exporter votre clé, tapez gpg --armor --output john.asc --export john@nowhere.someplace.flick. Vous pouvez pratiquement tout le temps utiliser l'ID de la clé ou autre chose qui l'identifierait (ici nous utilisons l'adresse de messagerie). John a maintenant un fichier john.asc qu'il peut envoyer à ses amis ou publier sur une page web pour permettre à qui le voudra de communiquer avec lui en toute sécurité.
Pour ajouter une clé à votre trousseau de clés publiques, vous devez d'abord l'importer, puis vérifier son empreinte numérique. Après avoir vérifié l'empreinte, vous pourrez la valider.
Note : Faites très attention au moment de vérifier les clés, car c'est un des points faibles de la cryptographie à clé publique. |
Nous allons maintenant ajouter la clé publique de Luis Pinto (un ami) à notre trousseau. Après lui avoir passé un coup de fil pour lui demander l'empreinte numérique de sa clé, je compare l'empreinte avec la sortie de la commande fpr. La clé est authentique, je l'ajoute donc à mon trousseau. Dans ce cas particulier, la clé de Luis ne sera plus valide à partir du 2003-12-01, il m'est donc demandé si je veux que la signature expire à la même date.
Exemple de code 2.5 : Importation et signature d'une clé |
$ gpg --import luis.asc gpg: key 462405BB: public key imported gpg: Total number processed: 1 gpg: imported: 1 $ gpg --list-keys /home/humpback/.gnupg/pubring.gpg --------------------------------- pub 1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick> sub 2048g/96D6CDAD 2002-12-08 pub 1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt> uid Luis Pinto <lmpinto@dei.uc.pt> sub 4096g/922175B3 2002-12-01 [expires: 2003-12-01] $ gpg --edit-key lmpinto@dei.uc.pt gpg (GnuPG) 1.0.7; Copyright (C) 2002 Free Software Foundation, Inc. This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the file COPYING for details. gpg: checking the trustdb gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1 pub 1024D/462405BB created: 2002-12-01 expires: 2003-12-01 trust: -/- sub 4096g/922175B3 created: 2002-12-01 expires: 2003-12-01 (1) Luis Pinto <lmpinto@dei.uc.pt> (2). Luis Pinto <lmpinto@student.dei.uc.pt> Command> fpr pub 1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt> Fingerprint: F056 3697 ADE3 CF98 B80B 8494 0AD3 E57B 4624 05BB Command> sign Really sign all user IDs? y pub 1024D/462405BB created: 2002-12-01 expires: 2003-12-01 trust: -/- Fingerprint: F056 3697 ADE3 CF98 B80B 8494 0AD3 E57B 4624 05BB Luis Pinto <lmpinto@dei.uc.pt> Luis Pinto <lmpinto@student.dei.uc.pt> This key is due to expire on 2003-12-01. Do you want your signature to expire at the same time? (Y/n) Y How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". (0) I will not answer. (default) (1) I have not checked at all. (2) I have done casual checking. (3) I have done very careful checking. Your selection? 3 Are you really sure that you want to sign this key with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>" I have checked this key very carefully. Really sign? y You need a passphrase to unlock the secret key for user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>" 1024-bit DSA key, ID 75447B14, created 2002-12-08 Command> check uid Luis Pinto <lmpinto@dei.uc.pt> sig!3 462405BB 2002-12-01 [self-signature] sig!3 75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhe uid Luis Pinto <lmpinto@student.dei.uc.pt> sig!3 462405BB 2002-12-01 [self-signature] sig!3 75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhe |
3. Utilisation d'un serveur de clés
Publier des clés sur un serveur de clés
Maintenant que vous avez votre clé, il s'agit de la distribuer à un serveur de clés qui la rendra publique. Il y a de nombreux serveurs de clés dans le monde et la plupart d'entre eux s'échangent les clés. Nous allons envoyer la clé de Monsieur Durand au serveur subkeys.pgp.net. Le protocole utilisé est HTTP, donc si vous avez besoin d'un proxy il est temps de le définir (export http_proxy=http://proxy_host:port/). La commande pour envoyer une clé est : gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --send-key 75447B14 où 75447B14 est l'ID de votre clé. Si vous n'avez pas besoin du proxy, vous pouvez enlever la partie --keyserver-options honor-http-proxy.
Vous pouvez aussi envoyer au serveur les clés d'autres personnes que vous avez signées. Nous pourrions envoyer la clé de Luis Pinto. De cette manière, une personne qui a confiance en vous pourra faire confiance en cette clé pour Luis car vous l'avez signée.
Récupérer des clés depuis un serveur de clés
Nous allons maintenant chercher la clé de Gustavo Felisberto (votre serviteur) et l'ajouter au trousseau de John Doe.
Exemple de code 3.1 : Chercher une clé sur le serveur de clés |
$ gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net gpg: searching for "humpback@felisberto.net" from HKP server subkeys.pgp.net Keys 1-5 of 5 for "humpback@felisberto.net" (1) Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024 created 2002-12-06, key B9F2D52A (2) Gustavo Felisberto <humpback@altavista.net> 1024 created 1999-08-03, key E97E0B46 (3) Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024 created 1998-12-10, key B59AB043 (4) Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024 created 1998-08-26, key 39EB133D (5) Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024 created 1998-06-14, key AE02AF87 Enter number(s), N)ext, or Q)uit >1 gpg: requesting key B9F2D52A from HKP keyserver subkeys.pgp.net gpg: key B9F2D52A: public key imported gpg: Total number processed: 1 gpg: imported: 1 |
Comme vous pouvez le constater, j'ai publié plusieurs clés sur le serveur, pourtant, je n'utilise que B9F2D52A. John Doe peut maintenant la récupérer et la signer s'il a confiance en elle.
Quelques fois certaines applications requièrent une utilisation vraiment fréquente de votre clé GPG, ce qui signifie que vous devez entrer votre mot de passe très souvent. Pour résoudre ce problème, de nombreuses applications utilisaient un mécanisme de mise en mémoire tampon pour faciliter le travail des utilisateurs. Toutefois, cela ne permet pas un partage de cette mémoire entre les applications (imaginez les problèmes de sécurité que cela impliquerait) et les applications devaient réinventer la roue, encore et encore.
Un agent GPG est une application à part entière utilisée par GPG pour mettre en cache le mot de passe de manière standard et sécurisée. Cela permet aux applications d'utiliser GPG de manière concurrente : si vous entrez votre mot de passe alors que vous utilisez déjà une application, la seconde pourra travailler avec le GPG sans devoir demander de nouveau le mot de passe pour libérer la clé, si l'agent GPG est configuré pour permettre cela, bien sûr.
Gentoo fournit quelques programmes d'agent GPG. Le paquet app-crypt/gnupg-1.9.* peut être considéré comme l'application de référence et est utilisé dans ce document.
Installation et configuration de gpg-agent et pinentry
Vous devez évidemment installer gnupg-1.9.* qui comprend gpg-agent ainsi que pinentry. pinentry est l'application d'aide utilisée par gpg-agent pour demander le mot de passe dans une fenêtre graphique. Elle est proposée avec trois possibilités : elle peut ouvrir une fenêtre en utilisant gtk+, Qt, ou un bibliothèque curses (selon le paramètre USE utilisé lors de son installation).
Exemple de code 4.1 : Installer gpg-agent et pinentry |
# emerge \>=gnupg-1.9.20 pinentry
|
Il vous faut maintenant créer un fichier ~/.gnupg/gpg-agent.conf et lui ajouter les lignes suivantes pour définir le temps d'expiration du mot de passe (par exemple 30 minutes) et l'application à appeler lorsque le mot de passe doit être tapé la première fois (par exemple, la version qt de pinentry).
Exemple de code 4.2 : Édition de ~/.gnupg/gpg-agent.conf |
pinentry-program /usr/bin/pinentry-qt no-grab default-cache-ttl 1800 |
Ensuite, configurez GnuPG pour utiliser l'agent à bon escient. Éditez le fichier ~/.gnupg/gpg.conf et ajoutez la ligne suivante :
Exemple de code 4.3 : Configurer GnuPG pour utiliser un agent GPG |
use-agent |
Maintenant, votre système est (presque) prêt à l'utilisation de l'agent GPG.
Démarrer automatiquement l'agent GPG
Si vous utilisez KDE comme environnement graphique, éditez le fichier /usr/kde/3.x/env/agent-startup.sh (pour l'ensemble du système ) ou ~/.kde/env/gpgagent.sh (pour un utilisateur local) et ajoutez la commande suivante pour que KDE démarre automatiquement l'agent GPG :
Exemple de code 4.4 : KDE démarrera automatiquement l'agent GPG |
eval "$(gpg-agent --daemon)" |
Si vous utilisez un environnement graphique différent, ajoutez la ligne citée précédemment dans votre fichier ~/.xinitrc (si vous utilisez startx) ou ~/.xsession (si vous utilisez XDM/GDM/KDM/...)
5. Travailler avec des documents
Disons que vous voulez envoyer un fichier à Luis. Vous pouvez le chiffrer, le signer ou le chiffrer et le signer. Si vous le chiffrez, alors seul Luis pourra le lire à l'aide de sa clé privée. La signature informera Luis que c'est vraiment vous qui avez créé le fichier.
Voici les trois commandes qui correspondent à ces actions : chiffrer, signer et chiffrer/signer.
Exemple de code 5.1 : Signer ou chiffrer un fichier |
$ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_à_chiffrer $ gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_à_signer $ gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_à_chiffrer_et_signer |
Les fichiers générés sont des binaires. Si vous voulez des fichiers ASCII, ajoutez simplement l'option --clearsign au début de la commande.
Déchiffrage et vérification des signatures
Supposons maintenant que vous avez reçu un fichier chiffré qui vous est destiné. La commande pour le déchiffrer est gpg --output document --decrypt encrypted_doc.gpg. Cela déchiffrera le fichier et vérifiera sa signature (s'il y en a une).
Chiffrage et déchiffrage sans clef
Il est aussi possible de chiffrer des fichiers en utilisant un mot de passe plutôt qu'une clef. En fait, le mot de passe lui-même va fonctionner comme une clef. Il sera utilisé comme algorithme de chiffrement symétrique. Vous pouvez chiffrer le fichier en utilisant l'argument --symmetric de gpg ; le déchiffrage fonctionne de la même manière que ce que l'on a vu précédemment.
Exemple de code 5.2 : Chiffrage d'un fichier avec un mot de passe |
$ gpg --output document.gpg --symmetric document (GnuPG va réclamer un mot de passe et une vérification) |
GnuPG possède des fonctions avancées assez sympa. Pour les trouver, ouvrez le fichier ~/.gnupg/gpg.conf.
Exemple de code 5.3 : ~/.gnupg/gpg.conf |
#keyserver x-hkp://subkeys.pgp.net #keyserver-options auto-key-retrieve include-disabled include-revoked |
Cherchez ces deux lignes et décommentez-les. Maintenant, quand GnuPG voudra vérifier une signature et ne trouvera pas la clé publique sur le trousseau local, il contactera directement le serveur de clés subkeys.pgp.net et essaiera de récupérer la clé.
Une autre commande très utile est gpg --refresh-keys. Elle contacte le serveur de clés défini dans le fichier d'options et met à jour les clés publiques de votre trousseau local, cherche les clés révoquées, les nouveaux identifiants et les nouvelles signatures des clés. Vous devriez lancer cette commande de temps en temps, une ou deux fois par mois, pour être au courant si une personne révoque sa clé.
Gestion des signatures des messages
95% du temps, vous utiliserez GnuPG pour chiffrer ou signer un email et pour lire des messages chiffrés ou signés. Il est donc normal que j'en parle en premier.
Il y a deux façons de chiffrer/signer un message avec GnuPG, l'ancienne et la nouvelle méthode :). Avec l'ancienne méthode, les messages apparaissent en texte brut sans aucune possibilité de formatage ni de fichiers attachés qui seraient chiffrés/signés. Voici un exemple de message signé avec l'ancienne méthode :
Exemple de code 6.1 : Une signature comprise dans le texte |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Test message -----BEGIN PGP SIGNATURE----- Version: PGPfreeware 6.5.8 for non-commercial use iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0 0EU3Kd2EKNCqataEqM5qjpPs =LchZ -----END PGP SIGNATURE----- |
De tels messages ne sont plus acceptables de nos jours avec nos belles interfaces graphiques et nos clients de messagerie qui comprennent le HTML.
Pour résoudre ce problème, une extension MIME (extensions multi-usages pour la messagerie Internet) a été créée. Cette extension ajoute un champ au message qui indique au client de messagerie que le contenu du message entier est signé/chiffré. Le problème de cette extension est qu'elle n'est pas supportée par tous les clients de messagerie, certains clients ignorent même le contenu du message. Microsoft Outlook est bien connu pour ne pas fonctionner avec cette méthode.
Kgpg est une belle interface vers GnuPG. Dans l'écran principal, vous pouvez coller du texte à signer ou chiffrer, vous pouvez aussi coller le texte ASCII blindé (N.D.T. : un texte « blindé », de l'anglais « armored text », est un texte précédé et suivi de marqueurs PGP indiquant qu'il est chiffré ou signé) à déchiffrer.
Figure 6.1 |
![]() |
Sur cette image, vous pouvez voir la fenêtre principale de Kgpg avec un texte ASCII blindé chiffré à l'intérieur. À partir de là, vous pouvez le déchiffrer (vous devez donner votre mot de passe), chiffrer d'autres fichiers, copier/coller un texte à signer...
Figure 6.2 |
![]() |
Vous voyez maintenant la fenêtre de gestion des clés. On peut y voir notre clé pour John Doe, les deux clés de confiance pour Gustavo et Luis et la clé non vérifiée de Daniel Robbins -- je ne l'ai toujours pas appelé pour lui demander son empreinte :).
Seahorse est une interface graphique vers GnuPG pour l'environnement de bureau GNOME. Ce logiciel a évolué rapidement, mais il lui manque des fonctionnalités importantes qui se trouvent dans Kgpg ou en ligne de commande.
Enigmail est une extension pour les clients de messagerie Mozilla (comme Thunderbird ou Seamonkey) très simple à configurer. Dans Seamonkey, vous n'avez qu'à aller dans Preferences -> Privacy & Security -> Enigmail. Ensuite, il vous suffit d'entrer l'adresse de messagerie de votre clef. Vous devez d'abord faire un emerge enigmail pour l'utiliser dans Thunderbird, puis vous pouvez le configurer en allant dans Edit -> Account Settings -> OpenPGP Security.
Les messages qui arriveront avec une signature pgp ou gpg sans confiance seront marqués avec un stylo cassé. Ceux qui auront une bonne signature auront un stylo bien droit. Enigmail a même la possibilité de récupérer des clés à partir d'un serveur de clés, mais, s'il rencontre un problème, il affichera des messages très bizarres (de toute façon, vous vous rappeler comment utiliser la ligne de commande, n'est-ce pas ?).
Si vous utilisez le paramètre USE crypt, KMail sera compilé avec le support gpg et sera capable de chiffrer et déchiffrer les courriers PGP automatiquement. Il pourra également chiffrer les courriers avec OpenPGP/MIME. Si vous voulez également pouvoir déchiffrer les courriers OpenPGP/MIME (ce qui est probablement le cas), vous devrez disposer d'un agent GPG en cours d'exécution (voir le chapitre Utiliser un agent GPG).
Vous pouvez vérifier si KMail est correctement configuré en allant dans Configurations, Configurer KMail, Sécurité, Crypto Plugins. Vous devriez voir un élément GpgME-based dans la liste. S'il n'est pas grisé, cliquez sur Rescan. S'il n'est toujours pas grisé, KMail ne fonctionne pas correctement.
Si KMail ne fonctionne toujours pas correctement, veuillez consulter le Guide KMail PGP (en anglais) pour plus d'informations.
Ce client de messagerie est très rapide avec de grosses boîtes, il a toutes les fonctionnalités qu'une personne voudrait dans un client de messagerie et marche vraiment bien avec gpg. Le seul problème est qu'il ne marche pas avec les anciennes signatures PGP, donc quand vous recevrez ce type de messages signés, vous devrez faire la vérification à la main.
Pour utiliser votre clé gpg avec Claws-Mail, allez simplement dans la configuration de votre compte et sélectionnez l'onglet Privacy. Enfin, choisissez la clé à utiliser. En principe, vous pouvez utiliser la clé par défaut.
7. Cryptographie à clé publique
Cryptographie à clé publique de base
Le concept de la cryptographie à clé publique a été introduit par Whitfield Diffie et Martin Hellman en 1976. Quand j'ai entendu pour la première fois les mots « clé publique » et « cryptographie » dans la même phrase en 1993, je me suis dit qu'il était impossible de faire une telle chose. En ces temps-là, il n'y avait pas encore Internet (enfin si, mais pas pour moi), je me suis rendu dans une bibliothèque et j'ai demandé des livres sur la cryptographie. Je devais avoir seize ans à l'époque, alors le documentaliste m'a regardé avec étonnement et m'a ramené un livre pour enfants sur les codages à substitution (ceux qui consistent à échanger une lettre par une autre comme le célèbre codage de César ou ROT-13 : Tragbb p'rfg qr yn onyyr, znvf ibhf yr fnirm qrwn, installez rotix si vous ne pouvez pas lire le texte précédent). Cela m'a frustré et j'ai commencé à chercher plus d'informations. Ça aide d'avoir des mathématiciens dans la famille, car dès que j'ai commencé à en parler avec l'un d'entre eux, il m'a fait découvrir un monde nouveau.
Et maintenant un peu de maths :
Exemple de code 7.1 : Concepts mathématiques |
Définitions : Un nombre premier est un nombre entier positif supérieur à 1 qui est divisible par 1 et par lui-même (le reste de la division est 0). Les huit premiers nombres premiers sont : 2, 3, 5, 7, 11, 13, 17, 19. Théorème (pas de démonstration ici) : Soit un nombre entier positif non-premier, il est possible de le décomposer en un produit de nombres premiers et ce produit est unique. 4 = 2 x 2 6 = 2 x 3 8 = 2 x 4 = 2 x 2 x 2 10 = 2 x 5 12 = 2 x 6 = 2 x 2 x 3 « Faits » : * Il est mathématiquement facile de multiplier deux grands nombres entiers. * Il est difficile de trouver les facteurs premiers d'un entier positif donné. |
Si je vous donne le nombre 35 et je vous dis que ce nombre est le produit de deux nombres premiers, c'est assez facile de voir que c'est 5 et 7. Mais si je vous demande la même chose pour 1588522601, vous passerez un bon moment (un bon nombre de cycles CPU) pour trouver que c'était 49811 x 31891. Et si ce nombre était vraiment très très grand, cela serait « impossible ». Alors maintenant, si je donne à tout le monde mon grand nombre qui est le produit de deux nombres premiers, je saurai quelque chose sur ce nombre que personne d'autre ne connaît.
C'est la base des implémentations de cryptographie à clé publique (PKC, public key cryptography) d'aujourd'hui. Pour illustrer son fonctionnement, je distribue mon nombre et une personne pourra l'utiliser pour chiffrer un message à mon intention. Ce n'est pas génant que n'importe qui puisse voir le message chiffré puisque je suis le seul à connaître un moyen de le lire. Il faudrait que les éventuels espions arrivent à décomposer ce grand nombre pour pouvoir lire le message, ce qui a été montré comme impossible à faire dans un temps relativement court (avec les méthodes et les moyens actuels, cela prendrait des milliers d'années). Dans cette configuration, les deux grands nombres premiers s'appellent la CLÉ PRIVÉE et le grand nombre non premier est la CLÉ PUBLIQUE.
En pratique, ce n'est pas exactement ça, mais c'est une bonne idée de la réalité. Pour plus d'informations, consultez Wikipédia à propos du protocole Diffie-Hellman. Pour encore plus d'informations, allez dans une bibliothèque et trouvez un exemplaire du manuel de cryptographie appliquée (Handbook of Applied Cryptography) par Alfred J. Menezes, Paul C. van Oorschot et Scott A. Vanstone. Cet ouvrage est disponible en ligne sur le lien précédent.
Une des conséquences de cette technique est que si vous chiffrez un message à mon intention et que vous perdez l'original, vous ne pourrez plus le récupérer à partir de la version chiffrée.
Nous avons déja vu comment une personne peut nous envoyer un message chiffré si elle dispose de notre clé publique. Mais comment savoir si l'auteur du message est vraiment celui qu'il prétend être ? En d'autres termes : si je reçois un message de votre part, comment puis-je savoir s'il vient vraiment de vous et pas d'une personne qui se fait passer pour vous ?
Vous vous souvenez que j'ai écrit ci-dessus que la PKC n'était pas aussi simple que ce que je disais ? L'idée est que lorsque vous chiffrez un message pour moi, vous le signez avec votre clé privée de telle manière que, lorsque je le reçois, je puisse d'abord utiliser votre clé publique pour vérifier votre signature et ensuite utiliser ma clé privée pour déchiffrer le message. Comme vous pouvez le constater, on ne peut pas faire cela avec la méthode que j'ai décrite tout à l'heure.
Il est donc très important de signer ses messages ainsi vous n'aurez pas à les chiffrer au préalable. Maintenant, vous pouvez créer des messages qui peuvent être lus par tout le monde et qui portent votre « marque ». Et enfin, le moindre caractère modifié dans le message pourra (et sera) détecté.
Serveurs de clés et clés signées
Disons que je n'ai jamais eu de contact avec vous avant que vous ne m'ayez envoyé un message : comment puis-je obtenir votre clé publique et comment m'assurer que c'est bien la vôtre ?
Pour résoudre ce problème, les serveurs de clés publiques ont été créés. Lorsque vous créez votre paire de clés (privée et publique), vous envoyez votre clé publique au serveur de clés. Ensuite, n'importe qui peut la récupérer. Cela résoud le problème de comment trouver votre clé. Mais comment peut-on s'assurer que c'est bien la bonne ? Un autre concept a été introduit, la signature de clé :
Si j'ai la clé publique d'une personne et que je sais avec certitude que c'est vraiment la clé de cette personne (c'est un ami personnel, quelqu'un que je connais de la vraie vie, etc.), je peux signer cette clé publique et la renvoyer au serveur de clés, ce qui correspondrait à dire : « cette clé appartient bien à la personne qui le prétend ». De cette manière, les personnes qui ont ma clé publique et qui me font confiance peuvent utiliser cette confiance pour faire confiance en d'autres clés.
Cela peut encore être confus, alors passons de suite à un exemple.
Imaginons une situation avec trois personnes : John, Mary et Lisa. John est un bon ami de Mary mais ne connaît pas Lisa ; Lisa est une bonne amie de Mary, mais ne connais pas John. Un jour, Lisa envoie un message signé à John. John va récupérer la clé publique de Lisa sur le serveur de clés et tester le message. Si tout se passe bien, il verra que la personne qui a écrit le message a bien utilisé cette clé. Mais comment savoir si elle est vraiment la personne qu'elle prétend être ?
John vois ensuite que la clé était signée par Mary, ce qu'il peut vérifier car il a déjà la clé de Mary et qu'il lui fait confiance. Avec ce cercle de confiance, il peut conclure que le message qu'il a reçu a vraiment été écrit par Lisa.
Vous êtes maintenant fin prêt à utiliser ce guide. Revenez au chapitre 1 et apprenez à vous servir de gpg.
8. Mot de la fin et remerciements
J'ai eu des problèmes avec les photos dans les clés. Vérifiez la version que vous utilisez, si c'est GnuPG 1.2.1-r1 ou au delà, ça devrait aller. Les versions plus anciennes peuvent avoir des problèmes. La plupart des serveurs de clés n'aiment pas les clés contenant des photos, il est donc préférable que vous ne mettiez pas de photo dans votre clé.
Les dernières versions de gnupg semblent ne pas marcher avec la commande gpg --send-keys qui est utilisée pour envoyer toutes les clés de votre trousseau au serveur public.
gpg est un outil très complexe, il vous permet de faire bien plus de choses que ce dont j'ai parlé ici. Ce document est destiné à l'utilisateur débutant avec GnuPG. Pour plus d'informations, veuillez consultez le site de GnuPG.
Je n'ai rien écrit à propos d'autres outils tels que pgp4pine, gpgpine, evolution et des outils Windows, mais il est probable que je le fasse plus tard.
Le manuel GnuPG de John Michael Ashley est un excellent ouvrage pour les débutants.
Merci à Swift (Sven Vermeulen) pour m'avoir poussé à récrire cet article.
Merci à tout le monde sur #gentoo-doc, vous êtes super les mecs.
Merci à Tiago Serra pour m'avoir ramené sur la piste de la confidentialité.
Ce document est protégé par la licence Creative Commons : Paternité - Partage des Conditions Initiales à l'Identique 2.5.