Alcuni anni ho chiesto qui su StackOverflow su come rendere sicuro lo storage di password PHP. Il main answer suggerisce di utilizzare il seguente algoritmo di hashing:Memorizzazione password PHP con HMAC + nonce - La casualità della nonce è importante?
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
La risposta suggerisce di utilizzare un casuale nonce . C'è qualche vantaggio nell'avere un nonce casuale su semplici nonce univoci?
Ad esempio, ogni utente può avere il proprio ID che non cambia. Tuttavia, supponiamo che gli ID utente siano sequenziali (creati con la funzione di incremento automatico di MySQL) e quindi non casuali. L'ID utente sarebbe un buon nonce o la casualità è importante?
Ora, ogni utente può scegliere un nome utente. Ogni utente ha il proprio nome utente che non cambia e due utenti diversi non possono avere lo stesso nome utente. I nomi utente non sono ancora casuali, ma non sono nemmeno sequenziali. I nomi utente sarebbero abbastanza buoni come nonce? Sarebbe meglio che usare l'ID utente?
Il tuo nonce dovrebbe essere un sale. Un sale è casuale per definizione. Ho scritto una lunga risposta su salting qui: http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 – Jacco