Hallo TS,
Verstehe ich nicht. Hast Du eventuell meine Frage nicht verstanden?
Ich habe deine Frage sehr wohl verstanden.
Ich muss doch beim Vergleich am Server wissen, mit welchem Salt der Hash erzeugt wurde?
Der Salt wird als Teil der Hash-Serialisierung gespeichert. Siehe den Pseudocode oben.
Und den darf ich auch nicht einfach erkennbar im Hash speichern, dann wäre ja nichts gewonnen.
???
Ob ich den Hash in einer Datenbank-Spalte speichere oder als Teil der Serialisierung, das bleibt sich technisch gleich. Und der Salt ist kein Teil des Geheimnisses, er ist einfach nur eine Folge von zufälligen Bytes, die sich im Optimalfall bei jedem neu eurzeugten Hash unterscheiden.
Der Salt ist kein zusätzliches Passwort, sondern eine Absicherung gegen rainbow tables und gleiche Passwort-Hashes. Das einzige, was der Algorithmus (vereinfacht gesagt) mit dem Salt macht ist ihn an das Passwort zu hängen. Statt hash(password)
wird also hash(concat(salt, password))
ausgeführt. Ob der Angreifer den Salt kennt oder nicht ist irrelevant, er hat nur den Zweck ihm das Leben schwerer zu machen und das brute force zu verlangsamen (weil jedes Passwort einzeln gebruteforced werden muss statt in einer Rainbow table nachzugucken).
LG,
CK