Nach dem linkedin-Passwort-Hash-Leck habe ich auf unser Passwort-Hashing geschaut. Wir verwenden Django 1.4, das PBKDF2 verwendet, was großartig ist und eine Verbesserung gegenüber dem vorherigen SHA1 darstellt.
Wie auch immer, ich bin gespannt, wie leicht man das gewaltsam erzwingen kann. Ich schaue uns unsere Regeln für die Komplexität von Passwörtern an und frage mich, wie schnell es dauert, (sagen wir) 8-seitige Ascii-Kleinbuchstaben zu schreiben.
Dieses Handbuch zum Knacken des LinkedIn-Passwort-Hashes hat jemanden, der 430 Millionen sha1-Hashes pro Sekunde auf einer GPU macht. Ссылка Was für Geschwindigkeiten würden Sie für PBKDF2 bekommen?
Hat jemand irgendwelche ungefähren / hinter dem Umschlag / Ballpark Zahlen dafür, wie schnell man PBKDF2 Brute-Force (BRCF2) brute?
Es gibt ein Write-up bei agilenbits vom Februar, die die Serviettenberechnungen macht. Die gekürzte Version:
Als Ballparkfigur sage ich 10.000 PBKDF2-Iterationen Zehn oder hundert Millisekunden, um ein Passwort für eine sehr zu testen High-End-Verbraucher-System. Was wir mit PBKDF2 machen, ist die Reduzierung Dinge von einer Million Tests pro Sekunde bis zu ein paar hundert. Das ist Berücksichtigung spezieller Software, die mehrere nutzt Kerne und mehrere GPUs.
Wenn Sie also Ihren erratasec-Artikel verwenden, der 430 Millionen SHA-1-Hashes pro Sekunde auf einer GPU als Baseline bewertet, zeigt der Artikel agielebits Metriken, die darauf hindeuten, dass PBKDF2 mit 10k-Iterationen das auf etwa 100k Tests pro Sekunde bringen würde.
>Weit entfernt von wissenschaftlichen, aber bringt uns in den Baseballstadion ...
PBKDF2 ist einstellbar. Sie können den Kostenwert immer erhöhen, um die Anzahl möglicher Fehler pro Sekunde für einen Angreifer zu reduzieren. Ich empfehle, zu entscheiden, wie schnell es auf Ihrer Plattform laufen soll, und stellen den Kostenwert entsprechend ein. Wenn Sie zum Beispiel 200 Hashes / Sek. Für einen idealen Kompromiss in Leistung / Sicherheit halten, erhöhen Sie den Kostenwert und testen Sie, wie lange es dauert, ein paar tausend Testpasswörter zu hacken, bis Sie durchschnittlich 200 / Sek. Erreichen.
PBKDF2 verwendet auch ein "Salz", das verhindert, dass Angriffe skaliert werden, indem der Angreifer gezwungen wird, jedes einzelne Konto einzeln anzugreifen. In Kombination mit dem Dehnen (d. H. Verlangsamen des Algorithmus) ist es extrem schwierig, mehr als eine kleine Anzahl von Konten wiederherzustellen. Ein Angreifer kann sich auf ein Konto konzentrieren und auf das Beste hoffen oder eine bestimmte Zeit (eine Stunde, einen Tag) für jedes Konto reservieren und dann zum nächsten wechseln, wenn er nicht erfolgreich ist.
Mit den LinkedIn-Hashes konnten die Leute mehr als eine Million Hashes an einem Tag oder weniger knacken. Mit PBKDF2, das bei ~ 200 Raten / Sekunde läuft, würde es ungefähr 9 Stunden dauern, nur um herauszufinden, welches der 6.5M-Konten "linkedin" als ihr Passwort verwendet hat. Wenn Sie eine Liste von 1.000 gemeinsamen Passwörtern gegen alle diese Hashes ausführen wollten, würde es etwa ein Jahr dauern.
Denken Sie daran, dass bcrypt, scrypt und PBKDF2 / PKCS # 5 / RFC 2898 alle eine unterschiedliche Anzahl von Iterationen unterstützen; nichts ist von Natur aus "schneller" oder "langsamer". Einige nehmen mehr RAM (PBKDF2 tut nicht viel RAM), aber das ist es.
Was PBKDF2-Iterationen betrifft, so kann ein populäres GPU-basiertes Cracking-Programm mit einem ausgerüsteten modernen Desktop + 8 GPUs bei 1 Million pro Sekunde gegen WPA2 umgehen. Da WPA2 im Wesentlichen PBKDF2 (HMAC-SHA1, Passphrase, ssid, 4096, 256) ist, sagt uns das, dass eine Maschine etwas über 4 Milliarden HMAC-SHA1 PBKDF2-Iterationen pro Sekunde testen kann. Zehn solcher Maschinen würden natürlich über 40 Milliarden solcher Iterationen pro Sekunde testen.
OWASP Passwort-Spickzettel ( Ссылка ) empfiehlt 2012 mindestens 64.000 Wiederholungen, verdoppelt sich alle zwei Jahre oder 90.510 Iterationen im Jahr 2013.
Spezialisierte Hardware, wie sie im Bitcoin Mining verwendet wird, kann mehr als 50 Milliarden Hashes pro Sekunde ausführen (Stand Anfang 2013. Es ist ein bewegliches Ziel, da die Hardware schneller wird).
Wenn Sie 1,000 Iterationen von PBKDF2 machen, wird das den Angriff von 50 Milliarden pro Sekunde auf 50 Millionen pro Sekunde reduzieren. 10.000 Iterationen werden 5 Millionen pro Sekunde sein.
Ein typischer Webserver wird jedoch nicht annähernd so schnell sein. Es wird ein viel langsamer für Sie sein. Sie müssen einige Tests auf Ihrem eigenen Produktionsserver durchführen und finden, dass 10.000 Iterationen zu langsam sind.
Es geht also nicht wirklich darum, wie schnell PBKDF2 brutal erzwungen werden kann, es geht darum, dass Ihr Server schnell ein PBKDF2-Passwort verifizieren kann. Sie müssen entscheiden, wie lange Sie denken, dass es dauern sollte (eine halbe Sekunde? Eine Zehntelsekunde? Eine Hundertstelsekunde?) Und dann passen Sie die Anzahl der PBKDF2-Runden entsprechend an.
Beachten Sie auch die Stärke der von Ihren Kunden verwendeten Passwörter. Wenn sie alle ausgezeichnete Passwörter haben, dann spielt es keine Rolle, welches Hash-System Sie verwenden. Wenn sie alle schreckliche Passwörter verwenden, dann ist PBKDF2 nicht gut genug, um sie zu schützen - Sie müssten exotischer werden, wie der Hardware-gesalzene Hash, den Apple im iPhone verwendet, um eine 4-stellige Zahl in etwas zu verwandeln, das mindestens einige hat Sicherheit (im Grunde zwingen sie alle Hashing von einem dedizierten Hardware-Chip, der absichtlich langsam ist. Verschieben Sie die Daten auf andere Hardware und es ist unmöglich zu entschlüsseln).
Angenommen, das Passwort befindet sich nicht in einem Wörterbuch (die meisten Passwörter sind vorhanden), dann wird die Passwortstärke berechnet, indem die Anzahl der möglichen Zeichen im Alphabet mit einem Hashwert für jedes Zeichen multipliziert wird. Wenn also ein Passwort Buchstaben (26 Zeichen) und Ziffern (weitere 10 Zeichen) enthält, dann haben Sie ein 36-stelliges Alphabet, und wenn es 6 Zeichen lang ist, multiplizieren Sie es 6-mal.
Also ein 6-stelliges alphanumerisches Passwort ist 36 * 36 * 36 * 36 * 36 * 36, oder wenn Sie bevorzugen: 36 ^ 6. Das gibt Ihnen ungefähr 2,1 Milliarden mögliche Passwörter ... im Allgemeinen nehmen wir an, dass der Hacker das echte Passwort ungefähr auf halbem Weg findet, nennen Sie es also 1 Milliarde.
Wenn Sie PBKDF2 verwenden und 1.000 Iterationen haben, wird ein Hacker mit spezieller Hardware in etwa 20 Sekunden 1 Milliarde Passwörter erraten. Das ist keine sehr gute Sicherheit.
Sie können die Sicherheit verbessern, indem Sie entweder mehr PBKDF2-Runden (was Ihre Website verlangsamt) oder Ihre Benutzer dazu bringen, bessere Passwörter zu haben. Einfach durch Umschalten auf 7 Ziffern statt 6 oder durch Hinzufügen von Großbuchstaben oder sogar Symbolen erhöhen sie ihre Sicherheit erheblich.
Wolfram Alpha ist nützlich für die Mathematik: ((36 ^ 6) / 50 million) seconds
, wobei 36 die Größe des Alphabets und 6 die Länge des Passworts ist, und 50 Millionen ist die Anzahl der Raten pro Sekunde, die ein Hacker benutzen kann (50 Millionen ist) ein ernsthafter Angreifer, der PBKDF2 mit 1.000 Runden verfolgt).
Wie viele Passwörter gibt es in Ihrer Datenbank? Wenn es 20 Sekunden dauert, um ein individuelles Passwort zu knacken, wird das 30 Tage Mathe oder 30 Jahre dauern? Es hängt davon ab, wie viele Kunden Sie haben.