Quando ti registri su un sito serio, accade una cosa che forse non immagini: il sito non conserva la tua password. Non la conosce, non può leggerla, non potrebbe rispedirtela nemmeno volendo. Sembra un paradosso, ma è la base della sicurezza degli account. Vediamo come funziona.

Hash non è cifratura

La password non viene "cifrata" (operazione reversibile), ma trasformata con una funzione di hash: un calcolo a senso unico che produce una stringa irriconoscibile e non reversibile. Dall'hash non si può risalire alla password originale.

Perché bcrypt

bcrypt è uno degli algoritmi standard per questo scopo. Ha due qualità chiave: aggiunge un "sale" (un dato casuale unico per ogni utente, così due password uguali producono hash diversi) ed è volutamente lento, per rendere antieconomico provare miliardi di combinazioni.

const hash = await bcrypt.hash(password, 12);
// nel database finisce solo l'hash, mai la password

"Zero-knowledge": il sito non sa la tua password

Al login il sistema applica lo stesso calcolo alla password inserita e confronta gli hash. Se combaciano, sei tu — senza che la password sia mai stata memorizzata in chiaro. È il principio "zero-knowledge".

Tarare il cost factor

La forza di bcrypt sta nel parametro di costo, che va scelto sull'hardware di produzione: un valore che tiene la verifica intorno ai 250-300 millisecondi resta impercettibile all'utente e rende il brute force enormemente costoso. Va rivisto nel tempo, perché l'hardware degli attaccanti migliora. Due dettagli spesso ignorati: bcrypt considera solo i primi 72 byte della password, e per progetti nuovi Argon2id è oggi la scelta preferibile.

Leggi anche: password mai in chiaro e confronti a tempo costante.