suit: Verschlüsselung von Passwörtern

Beitrag lesen

Wie du das Salz erzeugst ist bei der ganzen Sache fast egal (es sollte sich nicht [oft] wiederholen), im Grunde sind sogar vorhersehbare Methoden relativ unkritisch also z.B.
hash('sha512',md5($benutzername) . $passwort);
Den Wert musst du nämlich nicht extra in die DB speichern :D (ist dafür öffentlich) Der Angreifer kann also theoretisch vor seinem Angriff schon Regenbogentabellen erstellen, aber ob er das vorher oder nachher macht... pffft Hauptsache sie wird unökonomisch groß.

Man darf nur einen Fehler nicht machen: einen kurzen Salt-Wert verwenden.

Annahme das Passwort ist "12345" und der Salt-Wert ist "foo" - dann ist die Kombination (bei einer einfachen Verkettung) 12345foo und so ein Wert wird ziemlich sicher in einer Rainbow-Table "aller" 8-stelligen Passwörter drin stehen.

Das Stichwort ist Entropie - der "Informationsgehalt" des Salt-Wertes muss so groß sein, das er ein verwenden einer Standard-Rainbow-Table unmöglich macht.

Das Paradoxe ist, dass selbst das Hashen eines einzelnen Buchstabens mit einem Hash-Algorithmus wie MD5 dessen Entropie erhöht obwohl die Information eigentliche dieselbe ist. Aber anstatt 8 Bit hat man nun 128 Bit mit denen man hantieren muss.

Eine weitere Möglichkeit ist es auch einfach einen Hash nochmal zu hashen - das macht ein einzelnes schlechtes Passwort aber auch nicht sicherer.