====== GPG ====== ===== Vocabulaire ===== * **Clé primaire vs sous-clé** - Un certificat OpenPGP peut contenir plus que la clé elle-même. Une sous-clé est rattachée à la clé primaire, qui reste la clé de niveau supérieur et sert souvent de clé maître. * **Clé publique** - Ici on manipule la partie publiée du certificat de clé. On parle donc surtout des clés publiques qui servent au chiffrement et à la vérification des signatures, même si la copie locale contient aussi les clés privées associées. * **Certificat de clé** - Dans la documentation GPG, le mot « clé » peut désigner une clé publique, une clé privée, une paire de clés ou le certificat OpenPGP qui regroupe toutes ces informations. Ici, le terme « certificat de clé » permet de lever l’ambiguïté. * **Key ID** - Chaîne hexadécimale qui identifie une clé, généralement la clé primaire. * **fingerprint** - sert à identifier de manière unique une clef. L'idée étant que, plusieurs personnes pouvant générer une clef avec un même uid, il faut pouvoir déterminer si on a la bonne clef publique en comparant son empreinte. **Note:** Les 8 derniers caractères du fingerprint correspondent à l'identifiant pub de la clé. Cette méthode d’identification des clés n’est plus fiable, il est facile de générer une clé avec une empreinte différente mais dont les 8 derniers caractères sont choisis. Fingerprint: 0D69 E11F 12BD BA07 7B37 26AB 4E1F 799A A4FF 2279 Long key ID: 4E1F 799A A4FF 2279 Short key ID: A4FF 2279 * **UID / User ID** - Le nom et l’adresse e-mail de l’utilisateur sont stockés dans une ou plusieurs entrées UID, rattachées à la clé primaire. * **Certification vs signature** - Une signature porte sur des données arbitraires. Une certification consiste à signer la clé d’un tiers. Dans la pratique, on parle pourtant souvent de « key signing » pour les deux cas. * **Paquet de clé** - Le terme « packet » de la RFC4880 désigne un composant du format message/certificat. Les messages et certificats OpenPGP sont composés de paquets et de sous-paquets. * **Trust, validité et Web of Trust** - GPG combine la confiance locale accordée à des utilisateurs et la validité remontée par les signatures de clés. Cet ensemble forme le « Web of Trust » utilisé pour déterminer si une clé peut être acceptée sans avertissement supplémentaire. Ici, on s’intéresse surtout à la validité. ===== Générer une paire de clés GPG manuellement ===== gpg --full-gen-key --expert ==== Génération auto d'une primary_key avec en paramètres: durée 1 an, RSA 4096, servant uniquement à certifier ==== gpg --quick-gen-key 'Thomas vlp ' rsa4096 cert 1y ==== Gérération sous-clef servant à signer uniquement sur les même paramètres ==== gpg --quick-addkey ID_KEY_primary_key rsa4096 sign 1y ==== Génération sous-clef servant uniquement à encrypter sur les même paramètres ==== gpg --quick-addkey ID_KEY_primary_key rsa4096 encr 1y ===== Clef par default: ajouter dans gpg.conf ===== default-key ID_KEY no-greeting personal-digest-preferences SHA512 personal-cipher-preferences AES256 AES cert-digest-algo SHA512 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed s2k-cipher-algo AES256 s2k-digest-algo SHA512 s2k-mode 3 s2k-count 65011712 si non spécifié, la clef par default est la première affiché par gpg -K ===== Générer certif de révocation ===== gpg --output revocation.asc --gen-revoke thomas@vlp.fr ===== Lister les clés publiques ===== gpg -k ===== Lister les clés privées ===== gpg -K ===== Récupérer les (si subkey) fingerprints de la clé ===== gpg --fingerprint ID_KEY ===== Exporter une clé publique dans un fichier ===== gpg -a --export ID_KEY > pub_key.key ===== Importer une clé publique depuis un fichier ===== gpg --import pub_key.key ===== Exporter une clé privée dans un fichier ===== gpg -a --export-secret-key > primary_key.key -a laisse la clef dans un format lisible ===== Exporter sub-key privée dans un fichier ===== gpg -a --export-secret-subkeys > secret_subkeys.gpg ===== Importer une clé privée depuis un fichier ===== gpg --import --allow-secret-key-import primary_key.key ===== Signer un fichier ===== ==== Signer fichier text ==== gpg --clearsign fichier ==== Signer binairies (signature à part) ==== gpg --detach-sign fichier ===== Chiffrer et signer un fichier ===== gpg -s -a -e fichier_à_signer -s signe -a laisse en format lisible (sinon binairie) -e chiffre ===== Déchiffrer un fichier ===== gpg -r ID_KEY -d fichier_à_chiffrer ===== Vérifier la signature séparée ===== gpg --verify fichier_signature fichier_signé ===== Vérifier la signature incluse ===== gpg --verify fichier_signé ===== Supprimer une clé privée : ===== gpg --delete-secret-keys ID_KEY gpg --delete-key ID_KEY ===== Informations plus poussées sur une paire de clé ===== gpg --edit-key ID_KEY export mode: --expert ==== Afficher options ==== help ===== Changer la passphrase d'une clé privée ===== gpg --edit-key ID_KEY passwd save ===== Chiffrement symétrique ===== gpg -c -o out.gpg --cipher-algo AES256 -s in.gpg ===== Installer les outils pour carte GPG / YubiKey ===== sudo apt install scdaemon pcscd pcsc-tools ===== Afficher info card ===== gpg --card-status ===== Lister/modifier les info ===== gpg --card-edit >admin >help ===== Transférer clef sur card ===== gpg --edit-key ID_KEY #séclection key1 aka subkey1 car key0 = primary_key (absente car offline cf bonne pratiques) >key1 #envoie key1 et répondre à la question sur nature de la key: S ou E >keytocard #déselectionne key1 (! e pas oublier) >key1 #sélectionne key2 >key2 >keytocard >key2 >save ===== Utiliser notre card + subkey sur nouvelle machine ===== #se connecter sur la nouvelle machine qui à déjà import notre clef public gpg --card-edit fetch ===== Avertissement de confiance ===== There is no assurance this key belongs to the named user gpg --edit-key ID_KEY > trust ===== Bonne pratique ===== Pré-requis : 2 cartes GPG et 1 YubiKey (ou équivalent). 1. créer une primary key pour certifier 2. créer une sub key pour signer, une subkey pour chiffrer et une sub key pour auth 3. créer certif de revoc 4. exporter la primary key et les sub keys 5. mettre la primary key sur une gpg card > backup offline 6. mettre les subkey sur une gpg card > backup offline 7. supprimer les clefs (il faut réimporter la clef primaire pour supprimer les clef secondaires avec) 8. importer uniquement les subkeys 9. mettre les subkey sur la yubi key like 10. stocker les cards en un lieu sur > cf étapes 5 & 6