Warum sollten Sie die Berechnung eines Passwort-Hash verlangsamen?
Warum sollten Sie die Berechnung eines Passwort-Hash verlangsamen?
Die Berechnung wird absichtlich verlangsamt, um es einem Angreifer zu erschweren, die Benutzerkennwörter brutal zu erzwingen, falls beispielsweise die Kennwortdatenbank gestohlen wird.
Da eine Hash-Funktion nur in eine Richtung funktioniert Um das Passwort für einen Hash zu erhalten, müssen Sie zufällige Passwörter hashen, bis Sie eines mit einem passenden Hash finden. ( Regenbogentabellen bieten jedoch einen Kompromiss).
Mit GPUs ist es möglich, Brute-Force Milliarden von z. MD5-Hashes pro Sekunde.
Aus diesem Grund wurden Hash-Funktionen wie bcrypt oder scrypt entwickelt, um dieses Problem zu beheben, indem sie langsam und für alle Fälle ausgeführt werden Für die Verschlüsselung, die viel Speicher benötigt, ist es nicht möglich, den Hash mithilfe von GPUs zu berechnen.
Für Ihre "normale" Anwendung ist dies höchstwahrscheinlich immer noch schnell genug, da Sie nur einen einzigen Hash berechnen Die Auswirkungen auf die Leistung sind vernachlässigbar.
Möglicherweise ist es verwirrend, dass es nicht klarer ist, dass ... die Berechnung überhaupt nicht verlangsamt wird !
Das heißt: Es gibt kein "schnelleres" "Weg, der absichtlich ignoriert wird (nicht den wir kennen); Der Algorithmus enthält kein künstliches "Warten".
Vielmehr ist die Berechnung langsam ausgelegt . Oder gedächtnisintensiv. Oder noch besser, beides. Es gibt keine Straße außer der langen und kurvenreichen, um das Ergebnis zu erhalten.
Auf diese Weise ist die Berechnung von one (die des richtigen Passworts) immer noch sehr, sehr schnell. Für ehrliche Benutzer ändert sich nichts merklich. Eine Zehntelsekunde oder eine Milliardstel Sekunde scheint sich nicht allzu sehr zu unterscheiden.
Aber eine Milliarde Berechnungen (diejenigen, die das richtige Passwort unter einer Milliarde finden Kandidaten - und in Wirklichkeit gibt es viele, viele mehr) werden quälend langsam sein und garantieren, dass eine "Brute-Force" -Prüfung aller möglichen Passwörter zum Scheitern verurteilt ist.
Wenn wir also einen Hashing-Algorithmus haben, ist das auch so schnell benötigen wir nicht die erste Iteration, sondern die (sagen wir) millionste. Wenn sicher. Hoffentlich gibt es keine Möglichkeit (von der wir wissen), direkt zum millionsten Ergebnis zu springen. Sie müssen sie alle berechnen. Und wenn dies nicht möglich ist - wenn die Iterationen "kurzgeschlossen" werden können, um schneller zur Antwort zu gelangen - dann sagen wir, dass der Algorithmus nicht sicher (genug) ist.
Passwort-Hashes sind als rechnerisch langsame Berechnung gedacht, da sie einen Angreifer, der versucht, das Klartext-Passwort zu finden, erheblich verlangsamen können, falls die Passwort-Hashes jemals durchgesickert sind.
Wenn die Berechnung eines Kennwort-Hashs langsam ist, wird das brutale Erzwingen eines Kennworts sehr viel langsamer, was sich über einen großen Datensatz oder eine große Anzahl von Vermutungen summiert. Wenn es viel länger dauert, gewinnen Sie so viel zusätzliche Zeit, um den Verstoß zu beheben.
Damit können Sie den Wörterbuchangriffen eine lineare Härte hinzufügen. Das heißt, Wenn Sie einen komplexen Salting-Algorithmus anwenden, können Sie den Rechenaufwand für die Wörterbuchangriffe n-mal erhöhen. Sie können es beispielsweise 1000-mal größer machen.
Im algorithmischen Sinne ist es nicht sehr nützlich, da die Rechenleistung, wie wir sehen können, mit der Zeit hauptsächlich exponentiell wächst. Es ist jedoch immer noch eine zusätzliche Sicherheitsebene.