Ma nouvelle clé PGP

Vous apprendrez ici comme créer une clé PGP aussi parfaite que 2017 peut le permettre.

Nous obtiendrons :

  • [C] : Une clé principale avec la capacité de certifier d'autres clés
  • [A] : Une sous-clé avec la capacité d'authentification
  • [S] : Une sous-clé avec la capacité de signature
  • [E] : Une sous-clé avec la capacité de chiffrement

Par sécurité et pour votre usage quotidien, vous sauvegardez et supprimerez la clé privée de la clé principale et utiliserez les sous-clés.

  1. Configuration
  2. Création de la clé principale
  3. Création des sous-clés
  4. Sauvegarde des clés et création d'un certificat de révocation
  5. Envoi de la clé aux serveurs de clés
  6. Renouvellement des clés
  7. Références et remerciements

1. Configuration

Modification ou création de ~/.gnupg/gpg.conf :

cert-digest-algo SHA512
cipher-algo AES256
compress-algo ZLIB
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
digest-algo SHA512
disable-cipher-algo 3DES
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256 SHA224

keyid-format 0xlong
with-fingerprint

list-options show-uid-validity
verify-options show-uid-validity

no-comments
no-emit-version
export-options export-minimal

s2k-cipher-algo AES256
s2k-count 65011712
s2k-digest-algo SHA512
s2k-mode 3
weak-digest SHA1

Vous pouvez peaufiner ce fichier, toute l'aide est disponible dans le man gpg.

Il est déconseillé d'être trop restrictif sur les algorythmes.

2. Création de la clé principale

[user@local ~]$ gpg --expert --full-gen-key

Vous répondrez :

Type de clé : RSA (indiquez vous-même les capacités)
Actions actuellement permises : Certifier
Taille de clé : 4096
Expiration de la clé : 2y
Nom réel : Prenom Nom
Adresse électronique : email@domain.tld
Commentaire :

Une phrase de passe suffisamment robuste est demandée puis la paire de clé est générée :

gpg: clef 0x58562EEBAA5D4291 marquée de confiance ultime.
gpg: revocation certificate stored as '/home/tetsumaki/.gnupg/openpgp-revocs.d/0AA86F59840E68EDB5A3D2D358562EEBAA5D4291.rev'
les clefs publique et secrète ont été créées et signées.

pub   rsa4096/0x58562EEBAA5D4291 2017-12-28 [C] [expire : 2019-12-28]
 Empreinte de la clef = 0AA8 6F59 840E 68ED B5A3  D2D3 5856 2EEB AA5D 4291
uid                              Prenom Nom <email@domain.tld>

Si la génération est trop longue, vous pouvez l'accélérer avec haveged dans un autre terminal :

[user@local ~]$ su -
[root@local ~]$ haveged -w 1024
[root@local ~]$ pkill haveged

À ce stade, nous avons :

  • [C] : Une clé principale avec la capacité de certifier d'autres clés : AA5D4291

3. Création des sous-clés

[user@local ~]$ gpg --expert --edit-key AA5D4291
gpg> addkey

Pour la sous-clé d'authentification, Vous répondrez :

Type de clé : RSA (indiquez vous-même les capacités)
Actions actuellement permises : Authentification
Taille de clé : 4096
Expiration de la clé : 2y

On continue :

gpg> addkey

Pour la sous-clé de signature, Vous répondrez :

Type de clé : RSA (indiquez vous-même les capacités)
Actions actuellement permises : Signature
Taille de clé : 4096
Expiration de la clé : 2y

On continue :

gpg> addkey

Pour la sous-clé de chiffrement, Vous répondrez :

Type de clé : RSA (indiquez vous-même les capacités)
Actions actuellement permises : Chiffrement
Taille de clé : 4096
Expiration de la clé : 2y

vérification :

gpg> list

Qui devrait vous retourner :

sec  rsa4096/0x58562EEBAA5D4291
     créé : 2017-12-28  expire : 2019-12-28  utilisation : C   
     confiance : ultime        validité : ultime
ssb  rsa4096/0x06A0006691170A85
     créé : 2017-12-28  expire : 2019-12-28  utilisation : A   
ssb  rsa4096/0x60316B64FE478AFC
     créé : 2017-12-28  expire : 2019-12-28  utilisation : S   
ssb  rsa4096/0x26A922948A7DCD4E
     créé : 2017-12-28  expire : 2019-12-28  utilisation : E   
[  ultime ] (1). Prenom Nom <email@domain.tld>

A ce stade, vous avez donc :

  • [C] : Une clé principale avec la capacité de certifier d'autres clés : AA5D4291
  • [A] : Une sous-clé avec la capacité d'authentification : 91170A85
  • [S] : Une sous-clé avec la capacité de signature : FE478AFC
  • [E] : Une sous-clé avec la capacité de chiffrement : 8A7DCD4E

Tout semble, correct, on sauvegarde :

gpg> save

4. Sauvegarde des clés et création d'un certificat de révocation

Dans un terminal :

[user@local ~]$ gpg --export --armor AA5D4291 > AA5D4291.pub.asc
[user@local ~]$ gpg --export-secret-keys --armor AA5D4291 > AA5D4291.priv.asc
[user@local ~]$ gpg --export-secret-subkeys --armor AA5D4291 > AA5D4291.sub_priv.asc
[user@local ~]$ gpg --output AA5D4291.rev.asc --gen-revoke AA5D4291

Suppression de toutes les clés privées :

[user@local ~]$ gpg --delete-secret-key AA5D4291

Import des clés privée des sous-clés uniquement :

[user@local ~]$ gpg --import AA5D4291.sub_priv.asc

Vérification (nous avons notre sec# qui signifie que la clé privée de la clé principale n'existe plus, c'est parfait) :

[user@local ~]$ gpg --list-secret-keys AA5D4291
sec#  rsa4096/0x58562EEBAA5D4291 2017-12-28 [C] [expire : 2019-12-28]
 Empreinte de la clef = 0AA8 6F59 840E 68ED B5A3  D2D3 5856 2EEB AA5D 4291
uid                  [  ultime ] Prenom Nom <email@domain.tld>
ssb   rsa4096/0x06A0006691170A85 2017-12-28 [A] [expire : 2019-12-28]
ssb   rsa4096/0x60316B64FE478AFC 2017-12-28 [S] [expire : 2019-12-28]
ssb   rsa4096/0x26A922948A7DCD4E 2017-12-28 [E] [expire : 2019-12-28]

Compression des clés sauvegardées :

[user@local ~]$ tar Jcvf gpg_keys.tar.xz AA5D4291.*
[user@local ~]$ gpg -c gpg_keys.tar.xz
[user@local ~]$ rm AA5D4291.* gpg_keys.tar.xz

Sauvegarder très précieusement le fichier gpg_keys.tar.xz.gpg.

5. Envoi de la clé aux serveurs de clés

Étant satisfait, je peux publier ma clé publique, soyez absolument sûr de vous avant de le faire :

[user@local ~]$ gpg --send-keys AA5D4291

6. Renouvellement des clés

Dans 2 ans, mes clés seront expirées, il faudra donc penser à les renouveler avant la date d'expiration.

On récupérera notre sauvegarde gpg_keys.tar.xz.gpg puis on pourra étendre la date d'expiration de la clé principale ainsi que des sous-clés de 2 ans (2y) par exemple :

[user@local ~]$ gpg --decrypt gpg_keys.tar.xz.gpg > gpg_keys.tar.xz
[user@local ~]$ tar Jxvf gpg_keys.tar.xz
[user@local ~]$ gpg --import AA5D4291.priv.asc
[user@local ~]$ gpg --edit-key AA5D4291
gpg> expire
gpg> key *
gpg> expire
gpg> save
gpg> quit
[user@local ~]$ rm AA5D4291.* gpg_keys.tar.xz*

Vous pourrez par la même occasion en profiter pour modifier les préférences et algorithmes de toutes vos clés, détruire les signatures et les refaire (très bien expliqué ici), chaque renouvellement doit s'accompagner d'une recherche à ce niveau afin de savoir ce que le moment présent vous propose de mieux.

Vous devrez ensuite refaire les étapes 4 : Sauvegarde des clés et création d'un certificat de révocation et 5 : Envoi de la clé aux serveurs de clés.

7. Références et remerciements