Rainbow Tables (deutsch: Regenbogentabellen) sind vorberechnete Tabellen, mit denen Angreifer Passwort-Hashes in Klartext zurückverwandeln. Statt für jedes Passwort einzeln zu raten, wird der erbeutete Hash in einer riesigen, vorab erzeugten Tabelle nachgeschlagen — das macht das Knacken schwacher Passwörter erheblich schneller.

Das Grundproblem: Hashes umkehren

Eine Hashfunktion ist eine Einbahnstraße: Aus dem Passwort wird ein Digest berechnet, aber aus dem Digest lässt sich das Passwort nicht direkt zurückrechnen. Klassische Angriffe probieren deshalb Kandidaten durch (Brute Force, Wörterbuch). Bei vielen erbeuteten Hashes wiederholt sich diese Arbeit für jeden einzelnen Hash.

Zeit-Speicher-Abwägung

Rainbow Tables nutzen die Idee des Time-Memory Tradeoff (Martin Hellman, 1980): Man opfert Speicherplatz, um Rechenzeit zu sparen. Philippe Oechslin verfeinerte das Verfahren 2003. Die Tabellen bestehen aus Hash-Ketten, die über Reduktionsfunktionen immer wieder auf neue Kandidaten abbilden; der Name „Rainbow“ (Regenbogen) kommt von den unterschiedlichen Farben der Reduktionsfunktionen in jeder Kette. Der Aufbau einer Tabelle ist einmalig teuer, danach ist das Nachschlagen fast so schnell wie in einer Hash-Tabelle.

Angriffsszenario

Erbeutet ein Angreifer eine Datenbank mit ungesalzenen Passwort-Hashes (etwa mit MD5), durchsucht er jeden Digest in der Tabelle. Bei einem Treffer liefert die Tabelle den Klartext. Besonders effektiv sind Rainbow Tables bei schwachen, häufig verwendeten Passwörtern und bei historischen Windows-Hashes (LM/NTLM).

Abwehr

  • Salting: Ein Salt ist ein eindeutiger Zufallswert pro Passwort. Damit ist jede Tabelle nur für genau einen Salt gültig — vorberechnete Tabellen werden wertlos.
  • Langsame Hash-Konstruktionen: bcrypt, scrypt und Argon2 machen jede einzelne Hash-Berechnung so teuer, dass sich der Tabellenaufbau nicht mehr lohnt.
  • Lange Passwörter: Der Suchraum wächst so stark, dass keine Tabelle ihn abdecken kann.

Verwandte Grundlagen: Hashfunktion, Hash-Kollision, SHA-1, Hashing.