Skip to content

Verfahren der Kryptographie, Teil 15: MD4, MD5, SHA und SHA-1 - alle unsicher!

Neuere Hashfunktionen als der bereits vorgestellte Algorithmus MD2 sind MD4 und MD5 sowie SHA und SHA-1. Wobei "Neuer" erst mal sehr relativ ist und außerdem nicht gleichzeitig auch "Sicher" bedeutet.

MD4 und MD5

MD4 wurde von Ronald L. Rivest 1990 mit dem Ziel entwickelt, einfach implementierbar zu sein und auf 32-Bit-Rechnern besonders effektiv zu laufen. MD4 wird in RFC 1320 beschrieben und erzeugt wie der in der vorherigen Folge vorgestellte MD2-Algorithmus einen 128-Bit-langen Hashwert. MD4 arbeitet mit 512-Bit-Blöcken, die beliebig lange Eingabe wird dafür vor Beginn der Komprimierung entsprechend aufgefüllt.

1995 wurde von Hans Dobbertin beschrieben, wie Kollisionen im Zeitraum unter einer Minute berechnet werden können (PDF). Bereits damit galt MD4 als gebrochen und sollte nicht mehr eingesetzt werden. 2004 wurden von Xiaoyun Wang, Dengguo Feng, Xuejia Lai and Hongbo Yu Angriffe präsentiert, die sich teilweise von Hand durchführen lassen. 2011 wurde MD4 von der Internet Engineering Task Force (IETF) in den "History Status" versetzt (RFC 6150). MD4 sollte daher nicht mehr verwendet werden.

Eine direkte Weiterentwicklung von MD4 ist der 1991 von Ronald L. Rivest entwickelte MD5-Algorithmus, beschrieben in RFC 1321. MD5 liefert wie MD4 einen 128-Bit-langen Hashwert und arbeitet ebenfalls mit 512-Bit-großen Blöcken.

2004 wurde von den eben schon erwähnten Xiaoyun Wang, Dengguo Feng, Xuejia Lai und Hongbo Yu ein praktischer Angriff beschrieben (im gleichen Paper wie der Angriff gegen MD4), womit MD5 akademisch ebenfalls als gebrochen gilt. Weitere Angriffe folgten, und 2011 hat die IETF den damals aktuellen Stand der Sicherheit von MD5 zusammengefasst (RFC 6151) und dabei festgestellt, dass der Algorithmus nicht mehr verwendet werden sollte, wenn die Kollisionsresistenz wichtig ist. Er ist dadurch für zum Beispiel digitale Signaturen nicht mehr geeignet. Und inzwischen sollte man ihn gar nicht mehr verwenden, denn es gab erfolgreiche Angriffe "in the wild":

2008 haben Alexander Sotirov, Marc Stevens, Jacob Appelbaum, Arjen Lenstra, David Molnar, Dag Arne Osvik und Benne de Weger über eine MD5-Kollision ein Intermediate-Zertifikat einer CA erzeugt, das alle wichtigen Internet-Browser als vertrauenswürdig einstufen. Mit diesem Zertifikat könnten sie sich für jede beliebige Domain ein gültiges SSL-Zertifikat ausstellen. Damit könnte sich ein Angreifer als Man-in-the-Middle in HTTPS-gesicherte Verbindungen einklinken und Daten ausspähen oder manipulieren, ohne dass der Browser den Benutzer warnt.

Zwei sichtbare Beweise hat Nat McHugh 2014 veröffentlicht: Er hat zwei Bilder von James Brown und Barry White so manipuliert, dass sie den gleichen MD5-Hash ergeben. Dazu hat er ungenutzte Datenbereiche in den beiden Bildern so lange verändert, bis das gewünschte Ergebnis erreicht war. Falls Sie das nicht für all zu schlimm halten, da man ja sofort sieht, dass die Bilder nicht identisch sind: Wie sieht es denn aus, wenn das gleiche zum Beispiel mit Programmdateien passiert wäre? Oder auch PHP-Skripten? Letzteres ist bereits passiert: Nat McHugh hat zwei auf den ersten Blick identische PHP-Skripte erstellt, die unterschiedliche Ausgaben erzeugen.

Falls Ihnen das noch nicht schlimm genug ist: Der ultimative Beweis dafür, dass MD5 nicht mehr verwendet werden sollte, wurde schon 2012 in Form des Super-Schädlings Flame geliefert. Der verbreitete sich unter anderen als gefälschtes Microsoft-Update. Microsoft hatte beim Signieren von Zertifikaten in einem Fall einen damals schon als unsicher geltenden MD5-Hash verwendet. Dadurch konnte die Flame-Entwickler mittels einer Kollisionsattacke ein falsches Zertifikat erstellen, das sich zum Signieren von Code eignet. Den damit signierten Schadcode akzeptierten die angegriffenen Windows-Rechner dann als gültiges Microsoft-Update.

Sie sehen also: Sie sollten MD5 nicht mehr benutzen. Jedenfalls nicht, wenn Ihnen etwas an der Sicherheit Ihrer Daten liegt. Es gibt sicherere Verfahren und damit keinen Grund, weiter auf MD5 zurückzugreifen.

SHA und SHA-1

Eine andere Weiterentwicklung von MD4 ist SHA (inzwischen als SHA-0 oder SHA0 bezeichnet), der 'secure hash algorithm'. SHA wurde 1993 als Secure Hash Standard vom US-amerikanischen 'National Institute of Standards and Technologies' (NIST) als FIPS PUB 180 veröffentlicht. SHA verarbeitet Nachrichten bis zu einer Länge von < 264 Bit mit einer Blockgröße von 512 Bit und liefert einen 160-Bit-langen Hashwert. Wegen eines Designfehlers wurde der Algorithmus 1995 korrigiert (Hinzufügen eines Links-Shifts). Die korrigierte Version wird als SHA-1 bezeichnet und ist in FIPS PUB 180-1 spezifiziert. 2002 wurden in FIPS PUB 180-2 (PDF) drei weitere Versionen veröffentlicht:

  • SHA-256 verarbeitet ebenso wie SHA-1 Nachrichten bis zu einer Länge von < 264 Bit mit einer Blockgröße von 512 Bit, liefert aber einem 256-Bit-langen Hashwert.
  • SHA-384 und SHA-512 verarbeiten Nachrichten bis zu einer Länge von < 2128 Bit mit einer Blockgröße von 1024 Bit und liefern einen 384-Bit- bzw. 512-Bit-langen Hashwert.

Der bei SHA-0 und SHA-1 im Vergleich zu MD4 und MD5 längere Hashwert erschwert Brute-Force-Angriffe zum Finden von Kollisionen. 2005 wurde von Xiaoyun Wang, Andrew Yao und Frances Yao jedoch ein erster Angriff auf SHA-1 veröffentlicht, der den Rechenaufwand für die Berechnung einer Kollision von ursprünglich 280 für einen Brute-Force-Angriff auf 263 Berechnungen reduziert. Im August 2006 wurde von Christophe De Cannière und Christian Rechberger ein Angriff veröffentlicht, bei dem ein Teil der gefälschten Nachricht frei gewählt werden kann. Im Oktober 2015 veröffentlichten Marc Stevens, Pierre Karpman und Thomas Peyrin eine Freestart-Kollision für die Kompressionsfunktion von SHA1: The SHAppening. Sie kamen zu dem Schluss, dass es aufgrund der kontinuierlichen Erhöhung der Rechenleistung sehr viel früher als bisher geschätzt möglich sein wird, die zur Fälschung von TLS-Zertifikaten nötigen Chosen-Prefix-Kollisionen zu finden. SHA-1 sollte daher nicht mehr verwendet werden. Die meisten Browser-Hersteller (konkret Microsoft, Google und Mozilla) haben bereits angekündigt, die Unterstützung von SHA-1-basierten SSL-Zertifikaten 2017 einzustellen.

In der nächsten Folge werden aktuelle und sichere Hashfunktionen vorgestellt. Außerdem geht es dann um die verschiedenen Angriffe auf Hashfunktionen, die oben teilweise schon erwähnt, aber bisher nicht erklärt wurden.

Carsten Eilers

Trackbacks

Dipl.-Inform. Carsten Eilers am : Verfahren der Kryptographie, Teil 16: SHA-2 ist noch für einige Jahre sicher

Vorschau anzeigen
Nachdem die weit verbreiteten Hashfunktionen MD4, MD5, SHA und SHA-1 alle Schwächen zeigten, war es Zeit für eine neue sichere Hashfunktion. Das war und ist die Funktion SHA-2. Die es so gar nicht gibt, denn es handelt sich um mehrere Fu

Dipl.-Inform. Carsten Eilers am : Verfahren der Kryptographie, Teil 18: Angriffe auf Hash-Funktionen

Vorschau anzeigen
Welche Hashfunktionen unsicher bzw. sicher sind habe ich bereits bei den jeweiligen Beschreibungen der Funktionen MD4, MD5, SHA und SHA-1 (alle unsicher), der SHA-2-Familie (ab 256 Bit Hashlänge, also SHA-256, noch einige Jahre sicher) und

Dipl.-Inform. Carsten Eilers am : Kryptographie - Ein Überblick

Vorschau anzeigen
Die Kryptographie ist ein ein sehr umfangreiches Themengebiet, und obwohl ich mich jetzt seit 30 Artikeln damit befasst habe sind längst nicht alle Themen vorgestellt worden. Aber zumindest die wichtigsten habe ich beschrieben, und damit soll e