it-swarm-eu.dev

Wie kann man Passwörter sicher hashen?

Wenn ich Passwörter hashe, bevor ich sie in meiner Datenbank speichere, reicht das aus, um zu verhindern, dass sie von jemandem wiederhergestellt werden?

Ich möchte darauf hinweisen, dass dies nur das Abrufen direkt aus der Datenbank betrifft und keine andere Art von Angriff, wie das Bruteforcen der Anmeldeseite der Anwendung, Keylogger auf dem Client und natürlich Gummischlauch-Kryptoanalyse (oder heutzutage sollten wir es " Chocolate Cryptanalysis " nennen).

Natürlich wird jede Form von Hash diese Angriffe nicht verhindern.

850
AviD

bcrypt soll auf GPUs langsamer sein, was das Brute-Forcing langsamer macht. Bei sich ständig weiterentwickelnder Computerhardware sollten wir uns jedoch nicht nur auf die Schwierigkeit verlassen, einen bestimmten Hashing-Algorithmus auf einer bestimmten Hardware zu implementieren.

Vielmehr können Sie die Kosten für das Bruteforcing eines Hashs willkürlich erhöhen, indem Sie den "variablen Arbeits-/Kostenfaktor" (manchmal auch als "Runden" bezeichnet) verwenden, den einige Hash-Funktionen unterstützen. Unter ihnen sind bcrypt und SHA-512.

Die Funktion crypt() von Glibc ermöglicht die Angabe von Runden für einige Hash-Algorithmen. Zum Beispiel ein Kostenfaktor von 100000 für SHA-512 macht die Erzeugung (und damit das brutale Erzwingen) des Hash etwa viermal langsamer als der Kostenfaktor 08 für bcrypt. Dies kann mit einem Hash-Lösungsprogramm wie Hashcat bestätigt werden.

Wenn Sie davon ausgehen, dass Ihre Passwort-Hashes und -Salze irgendwann gestohlen werden und die Angreifer ASIC Hardware, um sie zu erzwingen) verwenden, erhöhen Sie einfach den Arbeitsfaktor, um sie dennoch zu teuer zu machen. ohne die CPU Ihres Servers mit normaler Benutzerauthentifizierung zu überlasten.

Die Wichtigkeit langer und zufälliger Passwörter gilt dennoch.

Ich habe gerade ein Blogpost über die Details geschrieben.

0
Michael Franzl