Cles, chiffrement et authentification - 03 - GPG : signer, chiffrer, prouver son identité

Comprendre et utiliser GPG : génération de clés, signature de fichiers, chiffrement de messages. Guide pratique pour développeurs.

03 - GPG : signer, chiffrer, prouver son identité

Ce que tu vas apprendre

  • Ce qu'est GPG (et sa relation avec PGP)
  • Generer une paire de clés GPG
  • Signer un fichier et vérifier une signature
  • Chiffrer et dechiffrer un message
  • Le modèle de confiance et les keyservers

Prerequisites


GPG, PGP, OpenPGP : c'est quoi la différence ?

PGP (Pretty Good Privacy) a ete créé par Phil Zimmermann en 1991. L'histoire est folle : le gouvernement americain a ouvert une enquête criminelle contre lui pour "exportation de munitions" parce que la cryptographie forte etait classee comme arme de guerre. Zimmermann a publie le code source dans un livre imprime, protégé par le Premier Amendement. L'enquête a ete abandonnee en 1996.

OpenPGP est le standard ouvert (RFC 4880) base sur PGP. GnuPG (GPG) est l'implementation libre de ce standard. En pratique, quand on dit "GPG", on parle de l'outil en ligne de commande gpg.

Generer ta clé GPG

bashgpg --full-generate-key

GPG te pose plusieurs questions :

  • Type de clé : choisis ECC (sign and encrypt) puis Curve 25519. Si cette option n'est pas dispo (GPG < 2.1), prends RSA 4096 bits.
  • Duree de validite : je recommande 2 ans. Tu pourras prolonger sans régénérer. Une clé sans expiration, c'est une clé que tu oublieras de revoquer.
  • Nom et email : utilise le meme email que ton compte GitHub/GitLab.

Verifie que ta clé est la :

bashgpg --list-keys --keyid-format long

Tu verras quelque chose comme :

pub   ed25519/1234ABCD5678EF90 2026-03-28 [SC] [expire : 2028-03-28]
uid                 [  ultime ] Nicolas Nguyen <nicolas@exemple.com>
sub   cv25519/ABCD1234EF567890 2026-03-28 [E] [expire : 2028-03-28]

Le [SC] signifie que la clé principale sert a signer (S) et certifier (C). La sous-clé [E] sert a chiffrer. GPG séparé les rôles, ce qui est malin : si ta sous-clé de chiffrement est compromise, ta clé de signature reste intacte.

Signer un fichier

La signature prouve deux choses : que c'est bien toi qui as signe, et que le fichier n'a pas ete modifie depuis.

bash# Signer un fichier (genere fichier.tar.gz.sig)
gpg --detach-sign fichier.tar.gz

# Verifier la signature
gpg --verify fichier.tar.gz.sig fichier.tar.gz

La signature detachee (--detach-sign) créé un fichier .sig séparé. C'est ce que font les distributions Linux pour leurs images ISO : tu telecharges l'ISO + le fichier de signature + la clé publique du projet, et tu verifies que personne n'a trafique l'image.

Tu peux aussi signer en clair (utile pour les emails) :

bashgpg --clearsign message.txt

Ca généré un message.txt.asc lisible par un humain, avec la signature PGP en bas.

Chiffrer et dechiffrer

Chiffrer un fichier pour quelqu'un, ca veut dire : seule cette personne peut le lire, avec sa clé privee.

bash# Chiffrer pour un destinataire (tu as besoin de sa cle publique)
gpg --encrypt --recipient alice@exemple.com secret.txt

# Dechiffrer (Alice fait ca de son cote)
gpg --decrypt secret.txt.gpg > secret.txt

Tu peux aussi chiffrer avec un mot de passe symetrique, sans clé publique :

bashgpg --symmetric secret.txt

C'est pratique pour un backup rapide, mais ca perd l'avantage de l'asymetrique.

Signer ET chiffrer

En pratique, tu fais souvent les deux : chiffrer pour la confidentialite, signer pour l'authenticite.

bashgpg --sign --encrypt --recipient alice@exemple.com message.txt

Alice pourra dechiffrer ET vérifier que c'est bien toi qui as envoye le message.

Exporter et partager ta clé publique

Pour que d'autres puissent vérifier tes signatures ou t'envoyer des messages chiffres, ils ont besoin de ta clé publique :

bash# Exporter en format texte
gpg --armor --export nicolas@exemple.com > ma_cle_publique.asc

# Envoyer sur un keyserver
gpg --keyserver keys.openpgp.org --send-keys 1234ABCD5678EF90

Le keyserver keys.openpgp.org a remplace les anciens serveurs (SKS). Il vérifié les adresses email, ce qui réduit le spam de fausses clés.

Tu peux aussi importer la clé de quelqu'un :

bashgpg --keyserver keys.openpgp.org --recv-keys ABCD1234EF567890

Le modèle de confiance : le vrai sujet

La question fondamentale : comment savoir que la clé publique que tu as récupérée est bien celle de la bonne personne ? Deux modèles existent.

Le Web of Trust (modèle PGP historique) : les utilisateurs signent les clés des autres. Si Alice fait confiance a Bob, et Bob a signe la clé de Charlie, alors Alice peut faire confiance a Charlie. En pratique, ca marche mal en dehors des communautés de libristes qui organisent des "key signing parties".

Le TOFU (Trust On First Use) : tu fais confiance a une clé la première fois que tu la vois, et tu es alerte si elle change. C'est le modèle de SSH (known_hosts). GPG le supporte depuis la version 2.1.

Mon opinion : pour un développeur, le plus pragmatique c'est de vérifier les fingerprints manuellement pour tes contacts proches, et d'utiliser TOFU pour le reste. Le Web of Trust theorique est beau, mais personne ne le suit dans la vraie vie.

GPG vs SSH : quand utiliser quoi ?

SSH c'est de l'authentification : "prouve que tu es bien toi pour acceder a ce serveur". GPG c'est plus large : signature de fichiers, chiffrement de messages, signature de commits git, chiffrement d'emails.

Depuis OpenSSH 8.0, SSH peut aussi servir a signer des commits git. Mais GPG reste incontournable pour le chiffrement de fichiers et la signature de releases.


Navigation : Precedent : 02 - Les clés SSH | Suivant : 04 - Signer ses commits Git


Sources

Retrouve d'autres articles techniques sur paltemps.fr.

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.