Identificare l'algoritmo di un hash

identifica l'algoritmo probabile di un hash (MD5, SHA-1, SHA-256, bcrypt, argon2...) a partire dalla sua lunghezza e dal suo formato, e tenta di recuperare il testo in chiaro tramite un dizionario di password comuni
Incolla qualsiasi hash (esadecimale, bcrypt $2y$..., argon2 $argon2id$...). Lo strumento rileva l'algoritmo probabile.

Cos'è un hash crittografico?

Un hash (o impronta crittografica) è il risultato di una funzione che trasforma un dato di input di dimensione arbitraria (una password, un file, una stringa) in una stringa di dimensione fissa. Questa funzione è unidirezionale: a partire da un hash, è matematicamente non fattibile ritrovare l'input originale. Due input identici producono sempre lo stesso hash, ma il minimo cambiamento nell'input modifica completamente il risultato.

Il nostro strumento identifica l'algoritmo probabile di un hash a partire dal suo formato, e tenta un lookup contro un dizionario di password ultracomuni precalcolate sui principali algoritmi.

Come identificare un hash?

L'identificazione si basa su tre indizi:

  • La lunghezza: ogni algoritmo produce un'impronta di dimensione fissa.
  • Il formato: esadecimale puro, Base64, o Modular Crypt Format con prefissi specifici.
  • Il prefisso: gli hash di password moderni seguono il formato $id$params$salt$hash, dove id identifica senza ambiguità la funzione usata.

Lunghezze esadecimali comuni

  • 8 caratteri: CRC32 (somma di controllo, non un hash crittografico)
  • 32 caratteri: MD5, MD4, NTLM, RIPEMD-128
  • 40 caratteri: SHA-1, RIPEMD-160
  • 64 caratteri: SHA-256, SHA3-256
  • 96 caratteri: SHA-384, SHA3-384
  • 128 caratteri: SHA-512, SHA3-512, Whirlpool

Una lunghezza da sola non basta a concludere: MD5 e NTLM condividono la stessa dimensione di 32 caratteri hex, per esempio. Il nostro strumento restituisce allora la lista degli algoritmi possibili.

Prefissi Modular Crypt Format

Gli hash di password provenienti da crypt() o da librerie moderne usano un prefisso esplicito:

  • $1$: MD5 crypt
  • $5$: SHA-256 crypt
  • $6$: SHA-512 crypt
  • $2y$, $2a$, $2b$: Bcrypt (varianti a seconda della piattaforma)
  • $argon2i$, $argon2id$, $argon2d$: Argon2 (varianti di utilizzo, Argon2id essendo oggi raccomandato)

Esempio di hash Bcrypt

$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy

Casi d'uso

  • Analisi di fughe di dati: identificare l'algoritmo usato da una base compromessa per valutare la difficoltà di attacco.
  • Debug: confermare rapidamente quale algoritmo ha generato un'impronta trovata in una risposta API o un log.
  • Audit di sicurezza: individuare un sistema che memorizza ancora password in MD5 o SHA-1 (da proscrivere).
  • Forense: caratterizzare un artefatto in un'investigazione.

Perché un hash non è reversibile

Una funzione di hash è progettata per essere a senso unico. Non esiste alcun algoritmo di "decrittazione di hash", perché un hash non è una cifratura: è una proiezione. Più input diversi possono in teoria produrre lo stesso hash (collisione), quindi anche conoscendo un input che produce l'hash giusto, non avete la garanzia che sia l'input originale.

In pratica, "rompere" un hash significa testare massivamente input candidati finché si ritrova quello la cui impronta corrisponde. È ciò che fanno gli attacchi a dizionario e per forza bruta.

Lookup dizionario integrato

Il nostro strumento integra un mini-dizionario di 39 password ultracomuni: stringa vuota, password, admin, 123456, qwerty, letmein, ecc. Queste 39 voci sono precalcolate su 10 algoritmi (MD5, SHA-1, SHA-256, SHA-512, MD4, NTLM, ecc.). Se il vostro hash corrisponde a una di queste impronte, lo strumento vi restituisce la password in chiaro.

Questa funzionalità illustra perché gli hash semplici non sono adatti alle password: un attaccante non ha nemmeno bisogno di calcolare, consulta una tabella.

Hash semplice vs hash di password

Non tutti gli hash valgono per memorizzare password:

  • Hash semplici (MD5, SHA-256, SHA-512): progettati per essere rapidi, il che è un difetto quando si vuole resistere a un attacco per forza bruta. Non includono di sale per default, quindi due utenti con la stessa password avranno lo stesso hash, esponendo ad attacchi tramite tabelle precalcolate (rainbow table).
  • Hash di password (bcrypt, scrypt, Argon2): progettati per essere lenti per costruzione, integrano un sale casuale e un fattore di costo configurabile. Argon2id è oggi lo stato dell'arte raccomandato dall'OWASP.

Come usare lo strumento

  1. Incollate l'hash nel campo di input.
  2. Lo strumento rileva il formato (lunghezza, prefisso) e propone gli algoritmi possibili.
  3. Se l'hash corrisponde a una password ultracomune, la parola in chiaro viene mostrata.
  4. Altrimenti, ottenete la lista degli algoritmi candidati da esplorare oltre con uno strumento dedicato.

Domande frequenti

Perché il mio hash bcrypt non viene matchato contro il dizionario?

Bcrypt usa un sale casuale unico per hash: anche con la password password, ogni utente produce un hash diverso. Il precalcolo dizionario non funziona quindi. È precisamente la proprietà che rende bcrypt resistente agli attacchi tramite tabelle.

Cosa fare se più algoritmi sono possibili per la stessa lunghezza?

Incrociate con altri indizi: la sorgente dell'hash (Active Directory punta verso NTLM, Linux /etc/shadow verso SHA-512 crypt, una vecchia base MySQL verso MD5, ecc.), e il contesto applicativo. A pari lunghezza, MD5 resta statisticamente il più probabile su sistemi vecchi.

Come "rompere" un hash in pratica?

Per test di sicurezza legittimi (audit, pentest), gli strumenti standard sono John the Ripper e hashcat. Accettano wordlist massicce (rockyou, ecc.) e sfruttano la GPU per testare miliardi di candidati al secondo. La fattibilità dipende dall'algoritmo: MD5 e SHA-1 cedono velocemente, bcrypt e Argon2 rallentano l'attacco di vari ordini di grandezza.

Il dizionario integrato è consultabile?

Il dizionario è volutamente minimalista (39 voci) e serve a illustrare la debolezza degli hash semplici su password banali. Per una copertura seria, usate una wordlist esterna (rockyou, SecLists) con John the Ripper o hashcat.

Si può "decodificare" un hash?

No. Un hash non è una cifratura: non esiste una funzione inversa. Ogni sito che promette di "decodificare un hash" applica in realtà un lookup in una base precalcolata. Se la vostra password è unica e lunga, non vi figura.

Esempio di richiesta

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

Schema di input

Campo Tipo Richiesto Predefinito
hash text

Endpoint

  • GET https://cdrn.fr/api/v1/tools - elenca tutti gli strumenti disponibili
  • GET https://cdrn.fr/api/v1/tools/hash-identifier - recupera lo schema di questo strumento
  • POST https://cdrn.fr/api/v1/tools/hash-identifier/execute - esegue questo strumento con un payload JSON