Hallo Christian,
Salt = Erste 6 Zeichen von gespeichertem Passwort
Nur zur Verdeutlichung: Als Salt keinesfalls die ersten 6 Zeichen des Passwortes nehmen! Hier in dem Beispiel wird nur das Salt sozusagen vor den Passwort abgespeichert. Der Salt sollte zufällig generiert werden und möglichst lang sein und möglichst auch alle möglichen Sonderzeichen enthalten, um das Erstellen von passenden vorberechneten Tabellen zu verhindern/erschweren.
Wenn für jedes neu festgelegte Passwort eine andere Zufallszeichenkette als Salt genutzt wird, dürfte man Rainbow-Tabellen so ziemlich gut aushebeln können - da dann für genau dieses Salt jemand selbst nochmal Rainbow-Tabellen berechnen müsste, und damit wären wir wieder bei Brute Force.
Exakt.
Was für Sicherheitsgründe? Wäre es nicht sinnvoller, das Passwort nicht nochmal unverschlüsselt über die Leitung zu jagen zwischen MySQL und PHP? Mir ist nicht klar, warum das die Sicherheit erhöhen sollte...
Das "Problem" ist wohl, dass wenn der Browser nur einen Hash senden muss, es genauso ausreicht, wenn jemand den Hash mithört und diesen dann versendet.
Eine relativ sichere Lösung ist es, dass der Server dem Client einen zufälligen String schickt und von diesem verlangt, dass er diesen zusammen mit dem Passwort hashed (z.B. MD5) und dann zurücksendet. Jemand der den Datenverkehr mithört kriegt dann natürlich den Hash mit, der hilft ihm aber wenig, da der Server das nächste mal einen anderen zufälligen String schicken wird, der gehasht werden muss.
Baue Salting ein und nutze als Algorithmus weiterhin MD5 oder SHA1. Du musst Dir halt nur überlegen, wie an einen möglichst geeigneten zufälligen Salt herankommst.
Die Zufälligkeit ist IMHO nicht so wichtig. Er sollte wie gesagt nur für jedes Passwort einzigartig sein und eben möglichst lang und möglichst viele verschiedene Zeichen besitzen. Wenn man den Hash auslesen kann, kommt man normalerweise auch ans Salt dran, und dann ist es relativ egal, ob das Salt jetzt "-----1" oder "$6J},*s" ist, da man für jedes Salt sowieso ne eigene Tabelle erstellen muss, bzw. ein eigenes Bruteforce ausführen muss, (sofern das Salt+Passwort eben nicht so kurz/primitiv ist, dass vorhandene Tabellen ausreichen).
Jonathan