Crypter des fichiers et des communications : GnuPG

 

Cet article découle d'un besoins, pouvoir crypter des fichiers et des communications. Pour cela on va utiliser GnuPG. Avant tout il est important de comprendre le fonctionnement de la cryptographie asymétrique, je vous conseil cet article de Wikipédia. Il existe des interfaces graphiques pour gérer les paires de clés, mais cependant comme un vrai bon admin nous allons commencer par gérer nos clés en ligne de commande. On verra à la fin de cet article comment utiliser Enigmail avec Thunderbird pour signer et crypter les mails.

Créer et gérer les clés

Installation

On install le paquet suivant

# apt-get install gnupg

 

Création de la clé

gpg --gen-key
gpg (GnuPG) 1.4.9; 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.

gpg: répertoire `/home/guidtz2/.gnupg' créé
gpg: nouveau fichier de configuration `/home/guidtz2/.gnupg/gpg.conf' créé
gpg: AVERTISSEMENT: les options de `/home/guidtz2/.gnupg/gpg.conf' ne sont pas encore actives cette fois
gpg: le porte-clés `/home/guidtz2/.gnupg/secring.gpg` a été créé
gpg: le porte-clés `/home/guidtz2/.gnupg/pubring.gpg` a été créé
Sélectionnez le type de clé désiré:
 (1) DSA et Elgamal (par défaut)
 (2) DSA (signature seule)
 (5) RSA (signature seule)
Votre choix ?

On prends le choix (1) et on choisit une taille de clé (par défaut 2048), ensuite on choisit le temps de validité de la clé, soit 0 pour une clé qui n'expire pas, ou alors on précise un nombre de jours/mois/année. Pour créer l'uid de la clé on rentre les paramètres suivants :

Nom réel: Guillaume Chéramy
Adresse e-mail: guidtz2@cheramy.name
Commentaire: clé de test

Au final on obtient les informations de la clé : pub                                          : correspond à la partie publique Empreinte de la clé uid                                           : l'identifiant complet de la clé sub                                          : correspond à la partie privée de la clé Les 8 derniers caractères de l'empreinte correspondent à l'identifiant pub de la clé.

Création du certificat de révocation

En cas de perte ou d'usurpation de la clé privée par exemple ou lors de la perte ou l'usurpation du mot de passe de votre clé, il vous faudra révoquer votre clé.

# gpg --gen-revoke xxxxxxxx

Remplacer xxxxxxxx par les 8 caractères identifiant votre clé. Et préciser la raison de la révocation.

Gérer les clés

Obtenir la liste des clés

On peut obtenir la liste des clés de notre trousseau avec la commande suivante :

# gpg --list-keys

 

Exporter une clé sur un serveur de clé

On transfert la clé publique sur un serveur de clé pour la mettre à disposition des autres personnes pouvant en avoir besoin :

# gpg --keyserver <keyserver> --send-key <id>

Les serveurs de clés les plus connus sont les suivants : pgp.mit.edu subkeys.pgp.net

Rechercher une clé publique sur un serveur de clé

# gpg --keyserver <keyserver> --search-keys <identifiant>

Si vous ne connaissez pas l'identifiant de la clé vous pouvez chercher une clé par rapport à un nom de personne, un nom d'entreprise, par exemple chercher toutes les clés de Mr Dupont :

# gpg --search-keys dupont

Bon ok il y en a beaucoup.

Ajouter une clé au trousseau à partir d'un serveur

# gpg --keyserver <id>

 

Supprimer une clé publique de son trousseau

# gpg --delete-keys <id>

 

Ajouter ou retirer un uid à une clé

Les personnes ayant plusieurs adresses emails, comme moi, ont besoins de mettre plusieurs uid sur la même clé. On va utiliser la commande interactive suivante :

# gpg --edit-key <id>

La commande adduid permet de créer un uid. La commande uid id permet de sélectionner/déselectionner un id en précisant le numéro de l'id entre parenthèse. La commande deluid permet de supprimer l'uid sélectionné.

Signer une clé publique

Signer une clef publique, c'est certifier que cette clef est bien celle de la personne indiquée par l'identifiant. C'est pour cela qu'il faut faire la vérification d'empreinte avant de signer une clef. Après avoir signé une clef publique vous pouvez la renvoyer sur un serveur. Ceci apporte à tous votre garantie sur l'authenticité de cette clef.
Vérifier l'empreinte

# gpg --fingerprint <identifiant>

Signer la clé

# gpg --sign-key <identifiant>

Renvoyer la clé sur un serveur de clé Voir plus haut.

Changer la date d'expiration de la clé

# gpg --edit-key <identifiant> expire

Il faut bien sur disposer de la clé privée pour pouvoir faire cette modification.

Crypter/décrypter un fichier

Crypter un fichier

Crypter un fichier pour soi

# gpg --default-recipient-self --encrypt fichier_test

Vous obtenez alors un fichier fichier_test.gpg qui est votre fichier crypté.

Crypter un fichier pour plusieurs personnes

Pour cela il faut avoir leur clé publique et de préférence, il faut avoir signé les clés publiques (voir plus haut)

# gpg --recipient <id_recipient_1> --recipient <id_recipient_2> --encrypt fichier_test
Chaque personne désignée comme destinataire, pourra alors décrypter ce message.

 

Crypter et signer en même temps

# gpg --recipient <id_recipient_1> --recipient <id_recipient_2> 
--sign --encrypt fichier_test

 

Décrypter un fichier

# gpg --output fichier_test --decrypt fichier_test.gpg

Votre mot de passe vous sera demandé pour décrypter le fichier, c'est le mot de passe de la clé privée.

Signer et crypter un mail

Avec thunderbird

Pour envoyer des mails de façon sécurisée, on utilisera Enigmail. Enigmail se présente comme une extension à Thunderbird, cet extension va nous permettre de :

  • signer les mails
  • crypter les mails
  • gérer les clés

 

Avec gmail

J'ai pas essayé mais voici de quoi vous guider si vous utilisez gmail :

http://www.linux.com/archive/articles/62369

Les 8 derniers caractères du fingerprint correspondent à l'identifiant pub de la clé.