Original von Imrahil
Also er knackt nicht mein Passwort aber findet eine Methode den Algorithmus zu verwirren so dass er den falschen output generiert, richtig?
ja, das nennt man eine kollision. es gibt zwei anforderungen an hash algorithmen, was kollisionsresistenz angeht. schwache kollisionsresistenz bedeutet; ist eine nachricht m1 gegeben, dann ist es nicht moeglich eine nachricht m2 zu erzeugen fuer die gilt h(m1) = h(m2) (wobei h() die hashfunktion ist).
hat man zum beispiel eine einfache hashfunktion fuer eine datenstruktur bei der die quersumme einer zahl gebildet wird (nicht sehr sinnvoll, nur mal als beispiel), dann findet man so eine kollision leicht (z.b. m1 = 12 -> m2 = 21).
ein hashalgorithmus der schwach kollisionsresistent ist ist aber noch nicht gut, da er anfaellig fuer einen sog.
geburtstagsangriff ist. die zweite anforderung an einen hashalgorithmus ist daher "starke kollisionsresistenz". das bedeutet, es ist nicht moeglich m1 und m2 zu erzeugen so das gilt h(m1) = h(m2).
was bei md5 jetzt gefunden wurde ist ein weg um von einem hashwert auf eine nachricht zu schliessen die diesen hash erzeugt. ob die nachricht die urspruenglich zum erzeugen des hashwertes verwendete ist oder nicht findet man dabei nicht raus.
Der Algorithmus mag zwar geknackt sein, aber das macht die Hauptanwendung dieses Algorithmus doch nicht unsinnig (in Foren oder sonstigen Webinterfaces als Schutz des Passworts).
inwiefern funktioniert der schutz noch? wenn ich den hash deines passworts hab erzeuge ich mir ein passwort was den gleichen hashwert hat. damit kann ich mich dann einloggen. oder hab ich was falsch verstanden?
Gibt es überhaupt alternativen die zum Beispiel in PHP verwendet werden können???
in der standardbibliothek (falls man diesen chaotischen haufen kram bei php so nennen kann...) gibt es afaik nur noch sha1(). der gilt auch nicht mehr als sicher. ich glaube der ist noch nicht ganz so im arsch wie md5, ist aber wohl auch nur ne frage der zeit. ruediger weis und stefan lucks z.b. empfehlen kurzfristig auf sha256 oder ripemd160 umzusteigen. langfrisitig muessen neue hashverfahren entwickelt werden. im ersten kommentar zu sha1() in der doku auf php.net ist anscheinend ein link auf eine sha256 implementation.
das mit den signaturen funktioniert so: um ein dokument zu signieren _entschluesselt_ man es mit seinem private key. wenn jemand die signatur pruefen will _verschluesselt_ er das dokument mit dem public key desjenigen der das dokument signiert hat. dabei kommt dann wieder der klartext raus. dieses vorgehen hat einige nachteile, deshalb wird in der praxis ein hashwert des dokuments gebildet und der hash wird mit dem private key entschluesselt.
wenn ich aber fuer den hashwert eine andere nachricht erzeugen kann ist die authentizitaet der signatur im arsch. weil jetzt kann ich behaupten jemand hat irgend ein dokument signiert, weil dieses dokument zufaellig den gleichen hashwert ergibt wie ein dokument was er tatsaechlich signiert hat.
hm, etwas umstaendlich formuliert, ich hoffe das ist halbwegs verstaendlich...
@carwe: viel gewinnt man aber nicht bei https, wenn man selbst-signierte zertifikate verwendet.