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

Quelle est la meilleure façon de stocker des données sensibles dans MySQL ?

Sérieusement, N'UTILISEZ PAS aes_encrypt() de MySQL C'est la méthode la moins sécurisée d'utilisation d'un chiffrement par blocs. Il utilise le mode ECB, et je peux donner un exemple simple démontrant pourquoi c'est une grave erreur.

Message en texte brut :

Le même message chiffré avec le mode ECB (peu importe le chiffrement que vous utilisez) :

Le même message EXACT en utilisant le mode CBC (encore une fois, peu importe le chiffrement que vous utilisez):

Il y a encore plus de raisons de ne pas utiliser aes_encrypt de mysql, notamment chaque requête que vous envoyez aura également la clé aes que vous utilisez. Si la base de données est compromise, l'attaquant activera la journalisation et obtiendra simplement votre clé aes et déchiffrera la base de données entière .

Alors que devrait tu utilises? J'aime cette classe pour le moment. Il utilise le mode CBC avec une fonction String2Key et un IV. Vous pouvez utiliser la clé primaire comme IV, chaque message doit avoir un IV unique. Ce n'est pas grave si l'attaquant connaît les IV, et s'ils sont séquentiels, tant que l'implémentation du chiffrement par blocs est sécurisée. La réutilisation d'un IV a rendu WEP beaucoup moins sécurisé .