Flask: Upload Verschlüselung

Django, Flask, Bottle, WSGI, CGI…
Antworten
Muhkuh
User
Beiträge: 3
Registriert: Donnerstag 19. September 2019, 18:32

Hallo zusammen,

ich bin noch etwas neu in diesem Themenbereich, mache das ganze nur privat, weil es mich sehr interessiert. Es steckt kein Projekt für eine Firma oder sonstiges dahinter, daher will ich damit auch keine Diskussion über den Sinn oder Unsinn loslösen, wie sicher das ganze am Ende ist.

Ich würde gerne folgendes angehen, weiß aber leider nicht so genau wie, daher hoffe ich hier auf die entsprechenden Doku Links, Lernvideos, oder Beispiele 😊

Registrierte Besucher sollen Dateien (PDF, JPG etc.) hochladen können, die hochgeladenen Dateien sollen aber nur sie selbst sehen. Die X-Mods sollen dann die Dateien für die X-Gruppe einsehen können, die Y-Mods für die Y-Gruppe und so weiter, der Admin soll alles einsehen können.
Das Ganze ist ja mit der Rollenverteilung lösbar, allerdings würde ich es gerne hinbekommen, dass die hochgeladenen Dateien auf dem Server verschlüsselt gespeichert werden, falls es mal jemand auf den Server schafft. Die Dateien sollen dann entsprechend automatisch entschlüsselt werden, sobald ein eingeloggter Benutzer mit der entsprechenden Rolle, diese aufruft.

Einen „Master-Key“ zum Encoden/Decoden in den Code zu schreiben wäre natürlich am Ziel vorbei, mir fällt aber aktuell keine andere Lösung ein…

Daher meine Fragen:
1. Wie kann ich Dateien mit Python Encoden/Decoden (nach dem heutigen Stand der Technik, ich habe über Google nur alte Sachen gefunden und weiß leider nicht wie aktuell diese sind).
2. Wie kann ich das mit dem Key lösen, ohne ihn offensichtlich und leserlich in den Code zu schreiben?
Vielen Dank im Voraus. 😊

Gruß
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Salopp gesagt: geht nicht. Zumindest nicht im Server. Denn wenn die Daten ausgeliefert werden von dem, dann muss der den Schlüssel kennen. Selbst wenn der nur im Speicher ist, kommt der Angreifer da irgendwann ran. Das einzige, das Abhilfe schaffen würde ist asymmetrische Verschlüsselung bei der nur auf dem Client des Benutzers der private Schlüssel bekannt ist. Mit Webbrowser ist da aber AFAIK nix mehr. Es sei denn, man kann das Entschlüsseln auch in JavaScript machen.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: klar gibt es da was in Javascript. Mit nativem `crypto.subtle` sogar performant. Wenn der Server aber kompromittiert ist, liefert der böswilliges Javascript aus, das den Schlüssel verrät. Dagegen kann man sich schützen, indem man die Hashes aller geladenen Dateien prüft, die man vom Betreiber auf mit Wasserzeichen gedruckten Papier persönlich überreicht bekommt.

@Muhkuh: da bei Deinem System sowieso der Admin alle Dateien lesen darf, bin ich ja von der Verschlüsselung nicht sehr überzeugt.
Das was Du da beschreibst, ist ja ein mehrstufiges Schlüsselsystem. Jede Datei hat ihren individuellen Schlüssel. Der wird mit einem Gruppenschlüssel verschlüsselt, den wiederum jedes Gruppenmitglied mit ihrem individuellen Schlüssel verschlüsselt hat. Der individuelle Schlüssel ist normalerweise mit einem Passwort verschlüsselt oder wird direkt daraus generiert.

Aktuell wird glaube ich unter Python cryptography benutzt. Dort wird auch einiges über Kryptographie erklärt.

Für den Browser ist die Dokumentation von mozilla ganz gut: https://developer.mozilla.org/en-US/doc ... btleCrypto
Muhkuh
User
Beiträge: 3
Registriert: Donnerstag 19. September 2019, 18:32

Sirius3 hat geschrieben: Freitag 20. September 2019, 07:13 da bei Deinem System sowieso der Admin alle Dateien lesen darf, bin ich ja von der Verschlüsselung nicht sehr überzeugt.
Wie meinst du das? Im Prinzip überlege ich, wie ich eine "Datensichere" Übergabe gestalten könnte. Als Beispiel kommt mir da eine Elektronische Personalakte in den Sinn, die Filialen sollte alle Daten von den jeweiligen Mitarbeitern einsehen können. Der Bezirksleiter der jeweiligen Filialen und die Personalabteilung für alle. Da es sich hierbei natürlich um sehr sensible Daten dreht, wäre es natürlich ungünstig, wenn man diese Dateien lesbar abspeichern würde. Solche Beispiele kann man für viele Bereiche nennen, in denen man sensible Daten teilen muss, aber eben dennoch sicher sein möchte, dass unbefugte dritte nicht (so leicht) darankommen. Meine Gedanken kreisen nicht um eine Art „Ich als Person XYZ möchte mein Geheimes Tagebuch hochladen, aber es soll niemand anderes lesen können“, das teilen würde dabei im Vordergrund stehen.
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sirius3 punkt war: wenn es einen Admin gibt der alles sehen kann, ist das ein Master-Key. Und damit ein lohnendes und kritisches Angriffsziel. Wenn ich bin irgendjemanden den Schlüssel erbeuten kann (weil ich zb Kontrolle über den Server habe) - dann nehme ich halt den. Was also bringt das ganze?
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Muhkuh: Das was Du mit der Personalakte beschreibst würde man in einer Webanwendung über Zugriffsrechte lösen und nicht mit Verschlüsselung. Bei Deinem Szenario dürfte ein Filialleiter ja zum Beispiel auch nicht die Filiale wechseln, weil man eine Schlüssel in diesem Sinn nicht wie einen physischen Schlüssel wieder abgeben kann. Er hat dann ja beide Schlüssel, den von der alten und den von der neuen Filiale.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Muhkuh
User
Beiträge: 3
Registriert: Donnerstag 19. September 2019, 18:32

@blackjack, ja das meinte ich in meinem ersten Posting mit der Rollenverteilung. 😉

Ich will für mich herausfinden, wie solch sensiblen Daten, sicher(er) auf einem server liegen, auch falls hier mal jemand Zugriff direkt auf den Server bekommt der da eben nicht dran dürfte.

Mir ist schon klar, dass nichts im Internet sicher sein kann, aber man möchte es doch jedem Angreifer so schwer wie möglich machen. Wenn die Datrien jetzt klar im Ordner liegen, ist die Hürde gleich Null. Wenn sie verschlüßelt abgespeichert sind und nur von einem eingelegten Benutzer auf der Website entschlüsselt werden können, wäre das schon wieder ein Schritt mehr den man gehen müsste.

Im Endeffekt soll der Benutzer sich nur mit seinen Daten einloggen. Beim Upload einer Datei, soll es im Hintergrund verschlüßelt werden, ohne das der Benutzer zwingend davon mitbekommen muss. Das selbe beim Aufrufen der Dateien.

Im Prinzip könnte man jetzt einfach den Key lesbar in den Code schreiben und für alle Dateien benutzen. Wäre natürlich auch unsicher.. Gibt es irgendeine Methode den Schlüßel nicht lesbar zu hinterlegen?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

Irgendwie habe ich das Gefühl, dass ich die Frage schon beantwortet habe: man schützt den Schlüssel mit einem Passwort.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@Muhkuh: Hast du dir das PGP-Verfahren schon näher angeschaut und was hältst du davon in Hinblick auf deine Problemstellung?
Antworten