Was ist der Prozentsatz von zwei Dateien mit der gleichen Bytegröße und dem gleichen MD5-Hash? [geschlossen]


1

Ich entwickle eine App, in der viele Dateien gespeichert werden. Bei Bildern wird die Größe geändert und die verschiedenen benötigten Miniaturansichten werden gespeichert. Wenn ein Benutzer ein Bild hochlädt, werden mehr als 8 Dateien gespeichert (dies ist erforderlich) ).

Um doppelte Dateien zu vermeiden und Speicherplatz auf meinem statischen Hosting-Server zu sparen, speichert meine App den Dateinamen als "MD5.BYTE_SIZE" (Beispiel: 054d995efa7e9c91569d205d24a2b486.188154)

Ich habe dieses Dateischema bereits auf anderen Clients ohne Probleme verwendet, aber ich muss speziell für dieses Projekt wissen, ob die Möglichkeit besteht, dass der Benutzer eine Datei mit demselben MD5 und derselben Größenlänge sendet.

Wenn ja, wie kann ich meine Dateinamen am besten speichern? Mit zwei verschiedenen Hashes (wie MD5.SHA-256.BYTE_SIZE)?


1
Dies wurde bereits hier behandelt: stackoverflow.com/questions/4032209/… Sie beschreiben die Wahrscheinlichkeit als "verschwindend klein".
Austin '' Danger '' Powers

Google "kryptografischer Hash".
Daniel R Hicks

Antworten:


4

Aus praktischen Gründen Null, es sei denn, der Benutzer versucht aktiv, zwei Dateien mit demselben Hash zu erstellen, was mit MD5 möglich ist.

Wenn Sie stattdessen SHA-256 verwenden, wird (aus praktischen Gründen) "Null" angezeigt, auch wenn der Benutzer aktiv versucht, zwei Dateien mit derselben Größe zu erstellen.

Die genaue Wahrscheinlichkeit, dass zwei verschiedene Dateien denselben Hash erzeugen, liegt bei etwa 1/2 ^ 128. Aufgrund des Geburtstagsparadoxons würden Sie ungefähr 2 ^ 64 Dateien benötigen, bis eine 50% ige Wahrscheinlichkeit besteht, dass zwei den gleichen Hash haben. Mach dir darüber in der Praxis keine Sorgen. Für SHA256 lauten die Zahlen 1/2 ^ 256 bzw. 2 ^ 128. Diese Zahlen werden auch als "nicht passieren" bezeichnet.


Wenn mein Dateiname für jede Datei (MD5.SHA-256.BYTE_SIZE) wäre, wäre die Wahrscheinlichkeit ungefähr 1/2 ^ 128 * 1/2 ^ 256?
Cusspvz

2
Es wäre immer noch "Null für alle praktischen Zwecke". Ihre Berechnung ist korrekt, aber die Geburtstagsparadoxzahlen können für Ihre Anwendung relevanter sein. Der Hauptvorteil der Verwendung verschiedener Hash-Funktionen besteht darin, dass Angriffe auf eine einzelne Funktion nicht funktionieren. Wenn es jemandem gelingt, zwei Dateien mit demselben SHA256-Hash zu erstellen, ist er berühmt und eine Menge Sicherheitsmaterial ist kaputt. Wenn es jemandem gelingt, zwei Dateien mit demselben MD5 und SHA256 zu finden, kümmert sich der NSA für Sie um ihn ;-) Und es handelt sich um einen Angreifer, der den Inhalt beider Dateien bestimmen kann, nicht nur eine.
Jan Schejbal

1

Es ist theoretisch möglich, aber in Wirklichkeit ist die Wahrscheinlichkeit, dass zwei verschiedene Dateien dieselbe MD5-Prüfsumme haben, sehr gering.

Mit anderen Worten, so klein, dass Sie dieses Ereignis für Ihr Programm so gut wie unmöglich behandeln können.


Ich mache mir deshalb Sorgen, wenn ein bösartiger Benutzer versucht, ein Bild mit geänderten Bytes vom Original hochzuladen, das meine realen Daten ersetzen könnte.
Cusspvz

1
@CuSS, fügen Sie Ihrem Upload-Code eine kleine Logik hinzu, die das Überschreiben verhindert, möglicherweise nach Datum oder nach Benutzername. Eine dreispaltige Datentabelle würde Ihnen helfen.
Frank Thomas

@CuSS - Erlaube nur nicht, dass ein Bild ersetzt wird, wenn es bereits existiert.
Ramhound
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.