Moin suit,
Weil wir grade bei Hashes sind - es wird ja auch immer wieder gesagt, dass man MD5 nicht mehr für Passwörter verwenden soll, weil es unsicher/gebrochen ist. Diese Aussage trifft aber insbesondere für Passwörter nicht zu, da sämtliche bekannten Angriffe auf MD5 an stellen Ansetzen, die mit Passwörtern nicht das geringste zu tun haben.
Naja, jain. Es ist richtig, dass es bisher keine verwertbaren Angriffe auf MD5 _bekannt_ sind, um Passwörter zu knacken. Es sind aber strukturelle Schwächen in MD5 bekannt. Und damit sollte der Algorithmus gemieden werden.
Der tatsächliche Grund ist, dass MD5 zu schnell und zu kurz ist, um damit effektiv kurze Zeichenketten wie Passwörter zu schützen
Das gilt für alle Hashing-Algorithmen.
zudem fehlt ein Mechanismus, dass zwei gleiche Zeichenketten trotzdem unterschiedliche Ergebnisse liefern (aka Salt).
Nein, das ist nicht richtig. PHPs md5()
sieht vielleicht keinen Salt vor, aber es zwingt dich auch keiner, diese Funktion zu nutzen. Nutze halt crypt
(http://php.net/manual/en/function.crypt.php) mit entsprechendem Salt. Oder salte von Hand.
Ein Hashing-Algorithmus muss per se kein Salting unterstützen, das gängige Vorgehen ist das Einstreuen des Salts an einer Stelle des Klartexts, meistens vorne weg. Wenn du z. B. 12345678 hashen wolltest, mit salt, dann würdest du nicht md5('12345678')
aufrufen, sondern md5('$meinunglaublichersalt$12345678')
. So funktioniert salting.
Nichts desto trotz hast du natürlich recht, dass man md5()
nicht verwenden sollte, um Passwörter zu hashen.
LG,
CK