Mysql
 sql >> Base de données >  >> RDS >> Mysql

Cryptage des données utilisateur pour une connexion automatique à un système tiers

Vous êtes tombé sur le plus gros problème de chiffrement des données dans la base de données :

➽ Où stocker la clé ?

Le chiffrement ne peut résoudre le problème de la sécurisation des données, il ne peut que les "concentrer" sur une clé. Quel que soit l'endroit où vous stockez la clé, votre application doit être capable de déchiffrer les données, ce que peut faire un attaquant. Je connais deux solutions possibles à ce problème :

  1. Placez la clé dans un endroit aussi sûr que possible. Cela signifie qu'il doit sûrement être placé en dehors du répertoire www-root dans un répertoire inaccessible sur le serveur. Selon l'importance des données, vous pouvez également envisager de sous-traiter le chiffrement à un autre serveur dédié.
  2. Ne stockez aucune clé et dérivez-la du mot de passe de l'utilisateur. C'est le seul moyen vraiment sûr, car même le serveur ne peut pas déchiffrer les données. Les inconvénients sont bien sûr que l'utilisateur doit entrer le mot de passe chaque fois qu'il utilise votre service. Si l'utilisateur modifie le mot de passe, vous devez rechiffrer toutes les données. Si l'utilisateur oublie le mot de passe, les données sont perdues.

PS Je recommanderais de chiffrer les données avant le stocker dans la base de données, car MySQL AES_ENCRYPT utilise le mode ECB sans IV. Cela permet de rechercher une certaine valeur, mais est moins sécurisé (je suis presque sûr que vous ne voulez pas rechercher par mot de passe).