Message-Digest Algorithm 5 (MD5) ist eine weit verbreitete kryptographische Hashfunktion, die aus einer beliebigen Nachricht einen 128-Bit-Hashwert erzeugt. Dies erlaubt beispielsweise die leichte Überprüfung eines Downloads auf Korrektheit. MD5 wurde 1991 von Ronald L. Rivest entwickelt. Sie gilt inzwischen nicht mehr als sicher, da es mit überschaubarem Aufwand möglich ist, unterschiedliche Nachrichten zu erzeugen, die den gleichen MD5-Hashwert aufweisen.
Geschichte
MD5 ist ein Vertreter aus einer Reihe von (kryptologischen) Hashfunktionen, die von Ronald L. Rivest am Massachusetts Institute of Technology entwickelt wurden. Als Analysen ergaben, dass der Vorgänger MD4 wahrscheinlich unsicher ist, wurde MD5 1991 als sicherer Ersatz entwickelt.
Bereits 1993 veröffentlichten Bert de Boer und Antoon Bosselaers einen Algorithmus zum Erzeugen von Pseudokollisionen auf die Kompressionsfunktion von MD5: zwei unterschiedliche Initialisierungskonstanten ergeben für dieselbe Nachricht denselben Hashwert.
1996 fand Hans Dobbertin eine Kollision für zwei unterschiedliche Nachrichten. Es handelt sich dabei um eine echte Kollision, also zwei speziell präparierte Nachrichten, die sich unterscheiden, aber dennoch denselben Hashwert ergeben. Allerdings verwendete Dobbertin eine modifizierte MD5-Variante, in der andere Initialisierungskonstanten (für A, B, C, D) verwendet werden.
Auch war es nicht möglich, den Inhalt der kollidierenden Nachrichten vorzugeben. Somit waren praktische Angriffe auf MD5 zwar nicht möglich, aber die Schwächen von MD5 wurden deutlich, so dass Kryptologen zu einem Umstieg auf andere Hashfunktionen rieten.
2004 gelang es einer chinesischen Forschergruppe um Xiaoyun Wang, Kollisionen systematisch zu erzeugen, wenn der Anfang der Nachricht beliebig gewählt werden kann, aber bei beiden Nachrichten identisch ist (common-prefix collision). Zu diesem Anfang der Nachricht können mit vertretbarem Aufwand zwei verschiedene Fortsetzungen der Nachricht errechnet werden, die zum selben Hashwert führen.
Diese Kollision bleibt auch erhalten, wenn an beide Nachrichten (jeweils bestehend aus dem gleichen Anfang und der einen bzw. der anderen Fortsetzung) das gleiche Suffix angehängt wird. Dieser Angriff wurde von Wang und anderen Forschergruppen verbessert, sodass ein PC heute innerhalb von Sekunden eine MD5-Kollision berechnen kann.
Der Aufwand zum Finden einer Kollision ist größer, wenn der Anfang der beiden Nachrichten abweicht (chosen-prefix collision). 2008 gelang es einem Team um Marc Stevens und Alexander Sotirov einen solchen Kollisionsangriff durchzuführen, um ein gefälschtes und als vertrauenswürdig anerkanntes CA-Zertifikat zu erstellen. Mit diesem waren sie prinzipiell in der Lage, für jede beliebige URL ein SSL-Zertifikat zu fälschen und damit die Sicherheitsmechanismen von HTTPS im Web auszuhebeln.
Die Arbeit wurde erstmals im Dezember 2008 auf dem 25. Chaos Communication Congress vorgestellt und einige Monate später in einem wissenschaftlichen Artikel veröffentlicht. Zur Kollisionsberechnung benutzten sie einen Cluster von 200 Sony PlayStation 3.
Die 2012 entdeckte Windows-Malware Flame verwendet ein gefälschtes Code-Signing-Zertifikat, das auf einer neuen und bislang unbekannten Variante einer Chosen-Prefix-Kollision für MD5 basiert.
Preimage-Angriffe können auch mit den genannten Methoden noch nicht in sinnvoller Zeit durchgeführt werden. Dadurch ist es weiterhin unmöglich, nachträglich ein gefälschtes Dokument zu erstellen, das zu einem bestimmten, mit MD5 erzeugten Zertifikat passt. Es ist jedoch durch Kollisionsangriffe in vielen Fällen möglich, zwei Dokumente zu erstellen, die denselben MD5-Hashwert ergeben, dann das erste, legitime Dokument signieren zu lassen, und anschließend dieses durch das zweite, gefälschte Dokument auszutauschen. Vor diesem Hintergrund ist von einer Weiterverwendung von MD5 abzuraten.
MD5-Hashes
Die 128 Bit langen MD5-Hashes (englisch auch „message-digests“) werden normalerweise als 32-stellige Hexadezimalzahl notiert. Folgendes Beispiel zeigt eine 59 Byte lange ASCII-Eingabe und den zugehörigen MD5-Hash:
md5("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") = a3cca2b2aa1e3b5b3b5aad99a8529074
Eine kleine Änderung des Textes erzeugt einen komplett anderen Hash. Beispielsweise ergibt sich mit Frank statt Franz (nur ein Buchstabe verändert):
md5("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") = 7e716d0e702df0505fc72e2b89467910
Der Hash einer Zeichenfolge der Länge null ist:
md5("") = d41d8cd98f00b204e9800998ecf8427e
Verwendung und Verfügbarkeit
Unter den meisten Linux-Distributionen wird das Programm md5sum als Bestandteil der coreutils standardmäßig installiert. Auf BSD-abgeleiteten Betriebssystemen wie Mac OS X gibt es das Kommando md5. Auf vielen anderen Unix-Derivaten kann man sich mit dem meist installierten Programm OpenSSL behelfen. Microsoft-Windows-Betriebssysteme verfügen ab Werk nicht über ein Programm zur Berechnung von MD5-Hashes, Microsoft stellt jedoch das Programm File Checksum Integrity Verifier (FCIV.EXE) kostenlos bereit.
Überprüfung des MD5-Hashwerts
Nach erfolgreichem Download einer Datei oder eines Ordners mit Dateien wird häufig in einer weiteren Datei der dazugehörige MD5-Hashwert zur Verfügung gestellt. Über ein Prüfprogramm kann dann wiederum der Hashwert aus der heruntergeladenen Datei berechnet werden, der dann mit dem zur Verfügung gestellten Hashwert verglichen wird.
Sind beide Hashwerte identisch, ist die Integrität der heruntergeladenen Datei bestätigt. Demnach traten beim Download der Datei keine Fehler auf. Dies bietet keine Sicherheit hinsichtlich einer gezielten Datenmanipulation durch einen Angreifer (Man-in-the-middle-Angriff), da der Angreifer auch die Übertragung des MD5-Hashwertes manipulieren kann.
Sicherheit
MD5 ist weit verbreitet und wurde ursprünglich als kryptografisch sicher angesehen. Bereits 1994 entdeckten Bert den Boer und Antoon Bosselaers Pseudokollisionen in MD5. Grundlegende Arbeit, um echte Kollisionen zu finden, leistete auch Hans Dobbertin (damals am BSI), der bereits den erfolgreichen Angriff auf MD4 entwickelt hatte und die dabei verwendeten Techniken auf MD5 übertrug.
Kollisionsresistenz
Im August 2004 fand ein chinesisches Wissenschaftlerteam die erste Kollision in der vollständigen MD5-Funktion. Auf einem IBM-P690-Cluster benötigte ihr erster Angriff eine Stunde, davon ausgehend ließen sich weitere Kollisionen innerhalb von maximal fünf Minuten finden. Kurz nach der Veröffentlichung der Arbeit der Chinesen wurde MD5CRK eingestellt, das versuchte, Kollisionen per Brute-Force-Methode zu finden.
Kurzbeschreibung: Ein Eingabeblock (512 Bit) wird modifiziert, wobei versucht wird, eine bestimmte Differenz zum Original im Ausgang zu erzeugen. Durch eine aufwändige Analyse des Algorithmus kann die Anzahl der unbekannten Bits so weit verringert werden, dass dies rechnerisch gelingt. Im nächsten 512-Bit-Block wird mit den gleichen Methoden versucht, die Differenz wieder aufzuheben. Die Fälschung benötigt also einen zusammenhängenden Datenblock von 1024 Bit = 128 Byte, was den Einsatz stark einschränkt.
Inzwischen sind die Kollisionsangriffe so weit fortgeschritten, dass eine weitere Nutzung von MD5, insbesondere in solchen Szenarien, in denen der Nutzer nicht die zu signierenden Dateien komplett kontrolliert, abzulehnen ist. Ein 2009 durchgeführter Test des Computermagazins c’t unter Verwendung von GPGPU ermöglicht es einem etwa ein Jahr alten Highend-Spiele-PC mit zwei Nvidia GeForce 9800 GX2 (insgesamt vier Grafikprozessoren), in knapp 35 Minuten eine Kollision zu finden.
Einwegeigenschaft
Eine andere Angriffsmethode stellen Regenbogentabellen dar. In diesen Tabellen sind Zeichenketten mit den zugehörigen MD5-Hashwerten gespeichert. Der Angreifer durchsucht diese Tabellen nach dem vorgegebenen Hashwert und kann dann passende Zeichenketten auslesen. Dieser Angriff kann vor allem eingesetzt werden, um Passwörter zu ermitteln, die als MD5-Hashes gespeichert sind. Die dazu notwendigen Regenbogentabellen sind jedoch sehr groß und es bedarf eines hohen Rechenaufwands, um sie zu erstellen.
Deshalb ist dieser Angriff im Allgemeinen nur bei kurzen Passwörtern möglich. Für diesen Fall existieren vorberechnete Regenbogentabellen, bei denen zumindest der Rechenaufwand zum Erstellen der Liste entfällt. Die Verwendung eines Salt, also eines zufälligen nicht vorhersehbaren Wertes, welcher an den Klartext angefügt wird, macht die Effektivität von vorberechneten Regenbogentabellen jedoch zunichte.
Zusammenfassung
Kollisionen zu finden bedeutet, zwei unterschiedliche Texte M und M‘ mit hash(M) = hash(M‘) zu finden. Bei einem Preimage-Angriff sucht man zu vorgegebenen M bzw. hash(M) ein M‘, so dass hash(M) = hash(M‘). Da man beim Preimage-Angriff nur M‘ kontrolliert, nicht auch M, ist dieser viel schwieriger.
Derzeit ist MD5 nur bezüglich der Kollisions-Angriffe gebrochen. Deswegen besteht noch keine akute Gefahr für Passwörter, die als MD5-Hash gespeichert wurden. Diese Kollisionen sind eher eine Gefahr für digitale Signaturen. Zum sicheren Speichern von Passwörtern sollten aber auch Algorithmen in Betracht gezogen werden, die speziell für diesen Zweck entwickelt wurden, z. B. bcrypt. Da noch kein erster Preimage-Angriff bekannt ist, sind in der Vergangenheit signierte MD5-Hashes aktuell (2013) noch sicher.
Quelle: Wikipedia (https://de.wikipedia.org/wiki/Message-Digest_Algorithm_5)