Glossario

Cos'è bcrypt?

bcrypt è una funzione di Password Hashing basata sul cifrario a blocchi Blowfish che incorpora un salt integrato e un fattore di costo configurabile, progettata per essere computazionalmente costosa in modo da resistere specificamente all'accelerazione tramite GPU e hardware dedicato.

Noto anche come: bcrypt hash, Blowfish crypt

bcrypt è stato progettato nel 1999 da Niels Provos e David Mazieres appositamente per il Password Hashing, in un'epoca in cui la maggior parte dei sistemi usava funzioni di hash veloci come MD5 o SHA-1. L'innovazione chiave era il fattore di costo — un parametro che controlla quante iterazioni del key setup Blowfish sottostante vengono eseguite. Ogni incremento del fattore di costo raddoppia il tempo di calcolo, permettendo ai difensori di scalare la difficoltà all'aumentare della velocità dell'hardware.

Ciò che distingue bcrypt da PBKDF2 è la resistenza all'accelerazione GPU. PBKDF2 usa operazioni HMAC che si mappano bene sulle architetture GPU, consentendo agli attaccanti con GPU consumer di ottenere un massiccio parallelismo. Il key schedule basato su Blowfish di bcrypt richiede accessi frequenti a una tabella di stato da 4 KB che deve essere modificata durante il calcolo. Questo pattern di accesso alla memoria non si parallelizza efficientemente sulle GPU, costringendo gli attaccanti a tornare alla velocità della CPU.

bcrypt produce una stringa di 60 caratteri che codifica insieme la versione dell'algoritmo, il fattore di costo, il salt e l'hash — rendendolo autocontenuto e portabile. Un tipico hash bcrypt ha l'aspetto $2b$12$..., dove 12 è il fattore di costo. Il fattore di costo minimo attualmente raccomandato è 10 (circa 100 ms per hash su hardware moderno), anche se 12-14 è comune per applicazioni che possono tollerare tempi di login leggermente più lenti. bcrypt è disponibile in praticamente ogni linguaggio di programmazione e rimane uno degli algoritmi di Password Hashing più diffusi.

Come Vaulted usa bcrypt

Vaulted usa PBKDF2 invece di bcrypt per la derivazione delle chiavi basata su passphrase, perché PBKDF2 è disponibile nativamente tramite la Web Crypto API nei browser, mentre bcrypt non lo è. La Web Crypto API non espone bcrypt, quindi usarlo richiederebbe un'implementazione JavaScript che rinuncia ai vantaggi di sicurezza dell'esecuzione nativa a tempo costante. Per le applicazioni server-side che fanno l'hash delle password per l'autenticazione, bcrypt rimane una scelta eccellente — ma per la derivazione di chiavi lato client nel browser, PBKDF2 tramite Web Crypto è l'approccio standard.