Utilisation des commandes de cryptographie avec GnuPG

Introduction

Ce document est un aide mémoire pour accéder rapidement aux commandes de cryptographie avec GnuPG.

Dans ce qui suit, un outil désigne un logiciel compatible avec GnuPG, qui peut être gpg, gpg2 en ligne de commande, ou en mode graphique gpa (Gnu Privacy Assistant) ou seahorse sous Linux. Il peut avoir d'autres noms comme gpg4win macgpg pour d'autres plateformes.

Générer ses clés

Pour commencer on a besoin de disposer d'un paire de clés, une publique et une privée. La clé privée est protégée par un mot ou phrase de passe dont il faut se souvenir.

gpg2 --gen-key

La clé privée reste toujours en un lieu secret;

La clé publique peut être exportée sur un serveur de clés au besoin. La commande suivante envoie la clé sur le serveur keys.gnupg.net par défaut:

gpg2 --send-keys 3C4AAC69

Pendant qu'on y est, on peut se générer un certificat de révocation, qui sera utile si la clé privée est compromise: phrase de passe perdue, clé volée. Le certificat doit rester en lieu secret.

gpg2 --output 3C4AAC69-revoke.asc --gen-revoke 3C4AAC69

Signature d'un fichier

La signature est une marque permettant et ayant pour but d'identifier l'auteur de la signature.

Il faut : un outil + le fichier à signer + la clé privée de Celui qui signe.

gpg2 --default-key 3C4AAC69 --armor --detach-sign -o pgrm.tar.gz.sig pgrm.tar.gz

Il en résulte un fichier de signature pgrm.tar.gz.sig.

Vérification de signature d'un fichier

Il faut : un outil + le fichier signé + le fichier de signature + la clé publique de Celui qui a signé.

gpg2 --verify pgrm.tar.gz.sig

Si la clé publique n'est pas installée, la commande précédente donne une erreur public key not found, mais aussi l'ID de la clé.

gpg: Signature made Sat 20 Jun 2009 12:15:35 AM CEST using RSA key ID 1CE0C630
gpg: Can't check signature: public key not found

Il faut alors importer la clé publique, puis recommencer la commande de vérification.

gpg2 --recv-keys  1CE0C630

Il y a de grandes chances pour que vous obteniez un message de ce genre...

gpg2 --verify pgrm.tar.gz.sig
gpg: Signature made Sun 27 Oct 2013 10:14:45 AM CET using RSA key ID 3C4AAC69
gpg: Good signature from "Hervé Quillévéré (dist sig) "
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: C18A 43D7 A6F0 E44B 59C0  572C 02D7 40BE 3C4A AC69

... ce qui veut dire que vous (et votre machine) n'avez pas encore fait confiance à la clé que vous avez importer. Dans ce cas, soit vous faites confiance, soit vous avez un doute et vous me demandez alors l'empreinte de ma clé primaire que vous pourrez comparer à celle que votre machine vous indique.

Vous devez alors indiquer votre niveau de confiance pour cette clé publique:

gpg2 --edit-key 3C4AAC69
gpg (GnuPG) 2.0.19; Copyright (C) 2012 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.


pub  2048R/3C4AAC69  created: 2011-04-21  expires: never       usage: SCEA
                     trust: full          validity: full
[  full  ] (1). Hervé Quillévéré (dist sig) 

gpg> trust
pub  2048R/3C4AAC69  created: 2011-04-21  expires: never       usage: SCEA
                     trust: full          validity: full
[  full  ] (1). Hervé Quillévéré (dist sig) 

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 4

uid  Hervé Quillévéré (dist sig) 
sig!3        3C4AAC69 2011-04-21  [self-signature]
sig!         B6405C31 2013-10-31  Hervé@omix (validation key) 
Command> quit

Il est alors reommandé de signer la clé publique avec votre propre jeu de clé et de synchroniser le serveur. C'est bien sûr, ce que j'ai fait avec un jeu de clé de validation, car je ne peux que faire confiance à la clé que j'ai exporté. C'est un peu lourd comme manipulations, mais avec les interfaces graphiques seahorse, gpa, c'est plus intuitif !

On arrive finalement a une vérification de signature, sans warning:

gpg2 --verify pgrm.tar.gz.sig
gpg: Signature made Sun 27 Oct 2013 10:14:45 AM CET using RSA key ID 3C4AAC69
gpg: Good signature from "Hervé Quillévéré (dist sig) "

Crypter un fichier pour un destinataire

Un fichier crypté ne peut être lu que par le propriétaire de la clé privée correspondant à la clé publique qui l'a crypté.

Il faut : un outil + le fichier à crypter + la clé publique du destinataire.

gpg2 --encrypt --recipient 'www.rvq.fr' monfichier.txt

Il en résulte un fichier crypté monfichier.txt.gpg.

Decrypter un fichier crypté par le destinataire

Il faut : un outil + le fichier crypté + la clé privée du destinataire.

gpg2 -o monfichier.txt --decrypt monfichier.txt.gpg

Cryptage symmétrique d'un fichier

Le cryptage symmétrique permet de protéger un fichier et son contenu: un numéro de carte bleue stocké dans un fichier sur sa machine par exemple. Seuls ceux qui ont le mot de passe peuvent décrypter le fichier.

Il faut : un outil + le fichier à crypter + un mot ou une phrase de passe.

gpg2 --symmetric monfichier.txt

Il en résulte un fichier crypté monfichier.txt.gpg que l'on peut décrypter avec:

gpg2 -o monfichier.txt --decrypt monfichier.txt.gpg

Exporter une clé publique

Il peut être nécessaire d'exporter une clé publique, sans pour autant passer par un serveur. La commande suivante exporte en format binaire:

gpg2 --output 3C4AAC69.gpg --export 3C4AAC69

La commande suivante exporte en format ascii:

gpg2 --armor --output 3C4AAC69.gpg --export 3C4AAC69

Importer une clé publique

La commande suivante importe la clé:

gpg2 --import 3C4AAC69.gpg

Comme indiqué plus haut, il est recommandé de signer la clé:

gpg2 --edit-key B6405C31
gpg (GnuPG) 2.0.22; Copyright (C) 2013 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.


pub  3072D/B6405C31  created: 2013-10-31  expires: never       usage: SC  
                     trust: unknown       validity: unknown
sub  4096g/A12E8986  created: 2013-10-31  expires: never       usage: E   
[ unknown] (1). Hervé@omix (validation key) 

gpg> sign

pub  3072D/B6405C31  created: 2013-10-31  expires: never       usage: SC  
                     trust: unknown       validity: unknown
 Primary key fingerprint: 32E0 033E 48DD D395 7AE5  F7BF CE7C F4B2 B640 5C31

     Hervé@omix (validation key) 

Are you sure that you want to sign this key with your
key "Hervé Quillévéré (dist sig) " (3C4AAC69)

Really sign? (y/N) y

You need a passphrase to unlock the secret key for
user: "Hervé Quillévéré (dist sig) "
2048-bit RSA key, ID 3C4AAC69, created 2011-04-21


gpg> check
uid  Hervé@omix (validation key) 
sig!3        B6405C31 2013-10-31  [self-signature]
sig!         3C4AAC69 2013-10-31  Hervé Quillévéré (dist sig) 

gpg> q
Save changes? (y/N) y

Références

  1. GPG Quick Start.
  2. The GNU Privacy Guard.