Generatore e verifica bcrypt
Genera un hash bcrypt con fattore di costo da 4 a 14, verifica una password con un hash esistente e leggi versione, costo, salt e digest.
Calcola l'hash di una password
- Versione
- Costo
- Salt (22 caratteri)
- Hash (31 caratteri)
Verifica una password con un hash
- Versione
- Costo
- Salt (22 caratteri)
- Hash (31 caratteri)
Come calcolare l’hash bcrypt di una password
- In Calcola l’hash di una password, scrivi la Password. Un contatore mostra la sua lunghezza in byte UTF-8 e ti avvisa quando supera i 72 byte.
- Scegli il Fattore di costo (4–14). La riga sotto mostra il numero di round, per esempio 10 → 2^10 = 1.024 round.
- Clicca su Genera hash. Una barra di avanzamento segue il lavoro e la pagina resta utilizzabile mentre il calcolo è in corso. Alla fine lo strumento mostra il tempo impiegato e l’Hash bcrypt, pronto da copiare.
- L’hash viene scomposto nelle sue parti: Versione, Costo, Salt (22 caratteri) e Hash (31 caratteri).
Per verificare una password con un hash, scrivi la password, incolla l’hash (quello appena generato viene inserito in automatico) e clicca su Verifica password. Il risultato ti dice se corrispondono. Spunta Nascondi le password per mascherare entrambi i campi password.
Il calcolo avviene nel tuo browser con la libreria bcryptjs, caricata solo la prima volta che serve. Nessuna password e nessun hash vengono inviati altrove.
Come funziona bcrypt
bcrypt (Provos e Mazières, 1999) è una funzione di hashing per password basata sul cifrario Blowfish. A differenza di SHA-256 è volutamente lenta, e la sua lentezza è regolabile: il fattore di costo è una potenza di due, quindi ogni +1 raddoppia il lavoro. Un costo di 10 significa 1.024 iterazioni della costosa preparazione della chiave; un costo di 12 ne significa 4.096. Questa lentezza pesa pochissimo quando un utente fa il login, ma rende molto più costoso un attacco a forza bruta su un database rubato.
Un hash come $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy si legge così:
$2b$: la versione.$2a$e$2y$(PHP) sono compatibili e si possono verificare qui;$2x$indica hash prodotti da una vecchia implementazione difettosa e viene rifiutato.10: il fattore di costo.- I 22 caratteri successivi: un salt casuale da 128 bit, nell’alfabeto Base64 proprio di bcrypt (
./A-Za-z0-9). - Gli ultimi 31 caratteri: il risultato da 184 bit.
Dato che il salt è casuale e salvato dentro l’hash, calcolare due volte l’hash della stessa password dà due hash diversi, ed entrambi vengono verificati correttamente. È anche per questo che una password si controlla con una funzione di verifica e non confrontando gli hash.
Scegliere il costo
Scegli il costo più alto che il tuo server può permettersi mantenendo i login rapidi, di solito intorno a un quarto di secondo per hash. OWASP raccomanda per bcrypt un costo minimo di 10. I browser eseguono bcrypt in JavaScript, che è diverse volte più lento di un’implementazione nativa lato server: da un costo di 12 in su lo strumento avvisa che il calcolo può richiedere da uno a diversi secondi, e ogni passo in più raddoppia il tempo. Il lavoro è diviso in piccole porzioni, quindi la pagina non si blocca.
Per i nuovi sistemi OWASP oggi preferisce Argon2id, mentre bcrypt resta accettabile dove Argon2id non è disponibile.
Il limite dei 72 byte
bcrypt usa solo i primi 72 byte della password; tutto quello che segue viene ignorato senza avvisi. Byte e caratteri non sono la stessa cosa: una lettera accentata occupa 2 byte in UTF-8 e un’emoji 4. Due password lunghe con gli stessi primi 72 byte producono lo stesso hash. Il contatore dei byte ti avvisa quando una password è troppo lunga. Alcuni sistemi pre-calcolano un hash delle password lunghe (per esempio con HMAC-SHA256 e poi Base64) prima di bcrypt; se lo fai, non passare mai digest binari grezzi, perché in molte implementazioni un byte zero terminerebbe la password in anticipo.
Domande frequenti
Perché la stessa password dà ogni volta un hash diverso?
Ogni hash riceve un nuovo salt casuale, salvato dentro l’hash stesso. Il pulsante Verifica password legge salt e costo dall’hash e ricalcola il risultato, quindi ogni versione viene verificata.
Un hash bcrypt si può decifrare?
No. bcrypt è una funzione unidirezionale. L’unico modo per recuperare una password è indovinarla e calcolare l’hash di ogni tentativo, ed è proprio questo che il fattore di costo rende lento.
Che fattore di costo devo usare?
Almeno 10, e di più se il tuo server resta abbastanza veloce. Misura sull’hardware di produzione: i tempi mostrati qui riflettono JavaScript nel tuo browser, di solito più lento di un server.
Gli hash $2a$, $2b$ e $2y$ sono intercambiabili?
Per password sotto i 256 byte danno lo stesso risultato, e questo strumento li verifica tutti e tre. $2b$ ha corretto un bug di overflow della lunghezza nell’implementazione di OpenBSD, e $2y$ è il nome usato da PHP per un’implementazione corretta.
È sicuro scrivere qui una password vera?
Tutto avviene in locale e nulla viene inviato o salvato. Per gli account reali, però, è buona abitudine fare le prove con una password di esempio piuttosto che con una che usi davvero.
Strumenti correlati
- Generatore di hash Genera hash MD5, SHA-1, SHA-256 e SHA-512 di testi o file di qualsiasi dimensione e verifica i checksum. Tutto avviene nel tuo browser.
- Generatore di password Generatore di password gratuito che crea password casuali e robuste da 4 a 128 caratteri nel browser, con un RNG sicuro. Nulla viene salvato o inviato.
- Verifica sicurezza password Verifica quanto è sicura la tua password: punteggio, tempo stimato per violarla in quattro scenari di attacco e consigli concreti, tutto nel browser.
- Generatore HMAC Calcola un HMAC-SHA1, SHA-256, SHA-384 o SHA-512 con chiave testo, hex o Base64, ottieni output hex e Base64 e verifica la firma di un webhook nel browser.