Wie genau ist "md5sum"?

5324
Konner Rasmussen

Bei der Verwendung md5sumder Integrität einer Datei, um zu überprüfen, wie genau ist der Prozess?

Bedeutet ein verifiziertes MD5, dass JEDES Bit genau gleich ist, oder muss ein Schwellenwert überschritten werden, bevor die binäre Änderung im MD5 angezeigt wird?

Jede Dokumentation, wie ein MD5 generiert wird, wäre ebenfalls willkommen.

27
http://en.wikipedia.org/wiki/MD5 choroba vor 10 Jahren 12
@choroba Wenn ich das alles richtig lese, steigt die Wahrscheinlichkeit einer nicht erkannten Änderung mit der Größe der überprüften Datei. Es ist jedoch immer noch eine Wahrscheinlichkeit und 100% ige Sicherheit kann nur mit einer 16-Byte-Datei erreicht werden. Hab ich recht? Konner Rasmussen vor 10 Jahren 0
@Konner Ich habe Ihre Frage zum Datentransfer gelesen. Zu diesem Zweck ist es sicher. Die Wahrscheinlichkeit, dass ein bisschen bei einer Übertragung beschädigt wird, ist gering, und es ist wahrscheinlicher, dass Sie einen Teil der kopierten Datei bei der Übertragung verlieren, vorausgesetzt, ich habe [Ihre vorherige Situation] verstanden (http://superuser.com/q/741747) / 228536). MD5 ist vergleichbar mit dem Vergleich beider Dateien, mit dem Vorteil, dass Sie nicht gleichzeitig auf beide Dateien zugreifen müssen. Doktoro Reichard vor 10 Jahren 0
Wenn ich wirklich sicherstellen möchte, dass zwei Dateien identisch sind, dann mache ich ein "cmp -l" ... Lass es einfach wissen Michael Martinez vor 10 Jahren 0
@MichaelMartinez, das zwei Kopien der Datei erfordert, was sich als unangemessen erweisen könnte, wenn die Datei zu groß ist. Des Weiteren kenne ich den Befehl 'cmp'. Ich schätze zwar die Eingabe ... =) Konner Rasmussen vor 10 Jahren 0
Msgstr "Bedeutet ein verifiziertes MD5, dass JEDES Bit genau gleich ist." Beachten Sie, dass dies dank des Pigeonhole-Prinzips unmöglich ist. http://en.wikipedia.org/wiki/Pigeonhole_Principle Plutor vor 10 Jahren 15
Ich glaube nicht, dass Sie auch eine Garantie für 16-Byte-Dateien erhalten. Mooing Duck vor 10 Jahren 3

3 Antworten auf die Frage

65
David Schwartz

MD5 wird zu diesem Zweck gegen einen intelligenten Gegner gebrochen. Es ist möglich, zwei verschiedene Datenblöcke, die den gleichen MD5-Hash erzeugen, in böswilliger Absicht zu erstellen.

Es ist jedoch durchaus angebracht (obwohl es fast sicher bessere Möglichkeiten gibt), MD5 zum Schutz vor versehentlicher Datenbeschädigung beim Transport oder beim Speichern zu verwenden. Es ist zwar denkbar, dass ein solches Ereignis dazu führen könnte, dass der MD5-Hash derselbe ist, aber die Wahrscheinlichkeit ist so gering, dass es fast unvorstellbar ist, dass es eine Wahrscheinlichkeit wäre, sich darüber Sorgen zu machen. Ausfälle durch Hintergrundstrahlung, Tunneleffekte, statische und Dutzende anderer Quellen wären um Größenordnungen wahrscheinlicher.

Selbst wenn Sie über eine Billiarde Dateneinheiten verfügen, ist die Wahrscheinlichkeit, dass ein nicht übereinstimmender MD5 einen MD5-Hash erzeugen würde, der zu einer dieser Billiardeneinheiten gehört, viel geringer als einer in einer Billiarde.

Obwohl es theoretisch möglich sein kann, zwei Dateien mit demselben Hash zu erzeugen, ist es praktisch unmöglich. Vor allem, wenn die Ersatzdatei auch sinnvoll sein sollte. Wenn es sich bei der Originaldatei beispielsweise um englischen Text handelt, gibt es möglicherweise keine anderen Übereinstimmungen, die auch englisch sind. Oder wenn es sich um eine Excel-Tabelle handelt, wäre keine der anderen Dateien mit demselben Hash gültige Tabellenkalkulation. Barmar vor 10 Jahren 0
@Barmar: http://www.win.tue.nl/hashclash/Nostradamus/ Diese Jungs erstellten eine Reihe von PDF-Dateien mit demselben MD5-Hash, um zu beweisen, dass dies praktisch machbar war. philfr vor 10 Jahren 1
26
Itai

MD5 ist ein Hash. Es bildet im Wesentlichen den gesamten Inhalt einer Datei in einer kleinen Zeichenfolge ab, die 16 Byte lang ist, IIRC.

Es wird offensichtlich mehrere Dateien geben, die auf dieselbe MD5-Summe zugreifen. Daher ist eine übereinstimmende MD5-Summe keine Garantie für eine exakte Übereinstimmung zwischen Dateien.

Es gibt keine Schwelle als solche, da Hashes funktionieren. So kann eine MD5-Summe sogar eine einzelne Bitänderung erkennen. Viele Einzelbitänderungen zusammen können jedoch dazu führen, dass der MD5-Hash derselbe ist. Es ist daher durchaus sinnvoll, MD5 zur Überprüfung der Dateiintegrität gegen zufällige Beschädigung zu verwenden, nicht jedoch, wenn böswillige Absichten möglich sind, da jemand eine Datei ändern und dabei sicherstellen kann, dass der MD5-Hash derselbe ist.

Um es kurz zu machen: Ein MD5 ist nichts anderes als eine schnelle und schmutzige Methode zur Überprüfung der Dateiintegrität und sollte nur verwendet werden, wenn ein nicht erkannter Fehler keine katastrophalen Auswirkungen hat ... richtig? Konner Rasmussen vor 10 Jahren 1
Die beste Verwendung ist die Erkennung von Beschädigungen beim Übertragen oder Kopieren. nicht wirklich als sicherheitssache. Michael Martinez vor 10 Jahren 3
@KonnerRasmussen - Richtig. Sie können eine Sicherung beispielsweise mit MD5 überprüfen, es kann jedoch vorkommen, dass ein Fehler nicht erkannt wird. Itai vor 10 Jahren 0
@KonnerRasmussen - es geht nicht um den Grad der Auswirkungen, sondern um die Art der Bedrohung. Wenn Sie befürchten, dass zwei Dokumente aus Versehen das gleiche MD5 haben könnten, hören Sie auf, sich Sorgen zu machen: Die Wahrscheinlichkeit, dass Ihre Computer spontan in Flammen aufgehen, ist erheblich höher. Wenn Sie besorgt sind, dass ein intelligenter Angreifer ein Dokument erstellt, das einem bereits vorhandenen entspricht, ist dies ein ernstes Problem, und Sie sollten einen besseren Hashwert erhalten. Wenn Sie sich Sorgen machen, dass ein intelligenter Angreifer zwei Dokumente produziert, die zueinander passen, machen Sie sich keine Sorgen: Es wird sicherlich passieren. Malvolio vor 10 Jahren 12
Während die Erzeugung einer MD5-Hash-Kollision theoretisch möglich ist, ist es natürlich viel schwieriger, eine * nützliche * -Kollision zu erzeugen (da die kollidierende Datei der gleiche Dateityp ist und der Inhalt zumindest plausibel authentisch ist). Shadur vor 10 Jahren 5
@Shadur: Das war früher der Fall, aber die Sicherheitsforschung hat neue Wege gefunden, um MD5-Kollisionen zu erzeugen, die dies erleichtern. Insbesondere wenn Ihr Dateiformat Blöcke von "Kommentar" -Daten im freien Format zulässt, ist es möglich, jeden MD5-Hash durch Einfügen eines geeigneten Kommentars abzugleichen. MSalters vor 10 Jahren 6
17
Zsolt Szilagy

Ein MD5-Hash besteht aus 128 Bit. Ein einzelnes umgedrehtes Bit in der Quelle kippt (im Durchschnitt) 64 Bit im Hash.

Die Wahrscheinlichkeit, dass zwei Hashes versehentlich kollidieren, ist 1/2 ^ 128, also 1 in 340 undecillion 282 Dezillionen 366 Milliarden Billionen 920 Billionen Dollar 938 Septillionen 463 Billiarden 463 Quintillion 374 Billiarden 607 Billionen 437 Milliarden 718 Millionen 724 Millionen 456.

Wenn Sie jedoch alle Hashwerte beibehalten, ist die Wahrscheinlichkeit aufgrund des Geburtstags paradox etwas höher. Um eine 50% ige Chance zu haben, dass ein Hash kollidiert, benötigen Sie 2 ^ 64 Hashes. Das bedeutet, dass Sie für eine Kollision im Durchschnitt 100 Jahre lang pro Sekunde 6 Milliarden Dateien pro Sekunde durchlaufen müssen.

Quelle: porneL, https://stackoverflow.com/questions/201705/how-many-random-elements-before-md5-produces-collisions

Sie sagen also, es gibt noch eine Chance? : p Holloway vor 10 Jahren 8
Das Problem ist, dass Sie zwar 100 Jahre lang 6 Milliarden Dateien pro Sekunde durchlaufen müssen, um sicherzugehen, dass Sie eine Kollision finden. es könnte schon in der ersten Sekunde passieren. deroby vor 10 Jahren 1
Richtig, es könnte die erste Sekunde passieren. Aber wie immer geht es um Abwägungsgründe. Es könnte militärische Anwendungen geben, bei denen dieses Risiko nicht akzeptabel ist, aber ich würde ohne Bedenken ein Auto mieten, wenn die Airbagsensoren md5 verwenden. Denken Sie daran, dass die Wahrscheinlichkeit besteht, dass Sie beim Warten auf eine MD5-Kollision mehrmals vom Blitz getroffen werden. Zsolt Szilagy vor 10 Jahren 0
Es tut mir leid, aber die Hälfte von 2 ^ 128 ist 2 ^ 127, nicht 2 ^ 64. fischi vor 10 Jahren 0
@fischi, lies den Link zum Geburtstagsparadox und auch http://en.wikipedia.org/wiki/Birthday_attack - es geht nicht darum, die Gesamtzahl der Hashes einfach zu halbieren. In Anbetracht des Suchraums H beträgt die Anzahl der Hashes, die Sie generieren müssen, bevor Sie eine 50% ige Kollisionswahrscheinlichkeit erhalten, ungefähr sqrt ((pi / 2) * H). Wenn Sie mit 2 ^ 128 rechnen, erhalten Sie eine Zahl von ungefähr 2 ^ 64 Paul Dixon vor 10 Jahren 2