Principe
Gnupg permet de chiffrer et de signer ses mails. Pour cela, il est nécessaire pour chaque correspondant de disposer de deux clés liées : une clé privée et une clé publique. Les clés publiques sont disponibles pour tout un chacun. Les clés privées ne sont à remettre à personne. Avec une clé publique, on peut chiffrer un message qui ne pourra être déchiffré que par le propriétaire de la clé privée correspondante. Avec la clé privée, on peut chiffrer un message qui ne pourra être déchiffré que par la clé publique.
Ainsi, pour vous envoyer un message chiffré, votre correspondant va le chiffrer avec votre clé publique. Comme vous êtes le seul à posséder la clé privée correspondante, vous êtes le seul à pouvoir le déchiffrer.
Dans l’autre sens, pour envoyer à votre correspondant un message chiffré, vous aller utiliser sa clé publique. Comme il est le seul à disposer de la clé privée correspondante, lui seul pourra déchiffrer votre message.
Simultanément, pour vous identifier, il vous suffit de chiffrer votre message avec votre clé privée. Comme seule la clé publique correspondant à votre clé privée pourra le déchiffrer, vous serez obligatoirement identifié.
Installation
Vous pouvez réaliser l’installation par la commande :
apt-get install gnupg
En ne spécifiant pas la version que vous désirez, vous installerez GnuPG 2.x, soit la dernière version de GnuPG.
Il est important de bien spécifier les droits sur le dossier de configuration :
~/.gnupg
à l’aide des commandes :
chown -R $(whoami) ~/.gnupg/
find ~/.gnupg -type f -exec chmod 600 {} \;
find ~/.gnupg -type d -exec chmod 700 {} \;
On spécifie ainsi que le répertoire et tous ses fichiers (-R) appartiennent à l’utilisateur ($(whoami)), puis que tout les fichiers ne sont accessibles en lecture et écriture qu’à l’utilisateur propriétaire (droits à 600 : rw) et que le répertoire lui-même est traversable (x) et accessible en lecture et écriture (rw) pour le propriétaire (droits à 700 : rwx).
Après son installation, vous disposerez d’un ensemble de commandes pour lesquelles vous pourrez trouver de l’aide avec :
man gpg
Création d’une paire de clés
La commande de création d’une paire de clé est :
gpg --full-generate-key
Vous devez ensuite choisir le type de clé, sa longueur, sa durée de validité, le nom associé (nom et prénom à mettre sur la même ligne), l’adresse mail correspondante, un commentaire (tout cela apparaîtra sous la forme : Nom Prenon (commentaire) <adressemail>) et donner une phrase de passe longue.
Vous pouvez ensuite vérifier si votre clé a bien été créée en listant l’ensemble des clés dont vous disposez avec :
gpg --list-keys
La liste des clés retournées devrait contenir l’adresse e-mail choisie et présenter une empreinte dont les huit dernier chiffres constituent l’identifiant.
Celui-ci est utilisé pour envoyer la partie publique de la clé sur un serveur de clé public de la manière suivante :
gpg --keyserver keys.openpgp.org --send-keys identifiant
Pour trouver les clés publiques de vos correspondants, pour autant qu’ils les aient publiées sur un serveur de clés, on utilise :
gpg --search-key identifiant
ou
gpg –auto-key-locate keyserver –locate-keys adresse_mail
en ayant préalablement défini le serveur dans votre fichier de configuration gpg.conf :
keyserver hkps://keys.openpgp.org
Pour récupérer ensuite cette clé publique sur le serveur de clés, on utilise :
gpg --keyserver keys.openpgp.org --recv-keys son_id_clef
en adaptant le nom du serveur en fonction de celui qu’on choisit, sachant que les clés publiques sont répliquées sur tous les serveurs au bout de quelques heures.
Vous pouvez aussi demander à votre correspondant de vous envoyer sa clé publique par mail et tenter de la récupérer directement (Ctrl-K sous mutt) ou récupérer le fichier joint, au format .asc par exemple. Ensuite pour l’importer dans votre trousseau de clés :
gpg --import ~/dossier/lefichier.asc/
Vérifiez ensuite sa présence par gpg –list-keys.
Pour effacer une clé publique :
gpg --delete-key adresse@mail
Et pour effacer une clé privée :
gpg --delete-secret-keys adresse@mail
Finalement, si vous voulez afficher l’empreinte d’une clé du trousseau :
gpg --fingerprint adresse@mail
Chiffrer un fichier
Pour chiffrer un fichier de manière asymétrique, c’est-à-dire avec la clé publique d’un destinataire en vue de le lui envoyer, il faut utiliser la commande :
gpg -e --recipient sonID monFichier
-e signifie « encrypt ». Pour signer (-s) avec l’une de mes clé publique et chiffrer avec la sienne :
gpg -s --local-user monID -e --recipient sonID monFichier
On peut aussi utiliser la syntaxe suivante :
gpg --encrypt --sign --armor --recipient emailDestinataire monFichier
On sign ainsi avec la clé par défaut (sinon, il faut utiliser –local-user pour préciser la clé qu’il faut utiliser pour signer) et on chiffre avec celle du destinataire donné par son email. Le fichier chiffré monFichier devient monFichier.asc et est signé et crypté. L’option armor précise qu’on veut un fichier chiffré en ASCII, du texte au lieu d’un fichier binaire par défaut. Ainsi, par exemple, il faut écrire :
gpg --encrypt --sign --local-user truc@machin.org --armor --recipient chose@autre.org monFichier
pour crypter le fichier monFichier en monFichier.asc avec la clé publique de chose@autre.org et le signer avec la clé privée de truc@machin.org.
Pour déchiffrer le fichier chiffré comme décrit ci-dessus, il faut utiliser la syntaxe :
gpg --decrypt monFichier.asc > monFichier
Évidemment, monFichier peut être pourvu d’une extension. Par exemple : monFichier.png deviendra monFichier.png.asc par chiffement et sera déchiffré en monFichier.png.
Utilisation avec mutt
L’utilisation de pgp avec mutt est immédiate. Si un message vous est remis chiffré, en l’ouvrant votre phrase de chiffrement vous sera demandée pour pouvoir le lire. De plus, s’il est signé, cela sera mentionné au bas du mail.
Pour récupérer la clé publique de votre correspondant, il suffit de presser sur : Ctrl-K. Mutt, va alors chercher celle-ci et l’importer dans votre trousseau de clés.
Pour chiffrer un mail, il faut presser la touche p, puis plusieurs choix sont possibles :
- c : chiffre avec la clé du destinataire ou demande avec quelle clé cela doit être fait,
- s : signe avec la clé par défaut,
- e : permet de spécifier avec quelle clé il faut signer (on spécifie une adresse mail),
- d : chiffre et signe avec la clé par défaut,
- m : s/Mime ?
- r : ne fait rien.
On choisit les clé nécessaires et enfin on l’envoie avec y. Cela signifie aussi que pour répondre à un message signé et chiffré sans que la réponse soit chiffrée ou sans qu’elle ne soit chiffrée et signée, voir sans rien du tout, il suffit d’utiliser la touche p et de choisir l’une ou l’autre des solutions.
Remarquez que si vous vous retrouvez bloqué parce que mutt vous demande quelque chose que vous n’avez pas, comme le numéro de la clé d’un correspondant, vous pouvez ressortir de l’invite à la demande avec Ctrl-G.
Pour diffuser sa clé publique en même temps qu’on envoie un message, il suffit de presser sur ESC k pour l’attacher au message. Une demande du numéro d’ID de la clé qu’on veut attacher sera faite. Un gpg –list-keys permettra de trouver les 8 dernier caractères de l’ID.
On peut voir si un message contient une clé publique par l’intermédiaire du drapeau K. S’il est présent, une clé l’est aussi. Pour la récupérer, il suffit d’utiliser CTRL K.
Un problème qui peut apparaître vient du fait qu’en chiffrant uniquement les messages envoyés avec la clé publique de leur destinataires, on s’empêche de les relire. Ainsi, par défaut, si on ne précise pas à mutt qu’il est nécessaire de réaliser une copie chiffrée avec notre propre clé des réponses chiffrées qu’on envoie, on ne peut ensuite les relire. Pour le spéficier, il faut mettre dans ./mutt_files/gpg.rc :
set pgp_check_gpg_decrypt_status_fd
Un autre problème qui peut apparaître si on dispose de plusieurs clé est que la clé utilisée pour signer ne soit pas la bonne. En effet, mutt utilise par défaut la clé privée du compte principal pour signer les messages envoyés. Or, si le destinataire s’attend à une signature faite avec une autre clé, il recevra l’avertissement d’une signature invalide. Pour résoudre ce problème, il faut spécifier quelle clé privée utiliser pour signer. Par exemple, on peut utiliser un hook sur la boite aux lettres du compte disposant de la seconde clé :
folder-hook boiteauxlettres set pgp_sign_as="idclé"
Ainsi, tous les mails envoyés depuis cette boite aux lettres seront signés par la clé d’identifiant idclé. Pour autant qu’on ait aussi mis un hook pour l’adresse mail :
folder-hook boiteauxlettres set from="adressemail"
le destinataire verra non seulement une bonne signature, mais pourra répondre à la bonne seconde adresse.
Pour finir, quelques références, dont la première est très claire :
https://linuxfr.org/news/bien-demarrer-avec-gnupg#toc-autres-m%C3%A9thodes-de-distribution
https://gnupg.org/howtos/fr/GPGMiniHowto-3.html
https://ungeek.fr/gpg-et-le-chiffrement-pour-tous/#communiqueravecunkeyserver