On utilise souvent gpg pour encrypter les mails avant envoi avec le module Enigmail installé dans Icedove ou Thunderbird.

Mais à partir du moment où on a généré une paire de clé sur sa machine, on peut très bien aussi utiliser celle-ci pour encrypter nos fichiers sensibles de la même façon que si on s'envoyait ces fichiers par mail à nous même.

Imaginons que vous n'ayez pas encore généré de clé gpg, on va donc le faire maintenant:

Etape 1: Générer une clé RSA avec gpg

debian@debian-jessie:~$ gpg --gen-key
gpg (GnuPG) 1.4.18; Copyright (C) 2014 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.

Sélectionnez le type de clef désiré :
   (1) RSA et RSA (par défaut)
   (2) DSA et Elgamal
   (3) DSA (signature seule)
   (4) RSA (signature seule)
Quel est votre choix ? 1
les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.
Quelle taille de clef désirez-vous ? (2048) 1024
La taille demandée est 1024 bits
Veuillez indiquer le temps pendant lequel cette clef devrait être valable.
         0 = la clef n'expire pas
      <n>  = la clef expire dans n jours
      <n>w = la clef expire dans n semaines
      <n>m = la clef expire dans n mois
      <n>y = la clef expire dans n ans
Pendant combien de temps la clef est-elle valable ? (0) 0
La clef n'expire pas du tout
Est-ce correct ? (o/N) O

Une identité est nécessaire à la clef ; le programme la construit à partir
du nom réel, d'un commentaire et d'une adresse électronique de cette façon :
   « Heinrich Heine (le poète) <heinrichh@duesseldorf.de> »

Nom réel : GPG Test
Adresse électronique : gpg-test@debian-jessie
Commentaire : 
Vous avez sélectionné cette identité :
    « GPG Test <gpg-test@debian-jessie> »

Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique
ou (O)ui/(Q)uitter ? O
Une phrase secrète est nécessaire pour protéger votre clef secrète.

De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire
autre chose pour que le système d'exploitation puisse rassembler plus
d'entropie (287 octets supplémentaires sont nécessaires).
.+++++
+++++
De nombreux octets aléatoires doivent être générés. Vous devriez faire
autre chose (taper au clavier, déplacer la souris, utiliser les disques)
pendant la génération de nombres premiers ; cela donne au générateur de
nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.
.....+++++
.+++++
gpg: clef B92948DE marquée de confiance ultime.
les clefs publique et secrète ont été créées et signées.

gpg: vérification de la base de confiance
gpg: 3 marginale(s) nécessaire(s), 1 complète(s) nécessaire(s),
     modèle de confiance PGP
gpg: profondeur : 0  valables :   1  signées :   0
     confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.
pub   1024R/B92948DE 2017-02-12
 Empreinte de la clef = C5F3 6E3A 69D8 7A63 434F  43BF 4768 0256 B929 48DE
uid                  GPG Test <gpg-test@debian-jessie>
sub   1024R/7F8FD1CF 2017-02-12

Afin que la génération de la clé ne soit pas trop longue, on a utilisé une longueur de clé de 1024 bits. Et hormis l'adresse e-mail, le nom réel et la passphrase de la clé privée, on a conservé les valeurs par défaut.

Vérifions la clé générée

Etape 2: Lister les clés gpg

debian@debian-jessie:~$ gpg --list-keys --armor
/home/debian/.gnupg/pubring.gpg
-------------------------------
pub   1024R/B92948DE 2017-02-12
uid                  GPG Test <gpg-test@debian-jessie>
sub   1024R/7F8FD1CF 2017-02-12

Voilà, nous somme prêt à encrypter un fichier.

Etape 3: Encrypter un fichier avec gpg

Voici les données que nous allons encrypter:

debian@debian-jessie:~$ cat secret_file.txt
This file contains sensitive data that we do not want to disclose.

That's why we will encrypt it with gpg asymetric encryption.

La commande à utiliser est toute simple. Il faut préciser:

  • la clé publique à utiliser pour encrypter, ce qui se fait en donnant l'adresse e-mail de celle-ci,
  • le fichier à encrypter
debian@debian-jessie:~$ gpg --recipient gpg-test@debian-jessie --encrypt secret_file.txt 
debian@debian-jessie:~$ ls secret_file.txt*
secret_file.txt  secret_file.txt.gpg

Le fichier initial secret_file.txt a été encrypté dans un fichier secret_file.txt.gpg.

Attention: Le fichier initial secret_file.txt n'est pas supprimé par gpg, c'est à vous de le faire explicitement !!!

Maintenant si on souhaite que le fichier encrypté s'appele autrement, par exemple safe_file.ext pour tromper l'ennemi:

debian@debian-jessie:~$ gpg --recipient gpg-test@debian-jessie --output safe_file.ext --encrypt secret_file.txt 

Cela se fait avec le flag --output qu'il faut placer avant le flag --encrypt.

Etape 4: Décrypter un fichier encrypté avec gpg

Maintenant, nous allons décrypter le fichier précédemment encrypté de la façon suivante:

debian@debian-jessie:~$ gpg --recipient gpg-test@debian-jessie --decrypt safe_file.ext 

Une phrase secrète est nécessaire pour déverrouiller la clef secrète de
l'utilisateur : « GPG Test <gpg-test@debian-jessie> »
clef RSA de 1024 bits, identifiant 7F8FD1CF, créée le 2017-02-12 (identifiant de clef principale B92948DE)

gpg: chiffré avec une clef RSA de 1024 bits, identifiant 7F8FD1CF, créée le 2017-02-12
      « GPG Test <gpg-test@debian-jessie> »
This file contains sensitive data that we do not want to disclose.

That's why we will encrypt it with gpg asymetric encryption.

On utilise maintenant le flag --decrypt, gpg nous demande la passphrase de la clé privée nécessaire à la décryption, et le contenu décrypté s'affiche sur la sortie standard.

Si l'on souhaite que le contenu décrypté soit enregistré dans le fichier output.txt, on utilise le flag --output comme suit:

debian@debian-jessie:~$ gpg --recipient gpg-test@debian-jessie --output output.txt --decrypt safe_file.ext 

Une phrase secrète est nécessaire pour déverrouiller la clef secrète de
l'utilisateur : « GPG Test <gpg-test@debian-jessie> »
clef RSA de 1024 bits, identifiant 7F8FD1CF, créée le 2017-02-12 (identifiant de clef principale B92948DE)

gpg: chiffré avec une clef RSA de 1024 bits, identifiant 7F8FD1CF, créée le 2017-02-12
      « GPG Test <gpg-test@debian-jessie> »

Vérifions le fichier décrypté:

debian@debian-jessie:~$ cat output.txt 
This file contains sensitive data that we do not want to disclose.

That's why we will encrypt it with gpg asymetric encryption.

Voilà, ce billet est un peu long. J'espère qu'il démystifie quelque peu l'utilisation de gpg pour ceux qui ne l'utilisent pas habituellement.