Afficher/cacher Sommaire
Comment configurer votre YubiKey avec OpenPGP après avoir généré la clé privée puis déplacer les sous-clés vers le YubiKey
OpenPGP
Lors de la création d’une clé OpenPGP dans son mode de base, gpg va créer une paire de clés qui permet de signer et de certifier. Pour augmenter la sécurité de notre clé, nous allons utiliser une particularité d’OpenPGP : les sous-clés.
OpenPGP permet de créer des sous-clés avec un usage spécifique : signer, chiffrer et authentifier. Un autre avantage à l’utilisation des sous-clés est qu’en cas de perte ou vol des clés secrètes des sous-clés, il suffira de révoquer la sous-clé sans avoir à révoquer la clé principale (celle qui permet de certifier d’autres clés).
Commençons par créer la clé principale, celle qui va détenir notre identité. Puis ensuite, créons des sous-clés pour signer, chiffrer et authentifier.
Clé GnuPG principale
- C (Certifier) : Permet de certifier les clés publiques des autres utilisateurs.
- S (Signer) : Permet de signer les messages électroniques.
- A (Authenticate) : Permet d’authentifier l’utilisateur.
- E (Encrypt) : Permet de chiffrer les messages électroniques.
Ces permissions peuvent être cumulées sur une même clé ou réparties sur plusieurs sous-clés. Ainsi, il est possible de créer une clé principale avec la permission C et des sous-clés avec les permissions S, E et A (pour séparer les usages).
Une sous-clé (subkey) est une clé secondaire à une clé principale. Comme dit plus haut, celle-ci possède ses propres permissions et sa propre date d’expiration. La clé principale est la clé qui certifie ou révoque les sous-clés.
Générer la clé GPG
gpg --expert --full-gen-key
Etendre Réduire
Résultat
gpg: /home/leno/.gnupg/trustdb.gpg : base de confiance créée
gpg: répertoire « /home/leno/.gnupg/openpgp-revocs.d » créé
gpg: revocation certificate stored as '/home/leno/.gnupg/openpgp-revocs.d/9CA99CA33CFE67290528AFF456F69B4479ED2CFD.rev'
les clefs publique et secrète ont été créées et signées.
pub ed25519 2024-04-16 [C] [expire : 2034-04-14]
9CA99CA33CFE67290528AFF456F69B4479ED2CFD
uid Yannick MEUNIER <yann@rnmkcy.eu>
Création des sous-clés
il est important d’en avoir une dédiée à chaque tâche :
- Authentification (A)
- Signature (S)
- Chiffrement (E)
Créer des clés secondaires
gpg --edit-key --expert yann@rnmkcy.eu
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
La clef secrète est disponible.
sec ed25519/56F69B4479ED2CFD
créé : 2024-04-16 expire : 2034-04-14 utilisation : C
confiance : ultime validité : ultime
[ ultime ] (1). Yannick MEUNIER <yann@rnmkcy.eu>
La commande addkey sera exécutée 3 fois
Etendre Réduire
Accorder la confiance
gpg --edit-key yann@rnmkcy.eu
Etendre Réduire
Sauvegarde Restauration
Sauvegarder les clés GnuPG dans un dossier /sharenfs/rnmkcy/.gnupg/
# Clé publique
gpg --export --armor yann@rnmkcy.eu > /sharenfs/rnmkcy/.gnupg/yann_rnmkcy_eu_public.key
# Clé privée principale et les clés privées des subkeys
# Il faut saisir la passphrase
gpg --export-secret-keys --armor yann@rnmkcy.eu > /sharenfs/rnmkcy/.gnupg/yann_rnmkcy_eu_private.key
gpg --export-secret-subkeys --armor yann@rnmkcy.eu > /sharenfs/rnmkcy/.gnupg/yann_rnmkcy_eu_private-subkeys.key
Pour vérifier la sauvegarde, on va supprimer les clés du trousseau
gpg --delete-secret-keys yann@rnmkcy.eu
gpg --delete-keys yann@rnmkcy.eu
Les commandes gpg --list-keys
et gpg --list-secret-keys
ne devraient plus rien retourner.
Réimporter les clés sauvegardées
gpg --import /sharenfs/rnmkcy/.gnupg/yann_rnmkcy_eu_private.key
Résultat
gpg: clef 56F69B4479ED2CFD : clef publique « Yannick MEUNIER <yann@rnmkcy.eu> » importée
gpg: clef 56F69B4479ED2CFD : clef secrète importée
gpg: Quantité totale traitée : 1
gpg: importées : 1
gpg: clefs secrètes lues : 1
gpg: clefs secrètes importées : 1
Liste des clés
leno@rnmkcy:~$ gpg --list-keys
gpg: vérification de la base de confiance
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: profondeur : 0 valables : 1 signées : 0
confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.
gpg: la prochaine vérification de la base de confiance aura lieu le 2034-04-14
/home/leno/.gnupg/pubring.kbx
-----------------------------
pub ed25519 2024-04-16 [C] [expire : 2034-04-14]
9CA99CA33CFE67290528AFF456F69B4479ED2CFD
uid [ ultime ] Yannick MEUNIER <yann@rnmkcy.eu>
sub ed25519 2024-04-16 [S] [expire : 2029-04-15]
sub ed25519 2024-04-16 [A] [expire : 2029-04-15]
sub cv25519 2024-04-16 [E] [expire : 2029-04-15]
leno@rnmkcy:~$ gpg --list-secret-keys
/home/leno/.gnupg/pubring.kbx
-----------------------------
sec ed25519 2024-04-16 [C] [expire : 2034-04-14]
9CA99CA33CFE67290528AFF456F69B4479ED2CFD
uid [ ultime ] Yannick MEUNIER <yann@rnmkcy.eu>
ssb ed25519 2024-04-16 [S] [expire : 2029-04-15]
ssb ed25519 2024-04-16 [A] [expire : 2029-04-15]
ssb cv25519 2024-04-16 [E] [expire : 2029-04-15]
Exporter clé sur serveur
L’interface Web de keys.openpgp.org vous permet de :
- Chercher des clés manuellement, par empreinte ou par adresse courriel.
- Téléverser des clés manuellement et de les confirmer une fois téléversées.
- Gérer vos clés et supprimer les identités publiées.
OpenPGP Yubikey 5
Prérequis archlinux
Installez ccid et opensc à partir des référentiels officiels
sudo pacman -S ccid opensc
Créer un fichier
echo "disable-ccid" > ~/.gnupg/scdaemon.conf
Activer et démarrer le service pcscd.service
sudo systemctl enable pcscd.service --now
Retour paramétrage usine de pgp
Retour paramétrage usine de la partie pgp, installer: yay -S yubikey-manager
Exécuter : ykman openpgp reset
WARNING! This will delete all stored OpenPGP keys and data and restore factory settings. Proceed? [y/N]: y
Resetting OpenPGP data, don't remove the YubiKey...
Success! All data has been cleared and default PINs are set.
PIN: 123456
Reset code: NOT SET
Admin PIN: 12345678
Satus Yubikeys 5
Etat
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240100000006245545860000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 24554586
Name of cardholder: [non positionné]
Language prefs ...: [non positionné]
Salutation .......:
URL of public key : [non positionné]
Login data .......: [non positionné]
Signature PIN ....: non forcé
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]
La carte est vierge, il n’y aucune information personnelle. Il est recommandé de compléter les informations au cas où une personne retrouve cette clef.
Configuration yubikey
Éditons la carte et passons en mode admin. Vous pouvez entrer help pour avoir la liste des commandes disponibles.
gpg --card-edit
gpg/carte> admin
Les commandes d'administration sont permises
Nous allons tout d’abord changer le code PIN d’administration de la clef et le code PIN utilisateur. Par défaut, le code PIN de l’administrateur est 12345678 et 123456 pour le code PIN utilisateur.
Le PIN administrateur est requis pour quelques opérations sur la carte (l’export de clef par exemple), et pour débloquer quand un code PIN a été entré 3 fois par erreur.
Entrer passwd pour les changer. Commençons par le PIN administrateur et ensuite le PIN utilisateur.
gpg/carte> passwd
gpg: carte OpenPGP nº D2760001240100000006245545860000 détectée
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? 3
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? 1
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? q
gpg/carte>
Ensuite, entrer les informations pour personnaliser votre clef :
gpg/carte> name
Nom du détenteur de la carte : MEUNIER
Prénom du détenteur de la carte : Yannick
gpg/carte> url
URL pour récupérer la clef publique : https://keys.openpgp.org/search?q=yann@rnmkcy.eu
gpg/carte> quit
La clef est a présent configurée. Nous pouvons exporter les clefs privées des sous-clefs dans la carte à puce.
Exporter les clefs vers la Yubikey
L’objectif est de déplacer les clefs secrètes des sous-clefs dans la Yubikey. Pour cela, nous allons séléctionner chaque sous-clef une par une avec la commande key n et la déplacer dans la carte avec keytocard. À la fin, il n’y aura plus aucun secret dans le trousseau de clef gpg.
Éditons la clef.
gpg --expert --edit-key yann@rnmkcy.eu
La clef secrète est disponible.
gpg: vérification de la base de confiance
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: profondeur : 0 valables : 1 signées : 0
confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u.
gpg: la prochaine vérification de la base de confiance aura lieu le 2034-04-14
sec ed25519/56F69B4479ED2CFD
créé : 2024-04-16 expire : 2034-04-14 utilisation : C
confiance : ultime validité : ultime
ssb ed25519/1654EE1DCB6A4B92
créé : 2024-04-16 expire : 2029-04-15 utilisation : S
ssb ed25519/61386614B5A2EB55
créé : 2024-04-16 expire : 2029-04-15 utilisation : A
ssb cv25519/F2C20511596953B4
créé : 2024-04-16 expire : 2029-04-15 utilisation : E
[ ultime ] (1). Yannick MEUNIER <yann@rnmkcy.eu>
gpg>
Ensuite, nous sélectionnons les clés une à une pour les importer sur la Yubikey.
Etendre Réduire
Vérifions que nous n’avons plus aucune clef secrète dans notre trousseau de clefs gpg
/home/yann/.gnupg/pubring.kbx
-----------------------------
sec ed25519 2024-04-16 [C] [expire : 2034-04-14]
9CA99CA33CFE67290528AFF456F69B4479ED2CFD
uid [ ultime ] Yannick MEUNIER <yann@rnmkcy.eu>
ssb> ed25519 2024-04-16 [S] [expire : 2029-04-15]
ssb> ed25519 2024-04-16 [A] [expire : 2029-04-15]
ssb> cv25519 2024-04-16 [E] [expire : 2029-04-15]
Le chevron >
devant ssb
indique que la clef secrète n’existe pas pour cette clef.
Vérifions que ces clefs secrètes sont bien dans la Yubikey.
Reader ...........: 1050:0407:X:0
Application ID ...: D2760001240100000006245545860000
Application type .: OpenPGP
Version ..........: 3.4
Manufacturer .....: Yubico
Serial number ....: 24554586
Name of cardholder: Yannick MEUNIER
Language prefs ...: [non positionné]
Salutation .......:
URL of public key : https://keys.openpgp.org/search?q=yann@rnmkcy.eu
Login data .......: [non positionné]
Signature PIN ....: non forcé
Key attributes ...: ed25519 cv25519 ed25519
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 0 3
Signature counter : 0
KDF setting ......: off
UIF setting ......: Sign=off Decrypt=off Auth=off
Signature key ....: AD71 F453 30D5 2031 4CD5 A984 1654 EE1D CB6A 4B92
created ....: 2024-04-16 11:44:25
Encryption key....: 4CB4 96B1 B13F DC8F DEC6 38B0 F2C2 0511 5969 53B4
created ....: 2024-04-16 11:49:31
Authentication key: FB14 DDA4 0D0F EDDB A1BF B1A9 6138 6614 B5A2 EB55
created ....: 2024-04-16 11:46:53
General key info..: sub ed25519/1654EE1DCB6A4B92 2024-04-16 Yannick MEUNIER <yann@rnmkcy.eu>
sec ed25519/56F69B4479ED2CFD créé : 2024-04-16 expire : 2034-04-14
ssb> ed25519/1654EE1DCB6A4B92 créé : 2024-04-16 expire : 2029-04-15
nº de carte : 0006 24554586
ssb> ed25519/61386614B5A2EB55 créé : 2024-04-16 expire : 2029-04-15
nº de carte : 0006 24554586
ssb> cv25519/F2C20511596953B4 créé : 2024-04-16 expire : 2029-04-15
nº de carte : 0006 24554586
Nous retrouvons bien les informations personnelles dans la première partie. Ensuite, il y a les informations sur les clefs présentes dans la Yubikey.
Nous voyons qu’il y a le chevron > devant ssb. Comme vu plus haut, cela indique l’absence de la clef secrète dans le trousseau de clefs. Mais juste en dessous, il y a une ligne supplémentaire qui permet de dire à gpg où trouver la clef secrète. Ici, nous avons le numéro de série de la Yubikey card-no: 0006 24554586.
Ce numéro de série est également imprimé sur la clef physiquement. Si vous avez plusieurs Yubikey, il sera facile de retrouver celle que vous cherchez.