Soweit ich weiß, ist eines der wichtigsten Features der neuen PHP-Passwort-Hash-Erweiterung (oder bcrypt im Allgemeinen) ist die Geschwindigkeit des Algorithmus , was die Brute-Force-Angriffsmethode stark verlangsamt.
Aber es läuft immer noch mit einiger Geschwindigkeit, sicher genug für den Wörterbuchangriff und um Brute-Force-schwache Passwörter, [angeblich] kürzer als sechs alphanumerische Zeichen.
Ich möchte also wissen, wie langsam es ist und vor allem - welche Passwortstärke als sicher gilt. "So stark du dir vorstellen kannst" ist keine Antwort, da die Passwortstärke immer ein Kompromiss zwischen Sicherheit und Benutzerfreundlichkeit ist - also suche ich nach der minimalen Stärke, die als sicher und sogar als zukunftssicher angesehen werden kann.
Bitte beachten Sie, dass ich ein Mann der Praxis bin - also, eine bestimmte Antwort basierend auf konkreten Zahlen ist viel vorzuziehen als lange und windige theoretische Argumentation mit ungewissem Schluss.
Um ein bisschen mehr zu verdeutlichen, das schlimmste Szenario: Benutzerdatenbank gestohlen, und jemand würde versuchen, Passwörter zu entschlüsseln. Rainbow Tische sind dank starkem Salz keine Option. Die einzigen übriggebliebenen Vektoren sind Wörterbuchangriff und Brute-Force. Vorausgesetzt, wir stellen den Benutzern vorgenerierte Kennwörter zur Verfügung, wodurch Wörterbuchangriffe vermieden werden. Deshalb ist die Passwortstärke meine einzige Sorge.
Aktualisierung:
Es scheint, ich wurde nicht gut verstanden. Die Frage ist für mich ziemlich praktisch und ziemlich beantwortbar . Und von großer Wichtigkeit .
Ohne genügend Passwortstärke zu bestimmen, kann die Verwendung dieses neuen Algorithmus in Frage gestellt werden. Warum sollten Sie sich mit einem guten Algorithmus beschäftigen, wenn Passwörter noch unsicher sind? Daher bin ich fest davon überzeugt, dass es - zusammen mit der Empfehlung, einen neuen Hashalgorithmus zu verwenden - immer eine Empfehlung für die minimale Passwortstärke geben sollte. Was ich wissen will.
Mit anderen Worten, wenn eine bestimmte Gewissheit über einen Teilalgorithmus besteht ("benutze diesen, nicht anderen!") - sollte es offenbar Gewissheit über einen anderen Teil geben - Passwortstärke, die mit derselben Autoritätsebene gesprochen werden kann . Andernfalls wird der schwächste Teil den stärksten verderben.
Ich bin mir nicht sicher, ob ich Ihre Frage klar verstehe, aber ich konzentriere mich nur auf die Passwortstärke und darauf, wie sie sich auf Brute-Force-Angriffe auswirkt.
Aber es läuft immer noch mit einiger Geschwindigkeit, sicher genug für den Wörterbuchangriff und um Brute-Force-schwache Passwörter, [angeblich] kürzer als sechs alphanumerische Zeichen.
Einführung
Vergessen Sie einen Moment den Hash-Algorithmus (md5, sha, pbkdf2, bcrypt, scrypt, usw.) und konzentrieren Sie sich auf Passwortstärke zuerst
Passwortstärke Wiki
Dies ist ein Maß für die Effektivität eines Passworts bei der Abwehr von Ratespielen und Brute-Force-Angriffen. In seiner üblichen Form schätzt er, wie viele Versuche ein Angreifer, der keinen direkten Zugriff auf das Passwort hat, im Durchschnitt richtig erraten müsste.
Es kann einfach wie folgt berechnet werden:
Die Entropie wird durch H=Llog2N
angegeben, wobei L
die Länge des Passworts und N
die Größe des Alphabets angibt und normalerweise in Bits gemessen wird.
Hash-Funktion
password_hash
verwendet standardmäßig [bcrypt][4]
und ist ausreichend für ein Passwort, aber es gibt bessere Alternativen wie PBKDF2 oder scrypt für weitere Informationen zu dem, was ich meine, siehe So speichern Sie sicher ein Passwort
Wenn Sie oclHashcat verwenden, schätzen Sie Folgendes:
%Vor%Bitte beachten Sie, dass es sich um eine Schätzung handelt, die je nach Hardwarekapazität variieren kann.
Mit diesen Informationen können wir sicher berechnen, wie lange es dauern würde, um ein anderes Passwort zu verwenden.
Berechne die Entropie in PHP
%Vor%Ausgabe
%Vor%Ausgabe mit csv2table konvertiert
CUDA / OpenCL-Implementierungen von Passwort-Crackern können die enorme Menge an Parallelität nutzen, die in GPUs verfügbar ist, und erreichen Milliarden von Passwörtern pro Sekunde .
Ermöglicht die Schätzung Mit können wir 921600M c/s
parallel auf einem sehr schnellen System ausführen
Verwenden von
%Vor%Ausgabe
%Vor%Wie Sie sehen können, dauert es noch eine Weile, bis eine ordentliche 12-stellige Zahl gebrochen ist.
Funktion verwendet
%Vor%Missverständnis
Sie haben Recht Passwort Länge ist wichtig, wie die Entropie des Passwortes. Die meisten Empfehlungen empfehlen Benutzern, bcrypt , die Passwortkomplexität usw. zu verwenden, ohne die Passwortstärke zu verstehen
Aber Tatsache ist, dass die einfachsten Passwörter oft die stärksten sein können.
Ich möchte also wissen, wie langsam es ist und vor allem - welche Passwortstärke als sicher gilt.
Definitiv nicht 6 letters
:)
Fazit
Hier sind ein paar gute Referenzen, auf die Sie vielleicht schauen sollten
Es ist eine interessante Frage, obwohl es sehr unwahrscheinlich ist, dass jemand eine endgültige Antwort geben kann.
Wie Sie wissen, haben BCrypt (und andere Schlüsselableitungsfunktionen) einen Kostenfaktor. Normalerweise stimmen Sie diesen Kostenfaktor ab, bis Ihr Server eine bestimmte Zeit für das Hashing eines Passworts braucht, zum Beispiel 1 Millisekunde. Ein Angreifer mit der gleichen Hardware könnte daher 1'000 Hashes / s berechnen.
Wenn Sie die Geschwindigkeit von oclHashcat (GPU) mit seiner CPU-Version vergleichen, sehen Sie einen Faktor 100 für MD5, also wir kann erraten, dass ein Angreifer etwa 1'000'000 Hashes bruteforce (BCrypt ist nicht GPU freundlich, aber auf der sicheren Seite ...). Das kommt von den 8'000'000'000 MD5 Hashes und hängt vom Kostenfaktor ab.
Das zweite Problem ist die Stärke des Passworts. Wenn es Teil eines allgemeinen Wörterbuchs ist, kann es schnell gefunden werden, selbst wenn es lang ist, so dass eine minimale Länge keine Garantie für ein starkes Passwort ist. Wenn es "zufällig" genug ist, ist der einzige Weg, es zu knacken, Brute-Forcing (der beste Fall für uns). Für diesen Fall können wir etwas Mathe ausprobieren:
%Vor%Natürlich basiert dies auf einer Menge Annahmen, vielleicht kann der Angreifer viel schneller Brute-Force, oder das Passwort ist nicht so stark. Ich selbst fordere mindestens 8 Zeichen, aber ich empfehle, eine Passphrase zu verwenden.
BEARBEITEN: Noch eine Anmerkung zur Passwortstärke:
Die Stärke eines Passwortes kann nicht realistisch berechnet werden, sicherlich nicht durch eine Formel. Jedes ernstzunehmende Passwort-Cracker-Tool unterstützt hybride Angriffe und regelbasierte Angriffe . Passwörter, die stark aussehen, können sehr schwach sein, wenn sie Teil eines Wörterbuchs sind oder von einer Regel bewältigt werden. Es hängt also von der Vorstellungskraft des Angreifers ab, wie schnell ein Passwort geknackt werden kann.
Das Einzige, was wir sagen können, ist, dass lange und zufällige Passwörter stark sind, weil es keinen leichteren Weg gibt, sie zu knacken als Brute-Forcing. Aber das hilft hier nicht, denn die Benutzer wählen ihre Passwörter, nicht die Entwickler, die eine Website erstellt haben, und sie wählen keine idealen Passwörter.
Nach Ihrem letzten Kommentar möchten Sie ein Passwort-Schema erstellen, das für große Regierungen akzeptabel ist. Diese Information ist leicht verfügbar.
Tags und Links php security hash bcrypt php-password-hash