Hallo Community,
ich beschäftige mich zurzeit unter anderem mit IT-Security und hatte gerade entsprechende Aufgaben zu Hash-Verfahren und Angreifermodellen zu erledigen.
Die derzeit, meines Kenntnisstands nach, effizienteste Methode um gehashte Passwörter zu knacken sind Rainbow-Tables. Mir ist allerdings die Funktionsweise noch nicht ganz klar. Kennt sich hier eventuell jemand damit aus?
Um Kollisionen zu vermeiden (Wiederholungen von reduzierten Klartextpasswörtern, die dann zu Wiederholungen in den entsprechenden Hashes führen) verwendet man ja unterschiedliche Reduktionsfunktionen, daher ja auch der Name Rainbow-Tables, mir ist aber noch nicht ganz klar, wie das konkret aussieht.
Gehe wir mal von folgendem Beispiel, ausgedachtem Beispiel für MD5-Hashes aus:
Mir ist noch nicht ganz klar, wie da genau Rechenzeit bei gespart werden soll, denn sobald die Tabelle erstellt ist speichert man ja nur Startwort und Endhash bzw. Endwort. Wenn ich jetzt also auf der Suche nach dem Wort zu dem 3. Hash "5961f2" wäre, könnte ich doch gar nicht wissen, in welcher Tabelle ich nachschauen muss? Sprich in dieser hier oder einer der ewig vielen anderen, die man ebenfalls erstellt hat.
D.h. doch, dass ich eigentlich in jeder Tabelle die mir zur Verfügung steht nachgucken muss, bis ich eine Lösung gefunden habe. Dies wiederum bedeutet doch aber, dass ich jede Tabelle, also jede Kette von vorn nach hinten durchlaufen, sprich noch einmal kalkulieren muss. Wo ist denn da Rechenzeit bei gespart worden?
Und von der Speicherplatzkomplexität: Um nicht wieder erneut Rechenzeit zu vergeuden, muss ich doch die Reduktionsfunktionen zusätzlich zu der Tabelle speichern?!
Viele Grüße
ascer
ich beschäftige mich zurzeit unter anderem mit IT-Security und hatte gerade entsprechende Aufgaben zu Hash-Verfahren und Angreifermodellen zu erledigen.
Die derzeit, meines Kenntnisstands nach, effizienteste Methode um gehashte Passwörter zu knacken sind Rainbow-Tables. Mir ist allerdings die Funktionsweise noch nicht ganz klar. Kennt sich hier eventuell jemand damit aus?
Um Kollisionen zu vermeiden (Wiederholungen von reduzierten Klartextpasswörtern, die dann zu Wiederholungen in den entsprechenden Hashes führen) verwendet man ja unterschiedliche Reduktionsfunktionen, daher ja auch der Name Rainbow-Tables, mir ist aber noch nicht ganz klar, wie das konkret aussieht.
Gehe wir mal von folgendem Beispiel, ausgedachtem Beispiel für MD5-Hashes aus:
Startwort: 123456 -> MD5
Starthash: e10adc3949ba59abbe56e057f20f883e -> Reduktionsfunktion1
-
2. Wort: 325951 -> MD5
2. Hash: 38a84d0439956131e6c1f612940a79a6 -> RF2
-
3. Wort: 912345 -> MD5
3. Hash: 5961f2505be01e4022aa387b4fd3b617 -> RF3
-
Endwort: 612364 -> MD5
Endhash: 19fab58f1241d1c215ea3db6e29352ed
Starthash: e10adc3949ba59abbe56e057f20f883e -> Reduktionsfunktion1
-
2. Wort: 325951 -> MD5
2. Hash: 38a84d0439956131e6c1f612940a79a6 -> RF2
-
3. Wort: 912345 -> MD5
3. Hash: 5961f2505be01e4022aa387b4fd3b617 -> RF3
-
Endwort: 612364 -> MD5
Endhash: 19fab58f1241d1c215ea3db6e29352ed
Mir ist noch nicht ganz klar, wie da genau Rechenzeit bei gespart werden soll, denn sobald die Tabelle erstellt ist speichert man ja nur Startwort und Endhash bzw. Endwort. Wenn ich jetzt also auf der Suche nach dem Wort zu dem 3. Hash "5961f2" wäre, könnte ich doch gar nicht wissen, in welcher Tabelle ich nachschauen muss? Sprich in dieser hier oder einer der ewig vielen anderen, die man ebenfalls erstellt hat.
D.h. doch, dass ich eigentlich in jeder Tabelle die mir zur Verfügung steht nachgucken muss, bis ich eine Lösung gefunden habe. Dies wiederum bedeutet doch aber, dass ich jede Tabelle, also jede Kette von vorn nach hinten durchlaufen, sprich noch einmal kalkulieren muss. Wo ist denn da Rechenzeit bei gespart worden?
Und von der Speicherplatzkomplexität: Um nicht wieder erneut Rechenzeit zu vergeuden, muss ich doch die Reduktionsfunktionen zusätzlich zu der Tabelle speichern?!
Viele Grüße
ascer
Zuletzt bearbeitet: