Wird das Hashing einer Datei durch MD5 immer noch als ausreichend gute Methode angesehen, um sie eindeutig zu identifizieren, da der MD5-Algorithmus und Sicherheitsprobleme usw. nicht mehr funktionieren? Sicherheit ist hier nicht mein Hauptanliegen, aber die eindeutige Identifizierung jeder Datei ist.
Irgendwelche Gedanken?
Antworten:
Ja. MD5 wurde aus Sicherheitsgründen vollständig zerstört, aber die Wahrscheinlichkeit einer versehentlichen Kollision ist immer noch verschwindend gering. Stellen Sie nur sicher, dass die Dateien nicht von jemandem erstellt werden, dem Sie nicht vertrauen und der möglicherweise böswillige Absichten hat.
quelle
Aus praktischen Gründen mag der erstellte Hash angemessen zufällig sein, aber theoretisch besteht aufgrund des Pigeonhole-Prinzips immer die Wahrscheinlichkeit einer Kollision . Unterschiedliche Hashes bedeuten sicherlich, dass die Dateien unterschiedlich sind, aber der gleiche Hash bedeutet nicht unbedingt, dass die Dateien identisch sind.
Die Verwendung einer Hash-Funktion für diesen Zweck - unabhängig davon, ob die Sicherheit ein Problem darstellt oder nicht - sollte daher immer nur der erste Schritt einer Überprüfung sein, insbesondere wenn bekannt ist, dass der Hash-Algorithmus leicht Kollisionen erzeugt. Um zuverlässig herauszufinden, ob zwei Dateien mit demselben Hash unterschiedlich sind, müssen Sie diese Dateien Byte für Byte vergleichen.
quelle
MD5 ist gut genug, wenn Sie keinen Gegner haben. Jemand kann jedoch (absichtlich) zwei unterschiedliche Dateien erstellen, die denselben Wert haben (dies wird als Kollision bezeichnet), und dies kann abhängig von Ihrer genauen Situation ein Problem sein oder auch nicht.
Da es eine subtile Angelegenheit ist, zu wissen, ob bekannte MD5-Schwachstellen für einen bestimmten Kontext gelten, wird empfohlen, MD5 nicht zu verwenden. Die Verwendung einer kollisionssicheren Hash-Funktion (SHA-256 oder SHA-512) ist die sichere Antwort. Die Verwendung von MD5 ist auch eine schlechte Öffentlichkeitsarbeit (wenn Sie MD5 verwenden, müssen Sie sich rechtfertigen müssen; während niemand Ihre Verwendung von SHA-256 in Frage stellt).
quelle
return 0;
in a umwandeltreturn 1;
). Dies ist höchst unwahrscheinlich, aber das Risiko einer Kollision mit SHA-256 ist noch geringer. Mathematisch gesehen können Sie nicht sicher sein, dass zwei Dateien mit demselben Wert identisch sind, aber Sie können sich auch nicht sicher sein, indem Sie die Dateien selbst vergleichen, solange Sie einen Computer für den Vergleich verwenden. Was ich damit meine ist, dass es bedeutungslos ist, über 99,999 hinauszugehen ... 9% Sicherheit, und SHA-256 bietet bereits mehr als das.Ein md5 kann Kollisionen erzeugen. Theoretisch kann eine Million Dateien hintereinander denselben Hash erzeugen, obwohl dies höchst unwahrscheinlich ist. Testen Sie Ihr Glück nicht und suchen Sie nach MD5-Kollisionen, bevor Sie den Wert speichern.
Ich persönlich mag es, md5 von zufälligen Zeichenfolgen zu erstellen, was den Aufwand für das Hashing großer Dateien verringert. Wenn Kollisionen gefunden werden, iteriere ich und hashe erneut mit dem angehängten Schleifenzähler.
Sie können nach dem Pigeonhole-Prinzip lesen .
quelle
Ich würde es nicht empfehlen. Wenn die Anwendung auf einem Mehrbenutzersystem funktionieren würde, könnte es einen Benutzer geben, der zwei Dateien mit demselben MD5-Hash hat (er könnte Ingenieur sein und mit solchen Dateien spielen oder einfach nur neugierig sein - sie können leicht von http: / heruntergeladen werden /www2.mat.dtu.dk/people/S.Thomsen/wangmd5/samples.html , ich selbst habe beim Schreiben dieser Antwort zwei Beispiele heruntergeladen). Eine andere Sache ist, dass einige Anwendungen solche Duplikate aus irgendeinem Grund speichern könnten (ich bin nicht sicher, ob es solche Anwendungen gibt, aber die Möglichkeit besteht).
Wenn Sie von Ihrem Programm generierte Dateien eindeutig identifizieren, ist die Verwendung von MD5 in Ordnung. Ansonsten würde ich jede andere Hash-Funktion empfehlen, bei der noch keine Kollisionen bekannt sind.
quelle
Persönlich denke ich, dass Leute rohe Prüfsummen (wählen Sie Ihre Methode) anderer Objekte verwenden, um viel zu viel als eindeutige Bezeichner zu fungieren, wenn sie wirklich eindeutige Bezeichner haben möchten. Das Fingerabdrucken eines Objekts für diese Verwendung war nicht die Absicht und erfordert wahrscheinlich mehr Nachdenken als die Verwendung einer UUID oder eines ähnlichen Integritätsmechanismus.
quelle
MD5 ist defekt, Sie könnten stattdessen SHA1 verwenden (in den meisten Sprachen implementiert)
quelle
Wenn Sie kurze (<einige K?) Zeichenfolgen (oder Dateien) hashen, können Sie zwei md5-Hash-Schlüssel erstellen, einen für die eigentliche Zeichenfolge und einen zweiten für die Umkehrung der mit einer kurzen asymmetrischen Zeichenfolge verketteten Zeichenfolge. Beispiel: md5 (umgekehrt (Zeichenfolge || '1010')). Durch Hinzufügen der zusätzlichen Zeichenfolge wird sichergestellt, dass selbst Dateien, die aus einer Reihe identischer Bits bestehen, zwei verschiedene Schlüssel generieren. Bitte haben Sie Verständnis dafür, dass selbst unter diesem Schema die theoretische Wahrscheinlichkeit besteht, dass die beiden Hash-Schlüssel für nicht identische Zeichenfolgen identisch sind, die Wahrscheinlichkeit jedoch außerordentlich gering erscheint - etwas in der Größenordnung des Quadrats der einzelnen md5-Kollisionswahrscheinlichkeit und der Zeitersparnis kann beträchtlich sein, wenn die Anzahl der Dateien zunimmt. Ausgefeiltere Schemata zum Erstellen der zweiten Zeichenfolge könnten ebenfalls in Betracht gezogen werden:
Um nach Kollisionen zu suchen, kann dieser Test auf die Eindeutigkeit der md5-Hash-Schlüssel für alle bit_vectors in einer Datenbank ausgeführt werden:
Wählen Sie md5 (bit_vector), count (*), bit_and (bit_vector) aus db mit bit_vector
group durch md5 (bit_vector), bit_vector mit bit_and (bit_vector) <> bit_vector
quelle
Ich stelle mir MD5 gerne als Indikator für die Wahrscheinlichkeit vor, wenn eine große Menge von Dateidaten gespeichert wird.
Wenn die Hashes gleich sind, weiß ich, dass ich die Dateien byteweise vergleichen muss, aber das kann aus falschen Gründen nur ein paar Mal passieren, andernfalls (Hashes sind nicht gleich) kann ich sicher sein, dass es sich um zwei verschiedene Dateien handelt .
quelle