Wie eindeutig sind Prüfsummen?

10

Ich habe viele Dateien, die sortiert werden müssen. und leider gibt es viele Dateien mit demselben Namen, aber unterschiedlichem Inhalt, und es gibt denselben Inhalt mit unterschiedlichen Dateinamen.

Ich denke darüber md5sumnach, Prüfsummen für die Dateien zu generieren, aber ich muss wissen - ist es möglich, dass zwei verschiedene Dateien (dh unterschiedliche Inhalte) dieselbe Prüfsumme generieren?

Wenn ja, wie wahrscheinlich ist es?

Wäre es möglich, zwei verschiedene nicht verwandte (dh nicht in derselben "Familie") Prüfsummenprogramme zu verwenden, um zwei Prüfsummen zu generieren - unter der Annahme, dass zwei verschiedene Dateien dieselbe Prüfsumme für eines der Prüfsummenprogramme erzeugen könnten, würde es niemals beiden gleichzeitig passieren?

Baard Kopperud
quelle
2
Denken Sie daran, dass md5 / sha2 / etc ein HASH von Daten ist, wodurch viele Informationsbits einem kleineren Bitraum zugeordnet werden. Daher kann es zu Kollisionen kommen. Ein HASH ist kein eindeutiger Schlüssel, und wenn dies Ihr Ziel ist, würde ich dringend empfehlen, etwas anderes zu tun.
Mdpc
Zum Sortieren von Dateien ist MD5 in Ordnung. Aus crypto.stackexchange.com/a/18337/49945 beträgt die Wahrscheinlichkeit einer Prüfsummenkollision zweier verschiedener Inhalte 1 zu 2 ^ 128, was ungefähr 1 zu 10 ^ 43 entspricht. Das ist wirklich sehr, sehr selten. Wenn Sie einen Vergleich pro Mikrosekunde durchführen, erhalten Sie im Durchschnitt alle 10 bis 20 Jahre eine Kollision. Es ist erst ~ 10 ^ 9 Jahre seit dem Urknall vergangen, daher beträgt die Wahrscheinlichkeit einer Kollision AUCH EINMAL bei einem Vergleich pro Mikrosekunde von Urknall bis jetzt immer noch nur 1 zu 10 ^ 11. Bei hundert Milliarden gleichzeitigen Computern hätte bisher nur einer eine Kollision gesehen.
ToolmakerSteve
... obwohl nicht klar ist, warum Sie beim Sortieren von Dateien einen Hash-Algorithmus verwenden würden. Wenn Dateien mit demselben Namen vorhanden sind, müssen sie anhand anderer Kriterien identifizierbar sein. zB muss es einen eindeutigen Pfad zur Datei geben oder vielleicht einen Byte-Offset innerhalb eines Speichergeräts? Beides wäre eine nützlichere Möglichkeit, um eindeutig auf die Datei zu verweisen.
ToolmakerSteve

Antworten:

10

Zwei Dateien mit gleichem Inhalt, aber unterschiedlichen Dateinamen: ( Datei1 und Datei2 ):

cat file1
this is a simple file

cat file2
this is a simple file

md5sum file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file2
7de45bf879db49de7e2eacea23e6c165  file2

Zwei Dateien mit unterschiedlichem Inhalt, aber gleichen Dateinamen: ( Datei1 und Datei1 )

cat file1
this is a simple file
cat file1
this is a simple file with extra contents
md5sum file1 #first file1
7de45bf879db49de7e2eacea23e6c165  file1
md5sum file1 #second file1
c7c8f3fd9ddd7a926c31416a69063e4e  file1

Aus dem Wiki- Eintrag,

Es ist jedoch sehr unwahrscheinlich, dass zwei nicht identische Dateien in der realen Welt denselben MD5-Hash haben, es sei denn, sie wurden speziell für denselben Hash erstellt.

Der MD5- Algorithmus weist jedoch seine eigenen Mängel auf.

Da es jetzt einfach ist, MD5-Kollisionen zu generieren, kann die Person, die die Datei erstellt hat, eine zweite Datei mit derselben Prüfsumme erstellen, sodass diese Technik nicht vor einigen Formen böswilliger Manipulationen schützen kann. In einigen Fällen kann der Prüfsumme auch nicht vertraut werden (z. B. wenn sie über denselben Kanal wie die heruntergeladene Datei abgerufen wurde). In diesem Fall kann MD5 nur Funktionen zur Fehlerprüfung bereitstellen: Es erkennt einen beschädigten oder unvollständigen Download. Dies wird wahrscheinlicher, wenn größere Dateien heruntergeladen werden.

Ich würde empfehlen, sha1 zur Berechnung der Prüfsumme zu verwenden, da die Erzeugung von Kollisionen bei Verwendung von sha1- Algorithmen nicht so einfach ist. Das Erstellen der sha1-Prüfsumme ist ziemlich einfach, wie Sie hier sehen können .

Ramesh
quelle
HINWEIS: Bei der Frage geht es um das Sortieren von Dateien. Die zu verwendende Empfehlung sha1ist für diese Aufgabe nicht relevant. es ist nur wichtig, wenn es um Sicherheit geht .
ToolmakerSteve