Sie sind über das größte Problem beim Verschlüsseln von Daten in der Datenbank gestolpert:
➽ Wo soll der Schlüssel gespeichert werden?
Verschlüsselung kann das Problem der Datensicherung nicht lösen, sie kann sie nur auf einen Schlüssel „konzentrieren“. Wo auch immer Sie den Schlüssel speichern, Ihre Anwendung muss in der Lage sein, die Daten zu entschlüsseln, also kann es ein Angreifer tun. Es gibt zwei mögliche Lösungen für dieses Problem, die ich kenne:
- Legen Sie den Schlüssel an einem möglichst sicheren Ort ab. Das heißt, es sollte auf jeden Fall außerhalb des www-root-Verzeichnisses in einem nicht zugänglichen Verzeichnis auf dem Server abgelegt werden. Je nach Wichtigkeit der Daten können Sie auch erwägen, die Verschlüsselung auf einen anderen dedizierten Server auszulagern.
- Speichern Sie überhaupt keinen Schlüssel und leiten Sie ihn vom Benutzerpasswort ab. Das ist der einzig wirklich sichere Weg, denn dann kann nicht einmal der Server die Daten entschlüsseln. Die Nachteile sind natürlich, dass der Benutzer das Passwort jedes Mal eingeben muss, wenn er Ihren Dienst nutzt. Wenn der Benutzer das Passwort ändert, müssen Sie alle Daten neu verschlüsseln. Wenn der Benutzer das Passwort vergisst, sind die Daten verloren.
P.S. Ich würde empfehlen, die Daten vorher zu verschlüsseln Speichern in der Datenbank, da MySQL AES_ENCRYPT den ECB-Modus ohne IV verwendet. Dies ermöglicht die Suche nach einem bestimmten Wert, ist aber weniger sicher (ich bin mir ziemlich sicher, dass Sie nicht nach dem Passwort suchen möchten).