¿Por qué LibreSSL PRNG no es seguro en Linux?

8

Del artículo El PRNG de LibreSSL no es seguro en Linux .

  

La primera versión de LibreSSL portable, 2.0.0, se lanzó hace unos días (seguida poco después por 2.0.1). A pesar de los números de versión 2.0.x, estos son solo lanzamientos de vista previa y no deben usarse en producción todavía, pero se han lanzado para solicitar pruebas y comentarios. Después de probar y examinar el código base, mi opinión es que el LibreSSL PRNG no es robusto en Linux y es menos seguro que el OpenSSL PRNG que reemplazó.

     

Considere un programa de prueba, fork_rand. Cuando se vincula con OpenSSL, dos llamadas diferentes a RAND_bytes devuelven datos diferentes, como se esperaba:

$ cc -o fork_rand fork_rand.c -lcrypto $ ./fork_rand Grandparent (PID = 2735) random bytes = f05a5e107f5ec880adaeead26cfff164e778bab8e5a44bdf521e1445a5758595 Grandchild (PID = 2735) random bytes = 03688e9834f1c020765c8c5ed2e7a50cdd324648ca36652523d1d71ec06199de
     

Cuando el mismo programa está vinculado con LibreSSL, dos llamadas diferentes a RAND_bytes devuelven los mismos datos, lo cual es una falla catastrófica del PRNG:

$ cc -o fork_rand fork_rand.c libressl-2.0.1/crypto/.libs/libcrypto.a -lrt $ ./fork_rand Grandparent (PID = 2728) random bytes = f5093dc49bc9527d6d8c3864be364368780ae1ed190ca0798bf2d39ced29b88c Grandchild (PID = 2728) random bytes = f5093dc49bc9527d6d8c3864be364368780ae1ed190ca0798bf2d39ced29b88c

Y:

  

Desafortunadamente, cuando sugerí el segundo cambio en Hacker News, un desarrollador de LibreSSL respondió:

     
    

La presencia o la necesidad de una función [RAND_poll] se debe considerar un defecto de diseño grave.

  

Pregunta: ¿Este error es un error de diseño en Linux o fue un error cometido por los desarrolladores de LibreSSL?

    
pregunta evachristine 16.08.2014 - 11:56
fuente

2 respuestas

3

Diferencias filosóficas. LibreSSL está diseñado bajo la filosofía de que una biblioteca SSL debería ser una biblioteca SSL, y nada más. Esto significa que no intenta implementar la mitad de libc, ni proporciona otras facilidades a nivel del sistema operativo, y no debe compensar las fallas en el sistema operativo; el sistema operativo debe ser reparado en su lugar. Un grupo de entropía de alta calidad es una de las instalaciones que debe proporcionar el sistema operativo.

Dicho esto, describir RAND_bytes como "inseguro" es exagerar las cosas. Solo es inseguro bajo Linux en condiciones muy limitadas:

  1. El programa utiliza el antiguo modelo de subprocesamiento fork / exec, en lugar del modelo pthreads más reciente.
  2. El programa debe tener una estructura en la que un proceso de abuelos desvíe un proceso principal y salga, luego el proceso principal inicia un proceso secundario que, por casualidad, obtiene el mismo PID que el abuelo. Esto es, para decirlo suavemente, una estructura de programa altamente inusual.
  3. Los procesos de abuelo y nieto usan PRNG de LibreSSL, mientras que el proceso entre ellos no lo hace. Esto es nuevamente una estructura de programa altamente inusual, ya que un programa típico realizará operaciones SSL exclusivamente en el abuelo (proceso de manejo de la conexión con un grupo de subprocesos de trabajo) o en los nietos (administrador de procesos con un grupo de subprocesos de manejo de la conexión) .
respondido por el Mark 16.08.2014 - 22:19
fuente
0

La respuesta es un poco turbia, en algún lugar entre los dos.

Linux ha expuesto históricamente el generador de números aleatorios del kernel como / dev / random y / dev / urandom, mientras que BSD lo expone con el sistema getentropy. Resulta que hay algunas ventajas para el enfoque BSD, y debido a la presión de LibreSSL, Linux implementará un syscall similar. más información

LibreSSL se enfoca principalmente en BSD, por lo que están favoreciendo el enfoque syscall. Otro principio del desarrollo de LibreSSL es que NO se esforzarán demasiado por la portabilidad o la compatibilidad con versiones anteriores. Supongo que su versión de Linux no tiene este syscall, y espero que LibreSSL no haga un gran esfuerzo para respaldar su versión de Linux.

    
respondido por el paj28 16.08.2014 - 19:51
fuente

Lea otras preguntas en las etiquetas