Moin!
Das bedeutet also, dass 'a47cccd7dacec4c59dc2a4c4a943d9df' gleich 'blafoo' sein _kann_ aber nicht sein _muss_?
Es gibt kein "Gleich" in _dieser_ Richtung.
'blafoo' ergibt als MD5 'a47cccd7dacec4c59dc2a4c4a943d9df'.
Irgendein anderer String ergibt das aber ebenfalls.
Das ist mehr oder weniger identisch zu der Frage "Welche Zahl x habe ich benutzt, wenn bei Anwendung der Formel y=x^2 als Ergebnis 4 rauskommt?"
Antwort: Eindeutig kann man das nicht beantworten, es könnte 2 oder -2 gewesen sein.
Oder um es noch eindringlicher zu machen: "Von welchem Winkel habe ich den Sinus berechnet, wenn das Ergebnis 0,5 ist?" Antwort: Es ist keine eindeutige Angabe machbar, weil die Sinusfunktion für unendlich viele Winkel 0,5 ergibt - wobei diese Winkel allerdings regelmäßig verteilt sind.
MD5 hat ebenfalls solche Kollisionen, aber die sind vollkommen unregelmäßig verteilt und deshalb nicht vorhersagbar. Ebenso ist es nicht in vertretbarer Zeit möglich, ein MD5-Ergebnis wieder auf wenigstens eine mögliche Lösung zurückzurechnen, weil die Umkehrfunktionen dieser mathematischen Operation extrem langsam zu rechnen sind, während die eigentlichen Funktionen sehr schnell zu rechnen sind.
Praktische Bedeutung: Wenn ich in meiner Datenbank lese, dass Benutzer XY das kodierte Passwort 'a47cccd7dacec4c59dc2a4c4a943d9df' hat, kann ich nicht sicher sagen, dass sein Passwort in "Reinschrift" 'blafoo' bedeutet.
Richtig. Er könnte genausogut auch ein beliebiges anderes Passwort benutzt haben, welches zufällig das gleiche Ergebnis hat.
Andersherum betrachtet: Du weißt ja anfangs sowieso nicht, welches Passwort hinter dem MD5-Ergebnis steckt. Und weil du nicht bis zum Ende des Universums warten willst, bis das zurückgerechnet wurde, betrachtest du diese Wandlung eben als "unumkehrbar".
Der Versuch, alle möglichen Strings in ihr MD5-Ergebnis zu wandeln, um damit eine passende Tabelle aufzubauen, in der man dann einfach nur noch nachgucken muß, würde vermutlich am mangelnden Platz scheitern.
Und sollte MD5 doch irgendwann mal zu einfach lösbar sein, bliebe immer noch SHA1 als Ausweichalternative - da kommen nicht 2^128, sondern 2^168 (wenn ich es richtig erinnere) Möglichkeiten heraus.
- Sven Rautenberg