Débuter avec GPG et signer des fichiers

GnuPG est une implémentation libre de PGP, un algorithme de chiffrage asymétrique. Le principe est simple, contrairement aux algorithmes symétriques où la même clé permet de coder et décoder un message, ici lorsqu'un message a été chiffré avec une clé, on doit utiliser l'autre clé pour le déchiffrer.

Ce système est donc un chiffrage fort, et réduit les risques inhérents au partage des clés de chiffrage. Un autre effet très désirable est l'identification. En effet, un message chiffré grâce à une clé connue ne pourra être déchiffrée que par l'autre clé et vice-versa. Donc chiffrer un texte connu grâce à sa clé privée permet à un correspondant de s'assurer l'identité du contact en déchiffrant le morceau de texte connu à l'aide de la clé publique de la personne, et en vérifiant l'intégrité du texte connu.

Une application de ceci est bien évidemment dans les communications. Mais aussi lorsqu'on met à disposition un logiciel, pour s'assurer que le paquet téléchargé provient bien du développeur, et pas d'un pirate ayant réussi à uploader un paquet contenant du code malveillant.

Nous allons ici nous intéresser à cette dernière possibilité et tout d'abord comment générer son couple de clés et publier sa clé publique.

Créer un couple de clés

Rien de plus simple. Ouvrez un terminal et lancez la commande:

$ gpg --gen-key

Validez les choix par défaut puis entrez les informations demandées, enfin entrez un mot de passe de votre choix. Listez ensuite vos clés et vous devriez voir quelque chose comme ceci:

$ gpg --list-keys
/home/etenil/.gnupg/pubring.gpg
-------------------------------
pub   2048R/01234578 2011-12-09
uid                  Etenil (Clé de test) <toto@tagada.com>
sub   2048R/87654321 2011-12-09

Arrêtons nous une seconde sur ces informations. Ici la clé pub est la clé publique, et la clé sub la clé privée ; 2048R représente la force de la clé et le bout de texte qui suit (après le '/') et l'ID de la clé. Notez bien l'ID de votre clé publique car elle va servir.

Maintenant nous pouvons publier notre clé publique sur un serveur de clés connu. Notez au passage que vous ne pourrez pas effacer votre clé publique dudit serveur (elle sera dupliquée par les autres serveurs de toute façon) mais que vous pourrez la révoquer si elle est compromise ou bien inutile (elle deviendra invalide donc).

Pour publier votre clé procédez comme suit:

$ gpg --send-keys --keyserver pgp.mit.edu 01234578

J'utilise ici le serveur de clés du MIT (pgp.mit.edu), mais vous pouvez bien entendu en utiliser un autre ou faire le votre si ça vous dit. À partir de maintenant vous pouvez effectivement utiliser vos clés avec d'autres personnes.

Signer un fichier

Comme dit plus haut, signer un fichier est très utile pour s'assurer de son origine. Pour cela, créez un fichier quelconque (appelons-le toto.ex) et procédez comme suit:

$ echo "abcdefg" > toto.ex
$ gpg --sign --detach-sign toto.ex

Cela créera un fichier toto.ex.sig, lequel peut être utilisé pour vérifier l'origine du fichier toto.ex. Pour cela faites comme suit:

$ gpg --verify toto.ex.sig
gpg: Signature made Fri 09 Dec 2011 15:56:21 GMT using RSA key ID 01234578
gpg: Good signature from "Etenil (clé de test) <toto@tagada.com>"

Alors que ce passe t'il si on modifie le fichier signé? Essayons:

$ echo "hijkl" >> toto.ex
$ gpg --verify toto.ex.sig
gpg: Signature made Fri 09 Dec 2011 15:56:21 GMT using RSA key ID 01234578
gpg: BAD signature from "Etenil (clé de test) <toto@tagada.com>"

Notez bien le BAD signature dans le compte-rendu. Voilà le travail!

Vus : 1183
Publié par Etenil : 58