Lezioni online Bitcoin-only
This project is maintained by valerio-vaccaro
Officine Bitcoin Leçon Bitcoin-only Ce projet est maintenu par valerio-vaccaro
đšđł äžæ đŹđ§ English đȘđž Español đ”đč PortuguĂȘs đ·đș Đ ŃŃŃĐșĐžĐč đ«đ· Français đ©đȘ Deutsch đźđč Italiano đđș Magyar đłïž MilanĂ©s đłïž Veneto
Cette leçon vous guide dans lâutilisation de Gnu Privacy Guard (GPG) :
Elle est conçue pour Linux, avec des commandes testĂ©es sur GPG 2.2.40/Debian 12. Les mĂȘmes commandes peuvent fonctionner de façon similaire sur dâautres versions de Linux ainsi que sur MacOSX et Windows (sauf pour les systĂšmes de fichiers chiffrĂ©s).
Le processus suit les bonnes pratiques de sécurité, comme la génération de clés hors ligne et les sauvegardes sécurisées.
Installez gpg et les utilitaires nécessaires
sudo apt update
sudo apt install gnupg scdaemon pcscd yubikey-manager
Assurez-vous que la version est 2.1.17 ou ultérieure (2.4.5 recommandée).
gpg --version
Vérifiez le fonctionnement de la YubiKey
ykman info
Assurez-vous que lâapplet OpenPGP est activĂ© et que le mode CCID est actif.
Utilisez une machine isolée du réseau (sans internet) pour générer les clés et éviter les fuites.
Nâoubliez pas que les PIN par dĂ©faut de YubiKey ne sont pas sĂ»rs et sont :
Générez une paire de clés GPG primaire (publique et privée) uniquement pour la certification (C) ; toutes les autres clés en dériveront.
DĂ©marrez la gĂ©nĂ©ration de clĂ©s avec âexpert pour accĂ©der aux options avancĂ©es.
gpg --expert --full-gen-key
Sélectionnez le type de clé :
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(9) ECC and ECC
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(13) Existing key
(14) Existing key from card
Your selection? 8
Choisissez (8) RSA (set your own capabilities) pour personnaliser le comportement de la clé.
Configurez les capacités :
Possible actions for a RSA key: Sign Certify Encrypt Authenticate
Current allowed actions: Sign Certify Encrypt
(S) Toggle the sign capability
(E) Toggle the encrypt capability
(A) Toggle the authenticate capability
(Q) Finished
Your selection? S
Désactivez Sign et Encrypt (appuyez sur S, E).
Conservez Certify (appuyez sur Q une fois terminé).
Ainsi, seul Certify reste parmi les actions autorisées.
Définissez la taille de la clé :
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Saisissez 4096 (maximum pris en charge par YubiKey 4/5).
DĂ©finissez lâexpiration :
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Saisissez 3y (3 ans) ou votre préférence. Confirmez la date.
Saisissez lâUser ID :
GnuPG needs to construct a user ID to identify your key.
Real name: Satoshi Spritz
Email address: info@satoshispritz.it
Comment:
You selected this USER-ID:
"Satoshi Spritz <info@satoshispritz.it>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
Indiquez le nom et lâe-mail. Laissez le commentaire vide. Confirmez avec O.
Saisissez une passphrase forte (mélangez lettres, chiffres et symboles ; évitez les mots courants).
Exemple : Tr0ub4dor&3xplor3r!2025
La passphrase protÚge votre clé privée.
GĂ©nĂ©rez de lâentropie en dĂ©plaçant la souris, en tapant au hasard ou en utilisant rng-tools (Linux et seulement si vous comprenez bien son fonctionnement) :
sudo apt install rng-tools
sudo rngd -r /dev/urandom
Attendez la fin de la génération de la clé. Notez le key ID (par exemple C2033656849FC82BA3C365E33C9BF8B9CB86875D) dans la sortie :
gpublic and secret key created and signed.
pub rsa2048 2025-07-20 [C]
C2033656849FC82BA3C365E33C9BF8B9CB86875D
uid Satoshi Spritz <info@satoshispritz.it>
CrĂ©ez un certificat de rĂ©vocation au cas oĂč la clĂ© serait compromise (votre client lâa peut-ĂȘtre dĂ©jĂ créé) :
gpg --output revoke_master_satoshispritz.asc --gen-revoke C2033656849FC82BA3C365E33C9BF8B9CB86875D
Choisissez le motif (par exemple 1 = clé compromise) et enregistrez.
Créez des sous-clés de signature et de chiffrement. Deux sous-clés seront ajoutées pour la signature (S) et le chiffrement (E).
La clé primaire reste réservée à la certification.
Modifiez la clé :
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Saisissez la passphrase si elle est demandée.
Ajoutez la sous-clé de signature :
gpg> addkey
Please select what kind of key you want:
(3) DSA (sign only)
(4) RSA (sign only)
(5) Elgamal (encrypt only)
(6) RSA (encrypt only)
(7) DSA (set your own capabilities)
(8) RSA (set your own capabilities)
(10) ECC (sign only)
(11) ECC (set your own capabilities)
(12) ECC (encrypt only)
(13) Existing key
(14) Existing key from card
Your selection? 4
Choisissez (4) RSA (sign only).
Définissez la taille : 4096.
DĂ©finissez lâexpiration : 2y (2 ans, les sous-clĂ©s peuvent ĂȘtre renouvelĂ©es plus frĂ©quemment).
Confirmez et saisissez la passphrase.
Ajoutez la sous-clé de chiffrement :
gpg> addkey
Choisissez (6) RSA (encrypt only).
Définissez la taille : 4096.
DĂ©finissez lâexpiration : 2y.
Confirmez et saisissez la passphrase.
Enregistrez les modifications :
gpg> save
Vérifiez les sous-clés :
gpg --list-keys --with-subkey-fingerprints C2033656849FC82BA3C365E33C9BF8B9CB86875D
Exemple de sortie :
pub rsa4096 2025-07-20 [C] [expires: 2028-07-20]
C2033656849FC82BA3C365E33C9BF8B9CB86875D
uid [ultimate] Satoshi Spritz <info@satoshispritz.it>
sub rsa4096 2025-07-20 [S] [expires: 2027-07-20]
1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3
sub rsa4096 2025-07-20 [E] [expires: 2027-07-20]
94C11C615BE049B97899FA3C8DC3736F499D6C3E
Notez les fingerprints des sous-clés de signature (S) et de chiffrement (E).
Sauvegarde de toutes les clés. Sauvegardez la clé primaire, les sous-clés et la clé publique sur deux clés USB chiffrées par sécurité.
Préparez les clés USB : insérez deux clés USB (par exemple /dev/sdb et /dev/sdc).
Créez des partitions chiffrées (par exemple avec LUKS) :
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 backup1
sudo mkfs.ext4 /dev/mapper/backup1
sudo mount /dev/mapper/backup1 /mnt/backup1
Répétez pour /dev/sdc1 (par exemple montée sur /mnt/backup2).
Exportez les clés privées : exportez la clé primaire et les sous-clés :
gpg --armor --export-secret-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D! > /mnt/backup1/secret_master_satoshispritz.asc
gpg --armor --export-secret-keys 1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3! > /mnt/backup2/secret_sign_satoshispritz.asc
gpg --armor --export-secret-keys 94C11C615BE049B97899FA3C8DC3736F499D6C3E! > /mnt/backup2/secret_encrypt_satoshispritz.asc
Exportez les clés publiques :
gpg --armor --export C2033656849FC82BA3C365E33C9BF8B9CB86875D! > /mnt/backup1/public_master_satoshispritz.asc
gpg --armor --export 1E3C548D2CA2927D205C1A85426E4AB8E6D72AC3! > /mnt/backup2/public_sign_satoshispritz.asc
gpg --armor --export 94C11C615BE049B97899FA3C8DC3736F499D6C3E! > /mnt/backup2/public_encrypt_satoshispritz.asc
Exportez le certificat de révocation :
cp revoke_master_satoshispritz.asc /mnt/backup1/revoke_master_satoshispritz.asc
cp revoke_master_satoshispritz.asc /mnt/backup2/revoke_master_satoshispritz.asc
Démontez en toute sécurité :
sudo umount /mnt/backup1
sudo cryptsetup luksClose backup1
Répétez pour backup2. Stockez les clés USB dans des lieux séparés et sûrs (par exemple un coffre).
Supprimez les clés locales (facultatif) : si vous utilisez une machine isolée du réseau, supprimez le répertoire GPG :
rm -rf ~/.gnupg
Les clĂ©s devront ensuite ĂȘtre importĂ©es sur la machine oĂč vous les utiliserez.
Si la machine nâest pas isolĂ©e du rĂ©seau, conservez les clĂ©s jusquâau transfert vers la YubiKey.
Transférez les sous-clés de signature et de chiffrement vers la YubiKey, en gardant la clé primaire hors ligne.
Insérez la Yubikey et vérifiez :
gpg --card-status
La sortie doit afficher lâapplet OpenPGP (par exemple Version: 2.0).
Changez les PIN par défaut :
gpg --change-pin
User PIN : définissez un nouveau PIN de 6 à 8 chiffres (par exemple 654321). Admin PIN : définissez un nouveau PIN de 8 chiffres (par exemple 87654321).
Modifiez la clé pour le transfert :
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Sélectionnez et transférez la sous-clé de signature : listez les clés pour identifier les indices des sous-clés :
gpg> list
Exemple :
sec rsa4096/3C9BF8B9CB86875D
created: 2025-07-20 expires: 2028-07-20 usage: C
trust: ultimate validity: ultimate
ssb rsa4096/426E4AB8E6D72AC3
created: 2025-07-20 expires: 2027-07-20 usage: S
ssb rsa4096/8DC3736F499D6C3E
created: 2025-07-20 expires: 2027-07-20 usage: E
Sélectionnez la sous-clé de signature :
gpg> key 1
La sous-clé de signature aura un astérisque (*).
Transférez vers la YubiKey :
gpg> keytocard
Please select where to store the key:
(1) Signature key
(3) Authentication key
Your selection?
Saisissez lâAdmin PIN (par exemple 87654321). La sous-clĂ© privĂ©e de signature est transfĂ©rĂ©e vers la YubiKey et remplacĂ©e par un stub dans le keyring.
Sélectionnez et transférez la sous-clé de chiffrement : désélectionnez la sous-clé de signature :
gpg> key 1
Sélectionnez la sous-clé de chiffrement :
gpg> key 2
Transférez vers la YubiKey :
gpg> keytocard
Please select where to store the key:
(2) Encryption key
Your selection? 2
Saisissez de nouveau lâAdmin PIN.
Enregistrez les modifications :
gpg> save
Les sous-clés privées sont maintenant sur la YubiKey, avec des stubs locaux.
Vérifiez la YubiKey :
gpg --card-status
Vérifiez que les emplacements Signature key et Encryption key affichent les fingerprints des sous-clés.
Exportez les sous-clés privées (pour vérifier la sauvegarde) :
gpg --armor --export-secret-subkeys C2033656849FC82BA3C365E33C9BF8B9CB86875D > secret-subkeys-satoshispritz.asc
Supprimez le répertoire GPG local :
rm -rf ~/.gnupg
Réimportez la clé publique et les stubs :
gpg --import public.asc
gpg --import secret-subkeys-satoshispritz.asc
La clĂ© privĂ©e primaire nâest plus sur lâordinateur.
Utilisez la YubiKey pour chiffrer et signer un fichier destiné à un destinataire.
Préparez un fichier de test :
echo "This is a secret message." > test.txt
Obtenez la clé publique du destinataire (par exemple bob@example.com) :
gpg --keyserver hkps://keys.openpgp.org --search-keys bob@example.com
Ou importez-la depuis un fichier :
gpg --import bob_public.asc
Chiffrez et signez : chiffrez pour bob@example.com et signez avec Yubikey :
gpg --encrypt --sign --recipient bob@example.com test.txt
Saisissez lâUser PIN (par exemple 654321) lorsque demandĂ©.
Si YubiKey exige une confirmation tactile (facultatif, configurée via ykman openpgp keys set-touch), touchez la YubiKey.
La sortie sera test.txt.gpg
Déchiffrez le fichier (nécessite YubiKey) :
gpg --decrypt test.txt.gpg > test_decrypted.txt
Saisissez lâUser PIN et touchez la Yubikey si nĂ©cessaire.
Vérifiez que test_decrypted.txt correspond à test.txt.
Bob peut déchiffrer avec sa clé privée et vérifier votre signature :
gpg --decrypt test.txt.gpg
Si vous voulez seulement signer le fichier, vous pouvez utiliser les commandes suivantes.
gpg --detach-sign test.txt
Cela générera un fichier de sortie nommé test.txt.sig
Pour le vérifier :
gpg --verify test.txt.sig test.txt
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
gpg> addkey
Transférez les nouvelles sous-clés vers la YubiKey et mettez à jour la clé publique sur les serveurs :
gpg --keyserver hkps://keys.openpgp.org --send-keys C2033656849FC82BA3C365E33C9BF8B9CB86875D
Utilisez une seconde YubiKey pour la redondance :
gpg --import secret.asc
gpg --expert --edit-key C2033656849FC82BA3C365E33C9BF8B9CB86875D
Répétez les étapes keytocard pour la seconde YubiKey.
Si vous devez réinitialiser la Yubikey :
ykman openpgp reset
Pour restaurer les sous-clés depuis la sauvegarde :
gpg --import secret.asc
âPublic Key Not Usableâ : assurez-vous que la clĂ© publique du destinataire est importĂ©e et considĂ©rĂ©e comme fiable :
gpg --edit-key bob@example.com
gpg> trust
Définissez sur 5 = Ultimate trust.