¿Es seguro un rand del rand de glibc para una clave de inicio de sesión?

9

La misma pregunta que es una rand de / dev / urandom secure para una clave de inicio de sesión , pero con la función rand de glibc en lugar de /dev/urandom . ¿Y cuál sería un generador de semillas suficientemente seguro?

    
pregunta Robin Green 01.07.2011 - 14:55
fuente

2 respuestas

14

No. El PRNG en las bibliotecas típicas de C está diseñado para la velocidad, no para la seguridad. Por lo general, es apropiado para juegos y simulaciones numéricas (en implementaciones de buena calidad; existen implementaciones, en su mayoría antiguas, donde no es apropiado para nada), pero no para la criptografía. Un PRNG criptográfico debe ser impredecible, es decir, un atacante que genere una serie de números no debe ser capaz de hacer un bien Adivina el siguiente número. El PRNG típico de la biblioteca de C busca la velocidad y buenas propiedades estadísticas, pero no la impredecibilidad.

A partir de Glibc 2.7, rand y sus amigos usan un PRNG congruente lineal o registro de desplazamiento de retroalimentación lineal dependiendo de la longitud de semilla disponible.

Para generar material clave o cualquier otro número aleatorio involucrado en la criptografía (incluidas cosas no secretas como nonces que aún así deben ser impredecibles), obtenga todos los bits de un RNG de calidad criptográfica. El /dev/urandom de Linux (o cualquier otro unix que tenga /dev/urandom ) está bien para eso. Debe utilizarlo para cada byte de cada clave; usarlo como semilla de la biblioteca C PRNG no es bueno (habría una fuerte correlación entre las teclas). Una biblioteca como OpenSSL es otra opción; Probablemente use /dev/urandom bajo el capó como semilla, pero puede ser un poco más rápido si está generando grandes volúmenes de datos aleatorios.

    
respondido por el Gilles 01.07.2011 - 15:25
fuente
5

¡No! rand() es totalmente inseguro. El uso de rand() para este propósito ha causado vulnerabilidades principales en los sistemas principales .

Solo usa /dev/urandom .

    
respondido por el D.W. 02.07.2011 - 09:11
fuente

Lea otras preguntas en las etiquetas