Imaginează-ți că poți lua orice date — un singur cuvânt, un roman, un video de 4 GB — și le poți reduce la un șir scurt de caractere de lungime fixă care le identifică unic. Schimbă o singură virgulă în original și șirul devine complet diferit. Și nu există nicio modalitate de a inversa procesul pentru a recupera datele originale.
Exact asta face o funcție hash criptografică. Este unul dintre cele mai fundamentale blocuri de construcție ale securității moderne și protejează în liniște aproape tot ce faci online.
Metafora amprentei
Un hash funcționează ca o amprentă digitală. Amprenta ta te identifică unic, dar nimeni nu poate reconstrui fața ta din ea. Similar, un hash criptografic identifică unic un fragment de date fără a dezvălui ce sunt acele date.
Furnizează orice intrare unei funcții hash și obții un digest (numit și valoare hash sau sumă de control) — un șir de caractere hexazecimale de lungime fixă. SHA-256, unul dintre cei mai comuni algoritmi, produce întotdeauna o ieșire de 64 de caractere indiferent de dimensiunea intrării.
| Intrare | Digest SHA-256 (primele 16 caractere) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Dump-ul complet Wikipedia | (tot 64 de caractere) |
Cele patru proprietăți esențiale
O funcție se califică drept hash criptografic doar dacă satisface aceste proprietăți:
- Deterministă. Aceeași intrare produce întotdeauna aceeași ieșire, pe orice mașină, în orice moment.
- Unidirecțională (rezistență la pre-imagine). Având un hash, este computațional infezabil să găsești intrarea originală. Nu poți „deshasha" datele.
- Rezistentă la coliziuni. Este practic imposibil să găsești două intrări diferite care produc același digest. Pentru SHA-256, probabilitatea unei coliziuni accidentale este de aproximativ 1 la 2^128 — un număr mai mare decât atomii din universul observabil.
- Efect de avalanșă. Schimbarea unui singur bit din intrare schimbă aproximativ jumătate din biții ieșirii. Nu există niciun model sau relație detectabilă între intrări similare.
Distincție cheie: Hashing-ul nu este criptare. Criptarea este reversibilă cu o cheie; hashing-ul este deliberat ireversibil. Criptezi datele pentru a le proteja în tranzit. Hashezi datele pentru a le verifica integritatea sau a stoca o dovadă fără a păstra originalul.
Algoritmi hash comuni
MD5 (1991)
- Ieșire: 128 biți (32 caractere hexazecimale)
- Status: Criptografic spart. Cercetătorii pot genera coliziuni în câteva secunde pe un laptop.
- Încă folosit în: Sume de control non-securitate pentru descărcări de fișiere și sisteme vechi.
SHA-1 (1995)
- Ieșire: 160 biți (40 caractere hexazecimale)
- Status: Depreciat pentru securitate. Google a demonstrat o coliziune practică în 2017 (atacul „SHAttered").
- Încă folosit în: Depozite Git mai vechi, unele certificate vechi.
SHA-256 (2001)
- Ieșire: 256 biți (64 caractere hexazecimale)
- Status: Standard actual. Niciun atac practic cunoscut.
- Folosit în: Certificate TLS, Bitcoin, hashing de parole, semnături digitale, verificarea integrității fișierelor.
SHA-3 (2015)
- Ieșire: Variabilă (frecvent 256 biți)
- Status: Cel mai recent standard, bazat pe un design intern complet diferit (construcția de tip burete Keccak) față de familia SHA-2.
- Folosit în: Sisteme orientate spre viitor, Ethereum, situații care necesită diversitate de algoritmi.
| Algoritm | Dimensiune ieșire | Sigur? | Viteză |
|---|---|---|---|
| MD5 | 128 biți | Nu | Foarte rapid |
| SHA-1 | 160 biți | Nu | Rapid |
| SHA-256 | 256 biți | Da | Moderat |
| SHA-3-256 | 256 biți | Da | Moderat |
Unde se folosește hashing-ul criptografic
Stocarea parolelor
Când creezi un cont, un sistem bine proiectat nu îți stochează niciodată parola în text clar. Stochează hash-ul. Când te autentifici, sistemul hashează ce ai tastat și compară cu valoarea stocată. Chiar dacă baza de date este compromisă, atacatorii obțin hash-uri — nu parole.
Sistemele moderne merg mai departe adăugând un salt aleatoriu (date suplimentare adăugate înainte de hashing) și folosind algoritmi deliberat lenți ca bcrypt, scrypt sau Argon2 pentru a face ghicitul prin forță brută impracticabil.
Verificarea integrității fișierelor
Distribuitorii de software publică sume de control SHA-256 alături de descărcări. După descărcare, calculezi hash-ul fișierului pe mașina ta și compari. O potrivire dovedește că fișierul nu a fost corupt sau alterat în tranzit.
Semnături digitale
Când semnezi digital un document, sistemul hashează mai întâi documentul, apoi criptează hash-ul cu cheia ta privată. Destinatarul îl decriptează cu cheia ta publică și compară cu propriul hash al documentului. Aceasta este mult mai eficientă decât criptarea întregului document și dovedește atât autoria, cât și integritatea.
Blockchain
Fiecare bloc dintr-un blockchain conține hash-ul blocului anterior, creând un lanț imuabil. Modificarea oricărei tranzacții trecute schimbă hash-ul blocului respectiv, ceea ce rupe lanțul din acel punct, făcând falsificarea imediat vizibilă.
De ce MD5 și SHA-1 sunt considerate sparte
Un algoritm hash este „spart" când cineva poate crea deliberat două intrări diferite care produc același hash (o coliziune). Aceasta subminează fiecare caz de utilizare care se bazează pe unicitate.
- MD5: Coliziunile pot fi generate în câteva secunde. Cercetătorii au creat două fișiere PDF diferite cu hash-uri MD5 identice.
- SHA-1: Atacul SHAttered din 2017 a produs două PDF-uri diferite cu același hash SHA-1, necesitând aproximativ 6.500 de ani de calcul pe un singur procesor (fezabil cu resurse cloud).
Regulă practică: Nu folosi niciodată MD5 sau SHA-1 pentru nimic legat de securitate — parole, certificate, semnături digitale sau verificări de integritate unde un adversar ar putea fi implicat. Folosește în schimb SHA-256 sau SHA-3.
Mai departe
Hashing-ul este unul din acele concepte care devin intuitive odată ce experimentezi cu ele. Încearcă să hashezi o propoziție, apoi schimbă un caracter și observă efectul de avalanșă cu proprii ochi.
- Cum să generezi și să verifici hash-uri — tutorial pas cu pas
- Generator de hash — calculează SHA-256, MD5, SHA-512 și altele instantaneu în browser
- Identificator de hash — lipește un hash necunoscut și identifică algoritmul
