MD4

MD4 er en kryptografisk hashfunktion designet af R. Rivest i 1990. Som andre lignende funktioner anvendes MD4 til beskyttelse af elektroniske data, f.eks. i forbindelse med transmissioner over åbne netværk. 

Funktionen tager som input beskeder af størrelse op til 264 bits og returnerer en 128-bits hash-værdi. Allerede i 1991 blev det første angreb på en reduceret udgave af MD4 publiceret. Dette medførte at designeren samme år publicerede en ny, forstærket udgave, kaldet MD5.

Beskrivelse 
MD4 opererer med en 128-bits tilstand, som iterativt opdateres af en 512-bits besked-blok i det, der kaldes 'kompressionsfunktionen'.

Kompressionsfunktionen 
Kompressionsfunktionen tager en tilstand på 128 bits og en beskedblok på 512 bits, og returnerer en ny tilstand på 128 bits. Den kan beskrives på følgende måde: Lad input-tilstanden være , hvor  er ord af hver 32 bits. Besked-blokken på 512 bits kaldes . Disse 16 ord udvides til 48 ord , som blot er tre forskellige permutationer af . Opdateringen af tilstanden  sker over 48 trin, hvor  er input til trin . De 48 trin kan opdeles i tre såkaldte runder af 16 trin hver. I hver runde benyttes et ord fra  altså præcist een gang. 
Odateringen (trin ) ser ud som følger:

hvor  er en funktion som er unik for hver runde,  er en 32-bits konstant som er unik for hver runde,  er en værdi mellem 0 og 31 som skifter for hvert trin,  betyder addition modulo 232, og  betyder  roteret bitvist  pladser til venstre. Den nævnte operation efterfølges af en flytning af ord således at  får værdien af ,  får værdien af ,  får værdien af , og  får den gamle værdi af . I en praktisk implementation sker denne flytning implicit.

Funktionerne  er bitvise funktioner. De er defineret som følger:

 for  mellem 1 og 16,

 for  mellem 17 og 32, og

 for  mellem 33 og 48.

Konstanterne  er (i hexadecimal) henholdsvis 0, 5a827999 og 6ed9eba1 i henholdsvis runde 1, 2 og 3. Rotationskonstanterne  er

3, 7, 11, 19, 3, 7, ... i runde 1,

3, 5, 9, 13, 3, 5, ... i runde 2, og

3, 9, 11, 15, 3, 9, ... i runde 3.

Permutationerne af  kan findes i tabellen herunder. I række  findes permutationen i runde .

Padding 
Da MD4 accepterer beskeder af næsten vilkårlig længde, og da kompressionsfunktionen som beskrevet ovenfor arbejder med 512-bits blokke ad gangen, er der defineret en metode til at udvide enhver besked til en længde som er et multiplum af 512 bits (dette kaldes 'padding'). Dette gøres ved først at tilføje bit'en 1, dernæst tilføjes  0-bits, og til sidst tilføjes en 64-bits repræsentation af længden af den oprindelige besked. Her er  valgt netop således, at den samlede længde af den 'paddede' besked er et multiplum af 512 bits. Denne padding-regel sikrer, at beskeder som er forskellige inden padding, også er forskellige efter padding.

Iteration 
Kompressionsfunktionen som beskrevet ovenfor 'spiser' 512 bits ad gangen. For at større beskeder kan behandles må kompressionsfunktionen kaldes flere gange. Lad  være kompressionsfunktionen med to inputs, den gamle tilstand og besked-blokken. En initiel tilstandsværdi (IV)  er defineret som (67452301,10325476,98badcfe,efcdab89), skrevet i hexadecimal og opdelt i 32-bits ord. For hver 512-bits besked-blok , udføres , hvor additionen udføres modulo 232 på de fire tilstandsord enkeltvis (denne addition er strengt taget en del af kompressionsfunktionen). Den sidste tilstand  er hash-værdien af beskeden.

Denne iterative brug af kompressionsfunktionen, samt padding med beskedens oprindelige længde, kaldes Merkle-Damgård-konstruktionen.

Eksempler 
Nogle eksempler på hash-værdier (angivet i hexadecimal) af korte tekststrenge er givet herunder.

MD4("") = 31d6cfe0d16ae931b73c59d7e0c089c0
MD4("0123456789") = a695ea9f14a89c4e82ca5cf52a28d45d
MD4("Wikipedia") = e2a059b14fc07a3c78c7b74027a323ec

Enhver ændring af beskeden medfører at gennemsnitligt ca. 64 bits af hash-værdien ændres. Eksempel:
MD4("Wikipedib") = 2cf896ca02711a90ef58ea10878a32ee

Betydning 
MD4 har dannet baggrund for en lang række ofte anvendte hashfunktioner. Den umiddelbare efterfølger MD5 er et godt eksempel, men også SHA-familien, designet og standardiseret af de amerikanske myndigheder, er baseret på MD4. Herudover er den europæiske RIPEMD en variant af MD4. Som følge af en lang række angreb på stort set samtlige hashfunktioner baseret på MD4 er der dog opstået usikkerhed om hvorvidt det grundlæggende design er fornuftigt.

Angreb 
De første angreb på MD4 så dagens lys allerede året efter hashfunktionen blev publiceret. B. den Boer og A. Bosselaers fandt en metode til at finde kollisioner (dvs. to forskellige beskeder med samme hash-værdi) i en variant af MD4, hvor kun de sidste to runder er medtaget. S. Vaudenay beskrev en metode til at finde kollisioner i en variant hvor sidste runde er udeladt. Det første succesfulde angreb på den egentlige MD4-algoritme blev publiceret i 1996 af H. Dobbertin, som fandt kollisioner på få sekunder. Senere er en endnu hurtigere metode blevet beskrevet af X. Wang et al. På baggrund af disse angreb må MD4 betragtes som uegnet til brug i applikationer som kræver kryptografisk sikkerhed.

Referencer 

Fejldetektering og korrektion
Kryptografi