Warum nicht?
Wenn jemand den Algorithmus zum Schutz des Passworts in die nötigen Eckdaten hat und ernsthaft daran interessiert ist, ins System zu gelangen, lässt er sich von sowas nicht aufhalten.
Man erzeugt sich nicht "mal eben" so eine Rainbow-Tabelle - da steckt ja auch enormer Rechenaufwand dahinter.
Übertreibs nicht, so enorm ist der auch nicht :) In ein paar Stunden ist eine sehr umfassende Tabelle generiert.
Außerdem: Rainbow-Tables lohnen sich ja sowieso nur, wenn Du das mehrfach anwenden willst;
Natürlich, darum hängt es eben vom verwendeten Algorithmus ab - wenn die Salt-Komponente variabel ist, kann man gleich wieder Brute-Force anwenden.
Die Rainbow-Table bietet im Vergleich zu einem flachen Tabelle den Vorteil, dass sie weniger Platz benötigt bzw. bei gleicher Größe theoretisch mehr Klartexte aufnehmen kann - mit dem Nachteil, dass möglicherweise nicht alles abgedeckt wird.
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.
Wörterbuch gefolgt von Brute-Force mit Zufallsfolgen sind da sicher schlauer, ja.
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.
Ich weiß nicht, welche vorstellungen du von Rainbow-Tabellen hast - aber es dauert keine 2 Monate eine zu berechnen - eine umfangreiche Tabelle mit sagen wir 1 bis 2 TiB ist in rund einem Tag berechnet.
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.
Ja - die Tabelle wenn der Salt einfach durch Verkettung benutzt wird exakt um n*Salt größer als ohne Salt (wobei n der Anzahl der Datensätze entspricht).
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.
Genau aus dem Grund: keine dämlichen (kurzen) Salts verwenden "Phaigh3ahH" ist kein Salt "HarWhBdh|3VacE-QE9jEGA>6M)O-^2pr}|z]KH- ;@cl7@>[ZKTKgi9j?*Pl4m*>(:{2UQ9+xn3+E=HyS,C-,D<Goq[df-u{FA.=<&4L
[.yle$iOn(zYZ,Z~aS|oBZ" ist schon besser geeignet.
Insofern: Sowohl Salts als auch das mehrfache Iterieren der Hash-Funktion erhöhen die Sicherheit des Hashwerts des Passworts.
Wenn du das so siehst ja - aber ein geheimer zusätzlicher Salt ist da wesentlich praktikabler als das mehrfache durchsemmeln durch eine Hashfunktion bzw. hinzufügen von Salts die ohnehin bekannt sind.