En tant qu’ingénieur, développeur, analyste, il est fréquent qu’on doive échanger des informations sensibles telles que des clés API, des données confidentielles, ou des fichiers importants avec des collègues ou des clients.
L’importance de la sécurité lors de ces échanges n’est plus à démontrer, mais j’ai depuis longtemps arrêté de compter les fois où je reçois une clé par email ou une demande d’envoi de mot de passe via un site public de chiffrement soi-disant infaillible, souvent avec le commentaire démoralisant “on a toujours fait comme ça”.
Au sein d’une même organisation, on est vite tentés d’échanger les secrets via un fichier texte sur drive (donc en clair….) ou via la messagerie privée (indexée...), mais il y a évidemment beaucoup mieux, et c’est pourquoi je vous propose d’explorer LA méthode décentralisée, simple et sécurisée pour échanger des secrets : le chiffrement via un échange de clés, en utilisant GPG (Gnu Privacy Guard).
Pourquoi choisir GPG ?
Pour commencer, parce que GPG (Gnu Privacy Guard) n'est pas une technologie obscure développée depuis peu, mais un système robuste et éprouvé, la cryptographie asymétrique, utilisé par des millions de sociétés pour sécuriser leurs échanges, depuis sa première version en 1997.
En utilisant GPG, on s’assure que seul le ou les destinataires de notre secret pourront le lire. Un “man-in-the-middle” qui intercepte l’échange, un mauvais destinataire lors de l’envoi d’un mail ou d’un Teams, l’indexation du fichier ou d’un message n’a aucune importance : sans la clé de déchiffrement, on ne peut rien faire.
Et ces clés sont suffisamment robustes pour se prémunir du risque de brute force, notamment si vous utilisez des clés RSA 4096 ou EdDSA 3072. Avec les ordinateurs les plus puissants du monde, il faut encore aujourd’hui une éternité pour casser la clé, d’autant plus qu’on peut aussi attribuer une durée de vie limitée, et même un mot de passe pour rajouter de la sécurité. Un ordinateur quantique pourrait probablement trouver la clé plus rapidement, mais ça n’est pas vraiment à la portée de tout le monde.
J’ai déjà reçu dans ma vie des clés de service account Google Cloud envoyées via des sites comme onetimesecret : la bonne pratique voudrait dans ce cas qu'on désactive la clé et signale une potentielle faille de sécurité. Mais je n’ai jamais vu cette procédure mise en place, quand bien même le danger serait avéré. Rien ne garantit, malgré les bons mots dans la FAQ de ces sites, qu'ils sont sécurisés, qu'ils ne sont pas eux-mêmes victimes d'une intrusion ou que les secrets ne sont pas stockés dans un coin pour être réutilisés dans quelques mois ou années s’ils sont encore actifs ou intéressants à exploiter.
C’est pourquoi depuis plus d’une décennie maintenant (oui je me fais vieux), j'utilise et j’évangélise mes collègues sur GPG pour échanger des informations sensibles, et je suis toujours surpris de constater que cette pratique est loin d'être répandue. Pourtant, elle est à la fois simple et rapide, quasi infaillible. Elle permet même de garantir l'origine des fichiers échangés en les signant numériquement.
Last but not least, GPG est aussi utilisé pour signer vos commits avec git: cela permet d'ajouter une couche de sécurité dans vos repos et d'avoir le petit "verified" à côté de vos commits ou merge/pull requests. La classe.
Fonctionnement de base de GPG
Tout commence chez le destinataire de l’échange. S’il ne l’a jamais fait, il doit tout d’abord générer une paire de clés et transmettre la clé publique à l'expéditeur. Il est crucial de ne jamais partager la clé privée, car elle permet de déchiffrer les informations échangées. C'est d'ailleurs le principal risque avec cette méthode : la compromission de la clé privée.
Exporter et stocker sa clé privée dans un password manager est évidemment envisageable si on veut la réimporter sur un autre device : en effet, si on ne le fait pas, seul le device où la clé a été générée pourra déchiffrer les échanges.
L'expéditeur, qui peut très bien ne même pas avoir sa propre clé, chiffre alors le fichier à envoyer à l'aide de la clé publique du destinataire. Une fois chiffré, le fichier peut être transmis par n'importe quel moyen, car seuls les détenteurs de la clé privée correspondante peuvent le déchiffrer.
Si plusieurs destinataires doivent pouvoir déchiffrer le fichier, il suffit d'utiliser les clés publiques de chacun, en fournissant la liste de clés et non pas une clé unique. Le fichier sera ainsi déchiffrable par tous les destinataires, chacun avec leur clé.
Ajoutons que lorsqu'on parle de destinataire, il peut très bien s'agir d'un serveur de stockage par exemple. J’utilisais cette méthode pour chiffrer des dumps de base de données avant de les déposer sur un cloud storage (on est jamais trop prudents).
Utiliser GPG : c'est simple !
La bonne nouvelle, c'est que l'utilisation de GPG est plus simple que vous ne le pensez. Vous pouvez utiliser des outils comme GPGSuite sur Mac ou Kleopatra sur Windows (liste des outils disponibles pour les différents systèmes ici). Et même si GPG est également disponible en ligne de commande, quand on travaille avec des équipes métiers, il est toujours préférable de ne pas demander d'ouvrir un terminal et de saisir des commandes cryptiques… L'idée n’est pas de faire peur avec trop de technique mais de bien montrer que sécuriser les échanges, c’est facile.
Prenons un exemple concret pour illustrer le processus: supposons que je veuille envoyer à Sophie un fichier contenant des données sensibles, comme un Excel avec les salaires de tous les employés d'une usine de chaussettes.
Pour commencer, Sophie installe GPGSuite et génère une paire de clés (une clé privée et une clé publique).
Une fois la paire de clés créée, elle apparaît dans la liste et on peut voir qu’il s’agit bien d’une paire de clé sec/pub (Secret / Public). Le type de clé et la date d’expiration si elle a été définie apparaissent également, comme cela sera le cas pour toutes les autres clés que Sophie va importer (ou créer) désormais. En effet, si Sophie veut à son tour chiffrer des fichiers pour les envoyer, elle pourra utiliser cet outil pour importer les clés publiques de ses destinataires.
Pour me transmettre sa clé publique, il lui suffit de faire un clic droit sur cette clé, choisir l’option “Exporter…”, et d’en créer un fichier qu’elle peut m’envoyer en toute sécurité. Rappelons-nous que la clé publique ne permet que le chiffrement, elle ne peut pas déchiffrer les données. Elle pourrait même la poster sur X si elle voulait (d’ailleurs les outils proposent parfois de publier la clé dans un annuaire de clé publique pour s’affranchir de l’étape d’échange de clé publique).
Une fois que j’ai importé sa clé publique, je peux chiffrer mon fichier pour le lui envoyer. Un clic droit sur mon fichier à transmettre dans le Finder > Services > OpenPGP : chiffrer le fichier (sous MacOS) et le tour est joué. Une fenêtre va s’ouvrir pour me demander à qui je souhaite envoyer le fichier, si je désire le signer ou non avec ma propre clé, et le tour est joué. Mon fichier salaires.xlsx sera chiffré dans un nouveau fichier salaires.xlsx.gpg et je peux le transmettre à Sophie par mail, qui n’aura qu’à faire à son tour un clic droit puis déchiffrer le fichier (ou double-cliquer sur le fichier) pour en récupérer la version source.
Attention, si je supprime définitivement le fichier source “salaires.xlsx”, je ne peux pas déchiffrer le fichier chiffré, seule Sophie peut le faire ! C’est un point important si vous mettez en place des processus automatiques de transfert de fichiers chiffrés pour des backups par exemple: assurez-vous que l’envoi et la réception ont bien fonctionné et que le déchiffrement sera possible avant de supprimer la source…
En conclusion, le chiffrement via un échange de clés avec GPG offre une solution simple et efficace, j’oserais même dire facile, pour protéger vos informations sensibles. Il est temps de l'adopter et de garantir la confidentialité de vos échanges, plus rien ne vous retient, et tous les ingénieurs en sécurité vous remercieront.