Vi un aviso de seguridad de OpenSSL para Openssl 0.9.6a
Markku-Juhani O. Saarinen, quien nos mostró cómo un atacante podría reconstruir el estado interno del PRNG a partir de la salida de una pareja, nos mostró una falla criptográfica en el generador de números pseudoaleatorios (PRNG) incorporado de OpenSSL. de cien solicitudes de PRNG de 1 byte. Este problema se remonta a SSLeay, en el que se basa OpenSSL, y también se encontró en otros kits de herramientas basados en SSLeay. Si bien se han realizado varias mejoras en el PRNG original durante el desarrollo de OpenSSL, hasta ahora se ha pasado por alto este error de diseño.
El PRNG (implementado en el archivo de código fuente crypto / md_rand.c) utiliza una función hash, de forma predeterminada SHA-1, para actualizar su estado secreto interno y generar resultados. El estado secreto consta de dos componentes: una variable de cadena 'md', dimensionada de acuerdo con la salida de la función hash (160 bits para SHA-1), y un 'estado' de búfer grande. 'md' siempre se reemplaza por una salida de función hash durante la operación de PRNG. Se accede a "estado" de forma circular y se utiliza para almacenar entropía adicional.
Al generar bytes de salida, las versiones de OpenSSL hasta 0.9.6a configuran 'md' al hash de la mitad de su valor anterior y algunos otros datos, incluidos los bytes desde 'estado'. El error de diseño fue que la mitad de la entrada 'md' a la función hash era la misma mitad que también se usó como salida PRNG, lo que significa que, en general, no puede considerarse secreta. Además, el número de bytes utilizados desde el "estado" dependía del número de bytes solicitados como salida de PRNG y podría ser tan pequeño como uno, lo que permite un fácil análisis de fuerza bruta de todos los casos posibles. La combinación de estos efectos hizo posible reconstruir el estado de PRNG interno completo desde la salida de una solicitud de PRNG con el tamaño adecuado para obtener conocimiento sobre 'md' seguido de suficientes solicitudes de PRNG de 1 byte consecutivas para atravesar todo el 'estado' .
Vea también: ID de alerta de SecurityTracker: 1001961