PGP / Enigmail / Petite intro (partie I)

Jeu 07 avril 2005

J'ai passé une petite partie de ma demi-journée à faire mumuse avec GNUPG et Enigmail. GNUPG, c'est un programme qui permet de gérer en ligne de commande les clés de type PGP, qui font partie des moyens les plus sûrs pour chiffrer / authentifier un e-mail ou un message (voire un programme, sait-on jamais).
Enigmail, c'est une extension pour Mozilla et/ou Thunderbird qui permet de gérer "kalassoury" ces clés privées / publiques patin-couffin.
Je pense que tout ce petit mic-mac risque de m'être très précieux lors de la GPG-key-signing party pendant le LugRadioLive.

Clé privée ou publique, j'y panne que dalle

Moi non plus y'a pas si peu de temps, j'y entravais pas grand-chose à ces histoires de clés privées ou publiques. D'ailleurs, j'ai eu l'impression d'avoir la lumière cette après-midi, je suis pas encore tout à fait sûr d'avoir tout pigé.
M'enfin voilà, en gros, on est une bande de copains, et on voudrait être sûrs que les mails qu'on s'envoie ils sont bien envoyés par la bonne personne. Parce que tu le sais aussi bien que moi, on peut parfaitement se faire passer pour quelqu'un d'autre ; les spammeurs n'arrêtent pas, d'ailleurs.
Pour simplifier, on va faire un réseau de copains, qui seraient 2. Ca fait peu. Mais bon. Y'a [A]ndréa et [B]éatrice. Je choisis volontairement des prénoms de filles, parce que la sécurité informatique, c'est pas sexiste.

Création de la clé d'Andréa

Andréa et Béatrice sont donc deux geekettes sous Linux. Imaginons que Andréa ait envie d'envoyer des secrets de fiiiiiilles à Béatrice, mais qu'elle voudrait surtout que ces secrets soient bien gardés.
Alors, elle ouvre une invite de commande et tape :
$ gpg --gen-key

Ca fait quoi, ça ? Cette commande permet à Andréa de générer une clé qui lui appartient, qui l'identifie. Le mot-clé "clé" est la clé du mystère. En informatique base de données, une clé c'est ce qui identifie de manière formelle un élément, un peu à l'image du numéro de sécu. Et en cryptographie (quand on code un message), la clé est ce qui permet le cryptage / décryptage éventuel.

Andréa doit alors entrer les caractéristiques de sa clé. Quand elle ne sait pas quoi répondre, la bonne réponse est souvent celle par défaut. Par contre, on va lui demander des trucs plus personnels :
Real name: AndréaEmail address: andrea@exemple.comComment: Ma clé persoYou selected this USER-ID:"Andréa (Ma clé perso) < andrea@exemple.com >"

Puis on va lui demander une phrase "mot de passe".
Plus la phrase / l'ensemble de mots sont complexes / longs, mieux c'est. Ex :
Enter passphrase: je hais le printemps et j'adore les framboises
Puis le programme va trifouiller un moment pour générer le plus chaotiquement possible une clé qui sera un mix de tout ça. Il est recommandé de bouger la souris et taper n'importe quoi au clavier (par exemple : "le printemps c'est la plus belle saison") pendant que ça mouline, pour rajouter encore un peu d'entropie au système.
Ayé ! elle est parée. On vérifie :
$ gpg --list-keys/home/andrea/.gnupg/pubring.gpg------------------------------pub 1024D/664B698F 2005-04-07 Andrea (Ma clé perso) < andrea@exemple.com >sub 1024g/264AA21C 2005-04-07
Bon, pour l'instant, y'a pas besoin de comprendre grand-chose. Tout ce qu'on a fait, c'est générer une clé. Comme si on se choisissait un mot de passe, en gros. Sauf que là, le mot de passe, même sous la torture, c'est pas gagné que l'ordi il te le donne. Maintenant, comment on va s'en servir, de ce "mot de passe" ?

Un secret bien gardé

Pour envoyer un message à Béatrice, il va falloir d'abord qu'Andréa donne sa clé publique à Béatrice. Ben oui. Pour que Béatrice puisse lire les messages, il va bien falloir lui donner le code. Mais attention ! Avec un système "ancien", on donnait LE mot de passe, c'est à dire l'équivalent de la phrase du dessus : "je hais le printemps et j'adore les framboises"
- Mais-euh... Pas question que Béatrice connaisse ma phrase secrète, non mais ! se dit Andréa.
Pas de problème. La clé qu'Andréa va faire passer à Béatrice sera illisible :
$ gpg --armor --export andrea@exemple.com > ma_cle_publique$ cat ma_cle_publique-----BEGIN PGP PUBLIC KEY BLOCK-----Version: GnuPG v1.2.5 (GNU/Linux)

mQGiBEJVmi4RBACcD2HbDVElKTmkAv3fr5yDB2SPZjaPD27+pTkNTLM+KGiz+5V9
Z8ZegYXl3CMWaTVKMYwRsxpD9a8avnyAcn1pkYBILGKSbo/35Dbhfv7fAVuZKDz3
go2GK35DYjAaa9hSX9f1/ik0Oav8VAwmfof+xLwLeBSxCfj0UnE4mWwaEwCg7Asy
RrwPDzaIQBGXSPmsnQTa838D/iA0/3oGliqLwVONsjYYuMpfiLtZR/KolYmsQBB+
GSg3u3haeSs1B/lCw76Ce+11wZHb2UNvMEEbxdA1gy7703HPSMN1rv7UCSzsqu5n
5K+HNa2WCKaTVVZxyDwx5E/aiI64fGmLBZuvyflJICZCRw5C6rLl55m+pX7GS92v
oy17BACKbgb8qrTPIerbRBDQspbItwdo8fOdqaGaoxCW+h+G3cyOM7osHjvzBzjw
IuXpOEdI2+tmrkq6B85+rlRwAihGAO2p4hweq0INJTaHuVMakCbvT2ZDi/2D0Dmk
yNYR5woPq9u75ht5+5cB6T+2tBloVKIdWUyFFpJNLprd8sbVSLQrQW5kcmVhIChN
YSBjbMOpIHBlcnNvKSA8YW5kcmVhQGV4ZW1wbGUuY29tPohkBBMRAgAkBQJCVZou
AhsDBQkAAVGABgsJCAcDAgMVAgMDFgIBAh4BAheAAAoJEDGdTBZmS2mPT9MAn3KI
+81X4h9/JH+o+rmW3bdNnjt7AJ4kPeaC7dBR+pAohb7I5xxYNCJLGrkBDQRCVZov
EAQAhvA2tJ6GptdoXCEm9DGQL2haGUwJ6eRNyik8sZONmM0snKAXkj5HtXn+kmbg
RwNjK9SLmWel99LtQWb78wFhkPEhiGemksAlykCw7Eu3ieyZJinUca+nGLL2kxDF
I1v/fSUUK9IoxSWkRpKzB8y5OIHtoJfN3lYPb49ih67rfFcAAwUD/2GUreQzkV96
xC4+2dz/jtZUPnw9VgRzNwlyh/jEOVbuALJgjiqJnWl/varwRaLasRDf8fzta9iV
Ba9BrXWXWxc/5LKbd5ZG5HgQ1TvbEmgexIo13/Juf1Cht0IPPNbkV1/28cCVMGws
Y5e2AeUyxTUACD5cun7Hqhp79btD7c3qiE8EGBECAA8FAkJVmi8CGwwFCQABUYAA
CgkQMZ1MFmZLaY8X5ACg3PD6P3EitHmJQWXxSMcadOVehxMAnjuz3CA+Ukox3Ij9
lbWD9xqIgvKf
=h0n8
-----END PGP PUBLIC KEY BLOCK-----

C'est très clair.
Limpide.
Y'a pas le mot printemps là-dedans, ok ?

Maintenant, soit en imprimant cette clé sur une feuille A4 pour que Béatrice puisse la retaper intégralement (ouh la... sans la moindre faute de frappe, hein ?), soit en se l'envoyant par mail (assez peu sécurisé, ça, on pourrait l'intercepter), soit en se la refilant physiquement ("tiens, voilà ma clé publique sur ma petite clé USB, tu la copies sur ton /home et le tour est joué").

A Béatrice de jouer, maintenant

Béatrice se démerde pour récupérer la clé publique d'Andréa sur son Pingouin, et elle a une commande à faire pour intégrer cette clé dans son trousseau :
$ gpg --import ma_cle_publique
En admettant que le fichier "ma_cle_publique" contient la clé PGP d'Andréa.
Maintenant, Béatrice a en sa possession la clé d'Andréa. Chaque message crypté par Andréa sera décryptable.
Andréa crypte :
$ gpg --out secrets_pour_beatrice --encrypt secrets
Béatrice reçoit un mail, avec en pièce jointe le fichier crypté. Disons-le, c'est une bouillie binaire imbuvable. Elle le décode :
$ gpg --output secrets_pour_beatrice --decrypt le_message_decrypte$ cat le_message_decrypteSalut Béatrice !En fait, j'avais rien à te dire, on s'est déjà envoyé douze mille SMS pour se raconter notre journée.

La prochaine fois, je te montrerais un exemple d'utilisation d'Enigmail, qui est quand même plus utilisable que la ligne de commande pour faire tout ça. En plus, Enigmail te permet de signer un mail plutôt qu'un fichier, ce qui est vachement pratique. Et le décryptage, si tu te démerdes bien, il le fait tout seul.