Aller au contenu

Protéger des données avec un HSM (hardware security module)

Protéger des données avec un HSM (hardware security module)

Section intitulée « Protéger des données avec un HSM (hardware security module) »

La cryptographie ne protège pas que des fichiers : elle protège des relations entre acteurs qui ne se font pas confiance. Un HSM (Hardware Security Module, module matériel de sécurité) déplace ce point de confiance dans un boîtier scellé, où la clé est fabriquée et utilisée sans jamais en sortir. Restent trois questions : ce que cette frontière matérielle garantit réellement, comment une application s’y adresse, et ce qu’elle coûte une fois en production.

→ Lire l’explication complète de la marmotte

Définition et principe de fonctionnement d’un HSM

Section intitulée « Définition et principe de fonctionnement d’un HSM »

Un HSM (Hardware Security Module) est un boîtier physique dédié à la génération, au stockage et à l’utilisation de clés cryptographiques. Contrairement à un logiciel qui manipule des clés en mémoire, un HSM garde les clés privées à l’intérieur d’une frontière matérielle scellée : elles n’en sortent jamais en clair. Toute opération (signature, chiffrement, dérivation) se fait à l’intérieur du module, qui renvoie uniquement le résultat.

Le principe repose sur une séparation stricte entre « où vit la clé » et « qui l’utilise ». Une application demande une opération via une API (souvent PKCS#11 (Public-Key Cryptography Standards, standards de cryptographie à clé publique), parfois KMIP ou une API propriétaire), le HSM l’exécute en interne, et personne, pas même un administrateur système avec un accès root sur le serveur hôte, ne peut extraire la clé brute. Cette contrainte matérielle change la donne face à une compromission logicielle : voler la base de données ou la mémoire du serveur ne suffit plus à voler les clés.

Un HSM combine plusieurs briques : un processeur cryptographique dédié (souvent accéléré pour l’AES (Advanced Encryption Standard), le RSA (Rivest-Shamir-Adleman) ou les courbes elliptiques), une mémoire protégée pour les clés, et des capteurs de tamper (température, tension, intrusion physique) qui déclenchent l’effacement des clés en cas de tentative d’ouverture. Cette réaction d’auto-effacement, le « zeroization », est ce qui distingue un HSM certifié d’un simple coffre-fort logiciel.

Les HSM se déclinent en deux familles principales. Les modèles réseau (network-attached) exposent leurs services via Ethernet et servent plusieurs applications ou plusieurs équipes ; les modèles PCIe s’installent directement dans un serveur et servent une charge locale à faible latence. Les fournisseurs cloud proposent aussi des HSM en service managé (AWS CloudHSM, Azure Dedicated HSM), qui restent des HSM physiques dédiés au client mais administrés via une API cloud. Les certifications FIPS 140-2/3 niveau 3 ou Common Criteria EAL4+ servent de repère pour comparer le niveau de résistance physique entre modèles.

La mise en service d’un HSM suit une progression assez normée. D’abord, l’initialisation du module génère les clés maîtresses et définit le schéma de quorum (combien d’administrateurs, sur combien nécessaires, doivent se réunir pour autoriser une opération sensible comme une restauration de sauvegarde). Ensuite, la création des slots et des utilisateurs applicatifs isole chaque service consommateur : une application de signature de code ne doit pas partager le même accès qu’une application de chiffrement de base de données. Puis vient l’intégration applicative proprement dite, via la bibliothèque PKCS#11 fournie par le constructeur.

Un exemple de configuration : sur un HSM SoftHSM (utilisé pour les tests, pas en production) ou sur un module physique, l’initialisation d’un slot ressemble à ceci :

Fenêtre de terminal
softhsm2-util --init-token --slot 0 --label "cle-signature-prod"
pkcs11-tool --module /usr/lib/softhsm/libsofthsm2.so --login --keypairgen \
--key-type rsa:2048 --label "signature-code-2024"

La vérification qui suit est aussi importante que la génération : lister les objets présents dans le slot (pkcs11-tool --list-objects) permet de confirmer que la clé existe bien côté HSM et qu’aucune copie n’a fuité côté disque de l’application. Cette étape de contrôle post-configuration est souvent négligée alors qu’elle prend trente secondes.

Prenons le cas concret d’une infrastructure de signature de certificats internes. L’autorité de certification s’appuie sur une clé racine stockée dans un HSM plutôt que sur un fichier PEM protégé par mot de passe. Quand un serveur demande un certificat, le service d’émission construit la requête, l’envoie au HSM via PKCS#11 avec le label de la clé racine, et récupère uniquement la signature calculée. À aucun moment le service d’émission ne voit la clé privée elle-même.

Ce découplage a une conséquence pratique directe sur les procédures d’incident : si le serveur qui héberge le service d’émission est compromis, l’attaquant récupère la logique applicative mais pas la capacité de forger indéfiniment des certificats, puisque chaque signature nécessite un appel actif au HSM (qui peut être coupé, journalisé, ou soumis à un quorum d’approbation selon la politique définie).

La sécurité d’un HSM ne se limite pas au boîtier : elle dépend aussi de la politique d’accès qui l’entoure. Le principe du moindre privilège s’applique aux slots et aux utilisateurs PKCS#11 exactement comme à n’importe quel système : une application ne doit disposer que des droits nécessaires à son usage (signer, mais pas exporter ; déchiffrer, mais pas régénérer une clé maîtresse).

La sauvegarde des clés pose une question délicate. Un HSM propose généralement un mécanisme de « wrapping » pour exporter une clé de façon chiffrée vers un autre HSM du même modèle (utile pour la reprise après sinistre), mais cette opération doit rester rare, tracée, et soumise au même schéma de quorum que l’initialisation. Un audit régulier des journaux d’accès (qui a demandé quelle opération, à quelle heure, depuis quelle adresse) permet de détecter une dérive avant qu’elle ne devienne un incident.

Les incidents les plus fréquents autour d’un HSM ne viennent pas d’une faille cryptographique mais d’une mauvaise gestion opérationnelle. Le cas classique : perte du quorum d’administrateurs (départ de personnel, cartes à puce égarées) qui rend le module inutilisable pour toute opération sensible. La parade consiste à documenter et répéter la procédure de restauration de quorum avant d’en avoir besoin, pas pendant l’incident.

Un autre point de friction concerne la latence réseau pour les HSM partagés : une application qui effectue des milliers de signatures par seconde peut saturer un module réseau si le dimensionnement n’a pas anticipé la charge. Le diagnostic passe par la mesure du temps de réponse PKCS#11 sous charge, avant la mise en production, plutôt que par une extrapolation optimiste.

Un HSM protège-t-il contre le vol physique du serveur ?

Section intitulée « Un HSM protège-t-il contre le vol physique du serveur ? »

Oui, dans la limite de sa certification. Les capteurs de tamper déclenchent l’effacement des clés dès qu’une tentative d’ouverture ou de manipulation physique est détectée, ce qui rend le vol du boîtier inutile pour récupérer les clés.

Peut-on migrer les clés d’un HSM vers un autre modèle ?

Section intitulée « Peut-on migrer les clés d’un HSM vers un autre modèle ? »

Rarement de façon directe. Le wrapping de clés fonctionne en général entre modules du même constructeur et de la même génération. Un changement de fournisseur implique souvent une régénération des clés et une période de transition planifiée.

Un HSM cloud offre-t-il les mêmes garanties qu’un HSM on-premise ?

Section intitulée « Un HSM cloud offre-t-il les mêmes garanties qu’un HSM on-premise ? »

Sur le plan matériel, oui : les offres comme AWS CloudHSM utilisent de vrais modules certifiés dédiés au client. La différence se joue sur la chaîne de confiance opérationnelle (qui gère physiquement le datacenter) et sur les procédures de sauvegarde, à vérifier dans le contrat de service.

Sans module matériel, la clé privée vit dans un fichier ou dans la mémoire du serveur, et chaque copie de ce serveur (sauvegarde, instantané de machine virtuelle, image de disque) en emporte une avec elle. Une fois extraite, la clé signe hors ligne, autant de fois que souhaité, sans qu’aucun journal central n’enregistre la moindre opération : il devient impossible de distinguer les signatures légitimes des signatures forgées, donc de délimiter l’incident. Pour une clé racine d’autorité de certification, la seule réponse restante consiste à révoquer la racine et à réémettre l’ensemble des certificats qui en dépendent, opération qui transforme la fuite d’un fichier en chantier pour toute l’infrastructure.

La clé de signature est fabriquée à l’intérieur du boîtier et n’en sort jamais. À la création, le module tire un nombre secret, le range dans une mémoire qu’aucun câble ne relie à l’extérieur, et lui attribue une étiquette. Le serveur ne reçoit que cette étiquette.

Pour signer un document, le serveur en calcule d’abord l’empreinte : un résumé de quelques dizaines de caractères, qui change entièrement dès qu’on modifie une virgule du document. Il envoie cette empreinte au boîtier, accompagnée de l’étiquette de la clé. Le module vérifie que le demandeur a le droit d’utiliser cette clé-là, effectue le calcul en interne, et ne renvoie que la signature. Le nombre secret n’a traversé ni le réseau, ni la mémoire du serveur.

Trois conséquences en découlent. Voler le disque du serveur ne rapporte qu’une étiquette, sans valeur loin du boîtier. Ouvrir le module déclenche des capteurs qui effacent son contenu avant qu’on puisse le lire. Et couper l’accès au boîtier arrête toute production de signatures, puisque chacune exige un appel au module.

La contrepartie tient dans la même phrase : tout dépend désormais de ce boîtier. Perdre les personnes qui détiennent les droits d’administration rend les clés inutilisables, et une copie de secours ne s’échange qu’entre modules compatibles entre eux.

À lire aussi

Pages voisines