Passwort Hash und Salzen - ist das eine gute Methode?

7

Ich habe ein wenig recherchiert oder gegoogelt, um verschiedene Methoden für das Password-Hashing und -Salzen zu finden und bin auf diesen interessanten Link gestoßen:

Ссылка

Im Wesentlichen schlägt das nun vor, zwei Benutzerfunktionen zu erstellen, eine für Hashing und eine für die Überprüfung des Hash.

Das Salz ist pseudozufällig, basiert aber tatsächlich auf dem Passwort (erscheint mir als schlecht?).

Die Hash-Funktion pusht auch zufällig das Salz zwischen den Hash-Strings.

Die Hash-Funktion kehrt die Salzberegnung um und die eigentliche Hash-Prüfung findet statt.

Nun, ich bin mir bewusst, dass einzigartige Salze für jedes Passwort Hash = gut, aber auch, dass die Logik, die Passwörter zu hash und die Salz in einer db-Funktion gespeichert möglicherweise = schlecht.

Ich mag die Idee, dass das Salz nicht offensichtlich ist und dass es auch nicht auf einem hoffentlich konsistenten Wert wie Benutzername, Benutzer-ID, Geburtsdatum usw. basieren muss, aber wie gesagt habe ich meine Zweifel die Implementierung.

Was sind also die Meinungen und Ideen der Menschen von "Best-Approach-Lösungen"?

    
BrynJ 12.05.2009, 21:31
quelle

8 Antworten

11

Der Zweck eines Salzes ist es, den Einsatz einer Regenbogen-Tabelle unerschwinglich teuer zu machen, so dass sich Versuch 1 ziemlich gut löst das Problem richtig. Wenn man das Salz auf das Passwort setzt, wird die Variabilität beseitigt, die Rainbow-Tabellen besiegt, und es ist einfach sinnlos, es im Hash-Passwortfeld zu verstecken.

    
Jeffrey Hantin 12.05.2009, 21:41
quelle
14

Das Salz muss nicht sei geheim. Es muss für ein gegebenes Passwort unvorhersehbar sein.

Das Ableiten des Salzes aus dem Passwort verfehlt den Punkt vollständig.

    
erickson 12.05.2009 22:09
quelle
7

Ich habe eine ähnliche Frage früher gestellt. Der Konsens war folgender:

Es ist egal, wie du salzt, solange du:

  1. Salz vor dem Hash-Vorgang
  2. Verwenden Sie eine Zufallszahl, die pro Passwort eindeutig ist
  3. Verwenden Sie ein Salz, das groß genug ist, um Regenbogentische zu verbieten.

Sie können sogar Ihr Salz direkt neben Ihren Hash-Passwörtern lagern und sich ziemlich selbstsicher fühlen.

Ich persönlich finde, GUIDs (im String-Format) funktionieren hervorragend für Salze. Sie nehmen eine Codezeile zum Generieren und sind im String-Format mehr als groß genug, um Rainbow-Tabellen dazu zu bringen, Jahrtausende zu berechnen.

    
Randolpho 12.05.2009 22:16
quelle
4

(Bearbeitete Antwort, weil ich den Artikel anfangs falsch gelesen habe und dachte, er mischte nur das Salz mit einem ungesalzenen Hash)

Seine Techniken scheinen in Ordnung zu sein, sie werden funktionieren, aber sie sind nicht wirklich "besser" als normale Salzmethoden. Es ist nur ein Versuch, Sicherheit durch Dunkelheit zu schaffen, es ist nicht besser, als eine zufällige "Hash-Scrambling" -Methode zu entwickeln und zu hoffen, dass der Angreifer es nicht versteht.

Tatsächlich könnte es für den Angreifer in der Tat sehr einfach sein, diese Funktionen in vielen Fällen herauszufinden. Wenn es sich bei der Site um eine öffentliche Registrierung handelt, kann der Angreifer wiederholt Konten mit bekannten Kennwörtern registrieren und anschließend die bekannten md5-Hashwerte für diese Kennwörter verwenden, um den Algorithmus zur Kennwortverschlüsselung zurückzuentwickeln. Ich könnte das sehr leicht machen und sogar das Ergebnis von "Versuch 4" betrachten.

Wenn Sie Ihre Passwörter wirklich sicher speichern möchten, verlassen Sie MD5 und sogar SHA1 und bewegen Sie sich zu einer gesalzenen, langsameren Hash-Funktion. Dies ist ein großartiger Artikel über das Thema: Genug mit den Rainbow Tables: Was Sie über sichere Passwort-Schemata wissen müssen

    
Chad Birch 12.05.2009 21:36
quelle
3

Es scheint mir, dass ich nur Verschleierung , nicht mehr Sicherheit zu dem (wie Chad Birch wurde darauf hingewiesen missverstandenen ) gesalzenen Hash hinzugefügt habe Methode.

    
Karsten 12.05.2009 21:41
quelle
1

Interessanterweise ist dies nicht nur Verschleierung, nicht mehr Sicherheit , sondern Verschleierung, weniger Sicherheit , weil "Versuch 4" nur so gut ist wie die CRC32-Funktion (CRC32 ist nur das Passwort, nicht Passwort + Salz übergeben) - das ist der Untergang.

Wie in Chads Post, um "Versuch 4" zu knacken, muss man nur CRC32 Lasten von Passwörtern machen und dann die Funktion, die er codiert hat, umkehren, mit einem gesalzenen md5 Hash und dem Salz (was man dann testen würde) für die Gültigkeit). Testen Sie dieses Paar einfach, indem Sie md5 (password + salt) berechnen (wobei password das Passwort ist, das Sie versuchen) und salt ist das Salz, das Sie durch Umkehrung des Algorithmus berechnet haben. Wenn das MD5 gleich den ersten 32 Zeichen des Hashes ist, haben Sie das Passwort geknackt.

"Versuch 4" ist in einigen Punkten schlechter als "Versuch 1", da es nur so gut ist wie die schlechteste Funktion, die in der gesamten Routine aufgerufen wird, in diesem Fall CRC32 (Passwort).

    
Agent Smith 22.05.2009 16:59
quelle
1

Ich kann den Link in der ursprünglichen Frage nicht anzeigen (die Website gibt nur einen Fehler 404 nicht gefunden zurück), aber die in der Frage beschriebene Methode verwendet nicht wirklich einen gesalzenen Hash.

Im Wesentlichen verwendet diese Methode nur einen Nicht-Standard-Hash: Bei einem bestimmten Passwort gibt es einen eindeutigen Wert, der in der Datenbank gespeichert wird. Dies ist alles, was benötigt wird, um einen Rainbow Tables-Angriff zu ermöglichen: Ich kann den Hash-Wert für ein Wörterbuch wahrscheinlicher Passwörter vorberechnen und nach Übereinstimmungen suchen. Jetzt muss ich Rainbow-Tabellen speziell für diese nicht standardmäßige Hash-Funktion vorberechnen.

Bei einer korrekten Implementierung von gesalzenen Hashes wird beim Erstellen des Passord ein zufälliges Salz mit dem Passwort kombiniert und gehashed. Dann wird zufälliges Salz verwendet und der Hash gespeichert. Selbst wenn ich das Passwort kenne, kann ich nicht vorhersagen, was der Hash sein wird, da es für jeden der vielen möglichen Salt-Werte einen anderen Hash geben wird. Nun muss ein Angreifer eine Rainbow-Tabelle für jeden möglichen Salzwert vorberechnen: Dies erfordert einen viel größeren Aufwand.

    
Stephen C. Steel 22.05.2009 18:40
quelle