Le chiffrement et le principe des clés de chiffrement n’est pas toujours aisé à comprendre. Il est pourtant impératif aujourd’hui, avec l’utilisation massive des moyens de communication et de stockage de l’utiliser. Chiffrer ses mails, c’est un peu comme mettre une enveloppe pour envoyer une lettre par la poste…
Chiffrer ses sauvegardes sur le cloud, c’est comme fermer la porte de son armoire… Je vais vous donner quelques pistes pour pouvoir créer une clé sécurisée à utiliser pour signer, chiffrer, vous authentifier, avec éventuellement plusieurs adresses mails. Last but not least, renseignez-vous sur les lois en vigueur sur le chiffrement dans vos différents pays.
On ne va pas s’en priver…
Pré requis
Le mieux pour la sécurité, est de créer votre clé sur une machine spécifique, non connectée à Internet. De monter un volume chiffré et travailler à l’intérieur d’un répertoire aléatoire de /tmp.
Vérifiez l’entropie de votre machine :
[matt@m4800 ~]$ cat /proc/sys/kernel/random/entropy_avail 3945
Si l’entropie est inférieure à 2000, comme ce n’est pas le sujet de cet article (mais à venir dans un avenir… proche), je vous invite à vous renseigner sur les différentes méthodes pour l’augmenter :
- random number generator device
- OneRNG
- TPM (on peut également utiliser sa puce TPM pour chiffrer sa clé privée gpg avec le sealing)
Pour installer gnupg (adaptez en fonction de votre distribution) :
# dnf install gnupg2
[matt@m4800 ~]$ gpg2 --version gpg (GnuPG) 2.2.19 libgcrypt 1.8.5 Copyright (C) 2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later https://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: /home/matt/.gnupg Algorithmes pris en charge : Clef publique : RSA, ELG, DSA, ECDH, ECDSA, EDDSA Chiffrement : IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 Hachage : SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 Compression : Non compressé, ZIP, ZLIB, BZIP2
Si gnupg était déjà installé, par précaution, on donne les bons droits sur les répertoires et fichiers:
# find ~/.gnupg -type d -exec chmod 0700 {} + # find ~/.gnupg -type f -exec chmod 0600 {} +
Ensuite on vérifie la configuration de gnupg pour éventuellement la changer, la configuration de base fonctionne très bien. Personnellement j’utilise une Yubikey avec une configuration proche de celle ci-dessous. Ouvrez ou créez le fichier ~/.gnupg/gpg.conf pour y insérer vos options :
# cat > ~/.gnupg/gpg.conf <<EOF personal-cipher-preferences AES256 AES192 AES personal-digest-preferences SHA512 SHA384 SHA256 personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed cert-digest-algo SHA512 s2k-digest-algo SHA512 s2k-cipher-algo AES256 charset utf-8 fixed-list-mode no-comments no-emit-version keyid-format 0xlong list-options show-uid-validity verify-options show-uid-validity with-fingerprint require-cross-certification no-symkey-cache use-agent throw-keyids EOF
Afin de mieux comprendre la signification des options et leur adaptation, je vous laisse aller consulter le site, très bien documenté (euphémisme) :
La clé master
Vous pouvez générer un mot de passe de la manière suivante, vous en aurez besoin un peu plus tard.
[root@m4800 tmp.Md38Rcfqji]# gpg --gen-random --armor 0 24 ekDgmUYwWELTImBb1HEwtS0WZfHMPJKn
À ce stade, tout est quasiment prêt pour débuter la création des clés. Il faut savoir que pour la clé principale comme pour les sous-clés, vous pouvez utiliser le traditionnel algorithme RSA (choix 8 dans le paragraphe suivant) ou, depuis 5 ans (2015) c25519 (choix 11) l’algorithme basé sur la structure des courbes elliptiques. Je traiterai ce sujet une autre fois.
Allez, c’est parti mon kiki, on génère une clé :
gpg --expert --full-generate-key gpg (GnuPG) 2.2.19; Copyright (C) 2019 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. Sélectionnez le type de clef désiré : (1) RSA et RSA (par défaut) (2) DSA et Elgamal (3) DSA (signature seule) (4) RSA (signature seule) (7) DSA (indiquez vous-même les capacités) (8) RSA (indiquez vous-même les capacités) (9) ECC et ECC (10) ECC (signature seule) (11) ECC (indiquez vous-même les capacités) (13) Clef existante (14) Existing key from card Quel est votre choix ? 8 Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier Actions actuellement permises : Signer Certifier Chiffrer (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? C Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier Actions actuellement permises : Signer Certifier (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? S Actions possibles pour une clef RSA : Signer Certifier Chiffrer Authentifier Actions actuellement permises : Certifier (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? Q 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 = la clef expire dans n jours w = la clef expire dans n semaines m = la clef expire dans n mois y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) 0 La clef n'expire pas du tout Est-ce correct ? (o/N) o
A noter que par défaut la clé est de 2048 bits, ce qui est déjà suffisant.
Mettre maintenant ses coordonnées privées, et son mot de passe :
GnuPG doit construire une identité pour identifier la clef. Nom réel : M Fontana Adresse électronique : matt@eu.org Commentaire : Vous avez sélectionné cette identité : « M Fontana matt@eu.org » Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? 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. gpg: /tmp/tmp.Md38Rcfqji/trustdb.gpg : base de confiance créée gpg: clef 0x94232CC170DADE82 marquée de confiance ultime. gpg: répertoire « /tmp/tmp.Md38Rcfqji/openpgp-revocs.d » créé gpg: revocation certificate stored as '/tmp/tmp.Md38Rcfqji/openpgp-revocs.d/3ABB546BE3B12E6AE3DB20B494232CC170DADE82.rev' les clefs publique et secrète ont été créées et signées. pub rsa4096/0x94232CC170DADE82 2020-05-04 [C] Empreinte de la clef = 3ABB 546B E3B1 2E6A E3DB 20B4 9423 2CC1 70DA DE82 uid M Fontana matt@eu.org
Maintenant que vous avez cette nouvelle clé pour certifier, exportez là pour plus tard:
# export KEYID=0x94232CC170DADE82
Si vous aviez une ancienne clé, vous pouvez maintenant signer la nouvelle avec l’ancienne pour prouver que c’est bien vous. Il faut exporter la nouvelle clé dans un répertoire de travail de /tmp, et également avoir exporter la variable de l’ID de l’ancienne clé avec la valeur OLDKEY.
# gpg --export-secret-keys --armor --output /tmp/new.sec # gpg --default-key $OLDKEY --sign-key $KEYID
Les sous-clés
On passe maintenant aux sous-clés. On va éditer notre clé master et ajouter les sous-clés :
# gpg --expert --edit-key $KEYID gpg (GnuPG) 2.2.19; Copyright (C) 2019 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 : 1 signées : 0 confiance : 0 i., 0 n.d., 0 j., 0 m., 0 t., 1 u. sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ultime . M Fontana matt@eu.org
On créé la sous-clé en sélectionnant 4 RSA (signature seule)
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) (7) DSA (indiquez vous-même les capacités) (8) RSA (indiquez vous-même les capacités) (10) ECC (signature seule) (11) ECC (indiquez vous-même les capacités) (12) ECC (chiffrement seul) (13) Clef existante (14) Existing key from card 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 = la clef expire dans n jours w = la clef expire dans n semaines m = la clef expire dans n mois y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) 1y La clef expire le mer. 05 mai 2021 00:31:48 CEST 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/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ultime . M Fontana matt@eu.org
C’est au tour du chiffrement, de la même manière au ajoute une sous-clé mais cette fois-ci en sélectionnant 6 (chiffrement seul)
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) (7) DSA (indiquez vous-même les capacités) (8) RSA (indiquez vous-même les capacités) (10) ECC (signature seule) (11) ECC (indiquez vous-même les capacités) (12) ECC (chiffrement seul) (13) Clef existante (14) Existing key from card Quel est votre choix ? 6 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 = la clef expire dans n jours w = la clef expire dans n semaines m = la clef expire dans n mois y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) 1y La clef expire le mer. 05 mai 2021 00:34:49 CEST 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/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ultime . M Fontana matt@eu.org
Pour terminer, on créé la sous-clé pour l’authentification, on sélectionne 8.
Vous pourrez vous servir de cette sous-clé pour vous authentifier sur les serveurs par exemple via SSH.
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) (7) DSA (indiquez vous-même les capacités) (8) RSA (indiquez vous-même les capacités) (10) ECC (signature seule) (11) ECC (indiquez vous-même les capacités) (12) ECC (chiffrement seul) (13) Clef existante (14) Existing key from card Quel est votre choix ? 8 Actions possibles pour une clef RSA : Signer Chiffrer Authentifier Actions actuellement permises : Signer Chiffrer (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? S Actions possibles pour une clef RSA : Signer Chiffrer Authentifier Actions actuellement permises : Chiffrer (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? C Actions possibles pour une clef RSA : Signer Chiffrer Authentifier Actions actuellement permises : (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? A Actions possibles pour une clef RSA : Signer Chiffrer Authentifier Actions actuellement permises : Authentifier (S) Inverser la capacité de signature (C) Inverser la capacité de chiffrement (A) Inverser la capacité d'authentification (Q) Terminé Quel est votre choix ? Q 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 = la clef expire dans n jours w = la clef expire dans n semaines m = la clef expire dans n mois y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) 1y La clef expire le mer. 05 mai 2021 00:38:55 CEST 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/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime . M Fontana matt@eu.org
On quitte la CLI:
gpg> save
Ajout d’autres identités
On peut comme j’en avais parlé en introduction, ajouter plusieurs autres identités. Pour cela, on repart dans la CLI :
gpg> adduid Nom réel : M Fontana Adresse électronique : matt@nsz.gov Commentaire : Vous avez sélectionné cette identité : « M Fontana matt@nsz.gov » Changer le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? O sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime M Fontana matt@eu.org inconnue. M Fontana matt@nsz.gov gpg> trust sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime M Fontana matt@eu.org inconnue. M Fontana matt@nsz.gov Décidez maintenant de la confiance que vous portez en cet utilisateur pour vérifier les clefs des autres utilisateurs (en regardant les passeports, en vérifiant les empreintes depuis diverses sources, etc.) 1 = je ne sais pas ou n'ai pas d'avis 2 = je ne fais PAS confiance 3 = je fais très légèrement confiance 4 = je fais entièrement confiance 5 = j'attribue une confiance ultime m = retour au menu principal Quelle est votre décision ? 5 Voulez-vous vraiment attribuer une confiance ultime à cette clef ? (o/N) o sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime M Fontana matt@eu.org inconnue. M Fontana matt@nsz.gov gpg> uid 1 sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime * M Fontana matt@eu.org inconnue. M Fontana matt@nsz.gov gpg> primary sec rsa4096/0x94232CC170DADE82 créé : 2020-05-04 expire : jamais utilisation : C confiance : ultime validité : ultime ssb rsa4096/0xEC2AC085ACE87563 créé : 2020-05-04 expire : 2021-05-04 utilisation : S ssb rsa4096/0x0C240A0131F66510 créé : 2020-05-04 expire : 2021-05-04 utilisation : E ssb rsa4096/0x36131C3F9622CE9A créé : 2020-05-04 expire : 2021-05-04 utilisation : A ultime * M Fontana matt@eu.org inconnue M Fontana matt@nsz.gov gpg> save
Voilà, vous avez maintenant une super clé que vous pouvez visualiser avec la commande :
[root@m4800 tmp.Md38Rcfqji]# gpg -K 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. /tmp/tmp.Md38Rcfqji/pubring.kbx sec rsa4096/0x94232CC170DADE82 2020-05-04 [C] Empreinte de la clef = 3ABB 546B E3B1 2E6A E3DB 20B4 9423 2CC1 70DA DE82 uid [ ultime ] M Fontana matt@eu.org uid [ ultime ] M Fontana matt@nsz.gov ssb rsa4096/0xEC2AC085ACE87563 2020-05-04 [S] [expire : 2021-05-04] ssb rsa4096/0x0C240A0131F66510 2020-05-04 [E] [expire : 2021-05-04] ssb rsa4096/0x36131C3F9622CE9A 2020-05-04 [A] [expire : 2021-05-04]
On peut facilement exporter toutes ces clés :
$ gpg -o \ou\vous\voulez\mastersub.gpg --armor --export-secret-keys $KEYID $ gpg -o \ou\vous\voulez\sub.gpg --armor --export-secret-subkeys $KEYID
Révocation
Important, et à ne pas oublier, le certificat de révocation… au cas ou vous n’auriez pas vu le répertoire “openpgp-revocs.d”, perdu la clé ou que l’on vous ait subtilisé votre identité…
$ gpg --generate-revocation $KEYID --output \ou\vous\voulez\revoke.asc
C’est tout pour aujourd’hui ! Vous devriez surement exporter toutes ces clés dans une clé USB sécurisée avec un volume chiffré ou sur une YubiKey. L’usage de la Yubikey permet de ne pas stocker votre clé privée en permanence par exemple sur votre smartphone. Cela fera aussi l’objet d’un futur article…
Bon hacking