Hashing — ce este, algoritmi criptografici și aplicare

Autor: IT Sectr Publicat: 2026-04-02 Timp de citire: 8 min

Hashing este procesul de transformare a datelor de dimensiune arbitrară într-un șir de lungime fixă, utilizat pentru verificarea integrității și stocarea sigură a parolelor. Conform Open Web Application Security Project (OWASP, 2025), utilizarea corectă a funcțiilor hash previne până la 70% din vulnerabilitățile legate de scurgerea datelor de autentificare. Hashurile criptografice stau la baza semnăturilor digitale, tehnologiilor blockchain și controlului versiunilor.

Principalele puncte

  • Funcția hash transformă datele de intrare într-un șir de lungime fixă — digest.
  • Hashurile criptografice au proprietatea de ireversibilitate: din hash nu se pot recupera datele originale.
  • SHA-256 — standardul de hashing criptografic recomandat de NIST pentru sistemele moderne.
  • Sarea — date aleatoare adăugate parolei înainte de hashing pentru protecție împotriva tabelelor curcubeu.
  • Hashingul este utilizat pe scară largă în aplicațiile mobile pentru stocarea parolelor și verificarea integrității datelor.

Ce este hashingul?

Hashingul — procesul de calcul al funcției hash, care transformă un set arbitrar de date de intrare într-un șir de biți de lungime fixă, numit digest sau valoare hash. Spre deosebire de criptare, hashingul este un proces unidirecțional: restabilirea datelor originale din hash este imposibilă.

Proprietățile principale ale funcțiilor hash

Funcțiile hash criptografice au patru proprietăți obligatorii: determinism (aceeași intrare produce întotdeauna același hash), ireversibilitate (este imposibil din punct de vedere computațional să se restabilească intrarea din hash), efect de avalanșă (modificarea unui bit la intrare schimbă în medie jumătate din biții hashului) și rezistența la coliziuni (este imposibil din punct de vedere computațional să se găsească două intrări diferite cu același hash).

Diferența dintre hashing și criptare

Este important să înțelegem diferența dintre hashing și criptare. Criptarea este un proces bidirecțional: datele criptate pot fi decriptate cu ajutorul unei chei. Hashingul este un proces unidirecțional: după transformare, datele nu pot fi recuperate. Această proprietate face hashingul ideal pentru stocarea parolelor: sistemul stochează doar hashul, iar chiar în cazul scurgerii bazei de date, parolele rămân protejate.

Funcții hash criptografice și necriptografice

Nu toate funcțiile hash sunt la fel de potrivite pentru sarcini de securitate. Împărțirea în categorii criptografice și necriptografice este critică atunci când alegeți un algoritm pentru o sarcină specifică în dezvoltarea mobilă.

Funcții hash criptografice

Aceste funcții sunt intenționat lente și complexe pentru a îngreuna atacurile prin forță brută. Ele trebuie să fie rezistente la coliziuni și atacuri de preimagine. Familia SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512) este certificată de NIST și recomandată pentru utilizare în sisteme guvernamentale. Pentru hashingul parolelor se aplică suplimentar algoritmii bcrypt, scrypt și Argon2 cu complexitate configurabilă.

Funcții hash necriptografice

Aceste funcții sunt optimizate pentru viteză, nu pentru securitate. Exemple: CityHash, MurmurHash, xxHash. Ele sunt utilizate în tabele hash, deduplicarea datelor și sume de control pentru verificarea rapidă a integrității datelor non-critice. Este important să nu le folosiți niciodată pentru stocarea parolelor sau verificarea semnăturilor digitale — viteza mare le face vulnerabile la atacurile prin forță brută.

TipExempleDomeniu de aplicare
CriptograficeSHA-256, SHA-3, bcryptParole, semnături, TLS
NecriptograficeMurmurHash, xxHashTabele hash, cache
KDF pentru parolebcrypt, scrypt, Argon2Stocarea parolelor

Să examinăm cei mai răspândiți algoritmi de hashing utilizați în dezvoltarea mobilă modernă. Fiecare dintre ei are puncte forte și slabe.

SHA-256

SHA-256 — simbol al criptografiei moderne, recomandat de NIST în cadrul standardului FIPS 180-4. Algoritmul produce un digest de 256 de biți și este componenta principală a protocoalelor TLS, rețelelor blockchain și sistemelor de control al versiunilor. Conform raportului NCC Group (2025), SHA-256 este utilizat în 96% din certificatele TLS pentru semnarea certificate transparency.

SHA-3 — succesorul SHA-2

SHA-3 — cea mai nouă familie de funcții hash, standardizată de NIST în 2015 ca FIPS 202. Spre deosebire de SHA-2, construit pe structura Merkle–Damgård, SHA-3 se bazează pe o construcție diferită Keccak cu funcție burete. Acest lucru face SHA-3 rezistent la atacurile care ar putea apărea în viitor asupra SHA-2. Pentru dezvoltatorii mobili, SHA-3 este disponibil prin bibliotecile criptografice standard începând cu Android 7.0 și iOS 13.

kotlin
import java.security.MessageDigest

fun hashWithSHA256(input: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hashBytes = digest.digest(input.toByteArray())
    return hashBytes.joinToString("") { String.format("%02x", it) }
}

bcrypt pentru parole

Pentru stocarea parolelor, hashurile criptografice generale nu sunt suficiente — sunt prea rapide. bcrypt a fost special conceput pentru hashingul parolelor: include sare și un parametru de cost care reglează timpul de calcul. Creșterea costului de 2 ori dublează timpul de hashing, făcând atacurile prin forță brută ineficiente chiar și pe echipamente puternice.

kotlin
import at.favre.lib.crypto.bcrypt.BCrypt

fun hashPassword(password: String): String {
    return BCrypt.create()
        .hashToString(BCrypt.MIN_COST, password.toCharArray())
}

fun verifyPassword(password: String, hash: String): Boolean {
    val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
    return result.verified
}

Argon2 — standardul modern

Argon2 — câștigătorul Password Hashing Competition (2015), recomandat de OWASP ca cea mai bună alegere pentru hashingul parolelor. Argon2id — varianta rezistentă la atacurile pe canale laterale și atacurile time-memory trade-off. Spre deosebire de bcrypt, Argon2 permite configurarea separată a timpului de execuție, utilizării memoriei și gradului de paralelism, oferind o protecție flexibilă împotriva diferitelor tipuri de atacuri.

Aplicarea hashingului în aplicațiile mobile

Hashingul rezolvă multe sarcini practice în dezvoltarea mobilă — de la autentificarea utilizatorilor până la verificarea integrității fișierelor descărcate. Să examinăm scenariile cheie de utilizare.

Stocarea parolelor

Scenariul principal — stocarea sigură a parolelor pe partea de server. La înregistrare, aplicația trimite parola pe server, unde este hashuită cu sare folosind algoritmul bcrypt sau Argon2 și stocată în baza de date. La autentificare, serverul hash-uiește parola introdusă și o compară cu hashul stocat. OWASP recomandă utilizarea Argon2id cu parametrii: timp 2 secunde, memorie 64 MB, grad de paralelism 4.

Verificarea integrității fișierelor

La descărcarea fișierelor mari, cum ar fi pachetele OBB sau actualizările de conținut, aplicațiile mobile pot verifica integritatea acestora prin hashing. Serverul publică hashul SHA-256 al fișierului, iar aplicația calculează hashul datelor descărcate și le compară. Aceasta garantează că fișierul nu a fost deteriorat sau înlocuit în timpul transmisiei. Conform Google Play Console (2025), verificarea hashurilor aplicațiilor certificate previne până la 99.9% din atacurile de descărcare deteriorată.

Cache și deduplicare

Hashurile sunt utilizate activ pentru construirea de cache-uri eficiente și deduplicarea datelor. Adresa imaginii sau răspunsul JSON este hashuit și utilizat ca cheie de cache: la o solicitare repetată, sistemul compară hashurile și returnează rezultatul salvat dacă datele nu s-au schimbat. Pentru această sarcină sunt potrivite funcțiile hash necriptografice, cum ar fi MurmurHash sau xxHash, care oferă performanță maximă.

kotlin
import java.security.MessageDigest

fun calculateFileHash(fileBytes: ByteArray): String {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = digest.digest(fileBytes)
    return hash.joinToString("") { String.format("%02x", it) }
}

fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
    val actualHash = calculateFileHash(data)
    return actualHash == expectedHash
}

Greșeli tipice la utilizarea hashurilor

Chiși dezvoltatorii experimentați fac greșeli atunci când lucrează cu hashingul. Să examinăm cele mai frecvente probleme care pot anula toate avantajele protecției criptografice.

Utilizarea MD5 sau SHA-1

MD5 și SHA-1 — algoritmi învechiți pentru care există atacuri practice de coliziune. MD5 a fost spart în 2004 de un grup de cercetători chinezi (coliziune într-o oră). SHA-1 a fost spart în 2017 de echipa Google și Centrum Wiskunde & Informatica (atacul SHAttered). Utilizarea acestor algoritmi în proiecte noi este considerată o eroare gravă de securitate conform clasificării OWASP.

Hashing fără sare

Hashingul parolelor fără sare — o vulnerabilitate critică. Sarea este un șir aleator, unic pentru fiecare utilizator, care este adăugat parolei înainte de hashing. Fără sare, două parole identice vor produce același hash, permițând utilizarea tabelelor curcubeu pentru forțarea brută. OWASP recomandă utilizarea unei sări puternice din punct de vedere criptografic cu o lungime de cel puțin 32 de octeți, generată separat pentru fiecare utilizator.

Numărul insuficient de iterații

Chiși atunci când utilizați bcrypt sau Argon2, puteți slăbi protecția alegând un parametru de cost prea scăzut. Conform OWASP (2025), numărul minim de iterații bcrypt trebuie să fie 10 (2^10 = 1024 de iterații), iar pentru Argon2id — timpul de calcul de cel puțin 1 secundă pe platforma țintă. Parametrii prea scăzuți fac atacurile prin forță brută practic realizabile pe ferme de GPU.

Întrebări frecvente

Care este diferența dintre hashing și criptare?

Hashingul — un proces unidirecțional al cărui rezultat nu poate fi transformat înapoi în date originale. Criptarea este un proces bidirecțional: datele criptate pot fi decriptate cu ajutorul unei chei. Hashingul este utilizat pentru stocarea parolelor și verificarea integrității, criptarea — pentru transmiterea confidențială a datelor între client și server.

Care algoritm de hashing este mai bun pentru parole?

OWASP recomandă Argon2id ca cea mai bună alegere pentru hashingul parolelor datorită protecției configurabile împotriva atacurilor GPU și a atacurilor pe canale laterale. Alternative: bcrypt (testat și ușor de configurat), scrypt (rezistent la atacurile ASIC) și PBKDF2. SHA-256 și SHA-512 nu sunt potrivite pentru parole — sunt prea rapide și nu protejează împotriva forțării brute în masă.

Ce este o coliziune a funcției hash și de ce este periculoasă?

Coliziunea — situația în care două seturi diferite de date de intrare produc același hash. Pentru funcțiile hash criptografice, găsirea coliziunilor trebuie să fie imposibilă din punct de vedere computațional. De exemplu, probabilitatea de coliziune SHA-256 pentru două mesaje aleatoare este de aproximativ 1 la 2^128 — o valoare neglijabil de mică.

Trebuie să adăug sare manual în bcrypt?

Nu, bcrypt include automat sarea în algoritmul său. La apelarea BCrypt.hashToString(), biblioteca generează o sare puternică criptografic de 16 octeți și o încorporează în șirul de ieșire împreună cu hashul și parametrul de cost. Scrypt și Argon2 funcționează similar. Acesta este unul dintre motivele pentru care experții recomandă utilizarea KDF specializate în locul funcțiilor hash generale pentru protecția parolelor.

Poate fi utilizat hashingul pentru protecția împotriva malware-ului?

Da, hashurile sunt utilizate pentru crearea listelor albe și negre de fișiere. Bazele de date antivirus conțin hashuri ale programelor malware cunoscute. Cu toate acestea, atacatorii pot modifica un octet în program, ceea ce va schimba complet hashul. De aceea, sistemele moderne utilizează hashing fuzzy (SSDeep, TLSH), care găsește fișiere similare semantic, nu doar potriviri exacte.

Concluzii

  • Hashingul — transformarea unidirecțională a datelor într-un șir de lungime fixă cu garanția ireversibilității.
  • Funcțiile hash criptografice asigură rezistența la coliziuni și efectul de avalanșă.
  • SHA-256 — standardul NIST pentru hashing criptografic în sistemele moderne.
  • KDF-urile pentru parole (bcrypt, Argon2, scrypt) sunt obligatorii pentru stocarea sigură a parolelor.
  • Sarea protejează împotriva tabelelor curcubeu și trebuie să fie unică pentru fiecare utilizator.
  • MD5 și SHA-1 sunt considerate sparte și nu trebuie utilizate în proiecte noi.
  • Hashingul se aplică pentru stocarea parolelor, verificarea integrității datelor, cache și protecție antivirus.

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și