Ciò che il poster del blog probabilmente significa è che dovresti eseguire l'hash della password fornita quando l'utente tenta di accedere e dovrai eseguire tale hash per ogni tentativo di accesso, poiché il server memorizza solo l'hash.
È possibile, ma non è probabile, che l'autore intendesse davvero cambiare il sale e ricalcolare un nuovo hash ad ogni accesso, il che sarebbe piuttosto stupido, spiegando perché lo considero "improbabile". Ma hey, questo è Internet, tutto può succedere.
Il post del blog è parzialmente giusto. Sì, hai bisogno di un hash lento e salato . Ma no, un ciclo di hashing fatto in casa non può essere perdonato. Gli algoritmi crittografici non devono essere improvvisati; fatto in casa è cattivo . Ciò che deve essere usato è una costruzione ben controllata che è stata ispezionata da molti crittografi per molto tempo. Vedi questa risposta per i dettagli sulle solite soluzioni. In PHP, questo significa utilizzare la funzione crypt()
con il parametro CRYPT_BLOWFISH
.
(Oltre alla necessità di usare costruzioni standard, è anche importante usare un'implementazione fast , poiché l'intero concetto di hashing lento è una competizione muscolare tra la macchina dell'attaccante e la macchina del difensore. L'utilizzo delle funzioni standard di PHP consente l'accesso alle implementazioni di codice nativo, che saranno molto più efficienti di qualsiasi altra cosa scritta in PHP.)