pgp
Pour faire court. Si on veut s’échanger des mails sécurisés, on se crée une clé avec gpg
(GnuPG), qui contient deux éléments principaux :
- une clé privée
- une clé publique
Une fois cette clé créée, on envoie, ou on met la clé publique à disposition de personnes qui pourraient vouloir nous envoyer des messages chiffrés. Ces personnes vont pouvoir chiffrer leur message avec cette clé publique. Une fois que je reçois ces messages venus de ces personnes, je vais pouvoir les déchiffrer en utilisant ma clé privée. Comme un petit coeur dont on réunit les deux bouts pour ouvrir la boite à bonbons. Et, donc, cela nous assure qu’il n’y a que nous qui puissions accéder aux bonbecs.
Résumé
Jean envoie | écrire mail ---> chiffrement -------------> dans les tuyaux ---------> réception ---> déchiffrement | Marie reçoit
------------|-----------------------------------------------------------------------------------------------------|
clé publique Marie clé privée Marie
- Clé publique — Utilisée pour chiffrer les messages. Elle peut et devrait être à la disposition de tous.
- Clé privée — Utilisée pour déchiffrer les messages. Elle doit être stockée de façon sécurisée sur votre ordinateur. L’accès à votre clé privée est aussi protégé par le mot de passe que vous avez choisi lors de la création de la clé.
Anatomie d’une clé GPG
Un exemple de clé
pub rsa3072 2020-02-15 [SC] [expire : 2022-02-15]
59F4 A04B F874 5D7E 99A1 BC9A 82BC 8E19 118F D0F9
uid [ ultime ] Jean Dupont <salut@jndpnt.fr>
uid [ ultime ] Jean Dupont <jean@dupont.fr>
sub rsa3072 2020-02-15 [E] [expire : 2022-02-15]
# on a d'abord le type de clé (rsa), et sa force (3072). Puis la date de création et la date d'expiration
pub rsa3072 2020-02-15 [SC] [expire : 2022-02-15]
# ici, c'est l'empreinte (fingerprint) de la clé. Cette empreinte sert à identifier la clé publique
59F4 A04B F874 5D7E 99A1 BC9A 82BC 8E19 118F D0F9
# une première identité gérée par cette clef
uid [ ultime ] Jean Dupont <salut@jndpnt.fr>
# dans la même clé, on a une autre identité (un autre mail)
uid [ ultime ] Jean Dupont <jean@dupont.fr>
# et ça, c'est la subkey. Je ne sais pas trop ce que c'est, ça reprend les infos de type, force et dates de création/expiration
sub rsa3072 2020-02-15 [E] [expire : 2022-02-15]
On peut avoir des informations encore plus complètes sur la clé en faisant
gpg -a --export {keyid} | gpg --list-packets --verbose
Plus de détails sur l’anatomie d’une clef ici : https://davesteele.github.io/gpg/2014/09/20/anatomy-of-a-gpg-key/
Créer une clé
gpg --gen-key # générer une paire de clés (publique + privée)
L’id de la clé correspond aux 8 derniers chiffres de la chaîne
pub
(e.g.587F5G8N
)
Créer un certificat de révocation
Ce certificat permet d’informer ceux qui possèdent notre clef publique, dans le cas où notre clef serait corrompue e.g.
gpg --gen-revoke {keyid}
On peut générer ce certificat directement dans un fichier
gpg --gen-revoke mon_id >.gnupg/revoque.macle
On peut ensuite révoquer, si on a un problème : plus d’infos ici > https://docs.abuledu.org/abuledu/mainteneur/creer_une_cle_gpg#revoquer_une_cle_avec_un_certificat_de_revocation
L’idée, c’est ensuite de garder ce fichier ailleurs, sur un autre support physique
Publier sa clé
En plus de donner sa clé publique pour que les gens nous écrivent des mails sécurisés, on peut la publier sur un des servurs qui gèrent l’annuaire d’identités. Il y a pgp.mit.edu
gpg --keyserver pgp.mit.edu --send-keys {keyid} # envoyer une clé
gpg --keyserver pgp.mit.edu --search-key '{email}' # vérifier que la clé est disponible
Exporter une clef publique
On peut afficher sa clé publique en faisant gpg --armor --export {email}
(--armor
permet de l’affiche en ASCII
)
gpg --armor --export {email} > output.asc
On peut ensuite la mettre à disposition sur un serveur, par exemple.
Gestion des clés
Soit avec Seahorse
(GUI pour gestion des clés) sudo apt-get seahorse
En ligne de commande, on utilise gpg
gpg --list-keys # lister les clés
Éditer une clé
gpg --edit-key {keyid}
Puis, on atterrit sur
gpg >
On peut, par exemple, ajouter une identité
gpg > adduid # et on se retrouve sur le processus de création d'identité (nom, puis email, puis description)
Sauver & quitter
gpg > save
gpg > quit
Voir https://www.gnupg.org/gph/en/manual/r899.html pour voir le détail de la commande --edit-key
.
Utiliser clé w/ Mutt
Écrire un mail. Ensuite, on attache une clé au mail : Esc+K
. On renseigne l’id de la clé pour l’associer. Puis, on chiffre et on signe le mail > P
, puis on choisit l’option.
Ecrire un mail chiffré à quelqu’un
On doit d’abord obtenir sa clé publique (fichier .asc
e.g.). Puis, on l’ajoute à notre base de clefs.
gpg --import {recipient-publickey.asc}
Ensuite, on écrit son mail. Puis, on attache la clé publique du destinataire Esc+K
, et on chiffre et signe le message p
, puis d
Copie du message sent/
: Il faut activer l’option fcc_clear
de mutt pour pouvoir lire les messages envoyés (effectivement, ils sont chiffrés avec la clé publique du destinataire, donc illisibles pour nous).
# muttrc
set fcc_clear=yes
Source : https://stackoverflow.com/questions/47729099/how-to-store-decrypted-sent-messages-with-mutt-pgp
Ressources
- Résumé sur la cryptographie asymétrique : https://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique#Diffusion_des_clefs_publiques
- Créer une clé GPG : https://docs.abuledu.org/abuledu/mainteneur/creer_une_cle_gpg
- Échanger des clés : https://www.gnupg.org/gph/en/manual/x56.html
- Gestion de clés OpenPGP : https://riseup.net/fr/security/message-security/openpgp/gpg-keys#importer-depuis-un-fichier-de-cl%C3%A9
- Exporter sa clé : https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-gnupg-export.html
- Use GPG with mutt : https://gitlab.com/muttmua/mutt/-/wikis/MuttGuide/UseGPG#content-body
- Résumé de l’utilisation de GnuPG sur la doc Ubuntu : https://doc.ubuntu-fr.org/gnupg
- Une doc un peu plus technique sur l’utilisation du chiffrement w/ mutt : https://yavin4.ovh/index.php/mutt-configuration-avancee/
- PGP avec Thunderbird : https://support.mozilla.org/fr/kb/signature-numerique-et-chiffrement-des-messages
- Petit résumé graphique : https://www.mailvelope.com/fr/help#how_it_works
- GnuPG best practices : https://riseup.net/en/security/message-security/openpgp/best-practices