Créer une clé GnuPG

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.

« l’utilisation des moyens de cryptologie est libre »

loi n° 2004-575 du 21 juin pour la confiance dans l’économie numérique (LCEN) article 30

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 :

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

Les publications relatées:

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

73 − 71 =

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.