Welche MD5-Transformation? Die mathematische (von einer beliebigen Bitfolge bis 128 Bit) oder diejenige von einem beliebigen Bytestring zu einer 32-stelligen Hexzeichenfolge (die praktische)? Es ist nicht offensichtlich, dass die Antworten für beide gleich sind ...
Rafał Dowgird
4
Nun, sie sind die gleiche Antwort, oder? Wir wissen , dass es existiert kein nicht-128-Bit-lange x , für die md5(x) == x, da md5(x)ist 128 Bit lang. Daher gibt es in md5 genau dann einen festen Punkt für Eingaben beliebiger Größe, wenn es in md5 einen festen Punkt in der 128-Bit-Domäne gibt.
der Paul
1
Ich denke nicht, dass sie die gleiche Antwort sind, da es für die praktische 32-stellige Hexstring eine willkürliche Wahl ist, ob Sie die hexadezimalen Ziffern in Großbuchstaben [AF] oder in Kleinbuchstaben [af] darstellen. Beide Darstellungen entsprechen derselben 128-Bit-Nummer, ergeben jedoch unterschiedliche Hashes, wenn sie als Eingaben für MD5 bereitgestellt werden. So ist die Wahrscheinlichkeit , dass es ein fester Punkt in ist entweder die Darstellungen ist in der Tat1-(1/e)*(1/e) ≈ 86.47%
Dušan
Antworten:
138
Da eine MD5-Summe 128 Bit lang ist, müsste jeder feste Punkt notwendigerweise auch 128 Bit lang sein. Unter der Annahme , dass die Summe von beliebigen MD5 Zeichenfolge gleichmäßig über alle möglichen Summen verteilt ist, dann ist die Wahrscheinlichkeit , dass eine bestimmte 128-Bit - String ist ein fester Punkt ist , 1 / 2 128 .
Somit ist die Wahrscheinlichkeit , dass keine 128-Bit - Ketten ein fester Punkt ist , ist (1 - 1 / 2 128 ) , 2 128 , so dass die Wahrscheinlichkeit , dass es ein fester Punkt ist , 1 - (1 - 1 / 2 128 ) , 2 128 .
Da die Grenze , wenn n gegen unendlich geht von (1 - 1 / n ) n ist 1 / e und 2 128 ist mit Sicherheit eine sehr große Zahl, ist diese Wahrscheinlichkeit fast genau 1 - 1 / e ≈ 63,21%.
Natürlich gibt es keine Zufälligkeit - entweder gibt es einen festen Punkt oder es gibt keinen. Wir können jedoch zu 63,21% davon überzeugt sein, dass es einen festen Punkt gibt. (Beachten Sie auch, dass diese Zahl nicht von der Größe des Schlüsselraums abhängt. Wenn MD5-Summen 32 Bit oder 1024 Bit wären, wäre die Antwort dieselbe, solange sie größer als 4 oder 5 Bit ist.)
Können Sie tatsächlich davon ausgehen, dass die MD5-Summe eines Strings gleichmäßig über alle möglichen Summen verteilt ist?
Ori Pessach
13
Ja. Große und modulare Zahlen bilden eine ungefähr zufällige Verteilung. Wenn sie nicht wären, hätten Sie ständige Kollisionen. Die Natur von md5 erzwingt eine zufällige Verteilung seiner Ausgabe.
Der Link funktioniert nicht. Google Plus im April geschlossen
Typewar
Entschuldigung ... Ich habe den Blog-Beitrag nicht gespeichert und Google + Backup funktioniert bei mir nicht. Aber hier ist mein Github-Projekt: github.com/thomasegense/MD5FixPointSearch
Thomas Egense
Sind Sie sich sicher: Präfix 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762 Ich habe den md5sumLinux-Befehl verwendet, ich habe ein anderes Ergebnis erhalten
ThunderPhoenix
Ich bin mir nicht sicher, ob Sie die md5sum richtig verwenden. Sie können es auch online hier bestätigen: onlinemd5.com
Thomas Egense
11
Da der Hash irreversibel ist, wäre dies sehr schwer herauszufinden. Die einzige Möglichkeit, dies zu lösen, besteht darin, den Hash für jede mögliche Ausgabe des Hash zu berechnen und zu prüfen, ob Sie eine Übereinstimmung gefunden haben.
Ein MD5-Hash enthält 16 Bytes. Das heißt, es gibt 2 ^ (16 * 8) = 3,4 * 10 ^ 38 Kombinationen. Wenn es 1 Millisekunde dauern würde, einen Hash für einen 16-Byte-Wert zu berechnen, würde es 10790283070806014188970529154.99 Jahre dauern, um alle diese Hashes zu berechnen.
Stimmt, wenn Sie jeden ausprobieren müssten . Sie müssten jedoch nur jede mögliche Eingabe versuchen, um sicherzustellen, dass es keinen festen Punkt gibt. Wenn es einen festen Punkt gibt (und Adam Rosenfields Antwort legt nahe, dass es einen geben könnte), dann ist eine glückliche Vermutung alles, was benötigt wird.
Naaff
Die Funktion ist in dem Sinne irreversibel, dass sie keine mathematische Umkehrung hat. Dies bedeutet jedoch nur, dass es für eine gegebene Ausgabe mehr als eine Eingabe geben kann. Im Allgemeinen ist der Platz für Eingaben für eine bestimmte Ausgabe unendlich, aber wenn Sie wissen, dass sie als 128-Bit-Wert gestartet wurden, können Sie die Möglichkeiten eingrenzen. Es besteht die Möglichkeit, "rückwärts zu arbeiten", wenn Sie die Funktion nicht als Black Box behandeln, sondern stattdessen die Spezifikation lesen und mathematisches Denken anwenden.
rndmcnlly
2
@Naaff: "muss nur jede mögliche Eingabe versuchen" - und das ist einfacher als jeden Hash zu versuchen, wie? Im Gegenteil, da mehrere mögliche Eingaben in dieselbe Ausgabe gehasht werden können.
Piskvor verließ das Gebäude am
1
@Piskvor: Du hast falsch verstanden, was Naaff meinte (ich habe auch eine Minute gebraucht). Eine klarere Art zu sagen wäre: "Nur wenn es keinen festen Punkt gibt, müssen Sie versuchen, jede mögliche Eingabe (aus dem Raum 2 ^ 128) zu versuchen." Mit anderen Worten, Sie müssen nur jede Möglichkeit ausprobieren, wenn vorher keine funktioniert. Also 1,08e28 Jahre oder eine glückliche Vermutung!
P Daddy
"Wenn es 1 Millisekunde gedauert hat, um einen Hash zu berechnen". Moderne GPUs können Milliarden von Hashes pro Sekunde berechnen, viel schneller. Trotzdem würde es sehr lange dauern.
Markasoftware
0
Ich habe zwar keine Ja / Nein-Antwort, aber ich vermute "Ja" und außerdem, dass es vielleicht 2 ^ 32 solcher Fixpunkte gibt (für die Bitstring-Interpretation, nicht für die Zeichenfolgeninterpretation). Ich arbeite aktiv daran, weil es wie ein fantastisches, prägnantes Puzzle erscheint, das viel Kreativität erfordert (wenn Sie sich nicht sofort mit Brute-Force-Suche zufrieden geben).
Mein Ansatz ist folgender: Behandle es als ein mathematisches Problem. Wir haben 128 boolesche Variablen und 128 Gleichungen, die die Ausgaben in Bezug auf die Eingaben beschreiben (die übereinstimmen sollen). Durch das Einfügen aller Konstanten aus den Tabellen in den Algorithmus und die Füllbits hoffe ich, dass die Gleichungen stark vereinfacht werden können, um einen Algorithmus zu erhalten, der für den 128-Bit-Eingabefall optimiert ist. Diese vereinfachten Gleichungen können dann in einer schönen Sprache für eine effiziente Suche programmiert oder wieder abstrakt behandelt werden, indem jeweils einzelne Bits zugewiesen werden und auf Widersprüche geachtet wird. Sie müssen nur einige Bits der Ausgabe sehen, um zu wissen, dass sie nicht mit der Eingabe übereinstimmt!
Es wurde nicht gebrochen. Alles, was sie konnten, ist, in angemessener Zeit 2 Strings zu produzieren, die dem gleichen Hash entsprechen. Es ist immer noch sehr schwierig, eine Zeichenfolge zu erstellen, die einem bestimmten Hash entspricht.
Kibbee
9
Ich bin mir nicht sicher, wie das Finden eines MD5 den Algorithmus gefährden würde, genauso wenig wie der Algorithmus, wenn ich Ihnen MD5 sagen würde ("Der schnelle braune Fuchs springt über den faulen Hund") = 9e107d9d372bb6826bd81d3542a419d6
Kip
5
Ein fester Punkt würde wahrscheinlich eine Hebelwirkung auf die Mathematik ausüben, die zu einem umfassenderen Verstoß gegen MD5 führen könnte. Ich bin nicht davon überzeugt, dass Glomek "wahrscheinlich" wirklich rechtfertigen kann; Ich würde "möglicherweise" ohne Zweifel akzeptieren.
Jonathan Leffler
-9
Es gibt zwei Interpretationen, und wenn man eine auswählen darf, steigt die Wahrscheinlichkeit, einen festen Punkt zu finden, auf 81,5%.
Interpretation 1: Stimmt der MD5 eines MD5-Ausgangs in Binärform mit seinem Eingang überein?
Interpretation 2: Stimmt der MD5 eines MD5-Ausgangs in Hex mit seinem Eingang überein?
Es gibt nichts an dem MD5-Algorithmus, was hex impliziert - er arbeitet mit Bytes und erzeugt Bytes - daher denke ich, dass die letztere Interpretation ungültig ist.
Nick Johnson
Unabhängig davon, ob es unter Interpretation 1 einen festen Punkt gibt oder nicht, könnte es unter Interpretation 2 noch einen geben (oder nicht). Wenn Sie jedoch daran interessiert sind, das Problem zu untersuchen, scheint Interpretation 1 ein viel besserer Ausgangspunkt zu sein, weil Sie gewonnen haben Sie müssen nicht alle möglichen willkürlichen Entscheidungen über das Gehäuse und die Zeichenkodierung treffen. Darüber hinaus hat der Binärfall weniger Bits!
rndmcnlly
4
Sie interpretieren falsch, was das Hex wirklich ist. Sie können Binärdateien in hexadezimaler Form darstellen, genauso wie Sie sie in Dezimal- oder Oktalform oder Basis 3 darstellen können. Es handelt sich um eine Zahl mit unterschiedlichen Darstellungen. Interpretation 1 und 2 sind also dasselbe. Was Sie denken, ist die Zeichenkettendarstellung, die überhaupt nicht das gleiche Hex ist, sondern ein völlig anderer Binärwert. Tatsächlich könnten Sie viele verschiedene Hex-Zeichenfolgen in verschiedenen Zeichensätzen haben. Der 128-Bit-Hashwert kann als "Hex" -String dargestellt werden, ist jedoch nicht gleich dem String. Die Zeichenfolge besteht nicht aus denselben Binärdaten.
definiert
Dustin, Interpretation 2 bedeutet wirklich die MD5 der Anzeigezeichenfolge.
Joshua
4
Es gibt jedoch ein großes Problem mit dieser Idee, da sie direkt von Ihrer Zeichenkodierung abhängt. Unterschiedliche Codierungsschemata führen zu völlig unterschiedlichen Ergebnismengen. Es gibt sogar ein ganzes Projekt und einen Artikel, der es entlarvt, basierend auf diesem Missverständnis, wie MD5 funktioniert. Acodingfool.typepad.com/blog/2009/05/the-kembler-identity.html
definiert den
-23
Genau genommen würde ich sagen, dass der Eingang von MD5 512 Bit lang und der Ausgang 128 Bit lang ist, was per Definition unmöglich ist.
Nein, die MD5-Zeichenfolge mit 1 Byte ist vorhanden.
Joshua
7
Die Eingabe kann beliebig groß sein. Wenn die Eingabe weniger als 512 Byte beträgt, wird sie aufgefüllt, kleine Eingaben sind jedoch weiterhin zulässig. Aus Wikipedia: "MD5 verarbeitet eine Nachricht variabler Länge in eine Ausgabe fester Länge von 128 Bit. Die Eingabenachricht ist in Blöcke von 512-Bit-Blöcken (16 32-Bit-Little-Endian-Ganzzahlen) unterteilt. Die Nachricht wird so aufgefüllt seine Länge ist durch 512 teilbar. "
Naaff
Sie nehmen also an, dass beispielsweise 0000000001 = 1 ist? Ich würde dann argumentieren, dass die Frage bestenfalls schlecht spezifiziert ist.
Ori Pessach
11
Die Eingabe in MD5 kann 128 Bit betragen. Wenn MD5 diesen Eingang auffüllen möchte, dann ist das ehrlich gesagt das Geschäft von MD5. Die Eingabe ist immer noch gut definiert. Ebenso ist die Ausgabe gut definierte 128 Bit. Wenn der (gut definierte) Eingang und der (gut definierte) Ausgang gleich sind, ist MD5 (x) = x.
Naaff
2
@ Joshua das MD5 einer leeren Zeichenfolge (dh 0 Bytes) existiert sogar
md5(x) == x
, damd5(x)
ist 128 Bit lang. Daher gibt es in md5 genau dann einen festen Punkt für Eingaben beliebiger Größe, wenn es in md5 einen festen Punkt in der 128-Bit-Domäne gibt.1-(1/e)*(1/e) ≈ 86.47%
Antworten:
Da eine MD5-Summe 128 Bit lang ist, müsste jeder feste Punkt notwendigerweise auch 128 Bit lang sein. Unter der Annahme , dass die Summe von beliebigen MD5 Zeichenfolge gleichmäßig über alle möglichen Summen verteilt ist, dann ist die Wahrscheinlichkeit , dass eine bestimmte 128-Bit - String ist ein fester Punkt ist , 1 / 2 128 .
Somit ist die Wahrscheinlichkeit , dass keine 128-Bit - Ketten ein fester Punkt ist , ist (1 - 1 / 2 128 ) , 2 128 , so dass die Wahrscheinlichkeit , dass es ein fester Punkt ist , 1 - (1 - 1 / 2 128 ) , 2 128 .
Da die Grenze , wenn n gegen unendlich geht von (1 - 1 / n ) n ist 1 / e und 2 128 ist mit Sicherheit eine sehr große Zahl, ist diese Wahrscheinlichkeit fast genau 1 - 1 / e ≈ 63,21%.
Natürlich gibt es keine Zufälligkeit - entweder gibt es einen festen Punkt oder es gibt keinen. Wir können jedoch zu 63,21% davon überzeugt sein, dass es einen festen Punkt gibt. (Beachten Sie auch, dass diese Zahl nicht von der Größe des Schlüsselraums abhängt. Wenn MD5-Summen 32 Bit oder 1024 Bit wären, wäre die Antwort dieselbe, solange sie größer als 4 oder 5 Bit ist.)
quelle
Mein Brute-Force-Versuch ergab eine Übereinstimmung von 12 Präfixen und 12 Suffixen.
Präfix 12: 54db1011d76dc70a0a9df3ff3e0b390f -> 54db1011d76d137956603122ad86d762
Suffix 12: df12c1434cec7850a7900ce027af4b78 -> b2f6053087022898fe920ce027af4b78
Blog-Beitrag: https://plus.google.com/103541237243849171137/posts/SRxXrTMdrFN
quelle
md5sum
Linux-Befehl verwendet, ich habe ein anderes Ergebnis erhaltenDa der Hash irreversibel ist, wäre dies sehr schwer herauszufinden. Die einzige Möglichkeit, dies zu lösen, besteht darin, den Hash für jede mögliche Ausgabe des Hash zu berechnen und zu prüfen, ob Sie eine Übereinstimmung gefunden haben.
Ein MD5-Hash enthält 16 Bytes. Das heißt, es gibt 2 ^ (16 * 8) = 3,4 * 10 ^ 38 Kombinationen. Wenn es 1 Millisekunde dauern würde, einen Hash für einen 16-Byte-Wert zu berechnen, würde es 10790283070806014188970529154.99 Jahre dauern, um alle diese Hashes zu berechnen.
quelle
Ich habe zwar keine Ja / Nein-Antwort, aber ich vermute "Ja" und außerdem, dass es vielleicht 2 ^ 32 solcher Fixpunkte gibt (für die Bitstring-Interpretation, nicht für die Zeichenfolgeninterpretation). Ich arbeite aktiv daran, weil es wie ein fantastisches, prägnantes Puzzle erscheint, das viel Kreativität erfordert (wenn Sie sich nicht sofort mit Brute-Force-Suche zufrieden geben).
Mein Ansatz ist folgender: Behandle es als ein mathematisches Problem. Wir haben 128 boolesche Variablen und 128 Gleichungen, die die Ausgaben in Bezug auf die Eingaben beschreiben (die übereinstimmen sollen). Durch das Einfügen aller Konstanten aus den Tabellen in den Algorithmus und die Füllbits hoffe ich, dass die Gleichungen stark vereinfacht werden können, um einen Algorithmus zu erhalten, der für den 128-Bit-Eingabefall optimiert ist. Diese vereinfachten Gleichungen können dann in einer schönen Sprache für eine effiziente Suche programmiert oder wieder abstrakt behandelt werden, indem jeweils einzelne Bits zugewiesen werden und auf Widersprüche geachtet wird. Sie müssen nur einige Bits der Ausgabe sehen, um zu wissen, dass sie nicht mit der Eingabe übereinstimmt!
quelle
Wahrscheinlich, aber es zu finden würde länger dauern als wir oder MD5 kompromittieren.
quelle
Es gibt zwei Interpretationen, und wenn man eine auswählen darf, steigt die Wahrscheinlichkeit, einen festen Punkt zu finden, auf 81,5%.
quelle
Genau genommen würde ich sagen, dass der Eingang von MD5 512 Bit lang und der Ausgang 128 Bit lang ist, was per Definition unmöglich ist.
quelle