Frage:
Ist SHA1 nur deshalb besser als MD5, weil es einen Hash von 160 Bit generiert?
sudhacker
2012-09-04 03:07:11 UTC
view on stackexchange narkive permalink

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

zu erhalten. Es ist bekannt, dass Es gibt Algorithmen, die in der Lage sind, beide in weitaus kürzerer Zeit zu knacken, als es für einen Geburtstagsangriff erforderlich ist.

Meine Frage lautet: 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

Ich hatte den Eindruck, dass es möglich ist, eine Kollision bei 2 ^ 80 möglichen Eingaben zu bestimmen. Außerdem ist [link] http://eprint.iacr.org/2008/469.pdf ein theoretischer Angriff auf SHA1. Korrigieren Sie mich, wenn ich falsch liege.
Es gibt theoretische Angriffe. Aber noch hat niemand eine tatsächliche Kollision geschafft. Trotzdem würde ich der Kollisionsbeständigkeit von SHA-1 sicherlich nicht vertrauen, da dies wahrscheinlich der nächste praktische Angriff gegen ein beliebtes Krypto-Primitiv ist, das wir sehen werden. Aber es ist noch nicht passiert (zumindest nicht öffentlich).
@CodesInChaos hat 5 Jahre gedauert: https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Vier antworten:
#1
+92
Tom Leek
2012-09-04 05:08:42 UTC
view on stackexchange narkive permalink

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 61 sup> funktioniert, viel schneller als der generische Geburtstagsangriff (der in 2 80 sup liegt) >), aber immer noch ziemlich schwierig ( machbar, aber teuer).

Allerdings wissen wir nicht wirklich, was Hash-Funktionen resistent macht (siehe zum Beispiel dies Antwort für eine ausführliche 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-Drehung, die übrigens den einzigen Unterschied zwischen SHA-0 und SHA-1 darstellt, und SHA-0-Kollisionen wurden erzeugt.

Weitere Informationen finden Sie unter bei SHA-256, das viel "massiver" ist (viel mehr Operationen als SHA-1, jedoch mit einer ähnlichen Struktur) und derzeit ungebrochen ist. Es ist, als gäbe es 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).

Die erste Kollision wurde heute erstellt :) https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
#2
+37
D.W.
2012-09-04 04:35:13 UTC
view on stackexchange narkive permalink

Nein. Es ist nicht nur die Länge der Ausgabe. Es gibt erhebliche 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 ist SHA1 scheint 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 bietet einen Überblick.) Aus diesem Grund ist SHA1 in vielen Einstellungen eine viel bessere Wahl als MD5.

Heutzutage wird MD5 oder SHA1 nicht mehr verwendet Wahrscheinlich ist es sogar 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 Kollisionsbeständigkeit erforderlich ist, da dieser Aspekt von MD5 vollständig fehlerhaft ist.

Wenn Sie [quote] sagen, gibt es signifikante Unterschiede in der Sicherheitsstufe gegen kryptoanalytische Angriffe. [/ Quote], meinen Sie, dies sind die Implementierungsfehler im md5-Hash-Generierungsalgorithmus, die ihn unsicher machen?
@asudhak: Die Mängel liegen nicht in der Implementierung von MD5, sondern in seiner Spezifikation. Die Resistenz von MD5 hängt von seiner Struktur ab, und es stellte sich heraus, dass die Struktur von MD5 nicht so resistent ist, wie ursprünglich angenommen wurde.
@asudhak Übrigens weiß ich nicht, in welchem ​​Kontext Sie diese Frage stellen, aber ** verwenden ** Sie keinen Hash wie MD5 oder SHA256 für Passwörter. Siehe [wie man Hash-Passwörter sicher hasht?] (Http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords) und [wie man Salt speichert?] (Http: //security.stackexchange) .com / Fragen / 17421 / How-to-Store-Salz?) für detailliertere Erklärungen.
oh nein, bin kein Entwickler ... Ich bin eher ein Berater und wollte einen konkreten Grund, warum SHA1> MD5, anstatt die Tatsache einfach blind zu akzeptieren ...
Was meinen Sie mit "bekannten Angriffen von praktischer Relevanz"?
@JMCF125, so ziemlich das, was der Satz Sie denken lassen würde. Grob gesagt sind keine Angriffe bekannt. Genauer gesagt mag es theoretische "Angriffe" geben, aber sie haben keine praktische Relevanz (sie gefährden keine praktische Anwendung).
@D.W., Ah; Sie wurden also nicht nur nicht in die Praxis umgesetzt, da dies praktisch unmöglich wäre. Meine ersten Gedanken; aber dann dachte ich, dass es ein langwieriger, ineffizienter Angriff gewesen sein könnte. Danke, dass du das geklärt hast.
@JMCF125 Eine ideale n-Bit-sichere Hash-Funktion (eine, bei der der einzige Angriff Brute Force war) würde ungefähr 2 ^ n Versuche benötigen, um ein Vorbild zu finden, und 2 ^ (n / 2) Versuche, um eine Kollision zu finden. Es ist üblich, eine Angriffsmethode zu entdecken, die weniger Rechenaufwand als Brute Force erfordert, aber dennoch rechnerisch nicht durchführbar ist.
SHA-1-Kollision gemeldet.https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html
Beachten Sie, dass es durchaus möglich ist, die reduzierte Ausgabe von SHA-2-Funktionen zu verwenden, falls dies erforderlich ist.Es gibt zum Beispiel SHA-224, aber Sie können auch die Ausgabe von SHA-256 oder 512 reduzieren, indem Sie einfach die Bytes ganz links verwenden (dies ist die übliche Standardeinstellung).Beachten Sie, dass 160 Bit SHA-1 jedoch nur 80 Bit Sicherheit bieten, wenn es darum geht, Kollisionen zu erzeugen, was nicht besonders gut ist.Im Allgemeinen streben wir eine Sicherheit von> = 128 Bit an.
#3
+1
AJ Henderson
2012-09-04 22:36:27 UTC
view on stackexchange narkive permalink

Die Sicherheitsstufe einer Hash-Funktion 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, für den er sich ausgibt (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 Regenbogentabellen 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 Regenbogentabellen funktionieren, wie 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.

#4
-5
Biswajit Karmakar
2016-05-15 11:07:33 UTC
view on stackexchange narkive permalink

Hier ist der Vergleich zwischen MD5 und SHA1. Sie können sich eine klare Vorstellung davon machen, welches besser ist.

enter image description here

Diese Tabelle ignoriert jegliche Kryptographie (abgesehen von der letzten Zeile, die veraltet ist).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...