Rainbow Tables

Rainbow Tables - Kannst du mir das erklären? Was hat es mit diesen Reduktionsfunktionen auf sich? Gibt es bei einer n langen Kette n biele verschiedene Reduktionsfunktionen? Eine Reduktionsfunktion "hasht" doch auch nur den vorhergegangenen hash, inwiefeen bringt das denn einen Vorteil?Ein Hash ist eine Einbahnstraßenfunktion, d. h., du kannst aus dem Ergebnis nicht auf den Eingangswert schließen. Regenbogentabellen umgehen das, indem sie die Ergebnisse von Milliarden Eingangswerten ihren Ausgangswerten gegenüberstellen.Das sind erstmal pure Hash Tables.

Rainbow Tables speichern einen Plaintext und einen Hash, aber irgendwie sind in diesem Paar dann die Lösungen für 10000 Hashes mit drinnen. Wie geht das?





Stell es dir wie eine Logarithmus- oder Wurzeltabelle vor. Das sind alles teure Operationen zum Berechnen, also machst du das einmal und speicherst diese effizient ab. Die Reihenfolge ist genau wie Groß- und Kleinschreibung wichtig, weil sei den Hash verändert.

Stell dir eine RBT wie ein normales Wörterbuch für Angriffe auf Passwörter vor. Normalerweise erbeutet man ja nur Hashes und kann mit denen nicht sonderlich viel anfangen. Nutzer erstellt Konto, vergibt Passwort, davon wird intern ein Hash gebildet und gespeichert. Wenn man jetzt irgendwo einbricht und die Datenbank mit allen Hashes klaut, hat man davon noch nichts. Interessant sind ja die Passwörter. In der RBT stehen die Hashes von x unterschiedlichen zeichenkombinationen, natüprlich est mal die gängigsten aus normalen Wörterbüchern. Je länger und komplexer die Passwörer werden, umso größer werden selbstverständlich auch die RBT.

Der MD5-Hash von „Martin“ ist b29f84c77dd73e57687316e922e919d0
Der MD5-Hash von „martin“ ist 482ac7724254e4a8f7949443684651bb

Diese und noch Milliarden andere Hashes werden in eine RBT geschrieben. Wenn man jetzt in seiner erbeuteten DB den Hash 482ac7724254e4a8f7949443684651bb hat und gegen die RBT abgleicht, wird ein Treffer für 482ac7724254e4a8f7949443684651bb gefunden. Dadurch weiß man, dass das Passwort von Nutzer X 482ac7724254e4a8f7949443684651bb ist.

Und dann gibt's dann noch Salz, um so einen Angriff zu erschweren, oder? Genau! Die zufällige Zeichenfolge wird an das Passwort des Nutzers gehängt und erst danach der Hash gebildet. Selbst wenn der Angreifer erfährt, welches Salz verwendet wurde (muss ja immer das gleiche sein), kann er keine bestehende RVBT nehmen, sondern müsste eine neue für genau dieses Salz erstellen.

Was hier wiederholt beschrieben wird, ist aber nicht, wonach ich gefragt habe. RBTs sind mehr als nur Tabellen, in denen pro hash ein zugehöriges Passwort dabei steht. Die starten mit einem Klartextwort auf das dann eine Kette von Hash- und Reduktionsfunktionen angewendet wird.

Wenn die Tabelle auf ein Hash angewendet wird, den man cracken will, so lässt man den Hash auch erstmal diese Kette von Funktionen durchlaufen. Irgendwie kommt dann am Ende der Kette ein Klartextwort heraus, das auch in der rechten Spalte des Rainbow Tables ist.  Und dann heißt es auf Wikipedia, dass dieses Ergebnis (Dieses, welches am Ende der Kette mit einem Hash als Anfangswert rauskam) als Startkennwort der Kette dient und man so das eigentliche Passwort erhält.

Das geschickte Speichern ist optional, das wichtige Feature ist dass du und ggf. andere zusammen mit dir eine große Tabelle gebaut haben und ihr nicht bei jedem neuen Hash alle Passwörter neu probieren müsst. Sinnvoll wäre es nun, alle bereits berechneten Hashes in einer Datenbank zu speichern und bei erneuten Suchläufen nur noch vergleichen zu müssen, ob der gesuchte Hash schon bekannt ist. Bei einer Suche über 64 mögliche Zeichen [A-Za-z0-9./], die jede Stelle des Eingangstextes haben könnte, ergeben sich bei 6 Stellen 64 6 { 64^{6}} 64^{6} Variationen. Werden nun Text und Hash in einer Datenbank gespeichert, so werden pro Paar 16 Byte für den Hash und 6 Byte für den Plaintext benötigt und somit für die kompletten Daten etwa 1,4 Terabyte.

Keine Kommentare:

Kommentar veröffentlichen