Read in English · Leer en español · Auf Deutsch lesen
Section 8.4 sur 8.8 · Avancé · 26 min de lecture
Chiffrement, gestion des clés et secrets
Leçon vidéo
5 min · narré en anglais, avec sous-titresÉcouter seulement (audio)
Lire la transcription
Dire que les données sont chiffrées en transit et au repos masque la question qui compte : chiffrées contre qui ? Cette leçon montre comment les architectes décident quoi chiffrer, où, et avec quelles clés.
Pensez à un hôtel. Les objets de valeur des clients vont dans les coffres des chambres, et ces coffres ne valent que par le contrôle exercé sur ceux qui détiennent les codes. Le passe-partout se trouve dans une armoire fermée à clé que seul le directeur peut ouvrir, et chaque ouverture est consignée dans un journal. Les objets les plus précieux, l’hôtel ne les garde pas du tout. Le client reçoit un ticket numéroté, et c’est la banque d’à côté qui conserve l’objet. La protection des données fonctionne de la même façon.
Chaque couche de chiffrement protège contre certains acteurs et pas contre d’autres. TLS protège les données sur le réseau, mais un service compromis les voit toujours en clair. Le chiffrement du stockage protège contre le vol de disques, d’instantanés et de sauvegardes, mais pas contre quiconque peut exécuter des requêtes, y compris un attaquant qui utilise une injection SQL. Le chiffrement au niveau des champs, réalisé par l’application, protège contre les administrateurs de bases de données, les comptes aux droits trop larges et les copies analytiques, car ils ne détiennent que des données brouillées. Mais la base de données ne peut plus rechercher ni trier sur ce champ. Dans tous les cas, la protection est exactement aussi solide que le contrôle exercé sur la clé. Le chiffrement déplace le problème d’accès des données vers les clés, où il est plus facile à gérer.
Confondre les outils cryptographiques crée des défauts de conception. Un hachage cryptographique est une empreinte à sens unique, sans clé. Il ne peut pas prouver qui a envoyé quelque chose. Un code d’authentification de message utilise un secret partagé pour prouver qu’un message provient d’une personne qui détient la clé, comme le webhook d’un prestataire de paiement. Une signature numérique permet à quiconque possède la clé publique de vérifier d’où viennent les données, sans pouvoir la forger. Les mots de passe exigent un hachage volontairement lent et salé, comme Argon2id, pour que chaque essai coûte du temps réel à un attaquant. Mieux encore, laissez un fournisseur d’identité proposer des passkeys, et ne stockez aucun mot de passe.
Les clés sont gardées par un service de gestion de clés. Ses clés maîtresses, appelées clés de chiffrement de clés, se trouvent dans des modules de sécurité matériels et n’en sortent jamais. Chaque utilisation est vérifiée au regard d’une politique et journalisée. Le chiffrement d’enveloppe s’en sert sans envoyer les données en masse au service. Le service des commandes demande une nouvelle clé de données, et la reçoit deux fois : en clair, et enveloppée sous la clé maîtresse. Il chiffre l’enregistrement localement, jette la clé de données en clair, et stocke le texte chiffré et la clé enveloppée ensemble dans une même ligne. Plus tard, pour lire l’enregistrement, il n’envoie que la petite clé enveloppée pour la faire désenvelopper, une opération vérifiée et journalisée. La rotation devient ainsi peu coûteuse : seules les clés de données sont réenveloppées. Et détruire une clé maîtresse rend toutes les copies illisibles, y compris les sauvegardes et les journaux d’événements. C’est ce qu’on appelle le crypto-shredding. Le prix à payer est une dépendance critique envers le service de clés.
Un secret est tout identifiant qui donne un accès. Les secrets ne vivent jamais dans le code source, les images de conteneur ou la configuration d’un dépôt. Une fois dans l’historique d’un dépôt, un secret y reste. Leur place est dans un coffre-fort qui journalise chaque accès. Mieux encore : des identifiants de courte durée émis par le coffre-fort, ou l’identité de charge de travail, sans aucun secret stocké. Si un secret fuit, révoquez-le ou renouvelez-le d’abord. Supprimer le commit ne sert à rien, car des copies existent déjà. La tokenisation remplace une valeur sensible par un jeton qu’aucune clé ne permet d’inverser. Avec des champs de paiement hébergés, les numéros de carte vont directement au prestataire de paiement. Les données de carte les moins chères à protéger sont celles que vous ne détenez jamais.
Voyons les décisions prises sur la plateforme de livraison de repas. TLS et le chiffrement du stockage sont déjà partout. Les numéros de carte ne sont jamais détenus. Les mots de passe cèdent pour l’essentiel la place aux passkeys, via le fournisseur d’identité. Les adresses sont de niveau confidentiel : protégées par le chiffrement du stockage, masquées dans l’outil de support, et réduites aux secteurs de code postal dans l’entrepôt de données. Les coordonnées bancaires de versement sont de niveau restreint : elles bénéficient donc d’un chiffrement au niveau des champs sous leur propre clé, que seule la tâche de versement peut désenvelopper. Les quelques champs personnels des événements utilisent une clé par client. Détruire cette clé les efface, même d’un journal qui n’est jamais modifié. Et les sauvegardes utilisent une clé distincte, dans un compte distinct. Remarquez que deux décisions suppriment des données au lieu de les protéger. C’est toujours l’option la plus solide.
La section complète contient le schéma de classification des données à quatre niveaux, une liste de contrôle pour les secrets divulgués, et bien plus encore. Ensuite, dans la section huit point cinq, nous verrons le zero trust. À très vite.
Ce qu’il faut savoir
- Chaque couche de chiffrement protège contre des acteurs particuliers : TLS contre le réseau, le chiffrement du stockage contre le vol de supports et de sauvegardes, le chiffrement au niveau des champs contre les administrateurs de bases de données et les copies en aval ; la protection se ramène toujours au contrôle des clés.
- Les algorithmes symétriques (AES-GCM) chiffrent les données en masse ; la cryptographie asymétrique fournit l’accord de clés et les signatures numériques ; les premières normes post-quantiques du NIST (FIPS 203 à 205, 2024) font de l’agilité cryptographique une préoccupation architecturale.
- Le hachage, les MAC, les signatures, le chiffrement et l’encodage sont des outils différents ; les mots de passe exigent un hachage lent et salé, comme Argon2id avec les paramètres actuels de l’OWASP, ou mieux, des passkeys via un fournisseur d’identité.
- Le chiffrement d’enveloppe enveloppe des clés de données propres à chaque enregistrement sous une clé de chiffrement de clés conservée dans un KMS adossé à des HSM, ce qui rend la rotation peu coûteuse, limite le rayon d’impact et permet le crypto-shredding, au prix d’une dépendance critique.
- Les secrets ont leur place dans un coffre-fort, de préférence sous forme d’identifiants dynamiques de courte durée, ou remplacés par l’identité de charge de travail ; un secret divulgué doit d’abord être révoqué, puis nettoyé ensuite.
- La tokenisation par un prestataire de paiement garde les numéros de carte hors de la plateforme et réduit le périmètre PCI DSS v4.0.1 ; un schéma de classification des données détermine où le chiffrement au niveau des champs vaut ce qu’il coûte.
Ce que le chiffrement protège, et ce qu’il ne protège pas
Le chiffrement est souvent traité comme une case à cocher : « les données sont chiffrées en transit et au repos ». Cette formule masque la question qui compte, à savoir contre qui. Chaque couche de chiffrement protège les données contre certains acteurs et pas contre d’autres, et dans tous les cas la protection est exactement aussi solide que le contrôle exercé sur ceux qui peuvent utiliser la clé. Le chiffrement ne supprime pas le problème du contrôle d’accès ; il le déplace des données vers les clés, où il est généralement plus facile à gérer, à auditer et à révoquer.
Le chiffrement en transit empêche que des données qui traversent un réseau soient lues ou modifiées en chemin. Sur le web, cela signifie TLS, présenté au chapitre 0 ; entre services, cela signifie TLS ou TLS mutuel, abordé avec le zero trust. Le chiffrement au repos protège les données stockées, mais « au repos » ne désigne pas une seule chose : le tableau montre les couches courantes sur la plateforme de livraison de repas.
Les couches de chiffrement et les menaces auxquelles chacune répond
| Couche | Protège contre | Ne protège pas contre |
|---|---|---|
| TLS en transit | L’écoute clandestine et la falsification sur le réseau, y compris à l’intérieur du centre de données. | Un service ou un endpoint compromis, qui voit les données en clair. |
| Chiffrement du disque ou du volume (par défaut chez les grands fournisseurs de cloud) | Les disques volés ou mis au rebut, le matériel rendu au fournisseur. | Quiconque atteint les données par le système d’exploitation ou la base de données en fonctionnement. |
| Chiffrement de la base de données ou du service de stockage (par exemple le chiffrement transparent des données) | Les copies de fichiers de données, les instantanés et les sauvegardes réalisés au niveau de la couche de stockage. | Tout compte de base de données qui peut exécuter des requêtes, y compris celui de l’application elle-même et un attaquant qui utilise une injection SQL. |
| Chiffrement au niveau de l’application (au niveau des champs) | Les administrateurs de bases de données, les comptes aux droits trop larges, les copies analytiques et les sauvegardes divulguées, car ils ne détiennent que du texte chiffré. | L’application elle-même si elle est compromise, puisqu’elle peut utiliser la clé ; la base de données ne peut plus rechercher ni trier sur ce champ. |
| Chiffrement de bout en bout | Tous les intermédiaires, y compris l’opérateur de la plateforme. | Rien entre les deux, mais la plateforme ne peut alors plus rien faire d’utile des données. |
En lisant le tableau de haut en bas, chaque couche protège contre davantage d’acteurs et coûte davantage de fonctionnalités. Une conception saine utilise partout les couches bon marché et transparentes (TLS et le chiffrement du stockage sont presque gratuits aujourd’hui) et les couches coûteuses de façon sélective, pour les données dont l’exposition causerait le plus de tort. Décider de quelles données il s’agit relève de la classification des données, traitée plus loin dans cette section avec la tokenisation et un exemple commenté.
Cryptographie symétrique et asymétrique
Le chiffrement symétrique utilise une seule clé secrète pour chiffrer et déchiffrer. Il est assez rapide pour les données en masse, et l’algorithme standard est AES (FIPS 197, 2001), avec des clés de 128 ou 256 bits. Les conceptions modernes utilisent le chiffrement authentifié, qui détecte les falsifications en plus de masquer le contenu : AES en mode Galois/Counter (AES-GCM) ou ChaCha20-Poly1305 (RFC 8439). Les modes authentifiés exigent un nonce unique pour chaque message chiffré sous la même clé ; réutiliser un nonce avec AES-GCM peut révéler le texte en clair et permettre des falsifications, ce qui est l’une des nombreuses raisons d’utiliser des bibliothèques éprouvées plutôt que d’assembler soi-même des primitives.
La cryptographie asymétrique utilise une paire de clés : une clé publique que tout le monde peut détenir et une clé privée gardée secrète. Elle permet deux choses dont la cryptographie symétrique est incapable. L’accord de clés permet à deux parties qui ne se sont jamais rencontrées d’établir une clé symétrique partagée sur un réseau ouvert (Diffie-Hellman sur courbes elliptiques dans TLS 1.3). Les signatures numériques (RSA, ECDSA, Ed25519) permettent à quiconque possède la clé publique de vérifier que des données proviennent du détenteur de la clé privée et n’ont pas été modifiées, ce qui apporte l’intégrité, l’authenticité et une base pour la non-répudiation. Les opérations asymétriques sont lentes, si bien que les protocoles réels sont hybrides : TLS utilise la cryptographie asymétrique pour authentifier le serveur et convenir des clés, puis le chiffrement symétrique pour les données.
Un grand ordinateur quantique casserait les algorithmes RSA et à courbes elliptiques actuels, mais pas AES avec des clés suffisamment longues. En août 2024, le NIST a publié ses premières normes post-quantiques : FIPS 203 (ML-KEM, pour l’établissement de clés), FIPS 204 (ML-DSA) et FIPS 205 (SLH-DSA), ces deux dernières pour les signatures. Les données qui doivent rester confidentielles pendant de nombreuses années sont menacées dès aujourd’hui par des attaquants qui enregistrent maintenant le trafic chiffré pour le déchiffrer plus tard ; la réponse architecturale est donc l’agilité cryptographique : tenez un inventaire des endroits où chaque algorithme est utilisé, évitez de les coder en dur, et préférez des bibliothèques, des protocoles et des fournisseurs capables d’en changer, comme les grands navigateurs et les bibliothèques TLS ont commencé à le faire avec l’échange de clés hybride post-quantique.
Hachage, MAC, signatures et chiffrement sont des outils différents
Confondre ces primitives est une source courante de défauts de conception, comme « chiffrer » des mots de passe pour pouvoir les déchiffrer, ou se fier à un simple hachage pour prouver qu’un webhook provient d’un prestataire de paiement. Le tableau les présente côte à côte.
Choisir la bonne primitive
| Outil | Réversible ? | Clé | À utiliser pour | Exemple |
|---|---|---|---|---|
| Encodage (Base64, hexadécimal) | Oui, par n’importe qui | Aucune | Représenter des octets sous forme de texte. N’apporte aucune sécurité. | La charge utile d’un JWT |
| Hachage cryptographique (SHA-256) | Non | Aucune | Empreintes, intégrité des fichiers face à une modification accidentelle, adressage par le contenu. MD5 et SHA-1 sont cassés en matière de résistance aux collisions. | Somme de contrôle d’une version téléchargée |
| Code d’authentification de message (HMAC-SHA-256) | Non | Secret partagé | Prouver qu’un message provient d’une personne qui détient la clé et n’a pas été modifié. | Vérifier le webhook d’un prestataire de paiement |
| Signature numérique (Ed25519, ECDSA) | Non (elle est vérifiée) | La clé privée signe, la clé publique vérifie | Une preuve d’origine que chacun peut vérifier sans pouvoir la forger. | Jetons d’accès JWT, images de conteneur signées |
| Chiffrement (AES-GCM) | Oui, avec la clé | Clé secrète (ou paire de clés, pour les schémas hybrides) | Confidentialité, plus intégrité dans les modes authentifiés. | La pièce d’identité d’un livreur, une fois stockée |
| Hachage de mot de passe (Argon2id) | Non, et volontairement lent | Sel propre à chaque mot de passe, poivre (pepper) facultatif | Stocker les mots de passe de sorte qu’une base de données volée résiste aux tentatives pour les deviner. | Le magasin d’identifiants du fournisseur d’identité |
Stocker les mots de passe
Une fonction de hachage généraliste comme SHA-256 est conçue pour être rapide, ce qui est exactement l’inverse de ce qu’il faut pour les mots de passe : les processeurs graphiques peuvent tester des milliards d’essais par seconde contre une table volée de hachages rapides. Le hachage des mots de passe utilise des fonctions volontairement lentes et, idéalement, gourmandes en mémoire (memory-hard), afin que chaque essai coûte à l’attaquant du temps et de la mémoire bien réels, avec un sel aléatoire unique par mot de passe, pour que des mots de passe identiques produisent des hachages différents et que les tables précalculées soient inutiles.
L’OWASP Password Storage Cheat Sheet donne les recommandations actuelles par ordre de préférence. Argon2id (une variante d’Argon2, lauréat de la Password Hashing Competition de 2015), avec au minimum 19 Mio de mémoire, deux itérations et un degré de parallélisme de un (ou un compromis équivalent, comme 46 Mio avec une itération). scrypt lorsque Argon2id n’est pas disponible, avec un paramètre de coût de 217 (128 Mio), une taille de bloc de 8 et un parallélisme de 1. bcrypt uniquement pour les systèmes hérités, avec un facteur de travail d’au moins 10, en gardant à l’esprit que la plupart des implémentations ignorent les entrées au-delà de 72 octets. Lorsque la conformité FIPS 140 est exigée, PBKDF2 avec HMAC-SHA-256 et 600 000 itérations. Ces valeurs augmentent à mesure que le matériel progresse : consultez donc la version actuelle de la cheat sheet plutôt que de recopier des chiffres dans un document de conception.
Trois points de conception en découlent. Stockez l’algorithme et les paramètres avec chaque hachage (les formats encodés standard le font), pour pouvoir relever les paramètres plus tard : lorsqu’un utilisateur se connecte avec succès, vérifiez le mot de passe par rapport à l’ancien hachage et recalculez immédiatement le hachage avec les nouveaux paramètres. Envisagez un poivre (pepper), un secret ajouté à chaque mot de passe avant le hachage et conservé dans un coffre-fort ou un HSM plutôt que dans la base de données, ce qui met en échec un attaquant qui ne vole que la base de données. Surtout, demandez-vous si vous devez vraiment stocker des mots de passe : déléguer l’authentification à un fournisseur d’identité et proposer des passkeys retire le secret le plus attaqué de la plupart de vos services.
Gestion des clés et chiffrement d’enveloppe
Les clés ont un cycle de vie, décrit dans la NIST SP 800-57 Part 1 : génération (à partir d’une source aléatoire appropriée), stockage, distribution, utilisation, rotation à la fin d’une cryptopériode définie, révocation en cas de compromission, et destruction. Faire tout cela de façon sûre à la main est irréaliste, c’est pourquoi les architectures s’appuient sur un service de gestion de clés (KMS) comme AWS KMS, Azure Key Vault ou Google Cloud KMS, ou sur un système auto-hébergé comme HashiCorp Vault. Un KMS conserve les clés maîtresses dans des modules de sécurité matériels (HSM), des dispositifs résistants aux manipulations validés selon FIPS 140, et effectue des opérations avec ces clés à la demande, sous réserve d’une politique d’accès, de sorte que les applications ne voient jamais les clés maîtresses et que chaque utilisation est journalisée.
Envoyer chaque enregistrement au KMS pour le chiffrer serait lent et coûteux, et les API de KMS limitent la taille des requêtes. Le chiffrement d’enveloppe (envelope encryption) résout ce problème. L’application demande au KMS une nouvelle clé de chiffrement des données (DEK) ; le KMS la renvoie deux fois, en clair et enveloppée (chiffrée) sous une clé de chiffrement de clés (KEK) qui ne quitte jamais le HSM. L’application chiffre les données localement avec la DEK en clair, efface la DEK de sa mémoire et stocke le texte chiffré avec la DEK enveloppée. Pour déchiffrer, elle n’envoie au KMS que la petite DEK enveloppée ; le KMS vérifie la permission de l’appelant, journalise la requête et renvoie la DEK.
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
def encrypt_field(plaintext: bytes, kms, kek_id: str, context: bytes) -> dict:
dek = AESGCM.generate_key(bit_length=256) # fresh data key
nonce = os.urandom(12) # never reuse with this key
ct = AESGCM(dek).encrypt(nonce, plaintext, context) # context binds it to its row
wrapped = kms.encrypt(key_id=kek_id, plaintext=dek) # KEK stays inside the KMS
return {"ct": ct, "nonce": nonce, "wrapped_dek": wrapped, "kek": kek_id}
def decrypt_field(rec: dict, kms, context: bytes) -> bytes:
dek = kms.decrypt(key_id=rec["kek"], ciphertext=rec["wrapped_dek"]) # checked, logged
return AESGCM(dek).decrypt(rec["nonce"], rec["ct"], context)Le chiffrement d’enveloppe présente plusieurs avantages architecturaux. La rotation est peu coûteuse : la rotation d’une KEK crée une nouvelle version de clé pour les nouvelles opérations d’enveloppement, tandis que les anciennes versions restent disponibles pour le déchiffrement ; les DEK existantes peuvent être réenveloppées sans toucher aux données, et un rechiffrement complet n’est nécessaire que si une DEK elle-même a pu être exposée. Le rayon d’impact est limité : avec une DEK par enregistrement, par fichier ou par partition, une DEK divulguée expose peu de choses. La séparation des tâches devient possible : le service des commandes peut utiliser sa KEK pour désenvelopper, mais ni modifier sa politique ni la supprimer, tandis que les administrateurs de la sécurité peuvent gérer les clés mais pas déchiffrer les données. Les hiérarchies de clés épousent l’organisation : une KEK par service et par classe de données, ou par locataire, si bien qu’une grande chaîne de restaurants pourrait même fournir et contrôler sa propre clé. Enfin, détruire une clé est un outil puissant : le crypto-shredding (effacement cryptographique) rend illisible toute copie des données chiffrées sous cette clé, y compris les sauvegardes et les journaux d’événements immuables, ce qui compte pour l’effacement au titre du RGPD et pour les systèmes en event sourcing.
Le prix à payer est une nouvelle dépendance critique. Si le KMS est indisponible, les données chiffrées ne peuvent pas être lues ; si une clé est supprimée par erreur, les données sont perdues pour de bon. Les KMS des fournisseurs de cloud imposent donc un délai d’attente avant suppression, et les architectes devraient traiter la suppression de clés et les modifications de politique de clé comme des opérations privilégiées, journalisées et à deux personnes, mettre brièvement en cache les DEK désenveloppées là où la latence des appels au KMS compte, et inclure le KMS dans les plans de reprise après sinistre.
Gestion des secrets
Un secret est tout identifiant qui donne un accès : mots de passe de bases de données, clés d’API du prestataire de paiement, clés privées, clés de signature, secrets clients OAuth, secrets de webhook. La gestion des secrets part d’une règle : les secrets ne vivent jamais dans le code source, ni dans les images de conteneur, ni dans les fichiers de configuration commités dans des dépôts, car ceux-ci sont copiés, mis en cache, forkés et lus par beaucoup plus de personnes et de systèmes que ne devrait l’être le secret. Une fois dans l’historique d’un dépôt, un secret y reste même après la suppression de la ligne.
Les secrets ont leur place dans un coffre-fort de secrets (HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Secret Manager) qui les stocke chiffrés, ne les remet qu’aux charges de travail authentifiées conformément à une politique, journalise chaque accès et prend en charge la rotation. Mieux encore que de renouveler des secrets de longue durée : ne pas en avoir. Un coffre-fort peut émettre des secrets dynamiques, comme un compte de base de données créé pour une instance de service avec un bail d’une heure, et l’identité de charge de travail permet aux services de s’authentifier auprès des API cloud et entre eux sans aucun secret stocké. Les secrets injectés à l’exécution devraient être lus dans des fichiers ou par l’API du coffre-fort plutôt que dans des variables d’environnement largement visibles, qui ont tendance à finir dans des vidages mémoire après plantage et dans des journaux de débogage.
La prévention exige de l’automatisation, car les gens font des erreurs. Les hooks de pré-commit et les scanners de pipeline (comme gitleaks et detect-secrets) interceptent les secrets avant qu’ils ne soient poussés ; les hébergeurs de dépôts recherchent les formats de secrets connus, et la push protection de GitHub bloque les push qui en contiennent. Les dépôts publics sont scannés par des attaquants dans les minutes qui suivent un push. Les conséquences sont bien documentées : en 2016, des attaquants qui avaient obtenu l’accès à un dépôt GitHub privé utilisé par des ingénieurs d’Uber y ont trouvé une clé d’accès au stockage cloud d’Uber et ont téléchargé les données à caractère personnel d’environ 57 millions de passagers et de chauffeurs.
Liste de contrôle : quand un secret a fuité
Considérez comme compromis tout secret qui a atteint un dépôt, un journal, un ticket ou une messagerie instantanée, que le dépôt soit privé ou non.
- Révoquez ou renouvelez le secret immédiatementFaites-le en premier. Supprimer le commit ou le message ne sert à rien : les clones, les forks, les caches et les scanners l’ont déjà.
- Établissez ce à quoi il donnait accèsListez les systèmes, les données et les permissions que le secret accordait, ainsi que tout autre secret accessible à partir de là.
- Examinez l’utilisation depuis l’expositionConsultez les journaux d’accès du fournisseur et du coffre-fort à la recherche d’utilisations par des identités, depuis des adresses ou à des heures inattendues, depuis la première apparition du secret.
- Contenez et nettoyezRenouvelez les identifiants qui en dépendent, invalidez les sessions et les jetons émis grâce à lui, puis retirez le secret de l’historique et des caches (après la rotation, pas à la place de celle-ci).
- Décidez de la notificationSi des données à caractère personnel ont pu être consultées, lancez l’évaluation de la violation ; au titre du RGPD, le délai de notification à l’autorité de contrôle court à partir du moment où vous en avez pris connaissance.
- Corrigez la causePlacez le secret dans un coffre-fort, remplacez-le par une identité de charge de travail ou un secret dynamique, et activez l’analyse des secrets et la push protection pour que la même erreur soit bloquée la prochaine fois.
La tokenisation et la réduction du périmètre PCI DSS
La tokenisation remplace une valeur sensible par un jeton qui n’a aucun lien mathématique avec elle ; la valeur réelle est conservée dans un coffre-fort séparé et étroitement protégé, et seul ce coffre-fort peut faire la correspondance inverse. Contrairement au chiffrement, un jeton volé ne peut pas être inversé avec une clé, car il n’y a pas de clé, seulement une consultation dans un système que l’attaquant ne contrôle pas.
Son usage le plus important concerne les paiements par carte. La Payment Card Industry Data Security Standard (PCI DSS, actuellement en version 4.0.1, publiée en juin 2024) s’applique à tout composant de système qui stocke, traite ou transmet des données de titulaires de carte, ou qui est connecté à ces composants ou pourrait en affecter la sécurité. Une plateforme qui laisse les numéros de carte transiter par ses serveurs fait entrer dans le périmètre son API gateway, ses services, ses journaux, ses réseaux et ses administrateurs, avec des centaines d’exigences et une évaluation annuelle. Une plateforme qui utilise les champs de paiement hébergés ou la redirection du prestataire de paiement, de sorte que les numéros de carte vont directement de l’appareil du client au prestataire, ne reçoit qu’un jeton et éventuellement les quatre derniers chiffres, et son périmètre PCI DSS se réduit considérablement : un petit commerçant peut avoir droit au questionnaire d’auto-évaluation le plus court, et même les plus grands commerçants, qui ont toujours besoin d’une évaluation annuelle par un évaluateur qualifié, ont beaucoup moins de systèmes à évaluer. C’est la conception retenue dans le modèle de menaces de l’étape de paiement : les données de carte les moins chères à protéger sont celles que vous ne détenez jamais. Chiffrer vous-même les numéros de carte ne permet pas la même réduction, car quiconque peut les déchiffrer reste dans le périmètre.
La même idée fonctionne pour d’autres identifiants sensibles. Un service interne de tokenisation peut remplacer les numéros de sécurité sociale ou de passeport par des jetons dans toute la plateforme, de sorte qu’un seul petit service, fortement protégé, voie jamais les valeurs réelles.
Classification des données
Les décisions de chiffrement, de tokenisation, de journalisation, de conservation et d’accès dépendent toutes de la connaissance du degré de sensibilité de chaque donnée. Un schéma de classification des données définit quelques niveaux assortis de règles de traitement, pour que les équipes ne tranchent pas chaque cas à partir de zéro. Quatre niveaux sont courants ; l’important est que chaque jeu de données du catalogue de données ou du schéma de la plateforme porte un niveau, et que les règles soient appliquées par des modèles et des contrôles plutôt que de mémoire.
Un schéma de classification des données pour la plateforme de livraison de repas
| Niveau | Exemples | Règles de traitement |
|---|---|---|
| Public | Cartes, prix, horaires d’ouverture des restaurants | Protection de l’intégrité uniquement ; mise en cache possible n’importe où. |
| Interne | Chiffres de ventes agrégés, configuration des services sans secrets | Personnel et services uniquement ; jamais dans des journaux publics. |
| Confidentiel | Noms, adresses, numéros de téléphone et historiques de commandes des clients, positions des livreurs | TLS et chiffrement du stockage ; accès selon le moindre privilège ; masquage dans les outils de support ; minimisation dans l’analytique ; durées de conservation limitées. |
| Restreint | Coordonnées bancaires de versement, pièces d’identité des livreurs, secrets, jetons de paiement | Tout ce qui précède, plus un chiffrement au niveau des champs avec une clé dédiée, un accès réservé à des services nommément désignés, et la journalisation de chaque accès. |
Chiffrement au niveau des champs
Le chiffrement au niveau des champs, la couche applicative du premier tableau, chiffre des champs individuels avant leur écriture, généralement avec un chiffrement d’enveloppe et une KEK par classe de données. Sa force est que tout ce qui se trouve en aval de l’application ne détient que du texte chiffré : les administrateurs de bases de données, les répliques en lecture, les sauvegardes et l’entrepôt de données alimenté par capture des données modifiées. Une violation de l’un d’eux n’expose rien de lisible, et l’accès au texte en clair se réduit aux services qui peuvent appeler le KMS avec cette clé, chaque appel étant journalisé.
Ses coûts sont réels. La base de données ne peut plus indexer, rechercher, trier ni faire de jointure sur le champ chiffré. Les recherches d’égalité peuvent être rétablies avec un index aveugle (blind index), une colonne séparée qui contient un hachage à clé (HMAC) de la valeur normalisée, au prix de révéler quelles lignes partagent une même valeur. Le chiffrement déterministe présente la même fuite, tandis que les requêtes par plage nécessitent des schémas spécialisés ou ne devraient tout simplement pas être faites sur de tels champs. Certaines bases de données proposent un chiffrement côté client au niveau des champs ou un chiffrement interrogeable, qui intègrent ces techniques. En raison de ces coûts, le chiffrement au niveau des champs devrait être réservé aux données restreintes, dont les champs sont de toute façon rarement interrogés.
Exemple commenté
Exemple commenté : quoi chiffrer, où, et avec quelles clés
L’architecte de la plateforme de livraison de repas passe en revue les principaux jeux de données au regard du schéma de classification. Chaque service utilise déjà TLS (TLS mutuel en interne) et un stockage chiffré avec une clé KMS par service : la question est donc de savoir ce qui a besoin de plus.
| Numéros de carte | Jamais détenus. Les champs de paiement hébergés les envoient au prestataire de paiement ; Paiements stocke le jeton du prestataire, la marque de la carte et les quatre derniers chiffres. Le périmètre PCI DSS se réduit à l’intégration de l’étape de paiement avec le prestataire. |
|---|---|
| Mots de passe des clients | Non stockés par les services produit. Le fournisseur d’identité propose des passkeys ; les mots de passe restants sont hachés avec Argon2id aux paramètres de l’OWASP, avec un poivre conservé dans un HSM. |
| Adresses et numéros de téléphone (niveau confidentiel) | Chiffrement du stockage avec la KEK de Commandes ; comptes selon le moindre privilège ; masquage dans l’outil de support ; l’entrepôt ne reçoit que les secteurs de code postal, pas les adresses complètes. |
| Coordonnées bancaires de versement des restaurants (niveau restreint) | Chiffrement d’enveloppe au niveau des champs sous une KEK dédiée de Paiements ; seule la tâche de versement peut désenvelopper ; toute modification exige une réauthentification et prévient le propriétaire du restaurant, ce qui protège l’intégrité autant que la confidentialité. |
| Pièces d’identité des livreurs (niveau restreint) | Stockées sous forme d’objets, chacun avec sa propre DEK enveloppée sous une KEK d’intégration des livreurs ; seul le service de vérification peut déchiffrer ; chaque accès est journalisé et revu chaque mois ; suppression à l’issue de la durée de conservation légale. |
| Données à caractère personnel dans les événements et le journal des événements | Les événements transportent des identifiants de clients plutôt que des adresses ; les quelques champs personnels qui doivent circuler sont chiffrés avec une clé par client, de sorte que détruire la clé les efface du journal conservé. |
| Sauvegardes | Chiffrées avec une KEK distincte conservée dans un compte cloud distinct, de sorte que la compromission des identifiants de production n’expose pas les sauvegardes ; les restaurations sont testées chaque trimestre. |
| Secrets des services | Dans le coffre-fort ; les bases de données utilisent des identifiants dynamiques avec des baux d’une heure ; la clé d’API du prestataire de paiement n’est lisible que par l’identité de charge de travail de Paiements. |
Une dizaine de KEK, chacune appartenant à un service et renouvelée automatiquement chaque année, couvrent toute la plateforme ; le levier réside dans les décisions, pas dans le nombre de clés.
Deux décisions suppriment des données au lieu de les protéger (les numéros de carte, et les adresses complètes dans l’analytique), ce qui est toujours l’option la plus solide.
La conception est consignée dans un ADR par jeu de données restreint et, dans la description d’architecture, sous forme de concept de protection des données.
Vérifiez votre compréhension
Contre quels acteurs le chiffrement transparent de la base de données ne protège-t-il pas ?
Contre quiconque peut interroger la base de données au moyen d’un compte valide, y compris l’application, un attaquant qui utilise une injection SQL et les administrateurs de bases de données, car la base de données déchiffre les données pour eux.
Pourquoi la rotation d’une clé de chiffrement de clés est-elle peu coûteuse avec le chiffrement d’enveloppe ?
Seules les petites clés de données enveloppées doivent être réenveloppées sous la nouvelle version de la clé ; les données en masse restent chiffrées sous leurs clés de données inchangées.
Un développeur propose de stocker les mots de passe chiffrés avec AES pour que le personnel du support puisse indiquer aux utilisateurs leur mot de passe. Qu’est-ce qui ne va pas ?
Les mots de passe doivent être stockés avec un hachage de mot de passe à sens unique, lent et salé, pour que personne, ni le personnel ni quiconque vole la clé, ne puisse les retrouver ; la récupération doit réinitialiser, pas révéler.
Pourquoi utiliser les champs hébergés d’un prestataire de paiement réduit-il davantage le périmètre PCI DSS que de chiffrer soi-même les numéros de carte ?
Avec des champs hébergés, les numéros de carte n’atteignent jamais les systèmes de la plateforme, qui sont donc hors du périmètre ; des numéros de carte chiffrés que la plateforme peut déchiffrer maintiennent ses systèmes dans le périmètre.
Sources et lectures complémentaires
Une question sur cette section ? ArchitectBot, l’assistant d’étude IA du cours, répond d’abord à partir du cours.
Demander : « Quels champs de la base de données de mon application méritent un chiffrement au niveau des champs, et comment dois-je organiser les clés ? »