MD4 er en kryptografisk hashfunktion designet af R. Rivest i 1990.[1] 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 redigér

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

Kompressionsfunktionen redigér

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  .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16
1 9 5 13 3 11 7 15 2 10 6 14 4 12 8 16

Padding redigér

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 redigér

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 redigér

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 redigér

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 redigér

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.[2] S. Vaudenay beskrev en metode til at finde kollisioner i en variant hvor sidste runde er udeladt.[3] Det første succesfulde angreb på den egentlige MD4-algoritme blev publiceret i 1996 af H. Dobbertin, som fandt kollisioner på få sekunder.[4] Senere er en endnu hurtigere metode blevet beskrevet af X. Wang et al.[5] På baggrund af disse angreb må MD4 betragtes som uegnet til brug i applikationer som kræver kryptografisk sikkerhed.

Referencer redigér

  1. ^ R. L. Rivest. The MD4 Message Digest Algorithm. In A. Menezes and S. A. Vanstone, editors, Advances in Cryptology – CRYPTO '90, Proceedings, volume 537 of Lecture Notes in Computer Science, pages 303-311. Springer, 1991.
  2. ^ B. den Boer and A. Bosselaers. An Attack on the Last Two Rounds of MD4. In J. Feigenbaum, editor, Advances in Cryptology – CRYPTO '91, Proceedings, volume 576 of Lecture Notes in Computer Science, pages 194-203. Springer, 1992.
  3. ^ S. Vaudenay. On the Need for Multipermutations: Cryptanalysis of MD4 and SAFER. In B. Preneel, editor, Fast Software Encryption 1994, Proceedings, volume 1008 of Lecture Notes in Computer Science, pages 286-297. Springer, 1995.
  4. ^ H. Dobbertin. Cryptanalysis of MD4. In D. Gollmann, editor, Fast Software Encryption 1996, Proceedings, volume 1039 of Lecture Notes in Computer Science, pages 53-69. Springer, 1996.
  5. ^ X. Wang, X. Lai, D. Feng, H. Chen, and X. Yu. Cryptanalysis of the Hash Functions MD4 and RIPEMD. In R. Cramer, editor, Advances in Cryptology – EUROCRYPT 2005, Proceedings, volume 3494 of Lecture Notes in Computer Science, pages 1-18. Springer, 2005.