2011-04-23 4 views
4

J'ai une base de données avec les entreprises et leurs clients. La base de données doit pouvoir répondre à la question «quelles sociétés ont un client vivant à l'adresse X?», Ce qui est normalement très simple à mettre en œuvre, bien sûr. Ce que je veux éviter, c'est qu'un attaquant puisse trouver en quelque sorte toutes les relations entre l'entreprise et le client. Cette base de données sera hébergée sur un serveur web et les requêtes seront limitées pour éviter le téléchargement brutal de toutes les données. Mais que se passe-t-il si le serveur est compromis et qu'un attaquant a accès à toute la base de données et éventuellement à toutes les clés privées stockées sur le serveur? L'attaquant peut trouver la liste des entreprises ou la liste des clients, mais il ne devrait pas être en mesure de savoir quelles entreprises sont liées à quel client et de préférence il ne devrait pas être en mesure de récupérer l'adresse de chaque client.Hachure sécurisée de seulement quelques millions d'articles

Les clients sont identifiés par leur adresse, et non par un identifiant unique. Dans mon pays, il n'y a que 5 millions d'adresses différentes. Je pense à l'utilisation d'un hachage sécurisé pour protéger l'adresse, mais il est très facile de calculer 5 millions de hachages et de construire un mappage de hachage à adresse. Même si le hachis est salé. La seule chose à laquelle je peux penser est la sécurité à travers l'obscurité: je m'assure que la fonction de hachage n'est pas clairement reconnaissable et est en code compilé, et j'espère que l'attaquant n'est pas assez intelligent pour tout comprendre.

Y a-t-il un moyen de le rendre vraiment sûr?

EDIT: les commentaires de a3_nm et Nick Johnson sont corrects bien sûr: si un attaquant a accès à toutes les données, il ne peut pas être sécurisé. Merci d'avoir signalé ce défaut (évident). J'ai donc besoin de quelque chose qui n'est pas stocké dans la base de données. Pour s'assurer que seules les entreprises et les clients peuvent accéder à leurs propres données, je peux les chiffrer avec leur propre mot de passe. Ainsi, la liste des clients d'une entreprise sera chiffrée avec le mot de passe de cette société, qui ne sera jamais stockée sur le serveur et devra être envoyée avec chaque demande. Je pense que je peux supposer que l'attaquant ne peut pas intercepter les demandes qui contiennent les mots de passe.

Ou y a-t-il un autre défaut (évident?) Dans cette ligne de pensée également?

+1

Donc, dans le cas où toutes vos données sont exposées, vous ne voulez pas que l'attaquant puisse accéder à ces informations - mais vous voulez toujours pouvoir vous en servir? J'espère que nous n'avons pas besoin de montrer pourquoi c'est impossible. –

Répondre

3

Je ne suis pas sûr qu'il soit possible de sécuriser cela. Il semble que vous aimeriez qu'un attaquant ayant un accès total au serveur soit incapable d'obtenir des réponses aux requêtes auxquelles le serveur est censé répondre. Si l'attaquant dispose d'un accès au serveur, il peut utiliser le serveur pour répondre à toute requête à laquelle le serveur peut répondre - il n'y a aucun moyen de contourner ce problème.

+0

Je suis d'accord, d'où mon édition de la question. – Peter

1

Vous ne devez pas stocker votre db directement sur le serveur Web. Emballez-le sur un serveur qui n'est pas accessible directement depuis le Web. Cela rendra beaucoup plus difficile pour chaque attaker. Je n'ai pas de solution prête pour vous, mais un meilleur point de départ: les informations de carte de crédit faisant face au même problème. Google pour la modélisation db pour de tels cas et vous trouverez la solution.

+0

Mettre la base de données sur un autre serveur ne la rend pas fondamentalement plus sûre. Au mieux, cela rendra un peu plus difficile pour un attaquant. Au pire, ça n'a pas d'importance du tout. Mais j'apprécie l'indice concernant les informations de carte de crédit, se penchera sur elle. – Peter

Questions connexes