Ist es sicher, die Möglichkeit von SHA-Kollisionen in der Praxis zu ignorieren?

209

Nehmen wir an, wir haben eine Milliarde einzigartiger Bilder mit jeweils einem Megabyte. Wir berechnen den SHA-256-Hash für den Inhalt jeder Datei. Die Möglichkeit einer Kollision hängt ab von:

  • die Anzahl der Dateien
  • die Größe der einzelnen Datei

Wie weit können wir gehen, wenn wir diese Möglichkeit ignorieren, wenn sie Null ist?

Hristo Hristov
quelle
1
Dies hängt davon ab, wofür Sie die Hash-Schlüssel verwenden. Wenn es sich um eine Art Dateiidentifikation handelt, kann eine Kollision auch bedeuten, dass die Dateien identisch sind. Daher müssen Sie die Dateien auch im Falle einer Kollision vergleichen. Ich würde sagen, es wäre ziemlich sicher, nur die Dateigrößen zu vergleichen.
Mojuba
Ja, in diesem Fall verringert sich die Wahrscheinlichkeit drastisch, wenn Sie die Dateigrößen vergleichen. Sie können auch zwei Hashing-Algorithmen verwenden und die Ergebnisse verketten. Dann nimmt die Möglichkeit einer Kollision von beiden gleichzeitig weiter ab. Aber die Frage ist, wie viel ist "ziemlich" sicher? Vielleicht brauchen wir eine Formel und Zahlen.
Hristo Hristov
2
@Hristo Hristov: Wenn wir annehmen, dass der Hash-Schlüssel eine Pseudozufallszahl ist (was theoretisch korrekt ist), ergibt eine Milliarde 128-Bit-Schlüssel eine Kollisionswahrscheinlichkeit von 2,9 * 10 ^ -30. Man kann es nicht einmal "winzig" nennen, es ist weniger als das;)
Mojuba
3
@mojuba: Noch besser, er fragt nach einem 256-Bit-Hash.
Michael Borgwardt
FWIW: Das GIT-Versionskontrollsystem identifiziert Dateien anhand ihres Inhalts-SHA.
Snemarch

Antworten:

385

Die übliche Antwort lautet wie folgt: Wie hoch ist die Wahrscheinlichkeit, dass ein Schurken-Asteroid innerhalb der nächsten Sekunde auf der Erde abstürzt, die Zivilisation, wie wir sie kennen, auslöscht und einige Milliarden Menschen tötet? Es kann argumentiert werden, dass jedes unglückliche Ereignis mit einer geringeren Wahrscheinlichkeit nicht wirklich sehr wichtig ist.

Wenn wir eine „perfekte“ Hash - Funktion mit einer Ausgangsgröße haben n , und wir haben p - Nachrichten an hash (individuelle Nachrichtenlänge nicht wichtig ist), dann wird die Kollisionswahrscheinlichkeit , ist etwa p 2 /2 n + 1 (dies ist eine Annäherung , die ist gültig für "kleines" p , dh wesentlich kleiner als 2 n / 2 ). Beispielsweise beträgt bei SHA-256 ( n = 256 ) und einer Milliarde Nachrichten ( p = 10 9 ) die Wahrscheinlichkeit etwa 4,3 * 10 -60 .

Ein Massenmörder-Weltraumfelsen kommt durchschnittlich alle 30 Millionen Jahre vor. Dies führt zu einer Wahrscheinlichkeit , ein solches Ereignis in der nächsten Sekunde auftreten , zu etwa 10 -15 . Das sind 45 Größenordnungen wahrscheinlicher als die SHA-256-Kollision. Kurz gesagt, wenn Sie SHA-256-Kollisionen als beängstigend empfinden, sind Ihre Prioritäten falsch.

In einem Sicherheits-Setup, in dem ein Angreifer die Nachrichten auswählen kann, die gehasht werden sollen, kann der Angreifer wesentlich mehr als eine Milliarde Nachrichten verwenden. Sie werden jedoch feststellen, dass die Erfolgswahrscheinlichkeit des Angreifers immer noch gering ist. Das ist der springende Punkt bei der Verwendung einer Hash-Funktion mit einer 256-Bit-Ausgabe: Damit Kollisionsrisiken vernachlässigt werden können.

Bei alledem wird natürlich davon ausgegangen, dass SHA-256 eine "perfekte" Hash-Funktion ist, die bei weitem nicht bewiesen ist. Trotzdem scheint SHA-256 ziemlich robust zu sein.

Thomas Pornin
quelle
12
Dies ist eine sehr gute Antwort, danke! Aber wenn im Falle einer Kollision ein Kernkraftwerk explodiert und es von Ihnen abhängt, gehen Sie dieses Risiko ein? Wenn Sie völlig Recht haben, können wir das Risiko eingehen, denn es ist 45 Größenordnungen wahrscheinlicher, dass die Zivilisation zerstört wird. Richtig?
Hristo Hristov
46
@ Chriso Ich denke ja, man würde dieses Risiko eingehen. Ein Kernkraftwerk hat bereits eine weitaus höhere Explosionswahrscheinlichkeit aufgrund anderer Faktoren wie mechanischer Ausfälle, menschlicher Fehler beim Bau oder Bedienungsfehler beim Betrieb, und wir gehen dieses Risiko bereits ein. Wenn SHA-256-Kollisionen die einzigen Ursachen für nukleare Zwischenfälle wären, hätten wir mit ziemlicher Sicherheit bisher genau null davon gehabt.
Roman Starkov
27
foxnews.com/science/2013/02/11/… Ich würde anfangen, über SHA512 nachzudenken.
Dustin Oprea
37
Ich kann mich jetzt beruhigt darauf verlassen, dass ich wahrscheinlich von einem Asteroiden ausgelöscht werde, lange bevor ich eine SHA-256-Kollision erlebe.
AaronLS
10
Entschuldigung, Sie vermissen das sogenannte "Geburtstagsparadoxon". Schauen Sie sich den "schönen Tisch" genauer an, er funktioniert nicht so, wie Sie denken. Für die Zahlen, die ich in dieser Tabelle gebe, wäre es ein Wert "10 ^ 9" in einer Spalte mit der Bezeichnung "4,3 * 10 ^ -60" und Zeile "128 Bit" (aber die Tabelle unterschreitet nicht 10 ^ -18 ).
Thomas Pornin
47

Die Möglichkeit einer Kollision hängt nicht von der Größe der Dateien ab, sondern nur von ihrer Anzahl.

Dies ist ein Beispiel für das Geburtstagsparadoxon . Die Wikipedia-Seite gibt eine Schätzung der Wahrscheinlichkeit einer Kollision. Wenn Sie die Zahlen eingeben, werden Sie feststellen, dass alle jemals auf der Erde produzierten Festplatten nicht genügend 1-MB-Dateien enthalten können, um eine Kollisionswahrscheinlichkeit von sogar 0,01% für SHA-256 zu erhalten.

Grundsätzlich können Sie die Möglichkeit einfach ignorieren.

Michael Borgwardt
quelle
5
Ich kann der Schlussfolgerung nicht zustimmen. Ja, keine Festplatten können diese Anzahl von Dateien speichern, aber Sie interpretieren die Situation IMO falsch. Es sind nur zwei Dateien erforderlich, um eine Kollision zu erzeugen. Obwohl die Möglichkeit sehr gering ist, kann es dennoch passieren.
Scharfzahn
11
@ Sharptooth: Nein, ich stelle die Situation nicht falsch dar. Die Wahrscheinlichkeit, dass Sie und jeder, den Sie kennen, am selben Tag an einem Verkehrsunfall sterben, ist sehr gering, kann aber dennoch auftreten (und ist viel höher als bei einer SHA-256-Kollision). Sie ignorieren diese Möglichkeit jedoch.
Michael Borgwardt
11
@sharptooth: Ich habe über getrennte , gleichzeitige Verkehrsunfälle von einigen hundert bestimmten Personen gesprochen. Sie können nicht wirklich Schritte unternehmen, um dies zu senken. Es wäre sinnlos, da es schon bizarr niedrig ist. Aber immer noch so viel wahrscheinlicher als eine SHA-256-Kollision, dass Sie sich nicht einmal vorstellen können, wie viel. Es ist das gleiche Argument wie Thomas.
Michael Borgwardt
12
@sharptooth: Nein, die Chancen steigen nicht signifikant, da die Anzahl durch die Größe des SHA-256-Hash-Space immer noch absolut in den Schatten gestellt wird. Dies ist die einzige Sache, die Sie nicht richtig berücksichtigen - alle Faktoren müssen nach ihrer tatsächlichen Größe gewichtet werden, nicht gleich. Wenn Sie für jede einzelne Person auf der Erde eine Milliarde Hashes pro Sekunde generiert hätten und dies tausend Jahre lang getan hätten, hätten Sie immer noch eine Kollisionswahrscheinlichkeit von weniger als 1%.
Michael Borgwardt
3
Wenn Sie nicht bei jedem Abruf aus dem Speicher oder beim Lesen von der Festplatte (die eine weitaus höhere Wahrscheinlichkeit als eine SHA-256-Kollision haben) auf die Möglichkeit eines nicht korrigierten Fehlers prüfen, verstehen Sie die Wahrscheinlichkeiten möglicherweise nicht vollständig.
Christophe
17

Erstens ist es nicht Null, sondern sehr nahe bei Null .

Die Schlüsselfrage ist, was passiert, wenn tatsächlich eine Kollision auftritt ? Wenn die Antwort lautet "Ein Kernkraftwerk wird explodieren", sollten Sie die Kollisionsmöglichkeit wahrscheinlich nicht ignorieren. In den meisten Fällen sind die Folgen nicht so schlimm, sodass Sie die Kollisionsmöglichkeit ignorieren können.

Vergessen Sie auch nicht, dass Ihre Software (oder ein winziger Teil davon) möglicherweise in einer Unmenge von Computern bereitgestellt und gleichzeitig verwendet wird (einige winzige eingebettete Mikrocomputer, die heutzutage fast überall enthalten sind). In diesem Fall müssen Sie die Schätzung mit der größtmöglichen Anzahl von Kopien multiplizieren.

scharfer Zahn
quelle
... nicht nach der Anzahl der Kopien, sondern nach der Anzahl der Datensätze, die alle Kopien verarbeiten.
Andreas Spindler
1
Dies ist falsch, die Anzahl der Kopien der ausgeführten Software spielt keine Rolle. Das einzige, was zählt, ist die Anzahl der eindeutigen Dateien, die verarbeitet werden, und das Geburtstagsparadoxon ist die Mathematik für die Berechnung.
Dirk Bester
1
Ich hörte, wie jemand anderes erwähnte, dass die Wahrscheinlichkeit eines Hardwarefehlers - dh ein bisschen umdrehen aufgrund von Strahlung usw. - wahrscheinlicher ist als eine Hash-Kollision, und daher ist es dumm, sich über die Hash-Kollision Sorgen zu machen. Persönlich würde ich versuchen, beide Fälle abzudecken, um sicher zu gehen (je mehr Sicherheit in einem Kernkraftwerk desto besser), aber Hash-Kollisionen wären auf der Liste der potenziellen Gefahren wahrscheinlich sehr gering (vorausgesetzt, der Hash-Raum ist groß genug). . Dies alles setzt jedoch voraus, dass die Hash-Funktion kein verstecktes Verhalten enthält, das häufiger zu Kollisionen führt.
Chris Middleton
@GreenTree Mit dem, was Sie verlinkt haben, geht es darum, absichtlich Kollisionen zu erstellen.
Scharfzahn