In meiner Datenbank speichere ich Informationen, die über eine PHP-Klasse verschlüsselt und entschlüsselt werden.Speicherort für den privaten Schlüssel für die Verschlüsselung in der PHP-Umgebung
Pro Anwendung verwende ich einen privaten Schlüssel mit einem Benutzerschlüssel, um sicherzustellen, dass die Entschlüsselung nur erfolgreich ist, wenn ein Benutzer versucht, seine eigenen Daten zu entschlüsseln.
Der Benutzerschlüssel wird in der Datenbank gespeichert; aber der private Schlüssel (Anwendungsebene) wird als txt-Datei im FS gespeichert. Natürlich "über" der Web-Wurzel.
Überlegungen: - Wenn die Datenbank gehackt wird: sie enden mit einem Teil des Schlüssels auf und verschlüsselten Daten - Wenn PHP-Stops oder beschädigt sind: sie mit einer einzigen Seite am Ende mit nur include('../private/private.php')
drin.
- Wenn NGINX fehlschlägt: Die Verbindung wird "nur" gelöscht.
Das einzige Szenario, an das ich denken kann, ist die Korruption des Systems selbst. Aber der Server führt eine Firewall aus, wird regelmäßig aktualisiert, führt fail2ban aus und nur die benötigten Dienste werden ausgeführt. SSH Logins nur über Schlüssel-Zugang usw.
Ich fragte mich, ob dies die "beste" Praxis ist. Oder gibt es eine bessere Möglichkeit, diese Art der Verschlüsselung mit den oben genannten Spezifikationen zu tun? Was wären die korrekten Zugriffsrechte auf die Schlüsseldatei?
Im Moment befinden sich die Datenbank und der Webserver beide auf demselben Server mit Blick auf das Internet. Ist es besser, sie zu splitten und einen Internet-Server mit nur dem Webserver zu erstellen? und legen Sie den Datenbankserver und die Schlüsseldatei auf einem anderen Server in einem privaten Netzwerk ab?
edit: der private Schlüssel zur Verschlüsselung der Daten ist durch zwei Komponenten aufbauen:
$key = $app_key . $user_key
Korrekte Zugriffsrechte auf die Schlüsseldatei wären '-r --------' oder '400' und der Webserver-Benutzer als Besitzer. Ansonsten scheint es, dass Sie einen ziemlich guten Job gemacht haben. –
* "Ich benutze einen privaten Schlüssel mit einem Benutzerschlüssel, um sicherzustellen, dass die Entschlüsselung nur erfolgreich ist, wenn ein Benutzer versucht, seine eigenen Daten zu entschlüsseln" * Ich bin mir nicht sicher was meint. Sie behalten beide Schlüssel auf dem Server, damit die Entschlüsselung erfolgreich ist, wann immer Sie wollen. Umgekehrt, wenn der Server besessen wird, sind die Daten auch besessen. – Jon
Es ist ein fähiger Start, es hängt ganz davon ab, welche Ebene von Informationen Sie haben und wie eng Sie mit Sicherheit sein müssen. Für die meisten üblichen Szenarien ist es in Ordnung, wenn Sie eine Überprüfung der Daemons durchführen möchten, die auf dem Betriebssystem ausgeführt werden, um zu überprüfen, ob auf ihnen bekannte Angriffsvektoren wie ssh'd version usw. sind. – Dave