Salt (Kryptografie)
Um den Unterschied zwischen dem Knacken eines einzelnen Passworts und einer Menge von Passwörtern zu verstehen, betrachten Sie eine Datei mit Benutzern und ihren gehashten Passwörtern. Angenommen, die Datei ist ungesalzen. Dann könnte ein Angreifer eine Zeichenkette auswählen, sie Versuch nennen und dann Hash(Versuch) berechnen. Da Hash-Funktionen eins-zu-eins sind, folgt daraus, dass jeder Benutzer, dessen Hash gleich hash(attempt) ist, als Passwort attempt haben muss. Somit knackt jede Übereinstimmung ein Benutzerkennwort, und die Wahrscheinlichkeit einer Übereinstimmung steigt mit der Anzahl der Kennwörter in der Datei. Im Gegensatz dazu müsste der Angreifer bei Verwendung von Salts den Hash(Versuch || Salz) berechnen, mit Eintrag A vergleichen, dann den Hash(Versuch || Salz), mit Eintrag B vergleichen und so weiter. Dies verhindert, dass ein einziger Versuch mehrere Passwörter knacken kann (nur wenn die Wiederverwendung von Salts vermieden wird).
Salze bekämpfen auch die Verwendung von vorberechneten Tabellen zum Knacken von Passwörtern. Eine solche Tabelle könnte einfach gängige Passwörter auf ihre Hashes abbilden, oder sie könnte etwas Komplexeres tun, wie z. B. die Start- und Endpunkte eines Satzes von vorberechneten Hash-Ketten speichern. In jedem Fall kann das Salzen die Verwendung von vorberechneten Tabellen verhindern, indem Hashes verlängert und aus größeren Zeichensätzen gezogen werden, wodurch es unwahrscheinlicher wird, dass die Tabelle die resultierenden Hashes abdeckt. Insbesondere müsste eine vorberechnete Tabelle die Zeichenkette abdecken und nicht nur .
Das moderne Shadow-Passwort-System, bei dem Passwort-Hashes und andere Sicherheitsdaten in einer nicht-öffentlichen Datei gespeichert werden, mildert diese Bedenken etwas ab. Sie bleiben jedoch in Installationen mit mehreren Servern relevant, die zentralisierte Passwortverwaltungssysteme verwenden, um Passwörter oder Passwort-Hashes auf mehrere Systeme zu verteilen. In solchen Installationen kann das Root-Konto auf jedem einzelnen System als weniger vertrauenswürdig eingestuft werden als die Administratoren des zentralen Kennwortsystems, so dass es sich lohnt, sicherzustellen, dass die Sicherheit des Kennwort-Hash-Algorithmus, einschließlich der Generierung eindeutiger Salt-Werte, angemessen ist.
Ein weiterer (geringerer) Vorteil eines Salt ist folgender: Zwei Benutzer könnten dieselbe Zeichenfolge als Kennwort wählen, oder derselbe Benutzer könnte dasselbe Kennwort auf zwei Rechnern verwenden. Ohne ein Salt würde dieses Passwort als dieselbe Hash-Zeichenkette in der Passwortdatei gespeichert werden. Dies würde die Tatsache offenlegen, dass die beiden Konten dasselbe Kennwort haben, so dass jeder, der das Kennwort eines der Konten kennt, auf das andere Konto zugreifen könnte. Indem die Kennwörter mit zwei zufälligen Zeichen gesalzen werden, kann niemand, selbst wenn zwei Konten dasselbe Kennwort verwenden, dies nur durch das Lesen von Hashes herausfinden.