56 votes

Quelqu'un stocke des données de cartes de crédit - comment le fait-il ?

Stocker les informations relatives aux cartes de crédit de manière sûre et légale est très difficile. ne doit pas être tentée . Je n'ai pas l'intention de stocker des données relatives aux cartes de crédit, mais je meurs d'envie de comprendre ce qui suit :

Les informations relatives à ma carte de crédit sont stockées sur un serveur quelque part dans le monde. Ces données ne sont (espérons-le) pas stockées sur le serveur d'un commerçant, mais à un moment donné, elles doivent être stockées pour vérifier et débiter le compte identifié par les données soumises par le commerçant.

Ma question est la suivante : si vous étiez chargé de stocker des données relatives à des cartes de crédit, quelle stratégie de cryptage utiliseriez-vous pour sécuriser les données sur le disque ? D'après ce que je peux dire, les informations relatives aux cartes de crédit soumises sont vérifiées plus ou moins en temps réel. Je doute qu'une clé de cryptage utilisée pour sécuriser les données soit saisie manuellement, de sorte que le décryptage est effectué à la volée, ce qui implique que les clés elles-mêmes sont stockées sur le disque. Comment sécuriseriez-vous vos données et vos clés dans un système automatisé comme celui-ci ?

29voto

Daniel Newby Points 1485

Si je stockais le numéro, je serais un gigantesque fournisseur de services disposant d'une énorme base de données. Cette base de données est répartie sur un réseau de stockage hautement redondant composé de plusieurs armoires, situées dans des pièces distinctes ou, idéalement, dans des lieux géographiques distincts, et reliées par un réseau de stockage SAN. Ma plus grande menace d'initié est l'installation physique distribuée, le flux constant de disques usés et plusieurs équipes quotidiennes de techniciens, d'administrateurs et d'ingénieurs. C'est une menace énorme.

Par conséquent, je chiffrerais les données sur un ordinateur physiquement isolé qui se connecte à la mémoire de masse via un réseau. Le logiciel serait aussi simple que possible : cryptage et vérification des numéros. Les interfaces publiques et la logique commerciale sont placées ailleurs. Les accès seraient enregistrés dans un SAN séparé.

Crypter avec quelque chose comme AES. La clé AES brute n'est jamais stockée que dans la mémoire vive. La clé est enveloppée dans un fichier PGP pour chaque administrateur, qui dispose de sa propre phrase de passe pour activer le serveur. Le personnel moins fiable peut recevoir des phrases de passe partielles à utiliser en cas de reprise après sinistre, ou les phrases de passe peuvent être stockées dans un coffre-fort quelque part. Pour le cryptage, choisissez un vecteur d'initialisation (IV) unique pour chaque numéro de carte, cryptez le numéro à l'aide de l'AES en utilisant cet IV, et stockez l'IV et le numéro crypté sur le SAN. Le décryptage ne s'effectue qu'à l'aide d'une interface client privilégiée ; les connexions client normales utilisées pour les achats peuvent être décryptées. jamais obtenir un décryptage.

19voto

jeffamaphone Points 31732

Pour que les vendeurs puissent traiter et stocker vos informations de carte de crédit, ils doivent généralement obtenir la certification PCI. Les exigences doivent être décrites aquí . Certaines exigences sont très simples, d'autres sont vagues et sujettes à interprétation. Il n'est pas agréable de suivre le processus, et le fait qu'une entreprise soit certifiée ne signifie pas que vos données sont en sécurité.

Mais c'est mieux que rien, je suppose.

3voto

Randolpho Points 36512

Il est assez facile de stocker un hachage salé d'un numéro de carte de crédit plutôt que le numéro lui-même pour des recherches sécurisées. Pour 99 % des scénarios existants, cette carte de crédit suffirait pour le stockage - rapide et très sûr.

Si vous avez vraiment besoin réversible pour certains scénarios (facturation continue, par exemple), j'opterais pour une clé symétrique stockée dans un endroit sûr. autres que la base de données. Cela fait un moment que je n'ai pas consulté les spécifications PCI, mais je suis presque certain que c'est conforme aux normes PCI.

Si vous avez besoin de recherches rapides et d'un cryptage réversible, utilisez les deux options : un hachage et un cryptage.

Editer : Ma réponse semble susciter une certaine controverse. Je voudrais attirer l'attention sur l'essai très intéressant suivant d'Integrity.com (PDF) :

Hacher les numéros de cartes de crédit : Pratiques d'application dangereuses

Il détaille de nombreux problèmes liés au stockage d'un hachage de données de cartes de crédit, mais sa conclusion confirme ma suggestion.

Oui, un hachage brut de la carte n'est pas sûr ; c'est pourquoi nous salons nos hachages ! Mais un sel statique n'est pas non plus sûr, ils permettent la création de tables arc-en-ciel pour des sels statiques connus. Il est donc préférable de faire varier nos sels de manière imprévisible. Dans le cas des mots de passe, il suffit d'utiliser un hachage aléatoire distinct pour chaque mot de passe vérifié ; il peut même résider dans la même table/rangée que le mot de passe haché. Dans le cas des cartes de crédit, il doit en être de même : un sel aléatoire pour chaque instance de la carte de crédit en cours de hachage. Si le numéro de la carte de crédit est stocké par transaction, il faut un sel distinct pour chaque transaction.

Cette approche présente des avantages et des inconvénients, mais elle est suffisamment sûre. Les avantages sont l'absence de gestion des clés ; le sel et le hachage sont là et n'ont pas besoin d'être modifiés, tout en permettant des contrôles d'audit du hachage ; par exemple, le hachage de cette carte de crédit correspond-il à ce numéro de carte de crédit connu ?

Les inconvénients se situent au niveau de la recherche ; il n'est pas possible de rechercher efficacement un numéro de carte de crédit particulier dans de nombreuses transactions.

Bien entendu, ce problème se pose de toute façon avec le cryptage externe ; à moins que la base de données ne soit elle-même cryptée (ce que seules certaines bases de données prennent en charge), vous ne pourrez pas effectuer une recherche très efficace. Même dans ce cas, le cryptage au niveau de la base de données ou même de la table réduit considérablement l'efficacité de la recherche.

2voto

Grubsnik Points 407

Les dernières fois que j'ai travaillé avec des paiements par carte de crédit, les informations relatives à la carte de crédit n'étaient jamais stockées sur les serveurs de l'entreprise. Vous laissiez la passerelle de paiement s'en charger. Au final, vous obteniez un identifiant de transaction que vous pouviez utiliser pour vérifier que la carte de crédit était toujours valide et qu'elle disposait du montant d'argent demandé. Ensuite, une fois que vous avez emballé les produits achetés, vous envoyez une commande de capture à la passerelle de paiement.

Cette approche a grandement simplifié le processus d'intégration des paiements par carte de crédit sur un site, puisqu'il suffisait de connaître l'identifiant de transaction d'un client particulier. Bien entendu, cela ne vous permettait pas de recourir à l'"astuce" d'Amazon, qui consiste à conserver les informations relatives à la carte de crédit pour les achats en un seul clic. Si l'identifiant de transaction était compromis, il ne pouvait servir qu'à recouvrer le paiement avant terme ou à annuler la transaction (auquel cas vous vous en rendiez compte lorsque vous vérifiiez que l'autorisation était toujours valable avant l'expédition). La transaction ne pouvait pas être utilisée pour collecter une somme plus importante que celle que le client avait déjà approuvée, et elle ne permettait pas non plus à quelqu'un de collecter des fonds sur un compte différent de celui pour lequel la "boutique" était configurée.

Ce n'est peut-être pas la réponse exacte que vous cherchez, mais cela pourrait peut-être résoudre votre problème global sans avoir à dépenser une fortune en fournisseurs de sécurité.

1voto

bta Points 22525

Dans certains cas, les clés de chiffrement ne sont pas stockées sur un disque mais sur un dispositif matériel. Soit un serveur de cryptage spécial est utilisé pour effectuer le cryptage/décryptage, soit le décryptage est effectué à l'aide d'une clé stockée, par exemple, sur un dongle matériel. De cette manière, un pirate ne peut pas voler les clés de décryptage sans voler le dispositif physique qui les contient (puisque la clé ne quitte jamais le dispositif).

Une autre méthode que j'ai vue consiste à stocker les données cryptées dans une base de données/un centre de données qui n'a pas de connexion directe avec le monde extérieur (on ne peut pas pirater ce à quoi on n'a pas accès). Un serveur d'interface se situe entre la partie "sécurisée" du réseau et la partie "orientée vers l'internet"/"non sécurisée" du réseau en tant que proxy. En forçant le trafic sécurisé à passer par ce point d'étranglement de la sécurité, il est plus difficile pour un intrus d'accéder aux données sécurisées.

Bien entendu, cela ne signifie pas que vos données sont parfaitement sécurisées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X