it-swarm.dev

Come eseguire l'hashing sicuro delle password?

Se ho le password di hash prima di memorizzarle nel mio database, è sufficiente per impedire che vengano recuperate da nessuno?

Vorrei sottolineare che ciò si riferisce solo al recupero direttamente dal database e non a qualsiasi altro tipo di attacco, come ad esempio la forzatura della pagina di accesso dell'applicazione, il keylogger sul client e, naturalmente, rubberhose cryptanalysis (o oggi dovremmo chiamarlo " Chocolate Cryptanalysis ").

Naturalmente qualsiasi forma di hash non impedirà quegli attacchi.

850
AviD

si dice che bcrypt sia più lento sulle GPU, il che rende più lenta la forzatura bruta. Tuttavia, con l'hardware del computer in continua evoluzione, non dovremmo fare affidamento solo sulla difficoltà di implementare un particolare algoritmo di hashing su un determinato hardware.

Piuttosto, è possibile aumentare arbitrariamente il costo per il bruteforcing di un hash utilizzando il "lavoro variabile/fattore di costo" (a volte chiamato anche "round") che alcune funzioni di hash supportano. Tra questi ci sono bcrypt e SHA-512.

La funzione crypt() di Glibc consente di specificare i round per alcuni algoritmi di hash. Ad esempio, un fattore di costo di 100000 per SHA-512 rende la generazione (e quindi la forza bruta) dell'hash circa 4 volte più lenta del fattore di costo 08 per bcrypt. Ciò può essere confermato utilizzando un programma di risoluzione hash come hashcat.

Se supponi che a un certo punto gli hash e i sali della tua password vengano rubati e gli aggressori utilizzeranno ASIC per potenziarli, devi semplicemente aumentare il fattore di lavoro per renderlo ancora troppo costoso per loro, senza sovraccaricare la CPU del server con la normale autenticazione dell'utente.

L'importanza di password lunghe e casuali si applica comunque.

Ho appena scritto un post sul blog sui dettagli.

0
Michael Franzl