Was wäre ein idealer bcrypt-Arbeitsfaktor für das Passwort-Hashing?
Wenn ich den Faktor 10 verwende, dauert es ungefähr 0,1 Sekunden, um ein Passwort auf meinem Laptop zu hashen. Wenn wir am Ende eine sehr geschäftige Site haben, wird dies zu einer Menge Arbeit, bei der nur die Passwörter der Leute überprüft werden.
Vielleicht wäre es besser, einen Arbeitsfaktor von 7 zu verwenden, um die gesamte Passwort-Hash-Arbeit auf etwa 0,01 Sekunden pro Laptop-Login zu reduzieren?
Wie entscheiden Sie den Kompromiss zwischen Brute-Force-Sicherheit und Betriebskosten?
Antworten:
Denken Sie daran, dass der Wert im Passwort gespeichert ist :
$2a$(2 chars work)$(22 chars salt)(31 chars hash)
. Es ist kein fester Wert.Wenn Sie feststellen, dass die Last zu hoch ist, machen Sie es einfach so, dass Sie beim nächsten Anmelden auf etwas kryptisieren, das schneller berechnet werden kann. Wenn die Last kein Problem darstellt, können Sie im Laufe der Zeit die Stärke ihres Hashs verbessern, wenn sie sich anmelden.
Der Trick besteht darin, dass es zusammen mit Moores Gesetz ungefähr genauso lange dauert wie in der Zukunft. Die Nummer ist log2. Fügen Sie also jedes Mal, wenn sich die Geschwindigkeit von Computern verdoppelt, 1 zur Standardnummer hinzu.
Entscheiden Sie, wie lange es dauern soll, bis das Kennwort eines Benutzers brutal erzwungen wird. Bei einigen gängigen Wörterbuchwörtern beispielsweise hat Ihre Kontoerstellung sie wahrscheinlich bereits gewarnt, dass ihr Kennwort schwach war. Wenn es sich beispielsweise um eines von 1000 gebräuchlichen Wörtern handelt und ein Angreifer 0,1 Sekunden benötigt, um jedes zu testen, kauft er 100 Sekunden (einige Wörter sind häufiger ...). Wenn ein Benutzer "allgemeines Wörterbuchwort" + 2 Zahlen gewählt hat, sind das mehr als zwei Stunden. Wenn Ihre Kennwortdatenbank kompromittiert ist und der Angreifer nur wenige hundert Kennwörter pro Tag erhalten kann, haben Sie die meisten Benutzer Stunden oder Tage gekauft, um ihre Kennwörter sicher zu ändern. Es geht darum, ihnen Zeit zu verschaffen.
http://www.postgresql.org/docs/8.3/static/pgcrypto.html hat einige Zeiten zum Knacken von Passwörtern, die Sie berücksichtigen sollten. Natürlich sind die Passwörter, die sie dort auflisten, zufällige Buchstaben. Wörterbuchwörter ... Praktisch kann man den Kerl mit dem Passwort 12345 nicht retten.
quelle
$2y$08$fJS4yx0i8kiOzIBIamZ51OWTMrzyE/4je34Oxhw.5xxp3Es7Ke32W
. Grund, warum ich versucht habe zu bearbeiten: Es war mir unklar, ob "2 Zeichen funktionieren" eine Ziffer oder ein Hex oder etwas war, das getestet werden musste. Hier ist das Testergebnis für alle anderen, damit Sie es nicht selbst ausprobieren müssen.Kurzfassung
Die Anzahl der Iterationen, für die mindestens 250 ms berechnet werden müssen
Lange Version
Bei der Erstveröffentlichung von BCrypt im Jahr 1999 wurden die Standardkostenfaktoren ihrer Implementierung aufgelistet:
Ein Verschlüsselungspreis von 6 bedeutet 64 Runden (2 6 = 64).
Sie bemerken auch:
Das gibt Ihnen einen Eindruck von den Verzögerungen, die die ursprünglichen Implementierer beim Schreiben in Betracht gezogen haben:
Aber je länger Sie stehen können, desto besser. Jede BCrypt-Implementierung, die ich gesehen habe, wird
10
als Standardkosten verwendet. Und meine Implementierung hat das genutzt. Ich glaube, es ist Zeit für mich, die Standardkosten auf 12 zu erhöhen.Wir haben beschlossen, nicht weniger als 250 ms pro Hash anzuvisieren.
Mein Desktop-PC ist eine Intel Core i7-2700K-CPU mit 3,50 GHz. Ich habe ursprünglich eine BCrypt-Implementierung am 23.01.2014 bewertet:
Zukunftssicherheit
Anstatt eine feste Konstante zu haben, sollte es ein festes Minimum sein .
Anstatt Ihre Passwort-Hash-Funktion zu haben, seien Sie:
es sollte so etwas sein wie:
Und im Idealfall ist dies Teil der BCrypt-Bibliothek aller Benutzer. Anstatt sich darauf zu verlassen, dass Benutzer der Bibliothek die Kosten regelmäßig erhöhen, erhöhen sich die Kosten regelmäßig von selbst.
quelle