Hace unos años pregunté aquí en stackoverflow sobre cómo hacer que el almacenamiento de contraseñas PHP sea seguro. El main answer sugiere utilizar el siguiente algoritmo hashing:PHP Almacenamiento de contraseñas con HMAC + nonce - ¿Es importante la aleatoriedad de nonce?
function hash_password($password, $nonce) {
global $site_key;
return hash_hmac('sha512', $password . $nonce, $site_key);
}
La respuesta sugiere el uso de un azar nonce . ¿Hay alguna ventaja en tener un nonce aleatorio sobre simples nonces únicos?
Por ejemplo, cada usuario puede tener su propia identificación que no cambia. Sin embargo, supongamos que los ID de usuario son secuenciales (creados con la función de incremento automático de MySQL) y, por lo tanto, no son aleatorios. ¿La identificación del usuario sería buena o la aleatoriedad es importante?
Ahora, cada usuario puede elegir un nombre de usuario. Cada usuario tiene su propio nombre de usuario que no cambia, y dos usuarios diferentes no pueden tener el mismo nombre de usuario. Los nombres de usuario aún no son aleatorios, pero tampoco son secuenciales. ¿Serán los nombres de usuario lo suficientemente buenos como para ser un nonce? ¿Sería mejor que usar la ID de usuario?
Su nonce debería ser una sal. Una sal es aleatoria por definición. He escrito una respuesta larga acerca de la salazón aquí: http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 – Jacco