MD5 funcționează fundamental diferit de CRC.
Nu sunt familiarizat cu algoritmii CRC, cu excepția faptului că știu că aceștia oferă protecție de bază a integrității de mare debit.
MD5 (împreună cu altele din familia de funcții hash criptografice Merkle-Daamgard, cum ar fi SHA-1, SHA-256 etc.) are aproximativ 4 straturi:
Construcția Merkle-Daamgard: care constă din
Umplutură de mesaje compatibilă cu MD - pentru a vă asigura că mesajele de lungime diferită au ca rezultat secvențe diferite de blocuri de mesaje. Mesajele diferite de aceeași lungime nu reprezintă principala preocupare pentru umplutura MD-compilant.
O serie de iterații ale funcției de compresie $C(h,m)$, Unde $h$ este rezumatul din iterația anterioară a funcției de compresie (sau vectorul de inițializare dacă aceasta este iterația inițială); și $m$ este blocul de mesaje pentru iterația curentă.
Construcția funcției de compresie din blockciphers.
Construcția Davies-Meyers este cea utilizată în familia MD5, SHA-1 și SHA-2. Acesta criptează digest-ul cu blocul de mesaje ca cheie, apoi adaugă sau xors digest-ul la noul bloc de ieșire pentru a face funcția de compresie Într-un fel.
Construcția blockcipher.
Există 2 paradigme majore - a) Rețeaua de substituție-permutare (SPN), b) Rețeaua Feistel. Familia MD5, SHA-1 și SHA-2 îl utilizează pe acesta din urmă.
O rețea Feistal modifică iterativ o jumătate din blocul de cifrare cu o valoare calculată folosind o funcție rotundă din cealaltă jumătate a blocului - calculul funcției rotunde implică subcheia derivată din cheia principală, care în cazul funcțiilor hash, este bloc de mesaje curente.
Construcția funcției rotunde.
Principala preocupare a Feistal Network este de a crește confuzia și difuzia prin aplicarea iterativă a funcției rotunde, iar funcția rotundă trebuie să ofere o anumită aleatorie minimă necesară.
- Paradigma ARX (adunare aritmetică, rotație/schimbări și operații xor) este o alegere populară.
- Polinomul binar este altul.