Ce este o funcție hash?

O funcție hash ia o valoare de intrare (de exemplu, un șir) și returnează o valoare de lungime fixă. Un ideal funcția hash are următoarele proprietăți:

  • este foarte rapid
  • poate returna o gamă enormă de valori hash
  • generează un hash unic pentru fiecare intrare unică (fără coliziuni)
  • generează valori hash diferite pentru valori de intrare similare
  • valorile de hash generate nu au un model distinctiv în ele distribuție

Desigur, nu există nicio funcție de hash ideal, dar fiecare își propune să funcționeze cât mai aproape de ideal. Având în vedere că (majoritatea) funcțiilor hash returnează valori de lungime fixă ​​și, prin urmare, gama de valori este limitată, această constrângere poate fi practic ignorată. Numărul de valori posibile care pot fi returnate de o funcție hash de 256 de biți, de exemplu, este aproximativ același cu numărul de atomii din univers.

În mod ideal, o funcție hash returnează practic nr coliziuni – adică nu există două intrări diferite care generează aceeași valoare hash. Acest lucru este deosebit de important pentru funcții hash criptografice: coliziunile hash sunt considerate a vulnerabilitate.

În cele din urmă, o funcție hash ar trebui să genereze valori de hash imprevizibil diferite pentru orice valoare de intrare. De exemplu, luați următoarele două propoziții foarte similare:

1. "The quick brown fox."
2. "The quick brown fax."

Putem compara Valori hash MD5 generate din fiecare dintre cele două propoziții:

ad-banner
1. 2e87284d245c2aae1c74fa4c50a74c77
2. c17b6e9b160cda0cf583e89ec7b7fc22

Au fost generate două hashuri foarte diferite pentru două propoziții similare, care este o proprietate utilă atât pentru validare, cât și pentru criptografie. Acesta este un corolar al distribuție: valorile hash ale tuturor intrărilor trebuie distribuite uniform și imprevizibil în întreaga gamă de valori hash posibile.

Funcții hash comune

Există mai multe funcții hash care sunt utilizate pe scară largă. Toate au fost proiectate de matematicieni și informaticieni. Pe parcursul cercetărilor ulterioare, unii s-au dovedit a avea puncte slabe, deși toate sunt considerate suficient de bune pentru aplicații necriptografice.

MD5

Funcția hash MD5 produce o valoare hash pe 128 de biți. A fost conceput pentru a fi utilizat în criptografie, dar vulnerabilitățile au fost descoperite de-a lungul timpului, deci nu mai este recomandat în acest scop. Cu toate acestea, este încă utilizat pentru partiționarea bazei de date și calculul sumelor de verificare pentru validarea transferurilor de fișiere.

SHA-1

SHA înseamnă Secure Hash Algorithm. Prima versiune a algoritmului a fost SHA-1 și a fost ulterior urmată de SHA-2 (a se vedea mai jos).

În timp ce MD5 produce un hash pe 128 de biți, SHA1 generează un hash pe 160 de biți (20 de octeți). În format hexazecimal, are un număr întreg de 40 de cifre. La fel ca MD5, a fost conceput pentru aplicații de criptologie, dar s-a descoperit că în curând prezintă și vulnerabilități. Începând de astăzi, nu mai este considerat a fi mai puțin rezistent la atac decât MD5.

SHA-2

A doua versiune a SHA, numită SHA-2, are multe variante. Probabil cel mai frecvent utilizat este SHA-256, pe care Institutul Național de Standarde și Tehnologie (NIST) recomandă să îl utilizeze în locul MD5 sau SHA-1.

Algoritmul SHA-256 returnează o valoare hash de 256 de biți sau 64 de cifre hexazecimale. Deși nu sunt perfecte, cercetările actuale indică faptul că este considerabil mai sigur decât MD5 sau SHA-1.

Din punct de vedere al performanței, un hash SHA-256 este cu aproximativ 20-30% mai lent de calculat decât hash-urile MD5 sau SHA-1.

SHA-3

Această metodă hash a fost dezvoltată la sfârșitul anului 2015 și nu a văzut încă o utilizare pe scară largă. Algoritmul său nu are legătură cu cel folosit de predecesorul său, SHA-2.

Algoritmul SHA3-256 este o variantă cu o aplicabilitate echivalentă cu cea a SHA-256 anterioară, prima fiind necesară ceva mai mult timp pentru a se calcula decât cea ulterioară.

Utilizarea valorilor Hash pentru validare

O utilizare tipică a funcțiilor hash este efectuarea verificărilor de validare. O utilizare frecventă este validarea colecțiilor comprimate de fișiere, cum ar fi fișierele de arhivă .zip sau .tar.

Dat fiind o arhivă și valoarea hash așteptată (denumită în mod obișnuit ca suma de control), puteți efectua propriul calcul hash pentru a confirma că arhiva pe care ați primit-o este completă și necoruptă.

De exemplu, pot genera o sumă de verificare MD5 pentru un fișier tar în Unix folosind următoarele comenzi canalizate:

tar cf - files | tee tarfile.tar | md5sum -

Pentru a obține hash-ul MD5 pentru un fișier în Windows, utilizați Get-FileHash Comandă PowerShell:

Get-FileHash tarfile.tar -Algorithm MD5

Suma de control generată poate fi postată pe site-ul de descărcare, lângă linkul de descărcare a arhivei. Receptorul, după ce a descărcat arhiva, poate valida că a dat peste aceasta corect executând următoarea comandă:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -c

Unde 2e87284d245c2aae1c74fa4c50a74c77 este suma de verificare generată care a fost postată. Executarea cu succes a comenzii de mai sus va genera o stare OK ca aceasta:

echo '2e87284d245c2aae1c74fa4c50a74c77 tarfile.tar' | md5sum -ctarfile.tar: OK