Die meisten dieser Antworten sind etwas falsch und zeigen eine Verwechslung zwischen Salzen und kryptografischen Schlüsseln. Der Zweck des Einfügens von Salzen besteht darin, die Funktion zum Hashing des Kennworts jedes Benutzers so zu ändern, dass jeder gespeicherte Kennwort-Hash einzeln angegriffen werden muss. Die einzige Sicherheitsanforderung besteht darin, dass sie pro Benutzer eindeutig sind. Es hat keinen Vorteil, dass sie unvorhersehbar oder schwer zu erraten sind.
Salze müssen nur lang genug sein, damit das Salz jedes Benutzers einzigartig ist. Es ist sehr unwahrscheinlich, dass sich zufällige 64-Bit-Salze jemals wiederholen, selbst bei einer Milliarde registrierter Benutzer. Dies sollte also in Ordnung sein. Ein einzeln wiederholtes Salt ist ein relativ geringes Sicherheitsrisiko. Es ermöglicht einem Angreifer, zwei Konten gleichzeitig zu durchsuchen, beschleunigt jedoch insgesamt die Suche in der gesamten Datenbank nicht wesentlich. Selbst 32-Bit-Salze sind für die meisten Zwecke akzeptabel. Im schlimmsten Fall wird die Suche eines Angreifers um etwa 58% beschleunigt. Die Kosten für die Erhöhung der Salze über 64 Bit hinaus sind nicht hoch, aber es gibt keinen Sicherheitsgrund dafür.
Die Verwendung eines standortweiten Salt zusätzlich zum Salz pro Benutzer bietet einige Vorteile. Dies verhindert mögliche Kollisionen mit an anderen Standorten gespeicherten Passwort-Hashes und verhindert die Verwendung von Regenbogen-Allzwecktabellen, obwohl sogar 32 Bit Salz reicht aus, um Regenbogentische zu einem unpraktischen Angriff zu machen.
Noch einfacher - und Entwickler übersehen dies immer -, wenn Sie eindeutige Benutzer-IDs oder Anmeldenamen haben, dienen diese als Salz. Wenn Sie dies tun, sollten Sie ein Site-weites Salt hinzufügen, um sicherzustellen, dass Sie sich nicht mit Benutzern eines anderen Systems überschneiden, die dieselbe gute Idee hatten.