Dann achte darauf, daß Du im ECB (Electronic Code Book) Mode
verschlüsselst.
Was ist das? Mir ist übrigens aufgefallen, dass das vielleicht
sowieso keine gute Idee ist mit dem verschlüsselt abspeichern.
Wenn dann der private key mal verloren geht, sind die Daten
auch hinüber.
Es gibt bei eigentlich jedem Block Cipher verschiedene Operation Modes, in denen man den laufen lassen kann. Diese erhöhen teilweise nochmals die Sicherheit (das ist recht kompliziert, Details stehen in dem mehrfach genannten Buch). Das Prinzip ist, daß eben nicht unbedingt jeder Block mit dem vereinbarten Schlüssel verschlüsselt werden muß, sondern daß die Verschlüsselung eines Blockes von dem vorangegangenen Block abhängt. Das macht aber bei Datenbankanwendungen, bei denen man ja auf jeden Block einzeln, also unabhängig von den anderen, zugreifen können muß, keinen Sinn. Der „ECB Mode“ ist ganz einfache Verschlüsselung, so wie man sie sich zunächst vorstellt.
Gerade bei einer Datenbankanwendung, bei der die Daten ja auch
wieder in die andere Richtung müssen, belastest Du Dich bzw.
den Server da mit _erheblichem_ Rechnaufwand! Ich würde da
dringend zu einem symmetrischen Algorithmus raten, also nicht
public key Kryptographie, sondern shared secret. Bei Bedarf
können wir das Thema gern vertiefen…
Ja hast recht, die asynchrone Verschlüsselung macht nur Sinn
zwischen den Clients und dem Applikations-Server.
Selbst da nicht wirklich… Warum tust Du Dir diesen Aufwand an?
Der Server kann die Datenbank selbst symmetrisch verschlüsseln - kein Thema.
Für den Verkehr zw. Clients und Server scheint mir (je nach Sicherheitsbedarf) Sebastians Vorschlag wirklich der beste zu sein:
Dynamische Sitzungsschlüssel, die mittels RSA o.ä. ausgetauscht werden, und dann symm. Verschlüsselung mit 256bit-AES.
Du bekommst sonst spätestens im internen Netz >= 10MBit/s massive Performance-Probleme. Asymmetrische Verschlüsselung ist _langsam_. Richtig langsam, erst recht, wenn man’s in Software macht. Ich kann Dir jetzt leider keine Zahlen nennen, was für einen Durchsatz bspw. RSA auf einem handelsüblichen PC z.Zt. schafft, aber Du wirst da nicht glücklich mit. Aber Du kannst es ja mal ausprobieren, indem Du mit einer offenen lib mal 1GB Daten verschlüsselt und die Zeit misst.
Zudem sollte er für große Datenmengen geeignet sein
und einigermassen schnell sein (on the fly ein paar Megabyte
unter Umständen verschlüsseln).
Für diesen Zweck ist wirklich ein symmetrischer Algorithmus
besser geeignet. Standard ist hier AES, mit bis zu 256bit
Schlüssellänge.
Das habe ich mir mal angeschaut, sieht vielversprechend aus.
AES ist derzeit state-of-the-art bei den symm. Algorithmen.
However, viel Erfolg & Gruß,
Doc.