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.
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
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.
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)"
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.
Il faut : un outil + le fichier crypté + la clé privée du destinataire.
gpg2 -o monfichier.txt --decrypt monfichier.txt.gpg
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
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
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