GPG, un peu de paranoia dans nos vies
Aujourd'hui, j'ai décidé de parler d'un outil très utile si l'on est concerné par la vie privée et la sécurité : GnuPG.
Ce programme permets de signer et chiffrer ses messages/données avec le système de clef publique/clef privée. Ce programme est vraiment très puissant et est d'ailleurs illégal dans certains pays en raison de la difficulté qu'on les services secrets d'outre passer cette sécurité.
Histoire
GnuPG est le successeur du célèbre PGP pour Pretty Good Privacy. PGP a été créé aux états-unis par Philip Zimmermann. Il permet de chiffrer et signer du texte et documents selon le principe de cryptographie asymétrique (via une clef privée et publique).
Ce logiciel avait été mit en libre téléchargement sur internet. Il se révéla être la solution idéale pour les gens soucieux de leur vie privée. Tellement efficace, qu'il fut poursuivit par le gouvernement américain pour exportation d'armes sans autorisation. Le fait de pouvoir potentiellement dissimuler des informations aux gouvernements les inquiétaient beaucoup à cette époque d'après guerre-froide.
A la fin d'un procès interminable et interminé, Zimmermann publia le code source de son programme. Ironiquement il était interdit d'exporter des logiciels de chiffrement mais la liberté d'expression empêchait de censurer la diffusion du livre dans lequel était contenu son code.
De PGP, la FSF (free software foundation) a créé GnuPG publié sous license GPL que l'on retrouve maintenant dans toutes les bonnes distributions.
Utilisation
Il faut d'abord bien comprendre le principe de fonctionnement du logiciel. Les différentes opérations sont toujours faites avec soit une clef privée que vous seul avez, soit avec une clef publique que vous distribuez à qui bon vous semble. GPG permet de réaliser deux opérations (qui peuvent être combinées) : le chiffrage/déchiffrage et la signature qui permet de s'assurer que le destinateur est bien celui qu'il prétend être.
Pour cette dernière opération il faut bien être conscient que cela n'a de sens que si l'on est certain que la clef publique que l'on possède soit bien celle de la personne (le fait qu'elle soit à son nom ne suffit pas). Il ne faut pas confondre identification et authentification.
Voyons donc la génération, signature, chiffrement et révocation de clef.
Génération
Tout d'abord assurez vous, d'avoir le paquet gnupg
d'installé. Fait ? Parfais, maintenant ouvrez un terminal et tapez
$ gpg --gen-key
gpg (GnuPG) 1.4.10; Copyright (C) 2008 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
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
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0) 30
Key expires at Fri 02 Jul 2010 23:38:47 CEST
Is this correct? (y/N) y
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "
Real name: Martin Myself
Email address: mart@mart-e.tk
Comment:
You selected this USER-ID:
"Martin Myself "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.+++++
..........+++++
gpg: key 1D04E722 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: next trustdb check due at 2010-07-02
pub 2048R/1D04E722 2010-06-02 [expires: 2010-07-02]
Key fingerprint = 0CBC 9D1D 7E13 55D1 705B 1F22 0190 EB3B 1D04 E722
uid Martin Myself
sub 2048R/69BE0475 2010-06-02 [expires: 2010-07-02]
En ce qui concerne le type de chiffrement et la taille de la clef vous pouvez garder les options par défaut (1024 est jugé un peu limite et risque d'être brisé dans un futur +/- proche, 4096 est vraiment a réservé si vous avez des secrets d'une importance sans pareille).
Concernant la date d'expiration, il est déconseillé de mettre en illimité au cas où vous perdiez votre clef. Il est toujours possible d'étendre la durée par après.
Signature
Si vous voulez signez un message pour que l'on sache bien qu'il vient de vous, vous pouvez ajouter à votre message quelques lignes bien geek
$ gpg --clearsign message.txt # produit message.txt.asc
Si vous recevez un message comme celui généré, vous pouvez le vérifier avec :
$ gpg --verify message.txt.asc
Qui vous dira si la signature est valide et de qui elle vient.
Chiffrement
Pour chiffrer un fichier, il faut que vous possédiez la clef publique de la personne qui va déchiffrer le ficher (logique).
$ gpg --import robert_pub_key.txt
$ gpg --encrypt --recipient 'robert@gmail.com' supersecret.txt
Crée un fichier supersecret.txt.gpg. Pour que Robert puisse le lire, il devra d'abord importer ma clef publique (le transfert de clef se fait comme vous voulez, peut être en pièce jointe ou publié sur des serveurs de clés tels que pool.sks-keyservers.net)
$ gpg --import martin_pub_key.txt
$ gpg --output supersecret.txt --decrypt supersecret.txt.gpg
Révocation
Au cas où vous désirez vous débarrasser de votre clef (pas assez sûr, oublié la passphrase,...), vous pouvez à tout moment révoquer votre clef à condition d'avoir généré une clef de révocation (faites le maintenant donc !).
En utilisant cette clef, vous pourrez faire savoir au monde entier d’arrêter d'utiliser votre clef.
$ gpg --output myrevoke.key --gen-revoke 69BE0475
Suivit de 2, 3 petites questions faciles. Si vous avez oublié l'id de votre clef (69BE0475 pour moi), vous pouvez toujours la retrouver via $ gpg --list-keys
. Mettez bien ce certificat en lien sûr, n'importe qui en sa possession est capable de révoquer votre clé.
Le jour où vous aurez à l'utiliser, il suffit de faire
$ gpg --import myrevoke.key
Si votre clef était publiée sur un serveur de clé, n'oubliez pas de la mettre à jour
$ gpg ---send-keys --keyserver pool.sks-keyservers.net 69BE0475
Vos correspondants devront mettre à jour leur répertoire pour tenir compte des modifications gpg --refresh-keys --keyserver pool.sks-keyservers.net
Pour ce qui est du stockage de clef privée ou de certificats de révocation, je vous renvoie à mon article sur TrueCrypt.