Apprendre · 6 min de lecture
Les sous-clés OpenPGP expliquées — clés séparées pour la signature, le chiffrement et l'authentification
Les clés OpenPGP modernes ne sont pas une seule clé mais une clé primaire plus des sous-clés. Voici ce que fait chaque sous-clé, pourquoi la séparation est importante et comment les générer.
Une « clé » OpenPGP moderne est en réalité un petit ensemble : une clé primaire plus une ou plusieurs sous-clés. La clé primaire signe et certifie. Les sous-clés font le travail quotidien de chiffrement et de signature. Cette séparation est l'une des rares bonnes pratiques opérationnelles incontestablement bonnes dans PGP.
Pourquoi les sous-clés existent
La clé primaire porte votre identité. Son empreinte est ce que les autres vérifient, ce que vous publiez, ce que les gens signent lors des key-signing parties, ce qui est lié à votre identifiant utilisateur. Faire tourner la clé primaire signifie perdre toute la confiance accumulée — chaque signature dessus, chaque référence publiée, chaque carte de visite.
Vous voulez aussi utiliser une clé sur des appareils où elle pourrait être exposée : chiffrer des messages sur votre ordinateur portable, signer des e-mails sur votre téléphone. Si ces clés d'usage quotidien sont la clé primaire, un seul appareil compromis brûle toute l'identité.
Les sous-clés résolvent les deux problèmes. La clé primaire reste froide (hors ligne, air-gappée, ou utilisée uniquement pour certifier). Les sous-clés vont sur les appareils quotidiens. Si une sous-clé est compromise, vous révoquez juste cette sous-clé, la clé primaire signe un nouveau remplacement, et votre identité continue sans perte de confiance accumulée.
Les trois rôles des sous-clés
- Sign (S) — produit des signatures sur des messages, fichiers, commits, versions de paquets. La sous-clé la plus utilisée pour beaucoup de personnes.
- Encrypt (E) — reçoit des messages chiffrés. Quand quelqu'un vous chiffre, son outil choisit votre sous-clé de chiffrement dans le bundle de clé publique.
- Authenticate (A) — utilisée comme clé SSH (via gpg-agent), pour l'authentification client TLS, ou d'autres flux de travail « prouver son identité à un serveur ». Optionnel.
Chaque rôle peut avoir plusieurs sous-clés (ex. une courante + une de secours) et chacune peut avoir un algorithme différent (RSA-4096 pour signer, Curve25519 pour chiffrer, etc.). Les sous-clés peuvent aussi avoir leurs propres dates d'expiration, indépendantes de la clé primaire.
Comportement par défaut
Quand vous générez une clé avec la plupart des outils modernes — GPG, OpenPGP.js, cette application — vous obtenez automatiquement une clé primaire + une sous-clé de chiffrement + (selon l'outil) une sous-clé de signature. Les outils Chiffrer et Signer ici utilisent la clé primaire pour signer parce que le bundle livre une seule sous-clé capable de signer par défaut ; la génération à rôles séparés complets est plus courante en ligne de commande.
Pour un utilisateur occasionnel, la valeur par défaut convient. Pour une hygiène opérationnelle à long terme, vous voulez la configuration à quatre sous-clés : clé primaire froide (Certifier uniquement), sous-clé de signature en ligne, sous-clé de chiffrement en ligne, sous-clé d'authentification optionnelle.
Flux de travail pratique avec GPG
Configurer une fois avec le modèle de clé primaire hors ligne :
gpg --quick-generate-key "Alice <[email protected]>" ed25519 cert never
gpg --edit-key [email protected]
> addkey # add a sign subkey
> addkey # add an encrypt subkey
> addkey # add an auth subkey
> save
Exportez ensuite la clé privée primaire sur une clé USB, stockez-la hors ligne, et supprimez-la de votre trousseau quotidien avec gpg --delete-secret-keys (les sous-clés restent ; c'est le modèle « stub » spécifique à gpg). Les opérations quotidiennes de signature/chiffrement s'exécutent maintenant uniquement depuis des sous-clés — la clé primaire n'est nécessaire que pour ajouter ou révoquer une autre sous-clé, ce qui devrait être rare.
Rotation d'une sous-clé
- Branchez la clé primaire hors ligne.
gpg --edit-key [email protected], exécutezaddkeypour créer une nouvelle sous-clé du rôle approprié.- Optionnellement
revkeyl'ancienne sous-clé pour la faire tourner (ou laissez-la simplement expirer). gpg --send-keyspour publier la clé publique mise à jour. Les destinataires récupéreront la nouvelle sous-clé au prochain rafraîchissement.
Leurs messages chiffrés vers l'ancienne sous-clé continuent de se déchiffrer avec l'ancienne sous-clé, que vous gardez pour l'accès aux archives. Les nouveaux messages utiliseront automatiquement la nouvelle sous-clé.