Kollisionsresistenz bei Hash-Funktionen
Eine Hash-Kollision tritt auf, wenn zwei verschiedene Eingaben den gleichen Hash-Wert produzieren. Zu verstehen, warum dies wichtig ist und wie Algorithmen sich unterscheiden, ist fundamental für den richtigen Einsatz von Hashes.
Was sind Kollisionen?
Da Hash-Funktionen beliebige Eingaben auf Ausgaben fester Größe abbilden, existieren Kollisionen mathematisch für jede Hash-Funktion. Unendliche mögliche Eingaben, aber nur 2^n mögliche Ausgaben (wobei n die Bit-Länge des Hash ist) bedeuten, dass mehrere Eingaben zwangsläufig den gleichen Hash teilen. Die Frage ist nicht, ob Kollisionen existieren, sondern ob Angreifer sie finden können. Eine sichere Hash-Funktion macht das Finden von Kollisionen rechnerisch unmöglich, selbst wenn sie theoretisch existieren. Es gibt zwei Arten von Kollisionsangriffen. Kollisionsangriff: Finde beliebige zwei Eingaben mit demselben Hash. Preimage-Angriff: Finde bei einem Hash eine Eingabe, die diesen produziert. Kollisionsangriffe sind einfacher und reichen oft aus, um Systeme zu kompromittieren. Das Geburtstagsparadoxon erklärt, warum Kollisionen einfacher zu finden sind als erwartet. Aufgrund der Wahrscheinlichkeitsmathematik erfordert das Finden einer Kollision in einem n-Bit-Hash ungefähr 2^(n/2) Versuche, nicht 2^n. Ein 128-Bit-Hash (MD5) braucht ungefähr 2^64 Versuche für eine Kollision – schwierig, aber machbar.
Warum Kollisionen wichtig sind
Kollisionen brechen grundlegende Sicherheitsannahmen. Wenn Sie einen Vertrag digital signieren, hashen Sie ihn und signieren den Hash. Wenn jemand ein anderes Dokument mit demselben Hash erstellen kann, ist Ihre Signatur auf beiden gültig. Das ist nicht nur theoretisch – es wurde in realen Angriffen verwendet. Die Flame-Malware (2012) nutzte eine MD5-Kollision, um sich als Microsoft-Signatur auszugeben. Angreifer fanden eine Kollision, die es ermöglichte, ein bösartiges Zertifikat mit demselben Hash wie ein echtes Microsoft-Zertifikat zu generieren. Git verwendet SHA-1 für Commit-Identifier. Eine SHA-1-Kollision könnte theoretisch ermöglichen, bösartige Commits mit denselben Hashes wie legitime zu erstellen. Git migriert aufgrund dieses Risikos zu SHA-256. Die Integrität von Dateien wird gefährdet. Wenn Sie eine Software-Prüfsumme gegen eine MD5-Prüfsumme verifizieren, könnte ein Angreifer bösartige Software mit demselben MD5-Hash erstellen. Deshalb verwenden seriöse Quellen SHA-256 für Download-Verifizierung.
Starke vs. gebrochene Algorithmen
MD5 ist vollständig gebrochen für Kollisionsresistenz. Mit moderner Hardware können Kollisionen in Sekunden gefunden werden. Forscher haben zehn PDF-Dateien mit demselben MD5-Hash aber unterschiedlichem Inhalt demonstriert. Verwenden Sie MD5 niemals, wo Kollisionsresistenz wichtig ist. SHA-1 ist praktisch gebrochen. Googles 2017-Kollision erforderte massiven Rechenaufwand, aber die Kosten sinken jährlich. Der Angriff, der 2017 110.000 $ kostete, ist jetzt wesentlich billiger. Betrachten Sie SHA-1 als unsicher für neue Anwendungen. SHA-256 bleibt sicher. Der beste bekannte Angriff ist nur geringfügig besser als Brute-Force. Mit 256-Bit-Ausgabe würde selbst das Erreichen von 2^128 Versuchen für eine Kollision mehr Energie erfordern, als das Sonnensystem enthält. SHA-512 bietet größere Sicherheitsmarge. Mit 512-Bit-Ausgabe sind Kollisionen noch unpraktischer. Es bietet Zukunftssicherheit gegen unvorhergesehene kryptanalytische Durchbrüche. Fazit: Verwenden Sie SHA-256 oder SHA-512 für sicherheitskritische Anwendungen. Verwenden Sie MD5/SHA-1 nur, wenn Sie explizit keine Kollisionsresistenz benötigen (z.B. Hash-Tabellen, nicht-kritische Prüfsummen).
Tool ausprobieren
Hash-Generator