Rainbow Table
Die Rainbow Table (engl. für Regenbogentabelle) ist eine von Philippe Oechslin entwickelte Datenstruktur, die eine schnelle, speichereffiziente Suche nach der ursprünglichen Zeichenfolge (in der Regel ein Passwort) für einen gegebenen Hashwert ermöglicht.1
Überblick
Voraussetzung zur Nutzung des Verfahrens ist, dass kein Salt bei der Berechnung des Hashwerts für das gesuchte Passwort verwendet wurde. Wie es früher, kritischerweise, oft bei Webseiten der Fall war, die das Passwort nur MD5 gehasht in ihrer Datenbank gespeichert haben oder wie die Verschlüsselung der Windows Passwörter früher (Siehe auch Ophcrack).
Funktionsweise
Für Rainbow Tables werden zur Speicherung Ketten aus Passwörtern und deren Hashwerten verwendet. Das erste Passwort wird mit der gewählten Hashfunktion gehasht und der sich ergebende Hashwert wird in eine Reduktionsfunktion gegeben. Diese Reduktionsfunktion bildet den Hashwert wieder auf ein je nach Implementierung im besten Fall sinnvolles mögliches Passwort ab. Das Ergebnis wird ebenfalls wieder gehasht und der Vorgang wiederholt sich n mal zur erstellung der Kette. Am Ende wird nur Wert und der letzte der Kette gespeichert, um im Vergleich zur normalen Lookup-Table den Speicherverbrauch gering zu halten. Ein Hashwert kann später auf diesen Entwerten gesucht werden, wenn er nicht dabei ist, kann er mittels Reduktionsfunktion und erneutem hashen weitergesucht werden, bis ein Hash errechnet wird, der auch unter den Endwerten zu finden ist oder der Vorgang unwirtschaftlich wird. Bei einer Übereinstimmung des Hashes mit einem Endwert wird die Kette wieder aufgebaut und das Passwort ausgelesen.
Gegenmaßnahmen
Folgende Gegenmaßnahmen1, können bis auf die Länge des Passworts nur von dem Programmier getroffen werden:
- Langes Kennwort
- Salt (String, welcher mit an das Passwort vor der Ermittelung des Hashes angefügt wird und mit in der Datenbank gespeichet wird)
- Mehrere Iterationen der Hashfunktion
- Pepper (Geheimer String, der wie ein Salt genutzt wird, welcher in dem Quellcode der Anwendung steht aber nicht in der Datenbank)