nuckchorris
Hey Leute.
Ich habe mich bisher kaum mit Verschlüsselungstechniken beschäftigt und suche daher vielleicht auf dem Wege etwas Aufklärung. Aktuell arbeite ich an einer (webbasierten) Software, mit der man Dateien hochladen kann. Diese sollen verschlüsselt werden. Soweit ist das auch kein Problem, hier könnte man ja beispielsweise mit dem Passwort des Nutzers die Daten per AES verschlüsseln/entschlüsseln.
Das Problem ist nun, dass ich verschlüsselte Datensätze freigeben will, sprich: ausgewählte Nutzer sollen diese verschlüsselten Datensätze ebenfalls einsehen und auch ändern können. Wenn ein Datensatz geändert wird, sollen die Änderungen für alle gelten. Und hier weiß ich schon nicht mehr weiter: Ich könnte zwar den Datensatz mit einem zufällig generierten Schlüssel verschlüsseln und den Schlüssel selbst für alle beteiligten Nutzer mit den Passwort eines jeden Users speichern, nur wie kann ich das machen dass der Schlüssel für den Datensatz zu keinem Zeitpunkt unverschlüsselt irgendwo vorliegt?
Zum Verständnis:
- User "Bob" lädt eine Datei hoch, diese wird mit einem zufällig generierten Schlüssel verschlüsselt und der Schlüssel wird wiederum mit Bob's Passwort verschlüsselt und abgespeichert. So kann zumindest Bob mithilfe seines Passworts den Schlüssel für den Datensatz entschlüsseln und den Datensatz sehen.
- Bob möchte den Datensatz nun Alice freigeben. Da es aber relativ unwahrscheinlich ist dass der Bob und Alice gleichzeitig online ist und die Webanwendung Zugriff auf die unverschlüsselten Passwörter beider Nutzer hat, kann der Schlüssel für den Datensatz für Alice nicht verschlüsselt werden, da der Schlüssel ja nur von Bob entschlüsselt werden kann zu dem Zeitpunkt. Sprich: Eigentlich ein Henne-Ei Problem.
Nun ist es so dass ja dieser Hoster "Mega" die Daten auch verschlüsselt, aber gleichzeitig die Möglichkeit anbietet dass man Dateien mit Freunden sharen kann - also müssen die ja irgendwie denen unverschlüsselt zugänglich gemacht werden. Wie machen die das denn?
Kann mir jemand ne Idee geben, wie man die Problemstellung lösen könnte?
Besten Dank!!
Gadileth
Die "Mega"-Frage kann man einfach beantworten. Dort hast du ja zu jeder Datei dort einen Link. Dieser nützt dem, der es herunterladen will aber nicht so viel. Hängt man allerdings den erforderlichen Schlüssel hinten an die URL kann die Datei abgerufen werden.
Kinch
Benutz asymmetrische Kryptographie zur Schlüsselverwaltung: Der Datensatz D wird mit Schlüssel K verschlüsselt. K wird nun mit dem öffentlichen Schlüssel von Bob verschlüsselt. D und verschlüsseltes K landen auf dem Server.
Will Bob den Datensatz für Alice freigeben, nimmt er ihren öffentlichen Schlüssel und verschlüsselt K damit ebenfalls und lädt verschlüsseltes K für Alice hoch. Nun können Bob und Alice jeweils darauf zugreifen.
[gelöscht]
Ich empfehle einfach mal einen Blick auf gpg (
http://www.gnupg.org/) - dort ist das Szenario von Kinch Alltag.
... ich muss allerdings ganz offen zugeben, dass ich am Anfang ein wenig gebraucht habe, um das Konzept zu verstehen ;-)
nuckchorris
Erstmal vielen Dank für die hilfreichen Antworten. Nun kann ich mir zumindest schon mal vorstellen wie ich das realisieren könnte. Ein kleines Henne-Ei-Problem habe ich dabei aber noch: Eigentlich will ich das so handhaben, dass ich als Serverbetreiber keine Chance habe die Daten zu entschlüsseln, sprich ausschließlich Public Keys auf dem Server gespeichert werden. Bei dem Beisiel von Kinch ist es ja so dass der Datensatz D mit Schlüssel K verschlüsselt wird, also muss Schlüssel K auch "gemerkt" werden, um den Datensatz überhaupt wieder entschlüsseln zu können.
Was man nun machen könnte ist, dass ich K mit dem User password von Alice verschlüssele und somit keine unverschlüsselte version von K auf dem Server liegt und nur Alice in der Lage wäre den Datensatz zu entschlüsseln. Wenn Alice jetzt aber den Datensatz Bob freigeben möchte, müsste K entschlüsselt werden und mit dem Passwort von Bob verschlüsselt werden, sodass auch er Zugriff auf den Datensatz bekommt. Da aber zur gleichen Zeit beide Passwörter (von Alice und Bob) nicht vorliegen, geht das aber nicht.
Wie könnte ich es - bzw. ist es überhaupt möglich das irgendwie zu realisieren dass für mich als Serverbetreiber keine Möglichkeit bestünde die Daten zu entschlüsseln, sondern nur für die beteiligten Personen?
fs4000
Nein, du verschlüsselst K mit dem Public Key der jeweiligen Person, dann kann nur diese K mit dem Private Key wieder entschlüsseln. Da Public Keys öffentlich sind, kann jeder auch für andere verschlüsseln.
[gelöscht]
So wie ich das verstehe, möchte Philipp eben, dass das ganze im Browser geschieht. Wenn nun der Private Key auf dem Server gespeichert wird, könnte der Betreiber nun alles entschlüsseln.
Problem ist eben, dass man mit JS oder ähnlichem Zurecht keinen Zugriff auf das Dateisystem hat
fs4000
Dann muss man eben den Private Key mit einem symmetrischen Verfahren und dem Passwort verschlüsseln, bevor er an den Server geschickt wird.
Das Känguru
Ich meine ownCloud kann das.