Debian – GnuPG
1. Introduction
GnuPG est l’abréviation de GNU Privacy Guard. GnuPG est un clone de PGP (Pretty Good Privacy).
GnuPG permet de chiffrer des communications par le biais d’un algorythme de chiffrement à clés asymétriques, c’est à dire qu’une clé permet de signer le texte, et qu’une autre clé sert à crypter le texte.
2. Pourquoi faire une clé GPG ?
Si vous souhaitez pouvoir signer des documents et ainsi prouver que vous en êtes l’auteur ou bien encore crypter des documents (comme avec BackupManager pour réaliser des sauvegardes cryptées par exemple ou encore signer vos fichiers pour votre dépôt personnel Debian (voir l’article Debian – Dépôt Personnel).
3. Installation de GnuPG
Normalement GnuPG est d’office installé, si ce n’est pas le cas :
apt install --yes gnupg
4. Génération de la clé
gpg --gen-key
gpg (GnuPG) 2.1.18; 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.
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.
GnuPG needs to construct a user ID to identify your key.
Real name: Prénom Nom
Email address: monmail@domaine.fr
You selected this USER-ID:
"Prénom Nom \"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? o
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: pinentry launched (3394 curses 1.0.0 ? ? ?)
gpg: pinentry launched (3397 curses 1.0.0 ? ? ?)
gpg: writing self signature
gpg: RSA/SHA256 signature from: "EDB427D1A42C9BD4 [?]"
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: writing key binding signature
gpg: RSA/SHA256 signature from: "EDB427D1A42C9BD4 [?]"
gpg: writing public key to '/home/monuser/.gnupg/pubring.kbx'
gpg: /home/monuser/.gnupg/trustdb.gpg: trustdb created
gpg: using pgp trust model
gpg: key EDB427D1A42C9BD4 marked as ultimately trusted
gpg: directory '/home/monuser/.gnupg/openpgp-revocs.d' created
gpg: writing to '/home/monuser/.gnupg/openpgp-revocs.d/3C23C1937G19D3721C178CE6EDB427D1A42C9BD4.rev'
gpg: RSA/SHA256 signature from: "EDB427D1A42C9BD4 Prénom Nom "
gpg: revocation certificate stored as '/home/monuser/.gnupg/openpgp-revocs.d/3C23C1937G19D3721C178CE6EDB427D1A42C9BD4.rev'
public and secret key created and signed.
pub rsa2048 2018-08-07 [SC] [expires: 2020-08-06]
3C23C1937G19D3721C178CE6EDB427D1A42C9BD4
3C23C1937G19D3721C178CE6EDB427D1A42C9BD4
uid Prénom Nom
sub rsa2048 2018-08-07 [E] [expires: 2020-08-06]
gpg --gen-key
[...]
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: pinentry launched (3307 curses 1.0.0 ? ? ?)
gpg: agent_genkey failed: Permission non accordée
Key generation failed: Permission non accordée
Cela se corrige assez facilement, il faut changer le propriétaire du terminal en cours :
ls -la $(tty)
crw------- 1 autreuser tty 136, 1 août 7 15:48 /dev/pts/1
chown monuser $(tty)
gpg --gen-key
Vous pouvez accéler les choses en faisant des accès disques, par exemple :
find /
Ou bien il existe rng-tools qui permet de générer de l’entropie (sinon haveged si vous n’avez pas de TRNG hardware) :
apt install rng-tools
5. GPG & Apt
5.1 Erreur à l’ajout d’un nouveau dépôt
Parfois lors de l’ajout d’un dépôt vous pouvez être confrontés à ce problème ci :
apt update
Lecture des listes de paquets... Fait
W: Erreur de GPG : http://deb.drgeek.io/stretch/nginx_pagespeed ./ Release : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY BAD338C0F38B8DA1
E: The repository 'http://deb.drgeek.io/stretch/nginx_pagespeed ./ Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
Il suffit de le régler en faisant cela :
apt-key adv --recv-keys --keyserver pgpkeys.mit.edu BAD338C0F38B8DA1
apt update
apt-key adv --keyserver keyserver.ubuntu.com --refresh-keys BAD338C0F38B8DA1
5.2 Création d’un nouveau dépôt
Voici comment envoyer sa clé public aux serveurs centraux (à faire obligatoirement si vous avez à faire un dépôt Debian personnel avec clé GPG).
Il faut lister les clés et récupérer son Key ID (identifiant) de la clé publique (ce qui est surligné).
gpg --list-keys --keyid-format LONG
/var/www/.gnupg/pubring.kbx
---------------------------
pub rsa2048/DB427D1A42C9BD4 2018-08-07 [SC] [expires: 2020-08-06]
3C23C1937G19D3721C178CE6EDB427D1A42C9BD4
uid [ultimate] Prénom Nom
sub rsa2048/AC538E0B32D7CA3 2018-08-07 [E] [expires: 2020-08-06]
gpg --keyserver pgpkeys.mit.edu --send-key DB427D1A42C9BD4
6. Exporter/Importer sa clé privée
6.1 Sauvegarder sa clé
Vous avez créée une clé, il faut donc la sauvegarder :
gpg --list-secret-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/user/.gnupg/pubring.kbx
------------------------
sec rsa2048 2018-03-11 [SC]
125DE03FACFBCCE34ACC6352B3200865DBC12577
uid [ultimate] Prénom NOM
ssb rsa2048 2018-03-11 [E]
gpg --export-secret-key 125DE03FACFBCCE34ACC6352B3200865DBC12577 > maclevpriv.key
6.2 Importer sa clé
gpg --import maclevpriv.key
Suite à l’importation vous remarquez maintenant un « unknown » au lieu du « ultimate » ? :
gpg --list-secret-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
/home/user/.gnupg/pubring.kbx
------------------------
sec rsa2048 2018-03-11 [SC]
125DE03FACFBCCE34ACC6352B3200865DBC12577
uid [ultimate] Prénom NOM
ssb rsa2048 2018-03-11 [E]
Pour cela il faut réaliser les commandes suivantes :
gpg --edit-key mon@email.net
gpg> trust
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
1 = I don't know or won't say
2 = I do NOT trust
3 = I trust marginally
4 = I trust fully
5 = I trust ultimately
m = back to the main menu
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
gpg> save
7. Autres Commandes
7.1 Effacer sa clé
7.1.1 Publique
gpg --delete-keys
7.1.2 Privée
gpg --delete-secret-keys
7.1.3 Les 2 (privée & publique)
ggpg --delete-secret-and-public-keys
7.2 Lister les clés
gpg --list-keys
7.3 Revoquer sa clé
gpg --output revoke.asc --gen-revoke key-id
gpg --import revoke.asc
gpg --keyserver keys.gnupg.net --send-keys key-id
7.4 Renouveler une clé expirée
gpg --edit-key 3C23C1937G19D3721C178CE6EDB427D1A42C9BD4
expire
1y