MD4 (englisch Message-Digest Algorithm 4) ist eine 1990 von Ronald L. Rivest veröffentlichte kryptologische Hashfunktion. Sie wurde mit dem Anspruch entwickelt, auf 32-Bit-Rechnern besonders schnell zu laufen und gleichzeitig in der Implementierung einfach zu sein. Dabei sollten natürlich die grundlegenden Anforderungen an Hash-Funktionen erhalten bleiben. MD4 erzeugt einen Hashwert mit einer Länge von 128 Bit.

MD4
Entwickler Ronald L. Rivest
Veröffentlicht 1990
Länge des Hashwertes (Bit) 128
Runden 3
Beste bekannte Kryptoanalyse
Kollisionsangriff in 2 MD4-Operationen[1]
Eine MD4-Operation. MD4 besteht aus 48 dieser Operationen, gruppiert in 3 Runden mit je 16 Operationen. F ist eine runden­abhängige nichtlineare Funktion. Mi bezeichnet einen 32-Bit-Block der Eingabe und Ki eine rundenabhängige 32-Bit-Konstante. Addition bezeichnet die Addition modulo 232 und left shifts die bitweise Linksrotation um s Stellen, wobei s für jede Operation variiert.

Es zeigte sich jedoch bald, dass das Verfahren unsicher ist. Als besonders problematisch stellte sich die mangelnde Kollisionssicherheit heraus. Im Cryptobytes Journal der Firma RSA wurde eine Methode veröffentlicht, welche innerhalb einer Stunde zwei bis auf ein Zeichen identische Nachrichten erzeugen konnte, die denselben Hashwert ergaben. Rivest selbst bestätigte die Unsicherheit im RFC 1321: The MD5 Message-Digest Algorithm,[2] so dass selbst RSA vom Einsatz dieses Message-Digest abrät. MD4 wurde als Public Domain lizenziert, worauf wohl zurückzuführen ist, dass das verwendete Prinzip zur Basis weiterer Hash-Funktionen geworden ist.

MD4-Hashes

Bearbeiten

Die 128 Bit langen MD4-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 MD4-Hash:

 md4("Franz jagt im komplett verwahrlosten Taxi quer durch Bayern") =
 3270fd28f1b28cd219bb946bd372fc00

Eine kleine Änderung der Nachricht erzeugt fast sicher einen komplett anderen Hash. Mit Frank statt Franz ergibt sich:

 md4("Frank jagt im komplett verwahrlosten Taxi quer durch Bayern") =
 c95704f5b2928c67a0970a576cebc589

Der Hash einer Zeichenfolge der Länge Null ist:

 md4("") = 31d6cfe0d16ae931b73c59d7e0c089c0

Beispiel für eine Kollision:

839c7a4d7a92cb5678a5d5b9eea5a7573c8a74deb366c3dc20a083b69f5d2a3bb3719dc69891e9f95e809fd7e8b23ba6318edd45e51fe39708bf9427e9c3e8b9
839c7a4d7a92cbd678a5d529eea5a7573c8a74deb366c3dc20a083b69f5d2a3bb3719dc69891e9f95e809fd7e8b23ba6318edc45e51fe39708bf9427e9c3e8b9
              ^       ^                                                                              ^

Diese Zeichenfolgen unterscheiden sich an den mit '^' markierten Stellen. Zwei hex-Ziffern definieren jeweils ein Byte der 64 Byte langen MD4-Eingabe. Sie liefern beide den Hashwert:

4d7e6a1defa93d2dde05b45d864c429b

Siehe auch

Bearbeiten
Bearbeiten
  • RFC 1320 – The MD4 Message-Digest Algorithm. April 1992 (englisch).

Einzelnachweise

Bearbeiten
  1. Yu Sasaki, Lei Wang, Kazuo Ohta, Noboru Kunihiro: New Message Difference for MD4. In: FSE 2007 (= Lecture Notes in Computer Science. Band 4593). Springer, 2007, S. 329–348, doi:10.1007/978-3-540-74619-5_21 (iacr.org [PDF]).
  2. RFC 1321 – The MD5 Message-Digest Algorithm. April 1992 (englisch).