Meine Herren!
Da nimmt man am besten was existierendes, TripleDES dürfte gerade aktuell sein und sich für jede Sprache als was fertiges finden lassen.
Und wieso symmetrische Verschlüsselung? Die Wahl sollte begründet ausfallen und vorher mit seinen Alternativen diskutiert worden sein.
Ich meinte die Verschlüsselung der Daten in der Datenbank. Asymmetrisch würde bedeuten, es muss irgendwo ein privater Schlüssel sitzen mit dem die Daten entschlüsselt werden.
Bei symmetrischer Verschlüsselung müssen beide Schlüssel geheim gehalten werden. Wenn man den Schlüssel kennt, der zur Verschlüsselung benutzt wurde, dann kann man daraus den nötigen Schlüssel für die Entschlüsselung berechnen. Das grenzt symmetrische Verschlüsselung ja gerade von der asymmetrischen Verschlüsselung ab. Es gibt bei symmetrischer Verschlüsselung folglich keinen Teil den man öffentlich machen könnte. Oder anders formuliert, das gesamte Schlüsselpaar ist als privat einzustufen.
Den auf dem Server zu halten würde die Sache sinnlos machen.
Sehe ich auch so.
Auf den Clients wäre es auch nicht handlebar.
Doch dem Client darf man den Schlüssel anvertrauen. Am besten der Client erzeugt sich sein Schlüsselpaar direkt selbst.
Daher dachte ich daran, ein vom Nutzer eingegebenes Passwort zur Ver/Entschlüsselung zu verwenden.
Ein Passwort ist auch nur ein Schlüssel. Der Unterschied ist rein quantitativ. Unter einem Passwort verstehen wir Schlüssel, die sich menschen einfach merken können, oder die sie in akzeptabler Zeit eingeben können. Die Anschauung eines Schlüssel ist insofern etwas offener und lässt auch sehr viel längere Zeichenketten zu. In der Kryptologie spricht oft einfach von einem Geheimnis.
Dann ist das Passwort nirgends gespeichert, was natürlich bedeutet dass bei Verlust die Daten alle verloren sind. Das ließe sich aber durch ein Backup an einer sicheren Stelle lösen.
Ob ein Nutzer das Passwort oder den Schlüssel in digitaler Form speichert, kann man nicht vorhersehen. Und das ist im Endeffekt auch egal, der Nutzer muss dafür sorgen, dass der Schlüssel (das Geheimnis) geheim! bleibt, darauf kommt es an.
Ein Datenbank-Backup würde dir übrigens bei Verlust des Schlüssels auch nicht helfen, denn das Backup müsste ja ebenfalls entschlüsselt werden können.
Weitere Maßnahmen.
Um das ganze noch etwas sicherer zu halten könnte man zum Beispiel ein Cookie auf dem Rechner oder Smartphone setzen das einen Teil des Passworts enthält. Sofern das möglich ist, wenn nur von vorher bekannten Rechnern auf das System zugegriffen werden soll.
Ich verstehe nicht, wie ein Cookie hier zu mehr Sicherheit beitragen sollte.
Dann kann selbst jemand der das Passwort kennt von einem fremden Rechner aus nicht auf das System zugreifen.
Mit Kenntnis von Cookie und Passwort ginge das wieder. Und das ist ja auch gut. Jemand der den Schlüssel besitzt, der ist zugriffsberechtigt. Wenn der Schlüssel nicht mehr geheim ist, dann muss man andere Maßnahmen treffen. Man zieht in so Fällen denn Häufig eine Zertifizierungsstelle hinzu. Diese Stelle kann Zertifikate ausstellen mit denen man sich digital ausweisen kann. Zertifikate können ungültig gemacht werden, wenn die Integrität des Zertifkat-Trägers nicht mehr gewährleistet ist. Eine Alternative zu einer zentralen Zertifizierungsstelle ist ein Web-Of-Trust. Allgemein spricht man von einer Public-Key-Infrastruktur.
Wenn man es noch etwas sicherer halten will, könnte man das Passwort um einen Zufallswert ergänzen, den man bei der Ausgabe selbstverständlich wieder abziehen muss. Z.B. 3 beliebige Zeichen anhängen. Dann hätten gleiche Passwörter verschiedene verschlüsselte Werte, wer die Datenbank sieht kann dann nicht erkennen dass mehrmals das selbe Passwort verwendet wird.
Redest du von Salting? Das ist ein Verfahren, dass man oft in Verbindung mit Hashing benutzt. Bei der Verschlüsselung kann man dadurch afaik die Sicherheit nicht erhöhen.
“All right, then, I'll go to hell.” – Huck Finn