2010-07-06 5 views
3

J'ai une base de données qui contient les détails de l'utilisateur, y compris les données sensibles. Ils ne sont pas aussi sensibles que financiers, mais ils sont néanmoins sensibles. Les mots de passe des comptes sont hachés et salés, mais le reste ne peut être chiffré que s'il n'est pas haché pour permettre l'édition.Cryptage de base de données

Jusqu'où iriez-vous crypter les champs? Voulez-vous aller aussi loin que le cryptage de tout, y compris les champs génériques comme nom d'utilisateur, prénom, nom de famille, ou seulement des champs comme l'adresse et le téléphone. Le prénom est souvent utilisé après la connexion de l'utilisateur.

Est-ce que quelqu'un peut suggérer un algorithme (avec un exemple de code si disponible) pour chiffrer les champs? J'utilise principalement PHP et MySQL.

+2

J'ai ajouté mes pensées au hasard à une question similaire il y a quelques jours: [Stocker des informations personnelles cryptées - bon sens?] (Http://stackoverflow.com/questions/3157465/storing-encrypted-personal-information-common- sense/3157747 # 3157747) – Mike

Répondre

2

Vous souhaitez crypter la base de données tout en continuant à y accéder en utilisant l'application. Cela signifie que l'application doit avoir un moyen de déchiffrer les données. Si l'attaquant a accès à la base de données, il est très probable qu'il accède à l'application et détermine comment décrypter la base de données.

Vous pouvez utiliser le chiffrement de disque transparent. Cependant, cela ne protège que contre l'accès physique au disque. Il n'ajoute pas beaucoup de sécurité si votre serveur est stocké dans un endroit sûr.

4

Je ne chiffrer les champs du tout, car il va être une douleur royale dans l'extrémité arrière :-)

Je place déplacer des données sensibles à une table séparée et utiliser les fonctions de sécurité du SGBD lui-même pour protéger les données tout en permettant l'accès aux données non sensibles. En d'autres termes, ayez deux tables (user et user_sensitive) attachées ensemble avec une colonne userID. Permettez à n'importe qui de parcourir la table user à son coeurs contenu mais l'accès (de n'importe quel type) à user_sensitive est limité aux corps de type admin). Et, si mon SGBD ne fournissait pas de telles fonctionnalités (je ne sais pas si MySQL le fait), je passerais à un SGBD qui l'aurait fait.

Si vous souhaitez qu'un utilisateur ait accès à ses propres données sensibles mais pas à celles des autres utilisateurs, nous avons déjà implémenté un tel schéma dans DB2 en fournissant une procédure stockée. Il a récupéré toutes les lignes désirées mais aussi vérifié pour voir quel utilisateur l'exécutait. Pour les lignes qui ne correspondent pas à cet utilisateur, les informations sensibles ont été masquées. La table sous-jacente était entièrement protégée de tout le monde sauf de la procédure stockée elle-même. Pour que cela fonctionne, vous devez pouvoir exécuter la procédure stockée sous un utilisateur différent de celui qui l'appelle. Que ce soit possible sous MySQL, je n'en ai aucune idée.

+0

Quels SGBD utilisez-vous et quelles sont les fonctions de sécurité intégrées? Je peux vérifier si mysql les a si vous me pointez dans la bonne direction. – cooper

+3

DB2 et pas ce petit jouet DB2/LUW (Linux/Unix/Windows). Je parle du grand-père de DBMS ', DB2/z, la version mainframe :-) – paxdiablo

3

Je voudrais google pour les "bases de données transculentes" - il y a des livres imprimés sur le sujet et quelques ressources en ligne.

Il y a des variations de cette méthode, mais idée de base est de:

  1. chiffrent uniquement les champs sensibles
  2. Crypter avec clé à partir des données que l'utilisateur connaît (comme login/paire mot de passe)

Le mot de passe ne doit pas être clairement enregistré dans un tableau. Les clés doivent être conservées uniquement pour la session.De cette façon l'attaquant n'a pas les moyens de décrypter les informations si la base de données et/ou l'application est compromise (en oubliant pour un moment la possibilité de modifier le code de l'application et de rassembler les clés en silence).