MD5

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Diagrama unei operații MD5. Algoritmul constă din 64 din aceste operații, grupate în grupuri de 16. În diagramă, „F” este o funcție neliniară (una este utilizată pentru fiecare pas), „M i ” indică un bloc de 32 de biți al mesajului , „K i ” indică o constantă de 32 de biți, diferită pentru fiecare operație.

MD5 este o funcție hash criptografică dezvoltată de Ronald Rivest în 1991 și standardizată cu RFC 1321 .

Este o funcție unidirecțională diferită de criptare și criptare, deoarece este ireversibilă.

Această funcție ia ca intrare un șir de lungime arbitrară și scoate altul la 128 de biți . Procesul se desfășoară foarte repede, iar ieșirea (cunoscută și sub numele de „MD5 Checksum ” sau „MD5 Hash”) returnată este de așa natură încât este foarte puțin probabil să se obțină aceeași valoare hash de ieșire cu două șiruri de intrare diferite. Până în prezent, există multe resurse online disponibile care au șanse mari să poată decripta cuvintele codificate obișnuite.

Până în prezent, disponibilitatea unor algoritmi eficienți capabili să genereze șiruri de coliziune (adică care generează aceeași valoare hash) într-un timp rezonabil a făcut ca MD5 să fie nefavorabil în comparație cu alți algoritmi de hash (a se vedea WHIRLPOOL , SHA-256 sau RIPEMD-160 ), deși difuzia este încă foarte răspândită (credeți că cea mai frecventă verificare a integrității fișierelor se bazează pe MD5).

Istorie și criptanaliză

Mesajele sunt o serie de algoritmi proiectați de profesorul Ronald Rivest la MIT . Când studiile analitice (ale criptografului german Hans Dobbertin) au indicat că predecesorul MD5, MD4 , era nesigur, MD5 a fost proiectat în 1991 ca înlocuitor.

În 1993 Der Boer și Bosselaers au obținut un prim rezultat, deși limitat, găsind o „pseudo-coliziune” a algoritmului MD5; adică doi vectori de inițializare I și J diferiți cu 4 biți de diferență astfel încât:

MD5compress ( I , X ) = MD5compress ( J , X )

În 1996 Dobbertin a anunțat o coliziune a funcției de compresie MD5. Deși nu a reprezentat un atac asupra funcției hash MD5 complete, a fost suficient pentru mulți criptografi să recomande trecerea la un înlocuitor, cum ar fi WHIRLPOOL , SHA-1 sau RIPEMD-160 .

Dimensiunea hash de 128 de biți a fost suficient de mică pentru a contempla un atac de ziua de naștere . În martie 2004 , proiectul MD5CRK distribuit a început cu scopul de a demonstra că MD5 era un algoritm nesigur, găsind o coliziune, folosind un atac de ziua de naștere.

MD5CRK a durat până când a fost găsită o coliziune la 17 august 2004 de Xiaoyun Wang , Dengguo Feng, Xuejia Lai și Hongbo Yu [1] . Atacul lor asupra unui cluster IBM p690 a durat doar o oră.

La 1 martie 2005 , Arjen Lenstra , Xiaoyun Wang și Benne de Weger au demonstrat [2] construirea a două certificate X.509 cu chei publice diferite și același hash MD5, efectiv o coliziune. Construcția a funcționat atât pentru cheile private, cât și pentru cele publice. După câteva zile, Vlastimil Klima a descris [3] un algoritm îmbunătățit, capabil să creeze coliziuni MD5 în câteva ore pe un singur computer. La 18 martie 2006 , Klima a publicat un algoritm [4] care ar putea găsi o coliziune într-un minut pe un singur computer, folosind o metodă pe care a numit-o „ tunelare ”.

Aplicarea practică a MD5

Criptarea utilizând algoritmul MD5 se aplică în toate sectoarele tehnologiei informației care funcționează cu suportul semnăturilor digitale sau care, în orice caz, procesează date sensibile: De exemplu, este utilizat pentru a verifica dacă un schimb de date a avut loc fără pierderi, pur și simplu prin compararea șirului produs de fișierul trimis cu cel produs de fișierul primit. Cu aceeași metodă puteți verifica dacă conținutul unui fișier s-a schimbat (funcție utilizată de motoarele de căutare pentru a înțelege dacă o pagină trebuie reindexată). Este, de asemenea, popular ca suport pentru autentificarea utilizatorului prin limbaje de scriptare pe partea de server web (în special PHP ): la înregistrarea unui utilizator pe un portal de internet, parola aleasă în timpul procesului va fi criptată prin MD5 și semnătura sa digitală va fi să fie stocate în baza de date (sau în orice container de date). Ulterior, în timpul autentificării, parola introdusă de utilizator va suferi același tratament și va fi comparată cu copia deținută de server , pentru a fi siguri de autenticitatea autentificării.

Exemplu de aplicație în PHP

 <? php
 
  // Aloc unei variabile șirul pe care vreau să îl codez cu algoritmul MD5
  $ my_var = 'Acesta este șirul pe care vreau să-l codez' ;
 
  // Imprim pe ecran codificarea MD5 a șirului stocat în variabilă
  ecou md5 ( $ my_var );
 
?>

Acest script PHP atribuie mai întâi șirul pe care dorim să îl codificăm unei variabile numite $ my_var (va fi intrarea algoritmului). Ulterior (prin utilizarea ecoului , care afișează un șir) imprimă pe ecran valoarea acelei variabile în MD5 (adică ieșirea algoritmului). Rezumatul mesajului produs în acest exemplu va fi 88f2dff0f2029570a20c4d50167286b1 , care corespunde șirului stocat în variabilă.

Cu toate acestea, trebuie să vă informăm că, deși utilizarea md5 este destul de sigură, este de asemenea adevărat că pe net există baze de date bogate în cuvinte în fiecare limbă înregistrate conform formei lor codificate în md5. Aceste liste sunt actualizate zilnic și sunt adesea utile pentru atacurile cu forță brută. Pentru a evita și acest posibil atac, programatorii ar trebui să codeze rezultatul unei codificări md5 anterioare în md5, ca în exemplul de mai jos

 <? php
 
  // MD5 este format din rezultatul altui MD5
  $ my_var = " parola mea " ;
  ecou md5 ( md5 ( $ my_var ));
 
?>

Pentru a depăși această problemă, ar trebui să păstrăm o bază de date suplimentară de două ori mai mare pentru a stoca codificările md5 ale tuturor codificărilor md5 ale tuturor cuvintelor. În plus, numărul de codificări este teoretic nelimitat:

 <? php
  ecou md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( md5 ( "parola_ mea" )))))))))))))))
?>

O altă metodă obișnuită de a face hash-uri MD5 rezistente la vocabular sau atacuri de forță brută este să adăugați „sare” la șirul care urmează să fie criptat, care este un alt șir.

 <? php
  $ sare = "NaCl" ;
  echo md5 ( $ salt . "parola_mea" );
?>

Cu toate acestea, această metodă este, la fel ca toate hashurile MD5, sensibilă la atacurile de căutare a coliziunilor.

Exemple

Hash-ul MD5 pe 128 de biți (16 octeți) (numit și rezumatul mesajului ) este reprezentat ca o secvență de 32 de cifre hexazecimale . Următorul exemplu arată un șir ASCII de 47 de octeți și hash-ul MD5 corespunzător:

 MD5 („Cantami o diva pelidei Ahile mânia fatală”)
  = b4dd7f0b0ca6c25dd46cc096e45158eb

O mică modificare a mesajului (cel mai probabil) va avea ca rezultat un hash rezultat foarte diferit, de exemplu, înlocuirea Cantami Contami cu randamentele Contami :

 MD5 („C o ntami sau diva pelisului Ahile mânia fatală”)
  = f065b51db9c592bf6ecf66a76e39f8d0

Alte exemple:

 MD5 („Hello world”)
  = 3e25960a79dbc69b674cd4ec67a72c62
MD5 („md5”)
  = 1bc29b36f623ba82aaf6724fd3b16718

Hash-ul corespunzător șirului gol este:

 MD5 ("")
  = d41d8cd98f00b204e9800998ecf8427e

Linux

Metoda de control md5 este utilizată de multe distribuții Linux : este publicat și codul hash al fiecărei imagini ISO, pentru a permite utilizatorului să verifice integritatea fișierului ISO în sine; acest lucru se face și sub sistemele de operare ale familiei Microsoft Windows .

Notă

Elemente conexe

linkuri externe