Présentation

GnuPG est une implémentation libre du standard OpenGPG qui permet l’échange de fichiers signés et/ou chiffrés.
Il est souvent utilisé pour échanger des emails signés ou chiffrés, même si son utilisation dans ce contexte est décrié (voir ici)

Il reste l’une des solutions les plus répandues pour chiffrer des fichiers en utilisant la cryptographie asymétrique.
Cela permet d’avoir une clé privée sur l’un de vos ordinateurs et de partager la clé publique sur vos autres matériels afin d’exporter des sauvegardes chiffrées que vous ne pourrez déchiffrer que sur le seul ordinateur possédant la clé privée.

Générer votre paire de clés

La première chose à faire est de générér une paire de clés (une clé privée et la clé publique correspondante) :

gpg --full-generate-key

Vous pouvez conserver le type de clé proposé par défaut (RSA et RSA) et choisir 4096 bits comme taille de clé.
Il est recommandé de mettre une date d’expiration, par exemple 1y (1 an).
En effet dans le cas où vous la perdez et que vous n’êtes pas en mesure de la révoquer elle expirera “automatiquement” au bout de quelques temps. Vous pourrez de toute façon toujours prolonger la clé ultérieurement.
Enfin entrez vos informations personnelles (votre prénom/nom et votre adresse email). Il est important que ces informations soient authentiques afin que les personnes avec qui vous communiquez puissent utiliser ces informations pour vous authentifier.

Une fois les clés créées vous pouvez lister la clé secrète à l’aide de la commande suivante :

gpg --list-secret-keys --keyid-format LONG

GnuPG a également généré un certificat de révocation pour la clé, cela permet de révoquer la clé en cas de perte de celle-ci.
Il est recommandé de conserver ce certificat en lieu sûr, à l’écart de vos sauvegardes habituelles.

Note : par défaut le certificat n’est pas utilisable, GnuPG ajoute le caractère ‘:’ en entête du fichier, il faut le supprimer manuellement avant de pouvoir utiliser le certificat._

Si vous souhaitez révoquer une clé que vous possédez toujours, il est préférable d’exporter un nouveau certificat de révocation en précisant la raison de la révocation.

Pour exporter votre clé publique au format ASCII il vous suffit d’utiliser la commande suivante :

gpg --export --armor <ADRESSE EMAIL>|<ID CLE>

Note : l’identifiant de la clé peut être obtenue à l’aide de la commande listant les clés (voir ci-dessus), il s’agit de la chaîne affichée après l’algorithme de la clé privée :

sec   rsa4096/_3AA5C34371567BD2_ 2018-08-04 [SC] [expire : 2019-08-04]

Vous pouvez communiquer cette clé publique de n’importe quelle manière.

Pour rendre plus facile la diffusion de votre clé il vaut mieux utiliser un serveur de clés ou des solutions comme Keybase

Signer ses commits Git

Une des (nombreuses) utilisations possibles de votre clé est la signature de vos commits Git à l’aide de votre clé privée.
Cela permet à n’importe qui de vérifier vos commits à l’aide de votre clé publique.

Idéalement il faut tout d’abord créer une nouvelle sous-clé de signature dédiée à cet usage. Surtout si vous êtes amené à travailler sur plusieurs postes il est très vivement déconseillé de dupliquer votre clé privée principale.

OpenPGP permet de créer de nouvelles sous-clés qui sont rattachées à la clé principale. D’ailleurs lors de la création de la paire de clés précédemment GnuPG a en réalité déjà créé une sous-clé pour le chiffrement, la clé principale étant utilisée uniquement pour la signature et la certification.

Pour Git nous allons donc créer une nouvelle sous-clé dédiée à la signature des commits.

Rechercher d’abord l’identifiant de votre clé principale :

gpg --list-keys --keyid-format long

Editer là afin d’ajouter une sous-clé :

gpg --edit-key <ID CLE> addkey

Choisissez l’option 4 pour créer une nouvelle sous-clé de signature utilisant RSA et la taille maximale (4096)

Enfin sauvegarder votre nouvelle sous-clé à l’aide de la commande save.

Récupérer l’identifiant de la nouvelle sous-clé (gpg --list-keys --keyid-format long) et exporter là dans un fichier si vous souhaitez la copier sur un autre (gpg --export-secret-subkeys --output sub.key <ID CLE>) ordinateur.

Une fois ceci fait vous pouvez indiquer à Git quelle clé utiliser pour signer les commits (attention, il faut récupérer l’identifiant court de la clé avec la commande gpg --list-keys --keyid-format short) :

git config --global user.signingkey <ID COURT CLE>

Par défaut Git ne signe pas les commits, il faut ajouter l’option -S à la commande git commit :

git commit -S -m "Message"

Si vous souhaitez systématiquement signer vos commits il est préférable d’activer l’option commit.gpgSign :

git config --global commit.gpgSign true

Dans ce cas pensez bien à configurer l’agent GPG afin de ne pas devoir saisir votre clé privée à chaque commit !