Kann eine Datei in böswilliger Weise so verändert werden, dass der ursprüngliche SHA-1-Hash erhalten bleibt?

10447
misha256

Laut diesem Artikel und vielen anderen ist SHA-1 nicht sicher.

In meinem Fall mache ich mir keine Sorgen um Passwörter oder digitale Zertifikate. Ich mache mir Sorgen um die Integrität der Dateien.

Ist es vernünftigerweise möglich, dass eine Datei (z. B. ein ISO-Image oder eine ausführbare Datei) in böswilliger Weise so geändert wird, dass

  • Behält den SHA-1-Hash der Originaldatei und
  • Behält den Gesamtinhalt und den gesamten Vorgang der Datei bei (aber natürlich auch böswilligen Inhalt, der ursprünglich nicht vorhanden war)

So wie ich es sehe, wenn Sie eine Datei so verändern, dass eine SHA-1-Kollision entsteht, wird die Datei völlig unbrauchbar. Das ISO wäre total beschädigt oder die ausführbare Datei wäre so durcheinander geraten, dass es nicht einmal mehr eine ausführbare Datei wäre.

Aber so wie ich es sehe, könnte es falsch sein. Bisher habe ich bei Google-Suchen nichts gefunden, was die dauerhafte Eignung von SHA-1 für die Dateiverifizierung betrifft. Irgendwelche Erkenntnisse?

32
Die Antwort lautet "es kommt darauf an". Wenn das ISO zufällig viele JPEG-Dateien oder Filmdateien enthielt - zusammen mit der Zieldatei -, ist dies möglich. Sie können jpeg-Dateien erheblich ändern, ohne deren Größe oder Aussehen zu ändern. Je größer die Datei ist, desto mehr müssen Sie spielen und desto größer ist die Wahrscheinlichkeit einer zerstörungsfreien Kollision. Paul vor 9 Jahren 7
Wie bekommst du den Hashwert? Von der Download-Seite oder auf andere Weise? cpast vor 9 Jahren 0
@cpast genau, viele Websites listen SHA-1-Hashes auf, damit Sie Ihren Download überprüfen können. Wenn man darüber nachdenkt, scheint es viel wahrscheinlicher, dass ein Hacker eine Website gefährdet, indem er den Inhalt * und * den veröffentlichten Hash ändert. Dann bist du wirklich vermasselt. misha256 vor 9 Jahren 7
Nur zu meiner Frage, meine Frage fragt nach SHA-1, besonders weil es ziemlich üblich ist, besonders bei Downloads von Microsoft / MSDN. Natürlich veröffentlichen einige Websites MD5-Hashes, andere SHA256 usw. misha256 vor 9 Jahren 1
Die Frage ist, warum * Sie * einen Hash verwenden möchten, * der * bekannte Sicherheitsanfälligkeiten hat, wenn es Alternativen gibt, die genauso schnell, einfach zu verwenden und allgemein verfügbar sind und nicht * (z. B. SHA-256) ) *? Darüber hinaus gibt es einen Grund, warum Kryptographen einen Hash als unsicher erklären, nachdem nur eine Schwachstelle gefunden wurde: Die Geschichte hat gezeigt, dass, wenn einer gefunden wird, andere schnell folgen. Das berühmte Zitat von Bruce Schneier lautet: "Angriffe werden immer besser, sie werden niemals schlimmer." * BlueRaja - Danny Pflughoeft vor 9 Jahren 2
Es ist wichtig zu bedenken, dass [wenn ein Angreifer Zugriff auf den Server hat, er sowohl die Datei als auch die Prüfsumme ersetzen kann] (http://superuser.com/q/849845/194694). gronostaj vor 9 Jahren 1
@ misha256 Diese sha1-Hashes dienen zur Überprüfung der Download-Korruption, nicht zur Sicherheit. Wenn Sie Sicherheit wünschen, verwenden Sie gpg-signierte Dateien Daenyth vor 9 Jahren 3

8 Antworten auf die Frage

41
David Schwartz

Für SHA-1 ist das noch niemandem gelungen. Es ist theoretisch möglich, aber noch nicht praktikabel. Die Berichte über die Unsicherheit in SHA-1 bedeuten lediglich, dass das Sicherheitsniveau nicht so hoch ist, wie wir es uns gewünscht hätten, und dass wir nicht so viele Jahre Zeit haben, bevor wir uns darüber Sorgen machen müssen, wie wir dachten.

Es ist schwieriger, eine Datei mit demselben SHA-1-Hash als eine gegebene Datei zu erstellen, als zwei Dateien mit demselben SHA-1-Hash selbst zu erstellen. Und soweit wir wissen, hat noch niemand auf der Welt diese einfachere Aufgabe gelöst. Das bedeutet nicht, dass es morgen nicht passieren kann.

Gibt es einen bekannten Angriff auf SHA-1 für Kollisionen mit einer bestimmten Datei? Ich hatte den Eindruck, dass dieser Angriff weder für MD5 noch für SHA-1 gefunden wurde (es gibt nur einen Kollisionsangriff, keinen zweiten Vorbildangriff). cpast vor 9 Jahren 0
@cpast the Flame-Malware verwendete eine MD5-Kollision, um von Microsoft zu stammen und Windows Update zu hijacken. Sie hatten möglicherweise eine Reihe von Microsoft-Zertifikaten zur Auswahl, aber sie versuchten nicht einfach, zwei Dateien mit demselben MD5 zu finden. Aron Foster vor 9 Jahren 0
@Aron Nein, das war kein Beispiel für eine Kollision mit einer bestimmten Datei. Mit Flame hatte Microsoft einen Lizenzserver, der X.509-Zertifikate gemäß einer Zertifikatsignierungsanforderung signieren würde. Dies bedeutet, dass der Angreifer innerhalb einiger Grenzen kontrolliert, was signiert wird. Es gab kein vorbestehendes Zertifikat, mit dem sie eine Kollision fanden; Microsoft hat CSRs von Kunden im Rahmen der Aktivierung unterzeichnet, wodurch der Einsatz eines Kollisionsangriffs ermöglicht wird (der kein zweiter Angriff ist). cpast vor 9 Jahren 2
@cpast Du hast recht. Danke für die Klarstellung! Aron Foster vor 9 Jahren 0
Laut dem Wiki für sha-1 (http://en.wikipedia.org/wiki/SHA-1): `Ab 2012 wird der effektivste Angriff auf SHA-1 von Marc Stevens als der beste angesehen [34 ] mit geschätzten Kosten von 2,77 Millionen US-Dollar, um einen einzelnen Hashwert zu brechen, indem CPU-Leistung von Cloud-Servern gemietet wird. [35] (...). Am 8. November 2010 gab er an, er habe einen vollständigen Nahkollisionsangriff gegen SHA-1 mit einer geschätzten Komplexität durchgeführt, die 2 × 57,5 ​​SHA-1-Kompressionen entsprach. Er schätzt, dass dieser Angriff auf eine vollständige Kollision mit einer Komplexität um 2 ^ 61. ausgedehnt werden kann. " Also nicht gerade "nie gemacht", aber recht teuer Olivier Dulac vor 9 Jahren 0
@OlivierDulac Nein, es wurde tatsächlich noch nie gemacht. Es sind keine SHA-1-Kollisionen bekannt. Bei den geschätzten Kosten handelt es sich lediglich um eine Schätzung. Es ist nicht so, dass jemand es getan hat, und dies ist, wie viel wir glauben, es hat niemand getan, aber wir glauben, dass dies der Preis * wäre * würde. cpast vor 9 Jahren 2
@cpast Wir wissen nicht genau, ob dies getan wurde oder nicht, aber ein Angriff in Höhe von 3 Millionen US-Dollar macht weniger als 0,03% des Jahresbudgets der NSA aus (in der Tat sollte der Angriff billiger sein, da er die Hardware bereits besitzt und nicht mieten müssen Es ist vernünftig zu folgern, dass sie wahrscheinlich bereits getan haben, da sie die Mittel und die Motivation haben, dies zu tun. Denken Sie an [Flame] (http://arstechnica.com/security/2012/06/flame-crypto-breakthrough/). bain vor 9 Jahren 4
26
Cort Ammon

Es ist theoretisch möglich, aber es wurde noch nicht getan.

Was Sie suchen, wird als "Hash-Kollision:" bezeichnet, zwei Dateien mit demselben Hash. Kryptografische Hash-Codes wie SHA-1 sind dazu gedacht, dies zu erschweren. Da es sich bei SHA-1 um einen 160-Bit-Code handelt, dauert es durchschnittlich 2 ^ 159 Brute-Force-Versuche, um ein Duplikat zu finden. Wenn ein Algorithmus gefunden wird, der zuverlässig besser als der gegen einen kryptographischen Hash ist, wird der Hash als "gebrochen" betrachtet.

MD-5 ist ein Beispiel für einen sehr kaputten Hash. Es sollte eine Stärke von 128 Bit haben und durchschnittlich 2 ^ 127 Versuche erfordern. Durch den Missbrauch bekannter Sicherheitsanfälligkeiten kann die tatsächliche Anzahl der erforderlichen Versuche bis zu 2 ^ 47 betragen. Dies ist eine Menge kleiner als 2 ^ 127. Tatsächlich wurde dies in einem modernen Computercluster in weniger als einem Tag erledigt.

Ich gebe dieses Beispiel, weil es am nächsten kommt, wie Sie SHA-1 verwenden möchten. Dies ist jedoch nicht der üblichste Ansatz der Kryptoanalyse, um sicherzustellen, dass Hashes nicht gebrochen werden. Sie erlauben normalerweise eine Kollision zwischen zwei Dateien, wie vom Angreifer ausgewählt, anstatt dass Sie eine Datei auswählen müssen und der Angreifer versucht, sie abzugleichen. Diese Art von Angriff hat den Vorteil, dass sie einfacher zu messen ist. Wenn ich finde, dass es "schwer" ist, Ihre Datei zu knacken, bedeutet das, dass eine andere Datei ähnlich stark ist? Dieser Angriff, bei dem der Angreifer beide Dateien auswählen kann, stellt sicher, dass wir das Schlimmste vom Schlimmsten einfangen.

Diese Art von Angriff ermöglicht einen interessanten Trick, der als " Geburtstagsangriff " bezeichnet wird. Um es kurz zu machen: Die Verwendung des Geburtstagsangriffs halbiert die Stärke des Algorithmus. Daher erfordert SHA-1 2 ^ 80 Versuche (durchschnittlich) und MD5 2 ^ 64 Versuche (durchschnittlich). Dies sind die Hälfte von 160 bzw. 128.

SHA-1 hat Angriffe bekannt, die seine Stärke von 2 ^ 80 auf 2 ^ 69 verringern. Das wird dir nicht viel bedeuten. 2 ^ 69 Versuche sind eine lange Zeit.

Aus der Geschichte haben wir jedoch herausgefunden, dass Hash-Algorithmen nicht spontan, sondern im Laufe der Zeit gebrochen werden. Niemand knackt einen Algorithmus wie MD-5, der ihn über Nacht von 2 zu 64 auf 2 zu 47 bringt. Dies geschieht im Laufe der Zeit, da viele Personen Artikel über die Mathematik veröffentlichen, die sie dagegen anwenden. In der Regel kann man beobachten, wie die Komplexität der Angriffe vom Beginn des Algorithmus an langsam abnimmt (wobei der beste Angriff normalerweise der Geburtstagsangriff ist).

Die Tatsache, dass wir einige Kollisionsänderungen sehen, deutet darauf hin, dass SHA-1 das Licht am Ende des Tunnels sieht. Es ist immer noch stark, aber es besteht der Wunsch, zum neuesten SHA-3 zu wechseln, der derzeit viel sicherer ist.

Sie sollten solche Entscheidungen wirklich aus Sicht des Bedrohungsmodells treffen. Wie viel Schaden kann ein Angreifer anrichten, wenn er eine dieser Kollisionen erleidet? Haben Ihre Angreifer Skript-Kiddies mit Zugriff auf ein paar Laptops oder Regierungen mit kompletten Supercomputing-Clustern. Wie groß ist ein Zeitfenster, in dem ein Angreifer den Hash brechen muss, bevor er nicht verwendet wird (bei vielen Anwendungen der Kryptographie handelt es sich um ein "Ändern des Schutzes", z. B. um die Kennwortrotation). All dies beeinflusst, wie ernsthaft Sie Kollisionen berücksichtigen müssen.

Bezüglich Ihres Geburtstags-Angriffsabsatzes ist 2 ^ 80 die * Quadratwurzel * von 2 ^ 160, nicht die Hälfte davon (was 2 ^ 159 sein würde). Andrew Morton vor 9 Jahren 8
Die Frage bezieht sich auf Angriffe auf das zweite Vorbild, aber Ihre Antwort bezieht sich auf Kollisionen. Urangriffe gegen SHA-1 - und sogar gegen MD5 - sind absurd unpraktisch. (Es gibt einen 2 × 123-Angriff auf MD5 gegen MD5, aber mit SHA-1 bleiben Sie bei einer 2 ^ 160-Brute-Force.) Matt Nordhoff vor 9 Jahren 0
"Da SHA-1 ein 160-Bit-Code ist, dauert es durchschnittlich 2 ^ 159 Brute-Force-Versuche, um ein Duplikat zu finden." Aber ein 2 ^ 2-Code erfordert 2 ^ 2-Vermutungen. Ich sehe nicht, warum du -1. "Lange Geschichte kurz", "..." halbiert die Stärke des Algorithmus, daher benötigt SHA-1 2 ^ 80 "..." MD5 erfordert 2 ^ 64 "..." Dies sind die Hälfte von 160 bzw. 128. " Hier hättest du -1'ed haben sollen. Die Bits erhöhen exponentiell die Stärke. Wenn Sie also die Stärke eines 160-Bit-Hashes halbieren, wird dies als 159-Bit-Hash und nicht als 80-Bit-Hash behandelt. Jedes Bit verdoppelt die Herausforderung eines Brute-Force-Angriffs. TOOGAM vor 9 Jahren 0
@ TOOGAM: Er sagte "im Durchschnitt"; In mehreren Versuchen müssen nur 50% des Schlüsselraums durchsucht werden * im Durchschnitt *, um bei einem Brute-Force-Angriff Erfolg zu haben. In Bezug auf den halbierenden Kommentar erklärt Andrew Mortons Kommentar oben; es sollte die Quadratwurzel sein, nicht die Hälfte der Komplexität. Reid vor 9 Jahren 0
@AndrewMorton guter Punkt, ich war nicht klar mit meiner Formulierung. Ich finde, die Literatur wechselt oft zwischen der Anzahl der Zustände und dem Basis-2-Logarithmus der Zustandsanzahl. Mein Wortlaut bezog sich darauf, die Anzahl der Bits zu halbieren, weil die Leute dazu neigen, in Bezug auf die Anzahl der Bits von "Stärke" zu sprechen. Ich war es so gewohnt, hin und her zu wechseln, dass ich es unbewusst tat. Ich werde bearbeiten, um die Verwirrung zu beseitigen. Cort Ammon vor 9 Jahren 0
@ MattNordhoff In meinem dritten Absatz ging es darum, warum ich über Kollisionen und nicht über Angriffe auf Vorbilder sprach. Es ist viel schwieriger, eine Analyse eines Vorbildangriffs durchzuführen, da einige Daten mit dem Hash auf eine Art und Weise interagieren, die es wesentlich schwieriger macht, ein Vorbild zu finden (betrachten Sie den berühmten Fall von Längenausdehnungsangriffen, bei dem einige Signaturkonstruktionen im Vergleich zu anderen trivial schwach sind ). Kollisionen sind eher ein "ebenes" Spielfeld. Außerdem sieht man zuerst das langsame Brechen des Hashes in seinen Kollisionen, daher ist es ein guter Ort, um zu sehen, wie stark der Hash momentan ist. Cort Ammon vor 9 Jahren 0
8
cpast

Die Fehler in SHA-1, die in diesem Artikel besprochen werden, sind sehr spezifisch: Sie ermöglichen es Angreifern, zwei Dinge zu erstellen, die den gleichen Wert haben (dies wird als "Kollisionsangriff" bezeichnet). Bei einem Kollisionsangriff muss der Angreifer jedoch beide beteiligten Dateien kontrollieren . Wenn der Angreifer die Originaldatei nicht kontrolliert, kann er bei einem Kollisionsangriff keine andere Datei mit demselben Hashwert finden.

Der Grund für TLS / SSL (und Signaturen im Allgemeinen) ist, dass ein Angreifer häufig beide Dateien steuern kann . Ein TLS-Zertifikat wird meistens von der Person erstellt, die es anfordert (die Bits, die nicht kontrolliert werden können, ist oft vorhersehbar). Daher können Kollisionen dazu führen, dass ein legitimes und ein unzulässiges Zertifikat erstellt, das legitime Zertifikat signiert und die Signatur übertragen wird.

Für Dateien gilt dieselbe Situation nicht immer. Wenn Ihre Besorgnis besorgt ist, dass die Person, die die Datei erstellt, der Angreifer ist (z. B. wird eine Sache unabhängig von ihrem Status als gut verifiziert und Ihnen dann die böse Nutzlast mit demselben Hash gesendet), gilt der SHA-1-Angriff, und Sie sollten suchen in Richtung auf das Auslaufen (obwohl es noch nicht kritisch ist, wie David Schwartz erwähnt hat). Wenn die Originaldatei vertrauenswürdig ist, kann ein Angreifer die derzeit bekannten SHA-1-Angriffe nicht anwenden, obwohl Sie immer noch darüber nachdenken sollten, ob Sie ihn auslaufen lassen sollten (wenn Sie die Wahl haben, verwenden Sie einen Hash ohne bekannte Angriffe wie SHA- 2).


Als Reaktion auf "die Kollision ist nicht nützlich" - Während ein Angriff einen Angreifer nicht zwingt, um eine nützliche Kollision zu erhalten, ist es im Allgemeinen nicht allzu schwer, "Kollision" in "nützliche Kollision" zu verwandeln. Viele Dateiformate haben eine Menge Platz, in dem Sie alles haben können, ohne die Funktionalität der Datei zu beeinträchtigen. Ein Angreifer kann dies normalerweise ändern, um eine Kollision zu erhalten (wenn Kollisionen praktisch auffindbar sind), während der funktionale Teil so bleibt, wie er es will. Die Kluft zwischen "akademischem Angriff" und "praktischem Angriff" kann groß sein; Die Lücke zwischen "beliebiger Kollision" und "nützlicher Kollision" ist im Allgemeinen viel kleiner.


Das ernstere Problem, das nicht mit der Wahl des Algorithmus zusammenhängt, ist, wie Sie den Hash erhalten. Alles, was ein Hash tut, ist, das Problem von "get the real file" auf "real real hash value" zu verschieben. Ein Hashwert, der vom selben Server und über denselben Verbindungstyp wie die Datei gesendet wird, ist gegen böswillige Änderungen absolut wertlos (jeder Angreifer, der die Datei manipulieren kann, kann den Hash manipulieren). Hashes sind nur dann nützlich, wenn Sie dem Hash mehr vertrauen können als der Datei. Während dies manchmal der Fall ist (Torrents, Spiegel), werden sie häufig verwendet, wenn dies nicht der Fall ist. Sie sollten daher sehr vorsichtig sein, wenn Sie Hashes für die Integritätsprüfung verwenden.

5
Damon

Man muss zwischen einem Kollisionsangriff und einem Vorbildangriff unterscheiden . Das Auffinden von zwei Nachrichten, die auf denselben Wert gehen, ist ein Kollisionsangriff.
Wenn Sie eine bestimmte gegebene Nachricht (hier eine ausführbare Datei) durch eine andere Nachricht mit demselben Hash ersetzen, handelt es sich um einen (zweiten) Preimage-Angriff.

SHA-1 ist insofern kaputt, als ein Kollisionsangriff in 2 52 Operationen durchgeführt werden kann, gemäß einem Wikipedia-Artikel, der diese Zahl nicht zitiert (der beste Angriff, den ich kenne, der tatsächlich glaubwürdig ist, ist der von Marc Stevens), was 2 60 Operationen erfordert). Aber lassen Sie uns annehmen, die pessimistische Fall von 2 52 .

Dies ist besorgniserregend, da ein Angriff in dieser Größenordnung nicht nur theoretisch denkbar ist, sondern sogar in einem Tag auf einem Multi-GPU-Rig durchaus machbar ist . Das ist natürlich ein Problem für Anwendungen, bei denen "zwei beliebige" Nachrichten funktionieren. Selbst die 2 60 Figur gegeben durch Stevens (die 256 - mal mehr Arbeit) ist durchaus möglich, wenn der Angreifer bereit ist, etwas mehr Geld auf dem Problem zu werfen, oder ist bereit, ein Jahr Zeit zu verbringen.
Das ist genau das, was jemanden, der an Spionage oder Cyberkriminalität beteiligt ist, nicht daran hindern kann, Zertifikate zu fälschen.

Nun hat ein Vorbildangriff einen Exponenten, der doppelt so groß ist. Wenn also 2 52 für den Kollisionsangriff angenommen werden, wären dies 2 104 Operationen, was eine völlig andere Dimension darstellt.

Dies ist nicht nur unpraktisch (eine Maschine, die eine Milliarde Mal schneller ist als die im vorigen Absatz erwähnte, würde immer noch rund 6 Millionen Jahre dauern), aber angesichts unserer minderwertigen Energieerzeugung ist dies völlig unmöglich.

Um eine solche massive Berechnung durchzuführen, wäre eine Energiequelle erforderlich, die viel größer ist als alles, was wir uns leisten können, um einen einzelnen Vorgang zu tätigen. Nein, keine recht große Energiequelle in der Größe der Sonne, aber immer noch eine ziemlich große .

Von einem Watt können Sie realistisch erwarten, zwischen 10 und 50 GFLOPS zu erreichen. Unter der Annahme, dass eine Art Wunder geschieht und Prozessoren über Nacht mehrere tausend Mal energieeffizienter werden, könnte man von 1 SHA 1 1 FLOP (ziemlich optimistisch!) Ausgehen. Dies bedeutet, dass Sie für die Durchführung von 2 104 Hash-Berechnungen innerhalb von 10 Jahren ein 10 12 W-Kraftwerk benötigen . Um den Angriff innerhalb eines Jahres durchzuführen, benötigen Sie ein 10 13 W-Kraftwerk. Das ist etwa das 50-fache dessen, was die gesamten Atomkraftwerke der USA, Frankreichs und Japans zusammen produzieren können, nur um einen einzelnen Hash zu schmieden.

Dies wird nicht passieren, es gibt viel einfachere Wege, um dasselbe Ziel zu erreichen (den Server auszunutzen, der den ursprünglichen Hash speichert, und diesen zu ersetzen, jemanden zu erpressen usw.).

"... viel einfachere Wege, um dasselbe zu erreichen ..." Wie in http://xkcd.com/538/ veranschaulicht. Ralph J vor 9 Jahren 0
2
jmn

Der allgemeine Punkt des Artikels, auf den in der Frage verwiesen wird, ist: SHA1 ist veraltet und sollte abgeschafft werden, solange Sie noch Zeit haben, um dies reibungslos zu tun. In einigen Bereichen läuft die Zeit ab, seit Google und Microsoft Fristen durchsetzen.

Faustregel für veraltete Technologie:

  • Wenn Sie ein neues Design erstellen oder Funktionen hinzufügen, dürfen Sie es nicht verwenden (SHA1).
  • Wenn Sie etwas Altes beibehalten, legen Sie einen Plan fest, wann es ersetzt werden soll (SHA1).

Zusammenfassendes Zitat aus dem Blogpost von 2012 von Bruce Schneier .: "Der Punkt ist, dass wir in der Community jetzt mit der Migration von SHA-1 und SHA-2 / SHA-3 beginnen müssen."

2
Ehryk

Für den SHA-1-Hashkollisionsteil Ihrer Frage wurde dies in einigen Antworten beantwortet.

Ein großer Teil davon hängt jedoch davon ab, mit welchem ​​Dateityp wir arbeiten:

Behält den Gesamtinhalt und den Betrieb der Datei bei (enthält jedoch jetzt natürlich auch böswilligen Inhalt, dessen ursprünglicher Inhalt nicht geändert wurde).

Was dies bedeutet, hängt stark davon ab, was die Änderungen feststellt:

  • Wenn es sich um eine signierte ausführbare Datei handelt, keine (vernünftige) Chance: Sie müssten irgendwie zwei Hash-Kollisionen erhalten: den SHA-1 der Datei und die interne .exe-Signatur.
  • Wenn es sich um eine nicht signierte ausführbare Datei, .com, eine nicht signierte DLL oder ähnliches handelt, können ihre Ressourcengabeln so hinzugefügt werden, dass ihre Operation nicht geändert wird. Dadurch könnte (möglicherweise) eine Hashkollision auftreten, die von 'normal' nicht erkannt werden kann. Operation.
  • Wenn es sich um eine Quellcodedatei oder eine ähnliche Struktur handelt (.cs, .c, .h, .cpp, .rb, .yml, .config, .xml, .pl, .bat, .ini), die Ergänzungen, Änderungen oder Entfernungen kann auf eine gültige Kommentarsyntax beschränkt werden, sodass die Änderung für die meisten Zwecke nicht erkennbar ist (Kompilieren oder Ausführen, nicht Öffnen mit einem Texteditor).
  • Wenn es sich um ein ISO- oder ZIP-Format oder ein anderes Containerformat handelt, ist es auch unwahrscheinlicher, da die meisten zufälligen Änderungen den Container beschädigen. Es ist möglich, einen falschen Dateieintrag hinzuzufügen oder einen Inhalt innerhalb des Containers zu ändern und erneut zu überprüfen, aber Sie fügen eine Komplexitätsebene hinzu und fügen zusätzliche Zeit hinzu, um das Ergebnis zu überprüfen, und haben nur einen begrenzten Freiheitsgrad in Bezug auf den Inhalt wie und welche Inhalte geändert werden können.
  • Wenn es sich um ein text- oder textähnliches Format handelt, können sie fast beliebig geändert werden, obwohl sie noch eine "gültige" Datei sind. Der Inhalt wird jedoch wahrscheinlich auffallen.
  • Bei vielen Formaten wie .rtf, .doc, .html, .xslx und anderen markup-artigen Formaten können sie auf eine Weise hinzugefügt oder geändert werden, die von Parsern nicht erkannt werden kann, also von der Länge (oder sogar mit einer eingeschränkten Länge) (weniger Freiheit) Die Dateien können geändert werden, um (möglicherweise) eine Hash-Kollision zu erhalten, während sie nicht nur eine gültige Datei sind, sondern nicht merklich auf irgendeine Weise geändert werden, die für die typischen Anwendungen sichtbar wäre, mit denen sie verwendet werden würden.

Was bleibt also übrig, wie Sie Kollisionen in einer beliebigen Struktur erhalten, die nicht korrupt ist und in gewissem Maße nicht erkannt werden kann:

  1. Nehmen Sie alle gewünschten funktionalen Änderungen vor (z. B. das Einfügen von schädlichem Inhalt) und nehmen Sie weitere Änderungen vor, um die Gültigkeit des Dateiformats zu erhalten
  2. Fügen Sie einen Abschnitt hinzu, der nicht funktionsfähig ist (zwischen Kommentarblöcken und ganz am Ende einer Textdatei mit 3-k-Wagenrückläufen darüber einen aktuellen Kommentarblock isolieren).
  3. Fügen Sie ein Zeichen / Codepunkt / Byte zur Änderung hinzu oder wählen Sie es aus, und probieren Sie jede mögliche gültige Kombination aus (nicht jede Bytekombination ist beispielsweise für unterschiedliche Kodierungen gültig).
  4. Berechnen Sie den Hash erneut und prüfen Sie, ob die Kollision übereinstimmt.
  5. Wenn nicht, gehe zu 3.

Nehmen wir an, Sie haben einen superschnellen Computer und eine kleine Datei, so dass eine Änderung mit einer gültigen Byte-Sequenz und die Neuberechnung des Hashes 1 Millisekunde erfordern (wahrscheinlich erfordert dies dedizierte Hardware). Wenn die Hash-Verteilung vollkommen zufällig und über den gesamten Bereich verteilt ist, werden Sie bei jedem 2^160Versuch mit SHA-1 kollidieren (brutales Erzwingen).

2^160/1000/60/60/24/365.24  = 4.63x10^37 years  = 46,300,000,000,000,000,000,000,000,000,000,000,000 years  = 46 undecillion years. 

Aber hey, wollen sie versuchen, die 2^60und 2^52Versionen, und behauptet, dass sie es uns ermöglichen, die Datei zu ändern, dass Art und Weise wir möchten (sie nicht) und dass auch sie können in 1ms jeder versuchen erfolgen:

2^52 yields 142,714 years  /*humans might still be around to care, but not about these antiquated formats*/ 2^60 yields 3.65x10^7 years = 36,500,000 years  /*machines will probably have taken over anyway*/ 

Aber hey, du könntest Glück haben. Wirklich, wirklich mehr als ein Wunder als alles, was die Menschen als Wunder bezeichnet haben.

0
Anthony Guess

Nicht wirklich, Sie können eine dieser Bedingungen gleichzeitig erfüllen, aber nicht beide. Es ist möglich, denselben Hashwert für zwei verschiedene Dateien zu erhalten, aber wenn jemand eine Datei ändert und dann versucht, denselben Hashwert zu erhalten, ist dies ziemlich unmöglich Soweit ich weiß

Ziemlich unmöglich * noch *. Bei ausreichender Rechenleistung ist alles möglich. vor 9 Jahren 1
-6
Ken

Ja, es ist möglich. Stellen Sie sich vor, wie Viren an EXEs arbeiten. Die Malware-Nutzlast wird an die Original-EXE angehängt, so dass das Programm weiterhin das tut, was es ursprünglich getan hat, sich aber auch als Virus ausbreitet. Um denselben Hashwert beizubehalten, müssten Sie jetzt zusätzliche speziell gestaltete Polsterungen verwenden .

Das bedeutet, dass die Datei größer wäre. Aber im Fall einer EXE-Datei könnten Sie vielleicht etwas weniger verwendeten Code entfernen, sodass das Programm nur anfangs zu funktionieren scheint. Bei einem JPEG können Sie das Bild weiter komprimieren oder ein anderes Bild verwenden. Bei einer ISO können Sie Dateisätze entfernen. Die zur Replikation des Hashes erforderlichen Berechnungen wären für bestimmte Fälle schwieriger und mathematisch vielleicht unmöglich, aber im Allgemeinen noch möglich.

-1 alles in diesem Beitrag ist komplett zusammengesetzt. Längenausdehnungsangriffe führen ** nicht ** "behalten den gleichen Hash" * bei (der Hash ändert sich in bekannter Weise) *. Es gibt auch keinen Grund, dass ein Virus "den weniger verwendeten Code" * entfernen muss (wie würde er überhaupt feststellen, was das ist?) *. Und was haben JPEGs mit irgendwas zu tun? BlueRaja - Danny Pflughoeft vor 9 Jahren 7
Das ist einfach total falsch, ich kann nicht mal Korrekturen vorschlagen, ohne die ganze Antwort neu zu schreiben Mark K Cowan vor 9 Jahren 2
-1 Überhaupt nicht richtig. Auch bekannt als: "Nicht einmal falsch" (Wolfgang Pauli) Olivier Dulac vor 9 Jahren 2
Nun, wir könnten mit der Tatsache beginnen, dass, wenn etwas * allgemein * möglich ist *, dies natürlich in * einem bestimmten Fall * möglich ist. Das Gegenteil trifft jedoch nicht immer zu: Es ist leicht, sich ein Problem vorzustellen, das für einen bestimmten Fall gelöst werden kann, jedoch nicht generell. a CVn vor 9 Jahren 1