Identificatore di hash | Riconosce MD5, SHA-1, SHA-256, SHA-512, SHA-3, bcrypt e Argon2
Basta incollare una stringa che sembra un hash: dalla lunghezza, dai caratteri usati e dal prefisso lo strumento indica con quale algoritmo è stata probabilmente generata fra MD5, SHA-1, SHA-256, SHA-512, SHA-3, bcrypt e Argon2. Il riconoscimento avviene interamente nel browser.
Un hash non contiene al proprio interno il nome dell'algoritmo con cui è stato generato. Poiché più algoritmi possono condividere la stessa lunghezza di output, questo esito è la «supposizione più probabile» ricavata da lunghezza, caratteri e prefisso, non una certezza assoluta.
Risalire all'algoritmo partendo dal valore hash
Nel valore hash non compare da nessuna parte il nome dell'algoritmo che lo ha prodotto. Si può comunque risalirvi, e gli indizi sono tre: il numero di caratteri dell'uscita (32 per MD5, 40 per SHA-1, 64 per SHA-256 e 128 per SHA-512), il tipo di carattere (esadecimale oppure Base64) e prefissi come $2b$ o $argon2id$. Questo strumento individua su questa base l'algoritmo più probabile e mostra anche il ragionamento che ha portato a quella conclusione.
Va sottolineato che si tratta di una deduzione e non di un verdetto. Il motivo è che più algoritmi condividono la stessa lunghezza in uscita: una stringa di 64 caratteri esadecimali può essere SHA-256, ma altrettanto bene SHA3-256 o BLAKE2s, e dall'aspetto non è possibile distinguerli. Al contrario, i formati che portano i propri parametri dentro la stringa stessa, come bcrypt e Argon2, si riconoscono con certezza dal prefisso. L'intera analisi avviene nel browser, perciò la stringa incollata non viene mai inviata ad alcun server.
Come identificare un hash
- Incollate la stringa dell'hash Gli spazi iniziali e finali vengono ignorati, potete quindi copiarla così com'è da un registro.
- Leggete il risultato Gli algoritmi candidati compaiono ordinati dalla probabilità maggiore alla minore.
- Controllate lunghezza e insieme di caratteri Viene mostrata anche la motivazione, così da capire perché viene proposto quel candidato.
-
Osservate se c'è un prefisso
Se la stringa comincia con
$, i candidati si riducono praticamente a uno solo.
Consigli per sfruttarlo al meglio
- Il riconoscimento si basa soltanto su lunghezza, insieme di caratteri (esadecimale o Base64) e prefisso: l'hash non viene ricalcolato per una verifica. Lo strumento propone i «candidati deducibili dal formato».
- bcrypt (
$2a$,$2b$,$2y$) e Argon2 ($argon2id$e simili) incorporano nel prefisso il nome dell'algoritmo e i parametri, quindi il riconoscimento è molto affidabile. - Una stringa esadecimale di 64 cifre è nella maggior parte dei casi SHA-256, ma anche SHA3-256 ha la stessa lunghezza: se conoscete il sistema di origine (linguaggio, libreria), tenetene conto.
- Potete incollare direttamente anche elenchi di hash su più righe, separati da a capo o spazi: gli spazi interni vengono rimossi automaticamente prima dell'analisi.
- Se l'esito non vi convince, il modo più sicuro resta consultare l'origine dell'hash, cioè il codice sorgente o la documentazione dell'applicazione.
Quando tornano utili
Nell'esaminare un sistema ereditato
Si ottiene una prima idea di come siano stati prodotti gli hash rimasti nella banca dati.
Nel valutare una migrazione
Se sono bcrypt o Argon2, potete conservarli con i loro parametri e migrare per gradi, man mano che gli utenti accedono.
Nell'individuare un problema di sicurezza
Trovare MD5 o SHA-1 usati per conservare password è di per sé un rilievo da correggere.
Nel decifrare registri o estrazioni
Di fronte a una lunga stringa esadecimale di origine ignota, avete un punto di partenza per capire di che cosa si tratti.
Termini sugli hash
- MD5
- Funzione hash a 128 bit. Le collisioni si costruiscono nella pratica, perciò non va usata né per le password né per rilevare alterazioni.
- SHA-1
- Funzione hash a 160 bit. Come MD5 presenta attacchi di collisione dimostrati e non è consigliata per nuovi impieghi.
- SHA-256 / SHA-512
- Funzioni della famiglia SHA-2. La loro rapidità, altrove un pregio, diventa una debolezza nel conservare password, perché agevola i tentativi esaustivi.
- bcrypt
- Hash pensato per le password, che porta il fattore di costo nella stringa stessa. Comincia con
$2a$o$2b$. - Argon2
- Hash per password vincitore del concorso del 2015. Comincia con
$argon2id$e consente di regolare anche la quantità di memoria. - Sale
- Valore casuale che cambia a ogni hash. bcrypt e Argon2 lo portano dentro la stringa stessa, così non occorre conservarlo a parte.
Domande frequenti
$2b$ o $argon2id$. Finché queste informazioni sono leggibili, l'algoritmo è determinabile in modo univoco.
A proposito — perché da un hash non si può stabilire con certezza l'algoritmo
Il compito di una funzione hash è trasformare i dati in ingresso in un output di lunghezza fissa, e quell'output non contiene alcun metadato sul nome dell'algoritmo. È una conseguenza necessaria del progetto: incorporare metadati cambierebbe la lunghezza del risultato e farebbe cadere la proprietà fondamentale della lunghezza fissa. L'unico appiglio che ci resta è dunque l'aspetto dell'output: quanti caratteri sono e di che tipo.
Il limite emerge con particolare evidenza nel rapporto fra la famiglia SHA-2 e quella SHA-3. SHA-256 e SHA3-256 hanno strutture interne completamente diverse — Merkle–Damgård la prima, la costruzione a spugna la seconda — eppure sono entrambe progettate per produrre 256 bit, cioè 64 cifre esadecimali. Lo stesso vale per SHA-224 e SHA3-224, SHA-384 e SHA3-384, SHA-512 e SHA3-512: dalla sola lunghezza non si può decidere. Nella pratica la famiglia SHA-2 è di gran lunga più diffusa e per questo, a parità di lunghezza, lo strumento la propone come candidata principale: resta però una supposizione fondata su una tendenza statistica.
Algoritmi pensati specificamente per le password, come bcrypt e Argon2, risolvono invece l'ambiguità adottando il «formato modular crypt», autodescrittivo. Scrivendo in testa all'hash il nome dell'algoritmo, la versione e i parametri — come in $2b$12$… o $argon2id$v=19$… — il metodo di calcolo si ricostruisce in modo univoco dal solo hash. Di fronte a un formato simile, il riconoscimento diventa certo.
Un lavoro di questo tipo serve davvero in situazioni concrete: l'analisi di un archivio di password recuperato da un sistema datato, oppure le sfide di crittanalisi delle competizioni di sicurezza CTF (Capture The Flag). Restringere il campo degli algoritmi permette infatti di scegliere in modo efficiente lo strumento di analisi successivo e la modalità d'attacco, per esempio in Hashcat.