suit: md5-Codierung

Beitrag lesen

Theoretisch übernimmt die MD5-Prüfsummenberechnung nicht alle Informationen, die nötig sind, um die ursprünglichen Werte daraus zu errechnen.

das ist auch praktisch so, jeder hash-algorithmus ist irreversibel - es ist unmöglich aus einem hash den klartext zurückzurechnen - ein dvd image, der string "hallo" und dein 28-stelliges password aus buchstaben und zahlen könnten rein zufällig die selbe md5-summe haben

Man könnte per Brute-Force versuchen, Kombinationen zu erzeugen, welche den gleichen MD5-Wert erzeugen.

zu einem hash eine passende zeichenfolge zu finden die diesen hash erzeugt (preimage) ist extrem zeitaufwändig und bei einem potentiell sicheren hash-algorithmus logisch betrachtet unsinn - bei md5 sind zudem aktuell keine mathematischen preimage-methoden bekannt, somit kann man mit bruteforce lange "probieren"

md5 hat theoretisch 3,4x10^38 mögliche kombinationen - angenommen man errechnet jetzt pro sekunden 1000 hashes, dann sind das etwa 10,8 quadrilliarden (1,08x10^27) jahre - da kann man lange bruteforcen, das zahlt sich niemals aus ;)

die von sven genannte methode mit rainbow tables ist wesentlich praktikabler, hier werden mit beliebigen werten mit sagen wir 4 bis 16 zeichen einfach hashes erzeugt - diese hashes (übrigens unglaublich riesige datenmengen) werden dann mit den bereits gesammelten hashes verglichen - dann kann man dort auf kolisionen hoffen

Die Kenntnis der $variable ist dabei möglicherweise hilfreich, aber nicht notwendig.

ein hash mit salt (also ein vorangestellte variable) hat den vorteil, dass man in einer rainbow-tabelle nicht so schnell auf bekannte hashes stößt

der md5-hash von "12345", "password" oder "abc" dürfte in so ziemlich jeder gut sortierten tabelle vorhanden sein, der hash für "meinsalt12345", "meinsaltpassword" oder "meinsaltabc" ist da schon unwahrscheinlich

ein salt macht den hash selbst nicht sicherer, verhindert aber das schnelle "zurückvergleichen" von dämlichen passwörtern oder passwörtern mit schnell berechenbaren, kurzen zeichenabfolgen wie eben die sinnvollen passwörter "123", "xyz" oder ähnliches

die kenntnis des salt-wertes ist besonders dann hilfreich, wenn man keine kollision benötigt sondern das exakte passwort - wenn das "echte" passwort "1111" ist und dies zufällig auf "2222" eine kolision kann man sich zwar einloggen, weiss aber nicht sicher ob "2222" auch das richtige passwort ist - bei "x1111" mit der kollision auf "32443" (wobei x für den salt steht) weiss man bei kenntnis von x bei "x1111" mit fast 100%iger sicherheit, dass es das klartext passwort ist, bei "32443" weiss mant 100%ig sicher, dass es nicht das passwort ist, aber zumindest zum einloggen (bei diesem salt) reicht

im übrigen ist es wie gesagt bei md5 quasi unmöglich einen wert zu finden, der einen bereis BEKANNTEN hash liefert - birthday-angriffe sind jedoch in md5 sehr leicht möglich, hier gehts darum zwei beliebige texte zu finden, die jeweis einen beliebigen, identischen aber vorher UNBEKANNTEN hash liefern - das lässt sich in der praxis aber nicht zum "entschlüsseln" von bekannten hashes ausnutzen sondern vorangig dazu, um digitale signaturen zu fälschen