Ich frage mich nur, ob es möglich ist, eine Datei zu erstellen, in der sich auch md5sum und andere Inhalte befinden.
Ich frage mich nur, ob es möglich ist, eine Datei zu erstellen, in der sich auch md5sum und andere Inhalte befinden.
Beachten Sie Folgendes: Sie erstellen eine Datei, die jedes Mitglied des Satzes von 16-Byte-Sequenzen enthält. Eine MD5-Prüfsumme ist eine 16-Byte-Sequenz, daher enthält diese Datei per Definition eine eigene MD5-Prüfsumme. Irgendwo.
Theoretisch? Ja.
Praktisch jedoch, da / jede / Änderung des Inhalts einer Datei, egal wie klein, eine drastische Änderung der Prüfsumme verursacht (so funktionieren schließlich md5-Prüfsummen), würden Sie müssen in der Lage sein, vorherzusagen, wie sich die Prüfsumme ändert, wenn Sie die Datei so ändern, dass sie die Prüfsumme enthält - in jeder Hinsicht unterscheidet sich dies nicht wesentlich von der Möglichkeit, den md5-Hashing-Algorithmus zu brechen.
In der Kryptographie gibt es kein "Unmögliches", aber die Wissenschaft erkennt das Konzept von "praktisch nicht rückgängig zu machen" oder "statistisch unwahrscheinlich" an, und genau das sind Sie im Moment hier zu behandeln.
Update: Als ich noch einmal darüber nachdachte, fand ich eine Methode, mit der eine Datei mit einem eigenen MD5 viel schneller erstellt werden kann als ursprünglich erklärt. Die neuen Kosten sollten ungefähr 2 65 Elementaraufrufe von MD5 betragen, d. H. Viel weniger als die 2 119, über die ich gesprochen habe; es wäre sogar technologisch machbar (mit einem Budget in Millionen von Dollar - aber nicht in Milliardenhöhe). Eine Beschreibung der neuen Methode finden Sie am Ende.
Ursprüngliche Antwort:
Nehmen wir an, MD5 ist ein "perfekter" Hash Funktion, die als zufälliges Orakel modelliert werden kann. Ein zufälliges Orakel ist eine Funktion, für die Sie nichts über die Ausgabe einer bestimmten Eingabe wissen, bevor Sie sie einmal ausprobieren. Für ein zufälliges Orakel ist die beste Methode, um das zu erreichen, wonach Sie suchen, die Hoffnung: Sie versuchen es mit zufälligen Eingabenachrichten, bis Sie eine finden, die einen eigenen Hash enthält. Die Frage ist dann: Welche Größe von Eingabenachrichten sollten Sie verwenden?
MD5 verarbeitet Daten durch Hinzufügen einiger Auffüllbits (mindestens 65, höchstens 576), sodass die Länge ein Vielfaches von 512 beträgt. Dann werden die Daten in 512-Bit-Blöcke aufgeteilt. Die Kosten für das Hashing einer Nachricht sind direkt proportional zur Anzahl solcher Blöcke. Das heißt, Für eine n -Bit-Nachricht betragen die Kosten Ceil ((n + 65) / 512) . Eine n -Bit-Nachricht bietet andererseits n-127 Teilsequenzen von 128 Bit. Längere Nachrichten machen es wahrscheinlicher, dass jede Nachricht (linear) erfolgreich ist, die Verarbeitung kostet jedoch mehr (auch linear). Die Nachrichtenlänge ist also größtenteils neutral, mit der Ausnahme, dass der durch das Auffüllen implizierte Overhead bei Verwendung von Kurznachrichten größer ist. Insgesamt finden Sie bei ausreichend großen Zufallsnachrichten (z. B. 8 kB) eine Nachricht, die ein eigenes MD5 enthält, dessen durchschnittliche Kosten etwa 2 119 sup> MD5-Elementarbewertung betragen. Eine elementare Auswertung von MD5 verwendet einige hundert Taktzyklen auf einer neueren CPU, und 2 sup> ist mit der heutigen Technologie (und auch mit der Technologie von morgen) völlig unerreichbar. P. >
(Die "große Datei mit allen 128-Bit-Sequenzen", von der Graham Lee spricht, ist nur ein Sonderfall dieser generischen Methode mit einer einzigen sehr großen Nachricht.)
Jetzt ist MD5 Es ist allgemein bekannt, dass kein zufälliges Orakel ist - schon allein deshalb, weil Kollisionen auf MD5 effizient berechnet werden können, was mit einem zufälligen Orakel nicht möglich ist. Es ist daher denkbar, dass Verknüpfungen vorhanden sind, die Schwachstellen in der MD5-Struktur ausnutzen. Mir ist jedoch kein Angriff bekannt, der zu einer Nachricht führt, die ein eigenes MD5 enthält. Dies scheint ein Problem in der Nähe des Vorbildwiderstands zu sein, was als wesentlich schwieriger angesehen wird als Kollisionen.
Neue Methode:
MD5 wird wie die meisten (wenn nicht alle) Hash-Funktionen gestreamt : Wenn eine lange Eingabe verarbeitet wird, erfolgt dies in einem Durchgang, wobei ein kleiner Betriebszustand mit fester Größe beibehalten wird. Speziell für MD5 hat der Betriebszustand eine Größe von 128 Bit (16 Byte), und Daten werden in Blöcken von 512 Bit (64 Byte) verarbeitet. Eine wichtige Konsequenz ist die folgende: Wenn Sie Eingaben m und m || x haben ("||" bedeutet Verkettung) und Sie beide MD5 ( m ) und MD5 ( m || x ), dann sind die zusätzlichen Kosten, die zur Berechnung des zweiten erforderlich sind, proportional zur Größe von x , jedoch NICHT auf die Größe von m . Mit anderen Worten, wenn Sie eine 1-Gigabyte-Eingabe m haben, berechnen Sie MD5 ( m ) und möchten dann die MD5 von m berechnen Durch einen 20-Byte-Trailer x kann dieser zweite MD5 einen Großteil der für den ersten geleisteten Arbeit wiederverwenden und ist nahezu kostenlos.
Dies führt zu dem folgenden Algorithmus So finden Sie eine Nachricht m , die ein eigenes MD5 enthält:
Das Finden des richtigen " x " - Werts bei jedem Schritt kann mithilfe einer De Bruijn-Sequenz a erfolgen >. Verwenden Sie B (2, 128) als Basissequenz, wenn jedes x ein einzelnes Bit ist. Wenn Sie eine byteorientierte Lösung wünschen (die Nachricht m muss aus einer ganzzahligen Anzahl von Bytes bestehen, und MD5 ( m ) muss in m em erscheinen > an einer Bytegrenze), verwenden Sie dann B (256, 16) .
Um die durchschnittliche Anzahl von Iterationen zu berechnen, die zum Auffinden eines Treffers erforderlich sind, müssen Sie berücksichtigen, dass bei der Iteration n die Nachricht m n unterschiedliche Teilsequenzen enthält von 128 Bits (oder 16 Bytes), so dass die akkumulierte Gesamtzahl der Vergleiche n ( n +1) / 2 beträgt. Unter der Annahme, dass MD5 ein zufälliges Orakel ist, hat jeder Vergleich die Wahrscheinlichkeit 2 , ein Treffer zu sein, so dass n im Durchschnitt so sein muss, dass n ( n +1) / 2 = 2 sup> 128 sup> - was zu n = 2 64,5 sup> -Iterationen führt.
Bei jeder Iteration wird jedoch ein MD5 ( m || x ) berechnet, wobei x sehr klein ist (ein Bit oder ein Byte) ) und MD5 ( m ) wurde berechnet; Dies erfordert normalerweise nur eine zusätzliche elementare MD5-Berechnung (Verarbeitung eines einzelnen 64-Byte-Blocks). (Wenn x Bits sind, muss für nur eine Iteration in 512 zwei Blöcke verarbeitet werden. Wenn x Bytes sind, wird dies zu einer Iteration in 64. )
In jedem Fall wird der schwierige Teil die Suche sein. Um alle Teilsequenzen in einem Index zu erhalten, der für eine schnelle Suche geeignet sortiert ist, ist eine Menge schneller RAM erforderlich, was wahrscheinlich viel teurer wäre als die Berechnung des 2 sup> 64,5 sup> MD5. Einige De Bruijn-Sequenzen ermöglichen jedoch eine schnelle, speicherfreie Dekodierung. Daher können wir mit diesem Algorithmus eine Nachricht m finden, die ihre eigene MD5 enthält, und zwar zu Kosten nahe 2 65 sup> -Berechnungen von MD5. Die resultierende Nachricht hat eine Länge von ungefähr 3,3 * 10 sup> 18 sup> Bytes, dh ungefähr eine Million moderner Festplatten (achtmal so viel, wenn wir eine byteorientierte Lösung wünschen).
Es Es kann angemerkt werden, dass der Algorithmus mit einer beliebigen Nachricht m beliebiger Größe gestartet werden kann. Dieser Startpunkt wird am Anfang der vom Algorithmus erzeugten Self-MD5-Datei angezeigt.
(In meiner ursprünglichen Antwort war der Fehler in diesem Satz: "Längere Nachrichten machen es wahrscheinlicher, dass jede Nachricht (linear) erfolgreich ist, die Verarbeitung kostet jedoch mehr (auch linear)." Wie oben erläutert, länger Nachrichten können immer noch sehr effizient verarbeitet werden, solange wir sie durch Wiederverwendung eines gemeinsamen Präfixes wie in meinem neuen Algorithmus generieren.)
Kryptografisch gesehen ist der von Ihnen beschriebene Angriff tatsächlich schwieriger als das Auffinden eines ersten Vorbilds , möglicherweise sogar schwieriger als das Auffinden eines zweiten Vorbilds .
Dies ist nicht möglich angesichts der heutigen Rechenleistung und der heutigen Kryptoangriffe.
Aktuelle Angriffe auf MD5 finden nicht einmal annähernd Vorbilder - wir sprechen von etwas völlig anderem als den verschiedenen demonstrierten Kollisionsangriffen (und sind der Grund, warum MD5 als etwas unsicher gilt). Der Angriff, der erforderlich wäre, um eine Datei mit MD5 zu erstellen, hat nichts mit Kollisionen zu tun.
Ich würde sagen, dass ein solcher Angriff, da er, wie bereits erwähnt, noch schwieriger ist als ein Angriff vor dem Bild, sehr ist unwahrscheinlich in unseren Leben.
(Kopieren meines ursprünglichen Kommentars als Antwort :)
Es ist besser, einen Abschnitt der Datei für den MD5 / Hash und einen separaten Abschnitt für den Inhalt zu erstellen.
Auf der anderen Seite, da jeder den Hash-Teil neu erstellen kann, welchen Sicherheitswert würden Sie daraus erhalten?
Sie könnten einen Manipulationsschutz durch eine digitale Signatur (oder möglicherweise über HMAC) erhalten, aber Ein einfacher Hash hilft Ihnen dort nicht weiter.
Oder versuchen Sie etwas anderes zu tun?
Was Sie fragen, ist die Existenz eines Fixpunkts der Zusammensetzung zweier Funktionen: der md5
-Funktion und einer Funktion ( Nennen wir es f
und nennen wir die Menge all dieser Funktionen F
), die einen md5 nehmen und Ihre Datei ausgeben. Das heißt, X = f (md5 (X))
.
Wie der Wikipedia-Artikel sagt, haben nicht alle Funktionen einen Fixpunkt.
Für einige Kleinigkeiten Funktionen in F
lautet die Antwort ja. Beispielsweise führt eine Funktion, die die Eingabe immer verwirft und immer eine Null-Byte-Datei ausgibt, offensichtlich dazu, dass ihre Zusammensetzung mit md5
einen Fixpunkt hat. Offensichtlich sind diese Fälle nicht das, was Sie wollen - Sie können nicht mit ernstem Gesicht sagen, dass es "seine md5sum in sich enthält". Verfeinern wir also unsere Definition.
Beschränken wir zunächst unsere Menge F
auf alle Funktionen, die die Verkettung eines Präfixes, der Eingabe und ausgeben ein Postfix. Das heißt, f (X) = pre∥X∥post
. Damit muss die gesamte md5sum irgendwo in der Datei erscheinen, intakt, binär und genau einmal. Dies ist viel restriktiver als Ihre Definition (die die md5sum als Text zulässt, in Teile zerlegt, wiederholt oder sogar als .wav
-Datei gesprochen wird!), Vermeidet jedoch die entarteten Funktionen, die dies nicht tun Schließen Sie die md5-Summe oder nur einen Teil davon ein.
Es ist auch leicht zu erkennen, dass md5 (f (X))
hat auch einen Fixpunkt und umgekehrt.
Sehen Sie sich nun diese Frage zum Stapelüberlauf an: Gibt es einen MD5-Fixpunkt, an dem md5 (x) == x ist ?. Schauen Sie sich insbesondere die Antwort von Adam Rosenfield an. Darin können wir sehen, dass es eine 63,21% ige Wahrscheinlichkeit gibt, dass md5 (X)
einen festen Punkt hat (natürlich existiert der Fixpunkt entweder oder existiert nicht; dies ist eine Bayes'sche Wahrscheinlichkeit, was unsere Überzeugung misst, dass es existiert).
Das gleiche Argument, das in dieser Antwort verwendet wird, kann auf md5 (f (X))
und damit auf f (md5 (X))
angewendet werden. Es besteht also eine Wahrscheinlichkeit von 63,21%, dass für ein bestimmtes Präfix und Postfix (dh für eine bestimmte Funktion f
) eine Datei mit einer eigenen md5-Summe vorhanden ist, und eine Wahrscheinlichkeit von 36,79%, dass keine solche vorhanden ist Datei existiert. Auch dies ist die Bayes'sche Wahrscheinlichkeit.
Wie in dieser Antwort erwähnt, ist das gleiche Argument auch für jede Datei gültig, die von genügend md5-Ausgabe abhängt. Bei Dateien, die nur von ein paar Bits der md5-Ausgabe abhängen oder überhaupt nicht davon abhängen (einschließlich der Antwort von @Graham Lee, die von 0 Bits der md5-Ausgabe abhängt), ist die Antwort unterschiedlich.
Sie können dies mithilfe eines alternativen Datenstroms tun, obwohl die Informationen möglicherweise nicht ordnungsgemäß zwischen bestimmten Dateisystemen oder Betriebssystemen übertragen werden. Bestimmte Anwendungen können diese auch unterschiedlich behandeln (oder nicht).
Kurz gesagt, alternative Datenströme sind eine Form von Metadaten, die an Dateien in einigen Dateisystemen angehängt sind (NTFS ist eine), die beim Anzeigen nicht ohne weiteres angezeigt werden den Inhalt eines Verzeichnisses. Selbst wenn das System so eingestellt ist, dass "versteckte Dateien" und diese immer kritischen "geschützten Betriebssystemdateien" angezeigt werden, wird in den meisten Dateimanagern keine ADS- "Datei" angezeigt.
Zusätzlich wird der "Host" angezeigt. Die Datei selbst wird überhaupt nicht geändert angezeigt. Die Dateigröße bleibt gleich, und selbst der MD5-Hash (oder ein anderer) bleibt gleich. Es ist sogar denkbar, dass Sie eine ADS- "Datei" speichern, die größer als die Hostdatei ist - obwohl Sie natürlich keine so große Datei speichern können, dass sie über die physische Kapazität Ihres Laufwerks hinausgeht.
In Windows-Systemen mit NTFS Auf ADS-Dateien kann am einfachsten über die Befehlszeile zugegriffen werden. Wenn Sie für File1.ext den MD5-Hash in einem ADS speichern möchten, gehen Sie wie folgt vor:
notepad File1.ext: MD5.txt
File1.ext: MD5.txt
nicht vorhanden ist. Sagen Sie Notepad, dass Sie eine neue Datei erstellen möchten. Auch hier werden ADS von verschiedenen Betriebssystemen und Dateisystemen unterschiedlich behandelt. Daher ist es unwahrscheinlich, dass sie das Internet (oder sogar einige LANs oder Sneakernets) sehr gut durchqueren. Auf diese Weise können Sie jedoch das tun, was Sie anscheinend möchten.
Weitere Informationen, Anweisungen oder Dienstprogramme erhalten Sie von Google.
Im allgemeinen Fall, nein, da das Hinzufügen der MD5-Summe die Datei selbst und damit ihre MD5-Summe die meiste Zeit ändern würde ...
Bei speziell gestalteten Dateien könnte dies jedoch der Fall sein möglich, einen Kollisionsangriff zu verwenden.
Es gibt ein Beispiel für Kollisionsangriffe, bei denen zwei PostScript-Dateien so ausgelegt sind, dass sie hier dieselbe MD5-Summe haben (es gibt auch Papierreferenzen): http: // th .informatik.uni-mannheim.de / people / lucks / HashCollisions /
Möglicherweise können Sie denselben Ansatz verwenden, um eine zweite Datei zu generieren, die den ursprünglichen Inhalt, die MD5-Summe, enthält und einige zusätzliche Inhalte, um die Kollision durchzuführen.
Sie könnten so etwas wie ein Wrapper-Format haben, das das MD5 in einem Teil der Datei und den realen Inhalt in einem anderen Teil der Datei enthält.
Dies wäre nutzlos, da der Angreifer, wenn er den Inhalt ändern kann, auch das MD5 so ändern kann, dass es dem neuen Inhalt entspricht.
Wenn Sie etwas über den Tellerrand hinaus denken, können Sie eine Variable codieren, um das MD5 einer Datei (die genaue Datei) zu speichern. Wenn also das tatsächliche MD5 der Datei im ebenen Text nicht in der Datei selbst enthalten ist, wenn Die Datei war ausführbarer Code, der so programmiert werden konnte, dass ein Wert seines eigenen md5 als Variable gespeichert wird.
Um eine solche Idee weiter zu verbessern (um ihr einen verwendbaren Wert zu geben), können Sie sie speichern das md5 in einer separaten Datei (erstellt nach Abschluss) und sichern Sie diese zweite Datei so, dass nur die erste Datei eine vernünftige Methode für den Zugriff darauf und den Vergleich mit der zuvor berechneten md5-Variablen enthält.
Die tatsächliche Die Nützlichkeit einer solchen Idee beschränkt sich wahrscheinlich nur auf die Möglichkeit, zu überprüfen, ob die Datei selbst nicht geändert wurde, und auf eine bereits eingetretene Sicherheitsverletzung aufmerksam zu machen, anstatt sie überhaupt zu verhindern.
Wenn die Bits nicht aufeinander folgen müssen , ist dies sicher ziemlich einfach.
Diese Datei funktioniert:
1 0 0 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 00 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 00 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 10 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 0 1 1 0
(Datei wird binär angezeigt.)
Die md5sum davon lautet 5FADE2F41E1B9759DB92E54DB9519365
oder binär:
0 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 1 0 1 0 1 1 0 0 11 1 0 1 1 0 1 1 1 0 0 1 0 0 1 0 1 1 1 0 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 1 0 0 1 0 0 1 1 0 1 1 0 0 1 0 1
Die md5sum befindet sich in der Datei (obwohl nicht nacheinander). Dies ist dieselbe Datei wie oben, wobei die md5sum so angezeigt wird, wie sie ist, während die anderen Inhalte durch -
:
- 0 - 1 0 1 1 - ersetzt werden. 1 - 1 - 1 - - 1 - 0 1 0 - 1 - 1 0 1 - 1 1 - 1 0 0 - 0 1 - 0 1 - - 1 - 1 - 1 - 0 1 0 - 0 0 - - 0 - 0 - 1 1 - 1 - 1 - 0 0 - - 0 - 0 1 - - 1 - 0 1 - - 1 1 0 - 0 1 0 1 - - 1 1 0 - 1 - 0 1 - - 1 0 - 0 1 1 - - 1 - 0 1 - 1 0 - 1 1 - - 1 - 0 - 0 - 1 0 - - 0 - 1 0 1 1 - - 1 0 - - 0 1 0 1 0 1 0 - 0 1 - 1 0 - 1 1 0 1 - 1 - - 1 - 0 - 0 - 1 - 0 - 1 0 1 - 0 0 - - 0 1 - 1 0 0 10 - 0 1 1 0 1 - - 1 - 0 0 1 0 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Natürlich würde diese Datei auch funktionieren:
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Es ist md5sum ist DB4C2CAB0A3E4320AB6CA03127F20937
. In binärer Form:
1 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 01 0 1 0 1 0 1 1 0 1 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1
Und hier ist die md5sum, wie sie in der Datei zu sehen ist:
- 1 - 1 0 1 - 1 0 1 - 1 0 1 0 - 0 1 - 1 0 - 0 - 0 - 0 1 0 1 - 1 0 - 0 1 0 1 0 1 0 1 - 1 0 - 0 - 0 - 0 1 0 1 0 - 0 - 0 1 - 1 - 1 - 1 - 1 0 - 0 1 0 - 0 - 0 - 0 - 0 1 - 1 0 - 0 1 0 - 0 - 0 - 0 - 0 1 0 1 0 1 0 1 - 1 0 1 - 1 0 1 - 1 0 - 0 1 0 1 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 1 - 1 0 - 0 - 0 1 0 - 0 1 0 - 0 1 - 1 - 1 - 1 - 1 - 1 - 1 0 - 0 1 0 - 0 - 0 - 0 - 0 1 0 - 0 1 0 - 0 1 - 1 0 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[Ist es möglich, eine Datei zu erstellen, in der sich auch md5sum und andere Inhalte befinden.
Ja, und dies ist trivial beweisbar.
MD5 erzeugt einen endlichen Raum [16 Bytes oder 128 Bit] möglicher Ausgabe-Hashes. Als Eingabe wird ein potenziell unendlicher Satz möglicher Dokumente verwendet, die potenzielle MD5-Hashwerte enthalten, wobei jedes einen Hashwert in diesem endlichen Raum erzeugt.
Nach dem Pigeonhole-Prinzip muss es eine unendliche Anzahl von Kollisionen sein [mehrere Dokumente mit demselben Hashwert], und einige davon müssen diesen Hash enthalten.
Wie andere betont haben, ist dies nicht praktisch ist aber möglich.