Frage:
Kann eine Datei ihre md5sum enthalten?
balki
2011-05-16 10:45:29 UTC
view on stackexchange narkive permalink

Ich frage mich nur, ob es möglich ist, eine Datei zu erstellen, in der sich auch md5sum und andere Inhalte befinden.

Meine Argumentation hier ist, dass es logisch möglich wäre, dies zu tun, aber es wäre nicht so einfach herauszufinden. Wäre es nicht einfach ein * sehr * langes Spiel mit Versuch und Irrtum? Ich bin interessiert zu wissen, ob es tatsächlich möglich ist.
Sie sollten einen Abschnitt der Datei für den md5 und einen Abschnitt für den Inhalt 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 versuchst du etwas anderes zu tun?
@AviD ist richtig, HMAC ist genau für solche Situationen gedacht.
Ich habe gerade versucht, das Tag von "Verschlüsselung" in "Hashing" zu ändern. Bei MD5 geht es um Hashing oder vielleicht um das Signieren, wenn es geschützt ist (wie @AviD sagte). Es geht nicht wirklich um Verschlüsselung, besonders wenn es um Dateien geht (die Sie vermutlich irgendwann entschlüsseln möchten). Die Hauptform der "Verschlüsselung" mit MD5 ist die Einwegspeicherung von Passwörtern.
Möglicherweise verwandte Frage: http://cstheory.stackexchange.com/questions/4609/do-reflexive-hash-algorithms-exist/4629#4629.
Was ist mit einer allgemeineren Frage, die - da MD5 nicht für den besprochenen Zweck entwickelt wurde - sinnvoller sein könnte: ** Kann es eine gute Hash-Funktion F geben, so dass HASH = F (concat (DATA, HASH) )) $ und so, dass die Lösung dieser Gleichung wrt HASH kann effizient berechnet werden? **
Ich habe tatsächlich gesehen, dass eine README-Datei dies getan hat, kann sie aber momentan nicht finden. Ich denke, die Antwort auf Ihre Frage lautet Ja. Aber ich bin auch ziemlich neugierig, wie er das gemacht hat.
http://www.win.tue.nl/hashclash/Nostradamus/ ist relevant, sie erstellten 12 PDFs, in denen sie US-Wahlergebnisse vorhersagten, die alle auf dieselbe MD5-Prüfsumme gehasht wurden.
@flz Ich denke, das MD5 in der README war für eine andere Datei. Oder es war im Dateinamen.
Was ist mit einer Datei, die NUR den Hash von sich selbst enthält? Was denkst du, wäre das schwieriger oder einfacher? ;)
Zwölf antworten:
#1
+45
user185
2011-05-16 17:48:03 UTC
view on stackexchange narkive permalink

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.

Schön. Nicht wirklich eine Antwort, aber lustig.
@Iszi: Ich bin anderer Meinung. Es ist insofern eine Antwort, als es eine Lösung für das vorgeschlagene Problem darstellt. Es mag nicht nützlich sein, aber das war nie in der Spezifikation :-)
Das ist eine große Datei. :) :)
@Jakob ja :). Aber es ist wahrscheinlich (fast) klein genug, um in eine Datei in einem ZFS-Dateisystem zu passen, obwohl Sie eine Festplatte mit einer Oberfläche benötigen würden, die ungefähr der Größe der Landfläche auf dem Planeten entspricht.
@Graham: Nach meinen Berechnungen wird davon ausgegangen, dass Sie Daten auf einen Plattenteller mit einer Dichte von 10 TB pro Quadratzoll (ungefähr die höchste prototypische Dichte von heute) anpassen können, und davon ausgegangen, dass es eine ideale Methode gibt, um MD5-Summen auf einer Festplatte zu speichern (ohne Komprimierung) ) wäre eine solche Scheibe ungefähr 47 Millionen Quadratkilometer groß, ungefähr 1/3 der Landfläche der Erde. (vorausgesetzt, es gab eine flache Landmasse, die groß genug war)
@hello71 Ja, das ist etwas größer als ich es mir vorgestellt habe. Gut zu wissen, dass ich in guter Gesellschaft entweder richtig oder falsch liege :-)
Obwohl dies der Extremfall ist - kein Grund, warum Sie nicht 50% der Hashes berechnen konnten -, besteht eine 50% ige Chance, dass sie den Hash enthält.Wechseln Sie den letzten Hash gegen einen anderen, der nicht in der Datei enthalten ist, bis Sie eine Datei mit einem darin enthaltenen Hash generieren.Diese Methode kann für 25%, 10% 1% usw. Verwendet werden
#2
+30
Shadur
2011-05-16 11:47:09 UTC
view on stackexchange narkive permalink

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.

Ich würde gerne den theoretischen Beweis nachlesen. Hast du eins?
Ich meinte theoretisch wie in "Es ist theoretisch möglich, eine Datei zu erstellen, die unter anderem eine 33-Byte-Zeichenfolge enthält, die genau den gleichen Wert wie die MD5-Prüfsumme der Datei hat". Ihre Chancen, es versehentlich zu tun, sind etwas schlechter als die, wenn Sie mit dem Ticket der letzten Woche im Lotto gewinnen.
Die Chancen stehen wahrscheinlich viel schlechter als der Gewinn des Lottoscheins der letzten Woche. Sie sollten wahrscheinlich eher nach dem Vorbild eines TSP-Style / NP-Hard-Problems über 128 Bit der übergeordneten und untergeordneten Datei denken, die Sie generieren möchten (vorausgesetzt, Sie ignorieren die Schwachstelle in md5).
@JonBringhurst, Aber Sie können es jederzeit wiederholen. Aka Bruteforce. Es ist wie der Versuch, eine unmögliche Lotterie zu gewinnen, aber Sie können eine Menge Tickets haben. Viel. [Oder Sie können betrügen] (http://security.stackexchange.com/a/89959/2379).
#3
+14
Thomas Pornin
2011-05-17 20:17:45 UTC
view on stackexchange narkive permalink

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:

  1. Beginnen Sie mit einem Wert m .
  2. Berechnen Sie MD5 ( m ). Wenn es Teil von m ist, beenden Sie (wir haben unsere Nachricht gefunden).
  3. Ersetzen Sie m durch m || x wobei x so ist, dass die Sequenz der letzten 128 Bits von m || x nirgendwo in m erscheint.
  4. Schleife zu 2.
  5. ol>

    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.)

#4
+10
john
2011-05-16 21:15:44 UTC
view on stackexchange narkive permalink

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.

Ich mag alles außer deinem letzten Satz. Ich bin kein Experte, aber nach dem, woran ich mich von den Experten erinnere, liegt die Wissenschaft des Hashings sogar deutlich hinter der Wissenschaft von z. Verschlüsselung und ist nicht weit genug fortgeschritten, um mit Zuversicht viel zu sagen. Und denken Sie daran, die Singularität ist nahe ...
Sie haben Recht, es ist eine ziemlich kühne Aussage, und ich sollte diese vermeiden. Ich bin auch kein Experte, obwohl ich Kryptographie studiert habe. Wenn wir speziell über MD5 sprechen, kann darauf hingewiesen werden, dass ein Vorbildangriff (Umkehren des Hashs) so schwer ist, dass er wahrscheinlich so lange dauern wird, dass zu diesem Zeitpunkt selbst in unseren Lebenszeiten noch niemand MD5 verwendet. Ich denke auch, dass Quantencomputer näher sind als Singularität ...;)
#5
+4
AviD
2011-05-16 17:33:47 UTC
view on stackexchange narkive permalink

(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?

Eine sehr gebräuchliche Methode, um das zu tun, was Sie gesagt haben, besteht darin, die Datei einfach umzubenennen, um den Hash in den Dateinamen aufzunehmen ... wie `filename_ .ext` :) Da der Name einer Datei nicht gehasht wird, ändert sich durch Ändern des Dateinamens nicht die MD5-Prüfsumme.
#6
+4
CesarB
2011-07-25 07:01:01 UTC
view on stackexchange narkive permalink

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.

Ähm, vielleicht ein kleiner Punkt in Ihrer Argumentation, aber es gibt * keine * Funktion f, bei der f (md5 (X)) X ergibt. MD5 ist streng einseitig.
@Shadur: Ja, es gibt keine Funktion f, so dass * für jeden Wert X * f (md5 (X)) X ergibt. Es gibt jedoch viele Funktionen f, so dass * für mindestens einen Wert X *, f (md5 (X)) ergibt X (den Fixpunkt) - CesarB gibt bereits ein Beispiel.
@CesarB: Könnten Sie Ihre Antwort bearbeiten, um zu betonen, dass es mit ziemlicher Sicherheit möglich ist, "eine Datei zu erstellen, die ihre md5sum enthält" - für jeden Postfix haben wir eine 63% ige Wahrscheinlichkeit, dass man "nur" alle möglichen Postfixes durchläuft ( von wo es eine unendliche Zahl gibt)
@CesarB: Könnten Sie Ihre Antwort bearbeiten, um zu betonen, dass es mit ziemlicher Sicherheit theoretisch möglich ist, "eine Datei zu erstellen, in der sich die MD5-Summe befindet", obwohl dies mit der heutigen Technologie praktisch unmöglich ist? Für jeden Postfix haben wir eine Wahrscheinlichkeit von 63%, dass eine solche Datei möglich ist. Für 7 verschiedene gegebene Postfixes haben wir eine 99,9% ige Wahrscheinlichkeit, dass eine solche Datei für mindestens eines dieser Postfixes möglich ist. Da es unendlich viele mögliche Postfixes gibt, ist es fast sicher, dass Millionen verschiedener Postfixes mindestens einen MD5-Fixpunkt haben.
#7
+3
Iszi
2011-05-16 19:46:35 UTC
view on stackexchange narkive permalink

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:

  • Berechnen Sie den MD5 von File1.ext mit dem Tool Ihrer Wahl.
  • Öffnen Sie ein CMD-Fenster und navigieren Sie zu dem Ordner, der File1.ext enthält.
  • Führen Sie den Editor für die Datei aus, fügen Sie jedoch am Ende ein ADS mit einem Doppelpunkttrennzeichen hinzu (keine Leerzeichen auf beiden Seiten des Doppelpunkts) ) wie folgt:
    • notepad File1.ext: MD5.txt
    • (Stellen Sie sicher, dass Sie dies an der Eingabeaufforderung und während der Arbeit im selben Ordner tun als Datei - oder auf andere Weise den vollständigen Dateipfad angeben.)
  • Notepad weist darauf hin, dass File1.ext: MD5.txt nicht vorhanden ist. Sagen Sie Notepad, dass Sie eine neue Datei erstellen möchten.
  • Fügen Sie Ihren MD5-Hash in MD5.txt ein, schließen Sie die Datei und speichern Sie sie.
  • Führen Sie Ihren MD5-Hash erneut aus File1.ext, um zu überprüfen, ob es sich nicht geändert hat.
  • Führen Sie Notepad wie oben aus, um das Vorhandensein des ADS zu überprüfen.

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.

Sie können auch den Dateinamen verwenden, um den Hash zu speichern. Dies ist einfacher als ADS und durchläuft das Internet.
#8
+1
Bruno
2011-05-16 16:42:58 UTC
view on stackexchange narkive permalink

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.

das sieht für mich nicht richtig aus. Ich denke, Sie verwechseln Kollisionsangriffe mit Vorbildangriffen. Es gibt Kollisionsangriffe auf MD5, aber keine bekannten Preimage-Angriffe auf MD5. Um eine Datei zu finden, die einen eigenen Hash enthält, benötigen Sie wahrscheinlich eine Art Preimage-Angriff (ich sehe keine Möglichkeit, wie ein Kollisionssuchangriff dies tun würde).
@D.W. Du hast recht, meine Formulierung war wahrscheinlich ein bisschen stark. Ich habe lediglich vorgeschlagen, dass ein ähnlicher Ansatz funktionieren könnte, da die Probleme bis zu einem gewissen Grad ähnlich sind, aber ich muss zugeben, dass ich mich nicht mehr damit befasst habe.
#9
+1
paan
2011-05-16 17:00:57 UTC
view on stackexchange narkive permalink

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.

Aus diesem Grund verschlüsseln Sie anschließend den MD5-Prüfsummen-Hash mit Ihrem privaten Schlüssel. Da nur Sie diese Prüfsumme verschlüsseln können, können Sie davon ausgehen, dass Sie derjenige sind, der die Nachricht signiert hat, wenn die Prüfsumme mit der Nachricht übereinstimmt (und wer hat es geschrieben)
@Shadur, nur ein Detail, aber Sie _sign_ (nicht _encrypt_) mit dem privaten Schlüssel.
@bruno Um genau zu sein, ist "Signieren" tatsächlich ein Hash-Digest - MD5 oder anders - Ihrer Nachricht, die mit dem privaten Schlüssel * verschlüsselt * ist.
@Shadur, _signing_ a message bezieht sich zwar auf _signing_ its Digest, aber Sie verschlüsseln es nicht (d. H. Machen es unlesbar). "Scrambling" bedeutet nicht Verschlüsselung. Es ist einfach nicht sinnvoll, das Verb _encrypt_ mit einem privaten Schlüssel zu verwenden (der zum Entschlüsseln / Entschlüsseln und Signieren dient). Es gibt kein Geheimnis in der Unterschrift und ihrer Zusammenfassung.
#10
  0
KnightHawk
2015-04-09 20:23:21 UTC
view on stackexchange narkive permalink

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.

#11
  0
Pacerier
2015-05-23 22:27:34 UTC
view on stackexchange narkive permalink

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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  
Wenn sie auch nicht in Ordnung sein müssen, funktioniert `0000000 ... 00011111111 ... 111` auch.
@immibis, Ja, es ist das gleiche wie im zweiten gezeigten Beispiel, 128 `0`s und 128` 1`s.
@Pacerier "Wenn Sie nicht möchten, dass die Bits der Reihe nach sind" Sie könnten alles aus einer Datei erhalten, es ist großartig!Wenn Sie eine große Datei haben, können Sie die vollständige Diskographie der Beatles und die gesamten Werke von Shakespeare extrahieren!(Offensichtlich eine perfekte Kirschernte aus seinen Stücken machen).Du rockst!
#12
  0
JesseM
2017-07-27 03:52:58 UTC
view on stackexchange narkive permalink

[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.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...