160 Stimmen

Ist MD5 immer noch gut genug, um Dateien eindeutig zu identifizieren?

Wird das Hashen einer Datei mit MD5 immer noch als eine ausreichende Methode betrachtet, um sie eindeutig zu identifizieren, trotz aller Angriffe auf den MD5-Algorithmus und Sicherheitsprobleme usw.? Sicherheit ist hier nicht mein Hauptanliegen, sondern jede Datei eindeutig zu identifizieren.

Irgendwelche Gedanken?

2 Stimmen

Ich benutze es derzeit selbst in einer meiner Anwendungen und so weit ich weiß, ist es gut genug, um Dateien eindeutig zu identifizieren.

2 Stimmen

Du wirst wahrscheinlich diese Frage finden: stackoverflow.com/questions/862346/… nützlich.

0 Stimmen

Wie viele Dateien müssen identifiziert werden? Es gibt 128 Bits aus, so dass es in Ordnung ist, wenn Sie versuchen, nur wenige tausend Dateien zu identifizieren. Aber wenn Sie versuchen, deutlich mehr als das zu identifizieren, könnten Sie auf Kollisionen/das Geburtstagsparadoxon stoßen.

98voto

Marcelo Cantos Punkte 173498

Ja. MD5 ist aus Sicherheitssicht vollständig geknackt worden, aber die Wahrscheinlichkeit einer zufälligen Kollision ist immer noch verschwindend gering. Stellen Sie einfach sicher, dass die Dateien nicht von jemandem erstellt werden, dem Sie nicht vertrauen und der möglicherweise bösartige Absichten hat.

0 Stimmen

Könnten Sie näher erläutern, was aus Sicherheitssicht defekt ist? Was könnte mit MD5-Hashing nicht erreicht werden? Warum ist es nicht möglich?

2 Stimmen

@none: Für Ihre erste Frage, siehe hier. Ich befürchte, ich verstehe die anderen Fragen nicht.

9 Stimmen

@0xA3: Weder du noch ich haben eine Ahnung, auf welche Dateien sich der OP bezieht, oder wie viel Schaden ein Kompromiss verursachen würde. Es könnten ihre Kinderfotos sein, soviel wissen wir. Mein Ziel ist es, die Fakten bereitzustellen; was jemand anderes damit macht, ist ihre Sache. Bedenke auch, dass Bruce Schneier empfiehlt, dein Passwort aufzuschreiben; nicht alles muss im Fort Knox gespeichert werden. Einige Dinge werden unter dem Blumentopf gut aufbewahrt.

35voto

stapeluberlauf Punkte 517

Für praktische Zwecke kann der erstellte Hash passend zufällig sein, aber theoretisch besteht immer eine Wahrscheinlichkeit für eine Kollision aufgrund des Pigeonhole-Prinzips. Unterschiedliche Hashes bedeuten sicherlich, dass die Dateien unterschiedlich sind, aber wenn zwei Dateien den gleichen Hash haben, bedeutet das nicht unbedingt, dass die Dateien identisch sind.

Eine Hash-Funktion für diesen Zweck zu verwenden - unabhhängig davon, ob Sicherheit ein Anliegen ist oder nicht - sollte daher immer nur der erste Schritt einer Überprüfung sein, insbesondere wenn bekannt ist, dass der Hash-Algorithmus leicht Kollisionen erzeugen kann. Um zuverlässig herauszufinden, ob zwei Dateien mit dem gleichen Hash unterschiedlich sind, müssten Sie diese Dateien Byte für Byte vergleichen.

1 Stimmen

Aber ein Hashing-Algorithmus erstellt den Hash, indem er alle Bytes durchläuft, oder? Glauben Sie also nicht, dass der gleiche Zweck erreicht wird? :)

16 Stimmen

@Ranhiru. Nein. Der Hash gibt Ihnen einen 'Zusammenfassung' Wert, der (für MD5) nur 16 Bytes lang ist. Um sicherzustellen, dass die Dateien identisch sind, müssten Sie einen byte-by-byte-Check durchführen. Dies gilt unabhängig vom gewählten Hash-Algorithmus, es besteht immer die Möglichkeit einer Kollision.

0 Stimmen

Aber kann MD5 verwendet werden und wird verwendet, um Dateien eindeutig zu identifizieren, oder? Ist es sicher, MD5 zu verwenden? Werden letztendlich Kollisionen auftreten?

20voto

Thomas Pornin Punkte 70790

MD5 wird gut genug sein, wenn Sie keinen Gegner haben. Jedoch kann jemand (absichtlich) zwei verschiedene Dateien erstellen, die denselben Wert hashen (das nennt man eine Kollision), und dies kann oder kann auch kein Problem sein, abhängig von Ihrer genauen Situation.

Da es eine subtile Angelegenheit ist zu wissen, ob bekannte Schwächen von MD5 auf einen gegebenen Kontext zutreffen, wird empfohlen, MD5 nicht zu verwenden. Die Verwendung einer kollisionsresistenten Hash-Funktion (SHA-256 oder SHA-512) ist die sichere Antwort. Außerdem ist die Verwendung von MD5 schlechte öffentliche Beziehungen (wenn Sie MD5 verwenden, seien Sie bereit, sich zu rechtfertigen; während niemand Ihre Verwendung von SHA-256 in Frage stellen wird).

2 Stimmen

Diese Antwort könnte etwas irreführend sein, wenn der Leser nicht allzu vertraut mit Hashing ist. Es ist nichts Magisches an SHA, das Hash-Kollisionen verhindert, sie sind einfach resistenter gegen Hash-Kollisions-Angriffe. Wenn Sie sicher sein wollen, dass Dateien zu mehr als 99,999^e% identisch sind, würden Sie immer noch einen Byte-für-Byte-Check benötigen.

7 Stimmen

Eigentlich kann ein Byte-für-Byte-Vergleich aufgrund eines kosmischen Strahlung, die ein Bit umkehrt (z.B. die Umwandlung von return 0; in return 1;), fehlschlagen. Dies ist äußerst unwahrscheinlich, aber das Risiko einer Kollision mit SHA-256 ist sogar noch kleiner. Mathematisch gesehen können Sie nicht sicher sein, dass zwei Dateien, die den gleichen Hash-Wert haben, identisch sind, aber Sie können auch nicht sicher sein, dass dies durch den Vergleich der Dateien selbst der Fall ist, solange Sie einen Computer für den Vergleich verwenden. Was ich meine ist, dass es sinnlos ist, die Gewissheit von über 99,999....9 % zu überschreiten, und SHA-256 bietet bereits mehr als das.

2 Stimmen

Was, du benutzt kein ECC-Speicher? ;). Guter Kommentar, sehr interessante Gedanken.

9voto

afilina Punkte 694

Ein MD5 kann Kollisionen erzeugen. Theoretisch kann, obwohl äußerst unwahrscheinlich, eine Million Dateien hintereinander den gleichen Hash erzeugen. Testen Sie nicht Ihr Glück und überprüfen Sie Kollisionen mit MD5, bevor Sie den Wert speichern.

Persönlich erstelle ich gerne MD5 von zufälligen Zeichenfolgen, was den Overhead beim Hashen großer Dateien reduziert. Wenn Kollisionen gefunden werden, iteriere ich und hashen erneut mit dem angehängten Schleifenzähler.

Sie können mehr über das Schubfachprinzip lesen.

6voto

tach Punkte 653

Ich würde es nicht empfehlen. Wenn die Anwendung auf einem Mehrbenutzersystem funktionieren würde, könnte es Benutzer geben, die zwei Dateien mit demselben md5-Hash haben könnten (er könnte Ingenieur sein und mit solchen Dateien spielen oder einfach neugierig sein - sie sind leicht herunterladbar von http://www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , ich selbst habe während des Schreibens dieser Antwort zwei Beispiele heruntergeladen). Ein weiterer Punkt ist, dass einige Anwendungen solche Duplikate aus irgendeinem Grund speichern könnten (ich bin mir nicht sicher, ob es solche Anwendungen gibt, aber die Möglichkeit besteht).

Wenn Sie Dateien eindeutig identifizieren, die von Ihrem Programm generiert wurden, würde ich sagen, dass es in Ordnung ist, MD5 zu verwenden. Andernfalls würde ich jede andere Hash-Funktion empfehlen, bei der noch keine Kollisionen bekannt sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X