Identificarea algoritmului unui hash

identifică algoritmul probabil al unui hash (MD5, SHA-1, SHA-256, bcrypt, argon2…) din lungimea și formatul său, și încearcă să recupereze textul clar printr-un dicționar de parole comune
Lipiți orice hash (hexazecimal, bcrypt $2y$..., argon2 $argon2id$...). Instrumentul detectează algoritmul probabil.

Ce este un hash criptografic?

Un hash (sau amprentă criptografică) este rezultatul unei funcții care transformă o dată de intrare de dimensiune arbitrară (o parolă, un fișier, un șir) într-un șir de dimensiune fixă. Această funcție este unidirecțională: plecând de la un hash, este matematic infezabil să găsești intrarea originală. Două intrări identice produc întotdeauna același hash, dar cea mai mică schimbare în intrare modifică complet rezultatul.

Instrumentul nostru identifică algoritmul probabil al unui hash plecând de la formatul său, și încearcă un lookup contra unui dicționar de parole ultra-curente precalculate pe principalii algoritmi.

Cum să identifici un hash?

Identificarea se bazează pe trei indicii:

  • Lungimea: fiecare algoritm produce o amprentă de dimensiune fixă.
  • Formatul: hexazecimal pur, Base64, sau Modular Crypt Format cu prefixe specifice.
  • Prefixul: hash-urile de parole moderne urmează formatul $id$params$salt$hash, unde id identifică fără ambiguitate funcția utilizată.

Lungimi hexazecimale curente

  • 8 caractere: CRC32 (sumă de control, nu un hash criptografic)
  • 32 caractere: MD5, MD4, NTLM, RIPEMD-128
  • 40 caractere: SHA-1, RIPEMD-160
  • 64 caractere: SHA-256, SHA3-256
  • 96 caractere: SHA-384, SHA3-384
  • 128 caractere: SHA-512, SHA3-512, Whirlpool

O lungime singură nu este suficientă pentru a concluziona: MD5 și NTLM împărtășesc aceeași dimensiune de 32 caractere hexa, de exemplu. Instrumentul nostru returnează atunci lista algoritmilor posibili.

Prefixe Modular Crypt Format

Hash-urile de parole provenite din crypt() sau din biblioteci moderne utilizează un prefix explicit:

  • $1$: MD5 crypt
  • $5$: SHA-256 crypt
  • $6$: SHA-512 crypt
  • $2y$, $2a$, $2b$: Bcrypt (variante în funcție de platformă)
  • $argon2i$, $argon2id$, $argon2d$: Argon2 (variante de utilizare, Argon2id fiind astăzi recomandat)

Exemplu de hash Bcrypt

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Cazuri de utilizare

  • Analiză a scurgerilor de date: a identifica algoritmul utilizat de o bază compromisă pentru a evalua dificultatea atacului.
  • Debug: a confirma rapid ce algoritm a generat o amprentă găsită într-un răspuns API sau un log.
  • Audit de securitate: a identifica un sistem care încă stochează parole în MD5 sau SHA-1 (de proscris).
  • Forensică: a caracteriza un artefact într-o investigație.

De ce un hash nu este reversibil

O funcție de hash este concepută să fie cu sens unic. Nu există niciun algoritm de "decriptare de hash", pentru că un hash nu este o criptare: este o proiecție. Mai multe intrări diferite pot teoretic produce același hash (coliziune), deci chiar și cunoscând o intrare care produce hash-ul potrivit, nu ai garanția că este intrarea originală.

În practică, "a sparge" un hash înseamnă a testa masiv intrări candidat până se găsește cea a cărei amprentă corespunde. Este ceea ce fac atacurile prin dicționar și prin forță brută.

Lookup dicționar integrat

Instrumentul nostru integrează un mini-dicționar de 39 parole ultra-curente: șir gol, password, admin, 123456, qwerty, letmein, etc. Aceste 39 intrări sunt precalculate pe 10 algoritmi (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM, etc.). Dacă hash-ul tău corespunde uneia dintre aceste amprente, instrumentul îți returnează parola în clar.

Această funcționalitate ilustrează de ce hash-urile simple nu sunt adaptate parolelor: un atacator nu are nici măcar nevoie să calculeze, consultă un tabel.

Hash simplu vs hash de parolă

Nu toate hash-urile sunt egale pentru stocarea parolelor:

  • Hash-uri simple (MD5, SHA-256, SHA-512): concepute să fie rapide, ceea ce este un defect când se vrea rezistența la un atac prin forță brută. Nu includ sare implicit, deci doi utilizatori cu aceeași parolă vor avea același hash, expunând atacurilor prin tabele precalculate (rainbow tables).
  • Hash-uri de parolă (bcrypt, scrypt, Argon2): concepute să fie lente prin construcție, integrează o sare aleatorie și un factor de cost configurabil. Argon2id este astăzi state-of-the-art recomandat de OWASP.

Cum să utilizezi instrumentul

  1. Lipește hash-ul în câmpul de intrare.
  2. Instrumentul detectează formatul (lungime, prefix) și propune algoritmii posibili.
  3. Dacă hash-ul corespunde unei parole ultra-curente, cuvântul în clar se afișează.
  4. Altfel, obții lista algoritmilor candidat de explorat mai departe cu un instrument dedicat.

Întrebări frecvente

De ce hash-ul meu bcrypt nu este matched contra dicționarului?

Bcrypt utilizează o sare aleatorie unică per hash: chiar și cu parola password, fiecare utilizator produce un hash diferit. Precalculul dicționar nu funcționează deci. Este exact proprietatea care face bcrypt rezistent atacurilor prin tabele.

Ce să fac dacă mai mulți algoritmi sunt posibili pentru aceeași lungime?

Încrucișează cu alte indicii: sursa hash-ului (Active Directory indică spre NTLM, Linux /etc/shadow spre SHA-512 crypt, o bază MySQL veche spre MD5, etc.), și contextul aplicativ. La lungime egală, MD5 rămâne statistic cel mai probabil pe sisteme vechi.

Cum să "spargi" un hash în practică?

Pentru teste de securitate legitime (audit, pentest), instrumentele standard sunt John the Ripper și hashcat. Acceptă wordlists masive (rockyou, etc.) și exploatează GPU-ul pentru a testa miliarde de candidați pe secundă. Fezabilitatea depinde de algoritm: MD5 și SHA-1 cedează rapid, bcrypt și Argon2 încetinesc atacul cu mai multe ordine de mărime.

Este dicționarul integrat consultabil?

Dicționarul este voit minimalist (39 intrări) și servește la ilustrarea slăbiciunii hash-urilor simple pe parole triviale. Pentru o acoperire serioasă, utilizează o wordlist externă (rockyou, SecLists) cu John the Ripper sau hashcat.

Se poate "decoda" un hash?

Nu. Un hash nu este o criptare: nu există o funcție inversă. Orice site care promite "decodarea unui hash" aplică în realitate un lookup într-o bază precalculată. Dacă parola ta este unică și lungă, nu figurează acolo.

Exemplu de cerere

curl -X POST https://cdrn.fr/api/v1/tools/hash-identifier/execute \
  -H "Content-Type: application/json" \
  -d '{"hash":"..."}'

Schema de intrare

Câmp Tip Obligatoriu Implicit
hash text

Puncte de acces

  • GET https://cdrn.fr/api/v1/tools - listează toate instrumentele disponibile
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - obține schema acestui instrument
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - execută acest instrument cu un payload JSON