Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der beste Weg, sensible Daten in MySQL zu speichern?

Im Ernst, VERWENDEN SIE NICHT MySQLs aes_encrypt() Es ist die unsicherste Methode zur Verwendung einer Blockchiffre. Es verwendet den ECB-Modus, und ich kann an einem einfachen Beispiel demonstrieren, warum dies ein schwerwiegender Fehler ist.

Nur-Text-Nachricht:

Dieselbe Nachricht, verschlüsselt im ECB-Modus (egal, welche Verschlüsselung Sie verwenden):

Die EXAKT gleiche Nachricht im CBC-Modus (auch hier spielt es keine Rolle, welche Verschlüsselung Sie verwenden):

Es gibt noch mehr Gründe aes_encrypt von mysql nicht zu verwenden, vor allem wird jede einzelne Abfrage, die Sie senden, auch den von Ihnen verwendeten aes-Schlüssel enthalten. Wenn die Datenbank kompromittiert ist, aktiviert der Angreifer die Protokollierung und holt sich einfach Ihren AES-Schlüssel und entschlüsselt die gesamte Datenbank .

Also was sollte Sie nutzen? Ich mag diese Klasse vorerst. Es verwendet den CBC-Modus mit einer String2Key-Funktion und einem IV. Sie können den Primärschlüssel als Ihren IV verwenden, jede Nachricht muss einen eindeutigen IV haben. Es ist in Ordnung, wenn der Angreifer die IV kennt und wenn sie sequentiell sind, solange die Implementierung der Blockverschlüsselung sicher ist. Die Wiederverwendung eines IV machte WEP viel weniger sicher .