Introduction aux HSM

Que ce soit lors d'événements familiaux ou lorsque je rencontre des nouvelles personnes, je suis régulièrement amené à devoir expliquer ce que je fais pour gagner ma vie. Dans ces moments là, je réponds généralement « je suis ingénieur en cybersécurité ». Le soucis, c'est qu'une fois que j'ai dit ça, les gens s'imaginent que je suis un pirate et que je les espionne quand ils se masturbent devant leur webcam. Ce qui est faux.

Moi le lundi matin au boulot

Dans le détail, je travaille sur un appareil électronique qui sert à faire de la cryptographie et dont le nom générique est HSM. Je vais tâcher dans cet article
de vous présenter de quoi il retourne plus exactement. Ce sera l'occasion d'un petit cours introductif à la cryptographie et un exposé sur comment cette dernière est mise en œuvre en pratique.

J'espère par ailleurs que cela vous permettra de mieux appréhender ce à quoi j'occupe mes journées et pourquoi j'ai arpenté la France et le monde dans tous les sens l'an dernier.

Les grands principes de la cryptographie

La cryptographie, c'est un ensemble de procédés qui permet de protéger des messages. Ces procédés visent plus exactement à attendre trois objectifs :
  • la confidentialité : on veut que nos messages soient illisibles par des personnes de l'extérieur
  • l'authenticité : on veut pouvoir garantir l'expéditeur d'un message en empêchant un usurpateur de se faire passer pour quelqu'un d'autre
  • l'intégrité : on souhaite pouvoir être certains que les messages que l'on reçoit n'ont pas été modifié en cours d'acheminement
Pour atteindre ces objectifs, des méthodes existent, implémentées chacune sous la forme de plusieurs algorithmes. On pense bien sûr d'abord au chiffrement, qui est un procédé qui permet de brouiller un message pour le rendre illisible, assurant ainsi leur confidentialité. Ces chiffrements se font grâce à des clefs, dont la connaissance permet le chiffrement et/ou le déchiffrement des messages. Ces clefs sont des nombres relativement grands, généralement exprimés au format hexadécimal.

Notez le « et/ou » plus haut. Dans cette nuance se glisse la distinction entre les deux grandes familles de la cryptographie : la cryptographie symétrique et la cryptographie asymétrique. La différence entre les deux est simple : en symétrique, on utilise la même clef pour chiffrer et pour déchiffrer. C'est-à-dire que vous vous êtes au préalable mis d'accord avec votre partenaire sur une clef secrète connus de vous seuls et que vous utilisez pour protéger tous vos échanges. Le principal algorithme de chiffrement symétrique est AES.

Logiquement, vous comprenez qu'en cryptographie asymétrique on va utiliser des clefs différentes pour chiffrer et déchiffrer. Dans cette configuration, chacun se voit doté de deux clefs : une clef dite « publique » et une clef dite « privée ». Lorsque vous allez adresser un message chiffré à quelqu'un, vous aller la chiffrer avec sa clef publique, qui est connue de tous. Lui, en la recevant, va la déchiffrer avec sa clef privée, qu'il est le seul à connaître. Évidemment, ces deux clefs ne sont pas indépendantes mais sont liées par des propriétés mathématiques qui dépassent le cadre de cet article. Le principal algorithme de chiffrement asymétrique est RSA.

Je ne vais pas détailler tous les algorithmes cryptographiques qui existent, je vais simplement en citer un dernier : la signature électronique. Cette dernière est un procédé découlant de la cryptographie asymétrique qui permet à un expéditeur d'assurer à la fois l'intégrité et l'authenticité d'un message en apposant à la fin de ce dernier un bloc de données dépendant du message en lui même et de sa clef privée. Lui seul peut réaliser cette signature (car lui seul connaît sa clef privée) et n'importe qui peut vérifier cette signature, à partir du message en lui-même et de la clef publique de l'expéditeur affiché.

La mise en œuvre pratique de la cryptographie

L'implémentation des procédés décrits plus haut ne devraient a priori pas poser de problème. En effet, tous les langages de programmation standards disposent de bibliothèques permettant de faire des calculs cryptographiques. Il suffit donc de les utiliser pour correspondre à nos besoins et nos contextes particuliers. Sauf que ce n'est pas si simple.

En effet, ces solutions purement logicielles ont le défaut d'être très vulnérables et de poser de graves problèmes de sécurité. Si on suppose que vous avez développé une application tournant sur un serveur, où stockez-vous la valeur de vos clefs ? Comment pouvez-vous être assuré de leur confidentialité ? Par ailleurs, comment ont été généré ces clefs ? Qui connaît leurs valeurs ? N'y a-t-il pas un important risque de compromission ? Aussi, êtes-vous assuré qu'une autre application tournant sur votre serveur n'accède pas elle aussi à vos clefs et ne les utilise pas frauduleusement ?

Ce sont pour toutes ces raisons, et bien d'autres encore, que les applications industrielles les plus sensibles (banques, compteurs communicants, objets connectés...) ne peuvent pas entièrement reposer sur des solutions purement logicielles pour assurer leurs opérations cryptographiques. C'est dans ce contexte qu'apparaît la notion de HSM, ou Hardware security module.

Il s'agit — littéralement — de boîtes noires capables d'effectuer des calculs cryptographiques : chiffrement, vérification de signature, etc. L'intérêt par rapport à une bibliothèque logicielle, c'est que les clefs sont stockées à l'intérieur de l'appareil, et qu'elles n'en sortent jamais en clair. Ainsi, si vous voulez faire du chiffrement, vous allez envoyer vos données à chiffrer à l'intérieur du HSM, et ce dernier vous renverra le résultat chiffré. Aucune donnée sensible ne sort.

En plus d'offrir ces fonctionnalités cryptographiques, un HSM offre également des mécanismes pour gérer les clefs de façon sécurisée, notamment pour les générer et pour les exporter. Ces processus au cours desquels on génère de nouvelles clefs sont appelés « cérémonies des clefs ». Derrière ce nom teinté d'ésotérisme, on trouve des mécanismes assurant la confidentialité des secrets d'un projet.

Par exemple, on trouve la notion de « hiérarchie de clefs ». Toutes les clefs sont soit chiffrées par une autre, soit découpées en plusieurs composantes réparties entre plusieurs personnes. Ainsi, tous les porteurs de secret doivent se réunir pour reconstituer la clef en entier. Un des moyens d'accomplir cela est le XOR : la clef complète est le résultat du calcul d'un « Ou-exclusif » entre chaque composante. Ainsi, personne ne connaît la valeur des clefs.

Un HSM intègre par ailleurs des systèmes de sécurité pour par exemple pour limiter l'usage d'une clef à certaines applications authentifiées (via des certificats), pour restreindre les sous-réseaux distants autorisés à se connecter (via un firewall) ou pour effacer toute ou partie des clefs en cas d'atteinte physique à l'appareil.

Et toi dans tout ça ?

Ce cadre étant posé, je travaille pour une entreprise concevant — entre autre — des HSM. J'ai un rôle d'intégrateur, c'est-à-dire que j'assiste les clients dans la mise en œuvre de leurs appareils (qui sont un poil complexes à utiliser) dans le cadre de leur solution. Par ailleurs, je suis également chargé de l'organisation de cérémonie des clefs, que je conduis régulièrement. Ces éléments font que je suis régulièrement conduit à me déplacer chez des clients, parfois loin.

Voilà quel est mon métier.

* * *

J'espère que cette petite introduction à la cryptographie et aux HSM vous aura intéressé et que vous aurez appris quelques trucs. Il y aurait évidemment quantité d'autres choses à dire, mais je préfère m'en tenir là pour ne pas nuire à la lisibilité de l'ensemble.

Merci de votre attention !

Commentaires

Articles les plus consultés