Hackerboard WikiHaboBlog

[HaBo]

 
Cryptography & Encryption Ver- und Entschlüsselung, Algorithmen, Kryptoanalyse ? Kryptographie in der Praxis. Blowfish, Triple-DES, XOR u.a.

Rainbow-Tables in eigener Sache ...

Diskussion: Rainbow-Tables in eigener Sache ... im Forum Cryptography & Encryption, in der Kategorie Security Area; Hallo @all, prinzipiell ist mir die Funktionsweise von Rainbow-Tables bis auf eine Sache klar. Ich habe einen Algorithmus entwickelt um ...

Antwort
Alt 29.03.09, 18:53   #1 (permalink)
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Standard Rainbow-Tables in eigener Sache ...


Hallo @all,
prinzipiell ist mir die Funktionsweise von Rainbow-Tables bis auf eine Sache klar.

Ich habe einen Algorithmus entwickelt um Rainbow Tables zu generieren und bin nun dabei die Suche des bekannten Hashes innerhalb des Rainbow-Tables zu programmieren.

Ich zitiere mal folgende Seite: http://kestas.kuliukas.com/RainbowTables/

Zitat:
The algorithm is:
1) Look for the hash in the list of final hashes, if it is there break out of the loop.
2) If it isn't there reduce the hash into another plaintext, and hash the new plaintext.
3) Goto the start.
4) If the hash matches one of the final hashes, the chain for which the hash matches the final hash contains the original hash.
... und auch das ist klar. In der Praxis ist es nun so, dass ich für eine Chain mit 10.000 Hashes auch 10.000 verschiedene Reduktionsalgorithmen verwende. :rolleyes: Daher stelle ich mir die Frage, mit welchem Reduktionsalgorithmus ich den zu findenden Hash reduzieren soll? Gäbe es nur einen Reduktionsalgorithmus, wäre das alles kein Problem, aber man möchte ja Kollisionen vermeiden und verwendet daher für jede Spalte einen eigenen Algorithmus. :)

Greetz
Hackse
Hackse ist offline   Mit Zitat antworten
Alt 29.03.09, 19:16   #2 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Standard

Hallo,
für jeden einen eigen Reduktionsalgorithmus zu nutzen macht keinen Sinn. Nutze einen Algorithmus. Mit Kollisionen musst du leben.

Sprich:
In deiner Rainbowtable steht:
hash(red(hash(red(hash(red(hash(....red(Start1)... .)
hash(red(hash(red(hash(red(hash(....red(Start2)... .)
hash(red(hash(red(hash(red(hash(....red(Start3)... .)
....

Das es dabei zu Kollisionen kommen kann ist nunmal so und eigentlich kein Problem.
Elderan ist offline   Mit Zitat antworten
   
HaBOT
 

Werbung ist gerade online    
Alt 30.03.09, 02:07   #3 (permalink)
Themenstarter
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Standard

Hallo Elderan,
warum die statistische Wahrscheinlichkeit auf Kollisionen derart immens erhöhen? Ich sehe den Vorteil nicht. Bitte um Erläuterung.

Greetz
Hackse
Hackse ist offline   Mit Zitat antworten
Alt 30.03.09, 11:33   #4 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Standard

Hallo,
wenn du 10 000 verschiedene Reduktionsalgorithmen verwendest, wie kannst du dann ausschließen, dass diese keine Kollisionen produzieren?
Die Wahrscheinlichkeit ist die selbe.


Sagen wir f ist ein Reduktionsalgorithmus, dieser geht doch von:
f: {0,1}^128 -> {a,b,c,...,0,1,...,9}^8

Also f bildet einen 128 bit String auf ein 8 stelliges Wort aus a-z,0-9 ab.


Wenn man nun noch ein g hat:
g: {0,1}^128 -> {a,b,c,...,0,1,...,9}^8


Dann ist die Wahrscheinlichkeit, dass f(m) = f(n) mit n != m die selbe wie f(m) = g(n), sofern f und g Random Oracles sind.

Dass eine Kollision bei hash() Auftritt ist mehr als unwahrscheinlich, bei guten Hashalgorithmen. BeiMD5 hat man beispielsweise auch versucht per Brute Force eine Kollision gefunden, und trotz enormer Rechenpower hat man es nicht geschafft.


Durch mehrere Reduktionsalgorithmen gewinnt man nichts, man macht alles nur komplizierter.
Elderan ist offline   Mit Zitat antworten
Alt 30.03.09, 13:37   #5 (permalink)
Themenstarter
 
Benutzerbild von Hackse
 
Registriert seit: 31.07.06
Hackse Leistung: 8086
Standard

Zitat:
Original von Elderan
Hallo,
wenn du 10 000 verschiedene Reduktionsalgorithmen verwendest, wie kannst du dann ausschließen, dass diese keine Kollisionen produzieren?
Die Wahrscheinlichkeit ist die selbe.
(...)

Dann ist die Wahrscheinlichkeit, dass f(m) = f(n) mit n != m die selbe wie f(m) = g(n), sofern f und g Random Oracles sind.
Hallo Elderan,
für jede Chainspalte wird ein anderer Reduktionsalgorithmus verwendet. Sei N die Anzahl der Chainspalten und s eine Funktion, die innerhalb einer Chain die aktuell zu verarbeitende Spaltenzahl ausgibt, dann hat f(m) = f(n) mit n != m nur genau dann die selbe Eintrittswahrscheinlichkeit wie f(m) = g(n), wenn zusätzlich die Bedingung s(f[1](n)) = s(f[2](n)) erfüllt ist. Dies ist ein weiteres Kriterium, das die Wahrscheinlichkeit einer Kollision verringert.

In Worten:
Verwende ich nur einen Reduktionsalgorithmus, dann tritt eine Kollision genau dann auf, wenn ich an irgend einer Stelle der Rainbow-Table zwei verschiedene Hashes auf ein und denselben Klartext reduziere. Die Funktion wäre damit nicht mehr injektiv.
Verwende ich jedoch spaltenweise verschiedene Reduktionsalgorithmen, dann könnte eine Kollision nur dann auftreten, wenn ich in zwei Chains jedoch in genau der selben Spalte der Rainbow-Table zwei verschiedene Ciphers auf ein und denselben Klartext reduziere. Bei 10.000 Iterationen ist das Ganze somit sehr viel unwahrscheinlicher (Faktor 10.000).

Dass unter der Verwendung verschiedener Reduktionsalgorithmen und verschiedenen Ciphers in verschiedenen Spalten dennoch gleiche Ergebnisse resultieren können, sprich f(x) = g(y) mit x != y und s1 != s2, würde zu keiner Kollision führen, da unter der Verwendung verschiedener Reduktionsalgorithmen der weitere Chainverlauf unterschiedlich wäre, d.h. die Folgeglieder n wären wieder unterschiedlich: n(f(x)) != n(g(y)) mit x != y und s1 != s2

Greetz
Hackse
Hackse ist offline   Mit Zitat antworten
Alt 30.03.09, 13:59   #6 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Standard

Hallo,
Zitat:
Ergebnisse resultieren können, sprich f(x) = g(y) mit x != y und s1 != s2, würde zu keiner Kollision führen, da unter der Verwendung verschiedener Reduktionsalgorithmen der weitere Chainverlauf unterschiedlich wäre,
Okay da hast du recht. Die Kollisionswahrscheinlichkeit der Reduktionsfunktion für einen Hashwert wäre die selbe, aber der weitere Verlauf bzw. die weitere Produktion der Wörter wäre verschieden.


Allerdings kommt da dann deine ursprüngliche Frage wieder ins Spiel:
Zitat:
Daher stelle ich mir die Frage, mit welchem Reduktionsalgorithmus ich den zu findenden Hash reduzieren soll
Antwort: Man müsste alle Startpositionen ausprobieren. Bei einer Chain Länge von 10 000 also 10 000 Startpositionen.

Man muss eben abwegen was man benötigt. Dies erhöht natürlich den Aufwand für das Heraussuchen des Hashwertes.

Man könnte auch über weniger Reduktionsalgorithmen nachdenken, beispielsweise über nur 100 oder 1000. Die man dann immer nacheinander verwendet.
Elderan ist offline   Mit Zitat antworten
Antwort
   

Werbung ist gerade online    

[HaBo] » Security Area » Cryptography & Encryption » Rainbow-Tables in eigener Sache ...
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
verteiltes Rainbow Tables berechnen SyneX Cryptography & Encryption 1 01.01.09 21:09
Darf man Rainbow tables Verkaufen? p-g Cryptography & Encryption 11 29.11.08 16:38
Erzeugen von rainbow tables Iceman39 Cryptography & Encryption 2 26.09.06 22:35
LM Rainbow Tables piOo Cryptography & Encryption 1 05.12.05 11:19
Rainbow Tables im Cluster erzeugen? Taucha Cryptography & Encryption 2 14.05.05 13:48


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61