[GnuPG](https://gnupg.org/) est une implémentation complète et libre du standard OpenPGP défini par la [RFC4880](https://www.ietf.org/rfc/rfc4880.txt).
GnuPG permet le chiffrement et la signature de vos données ainsi que de vos communication.
* Guide de création de clé GPG par Debian : <https://keyring.debian.org/creating-key.html>
Si vous ne souhaitez pas lire ces guides d'un bout à l'autre, il est possible de [télécharger ce fichier](https://raw.githubusercontent.com/ioerror/duraconf/master/configs/gnupg/gpg.conf) et le mettre dans `~/.gnupg/gpg.conf`. Il regroupe l'ensemble des pratiques recommandées par le guide.
La génération d'une clé peut être très longue si vous avez un faible réservoir d'entropie, vous pouvez générer de l'entropie en bougeant la souris et en tapant sur le clavier, ou en installant le logiciel `haveged`.
Une autre astuce est de disposer d'une clé matériel RNG.
L'agent GPG garde en mémoire la passphrase de vos clés mais fait aussi office d'agent SSH, ce qui vous permet d'utiliser GPG pour vos connecter sur vos serveurs !
GPG et l'agent GPG peuvent être utilisés via des cartes a puces (smartcard) ce qui permet de sécuriser vos clés GPG sur des cartes ou des tokens USB dont elles ne peuvent être extraites, l'utilisation de Smartcard nécessite les paquets suivants :
Sur la machine locale (qui a accès à la clef privée), récupérer le nom de la `<extra_socket_locale>`.
~~~
$ gpgconf --list-dir agent-extra-socket
~~~
Sur le serveur distant, récupérer le nom de la `<socket_distante>`.
~~~
$ gpgconf --list-dir agent-socket
~~~
Le transfert distant de socket peut se faire avec l’option `-R` de `ssh`, ou simplement en ajoutant la ligne `RemoteForward <socket_distante> <extra_socket_locale>` à ~/.ssh/config.
Sur l’hôte distant, la configuration suivante (dans `/etc/ssh/sshd_config.d/gpg-agent.conf` par exemple) permet de supprimer automatiquement les sockets bloquées).
~~~
StreamLocalBindUnlink yes
~~~
Pour pouvoir utiliser gpg sur l’hôte distant sans clef privée, il faut tout de même que la clef publique soit présente dans le trousseau.
Une fois connecté à l’hôte, l’utilisation de gpg sur l’hôte distant va maintenant s’appuyer sur le l’agent GPG de la machine locale: si la phrase secrète n’est pas déjà en cache, ou si son utilisation nécessite une carte à puce, elle sera demandée.
**Remarque**: GPG sur l’hôte distant essayera de démarrer l’agent GPG s’il n’est pas déjà démarré. Il effacera alors la socket transférée pour configurer la sienne. Pour éviter cela, il est possible de passer l’option `--no-autostart` à la commande`gpg` distante.
**Remarque**: il est nécessaire d’avoir une configuration graphique pour pinentry sur l’hôte local (ça ne fonctionne pas avec pinentry-tty par exemple).
Une KSP (Key Signing Party) est un évènement où l'on vérifie l'identité des personnes afin de signer leurs clés et étendre la toile de confiance PGP.
Site qui détaille la toile de confiance : <https://pgp.cs.uu.nl/plot/>
Voir les statistiques d'une clé : <https://pgp.cs.uu.nl/stats/IDCLE.html> ou IDCLE est remplacé par votre identifiant de clé, exemple <https://pgp.cs.uu.nl/stats/8b962943fc243f3c.html>.
Il y a plusieurs manières d'organiser une KSP, mais la méthode la plus utilisé est celle du [FOSDEM](https://github.com/FOSDEM/keysigning).