it-swarm-eu.dev

Ist SHA1 nur deshalb besser als MD5, weil es einen Hash von 160 Bit generiert?

Es ist bekannt, dass SHA1 zum Hashing mehr als MD5 empfohlen wird, da MD5 praktisch defekt ist, da viele Kollisionen gefunden wurden. Mit dem Geburtstagsangriff ist es möglich, eine Kollision in MD5 mit 2 zu bekommen64 Komplexität und mit 280 Komplexität in SHA1

Es ist bekannt, dass es Algorithmen gibt, die beide in weitaus kürzerer Zeit knacken können, als es für einen Geburtstagsangriff erforderlich ist.

Meine Frage ist: Wird MD5 nur deshalb als unsicher angesehen, weil es leicht ist, Kollisionen zu erzeugen? Da es bei beiden nicht so schwierig ist, Kollisionen in SHA1 zu erzeugen. Was macht SHA1 besser?

Update 02/2017 - https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html

71
sudhacker

Das Erzeugen von SHA-1-Kollisionen ist nicht so einfach . Es scheint vernünftig, dass der Angriff mit, der auf SHA-1 beschrieben wurde, wirklich mit durchschnittlichen Kosten von 2 funktioniert61, viel schneller als der generische Geburtstagsangriff (der in 2 ist80), aber immer noch ziemlich schwierig ( machbar , aber teuer).

Davon abgesehen wissen wir nicht wirklich, was Hash-Funktionen resistent macht (siehe zum Beispiel diese Antwort für eine detaillierte Diskussion). Mit viel Handbewegung könnte ich behaupten, dass SHA-1 robuster als MD5 ist, weil es mehr Runden hat und weil die Ableitung der 80 Nachrichtenwörter in SHA-1 viel "mischender" ist als die von MD5 (in insbesondere die 1-Bit-Rotation, die übrigens der einzige Unterschied zwischen SHA-0 und SHA-1 ist, und SHA-0-Kollisionen wurden erzeugt).

Weitere Informationen finden Sie in SHA-256, das viel "massiver" (viel mehr Operationen als SHA-1, jedoch mit ähnlicher Struktur) und derzeit ungebrochen ist. Es ist, als gäbe es nur eine minimale Anzahl von Operationen, damit eine Hash-Funktion für eine bestimmte Struktur sicher ist (aber dort bewege ich meine Hände mit erstaunlicher Geschwindigkeit, also glaube nicht, dass ich etwas wirklich Wissenschaftliches oder Tiefgründiges gesagt habe).

91
Tom Leek

Nein, es ist nicht nur die Länge der Ausgabe. Es gibt signifikante Unterschiede in der Sicherheitsstufe gegen kryptoanalytische Angriffe.

Es gibt verheerende Kollisionsangriffe auf MD5. (Der Wikipedia-Artikel zu MD5 enthält einige Details.) Diese Angriffe bedeuten, dass MD5 im Wesentlichen keine Sicherheit gegen Kollisionen bietet: Es ist einfach, Kollisionen in MD5 zu finden.

Im Gegensatz dazu scheint SHA1 viel sicherer zu sein. Obwohl einige Angriffe auf SHA1 bekannt sind, sind sie viel weniger schwerwiegend als die Angriffe auf MD5. (Der Wikipedia-Artikel zu SHA1 hat einen Überblick.) Aus diesem Grund ist SHA1 in vielen Einstellungen eine viel bessere Wahl als MD5.

Anstatt MD5 oder SHA1 zu verwenden, ist es heutzutage wahrscheinlich noch besser, eine der moderneren Hash-Funktionen wie SHA256 zu verwenden. Diese haben keine bekannten Angriffe von praktischer Relevanz.

Verwenden Sie MD5 jedoch auf keinen Fall in Umgebungen, in denen Kollisionsfestigkeit erforderlich ist, da dieser Aspekt von MD5 vollständig beeinträchtigt ist.

37
D.W.

Das Sicherheitsniveau, das eine Hash-Funktion bietet, basiert auf der Schwierigkeit, einen Klartext zu generieren, der eine bestimmte Hash-Signatur erzeugt (die Ausgabe des Hash). Ein Hash ist eine schnelle Methode zur Vereinfachung eines Datensatzes, um anzuzeigen, dass ein Benutzer die Originaldaten besitzt, ohne die Daten tatsächlich preiszugeben. Dies kann sowohl nützlich sein, um zu überprüfen, ob jemand der ist, von dem er sagt, dass er er ist (indem Sie einen Hash von etwas, von dem Sie wissen, dass er ihn kennt, mit dem gespeicherten Wert vergleichen), als auch um zu überprüfen, ob eine Nachricht nicht geändert wurde. Da ein Hash viele zu eins ist (viele Werte erzeugen den gleichen Hashwert), ist es theoretisch schwierig, von einem Hash zum ursprünglichen Wert zu arbeiten. Aufgrund der hohen Anzahl möglicher Hash-Werte sollte es schwierig sein, einen Hash zu erhalten, um eine bestimmte Ausgabe zu erzeugen.

Dies ist jedoch leider nicht immer der Fall. Die Erwartung, dass bestimmte Werte von Menschen lesbaren Eingaben entsprechen, ermöglicht Wörterbuchangriffe, die als Rainbow-Tabellen bezeichnet werden, gegen einen Hash, um zu versuchen, den ursprünglichen Wert zu ermitteln. Das Salzen (das Hinzufügen nicht lesbarer Eingaben am Anfang oder Ende einer Eingabe) ist ein Versuch, zu verhindern, dass Rainbow-Tabellen funktionieren, da sie für jedes unterschiedliche Salz erstellt werden müssten.

Das andere und für Ihre Frage relevante Problem sind Hash-Kollisionen. Eine Hash-Kollision tritt immer dann auf, wenn zwei gegebene Eingaben dieselbe Hash-Ausgabe erzeugen. Um zu überprüfen, ob Daten nicht geändert wurden, muss es nicht einfach sein, einen Hash für einen geänderten Datensatz zu generieren, der mit dem Hash des Originals übereinstimmt. Leider ist MD5 in dieser Hinsicht stark gefährdet, da es mehrere Möglichkeiten gibt, Änderungen relativ einfach zu finden, die am Ende oder am Anfang einer Nutzlast angebracht werden können, um sie als gültig erscheinen zu lassen. SHA-1 weist in dieser Hinsicht auch einige kleinere Kompromisse auf, die kürzlich entdeckt wurden, jedoch weniger schwerwiegend sind als die MD5-Probleme. Die Verwendung von SHA256 ist noch sicherer, da derzeit keine Angriffe gegen Hash-Kollisionen bekannt sind.

1
AJ Henderson