Du hast zwar mit der Angabe der riesigen Datenmengen bei den unzähligen Kombinationen eines Ausgangswertes für den Hash Recht, aber so wie Du meinst funktionieren Rainbow Tabellen auch garnicht wie Du mit der Vermutung zu einem Algorithmus schon selbst richtig andeutest. Eine Rainbow Tabelle wäre unsinnig, wollte sie alle möglichen Kombinationen enthalten und deswegen tut sie dies auch nicht. Nebeneffekt ist, dass auch bei der Benutzung von Rainbow Tabellen immer noch per Brute Force gerechnet werden muss.
Prinzip einer Rainbow Tabelle ist die Reduktionsfunktion, die zu ihrer Erstellung verwandt wurde und somit der Schaffung einer Eingrenzung für das anschließende Brute Force. Das Ganze ist etwas kompliziert zu erklären, ich versuche mein Glück trotzdem einmal:
Du willst eine Rainbox Tabelle erstellen und fängst mit einem beliebig, zufällig gewählten Eingangspasswort (X0) an aus welchem Du einen Hash erstellst. Den gewonnen Hash speicherst Du jetzt aber nicht zusammen mit dem Passwort in einer Datenbank, sondern wendest darauf die Reduktionsfunktion (R1) an, die aus dem Hash aufgrund eines bestimmten (typisch für den speziellen Rainbow-Algorithmus) Schemas wieder eine Zeichenkette (neuer Eingangswert) erstellt. Diesen neuen Wert unterziehst Du wieder der Hash-Funktion, den gewonnenen Hashwert unterziehst Du wieder der Reduktionsfunktion (für den nächsten Durchlauf jedoch einer anderen, die jedoch für jeden Durchlauf n typisch ist, also hier R2) und so weiter.... das Ganze machst Du jetzt n-Mal (Reduktionsfunktion und n bestimmen die Qualität einer Rainbow-Tabelle). Nach diesen n Durchläufen speicherst Du nun dein ursprüngliches Zufallspasswort (X0) und den letzten gewonnen Hashwert (Hn) in der Tabelle. Anschließend beginnst Du von neuen mit einem neuen Zufallspasswort (das natürlich ein anderes sein sollte, als schon berechnete).
Tja, was soll das nun wird man sich fragen... wie bekommt man nun für einen Hash ein Passwort? Schritt Nummer eines wäre, nach zu schauen, ob der Hash als Endwert in der Tabelle steht. Tut er das, dann berechnet man ausgehend vom zugehörigen Ausgangspasswort die komplette Reihe bis zur letzten Reduktionsfunktion neu und hat das Ursprungspasswort. Tut er das jedoch nicht, dann wendet man auf den Hash nacheinander die Reduktionsfunktionen R1 bis Rn und prüfst jedes Mal, ob Du dafür einen entsprechenden Endhash Hn in der Tabelle hast. Hast Du den, dann startest Du entsprechend vom Ausgangspasswort wieder die Berechnung der Reihe.
Hast Du jedoch nach Anwendung von Rn immer noch keinen passenden Endhash Hn gefunden, dann hat die Rainbow Tabelle versagt.
Kurzum, je nach Tiefe n reduziert sich die Speichermenge enorm, aber auch eine Rainbow Tabelle ist keine Garantie das Passwort wirklich darin zu enthalten und bei schlechten Reduktionsfunktionen kann eine Rainbow Tabelle auch komplett unnütz werden.