¿Cuál es una buena manera de producir una "sal de sitio" aleatoria para usar en la creación de tokens de recuperación de contraseña?

Me gustaría crear un hash en todo el sitio para usarlo como sal en la creación de tokens de recuperación de contraseña. He estado rebotando en stackoverflow tratando de tener una idea de la mejor manera de hacer esto.

Aquí está el proceso de reinicio:

Cuando un usuario solicita un correo electrónico de restablecimiento de contraseña, el código genera un token de recuperación:

$token = hash_hmac('sha256', $reset_hash* , $site_hash)

* $ reset_hash es un hash creado con la función phpass HashPassword (), guardado en la tabla de usuario.

Luego envío el token en una URL a la dirección de correo electrónico de los usuarios. Hacen clic antes de que el token se agote en una hora. Coincido con su presentación con el token de desafío generado en el lado del servidor. Si coincide, se ven obligados a elegir una nueva contraseña y luego iniciar sesión.

Me gustaría saber la mejor manera de generar $ site_key. Estoy pensando en usar otro hash HMAC que se siembra por números aleatorios:

$site_key = hash_hmac('sha256', MCRYPT_DEV_RANDOM, MCRYPT_DEV_RANDOM);

Esto produce algo como esto:

98bb403abbe62f5552f03494126a732c3be69b41401673b08cbfefa46d9e8999

¿Será esto un azar apropiado para ser utilizado para este propósito? ¿Estoy complicando demasiado esto o me estoy acercando a él de la manera incorrecta?

Esta respuesta me inspiró a usar HMAC

EDITAR: Estoy tratando de evitar un paso de 'pregunta secreta' impulsado por algunos de mis compañeros de trabajo, por lo que me gustaría que el enlace de restablecimiento proporcione un solo paso para restablecer la contraseña. Por lo tanto, mi preocupación es que este proceso sea lo suficientemente seguro como para salvaguardar un sistema que contenga información confidencial.

RESUELTO, por ahora: Voy a ir con un nonce como lo describe The Rook como el token de reinicio. Gracias a todos por los comentarios y sugerencias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta