MD5-Rainbowtables: Speichergröße um mehr als 99% reduziert

Hi.
Bin relativ neu hier aber ich wollte trotzdem mal etwas bekanntgeben bzw. euch Fragen, ob man mit meiner neuen Methode etwas anfangen kann xD
Es geht darum, dass ich mir gerade in meiner Freizeit Gedanken über die Speicherreduzierung von MD5-Rainbowtables gemacht habe und jetzt weiß ich nicht genau ob das überhaupt ein "Durchbruch" ist bzw. ob das überhaupt sooo nützlich ist.
Folgendes:
Ich habe mir eine Methode ausgedacht, mit der man die gesamtspeichergröße der kompletten MD5-Rainbowtables (also wirklich 100% ALLER möglichen MD5-Hashes) auf 49 Trilliarden TB "verkleinert".
Das klingt jetzt erstmal imemr noch extrem viel xD Aber... man kann meine Methode auch auf Teil-Rainbowtables anwenden. Also..... ka.... z.B. nen Rainbowtable, das nur Zahlen, kleine Buchstaben und nur maximal 10 stellen lang ist.

Meine neue Komprimierungsrate lautet wie folgt:
Von der gesamtgröße der jeweiligen table (also 2 spalten, einmal klartext und einmal MD5) wird erstmal 50% abgezogen und von den restlichen 50% werden dann nochmal 99,98 % abgezogen. Was dann noch übrig bleibt, ist die neue gesamtspeichermenge für die rainbowtable. Es kommt dann noch nen overhead von vllt. 10 kb oder so dazu, je nachdem wie man gewisse dinge gerne handhaben möchte.

Da mit meiner Methode die table in kleinere Abschnitte unterteilt wird, ist das durchsuchen auch ziemlich performant. Man könnte es z.b. so handhaben, dass man jeden MD5-Hash innerhalb von maximal einer Stunde gefunden hat (je schneller der Hash gefunden werden soll, desto mehr overhead braucht meine Methode. Allerdings bewegt sich der overhead im Byte- bzw. maximal im Kilobyte-Bereich).

Allerdings hat mein System einen Nachteil:
Das erstellen dieser "speziellen Tables" dauert länger als die normalen Tables. Aber wenn man eine vorhandene table nimmt und diese dann nur in mein table-format umwandelt um speicherplatz zu sparen, geht es natürlich genauso rasend schnell, da die table an sich ja schon existiert.

Also.... alles verstanden?
Sagen wir also, dass wir eine Rainbowtable haben mit Zahlen, Kleinbuchstaben und maximal 10 stellen.
Sagen wir, dass diese table mit normalen 2 spalten ca. 100 GB groß wäre (ist vermutlich viel zu klein aber ist ja nur nen Beispiel).
Dann würde meine umkonvertierung erstmal 50 GB sparen und dann nochmal 99,98 % vom Rest.
Übrig blieben dann ca. 10.737.418 Byte groß, also ca. 10 MB.


Wie ich oben schon erwähnt habe, kann man trotdem noch nicht die gesamten MD5-Hashes speichern, da man wohl kaum die "reduzierten und kleinen" 49 Trillionen TB irgendwo "frei" hat (ursprünglich würde man etwas über 99 Quadrillionen brauchen ^^°).

Klingt das System trotzdem interessant?
Wollte erstmal eure Meinung generell dazu haben, bevor ich die Methode an sich hier reinstelle und beschreibe (obwohl sie eigentlich total easy ist) :)

Gruß
spYro
 
ich bin mir nich ganz sicher, wie du dir die 99,98% splatzeinspaarung erkaufen willst. wenn du nicht grade irgendwie nen ganz anderen ansatz verfolgst würde das bedeuten, dass man die chainslength nach oben treibt und die berechnungsdauer ansteigt ... oder?
also ich wäre auf jeden interessiert. ;)
 
rainbow tables sind als "time vs memory tradeoff" entworfen ... da sich durch egal welchen ansatz, abgesehen von angriffen auf den zugrunde liegenden algorithmus, die komplexität und damit die gesammt datenmenge der abbildung nicht reduzieren lässt, ist es unwahrscheinlich, dass wir hier was wirklich neues sehen werden, was am ende funktioniert ... aber ich schaue es mir gerne mal an ;)
 
Also.... alles verstanden?
Du beschreibst nirgendwo, wie dein System funktionieren soll. Du behauptest nur, dass man damit erst 50% und dann 99,98% vom Speicherplatz einspart.
Wie du das aber bewerkstelligen willst, steht nirgendwo.

Ansonsten wie easteregg sagte:
Je weniger Speicherplatz ich brauche, umso mehr Rechenzeit benötige ich. Wenn du also extrem viel weniger Speicherplatz brauchst, brauchst du i.d.R. auch extrem viel mehr Rechenzeit.


Last but not least:
Rainbow-Tables sind nicht 2 Spalten, eine mit Klartext, eine mit dem MD5 Hash. Sondern das System ist viel komplizierter und ausgeklügelter, um einen guten Trade-Off zwischen Speicherplatz und Rechenzeit zu haben.
Siehe Wikipedia oder die Forensuche wie Rainbow-Tables funktionieren und wie diese Hashs abspeichern.
Das könnte vielleicht die ein oder andere Frage von dir beantworten.
 
Du beschreibst nirgendwo, wie dein System funktionieren soll. Du behauptest nur, dass man damit erst 50% und dann 99,98% vom Speicherplatz einspart.
Wie du das aber bewerkstelligen willst, steht nirgendwo.

Ansonsten wie easteregg sagte:
Je weniger Speicherplatz ich brauche, umso mehr Rechenzeit benötige ich. Wenn du also extrem viel weniger Speicherplatz brauchst, brauchst du i.d.R. auch extrem viel mehr Rechenzeit.


Last but not least:
Rainbow-Tables sind nicht 2 Spalten, eine mit Klartext, eine mit dem MD5 Hash. Sondern das System ist viel komplizierter und ausgeklügelter, um einen guten Trade-Off zwischen Speicherplatz und Rechenzeit zu haben.
Siehe Wikipedia oder die Forensuche wie Rainbow-Tables funktionieren und wie diese Hashs abspeichern.
Das könnte vielleicht die ein oder andere Frage von dir beantworten.

Oha. Und ich dachte immer, dass die tables halt normale Tabellen sind, zweispaltig.
Hm... Meine Methode ist zwar noch nen ticken anders als die normalen Tables, aber vllt ist dann der Speicherverbrauch doch nicht so viel geringer.

Ich hatte es ungefähr so angedacht:
Angenommen man hat genug speicherplatz und will 100% der existierenden MD5-Hashes speichern (3,40282367 x 10^38 Möglichkeiten), dann würde ich zu aller erst ne normale 2-spaltige Tabelle erstellen mit allen werten (plain/hash). Danach würde ich die tabelle alphabetisch nach den hashes sortieren (a-z). Dann würde ich immer abschnitte erstellen und den jeweils ersten und letzten hash als begrenzer in der hash-spalte lassen, die restlichen hash-werte rauslöschen. Dann hätte man, bis auf 2x16 Byte, 50% der vorher-speichermenge gespart.
Dann packt man dieses Paket mit 7-Zip als *.7z mit allen Komprimierungswerten auf maximum. Dadurch schrumpft z.B. eine 320 MB große Liste auf sagenhafte 50 kb zusammen.
Jetzt hat man also mehrere "Pakete", die jeweils nur die plain-wörter der hashes zwischen dem start-hash und dem end-hash des jeweiligen paketes haben. Also verkürzt hat man dann:

Code:
Paket: 1
start: aaa
ende: abb
- bla
- blubb
- noch nen plaintext
- u.s.w.

Paket: 2
start: abb
ende: acc
- lala
- lolo
- jojo
- tjatja


u.s.w. würden dann diese pakete aussehen. Jetzt müsste man, wenn man z.B. als hash den string "abz" hat, einfach das Paket #2 entpacken und der reihe nach die dortigen plain-strings in md5 konvertieren und vergleichen. Dadurch kann man auch die maximale Zeit abschätzen. Wenn ein Paket jeweils 1.000 Einträge hat und mein PC 10 keys pro sekunde schafft, dann braucht er für ein paket maximal 100 sekunden.

Wenn man das ganze nicht mit den kompletten tables macht sondern das ganze z.b. auf "a-z & 0-9" anwendet, geht es im prinziep genau so, nur dass nach dem durchlauf des passenden paketes nicht 100% feststeht, dass der key gefunden wurde, da die plain-strings dort ja dann nur teile der hash-werte darstellen, da in meinem kleinen beispiel von oben z.B. der hash "aby" fehlen könnte, weil er den plaintext "tZgU+*" darstellen würde, welcher nicht in das schema "a-z, 0-9" passt und daher nicht in diesem wörterbuch erscheint.

Dadurch würde man schon einiges an speicherplatz sparen, finde ich. Einig das entpacken der pakete könnte dann immer eine weile dauern, aber das liegt daran, wie groß man diese pakete werden lässt.

Und? Euer Feedback? ^^°°°

MFG
spYro
 
Wie würde dann eine Suche nach einem Hash funktionieren? Man ist ja nicht daran interessiert, welchen Hash "abc" hat, sondern welcher Plaintext den Hash "XYZ" produziert. Immer eine Datei erst zu entpacken und in den Speicher zu laden, dauert länger, als den Hash einfach zu berechnen.

Eine Rainbowtable speichert schon jetzt nur den Startwert und den Endhash, ohne "Zwischenschritte".

Kurz gesagt, funktioniert es so:
Code:
hash(startwert) -> reduction_des_hashs -> hash(neuer_wert)->reduction_des_hashs->hash(endwert)
ein Startwert wird gehasht, dann mittels einer Reduktionsfunktion aus dem Hash irgendein Wort gebildet und wieder gehasht und wieder reduziert, bis man irgendwann sagt "es reicht" und den Endhash speichert.
Das Ganze wird als Sequenz = " Chain" bezeichnet. Die Anzahl der Reduktion+Hash Vorgänge wird "Chain-length" genannt.

Das wichtigste (und schwierigste) daran ist die Reduktionsfunktion, die aus dem Hash ein Klartextwort macht.
Denn dadurch generierten Wörter sollten möglichst den Vorgaben entsprechen (also z.B a-z und 0-9 enthalten) UND möglichst nicht doppelt in verschiedenen Chains vorkommen (in der gleichen Chain sowieso nicht) UND zudem möglichst den gesamten gewünschten Bereich an Kombinationen abdecken.

Das Nachschlagen funktioniert dann so:
zuerst wird der gesuchte Hash mit den gespeichereten verglichen.
Ist der nicht vorhanden, wird die Reduktionsfunktion auf diesen Hash angewendet und das Ergebnis gehasht und nach diesem (neuen) Hash gesucht (usw. insgesamt höchsten "Chain-length" Versuche).

Wenn der Hash nun gefunden wurde, hat man quasi die Zeile und liest den Startwert ab.
Mit diesem führt man die ganzen "Hash -> Vergleich -> wenn_kein_treffer -> Reduktion -> Hash -> Vergleich ..." bis man den Klartext für den gesuchten Hash erhält.

Beispiel:
Tabellenbildung:
Code:
Reduktion: reduct(input) = nimm_die_ersten_6_zeichen_des_inputs
Chain-len: 4
Einträge zwischen | ... |  werden nicht in der Tabelle gespeichert und sind
nur zum Nachvollziehen da.
Start: |... | Hash:
hi | (49f68a5c8493ec2c0bf489821c21fc3b -> 49f68a) => (d230c8c9f0ceebcfd5ad87402522468d -> d230c8)  => (c4d3242350c4b841e382b94defd50dfc -> c4d324) | :5bb4e0804a68f4068ce4b3b36d3bae53
hello | (5d41402abc4b2a76b9719d911017c592 -> 5d4140) => (708e2ee5fc99263e982e5dbed6c1c419 -> 708e2e) => (ba71cccbadbc0b21c5e65a5ffcc39eb5 -> ba71cc) | :2f92d69c1453439fd5c2910f92ab5e58
"hi" wird also MD5 gehasht, daraus werden 6 Zeichen als neues Wort genommen, wieder gehasht usw.
d.h unsere "echte" Tabelle sieht dann so aus:
Code:
Chain-len: 4
Reduct_funktion: reduct(input) = nimm_die_ersten_6_zeichen_des_inputs
hi:5bb4e0804a68f4068ce4b3b36d3bae53
hello:2f92d69c1453439fd5c2910f92ab5e58
"beinhaltet" aber 8 Text:Hash Zuordnungen (besser gesagt: man kann damit Plaintexte für 8 Hashes finden)
Und ja, die Reduktionsfunktion ist unter aller Sau (eine annehmbare zu finden ist auch keine triviale Aufgabe ;) )

Jetzt haben wir z.B den Hash "5d41402abc4b2a76b9719d911017c592"
und möchten den Klartext nachschlagen:
Schritt1:
Suche nach 5d41402abc4b2a76b9719d911017c592 -> nix
Schritt2:
reduziere 5d41402abc4b2a76b9719d911017c592 = 5d4140
hashe 5d4140 = 708e2ee5fc99263e982e5dbed6c1c419
suche 708e2ee5fc99263e982e5dbed6c1c419 in Tabelle: nix
Schritt3:
reduziere 708e2ee5fc99263e982e5dbed6c1c419 = 708e2e
hashe 708e2e = ba71cccbadbc0b21c5e65a5ffcc39eb5
suche in der Tabelle: nix
Schritt4:
reduziere ba71cccbadbc0b21c5e65a5ffcc39eb5 = ba71cc
hashe ba71cc = 2f92d69c1453439fd5c2910f92ab5e58
suche nach 2f92d69c1453439fd5c2910f92ab5e58 in der Tabelle:
volltreffer, 2 Zeile. Startwert: "hello"

jetzt braucht man nur die Sequenz mit dem Startwert "hello" durchzulaufen
und zu schauen, wann der generierten Hashs unserem gesuchten entspricht:
Schritt1:
md5("hello") = 5d41402abc4b2a76b9719d911017c592 => Volltreffer.


Und? Euer Feedback? ^^°°°
Man sollte sich mit dem, was man verbessern möchte, auseinandersetzen :wink:

PS: das Beispiel soll nur das Prinzip veranschaulichen - die tatsächliche Umsetzung, sowie einige Details beim Nachschlagen/Generieren, können (und werden) sich bei "echten" RT-Implementierungen unterscheiden.
 
Zuletzt bearbeitet:
ich versteh dich noch nich so richtig, nehmen wir das mal anhand von dem beispiel hier:

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi:08365716d10758c6956ab85f037c747e
nL62vR:0a291c10a4358b4b9dc083c2d326e8bb
Scgyrb:0b2ffd75d2e400013fb486558a09366f
1HgoKQ:0befd2daddae2a364fc7f5d1a069fb11
5FaMVB:11ecd07368d3f766292c300976369811
TRCIRM:127a9d9cd7daf6d8e483a4f716b833ec
iu7so0:14c6db95b212e9c9ccd99138050ac2ea
Rvq2Ql:15495353602e23f05ed3e8362fc78460
LUxhy2:1587b3b303afe5252c83990bbca4e399
WYbxod:1712b001bc75370ba293d58e645c78df
wDpIPi:17333454a2280ca8ff3d758ca4b3f357
qxqh1a:180d1a6c0cbc5e7e499e282a3ffa754c
pLUZ1c:19a6977f42c903ce2f965851fb45018b
9YmRyF:1b1d95f533f937a9aa1c9bac58005eb7
332rlk:1b51a81ba4f594b05ebaf072a5933163
czAkBy:1fda7d0452e4ac3a36dc265aee8d19b3
FCvCtk:204533969df8495989da65e60962d742
BvZktw:2066ab8e6b6637c4b32794e5059a6ba1
2FDGVV:2a9e3cbaaa0af35901b6b08bc0883190
eR6iSC:2c56cf1685c3744d5884566ca943112d
WOv2s0:2c8813089e4d46485858147c8e744c67
kvvqnq:2ca69001c97e9259b6885e7406125948
nfqP4k:2ef88ba4dde24eab9dd6d9a8211f9a02
a2LtaM:313186c42bb17e6008f7c35cb19d0d09
8V8FSJ:342b05ea81047d7152a836d780151d9e
ZWPiI5:346e02451a2c58579e41ca0ceba4226f
yMBsXr:3515b945bfcf7ef586cb5da3a335e63e
keWQDv:35601a77d1c35b3bb40a7977f8f84151
le4vLj:36b5713075499533f34b41ad72f3fcab
MXbTpJ:39afb36cef6c981b7063bb6c9969c3f9
xJDhs4:4251fa3e5a72a4ad7cbbcadf5e311c53
fWfGEN:42a643b5cb02f2d7740c8357354c3bd3
sTHiSY:4492d008a892afd79666d320eb3dce7e
Hb1nvi:449979893c10b10f54c987bd5505dfc4
ksScVU:45b7468a20df6cae6d49a3f394886b31
xx2Me1:49e9db2dcebe30a4174d840c2f3be71c
90h69t:4ff8d755ce8befc4c7586c3b2b442121
78dVvP:50cb970c486ca014b9c5862c19ea9593
aT6WVC:54e225f7d55de8be57ded9bb57e93f94
mR9fgM:5501be460f4c479063a4eb9940be4bd3
atZnwK:55026cc10adc1a31e97a31003ede1e8b
cejX7d:55afee7ea51317f0f978a98d29cc1de1
9ztMVX:58b8a377a68cdf94e7eb31dd9c2dfe60
pLEMDN:5baec275c3d1bd7a25f98096f206d4b4
wLlO6p:5c63ce693bdf7184abab1ba46bd20f80
rTFntY:6b41a09a43df618f8bb2d2794c9db2c8
pInXS3:6ed63e4bbfcf6b79c454cdd5f4d9e494
405WED:6f14aa1c7df0431d693fc1a929f394b5
CEZiFz:7019c8bb9f83164769c8dc2b6d6928ee
Wzm1J5:7084e715ad3858eb50e3c4fdc6337ec8
f24MO4:70bc6927a07aa9b3b7f1a7570210f5ba
fGzxzk:71cadd28afd2da8d78a777f47ef7f78b
2TrUqH:771a72a4831fa14680603faf55f174fa
2s96s4:77841df834ce089645bbfc5bd93390a2
ihiLVe:77bb621c21d60ee659779169b21e867f
JtcqVl:798ebcd8a6ff18827e69b6c1aa9f3b6d
XAKbHg:79b29b178c886b7b06533fc7a85d19ce
jpr0yD:7c212e43fa4d64c3be74cf6dfd9e91c9
ISTQtp:7d5065c0cefbf88933515d800c4fc769
T7RTWo:7dba66a62ad29ce10cfc6b92b2ecea24
C89lmQ:7fa458a5ff2207f6ae5ae4d44c66e5ca
7aeJwN:852291fc76020dba93869e5c5cba166d
CM3A6o:85c6ea54df9667ad91ba9d8771265896
bLcbsE:895e2ba0c23b04763cdf1bf048d2d4de
JdfGBC:8bca09b72470befdcde3e515621400ff
aA8UMI:8d8624831d7bea944d4eaffb9168d80e
Getl5M:8eeaea8ed77971c1d186057dd60164c7
kEdUy7:9099da34c8e1953cc635c64bfb0ff761
M49uN5:9f046e1711bee9d129fd7552c499c188
zYrIb5:a04149e58c0f720d1549cc67494a2b42
0Hl5bf:a5f6ad70eed874239259b7ec1ea34a00
aKK19Q:a8ca891ae60b06389ce6335c07b67fed
PZ0pNH:acbf116218df691bf412c5ecf20e4112
AUq8et:ace0b8faea7e93a0e05ed4c0889cdb60
Zc5RWD:ad4ada398b7af8ccc5144276debd8639
LpCs9M:b52d51b4e2152a98852a4aec62342ca7
Fs89tv:b6c985626ef7cb5f1662ee68a236593b
nrUHNe:b89f7b4474334bf04ecaa3c6424d9f0a
tAytC4:cc39e6e635f6e99b62c794ce9e0c0920
JJ7xDF:cc9f4b071f566115dece776e4a75d50c
YIDeHy:cf17fc21a200f4cf11fed3ee09fa27fe
wXorkG:cfd144ce1654f80165af294af2109cc6
cXOheH:d2bc6d194c533e058e163edee875d8b5
1tmNjp:d39f365e22f82f5a839210678c6c3965
EP9aIi:d68ce2afb106db442dd6559429cc7b7e
Jn9CZN:dac879e0f41319f80915f587f7b6662d
Xh0wIK:ddc9e96ec490dc78f17dbdff04ed0f63
xv94LL:de09a68291489821187308c17821a393
jALzSi:e1a8898b72d1a4053d1e94043500f378
VZaBwx:e26aedf8ab37f970dd6a2a00062ce85b
7pGvRS:e3ab269c369b5723fd9b7ae3abe1758b
c8Clca:e4eea1ac9d471126c54e112bfcecad08
A1d94h:ee2bb2e8a85a7ad9371f59215d6500df
jZm7mL:f2d44250960ea2e514b3844f94edd7d6
XJixN3:f4f552ecc8860a8225fc5c06cd8f759a
7zyGcO:f5c6d672d9a1e1098e0b116ca8afcac7
VT46hy:f5f26df0f45e088233d9964a47845dab
j9ou4O:f7ee7861de3e22b6484c4389c52649de
j4B1cQ:fda2b19e9b24eb91394ee3c078713f0d

die hashes sind schon sortiert.

jetzt nem ich mir zb das paket 1-10

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi:08365716d10758c6956ab85f037c747e
nL62vR:0a291c10a4358b4b9dc083c2d326e8bb
Scgyrb:0b2ffd75d2e400013fb486558a09366f
1HgoKQ:0befd2daddae2a364fc7f5d1a069fb11
5FaMVB:11ecd07368d3f766292c300976369811
TRCIRM:127a9d9cd7daf6d8e483a4f716b833ec
iu7so0:14c6db95b212e9c9ccd99138050ac2ea
Rvq2Ql:15495353602e23f05ed3e8362fc78460
LUxhy2:1587b3b303afe5252c83990bbca4e399

und speicher mir davon nur 1 und 10?

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi
nL62vR
Scgyrb
1HgoKQ
5FaMVB
TRCIRM
iu7so0
Rvq2Ql
LUxhy2:1587b3b303afe5252c83990bbca4e399

und wenn ich jetzt den hash 11ecd07368d3f766292c300976369811 suche, dann guck ich in dem abschnitt dazwischen was davon eben dem entspricht?

ja und, das is dann quasi nen riesen wörterbuch mit paar ankern zum schnelleren suchen....

aber im endeffekt ist es trotzdem größer als ne rainbowtable

edit://wieso is cdw immer schneller... :P
 
Zuletzt bearbeitet:
ich versteh dich noch nich so richtig, nehmen wir das mal anhand von dem beispiel hier:

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi:08365716d10758c6956ab85f037c747e
nL62vR:0a291c10a4358b4b9dc083c2d326e8bb
Scgyrb:0b2ffd75d2e400013fb486558a09366f
1HgoKQ:0befd2daddae2a364fc7f5d1a069fb11
5FaMVB:11ecd07368d3f766292c300976369811
TRCIRM:127a9d9cd7daf6d8e483a4f716b833ec
iu7so0:14c6db95b212e9c9ccd99138050ac2ea
Rvq2Ql:15495353602e23f05ed3e8362fc78460
LUxhy2:1587b3b303afe5252c83990bbca4e399
WYbxod:1712b001bc75370ba293d58e645c78df
wDpIPi:17333454a2280ca8ff3d758ca4b3f357
qxqh1a:180d1a6c0cbc5e7e499e282a3ffa754c
pLUZ1c:19a6977f42c903ce2f965851fb45018b
9YmRyF:1b1d95f533f937a9aa1c9bac58005eb7
332rlk:1b51a81ba4f594b05ebaf072a5933163
czAkBy:1fda7d0452e4ac3a36dc265aee8d19b3
FCvCtk:204533969df8495989da65e60962d742
BvZktw:2066ab8e6b6637c4b32794e5059a6ba1
2FDGVV:2a9e3cbaaa0af35901b6b08bc0883190
eR6iSC:2c56cf1685c3744d5884566ca943112d
WOv2s0:2c8813089e4d46485858147c8e744c67
kvvqnq:2ca69001c97e9259b6885e7406125948
nfqP4k:2ef88ba4dde24eab9dd6d9a8211f9a02
a2LtaM:313186c42bb17e6008f7c35cb19d0d09
8V8FSJ:342b05ea81047d7152a836d780151d9e
ZWPiI5:346e02451a2c58579e41ca0ceba4226f
yMBsXr:3515b945bfcf7ef586cb5da3a335e63e
keWQDv:35601a77d1c35b3bb40a7977f8f84151
le4vLj:36b5713075499533f34b41ad72f3fcab
MXbTpJ:39afb36cef6c981b7063bb6c9969c3f9
xJDhs4:4251fa3e5a72a4ad7cbbcadf5e311c53
fWfGEN:42a643b5cb02f2d7740c8357354c3bd3
sTHiSY:4492d008a892afd79666d320eb3dce7e
Hb1nvi:449979893c10b10f54c987bd5505dfc4
ksScVU:45b7468a20df6cae6d49a3f394886b31
xx2Me1:49e9db2dcebe30a4174d840c2f3be71c
90h69t:4ff8d755ce8befc4c7586c3b2b442121
78dVvP:50cb970c486ca014b9c5862c19ea9593
aT6WVC:54e225f7d55de8be57ded9bb57e93f94
mR9fgM:5501be460f4c479063a4eb9940be4bd3
atZnwK:55026cc10adc1a31e97a31003ede1e8b
cejX7d:55afee7ea51317f0f978a98d29cc1de1
9ztMVX:58b8a377a68cdf94e7eb31dd9c2dfe60
pLEMDN:5baec275c3d1bd7a25f98096f206d4b4
wLlO6p:5c63ce693bdf7184abab1ba46bd20f80
rTFntY:6b41a09a43df618f8bb2d2794c9db2c8
pInXS3:6ed63e4bbfcf6b79c454cdd5f4d9e494
405WED:6f14aa1c7df0431d693fc1a929f394b5
CEZiFz:7019c8bb9f83164769c8dc2b6d6928ee
Wzm1J5:7084e715ad3858eb50e3c4fdc6337ec8
f24MO4:70bc6927a07aa9b3b7f1a7570210f5ba
fGzxzk:71cadd28afd2da8d78a777f47ef7f78b
2TrUqH:771a72a4831fa14680603faf55f174fa
2s96s4:77841df834ce089645bbfc5bd93390a2
ihiLVe:77bb621c21d60ee659779169b21e867f
JtcqVl:798ebcd8a6ff18827e69b6c1aa9f3b6d
XAKbHg:79b29b178c886b7b06533fc7a85d19ce
jpr0yD:7c212e43fa4d64c3be74cf6dfd9e91c9
ISTQtp:7d5065c0cefbf88933515d800c4fc769
T7RTWo:7dba66a62ad29ce10cfc6b92b2ecea24
C89lmQ:7fa458a5ff2207f6ae5ae4d44c66e5ca
7aeJwN:852291fc76020dba93869e5c5cba166d
CM3A6o:85c6ea54df9667ad91ba9d8771265896
bLcbsE:895e2ba0c23b04763cdf1bf048d2d4de
JdfGBC:8bca09b72470befdcde3e515621400ff
aA8UMI:8d8624831d7bea944d4eaffb9168d80e
Getl5M:8eeaea8ed77971c1d186057dd60164c7
kEdUy7:9099da34c8e1953cc635c64bfb0ff761
M49uN5:9f046e1711bee9d129fd7552c499c188
zYrIb5:a04149e58c0f720d1549cc67494a2b42
0Hl5bf:a5f6ad70eed874239259b7ec1ea34a00
aKK19Q:a8ca891ae60b06389ce6335c07b67fed
PZ0pNH:acbf116218df691bf412c5ecf20e4112
AUq8et:ace0b8faea7e93a0e05ed4c0889cdb60
Zc5RWD:ad4ada398b7af8ccc5144276debd8639
LpCs9M:b52d51b4e2152a98852a4aec62342ca7
Fs89tv:b6c985626ef7cb5f1662ee68a236593b
nrUHNe:b89f7b4474334bf04ecaa3c6424d9f0a
tAytC4:cc39e6e635f6e99b62c794ce9e0c0920
JJ7xDF:cc9f4b071f566115dece776e4a75d50c
YIDeHy:cf17fc21a200f4cf11fed3ee09fa27fe
wXorkG:cfd144ce1654f80165af294af2109cc6
cXOheH:d2bc6d194c533e058e163edee875d8b5
1tmNjp:d39f365e22f82f5a839210678c6c3965
EP9aIi:d68ce2afb106db442dd6559429cc7b7e
Jn9CZN:dac879e0f41319f80915f587f7b6662d
Xh0wIK:ddc9e96ec490dc78f17dbdff04ed0f63
xv94LL:de09a68291489821187308c17821a393
jALzSi:e1a8898b72d1a4053d1e94043500f378
VZaBwx:e26aedf8ab37f970dd6a2a00062ce85b
7pGvRS:e3ab269c369b5723fd9b7ae3abe1758b
c8Clca:e4eea1ac9d471126c54e112bfcecad08
A1d94h:ee2bb2e8a85a7ad9371f59215d6500df
jZm7mL:f2d44250960ea2e514b3844f94edd7d6
XJixN3:f4f552ecc8860a8225fc5c06cd8f759a
7zyGcO:f5c6d672d9a1e1098e0b116ca8afcac7
VT46hy:f5f26df0f45e088233d9964a47845dab
j9ou4O:f7ee7861de3e22b6484c4389c52649de
j4B1cQ:fda2b19e9b24eb91394ee3c078713f0d
die hashes sind schon sortiert.

jetzt nem ich mir zb das paket 1-10

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi:08365716d10758c6956ab85f037c747e
nL62vR:0a291c10a4358b4b9dc083c2d326e8bb
Scgyrb:0b2ffd75d2e400013fb486558a09366f
1HgoKQ:0befd2daddae2a364fc7f5d1a069fb11
5FaMVB:11ecd07368d3f766292c300976369811
TRCIRM:127a9d9cd7daf6d8e483a4f716b833ec
iu7so0:14c6db95b212e9c9ccd99138050ac2ea
Rvq2Ql:15495353602e23f05ed3e8362fc78460
LUxhy2:1587b3b303afe5252c83990bbca4e399
und speicher mir davon nur 1 und 10?

Code:
idpYoS:04078623c2b1d8cbe9f6f01d79775150
cHjVQi
nL62vR
Scgyrb
1HgoKQ
5FaMVB
TRCIRM
iu7so0
Rvq2Ql
LUxhy2:1587b3b303afe5252c83990bbca4e399
und wenn ich jetzt den hash 11ecd07368d3f766292c300976369811 suche, dann guck ich in dem abschnitt dazwischen was davon eben dem entspricht?

ja und, das is dann quasi nen riesen wörterbuch mit paar ankern zum schnelleren suchen....

aber im endeffekt ist es trotzdem größer als ne rainbowtable

edit://wieso is cdw immer schneller... :P
args jetzt kommen die Antworten schneller als ich tippen kann xD

@CDW:
Sau fettes Danke an deine erklärung. Bin bisher echt einfach von tabellen-tables ausgegangen, die stur die "übersetzungen" speichern. Da wäre meine Methode dann echt sparsamer gewesen.
Aber die eigentlichen rainbow-tables sind ja um längen geiler von der idee her (verdammt da ist jemand auf der welt, der mindestens genausoklug ist wie ich *grrr* xD).


@easteregg:
Jop, es wäre immer noch ne art wörterbuch, wobei es halt verkürzt ist. Das cracker-tool guckt sich halt den zu knackenden hash an, guckt bei den start-end-hashes, wo der hash "zwischen passt", entpackt dann das entsprechende paket und hat dann ne liste von x plainwörtern, von denen eines dann (wenn in der table vorhanden) der plaintext für den hash ist. Dann muss das tool nurnoch diese 1-spaltige liste durchgehen und ist dann fertig.

Aber wie gesagt: Das simple Wort Rainbow-"Table" hat mich bisher davon abgehalten dahinter etwas anderes als ne stinknormale tabelle zu vermuten^^°°

Danke für die super erklärung (auch wenn ich das eine beispiel am ende 2 mal lesen musste, um da noch durchzusteigen :P ).

Mal sehen, ob mir in nen paar jahren noch nen besserer algorithmus einfällt und ich damit reich werde :P

Viele Grüße
spYro
 
Zurück
Oben