MD4

Fra Wikipedia, den frie encyklopædi
Gå til: navigation, søg

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

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

Kompressionsfunktionen[redigér | redigér wikikode]

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 h=(a,b,c,d), hvor a,b,c,d er ord af hver 32 bits. Besked-blokken på 512 bits kaldes M=m_1,...,m_{16}. Disse 16 ord udvides til 48 ord w_1,...,w_{48}, som blot er tre forskellige permutationer af M. Opdateringen af tilstanden h sker over 48 trin, hvor w_i er input til trin i. De 48 trin kan opdeles i tre såkaldte runder af 16 trin hver. I hver runde benyttes et ord fra M altså præcist een gang. Odateringen (trin i) ser ud som følger:

a \gets (f_i(d,c,b)+a+w_i+k_i)\lll s_i,

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

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

f_i(x,y,z)=(x\land y)\lor (\neg x\land z) for i mellem 1 og 16,

f_i(x,y,z)=(x\land y)\lor (x\land z)\lor (y\land z) for i mellem 17 og 32, og

f_i(x,y,z)=x\oplus y\oplus z for i mellem 33 og 48.

Konstanterne k_i er (i hexadecimal) henholdsvis 0, 5a827999 og 6ed9eba1 i henholdsvis runde 1, 2 og 3. Rotationskonstanterne s_i 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 M kan findes i tabellen herunder. I række j findes permutationen i runde j.

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

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 u 0-bits, og til sidst tilføjes en 64-bits repræsentation af længden af den oprindelige besked. Her er u 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 | redigér wikikode]

Kompressionsfunktionen som beskrevet ovenfor 'spiser' 512 bits ad gangen. For at større beskeder kan behandles må kompressionsfunktionen kaldes flere gange. Lad H være kompressionsfunktionen med to inputs, den gamle tilstand og besked-blokken. En initiel tilstandsværdi (IV) h_0 er defineret som (67452301,10325476,98badcfe,efcdab89), skrevet i hexadecimal og opdelt i 32-bits ord. For hver 512-bits besked-blok m_1,...,m_t, udføres h_i=H(h_{i-1},m_i)+h_{i-1}, hvor additionen udføres modulo 232 på de fire tilstandsord enkeltvis (denne addition er strengt taget en del af kompressionsfunktionen). Den sidste tilstand h_t 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 | redigér wikikode]

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

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

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

  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.