DevOps Porn

Pratiquons le DevOps !

Communiquons de façon sécurisée avec GPG

2020-07-11 Dorian

Comment être certain de ne pas communiquer avec un usurpateur ?
Comment être sûr que seul votre destinataire puisse comprendre ce que vous dites ?

Voilà les questions auxquelles répond GPG !

Petit indice: C’est une question de clés 🔑 !

C’est quoi GPG ?

Dans notre métier, il nous est régulièrement ammené à être en possession de différents accès (Applications métier, SSH, FTP…). Le problème c’est que généralement ces informations sont transmises dans un email ou dans une pièce jointe ou encore pour les plus aggueris à plusieurs endroits en même temps.

Mais ça ne suffit pas ! Ok, le client a confiance en moi et m’envoie ces accès mais qu’arrive-t-il si je me fais choco-blaster ? (je vous rassure ça ne m’arrive jamais mais…) Ça signifie que quelqu’un a eu accès à mes mails et par conséquent possiblement à des informations sensibles

C’ests là que GPG peut nous sauver !
GPG (GNU Privacy Guard) est une implémentation d’une norme nommée OpenPGP (Pretty Good Privacy).
Cet outil a pour but de signer 🔏 et de chiffrer 🔐 des données.

Par où commencer ?

Installer GPG

Déjà, installer GPG est déjà un bon début ! Je vous laisse suivre les instructions en fonction de votre OS directement sur le site de gnupg.org. Sachez que GPG arrive déjà intégré sur un bon nombre de distributions Linux.

Note: Dans cet article j’utilise les lignes de commandes pour mieux comprendre ce qu’il se passe mais sachez qu’il existe des utilitaires en interface graphique (comme Gpg4win) permettant de faciliter l’utilisation au quotidien de cet outil.

Créer votre identité

La première étape consiste à générer une paire de clé qui vous représentera vous personnellement.

Pour cela rien de plus simple :

$ gpg --full-generate-key

Pour le 1er choix, on répondra la valeur par défaut (1) RSA and RSA (default).
Pour le second, on choisira 3072 ou 4096 (si vous voulez que votre clé soit valable au delà de l’an 2030).
Ensuite nous choisirons que notre clé principale n’expirera pas. (0)
Puis on spécifie son nom et son adresse email personnelle.

Real name: Jimmy Hendrix
Email address: jimmy.hendrix@tld.com

Et on obtient :

public and secret key created and signed.

pub   rsa4096 2020-06-28 [SC]
      66A455F065F598312CA70DC39059FCDD205B467A
uid                      Jimmy Hendrix <jimmy.hendrix@tld.com>
sub   rsa4096 2020-06-28 [E]

Ce message nous informe que nous avons deux clés pub et sub qui permettent respectivement de signer ([SC] Sign/Cert) et de chiffrer ([E] Encrypt).

Ça y est ! Vous vous êtes créé votre première identité GPG, félicitations 🎉 !

Échanger un message avec quelqu’un

Exporter sa clé publique

La première chose à faire est d’échanger votre clé publique avec votre destinataire.
Pour cela, on commence par exporter notre clé publique.

On liste les clés que nous avons dans notre pubring (répertoire de clé) et particuliièrement celles dont on dispose d’une clé privé.

$ gpg --list-secret-keys

sec   rsa4096 2020-06-28 [SC]
      66A455F065F598312CA70DC39059FCDD205B467A
uid           [ultimate] Jimmy Hendrix <jimmy.hendrix@tld.com>
ssb   rsa4096 2020-06-28 [E]

On copie l’identifiant de notre paire de clé
66A455F065F598312CA70DC39059FCDD205B467A dans cet exemple
Puis on l’exporte :

$ gpg --export --armor 66A455F065F598312CA70DC39059FCDD205B467A > jimmy.hendrix.gpg

Le --armor permet d’exporter au format ascii, plus facile à interpréter et passe mieux les antivirus, que le format binaire exporté par défaut.

Échanger sa clé avec son destinataire

Vous pouvez envoyer votre clé publique (fichier .gpg) à votre destinataire par email, message instantanné ou bien même par pigeon voyageur si cela vous chante. Ce n’est pas grave si votre clé se fait intercepter par quelqu’un car, comme son nom l’indique, elle est publique !

Lorsque votre destinataire vous a envoyé sa clé publique, il va falloir que vous l’importiez dans votre pubring.

$ gpg --import charles.de-gaulle.gpg

Valider que c’est bien la clé de votre destinataire

Si il y a bien une étape à ne pas négliger, c’est celle-ci !
Elle permettra de répondre à la question “Comment ne pas communiquer avec un usurpateur ?”.

On commence par éditer la clé.

$ gpg --edit-key charles.de-gaulle@lafrance.fr

On affiche le fingerprint en tappant fpr puis on s’appelle au téléphone ou on se voit IRL afin de vérifier le fingerprint affiché.
Il est important lors de cette étape d’être absolument certain de parler à la bonne personne.

pub   rsa4096/9059FCDD205B467A 2020-06-28 Jimmy Hendrix <jimmy.hendrix@tld.com>
 Primary key fingerprint: 66A4 55F0 65F5 9831 2CA7  0DC3 9059 FCDD 205B 467A

Lorsque chacun a vérifié le fingerprint de l’autre, on signe la clé de son destinataire avec la nôtre !
Pour ça rien de plus simple, on entre sign ! Et on sauvegarde les changements en entrant save.

Chiffrer un message

Maintenant que nous faisons confiance à la clé publique de notre destinataire, on peut lui chiffrer un message !

$ echo "Les sanglots longs des violons de l’automne" > message-secret.txt
$ gpg --output message-secret.txt.gpg --encrypt --recipient charles.de-gaulle@lafrance.fr message-secret.txt

Et on peut envoyer notre fichier message-secret.txt.gpg !

Il est posssible de spécifier plusieurs destinataires, il suffira de renseigner plusieurs fois l’option --recipient.
Exemple :

$ gpg --output message-secret.txt.gpg --encrypt --recipient charles.de-gaulle@lafrance.fr --recipient jimmy.hendrix@tld.com message-secret.txt

Dans ce cas, on pourra nous aussi déchiffrer le message. On peut désormais supprimer le fichier d’origine (en utilisant shred --remove par exemple) pour n’en garder aucune trace en clair.

Sachez que lorsque vous chiffrez un message, vous le signez par la même occasion. Vous pouvez par ailleurs seulement signer un message en utilisant gpg --output message-signé.txt --clearsign message.txt.

Déchiffrer un message

Pour déchiffrer rien de plus simple :

$ gpg --output message-secret.txt --decrypt message-secret.txt.gpg

Il va nous demander le mot de passe de notre clé privée pour déchiffrer le contenu du fichier et voilà ! Nous obtenons notre fichier message-secret.txt déchiffré.

Alors heureux ?

Vous savez désormais signer et chiffrer un fichier texte et faire en sorte que seul votre destinataire puisse lire votre message. C’est pas beau ça ? Il n’y a plus qu’à informer les personnes autour de soi que GPG existe et qu’il est très efficace particulièrement pour communiquer des données sensibles.

Pour devenir un boss du game

Dans un prochain article, j’aborderais la notion de confiance, les serveurs de clé, et bien d’autres mécaniques très utiles pour utiliser GPG au quotidien.
En attendant, je vous laisse un petit lien très intéressant qui vous permettra d’améliorer vos connaissances sur le sujet: Le manuel d’utilisation officel de GPG [FR]