La forma correcta de generar un salt para el hashing de contraseñas es: no lo haga usted mismo. Usa una biblioteca que ya hace las cosas correctamente. Vea la respuesta de @Terry para los punteros.
Para su pregunta exacta, sucede que openssl_random_pseudo_bytes()
se basa en el PRNG interno de OpenSSL, que a su vez alimenta qué La plataforma subyacente proporciona, es decir, dev/urandom
, por lo que es segura. Hablando estrictamente, debe usar el segundo parámetro de esa función para verificar si OpenSSL sí encontró una fuente fuerte de aleatoriedad en la plataforma local (consulte la documentación ), pero en la práctica, mientras OpenSSL se ejecute en una plataforma similar a Unix o Windows, todo irá bien. Por lo tanto, realmente no importa, por seguridad, si llama a openssl_random_pseudo_bytes()
o lee /dev/urandom
usted mismo. Por motivos de mantenimiento, preferiría el primero, que es más simple (solo una llamada) y más portátil (también funcionará en Windows, mientras que leer /dev/urandom
no).
De cualquier manera, la aplicación de SHA-1 en la salida de openssl_random_pseudo_bytes()
o /dev/urandom
, es totalmente inútil. Un buen PRNG ya produce bytes aleatorios uniformes impredecibles (y si su PRNG no es bueno, ¿por qué lo usa?).