kennt sich hier jemand mit Rainbow Tables aus und könnte das möglichst einfach erklären? Ich weiß, dass Passwörter dabei gehasht werden und die Hash-Werte in Tabellen gespeichert werden. Aber wie genau ist der Ablauf des cryptens vom Passwort und wie kann dieses wieder mittels Rainbow Tables wiederhergestellt werden?
Passwörter ablegen
Passwörter werden weder im Klartext noch verschlüsselt abgelegt, sondern gehasht -- zumindest von guten Entwicklern. Hier haben Rainbow-Tables eine Chance. Richtig kompetente Entwickler kombinieren das mit Salt und aufwendigen Funktionen bzw. nehmen PBKDF2 oder bcrypt. Hier nützen Rainbow-Tables wenig.
Rainbow-Table erstellen H_m.0 = h(P_m) H_m.n = h(r(H_m.n-1))
mit P_m als initialem Wert, h() als Hashfunktion mit dem Resultat H_m.n und r() als Reduktionsfunktion sowie den Zählern m, n und o. Das machen wir bei jedem der m Ausgangswerte P_mn-mal und legen das Paar (P_m, H_m.n) in der Tabelle ab.
Cracken, Schritt 1
Wir haben den Hash X vorliegen und wollen das zugehörige Passwort Q wissen.
Gilt X_0 = H_m.n, weiter zu Schritt 2. Ansonsten für o < n: X_o = h(r(X_o-1))
bis X_o = H_m.n gilt.
Cracken, Schritt 2
Wir nehmen das zu X_o = H_m.n zugehörige P_m und wiederholen die Schritte aus dem Erstellen der Table: H_m.0 = h(P_m) H_m.n = h(r(H_m.n-1))
bis H_m.n = X_o gilt. Dann haben wir das Passwort Q = r(H_m.n-1).
Was effektiv passiert ist
Wir haben für die Rainbow-Table viel Zeit und Rechenpower investiert, um für die Anfangswerte P_m die zugehörigen Endwerte H_m.n zu berechnen. Beim Cracken rechnen wir nur noch n-mal -- entweder finden wir in o < n Versuchen einen passenden End-Hash H_m.n und können dann in n-o Schritten aus P_m einen Klartext Q berechnen, der gehasht X entspricht, oder die Table ist suboptimal.
Anmerkungen
Das Cracken mit Rainbow-Tables ist durch die Tools trivial. Das erstellen der Tables keineswegs. Es werden geeignete Ausgangswerte P_m sowie eine gute Reduktionsfunktion r() benötigt. Weiteres ist (in) den Vorlesungen (Einführung in die) Kryptographie (1-3) des bevorzugten akademischen Instituts zu entnehmen/erfragen.
PS: Kleinere Fehler sind natürlich nicht ausgeschlossen, das Wesentliche sollte aber passen.
Erstmal vielen Dank für die Antworten!
@Sidwilson
Den Wikipedia-Artikel habe ich selbst schon gelesen und versucht zu verstehen; mein Problem ist eher, dass ich nicht wissen muss wie man es macht, sondern viel mehr muss ich wissen WAS man macht. Das ist mit vielen "Fremdbegriffen" natürlich nicht ohne weiteres zu verstehen.
@AnyThinG
Danke für deine ausführlich aufgeführten Schritte, jedoch bin ich kein Entwickler und muss daher, wie bereits beschrieben, nicht wissen wie man als Entwickler agiert um solche Tabellen zu erstellen. Ich muss wissen, wozu diese Tabellen dienen, wie man an die Hash-Werte von dem System kommt, in welches man einbrechen möchte (ist nicht für illegale Zwecke gedacht), wie man sich gegen sowas schützen kann (am besten SALTs noch einmal genauer erklären) und wie man durch die Tabellen mit den Hashes an die Kennwörter kommt.
Wenn du dir also noch mal 5 Minuten nehmen könntest, um deine Rechnungen in Worte zu fassen, wäre ich dir sehr verbunden!
plastikziel1 schrieb: wie man an die Hash-Werte von dem System kommt, in welches man einbrechen möchte (ist nicht für illegale Zwecke gedacht)
Die Tabellen sind nicht vom System abhängig, sondern vom Algorithmus. Dem entsprechend kannst du also einfach googlen, und z.B. das hier finden. Je größer die Tabelle, desto mehr Werte - und umso höhere Chancen, gerade den Hash des von dir gesuchten Passwortes zu finden.
plastikziel1 schrieb: man sich gegen sowas schützen kann (am besten SALTs noch einmal genauer erklären)
Durch das Verwenden eines Salts, also einem zufälligen Wert am Ende jedes Passworts vor dem Hashen, kann man eben die gängigen Tabellen nicht mehr benutzen. Sie müssten neu erstellt werden, für jeden Salt. Und das lohnt sich eben nicht.
plastikziel1 schrieb: und wie man durch die Tabellen mit den Hashes an die Kennwörter kommt.
Stell dir das vor wie eine reverse Suche in einem Telefonbuch, also nicht nach Namen, sondern nach der Telefonnummer.
Endlich hat sich der Info-Grundkurs in der Oberstufe mal gelohnt.
plastikziel1 schrieb: [...] wie man an die Hash-Werte von dem System kommt, in welches man einbrechen möchte [...]
Typischweise ist man an dieser Stelle schon per Exploiten einer Sicherheitslücke des Systems in jenes eingebrochen. Jetzt geht es um die Rechteerweiterung, bzw. Angriffe auf mit diesem System vernetzte Systeme. Aka: du bist durch ein offenes Fenster in den Flur des Hauses gelangt und willst jetzt in die versperrten Zimmer rein. Die Türschlösser sind die Hashes, du suchst den/die passenden Schlüssel.
Chester schrieb: Die Tabellen sind nicht vom System abhängig, sondern vom Algorithmus. Dem entsprechend kannst du also einfach googlen, und z.B. das hier finden. Je größer die Tabelle, desto mehr Werte - und umso höhere Chancen, gerade den Hash des von dir gesuchten Passwortes zu finden.
Genau, für die unterschiedlichen Arten von Türschlössern brauchst du unterschiedliche Schlüsselrohlinge, um einen passenden Schlüssel zu fertigen.
plastikziel1 schrieb: [...] um deine Rechnungen in Worte zu fassen, wäre ich dir sehr verbunden!
Welche Rechnungen? Das sind nur Formeln, die die Funktionsweise/den Ablauf beschreiben -- und das kürzer und prägnanter als mit ausformulierten Worten
Bei den Rainbow-Tables wird für eine Menge von initialen Schlüsseln je eine Schlüssel<->Schloss-Kette berechnet. Es werden aber nur der erste Schlüssel und das letzte Schloss gespeichert (alles andere braucht zu viel Platz). Liegt ein zu knackendes Schloss vor, wird die (Such-)Kette für dieses Schloss berechnet und geprüft, ob ein Zwischenergebnis (der Suchkette) mit einem End-Schloss aus der Table übereinstimmt. Ist das der Fall, ist der gesuchte Schlüssel Teil der zu diesem End-Schloss gehörenden Kette (aus der Table). Mit dem dem End-Schloss zugehörigen Anfangs-Schlüssel (aus der Table) lässt sich diese Kette erneut berechnen, wobei an einer Stelle der zum zu knackenden Schloss passende Schlüssel auftaucht.
Kurz: anstelle, dass beim Knacken alle möglichen Schlüssel ausprobiert werden, wird das auf einen kleinen Schlüsselbereich (Kette) eingeschränkt und nur diese ausprobiert.
Chester schrieb: Stell dir das vor wie eine reverse Suche in einem Telefonbuch, also nicht nach Namen, sondern nach der Telefonnummer.
Eben nicht, ein Telefonbuch ist komplett, die Rainbow-Table beinhaltet nur Anfangs- und End-Werte von berechenbaren Ketten. Beim Telefonbuch sind solche Ketten nicht möglich, da keine berechenbare Vergabestruktur Name<->Nummer vorhanden ist.
plastikziel1 schrieb: [...] wie man sich gegen sowas schützen kann (am besten SALTs noch einmal genauer erklären) [...]
Chester schrieb: Durch das Verwenden eines Salts, also einem zufälligen Wert am Ende jedes Passworts vor dem Hashen, kann man eben die gängigen Tabellen nicht mehr benutzen. Sie müssten neu erstellt werden, für jeden Salt. Und das lohnt sich eben nicht.
Genau, die Schlüssel bekommen ein zusätzliches Merkmal, z. B. eine zusätzliche Kerbe an der Oberkante. Dass diese Kerbe an der Stelle existiert, kann im Grunde öffentlich bekannt sein -- aber es wird eine eigene Rainbow-Table notwendig. Hat nun jeder Schlüssel eine andere Kerbe, brauchst du für jede Tür eine eigene Rainbow-Table. Und damit benötigt wieder jeder Schlüssel einen ähnlichen Aufwand wie ein Brute-Force-Angriff.
Weitere Gegenmaßnahmen sind die Verwendung von aufwendigen Hash-Funktionen. MD5 ist schnell berechnet, das kann mit Großrechnern erledigt werden. Dauert Passwort->Hash aber 10x so lange, dauert auch das Cracken 10x so lange. Dann dauert Passwort ändern und der Login halt mal 1 Sekunde statt einem Bruchteil, das Cracken wird aber sehr viel teurer (und hoffentlich unrentabel).
kennt sich hier jemand mit Rainbow Tables aus und könnte das möglichst einfach erklären? Ich weiß, dass Passwörter dabei gehasht werden und die Hash-Werte in Tabellen gespeichert werden. Aber wie genau ist der Ablauf des cryptens vom Passwort und wie kann dieses wieder mittels Rainbow Tables wiederhergestellt werden?
Danke im vorab für die Hilfe!
plastikziel1
#