Hallo suit,
Bei einem gezielten Angriff auf ein einzelnes Passwort mit einem bekannten algoritmus ist das aber kein großes Hindernis.
Warum nicht?
Wenn bekannt ist, dass das Passwort 1.000 mal gehasht wird, erzeuge ich mir halt einfach eine Rainbow-Table in der jedes Glied der Kette auch 1.000 mal gehasht wird -> Problem gelöst.
Man erzeugt sich nicht "mal eben" so eine Rainbow-Tabelle - da steckt ja auch enormer Rechenaufwand dahinter. Außerdem: Rainbow-Tables lohnen sich ja sowieso nur, wenn Du das mehrfach anwenden willst; wenn Du nur ein einzelnes Passwort knacken willst (und noch keine Tabelle hast), dann bist Du besser dran, durchzuprobieren, als Dir vorher eine Tabelle anzulegen, wo Du im Zweifel mehr Rechenschritte drauf verbrätst. Zudem: Wenn es für $HASHFUNKTION 2 Monate dauert, sich die Rainbow-Tabelle zu erzeugen, man aber die Funktion 1000 mal iteriert anwendet, dann brauchst Du jetzt plötzlich etwa 2000 Monate, um die Tabelle zu bauen.
Ferner: Wenn Salts im Spiel sind, dann ist die Rainbow-Table grundsätzlich *sehr* viel größer als one Salt - oder aber (bei "kleinen" Tables) es steigt der Rechenaufwand, um ein Passwort in der Tabelle zu finden, dramatisch.
Nehmen wir doch nur mal Salts:
Die reine (ungesalzene) SHA1-Summe des Passworts "hallo" ist:
fd4cef7a4e607f1fcc920ad6329a6df2df99a4e8
Das kannst Du inzwischen schon bei Google eingeben, um das Passwort zu bekommen.
Wenn ich dagegen das Passwort mit dem zufälligen String Phaigh3ahH salze, dann erhalte ich
65890aa07dba00a6778e22b8f11a4f61e63c489a
als SHA1-Hash von dem Konstrukt. Selbst wenn Du das in einer SHA1-Rainbow-Table finden solltest, ist nicht sichergestellt, dass der zugehörige Klartext gleich anfängt (Du könntest sehr wohl auf eine Kollision stoßen) - und im Gegensatz zu reinem SHA1 (ohne Salt), wo eine Kollision als Klartextpasswort genauso funktionieren würde, kannst Du die im Falle der Verwendung von Salts nicht verwenden - sondern müsstest weitersuchen.
Insofern: Sowohl Salts als auch das mehrfache Iterieren der Hash-Funktion erhöhen die Sicherheit des Hashwerts des Passworts.
Viele Grüße,
Christian
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
How to tell the difference between a science fan and a scientist.