Felix Riesterer: daten browserseitig verschlüsseln

Beitrag lesen

Lieber Fritz the Whop,

ich habe keine Ahnung. Aber Ideen hätte ich.

Wenn die Daten nur auf dem Client in entschlüsselter Form vorliegen dürfen, dann muss der Client das komplette Handling selbst leisten. Die serverseitige Speicherung in der Datenbank ist dann nur noch das, eine Speicherung. Wird der Client gestartet, muss er wohl oder übel die Daten von der DB komplett beziehen, um sie dann lokal zu entschlüsseln und für die üblichen Mechanismen wie Suche, Bearbeiten und Neuanlegen zur Verfügung zu haben. Am Ende wird alles wieder in Gänze in der DB gespeichert.

  • ist das mit Webtechnologie so überhaupt machbar?

Ja. Wenn der Client so geschrieben ist, dass man sich mit Benutzernamen und Passwort anmelden muss, dann kann man aus dieser Kombination eine Passphrase erzeugen, die als Schlüssel für die Daten in der DB benutzt wird. Es gibt in JavaScript geschriebene Crypto-Bibliotheken (wie z.B. CryptoJS), mit denen das Ent- und Verschlüsseln durchgeführt werden kann.

Wie funktioniert zum Beispiel eine Patientensuche nach Namen? Meine serverseitige Anwendung kennt ja nur die verschlüsselten Daten. Große Teile der Logik müssen wohl daher lokal implementiert werden (Alle Patienten initial runterladen, entschlüsseln, dann lokale Suche und so weiter).

Das sehe ich auch so. Alles nur noch lokal implementierbar.

  • die Datenbankstruktur muss völlig anders aussehen, als in gewöhnlichen Fällen. Zum Beispiel ist der Patienten-Name üblicherweise ein VARCHAR 40, muss aber in der DB ein BLOB sein. Ist das bei medizinischen Daten tatsächlich so üblich?

Wie gesagt, ich habe keine Ahnung. Ob Du die Daten überhaupt in Tabellen organisieren solltest, oder ob Du nicht lieber einen JSON-String mit der DB-Struktur des Clients in einem einzigen riesigen BLOB speicherst, kann ich nicht beurteilen.

  • wie würde der Prozess aussehen? Alle get- bzw. post-Daten müssen vor dem Absenden verschlüsselt werden. Das Password darf sich folglich nur auf dem Client-Rechner befinden. Local Storage? Oder eine selbstgestrickte Java/C#/C++-Anwendung, über der der ganze Transport läuft und dort ver- und entschlüsselt wird?

So wie ich das im Moment sehe, gibt es nur einen GET-Request beim Laden direkt nach der Anmeldung und diversen POST-Requests wann immer Daten gespeichert werden, weil Änderungen gemacht wurden.

Wenn das Verschlüsseln der gesamten Daten etwas dauert, darf es ja nicht die Bedienbarkeit vorübergehend blockieren, muss also irgendwie asynchron geschehen - vielleicht in einer Art setTimeout()-gesteuerten Weise?

  • der Transport der Daten soll überdies über einen vpn-tunnel laufen. Ok, das ist jetzt nicht so das große Problem, denke ich.

OK... Intranet?

Ich bin jetzt an dem Punkt, wo ich sage, ich programmiere das als lokale Anwendung klassisch in C++ oder Java, allerdings ist das nicht gewünscht.

Warum nicht? Und was spricht gegen eine Anwendung im Browser, die rein auf JavaScript basiert? Das ganze steht dann in einer einzigen HTML-Datei, die im Browser läuft. Klingt doch gut!

Liebe Grüße,

Felix Riesterer.