In der Praxis bedeutet ein identischer kryptografischer Hash, dass die Dateien identisch sind, sofern sie nicht von einem Angreifer oder einer anderen böswilligen Entität erstellt wurden. Die Wahrscheinlichkeit, dass zufällige Kollisionen mit einer gut konzipierten kryptografischen Hash-Funktion auftreten, ist so gering, dass sie in der Praxis und bei Abwesenheit eines aktiven Angreifers vernachlässigbar sind.
Im Allgemeinen können wir jedoch nicht sagen, dass zwei beliebige Dateien mit demselben Hash definitiv bedeuten, dass sie identisch sind.
Die Funktionsweise einer kryptografischen Hash-Funktion besteht darin, eine Eingabe beliebiger Länge zu übernehmen und einen aus der Eingabe berechneten Wert fester Länge auszugeben. Einige Hash-Funktionen haben mehrere Ausgabelängen zur Auswahl, aber die Ausgabe ist bis zu einem gewissen Grad immer noch ein Wert mit fester Länge. Dieser Wert kann bis zu ein paar Dutzend Bytes lang sein. Die heute gebräuchlichsten Hash-Algorithmen mit dem längsten Ausgabewert haben eine 512-Bit-Ausgabe und eine 512-Bit-Ausgabe beträgt 64 Byte.
Wenn eine Eingabe in eine Hash-Funktion länger ist als die Ausgabe der Hash-Funktion, muss eine gewisse Genauigkeit entfernt werden, damit die Eingabe in die Ausgabe passt. Infolgedessen müssen mehrere Eingänge vorhanden sein, deren Länge größer ist als die Länge des Ausgangs, und die den gleichen Ausgang erzeugen.
Nehmen wir als Beispiel das aktuelle Arbeitstier SHA-256. Es gibt einen Hash von 256 Bits oder 32 Bytes aus. Wenn Sie zwei Dateien haben, die jeweils genau 32 Byte lang, aber unterschiedlich sind, sollten diese (unter der Annahme, dass kein Fehler im Algorithmus vorliegt) unterschiedliche Werte haben, unabhängig vom Inhalt der Dateien. In mathematischer Hinsicht ist der Hash eine Funktion, die einen 2 256- Eingaberaum auf einen 2 256- Ausgaberaum abbildet, was ohne Kollisionen möglich sein sollte. Wenn Sie jedoch zwei Dateien mit einer Länge von jeweils 33 Byte haben, muss eine Kombination von Eingaben vorhanden sein, die für beide Dateien denselben 32-Byte-Ausgabehashwert ergeben, da wir jetzt einen 2 264- Eingabebereich auf eine 2 256- Datei abbildenAusgaberaum; hier können wir leicht erkennen, dass es durchschnittlich 2 8 Eingänge für jeden einzelnen Ausgang geben sollte. Gehen Sie noch weiter, und bei 64-Byte-Dateien sollten für jeden einzelnen Ausgang 2 256 Eingänge vorhanden sein!
Kryptografische Hash-Funktionen sind so konzipiert, dass es schwierig ist , eine Eingabe zu erstellen, die eine bestimmte Ausgabe ergibt, oder zwei Eingaben zu erstellen, die dieselbe Ausgabe ergeben. Dies ist bekannt als Urbild Angriff Widerstand oder Kollision Angriff Widerstand . Es ist nicht unmöglich , diese Kollisionen zu finden. Es soll nur wirklich, wirklich, wirklich, wirklich schwer sein. (Ein kleiner Sonderfall eines Kollisionsangriffs ist ein Geburtstagsangriff .)
Einige Algorithmen können Angreifern besser widerstehen als andere. MD5 wird heutzutage allgemein als komplett kaputt angesehen, aber zuletzt hatte es immer noch eine ziemlich gute Beständigkeit gegen das erste Bild . SHA-1 wird ebenfalls effektiv gebrochen; Präimage-Angriffe wurden demonstriert, erfordern jedoch bestimmte Bedingungen, obwohl es keinen Grund zu der Annahme gibt, dass dies auf unbestimmte Zeit der Fall sein wird. Angriffe werden immer besser und nie schlimmer. SHA-256/384/512 werden derzeit noch für die meisten Zwecke als sicher angesehen. Aber wenn Sie, sind nur daran interessiert, wenn zwei Nicht- in böser Absicht erstellten, gültigDateien sind die gleichen, dann sollte eine dieser Dateien ausreichen, da der Eingabebereich bereits so begrenzt ist, dass Sie sich hauptsächlich für zufällige Kollisionen interessieren. Wenn Sie Grund zu der Annahme haben, dass die Dateien in böswilliger Absicht erstellt wurden, müssen Sie mindestens eine derzeit als sicher geltende kryptografische Hash-Funktion verwenden, die den unteren Balken auf SHA-256 setzt.
Das erste Vorbild ist, eine Eingabe zu finden, die einen bestimmten Ausgabehashwert ergibt. Das zweite Vorbild ist, einen Eingang zu finden, der den gleichen Ausgang liefert wie ein anderer, spezifizierter Eingang. Eine Kollision besteht darin, zwei Eingaben zu finden, die dieselbe Ausgabe ergeben, unabhängig davon, was das ist, und manchmal unabhängig davon, was die Eingaben sind.
Dabei ist zu beachten, dass die Dateien möglicherweise sehr unterschiedliche Datendarstellungen aufweisen und dennoch exakt gleich angezeigt werden. So können sie zu sein scheinen das gleiche , obwohl ihre Verschlüsselungs Hashes nicht übereinstimmen, aber wenn die Hashes übereinstimmen , dann sind sie sehr wahrscheinlich die gleiche erscheinen.
cmp
Unix oderfc
(Datei vergleichen) unter Windows vergleichen.