Cette page est inachevée, certaines sections restent à compléter ! Néanmoins, les autres sections sont complètes et peuvent être suivies sans crainte.
À faire :
Cette page explique les bonnes pratiques d'utilisation des clés OpenPGP et la génération d'une clé via GnuPG2.1+ (GnuPG, GnuPG2.0) utilisable à vie pour toutes les adresses mail désirées sur plusieurs ordinateurs différents.
Ce guide part du principe que vous possédez une clé USB chiffrée. Comment faire ?
Avant de se lancer, rien de mieux que de se cultiver un peu pour éviter toute forme de cacophonie puriste dans le local. Et puis c'est toujours bien de se coucher moins bête
Ce que nous dit Wikipédia1) :
OpenPGP est un format de cryptographie initialement proposé par l'Internet Engineering Task Force (IETF). Cette proposition de « standard » décrit le format des messages, signatures et certificats que peuvent échanger des logiciels de cryptographie comme GNU Privacy Guard. Ce n'est donc pas un logiciel mais un format pour l'échange sécurisé de données qui doit son nom à l'application de cryptographie historique, Pretty Good Privacy (PGP).
Alors justement c'est quoi l'histoire ?
C'est un logiciel propriétaire qui a été initialement écrit par Phil Zimmerman & Associates, LLC et publié en 1991. Le but était d'assurer la sécurité des fichiers publiés sur BBS2), un ancien concurrent d'Internet. De 1997 à 2010, PGP a changé de nombreuses fois de propriétaire jusqu'à ce qu'il soit finalement acquis par Symantec Corp. qui encore aujourd'hui continue de développer PGP.
Le chiffrement PGP utilise une combinaison de méthodes comme le hashing, la compression de données, la cryptographie symétrique et la cryptographie à clé publique afin de sécuriser les données. On peut s'en servir pour chiffrer du simple fichier texte à la partition de disque.
Zimmerman, en bon hipster, commença à développer une version open-source de PGP. Celle-ci n'emploierait donc pas d'algorithme soumis à des licences propriétaires ou ambiguës.
En 1997 il proposa les normes OpenPGP à l'IETF pour permettre aux fournisseurs de chiffrement conformes aux normes PGP de fournir des solutions compatibles avec d'autres fournisseurs de logiciels compatibles OpenPGP. Cela servira à créer un environnement libre3) et compétitif permettant aux outils de chiffrement PGP de prospérer.
Aujourd'hui OpenPGP est une norme open-source de PGP pour une utilisation publique et ce terme peut être utilisé pour décrire n'importe quel programme basé sur le système OpenPGP (e.g. GnuPG).
GnuPGP a été développé par Werner Koch et publié en 1999 en tant qu'alternative à PGP. C'est un logiciel qui se base sur les normes OpenPGP, il est disponible gratuitement dans les dépôts officiels de toute bonne distribution GNU/Linux. Grace à sa conception, il peut être utilisé pour déchiffrer n'importe quel fichier de normes OpenPGP ou PGP.
GPG fournit une interface utilisateur lors de son intégration dans des logiciels de messagerie électronique ou des systèmes d'exploitation. Sans GUI4), l'interface de GnuPG, dès lors TUI5), prend la forme d'un script Perl attendant des commandes.
Section à compléter
Maintenant que vous avez une idée plus claire de ce dont il est question ici, munissez-vous de votre clé USB chiffrée et d'un ordinateur sous une distribution end-user de GNU/Linux (pas Android svp jouez pas sur les mots).
Faire des copier-coller ici ne sera pas suffisant, il faudra modifier une partie de la commande écrite et cela peut donner lieu à des erreurs. Avant de commencer il est indispensable de faire une sauvegarde de votre dossier GnuPG si le logiciel est déjà installé et utilisé (si vous n'avez encore rien fait, faites-le quand même : responsable ou pas, je me dois de vous inculquer les bonnes pratiques).
$ umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
Notez que umask ici restreint les droits UNIX du fichier de backup.
Dépendamment de votre distribution, installer le paquet gnupg
du dépôt officiel ne résulte pas nécessairement en l'installation de la dernière version de GnuPG.
Pour savoir quelle version de GnuPG est actuellement installée :
$ gpg --version
Si la version est inférieure à 2.1, il est impératif de la mettre à jour en installant le paquet gnupg2 depuis vos sources officielles et en désinstallant gnupg
(si les paquets sont différenciés). (ArchLinux ne fait pas de distinction entre gnupg
et gnupg2
, la dernière version est installée par défaut)
Pas d'inquiétude si vous avez généré des clés avec une version antérieure, la mise à jour détectera la version de la norme OpenPGP correspondante et ne maltraitera pas vos clés. (Si néanmoins vous rencontrez un problème, comptez sur votre sauvegarde et tentez de le résoudre)
Si vous n'avez pas encore de clé ou que vous souhaitez repartir sur de bonnes bases, générez votre clé comme suit.
$ gpg --full-gen
La clé doit suivre la configuration suivante :
GnuPG s'attend à ce que vous génériez suffisamment d’entropie pour générer un trousseau de clés complexes. Si vous êtes un minimum en train d'utiliser le multitâche de votre machine, cette opération devrait durer moins d'une seconde (pas besoin d'installer une Gentoo pour générer ses clés en même temps que le noyau est compilé…).
Vous êtes alors gratifié de 3 messages :
Des clés publiques et uid ont été créées : une pub
marquée SC, votre uid
et une sub
marquée E
On peut désormais éditer la clé.
IMPORTANT :
Cette section a été écrite en majeure partie d'après la page Subkeys du Wiki Debian. Je n'ai pas retranscrit la première partie de la page, néanmoins c'est une chouette lecture !
Pour éditer la clé il faut indiquer sont identifiant, une chaîne de caractère hexadécimaux indiqué sous chaque clé publique maître en affichant les trousseaux de clés.
$ gpg --list-keys
Cet identifiant est propre à chaque clé, il sera référé [KEYID] ici.
Note : vous pouvez aussi indiquer un élément non ambiguë référant une clé (nom, pseudo, email, etc.)
On souhaite donc éditer la clé.
$ gpg --edit-key [KEYID]
Vous êtes alors amené dans un menu Perl avec en tête des informations relatives à votre GnuPG et la clé (key) sélectionnée. Il devrait, si vous l'avez généré comme indiqué précédemment, ressembler à ceci :
$ gpg --edit-key 2E8E92BA2A1EA6117F5C25DF7DD672F2005DB344 gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. 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 rsa4096/7DD672F2005DB344 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/3FD21124C7F71832 créé : 2018-02-27 expire : jamais utilisation : E [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> gpg>
sec
correspond à votre clé secrète maître. On voit ici qu'elle a les rôles S et C. ssb
correspond à une sous-clé (subkey) secrète ; son unique rôle est E.
Ces rôles, utilisations ou flags indiquent ce qu'il est possible de faire avec la clé en question. En voici la liste pour les clés secrètes :
GnuPG ne semble implémenter que ces flags, néanmoins les spécifications d'OpenPGP (IETF RFC48807)) en prévoient 3 de plus.
Nous allons générer une subkey qui servira à signer. On crée une nouvelle clé depuis l'invite gpg>
.
Suivez la création comme suit :
gpg> addkey Sélectionnez le type de clef désiré : (3) DSA (signature seule) (4) RSA (signature seule) (5) Elgamal (chiffrement seul) (6) RSA (chiffrement seul) Quel est votre choix ? 4 les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits. Quelle taille de clef désirez-vous ? (2048) 4096 La taille demandée est 4096 bits Veuillez indiquer le temps pendant lequel cette clef devrait être valable. 0 = la clef n'expire pas <n> = la clef expire dans n jours <n>w = la clef expire dans n semaines <n>m = la clef expire dans n mois <n>y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) [voir la note au dessous] La clef expire le mer. 27 févr. 2019 13:09:32 CET Est-ce correct ? (o/N) o Faut-il vraiment la créer ? (o/N) o De nombreux octets aléatoires doivent être générés. Vous devriez faire autre chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie. sec rsa4096/7DD672F2005DB344 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/3FD21124C7F71832 créé : 2018-02-27 expire : jamais utilisation : E ssb rsa4096/A83F56E4D4DF613A créé : 2018-02-27 expire : 2019-02-27 utilisation : S [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> gpg>
Note : Je vous déconseille de choisir une date d'expiration supérieure à 5 ans, l'idéal serait entre 1 et 2 ans (moins d'un an, à moins d'être Edward Snowden, n'est pas utile).
Vous pouvez désormais signer avec cette subkey ou avec votre master. Comme vous l'avez-vu lors du paramétrage de la clé, une subkey ne peut qu'avoir les flags E et S. Pour certifier une clé il faut nécessairement utiliser sa master.
À présent, si vous le souhaitez, vous pouvez changer la date d'expiration de votre subkey E (générée avec votre master). De cette façon, Mallory, s'il vous dérobe votre ssb E
, ne pourra pas déchiffrer les messages qui vous sont envoyés le temps que vous changiez de ssb E
.
Commencez par sélectionner la clé en indiquant son ID et changez sa durée de vie.
gpg> list [...] gpg> key [SUBKEYID] [Un * devrait apparaître devant la clé sélectionnée, attention à ne pas en sélectionner plusieurs.] gpg> expire
Vous pouvez alors sauvegarder votre clé.
gpg> save
Note : Avant de passer à la suite, jeter un œil à la section Modifier une clé
Comme vous disposez de subkeys pour les deux opérations les plus fréquentes (signer des données et déchiffrer des messages), vous n'avez pas besoin de conserver votre master sur votre ordinateur, de plus, cela est dangereux car il suffit de supprimer le dossier .gnupg pour que tout soit perdu (pas besoin d'être root).
Copiez alors votre dossier .gnupg vers votre clé USB chiffrée (ne l'archivez pas, contentez-vous de le copier)
$ cp $HOME/.gnupg /run/media/[user]/[usb]/.
Ensuite exportez votre clé maître, puis (1) toutes vos subkeys ou (2) celles de votre choix. Et entrez le mot de passe de la clé.
$ gpg --export-secret-key [KEYID] > [fingerprint].secret-key (1) $ gpg --export-secret-subkeys [KEYID] > [fingerprint].secret-subkeys ou (2) $ gpg --export-secret-subkeys [SUBKEYID_1]! [SUBKEYID_2]! .. > [fingerprint]-[E/S/A/etc.].secret-subkeys
Supprimez alors votre clé secrète maître (si si).
$ gpg --delete-secret-key [KEYID]
Importez les ssb
précédemment exportées. Entrez votre mot de passe de clé.
$ gpg --import [fingerprint].secret-subkeys
Et vérifiez le bon déroulement de l'opération.
$ gpg -K
Un # devrait être apparu à droite de sec
signifiant que la master key n'est plus stockée dans la clé.
(Factultatif) Vous pouvez changer le mot de passe protégeant vos subkeys sur l'appareil.
$ gpg --edit-key [KEYID] passwd [...] gpg> quit
Votre ordinateur est désormais prêt pour une utilisation normale.
Vous allez être amené à devoir utiliser votre clé maître secrète dans l'un des cas suivant :
Pour ce faire, branchez votre clé USB chiffrée contenant la copie du dossier .gnupg et indiquez à GnuPG le chemin vers le répertoire .gnupg de votre clé.
$ gpg --homedir /run/media/[user]/[usb]/[chemin]/.gnupg --edit-key [KEYID] [Opérations...] ou $ export GNUPGHOME=/run/media/[user]/[usb]/[chemin]/.gnupg $ gpg --edit-key [KEYID] [Opérations...] $ export GNUPGHOME=$HOME/.gnupg
N'oubliez pas que le mot de passe n'est pas celui que vous avez peut-être défini pour vos subkeys localement mais celui de votre clé.
Si des modifications concernant les uid (par exemple) ont été apportées, n'oubliez pas de faire une sauvegarde de votre .gnupg local, de supprimer $HOME/.gnupg, de copier le .gnupg de votre clé sur votre ordinateur et de refaire la manipulation décrite dans Protéger la clé maître secrète. Cette méthode n'est pas recommandée, surtout si votre répertoire .gnupg est protégé comme c'est le cas pour WSL (qui relie ~/.gnupg avec C:/Users/<user>/AppData/Roaming/gnupg/) permettant une utilisation synchronisée de GnuPG sur Windows et WSL. Préférez la méthode de réimportation des subkeys suivante.
Après avoir effectué des modifications, votre clé se trouve modifiée. Il est donc nécessaire d'exporter ces modifications afin qu'elles soient publiées et utilisables dans le cas d'altération ou de création de subkeys.
Pour cela, re-publiez votre clé publique par la méthode de votre choix et exportez vos subkeys si cela est nécessaire.
$ gpg --homedir /run/media/[user]/[usb]/[chemin]/.gnupg --export-secret-subkeys [KEYID | SUBKEYID1 [SUBKEYID2] ...] > [fingerprint].secret-subkeys ou (selon le choix de la méthode à l'étape précédente) $ gpg --export-secret-subkeys [KEYID | SUBKEYID1 [SUBKEYID2] ...] > [fingerprint].secret-subkeys
Puis importez la nouvelle version de la clé publique et les subkeys.
$ gpg --keyserver <keyserver> --recv-keys <keyid (commence par 0x)> $ gpg --import [fingerprint].secret-subkeys
Vous pouvez alors démonter et détacher votre clé USB chiffrée.
Une dernière méthode, plus simple, est possible mais elle nécessite de stocker la clé maître temporairement sur la machine (donc plus uniquement sur votre clé chiffrée) et n'est donc pas recommandée ni explicité ici.
Finalement c'est cette étape la plus utile de cette page : comment on s'en sert de cette clé ?
Pour une utilisation quotidienne, il est rarement nécessaire d'utiliser le terminal pour signer ou chiffrer un message. Généralement on n'envoie que des mails et on souhaite donc pouvoir signer et chiffrer ses messages depuis son logiciel de gestion de mail graphique.
L'extension Enigmail pour Mozilla Thunderbird permet de gérer les clés OpenPGP reçues par mail ainsi que celles sur l'ordinateur (sous GNU/Linux en tout cas).
Elle intègre dans les fenêtres d'envoi et de réception la possibilité de signer, chiffrer, d'attacher sa clé publique ou d'ajouter la clé publique reçue au trousseau GnuPG.
Si vos clés secrètes n'est pas importée automatiquement, allez dans Enigmail > Gestion de clefs > Importer des clefs depuis un fichier et sélectionner le fichier dans lequel vous avez exporté vos subkeys secrètes. Enigmail n'a pas à gérer votre clé maître secrète.
K-9 Mail est une application de gestion d'email open-source disponible sur le Play Store. C'est la seule application mail performante qui, à ma connaissance, supporte l'utilisation de clés OpenPGP par son intégration avec OpenKeychain.
Pour utiliser votre clé, mettez le fichier contenant vos subkeys secrètes sur la mémoire de votre téléphone par la méthode de votre choix. Après l'avoir installé, ouvrez OpenKeychain et ne créez pas de clé. À la place importer une clé par fichier, celui dans votre téléphone. Vous devriez pouvoir voire votre clé listée tout en haut. En tapant dessus, vous devriez voir dans les détails ce qu'est capable de faire votre clé (Confirm (uniquement la master), Sign ou Decrypt) ainsi que ses identités. L'application doit aussi pouvoir vérifier que votre clé a été publiée sur un serveur de clés.
Afin de vous en servir avec K-9, ouvrez cette dernière : Paramètres > Paramètres généraux > Cryptography8) > Appli OpenPGP > OpenKeychain.
Revenez à la page d'accueil, sélectionner le mail que vous souhaitez utiliser avec la clé. Puis : Paramètres > Paramètres du compte > Cryptographie > Ma clef > [Votre clé]
Vous voilà opérationnel pour vous faire spammer toute la journée de mail MiNET et pouvoir y répondre !
Section à compléter
Se référer au manuel de gnupg2
9)
Lister les clés du trousseau
$ gpg --list-keys
Récupérer une clé depuis un serveur de clés
$ gpg --keyserver [nom du serveur de clés] --search-keys [adresse e-mail] ou $ gpg --keyserver [nom du serveur de clés] --search-keys KEYID
Récupérer une clé depuis un fichier
$ gpg --import fichier.extension
Envoyer une clé vers un serveur de clés
$ gpg --keyserver [nom du serveur de clés] --send-keys KEYID
Définir le niveau de confiance d'une clé
$ gpg --edit-key KEYID trust
Certifier une clé (nécessite la clé primaire secrète)
$ gpg --edit-key KEYID sign ... > save
Lorsque l'on souhaite certifier la clé de quelqu'un, il faut définir le niveau de confiance qu'on souhaite lui accorder en fonction du niveau d'assurance que vous avez que la clé est bien celle de celui qui se l'approprie (avoir la personne en face de soi, l'avoir au téléphone, vérifier sa photo d'identité, etc.). Après quoi vous pouvez la certifier avec la commande précédente et lui renvoyer par email en lui rappelant de l'envoyer sur un serveur de clés (ou envoyez-la directement sur un serveur de clés en le notifiant)
Renvoyer la clé de quelqu'un
$ gpg --armor --export KEYID > KEYID.asc
Récupérer le fichier .asc et le transmettre par mail (en signant le mail).
Voir les certifications d'une clé
$ gpg --list-sigs KEYID
Une clé OpenPGP peut contenir plus d'informations que celles demandées lors de sa génération par GnuPG. Elle peut contenir plusieurs identités (uid) référents nom, email et commentaire et définissent chacune un profil avec des préférences concernant les méthodes de chiffrement et d'autres paramètres techniques. Elle peut aussi contenir une photo d'identité !
Pour l'exemple nous allons ajouter une identité à notre clé, une photo10) et modifier les préférences de chiffrement par défaut de cette uid.
$ gpg --edit-key Alice gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. 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. gpg: vérification de la base de confiance gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: profondeur : 0 valables : 2 signées : 0 confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 2 u. sec rsa4096/31FC225B2700CF31 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/A3260A30DB06FAA4 créé : 2018-02-27 expire : 2019-02-27 utilisation : E ssb rsa4096/E555BD79A0A02378 créé : 2018-02-27 expire : 2019-02-27 utilisation : S [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> gpg> adduid Nom réel : Alice Adresse électronique : xxalicexx@minet.net Commentaire : Adresse MiNET Vous avez sélectionné cette identité : « Alice (Adresse MiNET) <xxalicexx@minet.net> » Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? o sec rsa4096/31FC225B2700CF31 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/A3260A30DB06FAA4 créé : 2018-02-27 expire : 2019-02-27 utilisation : E ssb rsa4096/E555BD79A0A02378 créé : 2018-02-27 expire : 2019-02-27 utilisation : S [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> [ inconnue] (2) Alice (Adresse MiNET) <xxalicexx@minet.net>
La seconde identité n'est pas automatiquement auto-signée (noter le [ inconnue]
) et en réalité cela n'est pas utile de le faire.
La taille conseillée est de l'ordre de 240x288px et doit être au format jpeg.
gpg> addphoto Choisissez une image pour votre photo d'identité. L'image doit être un fichier JPEG. Rappelez-vous que cette image est stockée dans la clef publique. Si l'image est très grosse, la clef le sera aussi. Une taille de l'ordre de 240x288 est conseillée. Entrez le nom du fichier JPEG pour la photo d'identité : /home/simtrami/Téléchargements/237x330_chanteur-bernard-minet.jpg Ce JPEG est vraiment très grand (26341 octets). Voulez-vous vraiment l'utiliser ? (o/N) o Cette photo est-elle correcte (o/N/q) ? o sec rsa4096/31FC225B2700CF31 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/A3260A30DB06FAA4 créé : 2018-02-27 expire : 2019-02-27 utilisation : E ssb rsa4096/E555BD79A0A02378 créé : 2018-02-27 expire : 2019-02-27 utilisation : S [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> [ inconnue] (2) Alice (Adresse MiNET) <xxalicexx@minet.net> [ inconnue] (3) [jpeg image of size 26341]
Pour afficher les photos d'identité associées à une clé.
gpg> showphoto
Enfin, on change les préférences de profile pour l'uid créée.
gpg> uid 2 [...l'uid (2) est marqué d'un *...] gpg> setpref AES192,AES SHA512,SHA384,SHA256,SHA224 ZLIB,BZIP2,ZIP MDC Définir la liste de préférences en : Chiffrement : AES192, AES, 3DES Hachage : SHA512, SHA384, SHA256, SHA224, SHA1 Compression : ZLIB, BZIP2, ZIP, Non compressé Fonctionnalités : MDC, Serveur de clefs sans modification Faut-il vraiment mettre à jour les préférences pour les identités sélectionnées ? (o/N) o [...] gpg> uid 2 #Pour désélectionner l'uid 2 sec rsa4096/31FC225B2700CF31 créé : 2018-02-27 expire : jamais utilisation : SC confiance : ultime validité : ultime ssb rsa4096/A3260A30DB06FAA4 créé : 2018-02-27 expire : 2019-02-27 utilisation : E ssb rsa4096/E555BD79A0A02378 créé : 2018-02-27 expire : 2019-02-27 utilisation : S [ ultime ] (1). Alice (XxAlicexX) <foo@bar.org> [ ultime ] (2)* Alice (Adresse MiNET) <xxalicexx@minet.net> [ ultime ] (3) [jpeg image of size 26341]
Pour afficher les préférences d'un profile, on sélectionne l'uid avec uid #
et on entre showpref
.
Les préférences à doivent toutes être indiquées même si certaines catégories restent inchangées. Pour changer la méthode de compression préférée de ZLIB à BZIP2 on écrit :
gpg> setpref AES256,AES192,AES SHA512,SHA384,SHA256,SHA224 BZIP2,ZIP MDC
Les valeurs 3DES, SHA1, Non compressé et Serveur de clefs sans modification seront toujours sur la liste en dernière position.
Votre clé est prête à l'emploi, vous devriez désormais la protéger en suivant cette section.
Cette opération doit uniquement être effectuée si la clé en question n'a jamais été partagée avec quiconque et s'est toujours trouvée sur l'ordinateur où elle a été créée. Autrement, elle doit être sauvegardée (avec ses subkeys pour une clé maître) sur un support sécurisé. Si le but de la procédure est de faire disparaître une clé non utilisée, elle doit avoir été révoquée et publiée sur les serveurs de clés où elle avait été précédemment hébergée.
Afin de supprimer une clé (master et subkeys), il faut préalablement supprimer la clé maître.
$ gpg --delete-secret-keys [KeyID]
Il vous sera alors plusieurs fois demandé confirmation.
Ensuite, on supprime la clé.
$ gpg --delete-keys [KeyID]
Vous pouvez par ce biais supprimer plusieurs trousseaux de clés à la fois en indiquant plusieurs [KeyID].
Vérifiez enfin que la(les) clé(s) a(ont) bien été supprimée(s).
$ gpg -K
— Clément Taverne 2018/02/28 01:34