Générer une bonne paire de clés PGP/GPG
Après lecture de pas mal de documentation, voilà ma manière de faire.
Générer la clé primaire
gpg --expert --full-gen-key
- Choisir
(8) RSA (set your own capabilities)
- Ne garder que la capacité
Certify
- Taille de clé : 4096
- Durée de vie : 2 ans maximum
- Identité : Prénom Nom, pas d’adresse, commentaire :
born 1900-00-00 in Muche, France
Générer les clés secondaires
gpg --expert --edit-key KEYID
gpg> addkey
- Faire une clé par usage : Encrypt, Signature et Authentification
gpg> save
Ajouter des identités
gpg --edit-key KEYID
gpg> adduid
- Ajouter des adresses emails et des identités
- Sélectionner
uid 3
puisprimary
et boucler pour mettre dans l’ordre - Éventuellement ajouter une photo en .jpg, chemin absolu avec
addphoto
gpg> save
Créer le certificat de révocation
gpg --output KEYID.revocation-certificate.asc --gen-revoke KEYID
Ne garder que les sous-clés
gpg --export --armor KEYID > KEYID.public.asc
gpg --export-secret-keys --armor KEYID > KEYID.private.asc
gpg --export-secret-subkeys --armor KEYID > KEYID.subkeys-private.asc
Pour exporter chaque sous-clé, on ajoute simplement son KEYID avec un !
à la fin : KEYID!
.
gpg --delete-secret-key KEYID
gpg --import KEYID.subkeys-private.asc
gpg --list-secret-keys
Le signe #
dans sec#
montre que la clé primaire n’est pas dans le trousseau. N’utiliser que le fichier KEYID.subkeys-private.asc
ou une sous-clé particulière (nécessite généralement deux sous-clés : Encrypt et Signature) dans Thunderbird, OpenKeyChain, etc., de telle sorte que même si un attaquant a accès à ces sous-clés, on pourra les révoquer.
Note 16/11/2023 : Thunderbird enregistre la phrase de passe de la clé privée principale, mais pas celle des sous-clés, même si l’on ajoute un mot de passe de session. Autrement dit, si l’on ne veut pas avoir à taper la phrase de passe à chaque fois que l’on envoie un email signé (c’est-à-dire tout le temps), il faut ou bien importer la clé privée complète, ou bien utiliser une saisie automatique Keepass. OpenKeyChain n’a pas ce problème avec K9 Mail puisqu’il ne signe pas les messages non-chiffrés, et qu’il permet de garder en mémoire la phrase de passe pendant un temps défini par l’utilisateur.
En cas d’urgence
gpg --import KEYID.public.asc KEYID.private.asc
gpg --edit-key KEYID
Utiliser key 2
pour sélectionner la sous-clé à révoquer puis revkey
pour enfin save
et republier sur le serveur.
Changer la date d’expiration
gpg --edit-key KEYID
Puis expire
, save
et republier sur le serveur.
Publier sur le serveur
gpg --send-keys KEYID
gpg --keyserver hkp://pgp.mit.edu:80 --send-keys KEYID
Il est également recommandé pour une première clé de la téléverser sur https://keys.openpgp.org/, de sorte de pouvoir contrôler la recherche d’identité.
Mettre en place WKD
Pour que la clé soit accessible via WKD à l’adresse https://domain.tld/.well-known/openpgpkey/hu/HASH
il faut placer un fichier vide nommé policy
à l’adresse https://domain.tld/.well-known/openpgpkey/policy
puis :
gpg --with-wkd-hash -k me@jeandauh.fr
pub rsa4096 2015-04-12 [SC] [expire : 2017-12-31]
C508D8474655467F2E58D86A34354A80ABE928E6
uid [ inconnue] Jean Dauh <me@jeandauh.fr>
s8y7oh5xrdpu9psba3i5ntk64ohouhga@jeandauh.fr
sub rsa4096 2015-04-12 [E] [expire : 2017-12-31]
sub rsa4096 2015-04-12 [S] [expire : 2017-12-31]
Ici le hash sera s8y7oh5xrdpu9psba3i5ntk64ohouhga
(la partie avant le @). Autre manière ne fonctionnant pas toujours (zbase32 pas dans les dépôts) :
echo -n yomli | openssl dgst -sha1 -binary | zbase32
Dernière manière : utiliser l’outil de Keyoxide.
Le contenu du fichier est juste la clé publique en plain text
(même si la spécification exige du binaire, seul OpenPGP.js est strict là-dessus). Penser à l’exporter en version minimale (sans les signatures) :
gpg --armor --export-options export-minimal --export me@jeandauh.fr
Keyoxide exige non seulement du binaire, mais également que la première identité soit une adresse email. Pour garder la compatibilité avec Keyoxide, on devra donc placer une adresse email en principale puis :
gpg --export-options export-minimal --export me@jeandauh.fr
Après coup, on peut remettre l’identité principale telle qu’elle était dans le trousseau de clé.
Ajouter la clé à une vCard
La plupart des implémentations permettent l’ajout d’une clé avec le protocole openpgp4fpr
sous le format openpgp4fpr:FINGERPRINT
(doc) :
KEY:https://domain.tld/.well-known/openpgpkey/hu/HASH
KEY:OPENPGP4FPR:ABAF11C65A2970B130ABE3C479BE3E4300411886
Annonce de changement de clé
Pour un changement de clé, utiliser ce modèle dans un fichier https://domain.tld/.well-known/openpgpkey/key-change.txt
:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
This notice to inform you that my previous GPG key 0xLONGKEY
should not be used anymore and then I migrate on a new GPG key 0xLONGKEY.
Old fingerprint: FINGERPRINT
New fingerprint: FINGERPRINT
This key change is not a security measure, the old key is not compromised
and still secured at this time.
New key is as usual available:
- - on my own server: https://domain.tld/.well-known/openpgpkey/HASH
- - on my DNS: dig +short TXT domain.tld | grep "openpgp4fpr"
- - via WKD: gpg -v --auto-key-locate=clear,nodefault,wkd --locate-keys me@jeandauh.fr
This notice is signed by both keys to prove ownership of them.
-----BEGIN PGP SIGNATURE-----
pb2UNZma6RQ7Jeu5OepohQ7YcCxKFhQm/4iCkvi7FMyJTWjyEGBsF3QatbS0qaEK
FbpTYZPrGatTaK
-----END PGP SIGNATURE-----