CRC32 Kollision
Ich versuche zu finden, eine Kollision zwischen zwei Nachrichten, die führen zu den gleichen CRC-hash.
Bedenkt ich bin mit CRC32, gibt es eine Möglichkeit, ich kann verkürzen die Liste der möglichen Nachrichten, die ich haben, um zu versuchen bei einem brute-force-Angriff?
Links zu websites mit Tipps, dies hilfreich sein. Ich habe bereits einen brute-force-Algorithmus, der wird dies tun, aber es ist einfach Inkrement Integer-zahlen und sieht, wenn es mit anderen hashes.
InformationsquelleAutor | 2009-10-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es hängt ganz davon ab, was Sie "bedeutet " Nachricht". Wenn Sie anfügen können vier bytes Kauderwelsch auf eine der Nachrichten. (I. E. vier bytes, die keine Bedeutung haben, innerhalb des Kontextes der Nachricht.) Dann wird es trivial, im wahrsten Sinne des Wortes.
Denken in Bezug auf die bits bewegen sich durch die CRC32-state-Maschine.
CRC32 basiert auf einem galois-feedback shift register, jedes bit in seinem Zustand ersetzt werden, mit der Induktion von 32 bits der payload-Daten. Bei der Induktion der jedes bit, die Positionen angegeben, die durch das Polynom wird exklusiv ored mit der Sequenz beobachtet vom Ende der Schieberegister. Diese Sequenz wird nicht beeinflusst durch die Eingabe von Daten, bis das Schieberegister gefüllt worden.
Als ein Beispiel vorstellen, wir haben ein Schieberegister gefüllt mit Anfangszustand 10101110, Polynom 10000011, und füllen mit unbekannten bits, X.
Das feedback nicht in Form von X-bis der SR wurde gefüllt!
Also, um zum erzeugen einer Nachricht mit einer vorgegebenen Prüfsumme, nehmen Sie Ihre neue Nachricht, generiert die CRC und arbeiten heraus, dass es die nächsten 32 bits von feedback. Dies können Sie tun in 32 Stufen der CRC-Funktion. Sie brauchen dann zur Berechnung der Wirkung dieser Rückmeldungen auf die Inhalte der Schieberegister.
Einen shortcut dafür ist die pad Ihre Nachricht mit vier null-bytes und betrachten Sie dann die Prüfsumme. (Prüfsumme ist der Zustand der SR am Ende, die, wenn Sie aufgefüllt mit vier null-bytes ist der Einfluss, den feedback und die leere bytes.)
Exklusiv-ODER, dass der Einfluss auf die Prüfsumme Wert, den Sie möchten, ersetzen Sie die vier-byte-trailer-mit diesem berechneten Wert und regenerieren die Prüfsumme. Man könnte dies mit einem Programm generiert eine CRC32 -, hex-editor und einem Taschenrechner, kann hex.
Wenn Sie möchten, erzeugen Sie zwei Nachrichten, die sowohl den vollen Sinn und enthalten nicht trailing garbage, werden die Dinge ein wenig härter. Identifizieren eine Anzahl von Abschnitte, die Sie schreiben können, plausible alternativen auf, mit exakt der gleichen Länge.
Mit englischen Prosa-als ein Beispiel.
"Ich denke, dass das funktionieren kann"
und
"Ich glaube, dass in diesem Ansatz"
Haben ähnliche Bedeutungen, und genau die gleiche Länge.
Ermittlung genug Beispiele in Ihrer Nachricht ist das knifflige bit (es sei denn, Sie wollen zu betrügen mit Leerzeichen!) CRC-32 ist linear, sofern die Daten den richtigen offset in der Nachricht. Also CRC([messagea][padding])^CRC([padding][messageb])=CRC([messagea][messageb])
Es gibt einige Vorsichtsmaßnahmen, mit word-alignment, die Sie benötigen, zu bewältigen, als ein allgemeiner Hinweis, den Sie erweitern möchten die Passagen in den "festen" Teil der Nachricht. Als eine Allgemeine Regel, die Sie haben wollen alternativen für die n*1.5 Passagen, wobei n die Größe des CRC.
Können Sie nun die Berechnung der CRC, dass die Skelett-Nachricht hat den Eindruck, dass jede alternative passage auf, und dann erstellt eine Tabelle zum Vergleich der Einfluss, den jede alternative für jeden Durchgang haben würde. Sie müssen dann wählen Sie alternativen, die sich ändern wird die Skelett-CRC zu entsprechen, die CRC, die Sie wollen. Das problem ist eigentlich ganz lustig zu lösen, erst mal alle finden alternativen, eindeutig zu wenig modifizieren, wenn Sie, dass etwas sich ändern muss für Ihren CRC, wählen Sie diese alternative und Falten Sie es Einfluss in die SFB, dann gehen Sie wieder rund. Das sollte reduzieren, die Lösung der Raum, den Sie dann suchen müssen.
Ist das schon eine schwierige Sache, um code, aber es würde generieren Ihre Kollisionen in einer sehr kurzen Zeitspanne.
InformationsquelleAutor scruffy_brit
Kurz einen Fehler mit meiner Rechnung, ist die Wahrscheinlichkeit nicht gefunden zu haben, eine Kollision nach N versuche ist angenähert in der folgenden Tabelle:
In anderen Worten, die Wahrscheinlichkeit, dass compute-mehr als 200.000 CRC32 Werte vor finden, ein Duplikat ist weniger als 1%, oder die Wahrscheinlichkeit, ein Duplikat vor 102,000 versuche ist 70.2%
BTW dies ist bemerkenswert, da die Wahrscheinlichkeit, eine Kollision auf, sagen wir, die sehr von 200.000 TEN Versuch immer noch in der Größenordnung von 1/1000stel 1% ((4M - 200,0000) /4M), aber die wohl gefunden haben, zu einer Kollision vor dem 200.000 TEN Versuch ist eine quasi-Gewissheit (na ja, über 99% jedenfalls). Dies zeigt das Interesse, dass eine Datenbank mit Prüfsummen berechnet, so weit.
Könnten wir sicherlich verbringen einige Zeit mit dem Studium der CRC32-Algorithmus und die Ihr zugrunde liegenden Mathematik, in einem Versuch zu finden, Nachrichten mehr wahrscheinlich produzieren eine CRC32-Kollisionen, aber die relativ kleine Zahl der wirklich zufällige versuche erforderlich, mindestens eine Kollision mit quasi-Gewissheit, macht diese Art von Kryptoanalyse Ansatz kaum die Mühe Wert. Zum Beispiel unter der Annahme, dass wir entdecken konnten, eine Möglichkeit zum auswählen von Nachrichten, die sind 10 mal häufiger aufeinander, wir würden immer noch versuchen, in der Reihenfolge der 63,000 Zeiten vor erreichen der 99% ige Chance, dass mindestens eine Kollision (besser als 200 000, aber immer noch erfordern in etwa die gleiche Art von Anwendung.)
Das einzige, was wir Bedenken wollen, die in diesem Bereich zu vermeiden Sie Nachrichten, die kürzer als 4 Byte Länge (ich habe irgendwo gelesen, dass die CRC32 war bijektive in dieser Botschaft Raum), und vermeiden Sie Nachrichten, die auch ähnliche (d.h. nur unterschiedlich von einem oder zwei Zeichen), da nach CRC32 der ursprüngliche Zweck ist zu erkennen (und gegebenenfalls automatische Korrektur), wie kleine Unterschiede in Nachrichten.
Daher, es scheint, dass die Schwierigkeit der Aufgabe ist nicht so sehr die Suche nach Möglichkeiten zur Berechnung CRC32s bei sizzling Geschwindigkeit (obwohl, wir sollten nicht zu langsam mit diesem ist), sondern zu verwalten eine schnell-searcheable Datenbank mit bis zu 200.000 Nachrichten (oder die Meldung "Schlüssel", mehr dazu weiter unten) und die zugehörigen CRC32-Wert.
Ein paar Ideen zur Umsetzung all dieser
InformationsquelleAutor mjv
Gehe ich davon aus, dass du meinst, "Nachricht" statt "Schlüssel".
Wenn Sie zulässig sind, wählen Sie " beide "Tasten", dann brute-force Recht schnell da eh den Geburtstag paradox. Pick zufällige Nachrichten, berechnen Sie Ihre CRC-Fehler, denken Sie daran, alle von Ihnen und der zugehörigen CRC-Fehler, und jeder neue hat mehr und mehr Chancen zu kollidieren mit einer bestehenden ein, wie Sie akkumulieren. Ehrlich gesagt, erwarte ich, dass dieser Ansatz schneller auf einem modernen computer als die Suche Ansätze bekannt zu machen CRC32 kollidieren.
InformationsquelleAutor Pascal Cuoq
Ich glaube CRC ist linear, also, wenn Sie Sie ändern (in-place), ohne ändern der Länge) zwei verschiedene Teile der Datei,
die Unterschiede in der SFB sollte xor-verknüpft.-- Korrektur: es scheint nicht ganz so einfach. Dies ist jedoch immer noch die Art von Wende, die ich nehmen würde, bei dem Versuch, zu konstruieren eine Kollision -- Sie Folgen müssen, die Mathematik in mehr detail, als ich bin geneigt zu tun, heute Abend...
Das ist der Punkt. CRC ist sehr schnell zu berechnen ist und gut bei der Erkennung zufälliger Veränderungen, nicht standhalten Kryptoanalyse..
InformationsquelleAutor comingstorm
Gerade gestern gab es diese Frage hier auf SO, ein paar von Zeigern erwähnt, kann es Ihnen helfen.
InformationsquelleAutor fvu
Brute-force müssen Sie über sqrt(6N) zufällige Länge Nachrichten für einen hash der Größe N um eine 95% Wahrscheinlichkeit für die Kollision. E. g. CRC32 , N = 2^32 ist , müssen Sie über 160 000 Nachrichten
InformationsquelleAutor user1087245
spoof macht genau das. Es erfordert keine brute-force.
InformationsquelleAutor Mark Adler