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
da bin ich anderer Meinung!
Früher dachte man, md5 ist "Die einzig gültige Speicherform". Dann war es ein anderer Algorithmus und dann der nächste. Ich denke, dass ein gut gewähltes Passwort welches selbst nur mit md5 gehasht ist, einigermaßen sicher ist (in Verbindung mit Salts natürlich).
Wenn Jemand wirklich auf einen Account zugreifen möchte und genug Möglichkeiten hat, ist es mMn egal wie man es macht. Das beweisen finde ich jedes Mal die Meldungen, wenn das Pentagon oder andere Regierungsnetzwerke gehackt werden. Ich weiß das ist jetzt ein Apfel-Birnen Vergleich.
Wie viele Millionen werden für die Sicherheit bei solchen Websites oder generell Netzwerken ausgegeben und wie viele "Kluge" Köpfe sind dort nur für die Sicherheit Zuständig und trotzdem passiert es.
Heute betrachtet man vielleicht bcrypt als "einzig gültige Speicherform" aber morgen kann das schon wieder anders sein.
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.
Es geht mir in meinem Fall nicht um ein Backup sondern viel mehr darum, dass man auf die Daten immer zugreifen kann, egal wo man ist.
Die Daten VORHER zu verschlüsseln, ist keine Lösung die ich einen "Laien" "antun" möchte.
Um was es mir auch geht ist folgendes. Wenn man unterwegs ist, hat man nicht immer die Möglichkeit die Daten lokal zu ver- bzw. entschlüsseln.
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?
Einfach aus Sicherheitsgründen!
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. :)
Wenn ein Mensch ohne weitere Maßnahmen seine Haustür aufsperren und jederzeit wieder zusperren kann: Welchen Sinn hat dann das eigentliche Zusperren der Haustür?
MfG
Naps