it-swarm.com.de

Wie sicher sind sha256 + Salt-Hashes für die Passwortspeicherung?

Ich habe kürzlich auf mehreren Websites wie dieser Seite auf crackstation und anderen angefangen, über Passwort-Hashing zu lesen, und nach meinem Verständnis sollte ich die Verwendung von Hashing-Algorithmen wie md5 und sha1 vermeiden, da diese veraltet sind und stattdessen ich sollte sha256 mit salz verwenden. Aber nachdem ich die Seite this im PHP-Handbuch gelesen hatte, bemerkte ich, dass sie von der Verwendung von sogar sha256 abraten und stattdessen die Verwendung der Funktionen password_hash () empfehlen. Ich habe auch festgestellt, dass die meisten dieser Artikel/Seiten im Zeitraum 2011-13 geschrieben wurden, daher bin ich mir nicht sicher, wie sicher das sha256-Hash-Passwort mit Salzen heutzutage ist und ob es noch in Webapps verwendet werden sollte oder nicht.

21
Yuran Pereira

Allzweck-Hashes sind seit über einem Jahrzehnt für Passwörter veraltet. Das Problem ist, dass sie schnell sind und Passwörter eine geringe Entropie haben, was bedeutet, dass Brute-Force mit any Universal-Hash sehr einfach ist. Sie müssen eine absichtlich langsame Funktion wie PBKDF2, bcrypt oder scrypt verwenden. Crackstation erklärt dies tatsächlich, wenn Sie die gesamte Seite lesen. Andererseits sind MD5 und SHA-1 im Zusammenhang mit dem Passwort-Hashing nicht schwächer als SHA-2. Ihre Schwäche ist für Passwörter nicht relevant.

28
cpast

Wie @cpast sagt, besteht das Hauptproblem eines einzelnen SHA-256 darin, dass es viel zu schnell ist. Ein Angreifer mit einer handelsüblichen Gaming-GPU kann Passwörter mit einer Rate versuchen, die in Milliarden pro Sekunde (amerikanische Milliarden) gezählt wird, aber das ist immer noch eine Menge).

Ein weiteres Problem besteht darin, dass die Möglichkeit besteht, Dinge falsch zu kombinieren. SHA-256 ist eine Hash-Funktion: Es nimmt eine Eingabe und erzeugt eine Ausgabe. Wenn Sie SHA-256 mit einem Passwort und einem Salt füttern, definieren Sie wirklich Ihre eigenen kryptografischen Protokolle, basierend auf SHA-256 mit einigen zusätzlichen Dingen , die zusätzlichen Dinge, die sagen, wie das Passwort und das Salz kombiniert werden, um die SHA-256-Eingabe zu machen. Das Entwerfen kryptografischer Protokolle ist bekanntermaßen schwierig, insbesondere weil es keinen zuverlässigen Sicherheitstest gibt. Sie können nicht wissen, ob Sie richtig gemacht haben. (Nun, wenn Ihr Server zu Hosts für eine ganze Gruppe von Hackern geworden ist, die Verbindungen aus einem Dutzend verschiedener Länder herstellen, von denen Sie noch nie gehört haben, dann wissen Sie, dass Sie falsch gemacht haben , aber es ist etwas zu spät ...)

Richtiges Passwort-Hashing hat eine Theorie. Lesen Sie diese Antwort als Grundierung zu diesem Thema.

20
Thomas Pornin

sha256 ist nicht für das Hashing von Passwörtern ausgelegt. Um Hash-Passwörter zu verwenden, sollten Sie lieber Hash-Funktionen verwenden, die für diese Verwendung erstellt wurden. Alle erforderlichen Informationen finden Sie unten in einer anderen Frage zu einer ähnlichen Anfrage: Sicherster Passwort-Hash-Algorithmus? .

In der oben genannten Frage erfahren Sie, warum allgemeine Hash-Funktionen wie sha256 nicht über die richtigen Eigenschaften verfügen, um eine sichere Speicherung von Kennwörtern zu gewährleisten (selbst wenn sie häufig auf sich selbst angewendet werden), und Sie finden auch eine Rangfolge von Die am meisten empfohlenen Hash-Funktionen für die sichere Behandlung von Passwörtern:

  1. scrypt : Das ist noch ziemlich neu (veröffentlicht im Jahr 2012), soll aber eine bessere Sicherheit gewährleisten als sein Vorgänger bcrypt,
  2. bcrypt : Es wurde speziell für die Speicherung von Passwörtern entwickelt und war lange Zeit die empfohlene Wahl.
  3. PBKDF2 : Es ist eigentlich als Schlüssel-Stretching-Funktion konzipiert, dh. Eine sichere Möglichkeit, einen kryptografischen Schlüssel aus einem bestimmten Kennwort abzuleiten. Aufgrund seiner Eigenschaften eignet er sich jedoch auch für die Speicherung von Kennwörtern.

In Ihrer Frage haben Sie die Funktion PHP password_hash () erwähnt. Diese Funktion ist an sich kein Hash-Algorithmus. Tatsächlich wird diese Funktion verwendet, um PHP zu ermöglichen, den vertrauenswürdigsten verfügbaren Passwort-Hash-Algorithmus auszuwählen, ohne Ihren Code ändern zu müssen.

Wie in der Dokumentation angegeben, ist bcrypt gemäß PHP 5.5.0 standardmäßig ausgewählt.

10
WhiteWinterWolf