Sicurezza web

bcrypt

Definizione

bcrypt è una funzione di hash progettata per memorizzare le password. Integra un salt casuale e un fattore di costo regolabile che rende ogni calcolo volutamente lento, frenando molto gli attacchi su un database rubato. WordPress lo usa come impostazione predefinita dalla versione 6.8.

bcrypt, Sicurezza web

bcrypt è stato presentato nel 1999 da Niels Provos e David Mazières, del progetto OpenBSD, in un articolo intitolato «A Future-Adaptable Password Scheme». L’idea centrale sta tutta nel titolo: una funzione di hash per le password deve poter diventare più lenta man mano che i computer diventano più veloci. Mentre una funzione rapida come SHA-256 permette a un attaccante di provare miliardi di candidati, bcrypt rende costoso ogni tentativo, per lui come per il server.

Come funziona bcrypt

bcrypt si basa su una variante dell’algoritmo di cifratura Blowfish, la cui preparazione delle chiavi è volutamente onerosa. Nel calcolo entrano tre elementi:

  • la password, di cui vengono considerati solo i primi 72 byte;
  • un salt casuale, generato per ogni password;
  • un fattore di costo: ogni unità in più raddoppia il tempo di calcolo.

Il risultato contiene tutto ciò che serve per verificare la password in seguito: l’identificativo dell’algoritmo ($2y$ in PHP), il costo, il salt e l’hash. La funzione password_verify() rilegge questi parametri e rifà il calcolo, senza bisogno di memorizzare il salt a parte.

$hash = password_hash( $password, PASSWORD_BCRYPT ); // costo 12 predefinito da PHP 8.4
password_verify( $inserita, $hash ); // true o false

bcrypt a confronto con gli altri algoritmi

Il cheat sheet dell’OWASP sulla memorizzazione delle password indica Argon2id come prima scelta, poi scrypt, e riserva bcrypt ai sistemi esistenti, con un fattore di costo di almeno 10 e un’attenzione particolare al limite dei 72 byte. bcrypt resta comunque molto diffuso perché è disponibile ovunque: è l’unico algoritmo che PHP garantisce su tutte le installazioni. In ogni caso protegge molto meglio di una funzione rapida come MD5 o SHA-1 usata da sola, che si può calcolare a ritmi enormi su una scheda grafica.

Per WordPress

Per anni WordPress ha usato la libreria phpass, basata su MD5 con numerose iterazioni. WordPress 6.8, pubblicato il 15 aprile 2025, è passato a bcrypt per le password degli utenti. I dettagli, pubblicati sul blog degli sviluppatori del core:

Schema in quattro livelli: la password inserita passa per un pre-hash HMAC-SHA384 codificato in base64 per aggirare il limite dei 72 byte, poi per bcrypt con un salt casuale e un fattore di costo, e l’hash memorizzato inizia con $wpy$ seguito da costo, salt e risultato
Il percorso di una password in WordPress 6.8 e versioni successive.
  • La password viene prima sottoposta a un pre-hash HMAC-SHA384 e poi codificata in base64, così le password più lunghe di 72 byte conservano tutta la loro entropia.
  • Gli hash hanno il prefisso $wp$2y$, che li distingue da un bcrypt classico.
  • I vecchi hash phpass restano accettati e vengono convertiti in bcrypt al login successivo o al prossimo cambio di password di ciascun utente.
  • Le password per le applicazioni, le chiavi di reimpostazione e alcuni altri token usano un’altra funzione, BLAKE2b tramite la libreria Sodium; le password per le applicazioni già create non vengono convertite automaticamente.
  • Il filtro wp_hash_password_algorithm permette di scegliere Argon2id se il server lo supporta, e wp_hash_password_options di regolare i parametri, come il costo.

Da parte tua non serve alcun intervento. Tieni solo presente che un ritorno a WordPress 6.7 o precedente impedirebbe agli utenti già convertiti di accedere finché non reimpostano la password. Il nostro articolo su wp-config.php torna su questo cambiamento e sulle chiavi di sicurezza del file.

Cosa bcrypt non fa

bcrypt protegge le password dopo una fuga del database: rallenta il loro recupero offline. Non fa nulla contro un attacco brute force online sulla pagina di login, né contro una password già presente in un data breach e riutilizzata altrove, la base del credential stuffing. Per questo servono password uniche, la limitazione dei tentativi e l’autenticazione a due fattori, che WP Masquerade Pro offre insieme alla limitazione dei tentativi di login.

Per approfondire

  • Articolo wp-config.php: le impostazioni di sicurezza che contano davvero
  • Pagina Protezione brute force per WordPress

Fonti

  1. Make WordPress Core: WordPress 6.8 will use bcrypt for password hashing (link esterno, si apre in una nuova scheda)
  2. WordPress Developer Resources: wp_hash_password() (link esterno, si apre in una nuova scheda)
  3. OWASP: Password Storage Cheat Sheet (link esterno, si apre in una nuova scheda)
  4. USENIX 1999: A Future-Adaptable Password Scheme (Provos et Mazières) (link esterno, si apre in una nuova scheda)

Tutte le definizioni

Sicurezza WordPress, senza rumore

Un’email quando conta: nuovi attacchi osservati, aggiornamenti del plugin e guide pratiche. Niente spam, disiscrizione con un clic.

Inizia gratis, passa a Pro quando sei pronto

La versione gratuita nasconde già WordPress e sposta la pagina di login. Pro aggiunge alias, autenticazione a due fattori e monitoraggio.