Gentoo Logo

Utiliser GnuPG sous Gentoo

Table des matières :

1.  Introduction

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 à un 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 l'option 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

Création de votre clé

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 : processus de génération des clés

$ 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) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) 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 couple RSA - RSA (le cas par défaut). 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, 2048 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é

RSA keypair will have 1024 bits.
RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048) 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 : documenter les renseignements personnels

Is this correct (y/n)? y
                        
GnuPG needs to construct a user ID to identify your key.

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 phrage de passe deux fois. Utilisez de préférence une phrase de passe robuste. En effet, si quelqu'un réussissait à s'emparer de votre clé privée et à trouver votre phrase de passe, il pourrait envoyer des messages signés à votre nom, de telle sorte que quiconque penserait que c'est vous qui les avez envoyés.

Ensuite, GnuPG 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 : ceci est très important, 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'aurait volée, par exemple).

Exemple de code 2.4 : générer 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:
> On m'a piraté et volé ma clé avec sa phrase de passe.
>
Reason for revocation: Key has been compromised
On m'a piraté et volé ma clé avec sa phrase 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.

Exporter des clés

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

Importer des clés

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 : importer et signer des clés

$ 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 75447B1475447B14 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.

4.  Utiliser un agent GPG

Qu'est-ce qu'un agent GPG ?

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 la phrase 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 phrase 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 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

gnupgcomprend gpg-agent ainsi que pinentry. pinentry est l'application d'aide utilisée par gpg-agent pour demander la phrase 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 l'option de la variable USE utilisée lors de son installation dans /etc/portage/make.conf).

Si vous avez installé pinentry avec plus d'un type de fenêtre popup, vous pouvez choisir le type avec eselect-pinentry:

Exemple de code 4.1 : choisir le type de fenêtre popup

# eselect pinentry list
Available pinentry implementations:
  [1]   pinentry-gtk-2 *
  [2]   pinentry-curses
  [3]   pinentry-qt4

# eselect pinentry set 1

Créez maintenant un fichier ~/.gnupg/gpg-agent.conf et placez-y les lignes suivantes qui définissent le temps d'attente toléré pour saisir la phrase de passe (par exemple, 30 minutes) et l'application à appeler lorsque la phrase de passe ne peut être retrouvée la première fois (par exemple la version gtk+ de pinentry).

Exemple de code 4.2 : éditer ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-gtk-2
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 /etc/kde/startup/agent-startup.sh (pour l'ensemble du système ) ou ~/.kde4/env/gpg-agent.sh (pour un utilisateur local) et ajoutez la commande suivante pour que KDE démarre automatiquement l'agent GPG :

Exemple de code 4.4 : faire en sorte que KDE démarre automatiquement l'agent GPG

eval "$(gpg-agent --daemon)"

En plus, décommenter ce qui suit dans /etc/kde/shutdown/agent-shutdown.sh (ensemble du système) ou ajoutez-le à ~/.kde4/shutdown/gpg-agent.sh (lutilisateur local):

Exemple de code 4.5 : faire en sorte que KDE aarête l'agent GPG

if [ -n "${GPG_AGENT_INFO}" ]; then
  kill $(echo ${GPG_AGENT_INFO} | cut -d':' -f 2) >/dev/null 2>&1
fi

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

Chiffrer et signer

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 une phrase de passe plutôt qu'une clef. En fait, la phrase de passe elle-même va fonctionner comme une clef. Elle sera utilisée 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 : chiffrer un fichier avec une phrase de passe

$ gpg --output document.gpg --symmetric document
(GnuPG va réclamer une phrase de passe et une vérification)

Utilisation avancée

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

6.  Interfaces avec GnuPG

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

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

Fig. 1: Fenêtre principale de kgpg

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

Fig. 2: Fenêtre de gestion des clés de kgpg

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

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.

KMail

Si vous utilisez l'option crypt de la variable USE, 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 Backends. Vous devriez voir un élément GpgME-based dans la liste et être capable de cocher la case OpenPGP. 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.

Claws-Mail

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.

Signatures

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

Quelques problèmes

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.

Non traité

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.

Remerciements

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



Imprimer

Dernière mise à jour le 20 janvier 2013

La version originale de cette traduction n'est plus maintenue

Résumé : Ce guide vous apprendra les bases de l'utilisation de GnuPG, un utilitaire pour sécuriser les communications.

Gustavo Felisberto
Auteur

John P. Davis
Correcteur

Sven Vermeulen
Correcteur

Camille Huot
Traducteur

Clément Varaldi
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.