GPG : Guide bonnes pratiques (RSA)

Article publié, le et modifié le
12 minute(s) de lecture

Cet article contient 2465 mots.
Source brute de l'article : MD

Description

Suite à mes précédentes réflexions à-propos du Bon usage sécurisé de GPG, finalement je me décide pour un article de ce genre : Guide des bonnes pratiques pour la création de clés GPG.

De fait, il ne suffit pas de se dire, “je vais créer ma clé à coup de --gen-key, et puis zou…", ou d’utiliser une interface graphique pour le faire, telle qu’Enigmail ou GPA, c’est un processus un peu plus long, d’autant si l’on veut le faire correctement !

Ce guide s’inspire très fortement de celui d’Alex Cabal


Création parfaite de clés GPG

Informations importantes

  • Ne pas utiliser le paramétrage par défaut de GPG, à savoir : 2048 - et, encore moins, inférieur !
  • La seule taille forte de clé, valide, à ce jour est : 4096 !
  • Le seul chiffrement à utiliser est : RSA !

Création

Création : Clients Graphiques

Pour Enigmail, il faut ouvrir la fenêtre de gestion de clés, puis cliquer sur le menu ‘Générer > Nouvelle clé'…

Il ne reste plus qu’à choisir le courriel concerné, de créer une passphrase, et de la répéter ; dans l’onglet ‘Expiration’, veillez à la durée : pas plus de 2 ans !

Puis dans l’onglet ‘Avancé’, vérifier la taille de la clé : 4096, le type de la clé ‘RSA’… vous n’avez plus qu’à cliquer sur le bouton [ Générer la clef ], et à laisser faire le temps de la génération…

Avec GPA, c’est sensiblement pareil, à la différence que c’est le menu ‘Clefs’ > ‘Nouvelle clef’ qui permet de le faire…

Choisissez l’algorithme de chiffrement : RSA - (RSA (sign only) nous servira plus tard…) -, la taille de clé - il est très probable qu’il ne soit pas possible de chiffrer avec une clé plus forte que 3072 - puis remplissez les champs ‘Nom’, et ‘Courriel’ seulement, et finissez par cliquez dans la case à cocher ‘Expires’, pour choisir une date de 2 ans, maximum.

Création : Mode Console

Il y a deux options pour créer une clé, l’une permettant de faire plus finement en demandant plus de choses que l’autre, à savoir :

  • l’option --gen-key, version abrégée de l’option --generate-key,
  • l’option --full-gen-key, version abrégée de l’option --full-generate-key.

Utilisons l’option --gen-key :

Code : sh

$ gpg --gen-key
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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.

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)
Your selection? **1**

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) **4096**

Requested keysize is 4096 bits
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) **2y**

Is this correct? (y/N) **y**


You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and E-mail Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: **Nom Prenom**

E-mail address: **email@domain.tld**

Comment:
You selected this USER-ID:
    "Nom Prenom <email@domain.tld>"

Change (N)ame, (C)omment, (E)-mail or (O)kay/(Q)uit? **O**

You need a Passphrase to protect your secret key.

**demande votre passphrase**

gpg: key ******** marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
pub   4096R/******* 2013-03-13
      Key fingerprint = **** **** **** **** ****  **** **** **** **** ****
uid                  Nom Prenom <email@domain.tld>
sub   4096R/******** 2013-03-13

Ajout d’une photo

Veillez à utiliser une photo qui soit de taille légère !

addphoto : Clients Graphiques

Enigmail : il faut ouvrir la fenêtre de gestion de clés, menu “Édition” > “Ajouter une photo” après avoir sélectionné la clé.

  • 2ème possibilité : clic droit sur la clé, menu contextuel ‘Ajouter une photo”… et choisissez le fichier en question.
  • 3ème possibilité : clic droit sur la clé, menu contextuel “Propriété de la clé”, puis dans la fenêtre de propriété, cliquez sur le bouton [ Sélectionnez une action … ] et choisissez ‘Ajouter une photo’.

GPA semble ne pas en être capable !

addphoto : Mode Console

C’est l’option --edit-key qui sera utilisée puis l’option addphoto, telles que :

Code : sh

$ gpg --edit-key email@domain.tld
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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.

Secret key is available.

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
[ultimate] (1). Nom Prenom <email@domain.tld>

gpg> addphoto

Pick an image to use for your photo ID.  The image must be a JPEG file.
Remember that the image is stored within your public key.  If you use a
very large picture, your key will become very large as well!
Keeping the image close to 240x288 is a good size to use.

Enter JPEG filename for photo ID: /repertoire_vers_photo/photo.jpg

Is this photo correct (y/N/q)? y


You need a passphrase to unlock the secret key for
user: "Nom Prenom <email@domain.tld>"
4096-bit RSA key, ID ********, created 2013-03-13

**demande votre passphrase**

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
[ultimate] (1). Nom Prenom <email@domain.tld>
[ unknown] (2)  [jpeg image of size 5324]

gpg> save

Préférences Hash

Paramétrer les hash préférés sont de bon aloi !

setpref : Clients Graphiques

Enigmail semble ne pas en être capable !

GPA semble ne pas en être capable !

setpref : Mode Console

C’est encore l’option --edit-key qui sera utilisée mais avec l’option setpref, telles que :

Code : sh

$ gpg --edit-key email@domain.tld
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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.

Secret key is available.

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
[ultimate] (1). Nom Prenom <email@domain.tld>
[ultimate] (2)  [jpeg image of size 5324]

gpg> setpref SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed

Set preference list to:
     Cypher: AES256, AES192, AES, CAST5, 3DES
     Digest: SHA512, SHA384, SHA256, SHA224, SHA1
     Compression: ZLIB, BZIP2, ZIP, Uncompressed
     Features: MDC, Keyserver no-modify
Really update the preferences? (y/N) y


You need a passphrase to unlock the secret key for
user: "Nom Prenom <email@domain.tld>"
4096-bit RSA key, ID ********, created 2013-03-13

**demande votre passphrase**

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
[ultimate] (1). Nom Prenom <email@domain.tld>
[ unknown] (2)  [jpeg image of size 5324]

gpg> save

Une nouvelle sous-clé de signature

Cette étape est vraiment importante ; elle sert à créer une sous-clé qui ne servira qu’à signer de nouveaux messages et autres documents…

Si vous vous passez des deux étapes précédentes, ne vous passez pas de celle-ci ; vous comprendrez plus bas le pourquoi !

Les recommandations de création de cette sous-clé sont ABSOLUMENT les mêmes que pour la création de la clé principale !

Quoi ? vous avez déjà oublié : RSA + 4096 bits - avec la différence qu’on utilisera le choix ‘RSA (sign only)', et pas besoin de paramétrer une période de validité…

addkey : Clients Graphiques

Enigmail semble ne pas en être capable !

GPA semble ne pas être capable de générer de clés dont la taille soit de 4096 bits, sinon, c’est menu “Clefs” > “Nouvelle clé” ; choisir l’algorithme ‘RSA (sign only)', remplir les champs ‘Nom’, ‘Courriel’ - sur ce dernier, remplir l’adresse mail correspondante, et ne pas cochez la case ‘Expirer’ puis validez !

addkey: Mode Console

C’est toujours l’option --edit-key qui sera utilisée mais cette fois-ci avec l’option addkey, telles que :

Code : sh

$ gpg --edit-key email@domain.tld
gpg (GnuPG) 1.4.11; Copyright (C) 2010 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.

Secret key is available.

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
[ultimate] (1). Nom Prenom <email@domain.tld>
[ultimate] (2)  [jpeg image of size 5324]

gpg> addkey
Key is protected.

You need a passphrase to unlock the secret key for
user: "Nom Prenom <email@domain.tld>"
4096-bit RSA key, ID ********, created 2013-03-13

**demande votre passphrase**

Please select what kind of key you want:
    (3) DSA (sign only)
    (4) RSA (sign only)
    (5) Elgamal (encrypt only)
    (6) RSA (encrypt only)
Your selection? 4

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 4096

Requested keysize is 4096 bits
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) 0

Key does not expire at all
Is this correct? (y/N) y

Really create? (y/N) y

pub  4096R/********  created: 2013-03-13  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
sub  4096R/********  created: 2013-03-13  expires: never       usage: E
sub  4096R/********  created: 2013-03-13  expires: never

[ultimate] (1). Nom Prenom <email@domain.tld>
[ unknown] (2)  [jpeg image of size 5324]

gpg> save

Création du certificat de révocation

La création du certificat de révocation est une étape à faire ABSOLUMENT !

En effet, celui-ci vous sera nécessaire pour révoquer votre clé GPG, ou la sous-clé de signature, si jamais vous avez perdu celle-ci, et/ou qu’elle soit volée, et/ou qu’elle soit compromise !

Il vous importe de placer ce certificat de révocation dans un endroit sûr !

revoke : Clients graphiques

Enigmail : Clic droit sur la clé, menu contextuel “Créer et enregistrer un certificat de révocation”.

  • 2ème possibilité : clic droit sur la clé, menu contextuel “Propriétés de la clé”, puis dans la fenêtre “Propriété”, cliquez sur le bouton [ Sélectionnez l’action …], puis “Créer et enregistrer un certificat de révocation”.

GPA semble ne pas en être capable !

revoke : mode console

C’est assez simple, pour une fois :

$ gpg --output email@domain.tld.rev.asc --gen-revoke email@domain.tld

Exportez vos clés

L’export de vos clés fait partie du processus nécessaire. Bien entendu, il vous incombe de mettre en lieu sûr ces fichiers, IMPÉRATIVEMENT la clé privée qui en résulte !

export : Clients graphiques

Enigmail : clic droit sur la clé, menu contextuel “Exporter les clés vers un fichier”

GPA : Menu ‘Clefs’ > ‘Exporter des clefs’

2ème possibilité : clic droit sur la clé en question, puis dans le menu contextuel, choisir ‘Exporter des clefs’…

export : mode console :

$ gpg --export-secret-keys --armor email@domain.tld > email@domain.tld.private_key.asc
$ gpg --export --armor email@domain.tld > email@domain.tld.public_key.asc

Transformons les clés

Transformez les clés que nous avons créées, dites clés primaires en clés portables ou mode “protégé”, est un autre processus IMPORTANT !

Ce processus est un peu long, non-prévu dans le fonctionnement interne de GPG, peut faire peur - et donner des suées,…

Il a pour propos d’extraire les sous-clés, de les détruire du porte-clé, de les importer correctement !

Attention

transformation : Clients Graphiques

Ne cherchez pas ; ce processus n’est pas du tout géré !

transformation : Mode Console

Tout d’abord un aperçu de la clé, pour comparaison :

celui-ci n’est absolument pas nécessaire - juste pour aider à remarquer la légére différence, avant ce processus et après !

Code : sh

$ gpg --list-secret-keys
/home/$USER/.gnupg/secring.gpg
-----------------------------
sec  4096R/******** 2013-03-13
uid                  Nom Prenom <email@domain.tld>
ssb   4096R/******** 2013-03-13
ssb   4096R/******** 2013-03-13

Maintenant, le processus de transformation - que vous devez exécutez :

Code : sh

$ gpg --export-secret-subkeys email@domain.tld > ~/.gnupg/email@domain.tld.subkeys
$ gpg --delete-secret-keys email@domain.tld
$ gpg --import ~/.gnupg/email@domain.tld.subkeys
$ shred --remove ~/.gnupg/email@domain.tld.subkeys

Comparons :

Code : sh

$ gpg --list-secret-keys
/home/$USER/.gnupg/secring.gpg
-----------------------------
sec#  4096R/******** 2013-03-13
uid                  Nom Prenom <email@domain.tld>
ssb   4096R/******** 2013-03-13
ssb   4096R/******** 2013-03-13

En fait la différence visible/visuelle est très légère : sur la ligne commençant par le mot sec, celui-ci est suivi du symbole #

La présence du symbole dièze signifie que la sous-clé de signature ne fait pas partie du trousseau de clé !

Si le symbole dièze n'est pas présent, c'est qu'il y a eu un problème dans la phase de ce processus… refaites-le !


Voilà, vous avez suivi toutes ces étapes - c’est très bien. Elles vous garantissent d’avoir fait correctement les choses ;-)

Partagez votre clé publique !

Allez n’hésitez pas à partagez, publiez votre clé publique - informez de l’empreinte relative à votre clé publique - privilégiez le contact réel, physique lors de cet échange…

En mode graphique :

Enigmail : Menu “Serveur de clefs” > “Envoyer les clés publiques”.

2ème possibilité : clic droit sur la clé, menu contextuel “Envoyer les clés publiques vers un serveur de clefs”

GPA : Menu ‘Serveur’ > ‘Envoyer des clefs’.

2ème possibilité : clic droit sur la clé, puis dans le menu contextuel, choisissez ‘Envoyer des clefs’ ; confirmez votre choix, si cela vous est demandé en cliquant sur le bouton [Oui].

En mode console :

Utilisez donc l’option --send-keys "fingerprint, tel que :
$ gpg --send-keys "fingerprint"

Astuce

De bonnes lectures

Je renvoie très fortement vers les bonnes lectures en question :


Du bon outil GPG

Mon script shell POSIX

Vous retrouverez mon script de gestion de clé GPG sur mon espace git
Du moins, j’espère bien qu’il soit POSIX

  • Pour afficher l’aide : ./mng_gpg help
  • Pour génèrer une clé : ./mng_gpg create

Pour information, cet outil a aussi besoin de l’outil shred