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!
Das darfst du auch sein. Deshalb bietet diese einfach benutzbare API die Möglichkeit, sowohl programmiererseitig auch andere Algorithmen zu benutzen, als auch alle mit bisher aktiven Algorithmen erzeugten Hashes weiterhin auf die alte Weise zu prüfen, aber parallel auch zu prüfen, ob der gespeicherte Hash nicht doch aktualisiert werden soll, weil mittlerweile eben neue Erkenntnisse hinsichtlich der Sicherheit gewonnen wurden.
Es wäre damit also gar kein Problem, folgendes Szenario zu erfüllen: Ganz früher wurde MD5 eingesetzt, dann SHA1 - beides nicht mehr sicher. Deshalb jetzt BCrypt. Aber die alten Hashes kann man nur erneuern, wenn man das Passwort kennt, und das kriegt man nur beim Login des Users mit. Kann dann aber alle alten Hashes ein letztes Mal checken und danach prüfen, ob ein Upgrade notwendig ist. Falls ja, speichert man den neuen Hash ab.
Ja, uralte Accounts, in die sich niemand mehr einloggt, kriegen auf diese Weise nie einen neuen Hash. Da muss man sich aber sowieso fragen, ob der Account nicht nach einer gewissen Zeit der Inaktivität mal eine Benachrichtigung bekommen sollte.
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).
Nein, ist es nicht. Mit Brute-Force kann man bei gehashten Passworten, auch mit Salt, schon sehr viel machen. Und User sind ja nun wirklich nicht kreativ bei der Erstellung eines komplett zufälligen Passworts.
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.
Sicherheit entsteht, wenn das Knacken des Accounts teurer ist als der potentielle Gewinn, den man daraus ziehen kann. Das ist eine rein wirtschaftliche Betrachtung.
Welchen Gewinn kann man aus dem Knacken des Pentagons ziehen, und welchen aus einem Account bei dir?
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.
Es gibt vielfältige Möglichkeiten, warum Systeme trotz Sicherheitsmaßnahmen geknackt werden. Meistens sind es Lücken in der Software, die bei angeblich sicheren Systemen dann doch zum Verhängnis werden. Eine vernünftige Passwort-Policy und die bestmögliche Speicherung als Hash ist jedenfalls bislang noch nicht für Einbrüche verantwortlich gemacht worden. Und genau darum geht es: Zu verhindern, dass durch offensichtliche Dummheit beim Programmieren ein Einbruch allzu leicht möglich wird.
Wenn du nicht die nach aktueller Erkenntnislage bestmöglichen Algorithmen einsetzen willst, dann fällt das nach meiner Meinung schon unter offensichtliche Dummheit. Es ist ein bewußtes Senken der Systemsicherheit, obwohl es vollkommen unnötig wäre, weil die bestmögliche Sicherheit keinerlei Extra-Aufwand verursacht.
Heute betrachtet man vielleicht bcrypt als "einzig gültige Speicherform" aber morgen kann das schon wieder anders sein.
Wie gesagt: Der Upgrade-Pfad für alle ab heute gehashten bcrypt-Werte existiert ja - und zwar transparent für den User, und mit minimalem Umsetzungsaufwand für dich als Programmierer. Es gibt wirklich keine Ausrede, das Bestverfügbare nicht einzusetzen.
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.
Das kann der User auch ohne Verschlüsselung auf dem Server.
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.
Das geht auch ohne Verschlüsselung auf dem Server.
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!
Einfach Krypto auf ein Problem werfen macht es nicht sicher.
Gegen welches Szenario willst du dich absichern?
Und wie kann der User das nachprüfen?
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?
Der Vergleich hinkt: Bei der Haustür hat der Mensch den Schlüssel in seiner eigenen Gewalt.
Bei deiner Frage geht es aber darum, dass der Mensch eben gerade keinen Schlüssel zur Tür hat, sondern immer von dir die Tür geöffnet bekommt, weil er sich ihr nähert und durchgehen will. Insofern ist das Vorhandensein der Tür irrelevant, er könnte auch ohne dein Dazutun durch einen einfachen Mauerdurchbruch gehen.
- Sven Rautenberg