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?