G07 MD5-Hash Kollision

Auf dieser Seite zeige ich Euch (hoffentlich) sehr eindrucksvoll, was es mit einer „Kollision“ bei der unsicheren Hashroutine MD5 auf sich hat. Im Ergebnis dürft Ihr Euch bei der Nutzung von fremden Ressourcen (z.B. einem heruntergeladenen Programm oder einer PDF-Datei) niemals auf den MD5-Hashwert verlassen, denn er kann so geschickt manipuliert sein das Ihr eine andere (vielleicht bösartige) Datei untergeschoben bekommt.

In unserem ersten Beispiel ladet Ihr Euch die beiden Dateien g07a_hello.exe und g07a_erase.exe herunter. Beide Dateien sind harmlos, geben aber ganz andere Informationen aus:

g07a_hello.exe:

g07a_erase.exe:

Nun starten wir unsere MD5-Berechnung und als Vergleich dazu die Berechnung des SHA-256-Hashwertes. Es handelt sich um die zusammengeführten Programme F01 MD5 Hash von einer Datei und F03 SHA-256 und SHA-512 Hash von einer Datei und im Ergebnis zeigen sie eindrucksvoll, das die MD5-Hashwerte für beide Dateien identisch sind (Zeile 8), aber die SHA-256-Hashwerte nicht gleich sind (Zeile 16). Ich zeige hier zuerst das erschreckende Konsolenergebnis und dann später dann den Quellcode:

Beide Demoprogramme wurden nicht von mir erstellt, sondern von Peter Selinger, der auf seiner Webseite http://cryptography.hyperlink.cz/2004/collisions.htm weitere Erläuterungen und auch ein Programm bereithält, mit dem eine solche Kollision mutwillig erzeugt werden kann.

Das zweite Beispiel zeigt Euch anhand von 2 unterschiedlichen Bildern, das auch dort durch geschickte Manipulation der gleiche MD5-Hashwert erzeugt wird. Ladet Euch die beiden Bilder
g07b_plane.jpg und g07b_ship.jpg herunter und lasst Sie durch das MD5-Haspprogramm laufen.

Die hier gezeigten Bilder sind verkleinerte Versionen und damit funktioniert das Beispiel nicht.
g07b_plane.jpg:

g07b_ship.jpg:

Auch hier ist die Konsolenausgabe eindeutig: gleicher MD5-Hashwert, unterschiedlicher SHA-256-Hashwert:

Die beiden Bilder habe nicht ich sondern Nat McHugh erstellt; Einzelheiten findet ihr auf seiner Webseite https://natmchugh.blogspot.com/2015/02/create-your-own-md5-collisions.html.

Den Quellcode für beide Beispiele (unterscheiden sich nur durch die Dateinamen der einzulesenden Dateien) findet Ihr im Github-Archiv, hier nur der Quellcode des ersten Beispiels:

Alle Quellcodes zu den Unsicherheiten findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/G-Unsicherheit. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 08.12.2019