Mich fragte mal jemand, wieso man mit md5 "verschlüsselte" Passwörter nicht wieder entschlüsseln kann. Dies liegt daran, dass md5 eine Einwegfunktion ist, d.h. eine Funktion, die sich nicht umkehren lässt. Es gibt unendlich viele Funktionsargumente, aber nur eine beschränkte (wenn auch sehr große) Anzahl an Funktionswerten bzw. Bildern. md5 verschlüsselt nämlich nicht, er bildet nur eine Prüfsumme.
Klingt vielleicht auf den ersten Blick verwirrend, ist aber eigentlich ganz einfach. Ich versuche im Folgenden, den Sachverhalt mit einem Beispiel zu verdeutlichen. (Mit der Thematik Vertraute finden sicherlich einige Dinge, die im Detail nicht ganz stimmen; für einen ersten Einstieg in die Materie halte ich es jedoch für verschmerzbar, wenn gewisse Details nicht 100%ig auf den realen Fall übertragbar sind.)
Man stelle sich vor, seine Bankkarten-PIN laute 4711 (entspricht dem Passwort eines Benutzers). Damit sich diese bei der Übertragung vom Geldautomat (entspricht dem Eingabeformular im Browser) zum zentralen Bankserver (entspricht dem Server einer Internetseite) nicht abfängen lässt, wird eine md5-Ähnliche Funktion auf die PIN angewandt, beispielsweise quersumme(4711) = 13. Der zentrale Server überprüft nun, ob die übertragene 13 gleich der Quersumme der gespeicherten PIN 4711 ist.
Wenn nun ein böser Bub die Übertragung anzapft und die Prüfsumme 13 abfängt, so ist es ihm möglich, diese Prüfesumme zu verwenden, um an diesem Automaten Geld abzuheben. Es ist ihm jedoch nicht möglich, daraus auf die geheime PIN zu schließen. Diese kann nämlich nicht nur 4711, sondern bspw. auch 9400 oder 1237 lauten. Es ist nicht möglich, aus der Quersumme auf die ursprüngliche Zahl zu schließen!
Ähnlich verhält es sich auch beim md5-Algorithmus, einmal angewandt kann die Eingabe nicht wieder entschlüsselt werden.
Es ist jedoch möglich, md5 zu knacken, bspw. mittels Brute-Force-Angriffs. Dies bedeutet, dass alle möglichen Eingaben durchprobiert werden, bis man Erfolg hat. Man erhält dadurch (nach einer unter Umständen sehr langen Zeit) ein Argument, für das md5 den selben Funktionswert zurück gibt wie beim "korrekten" Passwort. Abhängen vom gewählten Passwort ist die Chance mehr oder weniger klein, dass es sich dabei um das ursprüngliche Passwort handeln. Ohne weitere Informationen (bspw. Kontext-Informationen) ist es jedoch nicht möglich festzustellen, ob das erhaltende Argument tatsächlich das Passwort des Nutzers ist.
Mit einem kleinen Trick kann man die Sicherheit von md5 oder anderer Hashing-Algorithmen wie SHA-1 jedoch erhöhen: mit sogenannten Salts. Dies ist ein für jede Anwendung spezifischer Wert, der zusätzlich zum Argument übergeben wird. Dadurch ist es einem Angreifer, selbst wenn er einen Hash (Funktionswert) oder gar ein mögliches Argument besitzt, nicht möglich, auf mehr als eine Seite zuzugreifen.
Auf mein obiges Beispiels von Geldautomaten bezogen: Stellen wir uns vor, wir haben zwei Geldautomaten, Automat 1 und Automat 2 mit jeweils passendem Server dazu. Gebe ich meine PIN an Automat 1 ein, so berechnet dieser nicht quersumme(PIN), sondern quersumme(PIN+1); Automat 2 analog dazu quersumme(PIN+2). Lautet die PIN 4711, so berechnet Automat 1 quersumme(4712) = 14. Der böse Bub fängt nun die übertragene 14 ab und schließt, den quersumme-Algorithmus vor Augen, auf eine mögliche PIN 1238. Mit dieser versucht er nun, bei Automat 2 Geld abzuheben was jedoch scheitert, denn quersumme(1238+2) = 7, jedoch quersumme(4711+2) = 15. Der Angreifer muss nun also nicht nur Automat 1 belauschen, sondern zusätzlich rausfinden, welchen Salt Automat 1 verwendet, anschließend Automat 2 belauschen, dessen Salt herausfinden und anschließend versuchen, die gesammelten Ergebnisse so zu verwursten, dass er gültige PINs für die Automaten berechnen kann.
Während dies bei der Quersumme noch relativ einfach möglich ist wird es mit zunehmender Komplexität der Algorithmen immer schwieriger.
Je nach Anwendungsfall reicht md5, besser jedoch md5+Salt. Wer mehr Sicherheit benötigt, sollte SHA-1(+Salt) verwenden oder weitere Stufen, bspw. SHA-256(+Salt).
..
achso! ja dann :)
Nettes Beispiel, das mit der Bankkarte. Hast Du schon Hack-Erfahrung? ;-))
wow,
eben verfasst und schon 2te Seite bei Google :-) scheinen sich ja viele Leute für das "hacken" von md5() zu interessieren :-P
ganz nett erklärt. Da ich gerade selber meine Seite dadurch "sicherer" gemacht habe, bin ich auch hierher gestolpert.
Ganz nettes anderes Beispiel das ich gelesen habe :
Wären md5()codes umkehrbar, könnte man eine 1 gb grosse file zum code machen, diesen code verschicken und den computer am anderen ende einfach "umkehren lassen" – man hätte die Perfekte Komprimierung :P
grüße, dognose
www . md5cracker . de/
Ich glaube du hast nicht verstanden, worum es in meinem obigen Artikel geht.
Egal, der Dienst taugt sowie nichts:
GDataOnline – Hash nicht gefunden
TMTO – Wegen Arbeiten derzeit deaktiviert!
Plain-Text – Hash nicht gefunden
MD5encryption – Hash nicht gefunden
[…]
Der Service nutzt nur Wortlisten für die ein MD5 generiert wurde, ist das Wort nicht in der Liste wird es auch nicht angezeigt.
=Der Service nutzt nur Wortlisten für die ein MD5 generiert wurde, ist das Wort =nicht in der Liste wird es auch nicht angezeigt.
omfg, wer keine Ahnung hat sollte einfach mal die Fresse halten ;)..
Der Service nutzt wohl was, nur bei Salted Hashes nicht!
He Anonymous… Du solltest die Fresse halten, da du keine Ahnung hast… hendi hat vollkommen recht. Es werden nur Listen benutzt… Ist der Eintrag nicht vorhanden, gibt es auch kein Ergebnis! Und dies war kein salted Hash
Aktueller Cracker: Fertig!
MD5Cracker.de – Hash nicht gefunden
GDataOnline – Hash nicht gefunden
Plain-Text – Hash nicht gefunden
MD5encryption – Hash nicht gefunden
Hashkiller – Hash nicht gefunden
securitystats – Hash nicht gefunden
astalavista – Hash nicht gefunden
passcracking – Down!
Hashreverse – Hash nicht gefunden
Crysm – Hash nicht gefunden
md5database – Hash nicht gefunden
trex-online – Hash nicht gefunden
tydal – Hash nicht gefunden
md5decrypter – Hash nicht gefunden
md5crack – Hash nicht gefunden
deerme – Hash nicht gefunden
rednoize – Hash nicht gefunden
md5recover – Down!
Benramsey – Hash nicht gefunden
XPZone – Hash nicht gefunden
Sehr schön beschrieben. In dieser Art (Beschreibung) findet man leider nur sehr selten Informationen.
Gefunden habe ich Deinen Blog via internetnotizen.de/blogosphaere.
Ich finde das Beispiel echt gut! Weiter so. ;-)
Diese ganzen web MD5-cracker verwenden sog. Rainbow Tables. Darin sind zigtausende Buchstabenkombinationen mit den MD5-Hashes vorhanden. Mittlerweile sind leider schon so gut wie alle 5-stelligen Kombinationen ohne Sonderzeichen vorhanden. Auch häufige Sätze oder Wörter (vgl. Wikipedia-Artikel MD5). Daher am besten SHA-256 mit Salt verwenden, wobei ich nicht genau weis, wie das auf Homepages funktioniert.
Naja die Seite ist ehrlich gesagt ziemlich cool!
Bei 3 von 8 Benutzern meines Forums hat es das Passwort geknackt!
Klar, noch ein Grund bessere Passwörter zu verwenden!
weil er blöde ist
das geht gar nicht
[...] > ACK – so lange die Leute Passwörter verwenden, die eine russische > Kriegswitwe in 3 Minuten erraten hat, kann man das Konzept > wegschmeißen. Noch dazu gibt es Seiten, wo man gar keine Passwörter > verwenden *kann*, die halbwegs lang genug wären. Was ist eigentlich lang genug…. Ernsthaft, was ist lang genug… Das einzige Finanzportal, dass ich kenne mit ausreichend PW platz ist die Diba. Die haben mal kein Problem mit 24Zeichen Für Pin und Identifier. > > Und wie war das noch mit der max erlaubten verschlüsselungsstärke in > > den Usa? > > Hmmm, das dürfte aber kein Problem sein, denn es handelt sich ja > nicht um eine Verschlüsselung. SHA-1 (160 Bit) wurde übrigens > ausgerechnet von der NSA entwickelt. Meine Rede. Würd mal gern wissen, ob sich nsa und konsorten an ihre eigenen Vorgaben halten. Wo wär eigentlich das Problem, jeden Kunden mit nem Rsa Token auszustatten? P.S.: MD5FB7F8B3AE8D887BBD7CE94A584AC3104 SHA-1A38772E9C53A45012AD0A1810D212D3A024D3575 20 sekunden ? *g Gruß, root [...]
Nimmt euch zusammen, kids. Lasst das ganze pseudo md5 cracken besser, man kann md5 nicht cracken (und schon gar nicht hacken, wtf). Um den string der hinter einem md5 hash “steckt” zu finden, hat man nur eine Chance mit hybriden rainbow tables, es sei denn der gehashte string ist in einer wörterbuch-md5 tabelle. Und wer md5 ohne salt benutzt ist selber schuld. Brute-Force attacken sind für kids und total sinnlos. Wartet auf die quanten computer …
super erklärt, danke!
ich komme aus russland und weiss wie mann passwörter in CComputer kanckt im Russland gibt ein Tschip und das stekt mann geheim in Computer dann nach 1 Stunde Nimmt mann den Tschip ab und in anderen Computer und kann mann ales lesen und alle PASSWÖRTER. ;-)
Ich arbeite gerade daran, ein entschlüsselungsverfahren für MD5 zu entwickeln denn ich hab da ne Theorie wie es gehen müsste.
[...] einer der Fedora-Admins, teilte mir mit, dass die im Account-System gespeicherten Passwörter als MD5-Prüfsumme mit Salt gespeichert werden. Es besteht daher keine Gefahr, dass ein etwaiger Angreifer [...]
Ein schöner Artikel, auch wenn der Vergleich mit den PIN-Automaten für die tägliche Web-Praxis mit PHP und MySQL vielleicht nicht so verständlich erscheint. In meinem Artikel (siehe Website dieses Kommentars) wird das ganze praxistauglich anhand eines Beispiels aufgezeigt.
Nachtrag: Da die Website in den Kommentaren anscheinend nicht angezeigt wird, hier die URL die zu meinem obigen Kommentar gehört:
www . aufschnur.de/tutorials/sichere-passwort-hashes/
Was gibt es eigentlich an Bruteforce Programmen?
Danke für die Erklärung. Hat mir geholfen und aufgezeigt, dass ich für mein Problem eine andere Lösung suchen muss.
Es gibt in der aktuellen CT (März 2009) einen gut gemachten Artikel mit einigen funktionierenden MD5-Bruteforce-Programmen. BarsWF nutzt z.B. eine ATI / NVIDIA-kompatible Grafikkarte und beschleunigt damit locker um den Faktor 15. Auf meinem Highend-System kann ich damit >1Milliarde Schlüssel pro Sekunden durchprobieren. Damit muss ein Passwort schon mindestens 11stellig sein, um nicht in einem Wochenende ermittelt zu sein.
doch is machbar. hashkiller.com da geht das
Danke für den aufschlussreichen Artikel, habe endlich MD5 und das Salt kapiert :)
Hi auf Webseiten von mir verschlüssel ich es immer so:
sha1(md5($passwort))
das ist sicher und kann nicht allzu schnell geknackt werden.
hi habe auch ein guten online cracker gefunden..
der 14 der besten online cracker durchsucht..
schaut mal vorbei..
http://md5cracker.tk