it-swarm.com.de

Wie viele zufällige Elemente erzeugt MD5 vor Kollisionen?

Ich habe eine Bildbibliothek auf Amazon S3. Für jedes Bild habe ich die Quell-URL auf meinem Server sowie einen Zeitstempel eingegeben, um einen eindeutigen Dateinamen zu erhalten. Da S3 keine Unterverzeichnisse haben kann, muss ich alle diese Bilder in einem einzigen flachen Ordner speichern.

Muss ich mir Gedanken über Kollisionen im MD5-Hashwert machen, der erzeugt wird?

Bonus: Wie viele Dateien könnte ich haben, bevor Kollisionen im von MD5 erzeugten Hash-Wert auftreten?

150
Ben Throop

Die Wahrscheinlichkeit, dass nur zwei Hashes versehentlich kollidieren, beträgt 1/2128das ist 1 in 340 undecillion 282 decillion 366 nonillion 920 octillion 938 septillion 463 sextillion 463 quintillion 374 quadrillion 607 trillion 431 milliarden 768 millionen 211 tausend 456 .

Wenn Sie jedoch alle Hashes behalten, ist die Wahrscheinlichkeit dank des Geburtstagsparadoxons etwas höher. Um eine 50% ige Chance zu haben, dass ein Hash mit einem anderen Hash kollidiert, benötigen Sie 264 Hashes. Dies bedeutet, dass Sie für eine Kollision im Durchschnitt 100 Jahre lang 6 Milliarden Dateien pro Sekunde hashen müssen .

278
Kornel

S3 kann Unterverzeichnisse haben. Geben Sie einfach ein "/" in den Schlüsselnamen ein, und Sie können auf die Dateien zugreifen, als befänden sie sich in separaten Verzeichnissen. Ich verwende dies, um Benutzerdateien in separaten Ordnern basierend auf ihrer Benutzer-ID in S3 zu speichern.

Zum Beispiel: "mybucket/users/1234/somefile.jpg". Es ist nicht genau dasselbe wie ein Verzeichnis in einem Dateisystem, aber die S3-API verfügt über einige Funktionen, mit denen es fast genauso funktioniert. Ich kann es bitten, alle Dateien aufzulisten, die mit "users/1234 /" beginnen, und es zeigt mir alle Dateien in diesem "Verzeichnis".

26
davr

Also warte, ist es:

md5(filename) + timestamp

oder:

md5(filename + timestamp)

Wenn erstere, sind Sie den größten Teil des Wegs zu einer GUID, und ich würde mir darüber keine Sorgen machen. Wenn letzteres der Fall ist, lesen Sie in Kargs Beitrag nach, wie Sie irgendwann auf Kollisionen stoßen.

18
Ryan

Eine grobe Faustregel für Kollisionen ist die Quadratwurzel des Wertebereichs. Ihr MD5-Sig ist vermutlich 128 Bit lang, sodass Kollisionen über 2 ^ 64 Bilder hinaus wahrscheinlich sind.

10
Will Dean

Obwohl zufällige MD5-Kollisionen äußerst selten sind, können Ihre Benutzer Kollisionen verursachen, wenn sie Dateien bereitstellen können (die wörtlich gespeichert werden). Das heißt, sie können absichtlich zwei Dateien mit derselben MD5-Summe, aber unterschiedlichen Daten erstellen. Stellen Sie sicher, dass Ihre Anwendung diesen Fall auf vernünftige Weise handhabt, oder verwenden Sie möglicherweise einen stärkeren Hash wie SHA-256.

7
bdonlan

Während Probleme mit MD5 aufgrund von Kollisionen bekannt wurden, sind UNBEABSICHTIGTE Kollisionen zwischen Zufallsdaten äußerst selten . Auf der anderen Seite sind das keine zufälligen Daten, wenn Sie den Dateinamen kreuzen, und ich würde erwarten, dass es schnell zu Kollisionen kommt.

5
acrosman

Eine MD5-Kollision ist äußerst unwahrscheinlich. Wenn Sie 9 Billionen MD5s haben, gibt es nur eine Chance in 9 Billionen, dass es zu einer Kollision kommt.

1
Rick James

Es spielt keine Rolle, wie wahrscheinlich es ist. es ist möglich. Dies könnte bei den ersten beiden Dingen passieren, die Sie hashen (sehr unwahrscheinlich, aber möglich). Daher müssen Sie Kollisionen von Anfang an unterstützen.

1
Karg