Comment chiffrer un numéro de carte bancaire sans le casser
Prendre un objet banal aide parfois à clarifier une question technique : le numéro imprimé sur une carte de paiement. Ce n’est pas un simple identifiant lisible — il circule, s’affiche sur des interfaces anciennes, sert à valider un paiement et même à être partiellement masqué pour l’utilisateur. Quand on veut le protéger, on se heurte à une contrainte peu glorieuse mais réelle : il faut parfois que le résultat chiffré garde la même forme que l’original. C’est la porte d’entrée vers le chiffrement dit “format-preserving”.
Pourquoi conserver le format ?
Les systèmes informatiques sont pleins de dépendances matérielles et logicielles. Bases de données non modifiables, champs de saisie limitées, contrôles de validité applicatifs (checksum ou longueurs attendues), textes imprimés et systèmes tiers qui ne comprennent que des suites de chiffres ou de lettres — toutes ces raisons poussent à vouloir un chiffrement qui laisse intact le masque syntaxique d’une donnée.
Conserver le format évite des refontes coûteuses : on peut remplacer un identifiant par sa version chiffrée sans changer les tables, les APIs, ni les règles métier qui attendent un type particulier. Mais ce confort a un prix cryptographique : réduire l’espace des sorties augmente potentiellement la vulnérabilité, et les propriétés mathématiques d’un chiffrement standard ne s’appliquent pas sans précautions.
Principe général et techniques courantes
Le défi technique est simple à formuler : trouver une permutation de l’ensemble des valeurs valides (les chaînes de chiffres d’une longueur donnée, par exemple) qui soit déterministe et réversible à l’aide d’une clé secrète. Autrement dit, on veut une bijection dépendant d’une clé, opérant sur un petit alphabet, et compatible avec des formats particuliers.
Deux approches dominent. La première reconduit un chiffrement classique à un alphabet restreint en utilisant des astuces comme le “cycle-walking” : chiffrer la donnée avec un bloc chiffrant général, puis répéter l’opération jusqu’à obtenir une sortie valide pour le format demandé. La deuxième utilise des constructions dédiées, souvent basées sur des réseaux de Feistel adaptée à un alphabet arbitraire. Dans ce dernier cas, la donnée est traitée comme une suite de symboles et la permutation est construite par des rondes successives, chacune mêlant portions de la donnée et des sorties d’un chiffre de base.
Ces constructions intègrent fréquemment un “tweak” — une information additionnelle non secrète qui module la permutation sans changer la clé. Le tweak permet, par exemple, d’avoir la même clé mais des permutations différentes selon l’application (un tweak pour les numéros de carte, un autre pour les numéros de compte), ce qui améliore la séparation de domaines et réduit certains risques d’analyse croisée.
Limites, risques et règles de prudence
Conserver le format implique une réduction de l’entropie disponible : l’ensemble des sorties valides est souvent bien plus petit que l’espace d’un bloc chiffrant classique, et cela facilite les attaques par force brute ou l’analyse statistique. Quelques points de vigilance :
- Espace réduit et fréquence : si certaines valeurs sont naturellement plus fréquentes, leur version chiffrée le sera aussi, exposant à une forme d’analyse fréquentielle. Le chiffrement doit donc éviter de conserver des motifs exploitables.
- Determinisme et réutilisation : un chiffrement déterministe (même avec tweak fixe) génère toujours la même image pour la même entrée. Cela peut être utile pour la recherche mais dangereux pour la confidentialité. L’introduction d’un tweak dynamique ou d’un salage doit être réfléchie par rapport aux besoins fonctionnels.
- Validation externe : de nombreux formats incluent des contrôles (checksum, algorithmes de Luhn, etc.). Une mauvaise implémentation peut casser ces validations ou, au contraire, devoir conserver des contrôles qui servent d’oracle aux attaquants. Il faut clairement décider si le chiffrement respecte ces contrôles ou si l’on renonce à la validation côté client.
- Gestion des clés et séparation de domaines : comme toujours en cryptographie, des clés compromises rendent toute la technique inutile. Les tweaks, s’ils sont mal choisis ou réutilisés, peuvent faciliter des attaques croisant plusieurs jeux de données chiffrés.
- Alternatives : parfois la tokenisation (remplacement par un jeton géré centralement) est plus sûre, car elle dissocie totalement format et valeur. Le choix entre tokenisation et chiffrement format-preserving dépend des exigences opérationnelles, des performances et des risques acceptables.
Ce que cela enseigne sur la cryptographie en production
Le cas du numéro de carte montre une leçon générale : les contraintes du monde réel sculptent les primitives que l’on peut déployer. Un algorithme parfait sur le papier peut devenir insuffisant si son application doit coexister avec des systèmes anciens, des règles métier strictes et des besoins de recherche ou d’affichage.
Trois principes émergent de ce constat :
- Adéquation du modèle de menace : définir précisément ce que l’on protège et contre qui. Un chiffrement format-preserving protège contre l’exposition directe des valeurs, mais il n’est pas une panacée contre des attaquants disposant d’un accès large et d’une capacité d’analyse statistique.
- Séparation et domaine : introduire des tweaks et des domaines pour que la compromission d’un usage n’entraîne pas la compromission d’un autre. La séparation conceptuelle facilite des politiques de rotation et d’audit.
- Transparence des compromis : documenter explicitement les choix (pourquoi on préserve le format, quelles faiblesses acceptées) et prévoir des contre-mesures opérationnelles (limitation des accès, monitoring des usages atypiques, rotation des clés).
Le numéro imprimé sur une carte illustre une problématique concrète, mais la même logique s’applique à d’autres objets contraints : codes postaux, numéros d’identification, formats hérités. Plutôt que de forcer la cryptographie à faire l’acrobate, il est souvent plus sûr d’adapter l’architecture — ou, si l’on choisit le maintien du format, d’appliquer la discipline et les garde-fous qui rendent ces constructions acceptables en production.