¿Debo usar urandom () o openssl_random_pseudo_bytes ()?

6

Estoy desarrollando un sitio en PHP 5.4. ¿Qué función es mejor usar para generar un sal aleatorio para la seguridad de la contraseña?

$salt = sha1(openssl_random_pseudo_bytes(23));

o

$seed = '';
$a = @fopen('/dev/urandom','rb');
$seed .= @fread($a,23);
$salt = sha1(seed);

O debería simplemente ir con:

$salt =  openssl_random_pseudo_bytes(40);

o

$salt = '';
$a = @fopen('/dev/urandom','rb');
$salt .= @fread($a,23);
    
pregunta John 30.12.2012 - 09:51
fuente

2 respuestas

7

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 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?).

    
respondido por el Thomas Pornin 30.12.2012 - 15:58
fuente
3

Nota: Esto no responde exactamente a la pregunta.

Intenta no rodar tu propia criptografía. Ya que está usando PHP, está disponible una gran biblioteca bcrypt - phpass que se encargará del aspecto de hashing de contraseña, incluido Generando sales.

    
respondido por el Ayrx 30.12.2012 - 09:54
fuente

Lea otras preguntas en las etiquetas