Moin!
Ich habe eine Website auf der sich verschiedene User einloggen können (Das Passwort ist als Sha-512 Hash in der DB gespeichert).
Die einzige gültige Speicherform für ein Passwort ist bcrypt-gehasht. PHP bietet da zum Glück ab Version 5.5 eine einfache Funktion an, die den ganzen Kram im Hintergrund einfach erledigt, und ab PHP Version 5.3.7 gibt es eine Bibliothek, die diese Funktion re-implementiert.
Siehe https://github.com/ircmaxell/password_compat
Ich möchte nun einen Upload realisieren, wo die einzelnen User Dateien hochladen können die dann verschlüsselt auf dem Server abgespeichert werden.
Was willst du damit erreichen?
Wenn ein User die Datei hochlädt, und durch die Verschlüsselung niemand anderes drankommt, kann er sich den Upload im Prinzip auch sparen. Von Online-Backups hast du auch nicht gesprochen (da wäre so eine Einweg-Speicherung nachvollziehbar). Aber selbst dort würde ich meine Daten VORHER verschlüsseln - ich vertraue dir einfach nicht, dass du dein Versprechen korrekt umsetzt und garantiert nach aktuellen Erkenntnissen sichere Verschlüsselung benutzt.
Ich möchte aber nicht, dass der User jedes Mal wenn er eine Datei ansehen bzw. herunterladen möchte, das Passwort zum Entschlüsseln eingeben muss.
Warum muss der User regelmäßig die Datei im unverschlüsselten Zustand benutzen bzw. erreichen können?
Offenbar ist es gegenüber dem User irrelevant, ob die Datei verschlüsselt ist. Sie verhält sich ihm gegenüber unverschlüsselt. Warum ist Verschlüsselung trotzdem relevant?
Ich habe mir überlegt, dass ich die Datei mit dem User Passwort, mit dem er sich auch auf der Website einloggen kann, verschlüsseln könnte und wenn der User eingeloggt ist, sozusagen im Hintergrund die Dateien entschlüssel, damit der User das gar nicht mitbekommt.
Das Problem ist hier aber, dass ich das Passwort beim Login Vorgang in einer Session abspeichern müsste, da das Passwort in der DB ja nur als Hash abgespeichert ist.
Meine Frage hier wäre, wie sicher ist das?
Sicher gegen was? Ich halte es für unsinnig, die Sicherheits einer gewählten Lösung zu beurteilen, solange nicht klar definiert ist, gegen welches Szenario eine Abschottung durch Extraaufwand erfolgen soll.
Oder denke ich vollkommen falsch, und es gibt eine sicherere/bessere Lösung?
Wenn ein User ohne weitere Maßnahmen eine Datei hochladen und jederzeit wieder herunterladen kann: Welchen Sinn hat dann eine serverseitige Verschlüsselung? Erkläre mir den, und wir können weiterdiskutieren, welche Maßnahmen sinnvoll sind. :)
- Sven Rautenberg