Gpg

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Standard OpenPGP (RFC 4880)
Implémentation GnuPG (libre)
Version cible GnuPG 2.2 / 2.4
Commande gpg
Voir aussi OpenSSL

Présentation

GnuPG (GPG) est l'implémentation libre du standard OpenPGP. Elle permet le chiffrement et la signature de fichiers et de courriels, à la fois en mode symétrique (mot de passe partagé) et asymétrique (paire de clés publique/privée).

Cette page cible GnuPG 2.2 / 2.4 (Debian 12+, Ubuntu 22.04+, RHEL 9+). Sur ces systèmes, gpg est la version 2.x ; le nom gpg2 est un héritage qui a souvent disparu.

Vocabulaire

  • Trousseau (keyring) : ensemble des clés connues. Public dans pubring.kbx, privé géré par l'agent.
  • Certificat de révocation : permet d'invalider sa propre clé si elle est compromise. À générer et stocker hors-ligne dès la création. Depuis GnuPG 2.1, un certificat est créé automatiquement dans ~/.gnupg/openpgp-revocs.d/.
  • WKD (Web Key Directory) : publication d'une clé via le domaine de l'adresse e-mail (méthode moderne, sans serveur de clés).
  • KEYID / fingerprint : identifiant d'une clé. Préférer l'empreinte complète (40 hex) pour lever toute ambiguïté.

Génération et gestion des clés

Générer une clé

  • Génération interactive avec contrôle complet (algorithme, taille, expiration) — méthode recommandée :
gpg --full-generate-key
Choisir de préférence ECC (Curve 25519) ou, à défaut, RSA 4096, et toujours fixer une date d'expiration.
  • Génération rapide non interactive (scripts) :
gpg --quick-generate-key "Alice <alice@example.com>" ed25519 cert 1y

Lister les clés

gpg --list-keys              # clés publiques
gpg --list-secret-keys       # clés privées
gpg --fingerprint KEYID      # empreinte d'une clé

Certificat de révocation

  • Générer manuellement un certificat de révocation :
gpg --output revoke.asc --gen-revoke KEYID
À conserver hors-ligne (clé USB, papier). Pour révoquer plus tard : gpg --import revoke.asc puis renvoyer la clé sur les serveurs.

Modifier une clé

  • Éditeur interactif (expiration, ajout d'UID, de sous-clés, niveau de confiance...) :
gpg --edit-key KEYID
Commandes utiles dans l'éditeur : expire, adduid, addkey, trust, passwd, puis save.

Sauvegarde / import

  • Exporter la clé publique (format ASCII armuré) :
gpg --armor --export KEYID > alice_pub.asc
  • Exporter la clé privée (sauvegarde — à protéger !) :
gpg --armor --export-secret-keys KEYID > alice_priv.asc
  • Importer une clé :
gpg --import alice_pub.asc
  • Exporter au format clé publique SSH (remplace l'ancien gpgkey2ssh) :
gpg --export-ssh-key KEYID

Supprimer une clé

gpg --delete-keys KEYID         # clé publique
gpg --delete-secret-keys KEYID  # clé privée

Chiffrement symétrique (mot de passe)

Pas de clé, juste une phrase de passe partagée.

  • Chiffrer :
gpg --symmetric fichier.txt                       # → fichier.txt.gpg
gpg --symmetric --cipher-algo AES256 fichier.txt  # forcer AES-256
  • Sortie ASCII armurée :
gpg --symmetric --armor fichier.txt               # → fichier.txt.asc
  • Déchiffrer :
gpg --decrypt fichier.txt.gpg > fichier.txt

Chiffrement asymétrique

  • Chiffrer pour un destinataire :
gpg --encrypt --recipient bob@example.com fichier.txt
  • Pour plusieurs destinataires :
gpg --encrypt --recipient alice@example.com --recipient bob@example.com fichier.txt
  • Chiffrer et signer en même temps :
gpg --sign --encrypt --recipient bob@example.com fichier.txt
  • Sortie ASCII armurée (pratique pour un envoi par mail) :
gpg --encrypt --armor --recipient bob@example.com fichier.txt
  • Chiffrer pour soi-même :
gpg --encrypt --default-recipient-self fichier.txt
  • Déchiffrer :
gpg --output fichier.txt --decrypt fichier.txt.gpg

Signature et vérification

  • Signature détachée (le fichier reste intact, signature à part) :
gpg --armor --detach-sign fichier.txt    # → fichier.txt.asc
gpg --verify fichier.txt.asc fichier.txt
  • Signature en clair (texte lisible + signature) :
gpg --clearsign message.txt              # → message.txt.asc
  • Signature inline (fichier signé et encapsulé) :
gpg --sign fichier.txt                   # → fichier.txt.gpg
gpg --verify fichier.txt.gpg
  • Certifier la clé d'un tiers (après vérification de son empreinte !) :
gpg --sign-key KEYID

Serveurs de clés et distribution

Note — le pool SKS historique est mort. Utiliser le serveur vérifiant keys.openpgp.org (ne distribue les adresses e-mail qu'après validation, mais ne propage pas les signatures tierces / toile de confiance) ou le WKD.
  • Envoyer sa clé :
gpg --keyserver hkps://keys.openpgp.org --send-keys KEYID
  • Rechercher une clé :
gpg --keyserver hkps://keys.openpgp.org --search-keys bob@example.com
  • Récupérer une clé par son identifiant :
gpg --keyserver hkps://keys.openpgp.org --recv-keys KEYID
  • Rafraîchir les clés du trousseau :
gpg --refresh-keys
  • Localiser une clé automatiquement (WKD / DANE, sans serveur) :
gpg --locate-keys bob@example.com

gpg-agent

Depuis GnuPG 2.1, gpg-agent démarre automatiquement et gère le cache des phrases de passe et les demandes pinentry. Le bricolage manuel de sockets/named pipes n'est plus nécessaire.

  • Redémarrer l'agent (par ex. après modif de config) :
gpgconf --kill gpg-agent
  • Recharger la configuration :
gpgconf --reload gpg-agent
Configuration : ~/.gnupg/gpg-agent.conf (durée de cache, programme pinentry, etc.).

Suite d'outils GnuPG

  • gpg — outil principal de chiffrement/signature OpenPGP (= version 2.x sur les systèmes récents).
  • gpg-agent — démon de gestion des clés et phrases de passe.
  • gpgconf — configuration et contrôle des composants.
  • gpg-connect-agent — dialogue direct avec l'agent.
  • gpgsm — équivalent pour le S/MIME (certificats X.509).
  • dirmngr — accès réseau (serveurs de clés, CRL, OCSP).
  • gpgv — vérification autonome de signatures.
  • gpgsplit — découpe un message OpenPGP en paquets.
  • gpgtar — chiffrement/signature d'archives (remplace l'ancien gpg-zip).

Exemple : échange entre deux postes

Poste d'Alice — création et export de sa clé publique
gpg --full-generate-key
gpg --armor --export "Alice" > /tmp/alice_pub.asc
Poste de Bob — import et chiffrement d'un fichier pour Alice
gpg --import /tmp/alice_pub.asc
gpg --encrypt --armor --recipient Alice --output /tmp/message.asc fichier.txt
Retour chez Alice — déchiffrement
gpg --output fichier.txt --decrypt /tmp/message.asc
Variante sans transfert manuel de fichier, si la clé d'Alice est publiée (WKD ou keyserver) :
gpg --locate-keys alice@example.com
gpg --encrypt --armor --recipient alice@example.com fichier.txt

Voir aussi