PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Clientbasierte Datenverschlüsselung



Iluminat23
05.02.12, 13:45
Hallo,

für Paranoide Menschen wird das Leben in Zeiten der "Cloud" immer schwerer. Will man nicht zum Einsiedler werden und auch an der Mobilen Welt teilhaben kommt man kaum um google, iCloud und Co. herrum. Nun habe ich mir gedacht, theoretisch müsste es doch auch möglich sein alle Daten Clientseitig zu verschlüsseln, so das "die Cloud" nur verschlüsselte Daten von mir kennt. Ich könnte nun alle Daten von hand per GPG/PGP verschlüsseln und händisch auf z.B. einem WebDAV-Share ablegen. Dabei müsste ich aber auch immer alle Daten händisch ver/entschlüsseln und ich müsste selbständig die Keys auf den Clients verteilen. Das ist nicht gerade ein benutzerfreundliches Verfahren.

Ich habe mir nun _versucht_ ein Verfahren zu überlegen, welches den Nutzer nicht nötigt einen Key selbständig auf den verschiedenen Clients zu installieren. Bei meinen Überlegungen hatte ich z.B. Adressbucheinträge im Hinterkopf, welche ich auf allen Clients synchronisiert zur Verfügung haben möchte (dieses Verfahren sollte sich aber eigentlich für alle Daten anwenden lassen welche sich in einzelne nicht zu größe Datensätze zerlegen lässt. (Falls es da schon etwas gibt und das jemand kennt, bitte mir sagen. Dann brauche ich meine Grauen zellen nciht mehr selber zu bemühen.)

Ziele:

Benutzer + Passwort basiert
kein händisches übertragen von Schlüsseln
die Daten werden nur auf dem CLient entschlüsselt


Also ein "leerer" Client soll sich mit dem Server durch Angabe von Benutzer und Passwort anmelden und dann auf die Daten zugreifen können. Für den Nutzer soll die Verschlüsselung transparent sein.

Ich habe mal eine Art Sequenzdiagramm erstellt welche meine Idee Veranschaulichen soll (siehe Anhang: client_enc.png).
http://linuxforen.de/forums/attachment.php?attachmentid=20299&d=1328447884
Auf dem Server wird eine Art PublicKey hinterlegt, Beim Anmelden mit dem Benutzernamen (1), Antwortet der Server mit dem PublicKey (2), also er übermittelt den PublicKey (hier einfach nur key genannt) an den Client. Der Client verwendet den PublicKey und das Passwort um ein Verschlüsseltes Passwort zu generieren(3), mit welchem er sich beim Server authentifiziert (4). Der Server kennt nur das verschlüsselte Passwort (enc_pw). Wenn sich der Client erfolgreich Authentifiziert hat, vordert er einen 2. Schlüssel an der auf dem Server hinterlegt ist (5). Der Server übermittelt diesen an den Client (6). Dieser 2. Schlüssel über selbst verschlüsselt (enc_priv_key) und kann nur mit dem Passwort des Useres entschlüsselt werden (7). Nun ist der Client im besitz des private Keys und kann vom Server verschlüsselte Datensätze anfordern (8). Der Server kennt den Inhalt der Datensätze nicht und liefert diese Verschlüsselt an den Client (9). Der Client verendet den entschlüsselten PrivateKey (priv_key) um den Datensatz zu entschlüsseln (10). Nun Kann der Client mit den entschlüsselten Daten arbeiten.

Dieses Verfahren hat einige schwachstellen, welche zum teil lösbar sein sollten.

Das Verfahren ist nur so sicher wie das verwendete Passwort.
Angreifer können Benutzerkonten erfragen in dem sie Random-User verwenden und warten ob ein Key zurück geliefert wird.
Der Hoster kommt an den verschlüsselten PrivateKey und könnte darauf einen Bruteforce-Angriff starten (das Passwort muss entsprechend lang und sicher gewählt werden).


Eventuell gibt es auch schon Verfahren, welche eben dieses Problem lösen, wenn einer von Euch ein solches kennt würde ich mich freuen wenn ich hier einen Tipp bekommen würde. Auch über kommentare zu dem was ich heir ersonnen habe würden mich freuen.
Was aus dem ganzen werden soll/wird ist mir aber selbst noch nciht so ganz klar. Es wäreaber schön, wenn man den Datenkraken dieser Welt ein paar der Persönlichen Daten wieder entreißen könnte ohne Dabei auf jeglichen Komfort verzichten zu müssen.

Gruß
iluminat23

gropiuskalle
05.02.12, 17:21
Eventuell entgehen mir einige Details, aber client-side encryption wird zum Beispiel bei SpiderOak (und bestimmt auch bei ähnlichen Anbietern) genutzt. Dabei wird ein Schlüssel verwendet, der dem Server nicht bekannt ist, d.h. das Prinzip des zero-knowledge wird gewahrt.

Iluminat23
05.02.12, 19:52
Ich habe mich jetzt mal bei SpiderOak auf der webseite umgeschaut. Ich habe noch nicht recht verstanden wie die das machen. Eigentlich müsste doch auf jeden Client der Schlüsselkopiert werden. Oder der schlüssel liegt auf dem server und wird durch benutzername und pw freigeschalten.

Würde mich interesieren wie das bei denen funktioniert, eventuell hat hier jemand erfahrung damit.

Gruß
iluminat23

naraesk
06.02.12, 17:16
https://spideroak.com/engineering_matters#true_privacy

Ich verstehe das so: Du legst ein Passwort fest. Aus diesem generiert die Software einen vollständigen Schlüssel, mit dem verschlüsselt wird. Weder Passwort noch Schlüssel werden an den Server übertragen.
Gibst du auf einem anderen Rechner das gleiche Passwort an, wird der gleiche Schlüssel erzeugt und es kann entschlüsselt werden.

neo2k
07.02.12, 11:08
Ich denke, der aus dem Passwort erzeugte Key wird auch bei SpiderOak auf die Server von SpiderOak kopiert. Der Text von "true_privacy" ist leider etwas seltsam formuliert. Dort steht, dass dein Passwort nicht auf die SpiderOak Server kopiert wird, es steht aber nichts davon, dass nicht der Schlüssel kopiert wird.

1. Wenn der Schlüssel nicht kopiert würde, dann wäre technisch eine Änderung des Passworts (Client-übergreifend) gar nicht möglich.
2. Bei SpiderOak ist es möglich, Daten über das Webinterface wiederherzustellen, somit muss der Schlüssel bei SpiderOak liegen. Wiederherstellung per Webinterface finde ich aber aus Prinzip etwas unsicher.

Bei fast allen Online Backup Anbietern läuft es so, dass bei der Einrichtung ein Schlüssel erzeugt, und dieser dann mit dem Passwort verschlüsselt und dann auf die Server des Anbieters kopiert wird.

Einige Anbieter (Mozy, CrashPlan, ...) haben aber die Möglichkeit einen eigenen Schlüssel für die Online Datensihcerung zu erzeugen. Aber Achtung! Es reicht dann nicht mehr das Passwort für die Entschlüsselung/Wiederherstellung der Daten aus. Man muss dann unbedingt den Key extra und extern nochmal sichern.

Iluminat23
07.02.12, 17:44
wenn das so stimmt was neo2k schreibt, scheint ein system ähnlich zum dem was ich skiziert habe schon im einsatz zu sein. da stellt sich mir nur die frage, warum so etwas nicht zu einem standard wird, so dass man seine daten sicher vor den Blicken der hoster, in "der Cloud" speichern kann?

Ich glaube ich muss mir CalDAV und CardDAV mal genau anschauen und untersuchen ob diese protokolle eine erweiterung zulassen würden um dies zu realisieren.

Gruß
iluminat23

naraesk
07.02.12, 18:25
Ja, scheint so zu sein wie neo2k schreibt:


SpiderOak servers have the user's data and encryption keys, but cannot read the contents of either because the encryption keys themselves are encrypted.
https://spideroak.com/engineering_matters#encryption_specifications

undefined
08.02.12, 06:24
Man verwendet eine einweg Verschlüsselung z.B.: MD5 um den Key zu erstellen. Damit liegt die Verantwortung für die Daten beim Klient. Passwort vergessen: Ist gleich dein Problem = Daten futsch ;)

Die Frage warum man das nicht bei allen Wölkchen Anbietern antrifft ist relativ einfach.

Den Usern ist es egal was mit ihren Daten passiert (Sie haben ja nichts zu verbergen etc.) und alles was es Komplizierter macht wird ihnen zu viel.

Ich kann bei manchen Kunden und solchen Aussagen immer nur fassungslos den Kopf schütteln.

PS: Wenn man ihnen dann einmal mitteilt, daß wenn sie am Internet hängen im Administrations Bereich 100 -300 Hackerversuche pro Tag Normal sind. Ganz große Augen bekommen.

Iluminat23
08.02.12, 13:13
@undefined
ich habe ja grade versucht eine möglichkeit zu ersinnen, welche dem anwender keine zusätzlichen hürden in den weg legt. Mir ist klar, dass eine lösung welche dem Anwender das händische generieren und kopieren abverlangt sich niemals durchsetzen kann.

Gruß
iluminat23