Le standard OpenPGP et le chiffrement tout ça

Sécurité / Vie Privée 11 août 2021

Préambule

Alors bonjour.

Je prends cet air solennel parce qu'aujourd'hui ça déconne pas. On rentre dans du sérieux, de l'article de compèt' bien mastoc avec un sujet difficile à avaler. Mais n'ayez crainte, tel une maman oiseau je vous ai tout pré-digéré afin de vous simplifier l'ingestion de tout ceci.

Cet article a pour vocation d’approfondir le sujet des clés PGP, de leur usage ou même tout simplement de leur fonctionnement.

Ce document est donc là pour vous présenter le concept du chiffrement asymétrique (ouuuuh ça fait peur). Y a plusieurs parties, mais chacune traite un sujet précis donc je ne vous en voudrais pas si vous passez directement à ce qui vous intéresse.

Ah et ça commence un peu brut, mais les blagues arrivent petit à petit vous inquiétez pas.

Et aussi toutes les commandes et explications se font sur un système GNU/Linux. Tout simplement parce que c'est plus simple et que c'est moi qui décide.

Présentation

Je commencerais par présenter rapidement ce terme de chiffrement asymétrique.

Chiffrer un message c'est utiliser une suite de caractères propre à ton interlocuteur, mélanger le texte de ton mail avec, et le rendre lisible uniquement avec une autre suite de caractères que seul ton interlocuteur possède. C'est très simplifié mais pas forcément clair alors je vais détailler un peu.

GPG est le diminutif de Gnu Privacy Guard, l’implémentation GNU du standard de chiffrement OpenPGP.

Si j'ai parlé du principe des suites de caractères propres à son interlocuteur, je pense qu'il est temps de changer un peu le vocabulaire et de parler de «clés».

Le format OpenPGP utilise donc des clés. Qui sont certes des suites de caractères, mais qui sont immuables et surtout uniques.

Quand on crée une clé PGP, au final on en crée 2. Une pour chiffrer vers soi-même et une pour déchiffrer les messages qui ont été chiffrés avec l'autre. Ça va vous suivez ?

Ces clés sont appelées respectivement “clé publique” et “clé privée”.

Comme leur nom l'indique, une des clés va pouvoir être transmise au monde entier et l'autre gardée secrète.

Pour résumer sommairement, la clé publique sert à chiffrer les messages et la clé privée à les déchiffrer.

Schéma du fonctionnement du chiffrement asymétrique

Cas d’utilisation

Comme indiqué plus haut, une des utilisations d’un chiffrement asymétrique est de pouvoir rendre un message (ou même un fichier) lisible seulement par son destinataire.

Mais ça ne s’arrête pas là.

On peut également noter la vérification d’identité numérique. En fait on peut mettre toutes les infos qu’on veut dans sa clé publique. Et certains sites comme Keyoxide donnent la possibilité d’établir son identité en ligne, et de prouver que tel compte sur un réseau social est bien le nôtre, afin de réduire de potentiels vols d’identité numérique par exemple.

Le cas d'usage le plus répandu reste la signature. Beaucoup de distributeurs et distributrices de logiciels signent leur travail avec OpenPGP afin de garantir à leurs utilisateur·rice·s qu'ils n'utilisent pas une version modifiée de tel logiciel.

Création de sa paire de clés

GPG est distribué dans tous les systèmes d’exploitation libres, notamment GNU/Linux.

Il est donc possible de rentrer directement dans le monde merveilleux qu’est le chiffrement asymétrique en utilisant simplement un OS de qualité. Je tire à balles réelles.

Il existe des outils graphiques pour simplifier son utilisation, notamment au travers de systèmes de messagerie, mais on apprend jamais mieux en informatique qu’en mettant les mains directement au milieu de son terminal.

Tuto création

Voici la commande que nous allons utiliser. Elle permet une configuration des paramètres de sa clé, ce qui est souvent une bonne idée, surtout quand on suit une documentation qui explique tout.

$ gpg --full-gen-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 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)
  (14) Existing key from card
Quel est votre choix ? 

On a notre premier choix à faire, celui de l’algorithme de cryptographie à utiliser sur sa clé. Je vous propose de garder le choix par défaut  RSA et RSA. Sa robustesse n’est pas à prouver et ça vous évite de vous prendre la tête sachant que des gens plus doués que nous savent ce qu’ils conseillent. Tapez un 1, puis effectuez la même action sur votre touche Entrée.

les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits.
Quelle taille de clef désirez-vous ? (3072)

L’étape suivante consiste à donner une taille à notre clé. Forcément, plus c’est grand, plus c’est sécurisé (mais aussi plus ça va mettre de temps à chiffrer/déchiffrer). Avec la puissance des processeurs qui ne fait que croître, choisir une taille inférieure à 3072 n’est pas recommandé. Cependant comme on plaisante pas avec la sécurité ici, autant passer à l'étape du dessus afin de garantir une robustesse plus durable, vous pouvez donc vous contenter confortablement d’un simple 4096.

La taille demandée est 4096 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)

Nous voici dans une étape importante, le temps de validité de la clé. Grossièrement cette étape n’est pas obligatoire, on peut tout à fait décider que notre clé est immortelle comme un Highlander et tapoter sereinement un 0 sur son clavier pour passer à l’étape suivante. Il ne faut pas non plus être candide et ne pas oublier que si ça se trouve dans 2 ans on a perdu la clé, le certificat de révocation associé et tout le tintouin (on en parle juste après), ce qui en résultera une clé désuète qui ne devrait plus être utilisée.

Donc je vous conseille de mettre plutôt une valeur comme 1 ou 2 ans, ou même 5 si vous êtes punk, qui est bien entendu renouvelable par la suite pour étendre sa durée de vie.

La clef expire le dim. 07 mai 2023 12:54:53 CEST
Est-ce correct ? (o/N) o
GnuPG doit construire une identité pour identifier la clef.
Nom réel : 

On arrive désormais au premier moment où je ne serais pas en capacité de vous dire quoi mettre, va pas falloir se tromper car l’avenir du monde en dépend. Non c’est faux, remplissez juste les champs tout va bien se passer.

Nom réel : Don Diego de la Vega
Adresse électronique : z@zorro.es
Commentaire : Un cavalier qui surgit hors de la nuit
Vous avez sélectionné cette identité :
    « Don Diego de la Vega (Un cavalier qui surgit hors de la nuit) <z@zorro.es> »
Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique
ou (O)ui/(Q)uitter ?

On gratifie ensuite le programme d’un O tonitruant et c’est maintenant que la sécurité commence.

Le champ de saisie de la phrase de passe va s’afficher, et c’est le moment de prouver que vous avez lu mon article sur les gestionnaires de mots de passe (on s’en lasse pas).

La phrase secrète doit être complexe, pas trop courte, difficile à deviner mais aisée à mémoriser. Elle sera demandée à chaque processus de signature ou de chiffrement, sauf si votre système intègre un agent qui se chargera de la retenir jusqu'au verrouillage de votre écran par exemple. Une bonne “passphrase”, assez longue, mélangera des lettres majuscules et minuscules, des chiffres et des symboles non alphanumériques. Une suite de mots aléatoires, genre 7, est une bonne alternative souvent moins reloue à taper.

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.

La génération de la paire de clés commence.

Un grand nombre d'octets aléatoires doivent être générés, il est préférable que le PC “travaille” pendant ce temps pour lui permettre d'en disposer suffisamment, donc tapez (n'importe quoi) au clavier, bougez la souris, dansez la macarena ou même préparez un petit gratin pour le soir.

gpg: clef 0F618F3EE70A86EE marquée de confiance ultime.
gpg: revocation certificate stored as '/home/username/.gnupg/openpgp-revocs.d/DFA8B2913144F2C97EECAB9F0F618F3EE70A86EE.rev'
les clefs publique et secrète ont été créées et signées.
pub   rsa3072 20XX-XX-XX [SC]
      DFA8B2913144F2C97EECAB9F0F618F3EE70A86EE
uid                      Don Diego Delavega (Un cavalier qui surgit hors de la nuit) <z@zorro.es>
sub   rsa3072 20XX-XX-XX [E]

Les clés sont désormais enregistrées sur la machine. Pour exporter votre clé publique afin de pouvoir la partager, voici la commande avec des options pour simplifier sont utilisation future, notamment le --armor qui exporte le fichier dans un format texte et permet de réduire les risques de corruption du fichier.

$ gpg --export --armor youremail@example.com > mypubkey.asc

Cela couvre l’usage de base de la création.

Il ne faut cependant pas oublier que 2 clés sont générées et qu’il convient de ne surtout pas les perdre. C’est pourquoi je vous renvoie à cet article sur les gestionnaires de mots de passe, afin de pouvoir stocker tout ce beau monde de façon sécurisée.

Révoquer sa clé

Cette étape n’est pas obligatoire, d'autant plus que désormais la création du certificat de révocation est faite automatiquement à la création de la clé. Mais bon, quitte à écrire une documentation autant avoir des choses à mettre dedans.

Une fois que votre clé est générée, il est d’usage de prévoir un possible futur besoin de l’annuler. Notamment dans le cas où votre clé privée serait corrompue par quelque malandrin à capuche, ou bien tout simplement parce que vous avez oublié le mot de passe, ou encore tout simplement parce que vous savez plus où vous l’avez rangée. (bim -> gestionnaire de mots de passe, y a toujours moyen de le caser quelque part)

C’est très simple à faire, mais pour cela il faut encore avoir accès à sa clé privée et à son mot de passe, d’où le conseil de générer ce certificat en même temps que la création de la paire de clés :

$ gpg --output revoke.asc --gen-revoke KEYNAME

Et puis on suit les instructions.

Sinon au niveau de l'import, rien de bien sorcier. Voici comment faire :

$ gpg --import revoke.asc

Et ensuite on exporte notre clé mise à jour vers le serveur de clef avec la commande suivante :

$ gpg --keyserver hkps://keys.openpgp.org --send KEYNAME

Et lors de la prochaine synchronisation avec les serveurs de clefs, les personnes qui se servent de la clef publique seront informées qu’elle n’est plus à utiliser.

Il faut donc penser à régulièrement mettre à jour ses clefs locales par synchronisation avec les serveurs.

Superbe transition avec la prochaine partie.

Synchronisation avec un serveur de clés

Pour pouvoir chiffrer des messages ou des documents à une personne, il faut pouvoir récupérer sa clé publique.

Ce partage de clé peut se faire de différentes manières, que ce soit en main propre via un outil de stockage, par messagerie instantanée, ou encore à recopier à la main via un morceau de papier (ok j’avoue la dernière c’est pas une super méthode).

Un des moyens les plus efficaces, d’ailleurs tellement efficace qu’il est intégré de base dans les commandes PGP, est de mettre sa clé publique sur un serveur de clé. Le principe est tout simple, on envoie sa clé publique et toutes les infos qu’elle contient sur un serveur, qui possède la plupart du temps une interface web, permettant ainsi à quiconque de la récupérer en la cherchant via les adresses email, le nom ou encore l’empreinte de la clé.

De nos jours le serveur le plus largement utilisé est : hkps://keys.openpgp.org

Pour ajouter sa clé à un serveur de clé, cette simple commande suffit :

$ gpg --keyserver hkps://keys.openpgp.org --send KEYNAME

Pour les amoureux de la ligne de commande, il est également possible de récupérer une clé de cette manière grâce à son empreinte :

$ gpg --keyserver hkps://keys.openpgp.org --recv-keys 0F618F3EE70A86EE

Petit bonus, la commande pour rechercher par adresse email :

$ gpg --keyserver hkps://keys.openpgp.org --search-keys <email>

Récupérer une clé publique

Vous devez vous procurer la clé publique de la personne à laquelle vous souhaitez envoyer un message. Cette personne peut soit vous l’envoyer, ou alors vous pouvez tenter de la chercher sur un serveur de clé.

Voici à quoi ressemble ma clé publique par exemple.

Une fois la clé récupérée, le plus simple sera de l’enregistrer en tant que fichier texte sur votre PC, sachant qu’il est également possible de tout faire en ligne de commande (mais on va rester chill pour le moment).

Maintenant que le fichier de la clé publique est enregistrée dans votre PC, il va falloir l’importer pour pouvoir l’utiliser.

$ gpg --import key.txt
gpg: key 0F618F3EE70A86EE: 1 duplicate signature removed
gpg: clef 0F618F3EE70A86EE : « Don Diego Delavega (Un cavalier qui surgit hors de la nuit) <z@zorro.es> » 7 nouvelles signatures
gpg: Quantité totale traitée : 1
gpg:         nouvelles signatures : 7

Pensez bien à comparer l’empreinte de la clé avec celle de votre destinataire pour vous assurez que vous n’allez pas envoyer votre recette de clafoutis à un restaurateur peu scrupuleux qui se cache derrière l’identité de quelqu’un de confiance. Cette situation très précise n’arrive que trop souvent dans le monde de la pâtisserie.

Chiffrer un message ou un fichier

On va commencer à rentrer dans la partie marrante, enfin quand je dis marrante je parle du méga fun intersidéral pour quiconque est un·e crypto-anarchiste invétéré·e comme moi.

La première étape consiste à choisir un destinataire dont vous possédez la clé publique. Vous pouvez totalement décider de chiffrer un texte pour vous même, on est jamais trop prudent et puis la recette de clafoutis de votre grand-mère ne doit surtout pas tomber entre de mauvaises mains.

Si vous ne possédez pas la clé de votre destinataire, go à la partie qui couvre ce cas d'usage. Vous avez vu comment cet article est bien construit ?

Maintenant que la clé est dans votre trousseau, c’est le moment de l’utiliser pour faire des dingueries.

Chiffrer un message

En CLI

Rien de plus simple, enfin si, mais ça reste pas compliqué je vous assure.

$ gpg --encrypt --armor --sign --recipient z@zorro.es

Une fois la commande Entrée entrée (lol), le terminal continue de vous demander de taper des trucs et c’est le moment d’écrire votre message. Quand c’est fait, faites un saut de ligne et exécutez le raccourci Ctrl+d, ce qui aura pour effet de chiffrer votre texte avec la clé spécifiée et de l’afficher dans le terminal.

Coucou je suis le message       
-----BEGIN PGP MESSAGE-----

hQGMA9je/dJL+lpEAQv/e7Yi3PtKt8Mk/3atDTgzUqpWPbcFQwx2+g6xoqOkanoo
xembFWx7VzEHNxtTaue9/wfppYUWhX2Jf85E/8BFDDc/ijxQWfHhl8mozBvsdeRX
4vP87x9W+WAfLJXbOo/iwqdyqm1z6ehUair6qBwTRmOGgzQ/tENgtFmrkDmWDnWF
V93aoorcAW/5J8+L6Dz5TbKyXLaZLxEtVC1igzhtTuB6KPe3i4ydOt9EyWz5a3+H
uO2Hcrwkd8uwLpIba7ZQBtM/REbHz+sKhasmNAnibOGdOWCN/AxgupchaisDm7Bv
IgHZ3rVzoCoMjSxqycUqb2VGG+fXwmg34K7eYPYt4Gfy1axZ0K2jqsFLOaBP6yCZ
zyYCfB8NF9TKbeLMdwrZl5k8us4BsPa9lASUd/s110vCjQFe+8+1gZBskOzaAvza
oK2lSG+X2eExk4WNyQfNJD5rI8JR7u2bUTcfiHp+o1vgQCKRUc5nLXITsjMd0AS4
ygnTsPHtA2UbaKQSzP0x0ukBhSjLtketUTC7Uvg+me09b7noV5iMFXgT7e/sMhfo
Um+jDvQJSnQZ9K3uCigCrHr1QkpFHApt+rFmYWS5vVlXxhSQ52QQXoZOmgHz3B+t
+cCzM20bWsajiy/hmLcZEmLRFG0RUHV9JjAU/XWGVwqhwxMsBDd9ShR7E8Zk/4Ij
Dlx9tE2QqnUXLq7Je+Y+36hiCgNGarGXvQ+4MBUP8zwktLOG5BoSN0bE2viB4YAK
TpOnA+VoWOioyVREY+VMMMDuU6Txw+tl1Nd4qM/t8ZYLbxYd8+W+3oy4czSMHcLw
E10i3wyofUkeJo8h1pzWhPoxiQr1k0ZU1k5NSE1b58M7XPZxjjpEhblUYoUyjzTN
TcP9mBJtj2Kk4nsPuNnCB8dWNsaeNHD3eq94yPGiX8BkL4sI3xsEKNE9wKEPocKT
kLhSx8/B6aV6a8JhsthsuDzHk+pmfWksII5WuD1ze0jYQ4sP/4IHWtf9UQR+BmYQ
EPFSN5zPwohrIXfTUccLxnw1D6tgCcSsxbGkKHGA+6hkylx+Q44Gy5dZoB5+HIeK
YL5zCHb84O/YX3E0YSAXYkmN58Dt7cpVgobsJLQbDcFfnmwrQGNBxcph5k6If+9O
W3E1EeeTDQxIMHYnQ++3HGSy/7rE+REng8Jg0azxNPyuN4X3ttxhh1IxnYeQCH5x
Ch7e3qXIDXSOGoGZNcwyHrJsHbItCmxSifJAtgLWfz4=
=fpIX
-----END PGP MESSAGE-----

Comme votre message n’est écrit qu’à la demande de la commande, en quittant votre terminal il n’existe plus de trace de votre texte en clair. Vous pouvez bien évidemment rediriger sa sortie vers un fichier pour récupérer le texte chiffré plus facilement.

--encrypt sert à chiffrer

--sign permet de constituer une preuve que telle clé a bien écrit tel contenu.

--armor rend le fichier lisible avec des caractères ASCII (optionnel. N’hésitez pas à faire des tests pour voir la différence. Globalement le fait de mettre cette option rend le texte chiffré lisible par les editeurs de texte et permet le c/c)

--recipient pour préciser le destinataire. Ça fonctionne aussi avec l’empreinte. Si vous voulez pouvoir déchiffrer le texte pensez à vous ajouter dans les destinataires

Et maintenant vous pouvez partager le texte ou le fichier directement à la personne qui possède la clé privée associée.

Via le navigateur

Différentes alternatives à la ligne de commande existent pour pouvoir communiquer de manière sécurisée un peu partout.

Une des plus simple est d’utiliser une messagerie web dont le chiffrement est déjà intégré, tel que ProtonMail ou Tutanota. Certains clients mails permettent également de gérer des communications chiffrées OpenPGP, comme Thunderbird sur PC ou K-9 Mail sur Android.

Mais pour des envois ponctuels, certains outils ont vu le jour. On peut noter :

  • Keyoxide qui possède une fonctionnalité de chiffrement sur les pages des clés qui sont accessibles.
  • Encrypt.to avec sa possibilité d’envoyer des mails chiffrés anonymement directement depuis la plateforme (même si au moment où j’écris ça le serveur de clé sur lequel ils s’appuient a fermé, je les ai contacté donc on verra).
  • Et d’autres sites comme https://8gwifi.org/pgpencdec.jsp (ainsi que les deux présentés plus haut) intègrent une librairie JS qui prend en charge OpenPGP. Cette librairie permet d’ailleurs de monter son propre formulaire assez facilement de son côté.
  • Il existe aussi Hawkpost qui permet de créer un lien personnel par lequel les gens peuvent vous envoyer des messages ou des fichiers, lesquels seront chiffrés avec votre clé avant de vous être envoyés par mail. Un peu comme un formulaire de contact sécurisé et anonyme.

Ça reste le moyen le moins sécurisé, zone d'attaque préférée des malandrins à capuche, donc préférez rester dans votre petit terminal tout mignon.

Chiffrer un fichier

Une des fonctionnalités assez puissante de ce standard de chiffrement est celle de pouvoir chiffrer des fichiers, peu importe leur format ou leur poids.

Niveau difficulté, si vous avez passé l’étape de chiffrement de message sans vous mordre les doigts vous devriez être plus que capable avec celle-ci. Ne vous sous-estimez pas.

La seule différence avec le chiffrement d’un texte se trouve dans le fait de lui spécifier un fichier.

Préparez un fichier texte qui va comporter votre message. Un petit .txt rempli est tout ce dont vous aurez besoin.

Une fois le fichier prêt et enregistré sur votre disque dur, vous pouvez lancer cette commande pour générer une copie chiffrée en PGP, lisible seulement par la ou les clés privées associées à la ou les clés publiques utilisées.

$ gpg --encrypt --sign --armor --recipient z@zorro.es message_top_secret.txt

$ cat message_top_secret.txt.asc
-----BEGIN PGP MESSAGE-----

hQGMA9je/dJL+lpEAQv/f6DrYuRd2yfOBUp8dFovq+QYs2P24ZfYRMpIzOleFNGB
K/2y6t/g2ekny13V0HxSWTvzXQiF6UbXYQuB+OgmrXyFxjSSGwlBTMtIGgmM873M
wPTwyr64Js2VFHfozDhOSpYYSe4ntwojHtqxYv20QcBezVFNQ/r4yda3aq/WGcPG
YC8i4h/2lQ+OB2ddF4kcuH22m/wQOoFBN9lh4qtKcI9KL8bK+40uceKy5z8IToKf
IsydBMMy0wPFE6KVnhHolL4BP8GYAQ83NK1zM4/Ma+RAm1uC3GrtEXXgBRS/RJxo
c2BiarzKUoaLtYzjaQuZ/I2NTj/tGiRHlsQyXu9JeiH8h+lbtqP2FOuqJ1msTF8K
p9yFXOAua35PCID2A9EFYzIxw6c79iVWEyvcoo/hTG9Ne4njudKYLIr6oa4JmCLM
z6xMs8dfA4qRNGWz0TwAtv1YB6laouV77xLSIKNgjjQYMk00lT4N8h/iSlk9UOim
8YuDaWcX2fEDlK6h54xl0ukB+UaZ1lrnghzCLfQqiabrKuXxWavBnXL47toCU2xI
k9amrpEsQiWYO8NWgjHletCtHCgK5Jt14PrKfq4vrK8Wo8zrHuuVKC+UgXIkncZe
GLTXSrG5GXiWS5cr3crMdOgfwri0RLoy20rs3efTPBg3vls/b1v5ur93W4cX0ded
UlRqjPixSyH+BCSXIY7SNjKjUTW79OPFQ4uGLfwAYI5eZXQz1g3UBcROGKWdPIv7
VBHmB8wxKQDuQL1uSQUqDBNVpb7dyhmM1RqYmlZX5BUiFEi3En03sOd1hVfV9XTv
geRNIYpLLSJeumy4oGj3S9aqAOIE5w11WZH40xM+5wvoIh7xlHfhvxTLNrhUNQe4
kHsSn5bff6xbp4MBPahXbF/1Ta6TaVvZ+uVLz8vJ3Z3GDAhURg96SvY9xnCL19g/
IdiuXcIBAaKTY0NjZt7Yw6ygB9LsAjnPYuD9k6lzsc3dw4Xiu4l5t+XRcHLcWtYI
4oqzoOvTNu2XLX7MRrwgD2eZuDWoi2PZbHspSO1xQwzkP0hVqmx//G6gL3GwlgK1
t/tpU1h1MW0Xbi/KMM4UJCmZKFXGYd/JmoFPhgCOHz/LBvish1daYKV4aSGFriqO
vdsVCYDeKASXp4vH9N1vM1k2IglibSJlOhRj1f82C7zrphI/tqSvXrnpC+pub92R
FDnyGULpYtvhPPRrlN12DEc0mVsulyi0GSiYI0Tq23QMDe8LVR8khWD3/Ia+42VM
+IyGIQK74FXMyfg=
=qObT
-----END PGP MESSAGE-----

Cette commande va créer un nouveau fichier dans le répertoire courant, lequel se verra assigner l’extension .asc, ou .gpg si vous n’avez pas spécifié l’option --armor.

Et quand je parle de fichier, ça implique toutes les extensions possible, que ce soit des archives compressées, des exécutables, ou même le PDF de votre lettre de motivation, tout peut y passer.

C’est aussi à ce moment là qu’on se dit qu’on peut chiffrer des trucs pour soi-même.

Attention tout de même, il ne faut pas oublier que chiffrer un fichier augmente son poids et que le fichier de base ne se supprime pas automatiquement.

Déchiffrer un message ou un fichier

Pour que ce standard de chiffrement ait un intérêt, il convient d’avoir la possibilité de déchiffrer son message en retour. Sinon on serait en train de parler de standard de hachage et le titre de cet article n'aurait aucun sens.

Déchiffrer un message

Comme pour le chiffrement, on va taper cette commande et coller le message chiffré à la suite.

$ gpg --decrypt
-----BEGIN PGP MESSAGE-----

hQGMA9je/dJL+lpEAQv/f6DrYuRd2yfOBUp8dFovq+QYs2P24ZfYRMpIzOleFNGB
K/2y6t/g2ekny13V0HxSWTvzXQiF6UbXYQuB+OgmrXyFxjSSGwlBTMtIGgmM873M
wPTwyr64Js2VFHfozDhOSpYYSe4ntwojHtqxYv20QcBezVFNQ/r4yda3aq/WGcPG
YC8i4h/2lQ+OB2ddF4kcuH22m/wQOoFBN9lh4qtKcI9KL8bK+40uceKy5z8IToKf
IsydBMMy0wPFE6KVnhHolL4BP8GYAQ83NK1zM4/Ma+RAm1uC3GrtEXXgBRS/RJxo
c2BiarzKUoaLtYzjaQuZ/I2NTj/tGiRHlsQyXu9JeiH8h+lbtqP2FOuqJ1msTF8K
p9yFXOAua35PCID2A9EFYzIxw6c79iVWEyvcoo/hTG9Ne4njudKYLIr6oa4JmCLM
z6xMs8dfA4qRNGWz0TwAtv1YB6laouV77xLSIKNgjjQYMk00lT4N8h/iSlk9UOim
8YuDaWcX2fEDlK6h54xl0ukB+UaZ1lrnghzCLfQqiabrKuXxWavBnXL47toCU2xI
k9amrpEsQiWYO8NWgjHletCtHCgK5Jt14PrKfq4vrK8Wo8zrHuuVKC+UgXIkncZe
GLTXSrG5GXiWS5cr3crMdOgfwri0RLoy20rs3efTPBg3vls/b1v5ur93W4cX0ded
UlRqjPixSyH+BCSXIY7SNjKjUTW79OPFQ4uGLfwAYI5eZXQz1g3UBcROGKWdPIv7
VBHmB8wxKQDuQL1uSQUqDBNVpb7dyhmM1RqYmlZX5BUiFEi3En03sOd1hVfV9XTv
geRNIYpLLSJeumy4oGj3S9aqAOIE5w11WZH40xM+5wvoIh7xlHfhvxTLNrhUNQe4
kHsSn5bff6xbp4MBPahXbF/1Ta6TaVvZ+uVLz8vJ3Z3GDAhURg96SvY9xnCL19g/
IdiuXcIBAaKTY0NjZt7Yw6ygB9LsAjnPYuD9k6lzsc3dw4Xiu4l5t+XRcHLcWtYI
4oqzoOvTNu2XLX7MRrwgD2eZuDWoi2PZbHspSO1xQwzkP0hVqmx//G6gL3GwlgK1
t/tpU1h1MW0Xbi/KMM4UJCmZKFXGYd/JmoFPhgCOHz/LBvish1daYKV4aSGFriqO
vdsVCYDeKASXp4vH9N1vM1k2IglibSJlOhRj1f82C7zrphI/tqSvXrnpC+pub92R
FDnyGULpYtvhPPRrlN12DEc0mVsulyi0GSiYI0Tq23QMDe8LVR8khWD3/Ia+42VM
+IyGIQK74FXMyfg=
=qObT
-----END PGP MESSAGE-----gpg: chiffré avec une clef RSA de 4096 bits, identifiant D8DEFDD24BFA5A44, créée le 2021-05-10
      « Don Diego Delavega (Un cavalier qui surgit hors de la nuit) <z@zorro.es> »
agrougrou je suis le message secret.
gpg: Signature faite le mer. 30 juin 2021 14:15:21 CEST
gpg:                avec la clef RSA 891EB4F9D2609313A2D4392562605017FCA8C751
gpg: Bonne signature de « _Von_ <von@disroot.org> » [ultime]

Une petite fenêtre va s’ouvrir pour nous demander de rentrer la phrase de passe associée à notre clé privée. Mais si vous savez, celle que vous avez soigneusement enregistrée dans votre gestionnaire de mot de passe.

Une fois que c’est fait, le message déchiffré va s’afficher comme par magie dans votre console, sinon c’est que votre mot de passe est aussi faux que la catchphrase de Norman.

Dans l’exemple ci-dessus, vous remarquerez qu’il a détecté une signature en déchiffrant le message. C’est tout simplement parce que le message a été chiffré en utilisant l’option --sign, et permet donc de vérifier que la personne qui a envoyé ce message est bien la bonne. Bon là dans l’absolu c’est moi-même mais vous avez capté.

Déchiffrer un fichier

Dans la même veine que le chiffrement et du déchiffrement au dessus, si vous avez tout bien lu vous devriez pouvoir faire ça encore plus facilement.

La même commande qu’au dessus, mais en lui spécifiant un fichier chiffré en .gpg ou .asc devrait vous faire apparaître exactement le même résultat que pour un texte collé dans le terminal.

$ gpg --decrypt message_top_secret.txt.asc
gpg: chiffré avec une clef RSA de 4096 bits, identifiant D8DEFDD24BFA5A44, créée le 2021-05-10
      « Don Diego Delavega (Un cavalier qui surgit hors de la nuit) <z@zorro.es> »
agrougrou je suis le message secret.
gpg: Signature faite le mer. 30 juin 2021 14:15:21 CEST
gpg:                avec la clef RSA 891EB4F9D2609313A2D4392562605017FCA8C751
gpg: Bonne signature de « _Von_ <von@disroot.org> » [ultime]

Franchement, vous auriez cru que c’était si facile vous ? (instant téléachat terminé)

Vérifier une signature

On a vu ensemble qu’il était possible de signer notre chiffrement avec l’option --sign. Ce que ça fait concrètement pour notre interlocuteur·ice c’est que ça va ajouter une signature en caractères codés sur 7 ou 8 bits (selon si l’option --armor est utilisée) à la fin du chiffrement. Cette signature est tout bonnement une suite de caractères uniques, liée à la clé de la personne qui chiffre le message.

De ce fait, vérifier une signature signifie s’assurer que c’est bien la personne qui possède la clé privée qui a généré le message.

Cette vérification est faite automatiquement par GPG au déchiffrement. Vous avez l’exemple un peu plus haut. Mais pour que ça puisse se faire, la vérification nécessite que vous possédiez déjà la clé publique de la personne qui a signé.

Vous pouvez aussi vous contentez de vérifier directement la signature d'un message :

$ gpg --verify [message]

Cette vérification s'appuyant sur la clef publique associée à la clef privée ayant servie à signer le message, vous devez bien-sûr disposer de ladite clef publique. Cette vérification n'est cependant valable que dans la mesure où vous apportez un soin tout particulier à la vérification de l'authenticité des clefs publiques que vous utilisez.

Résumé des commandes principales

Générer une paire de clés

$ gpg --full-gen-key

Générer un certificat de révocation

$ gpg --output revoke.asc --gen-revoke KEYNAME

Publier sur un serveur

$ gpg --keyserver hkps://keys.openpgp.org --send KEYNAME

Récupérer une clef publique sur un serveur

$ gpg --keyserver hkps://keys.openpgp.org --recv-keys FINGERPRINT

Calculer l'empreinte d'une clé

$ gpg --fingerprint KEYNAME

Lister les clés présentes

$ gpg --list-keys

Éditer une clé

$ gpg --edit-key KEYNAME

That's all folks

Wow, sacré lecture hein ? Vous avez réussi à tout lire sans faire de pause ? Franchement chapeau. Même moi j'ai dû faire des pauses pour écrire tout ça.

En tout cas j'espère que le monde ✨ merveilleux ✨ du chiffrement asymétrique est désormais bien plus clair pour vous. J'espère aussi que les 2-3 du fonds qui sont arrivés là par hasard (et en retard, mais je les excuse) auront appris des choses.

Si vous voulez mettre la théorie en pratique, toutes les infos pour m'envoyer un message chiffré sont dispos sur la page de contact. Promis je vous répondrais pour vous dire si vous avez tout bien fait.

Sources

Remerciement

Un grand merci à gagz pour sa relecture et ses nombreux retours pour éviter que je dises trop de bêtises :)