Une bonne pratique pour la gestion de vos clés PGP est de créer une clé principale sans date d’expiration et de la conserver hors ligne stockée de manière sécurisée (clé USB chiffrée par exemple).
Pour une utilisation quotidienne des sous-clés sont créées, chacune ayant une seule finalité (signature, chiffrement ou authentification). Ces clés ont elles une date d’expiration relativement courte (6 mois ou 1 an), ce qui réduit les risques en cas de perte et “force” à remanipuler un peu GPG, qui n’est pas vraiment facile d’accès.

Il faut donc penser régulièrement à prolonger la validité des sous-clés.
Une autre possibilité serait de générer de nouvelles sous-clés, c’est un peu plus sécurisé car cela permet de rendre impossible l’exploitation d’anciens messages avec ces nouvelles clés mais cela oblige également à chiffrer à nouveau en utilisant la nouvelle sous-clé de chiffrement.

Installation de Tails

La première étape est d’installer la distribution Tails sur une clé USB. Cela permet de faire toutes les opérations sur un système plutôt sûr.
En fonction de votre modèle de menace vous pouvez bien sûr décider d’utiliser votre système habituel.

Une fois Tails installé, démarrez sur la clé USB et pensez à activer le mode root afin de pouvoir installer les paquets nécessaires :

sudo apt update && sudo apt install gnupg2 gnupg-agent \
    cryptsetup scdaemon pcscd yubikey-personalization \
    dirmngr secure-delete

Vous pouvez vous déconnecter du réseau lorsque l’installation des paquets supplémentaires est terminée afin de manipuler vos clés PGP hors ligne.

Import des clés

Afin de manipuler vos clés il faut les réimporter dans GnuPG.

Pour cela branchez votre clé USB chiffrée contenant la sauvegarde de votre clé principale et montez la :

sudo cryptsetup open /dev/sdc1 usb
sudo mkdir -p /mnt/encrypted-usb
sudo mount /dev/mapper/usb /mnt/encrypted-usb

Créez un répertoire afin de stocker les données de GnuPG :

export GNUPGHOME=$(mktemp -d)
cd $GNUPGHOME

Importez vos clés et récupérez la configuration de GnuPG :

gpg --import /mnt/encrypted-usb/<tmp.XXX>/mastersub.key
cp -v /mnt/encrypted-usb/<tmp.XXX>/ $GNUPGHOME

Editez votre clé :

export KEYID=0x<ID>
gpg --edit-key --expert $KEYID

Pour chacune des sous-clés (signature, chiffrement et authentification) utilisez la commande expire afin de prolonger la date de validité :

key 1
expire
1y
# Déselectionnez la clé précédemment sélectionnée, la commande expire ne fonctionne que sur une clé à la fois
key 1
key 2
expire
...
# Sauvegardez les modifications effectuées
save

Exportez la clé principale et les sous-clés et sauvegardez les sur la clé USB chiffrée :

gpg --armor --export-secret-keys $KEYID >$GNUPGHOME/mastersub.key
gpg --armor --export-secret-subkeys $KEYID >$GNUPGHOME/sub.key
sudo cp -avi $GNUPGHOME /mnt/encrypted-usb

Vous pouvez éventuellement supprimer sur la clé USB chiffrée l’ancien répertoire tmp.XXX qui contient la sauvegarde précédente :

sudo rm -rf /mnt/encrypted-usb/<tmp.XXX>

Démontez la clé USB :

sudo umount /mnt/encrypted-usb
sudo cryptsetup close usb

Exportez la clé publique :

sudo mkdir /mnt/public
sudo mount /dev/sdb2 /mnt/public
gpg --armor --export $KEYID | sudo tee /mnt/public/$KEYID-$(date +%F).txt
sudo umount /mnt/public

Il ne reste plus qu’à transférer les nouvelles sous-clés sur votre clé YubiKey si vous en utilisez une :

gpg --edit-key --expert $KEYID
key 1
keytocard
key 1
key 2
keytocard
...
save

Vous pouvez enfin redémarrer et stockez en lieu sûr votre clé USB chiffrée pour la ressortir l’année prochaine.