Wie viele zufällige Elemente vor MD5 erzeugt Kollisionen?
Frage
Ich habe ein Bild-Bibliothek auf Amazon S3 bekam. Für jedes Bild, md5 ich die Quell-URL auf meinem Server und einen Zeitstempel einen eindeutigen Dateinamen zu erhalten. Da S3 nicht Verzeichnisse haben, muss ich alle diese Bilder in einem einzelnen flachen Ordner speichern.
Habe ich über Kollisionen in dem MD5-Hash-Wert kümmern, die produziert wird?
Bonus: Wie viele Dateien kann ich, bevor ich anfangen würde Kollisionen in dem Hash-Wert zu sehen, dass MD5 erzeugt
Lösung
Die Wahrscheinlichkeit von nur zwei Hashes versehentlich kollidiert ist 1/2 128 , die 1 in 340 Undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 Trillionen 374 Billi 607 Billionen 431 Milliarden 768 Millionen 211 tausend 456.
>Allerdings, wenn Sie halten alle Hashes dann ist die Wahrscheinlichkeit ist etwas höher dank Geburtstagsparadox . Um eine 50% ige Chance eines Hash mit einem anderen Hash-Kollision Sie benötigen 2 64 Hashes. Dies bedeutet, dass eine Kollision zu erhalten, im Durchschnitt, werden Sie Hash müssen 6 Milliarden Dateien pro Sekunde 100 Jahre .
Andere Tipps
S3 können Unterverzeichnisse haben. Einfach ein „/“ in den Schlüsselnamen, und Sie können die Dateien zugreifen, als ob sie in separaten Verzeichnissen waren. Ich benutze diese auf ihrer Benutzer-ID in S3 basierten Benutzer-Dateien in separaten Ordnern zu speichern.
Zum Beispiel: "mybucket / users / 1234 / somefile.jpg". Es ist nicht genau das gleiche wie ein Verzeichnis in einem Dateisystem, aber die S3 API einige Funktionen, die es fast die gleichen Arbeit lassen. Ich kann es fragen, um alle Dateien auflisten, die mit „Benutzer / 1234 /“ beginnen und es zeigt mir alle Dateien in diesem „Verzeichnis“.
So warten, ist es:
md5(filename) + timestamp
oder:
md5(filename + timestamp)
Wenn die ehemaligen, Sie sind die meisten des Weges zu einer GUID, und ich würde mir keine Sorgen. Wenn letzteres, dann sieht Karg die Post darüber, wie Sie in Kollisionen schließlich laufen werden.
Eine grobe Daumenregel für Kollisionen ist die Quadratwurzel des Wertebereichs liegt. Ihre MD5 sig ist vermutlich 128 Bit lang, so dass Sie gehen wahrscheinlich sein, um zu sehen Kollisionen weit über 2 ^ 64 Bilder.
Obwohl zufällige MD5-Kollisionen äußerst selten sind, wenn die Benutzer Dateien zur Verfügung stellen können (das wörtlich gespeichert werden), dann können sie Kollisionen konstruieren zu kommen. Das heißt, sie absichtlich erstellen zwei Dateien mit dem gleichen MD5sum aber unterschiedlichen Daten. Stellen Sie sicher, dass Ihre Anwendung diesen Fall in einer vernünftigen Art und Weise handhaben kann, oder vielleicht eine stärkere Hash wie SHA-256 verwendet werden.
Während es gut Probleme mit MD5 aufgrund von Kollisionen, UNABSICHTLICHE Kollisionen zwischen Zufallsdaten veröffentlicht worden sind
MD5 Kollision ist extrem unwahrscheinlich. Wenn Sie 9000000000000 MD5s, gibt es nur eine Chance in 9000000000000 , dass es eine Kollision sein.
ist nicht wirklich wichtig, wie wahrscheinlich es ist; es ist möglich. Es könnte auf den ersten beiden Dinge passieren Sie (sehr unwahrscheinlich, aber möglich) Hash, so dass Sie Kollisionen von Anfang an unterstützen müssen.