GnuPG : Créer la paire de clé gpg parfaite : clé maitre, subkeys et support smartcard (yubikey)

De Linux Server Wiki
Aller à la navigation Aller à la recherche

Prérequis

  • Une clé usb, disque usb, ou tout autre média amovible réinscriptible pour stocker de manière sécurisé votre clé gpg maître. Je vous recommande vivement de chiffrer ce media (en utilisant par exemple veracrypt).

Initialisation

Montez votre media usb sur votre ordinateur. Dans cet exemple, il sera monté dans /media/veracrypt1. Créez un dossier qui va contenir votre trousseau gpg maître.

mkdir -p /media/veracrypt1/GNUPG_HOME/HOME/

Si vous utilisez le système de fichier FAT sur le media usb sur lequel vous allez stocker votre trousseau maître gpg, il faut créer un fichier S.gpg-agent à la racine de votre futur trousseau gpg afin de forcer la création du socket de l'agent gpg en dehors du système de fichier FAT. Dans cet exemple, je force la création du socket de l'agent gpg dans le répertoire utilisateur de ma machine :

cat >/media/veracrypt1/GNUPG_HOME/HOME/S.gpg-agent <<EOF
%Assuan%
socket=${HOME}/.gnupg/S.gpg-agent-SecureDisk
EOF

Générer la clé maître

Nous allons créer une clé maître RSA de 8192 bits. Cette taille de clé n'est pas nativement supportée par gpg mais on peut en forcer la création en passant par le mode batch de gpg. Pour cela, nous créons le fichier newkey contenant les différentes informations de notre future clé maître. Pensez à changer les lignes Name-Real, Name-Email et Passphrase :

cat >newkey <<EOF
     %echo Generating a RSA key
     Key-Type: RSA
     Key-Length: 8192
     Key-Usage: cert,sign
     Name-Real: testuser
     #Name-Comment:
     Name-Email: testuser@domain.tld
     Expire-Date: 0
     Passphrase: tmppassphrasepleaseedit
     # Do a commit here, so that we can later print "done"
     %commit
     %echo done
EOF

Générez la clé maître dans le trousseau gpg maître que nous avons créé :

gpg --homedir /media/veracrypt1/GNUPG_HOME/HOME/ --batch --gen-key --enable-large-rsa -a newkey

Dans cet exemple, la clé créé a l'identifiant 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951.

Vous pouvez ajouter des uid à votre clé maître en utilisant la commande adduid du prompt gpg. Vous devez pour cela commencer par éditer votre clé maître :

gpg --homedir /media/veracrypt1/GNUPG_HOME/HOME/ --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951

Puis entrer la commande adduid au prompt gpg. Terminez avec save.

adduid
save

Si vous rencontrez un problème lors de la génération d'un uid, éditez la clé avec l'argument --allow-freeform-uid

Ajout des sous-clés (subkeys)

Clé de signature

Pour commencer, nous allons créer une subkey de signature. Commencez par ouvrir votre clé maître :

gpg --homedir /media/veracrypt1/GNUPG_HOME/HOME/ --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951

Au prompt gpg, utilisez la commande addkey. Utilisez le type RSA (sign only), la taille 4096 et éventuellement une date d'expiration (dans mon cas, je n'en spécifie aucune (0)). Terminez en sauvegardant la clé (save) :

addkey
(4) RSA (sign only)
4096
0
save

Clé de chiffrement

Nous allons maintenant créer une subkey de chiffrement. Commencez par ouvrir votre clé maître :

gpg --homedir /media/veracrypt1/GNUPG_HOME/HOME/ --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951

Au prompt gpg, utilisez la commande addkey. Utilisez le type RSA (encrypt only), la taille 4096 et éventuellement une date d'expiration (dans mon cas, je n'en spécifie aucune (0)). Terminez en sauvegardant la clé (save) :

addkey
(6) RSA (encrypt only)
4096
0
save

Clé d'authentification

Enfin, créons une subkey d'authentification. Commencez par ouvrir votre clé maître avec l'argument --expert :

gpg --homedir /media/veracrypt1/GNUPG_HOME/HOME/ --expert --edit-key 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B8951

Au prompt gpg, utilisez la commande addkey. Utilisez le type RSA (set your own capabilities), désactivez les flags de signature et de chiffrement, activez le flag d'authentification. Pour la taille, 4096 bits et éventuellement une date d'expiration (dans mon cas, je n'en spécifie aucune (0)). Terminez en sauvegardant la clé (save). Au prompt gpg on obtient :

addkey
(8) RSA (set your own capabilities)
(S) Toggle the sign capability                     (on désactive la signature activé par défaut)
(E) Toggle the encrypt capability                  (on désactive l'encrypt activé par défaut)
(A) Toggle the authenticate capability             (on active l'auth)
(Q) Finished
4096
0
save

Etat des lieux

A ce stade, vous devriez vous retrouver avec quelque chose comme ça :

$ gpg --keyid-format LONG --list-keys 7EBA8211BFF531EE59E25CBD99FD9BFE6F9B895
pub   rsa1024/99FD9BFE6F9B8951 2017-07-07 [C]
uid                 [ultimate] testuser <testuser@domain.tld>
sub   rsa1024/0B4D29418F92CF1D 2017-07-07 [S]
sub   rsa1024/91B74A739D6A4242 2017-07-07 [E]
sub   rsa1024/256A58F8E560F1D7 2017-07-07 [A]

Générer un certificat de révocation pour la clé maître