Sto pensando di implementare uno schema di riciclaggio del sale sul mio database delle credenziali utente. La motivazione alla base di questa decisione è che anche se l'hacker riesce a mettere le mani sul database e ha abbastanza tempo per craccare una password o due, nel momento in cui fa il sale sarà resettato e il suo i risultati saranno inutili.
Il mio attuale codice di registrazione dell'utente è il seguente (pseudocodice con PHP):
function getSalt($username){
$salt=$username.getFromUrandom($SALT_RANDOM_READ); //64 bytes
$salt=sha256($salt);
return $salt;
}
function setPass($username, $salt, $pass){
$pass=bcrypt($BCRYPT_WORK_FACTOR, $pass, $salt); //factor is set to 8 for now
store_to_db($username, $pass);
}
setPass($username, getSalt($username), $plainpass);
Quello che mi propongo di fare è, invece di cambiare semplicemente il fattore per tenere il passo con la legge di Moore, anche cambiare il sale ogni pochi giorni circa. Ovviamente ciò andrebbe a vantaggio solo degli utenti regolari che accedono ogni due giorni. Nel codice:
if(today() - getLastLogin() > $SALT_CHANGE_THRESHOLD || /*work factor increased*/)
setPass($username, getSalt($username), $plainpass); //as above
Le mie domande:
- Quante volte dovrebbe cambiare un sale? Sono tentato di farlo ogni giorno, ma sono preoccupato che potrebbe essere un po 'eccessivo
- Sta cambiando abbastanza il sale per fare a meno della reimpostazione della password ogni due mesi? Non lo implementerò perché so che gli utenti lo trovano fastidioso e potrebbe costringerli a selezionare una password che in seguito potrebbero dimenticare.
Come ho detto sopra, gli utenti non di ritorno non trarranno beneficio da questo. Anche gli utenti che utilizzano la stessa password con un altro servizio compromesso non trarranno alcun vantaggio, ma non sono preoccupato.
Sono anche molto tentato di utilizzare l' elenco di password più comuni e di impedire agli utenti di selezionare nessuno di loro al fine di proteggere dall'uso di password compromesse (anche se l'utilizzo di tutti i 10000 è un po 'estremo).