Skip to main content
BlogSécuritéProtégez les informations de votre carte de crédit pour protéger les portefeuilles de vos clients

Protégez les informations de votre carte de crédit pour protéger les portefeuilles de vos clients

Illustration d'un cadenas devant un réseau de données éclairé avec le texte suivant : "Cadenassez les informations des cartes de crédit pour protéger les portefeuilles de vos clients".

Ce n'est pas tous les jours que l'on peut appliquer les leçons de la cryptanalyse de la Seconde Guerre mondiale à ses propres applications web. Mais aujourd'hui, c'est exactement ce que nous allons faire. En fait, nous allons voir comment même l'un des outils cryptographiques modernes les plus puissants peut être mis en échec par la même méthode qu'Alan Turing a utilisée pour casser la machine Enigma, qui était l'outil cryptographique le plus puissant de son époque, si les personnes chargées de la mise en œuvre commettent les mêmes erreurs que Turing dans la transmission des messages.

Examinons une API que j'ai évaluée récemment, pour voir comment elle a évité le problème qui a aidé les Alliés à battre les puissances de l'Axe pendant la Seconde Guerre mondiale.

Une API pour le commerce électronique : Un pot de miel bien sucré

L'exemple que je vais examiner aujourd'hui est l'API d'une entreprise de commerce électronique qui accepte les paiements. En ce qui concerne les cibles d'attaque, il n'y a pas beaucoup plus précieux pour les acteurs malveillants qu'une API de paiement par carte de crédit. C'est pourquoi cette entreprise a décidé d'exposer au monde une clé publique permettant aux consommateurs de l'API de chiffrer toutes les informations relatives aux cartes de crédit soumises pour le traitement des paiements.

En effet, toutes les données soumises par ce formulaire sont cryptées et ne sont jamais envoyées en texte clair. En effet, il est important de protéger toutes les données contre les attaques, et pas seulement le numéro de carte. La date d'expiration et le CVV font partie de l'ensemble qui rend chaque méthode de paiement unique, c'est pourquoi cette entreprise a crypté toutes ces données. L'entreprise n'enverrait jamais ces données en texte clair.

Voici à quoi ressemble un exemple de requête qui traverse le réseau, en utilisant un proxy Charles pour capturer le trafic en tant qu'homme du milieu :

Dans cet exemple, on remarque que deux valeurs hachées sont transmises : paymentHash et cvvHash. Réfléchissons aux données contenues dans ces deux valeurs.

Pour paymentHash, nous avons le numéro de carte de crédit à 16 chiffres, crypté à l'aide de la clé publique publiée pour l'utilisation de cette API. Il est évident que les valeurs disponibles pour le cryptage varieront considérablement.

Pour cvvHash, nous n'avons pas du tout la même situation ! Les CVV ne comportent que 3 chiffres. Si vous ne cryptez que des combinaisons de trois chiffres, un pirate pourrait constituer un dictionnaire complet de seulement 1 000 valeurs différentes (10 valeurs pour chacun des trois chiffres). Avec ce dictionnaire, il peut trouver le CVV de n'importe quelle carte envoyée par l'intermédiaire de cette API. Heureusement, mon client savait comment éviter les attaques connues en texte clair et avait déjà mis en œuvre un remplissage aléatoire pour éviter la même attaque qui a fait tomber les nazis.

Percer l'énigme

Si la machine Enigma a été si difficile à décrypter, c'est en partie parce que sa structure de cryptage des messages était très complexe et que les paramètres étaient fréquemment modifiés. Cependant, comme la machine était utilisée pour des messages militaires, l'équipe de Turing à Bletchley Park a commencé à chercher du texte qui pouvait être attendu dans de nombreux messages.

Un type de message fréquemment envoyé par l'armée allemande était un rapport météorologique, et ces rapports comprenaient le mot allemand pour "météo" au même endroit dans chaque message, suivi des conditions météorologiques connues. Autre exemple, de nombreux messages se terminaient par "Heil Hitler" et certains opérateurs utilisaient des salutations standard. Ces exemples ont également permis de déterminer une partie du texte en clair et des paramètres pour chaque jour.

C'est ce type de vulnérabilité de chiffrement qui aurait pu se produire si cette société de commerce électronique n'avait pas utilisé un remplissage aléatoire pour le CVV, car le nombre de valeurs possibles est très faible.

Éviter la même erreur

En utilisant un pavé aléatoire, l'entreprise s'est assurée que deux méthodes de paiement avec le même CVV ne révéleraient rien sur ce qui est transmis. Voici quelques exemples où la même valeur "777" peut être cryptée pour obtenir des valeurs différentes à l'aide d'un pavé numérique :

$ echo -n 777 | openssl rsautl -inkey public_key.pem -pubin -pkcs
-encrypt | base64

HxsNoslY+w4PH/WSSq0ObHYwCIgEpaOUn8aTeI1ger+ZKBOban1pWLN6xPJTT2ROCCIycGupdUcuOCjUU/ZyVnZ38AOZQYLkZMnJLmOkWasynjZAQi1iXr5L94HbbE9YCUWclNzEdnpWLqYY1HmaBt90AeXIVi/ff7xSX2fCc0l19UP/jZYHqJrvMdTYexwmYdKoOc+LAZrY0wpC4cpGeUXSmbE6e69uNKs6/FuovOAcv4ElmWkYAyB7Bv3vm2BGjz53sn11/nW2eew+UnDkklEOm3EWr4sU2qSh/WChDbkAfLJGvCTDIzvARi78WKhXcr6qCfF+P2/d0WOXcyieNQ==

$ echo -n 777 | openssl rsautl -inkey public_key.pem -pubin -pkcs
-encrypt | base64

QQpNRWsPxB6hwZ1WSzpN5pujkEebh9nBwiDrframigr7fU6/wqr2405Onok9iQO0hLlN5fcQm4HJMqSH2qjw5Md68vF9JZV2llTA1WT9hBSwRWdPbMDI6JfJbrkN4ZMkYIpFD8T/I1Hi2NbyiLJZxxElIyEPh7KUEzgxgHOdjFzN9ZW3vZuvSPH2es16Jw7g2BcoWoMOfRX1skB9YBLpdODUsTLPilGafmozQrQDBskUwCNPViw1tZs/ZAfUjEsc5MLAOxNSFYybj7tTqF5wtxPNmvFvsTYDCp6FKeiU2HMtFXQ21390fC9pKeJD2c3Tn7p3Z+qPTy5MCq+7aaQpOg==

$ echo -n 777 | openssl rsautl -inkey public_key.pem -pubin -pkcs
-encrypt | base64

oIWBstBP4gwZJyeEsFb0wTUkVArO5XYQCAc8sInIdsuZTMBS1seTYuZL1wKb4+puTNHs8Iq/CDNo/p9iusr/mHRPZboqla3HWg+NLcsjCuMBc/8P7DW9bSEemEOgrSfUmQ8SZ1P0bMvtDNKdb6490oq9M0m2Z1bPbhMWF2wSu72u05v+QhTcaehiMISKzwMdoI3Er7p+izNomFloF7Kuz/z/JAJ1K5YVyHLvWDNX779EeqFbcxo+dBHMvnHlF2hBmB0a3cDaSlw6/+r2h1e0S6s851IEh5JmNElxrYUJfNRY9aDWYRjhrOAKYE/9vDPrkcEdZorK/MW+TfSfNR7JBQ==

Comme vous pouvez le constater, les commandes exécutées ci-dessus sont toutes identiques, mais en raison des normes en place dans le cryptage RSA, les valeurs produites sont toutes complètement différentes.

De bons algorithmes de cryptage ne suffisent pas

Cet exemple devrait vous aider à comprendre qu'il ne suffit pas de mettre en place un bon système de cryptage. Même avec des algorithmes de cryptage très sophistiqués, si la même entrée est utilisée à plusieurs reprises, il est possible que les données que vous essayez de transmettre en toute sécurité soient dévoilées. Il est très important, surtout lorsqu'il s'agit d'informations de paiement, de s'assurer qu'il n'est pas facile de deviner les valeurs envoyées sur le câble.

Le stockage des mots de passe est un autre exemple où le rembourrage est important. Les développeurs savent qu'ils doivent utiliser une bonne fonction de hachage à sens unique pour s'assurer qu'ils ne peuvent pas lire les mots de passe soumis par les utilisateurs. Pour ce faire, les développeurs doivent ajouter une chaîne aléatoire (appelée salt ) à tout mot de passe avant de le hacher.

Conclusion

L'intégration de la sécurité dans vos applications web est une tâche extrêmement importante. En veillant à ce que les données sensibles de vos utilisateurs ne soient pas facilement décryptées, vous renforcez la confiance de vos clients et assurez la longévité de votre entreprise. Après tout, personne ne souhaite que son site fasse l'objet d'une couverture médiatique en raison de la fuite des informations de paiement de ses clients. Si vous êtes en mesure de vous assurer que vous ne cryptez pas les mêmes valeurs à plusieurs reprises, vous éviterez une erreur très élémentaire et assurerez la sécurité des données de vos clients.

Pour en savoir plus sur les meilleures pratiques en matière de sécurité, consultez les guides de sécurité de Linode !

Commentaires

Laissez un commentaire

Votre adresse électronique ne sera pas publiée. Les champs obligatoires sont marqués d'un *.