12 novembre 2007
Utilisation basique de GnuPG pour crypter et décrypter des fichiers
GnuPG (ou GPG) est un logiciel de cryptographie complet qui implémente la norme OpenPGP. Les possibilités de GnuPG dépassent largement le cadre de ce billet, ceux qui veulent approfondir le sujet se réjouiront de la doc officielle.
GnuPG est préinstallé sous Debian et Ubuntu ainsi qu’avec la majorité des distributions Linux je crois. Le projet Gpg4win fournit un programme d’installation pour Windows qui inclus GnuPG et différents modules complémentaires. Les commandes de gpg sont les mêmes dans les différents environnements. GnuPG est avant tout un logiciel de cryptage asymétrique (clé publique – clé privée) et son domaine de prédilection est la transmission sécurisée d’information entre utilisateurs. Mais on peut aussi s’en servir pour faire du cryptage simple, c’est ce qu’on va voir ici.
Le problème à résoudre est le suivant :
Un utilisateur gère sur son poste de travail des informations confidentielles. L’accès au poste de travail étant protégé, on estime la sécurité suffisante sur le poste (ça pourrait se discuter mais c’est pas le sujet). Par contre les sauvegardes sont effectuées sur un serveur dont l’accès est public. On ne peut donc pas y sauvegarder les données confidentielles en l’état.
La solution va être de crypter les données avant de les sauvegarder, voilà comment :
Génération d’un paire de clés :
gpg --gen-key gpg (GnuPG) 1.4.7; Copyright (C) 2006 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) (5) RSA (sign only) Your selection? 1 DSA keypair will have 1024 bits. ELG-E 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 <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 Key does not expire at all 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) <heinrichh@duesseldorf.de>" Real name: Michel Email address: michel@martin.com Comment: You selected this USER-ID: "Michel <michel@martin.com>" 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 62757D49 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 pub 1024D/62757D49 2007-11-12 Key fingerprint = 9B05 2259 683C 70CC D73C 3E47 816C 06FE 6275 7D49 uid Michel <michel@martin.com> sub 2048g/5589D5F6 2007-11-12 |
Ca y est on a notre paire de clés. Attention à ne pas oublier la « passphrase », il n’y a aucun moyen de la récupérer. Elle n’est pas nécessaire pour crypter, mais sera demandée au décryptage. On peut mettre une passphrase vide, mais la sécurité est moindre.
L’étape suivante est de sauvegarder la clé privée, et la conserver en lieu sûr!!! :
gpg --export-secret-keys -a michel > michel.sec |
Crypter le fichier confidentiel.doc :
gpg gpg -e -r Michel confidentiel.doc |
Cette commande crée le fichier crypté confidentiel.doc.gpg qui peut être stocké sans crainte sur des serveurs publics, tant que la clé privée n’est pas compromise.
Pour décrypter sur le poste qui contient les clés (la passphrase est demandée) :
gpg confidentiel.doc.gpg |
Pour décrypter sur un autre poste il faut d’abord importer la clé privée :
gpg --import michel.sec |
Voilà, c’est juste un aperçu rapide d’une application pratique du cryptage avec gpg.