Le password non dovrebbero essere crittografate, dovrebbero essere sottoposte a hash. La crittografia può essere facilmente annullata se si ha la chiave - e un utente malintenzionato che è riuscito a rubare l'intero database probabilmente ha anche rubato la chiave. Un hash non può essere facilmente annullato.
Quando qualcuno tenta di accedere, il server non decrittografa la password memorizzata. Invece blocca la password fornita e verifica se corrisponde all'hash memorizzato della password.
Quindi, se una funzione di hash è progettata per essere difficile da invertire, perché le password finiscono in testo normale? A causa degli attacchi di forza bruta.
Se hai un hash, puoi semplicemente provare a cancellare tutte le password possibili e vedere se ottieni una corrispondenza. Potresti dover provare un paio di milioni prima di trovare una corrispondenza, ma prima o poi lo farai. Se utilizzi un elenco di password comuni e provi prima quelle, sarà rapido interrompere le password comuni come 123456
.
Per mantenere le tue password al sicuro, devi fare in modo che "prima o poi" significhi "così tardi che non vale la pena". Ciò viene fatto utilizzando le funzioni hash progettate intenzionalmente per essere lente anche sull'hardware moderno, in modo che il tentativo di eseguire milioni e milioni di password richiederebbe anni o addirittura millenni.
Tuttavia, molti siti utilizzano le funzioni hash brutte (che sono veloci, e quindi facili da forzare) o, peggio ancora, memorizzano semplicemente le password in testo semplice o semplicemente crittografate. Pertanto, un sacco di password finisce in chiaro nelle mani degli hacker.
Per ulteriori informazioni sull'hashing, consiglio questa domanda .