Erstens, warum implementieren Sie Kryptocode auf niedriger Ebene für eine Webseite? Sie würden denken, dass dies ein gelöstes Problem ist: Sie verwenden ein Framework, das Bibliotheken verwendet.
Zweitens schützt der Hash die Passwörter, falls die Hashes auslaufen. Ihre Site bietet keinen Zugriff auf die Passwortdatenbank, daher sollte diese Situation im Idealfall nicht einmal auftreten. Die Salze helfen in diesem Fall, die Kennwortdatenbank als Ganzes zu verteidigen.
Wenn sich der Angreifer auf ein einzelnes Kennwort aus dieser Datenbank konzentriert, macht dies keinen großen Unterschied. Dies erschwert die Arbeit nur in dem Sinne, dass der Angreifer das Kennwort nicht einfach aus einer Regenbogentabelle abrufen kann, indem er den Hash nachschlägt. Das brutale Erzwingen eines Passworts mit einem Salt wird nur geringfügig verlangsamt, da einige weitere Bytes gehasht werden, was einige weitere Maschinenzyklen in den Hashing-Runden kostet.
Es war einmal, dass Unix-Systeme öffentlich verfügbar waren Beim Zugriff (z. B. auf Campus-Systemen für Studenten) wurden die Passwörter links und rechts geknackt. Es gab verschiedene Gründe, warum dies einfach war, aber das Hauptproblem war ein einfaches: Die vertraulichen Kennwort-Hash-Informationen wurden in derselben Datei wie die anderen Informationsfelder über einen Benutzer gespeichert, und diese Datei, / etc / passwd
war weltlesbar. Das Update besteht darin, die vertraulichen Informationen in einer separaten Datei / etc / shadow
abzulegen. Presto: Damit ist das Knacken von Passwörtern durch Skriptkinder beendet, die über nicht privilegierte, legitime Konten im System verfügen.
Ebenso wird niemand Ihre Passwörter brutal erzwingen, es sei denn, Sie lassen sie auslaufen Wenn jemand nach dem Passwort eines bestimmten Benutzers sucht, kann wenig getan werden, um ihn zu stoppen.
Benutzer, die auf verschiedenen Systemen dieselben Kennwörter verwenden und diese jahrelang nicht ändern, sind immer anfällig. Sie können es salzen, pfeffern und Ketchup hinzufügen; macht keinen Unterschied.
Salze schrecken jemanden ab, der die Passwortdatenbank als Ganzes knacken und so viele verschiedene Passwörter wie möglich sammeln möchte. Salze bedeuten, dass jedes Passwort einzeln brutal erzwungen werden muss und nicht nur aus vorberechneten Tabellen abgerufen werden muss. Wenn ein Salz N Bits hat, muss die Regenbogentabellendatenbank des Angreifers zumindest idealerweise 2 ^ N-mal größer sein. Ein 32-Bit-Salt bedeutet, dass Sie eine vier Milliarden Mal größere Regenbogentabellendatenbank benötigen, um nur nach Passwörtern zu suchen.
Wenn Ihre Site nur 20 Benutzer hat, gibt es natürlich nur bis zu 20 verschiedene Salze. Ein Angreifer nimmt also das Passwortwörterbuch und hasht jeden Eintrag auf 20 verschiedene Arten mit diesen Salzen.
So schützen Salze Ihre Datenbank nicht nur vor der Suche nach Regenbogentabellen, sondern auch vor Brute-Force-Cracking um etwa den Faktor N, wobei N die Anzahl der Benutzer ist. Um N Passwörter brutal zu erzwingen, muss der Angreifer die N-fache Arbeit als Brute-Force-Passwort ausführen. (Angenommen, das Salz ist breit genug: mindestens so groß wie der Logarithmus zur Basis 2 von N. Wenn ein Salz nur beispielsweise 12 Bit breit ist, kann es nur 4096 verschiedene Salze geben, egal wie viele Benutzer es gibt.)
Ohne Salze ist dies nicht wahr. Das brutale Erzwingen einer beliebigen Anzahl von Passwörtern gleichzeitig ist so einfach wie das brutale Erzwingen eines Kennworts. Je mehr Benutzer vorhanden sind, desto höher ist die Auszahlung pro Aufwand.