El fallo en la implementación OpenSSL de Debian fue introducido en la versión 0.9.8c-1 de septiembre de 2006. Al intentar solucionar un código aparentemente incorrecto con la herramienta Valgrind, se eliminó por error una línea crucial para el sustento entrópico de OpenSSL que nada tenía que ver. En mayo de 2008 Luciano Bello, desarrollador de Debian, daba la voz de alarma. Todas las claves generadas durante ese intervalo de tiempo (unos 20 meses) se reducían aun conjunto muy limitado de posibilidades, que las hacía fácilmente deducibles a través de fuerza bruta.
A Ruby le ha pasado más o menos lo mismo, pero (al menos) durante mucho menos tiempo. Un error en la implementación de OpenSSL (en el cáluclo de claves con RSA, concretamente) hace que la entropía de las claves calculadas sea menor.
En la página del SVN de los desarrolladores se podía leer:
ext/openssl/ossl_pkey_rsa.c (rsa_generate): [SECURITY] Set RSA exponent value correctly. Awful bug. This bug caused exponent of generated key to be always ‘1’. By default, and regardless of e given as a parameter. !!! Keys generated by this code (trunk after 2011-09-01) must be re-generated !!! (ruby_1_9_3 is safe)
Lo que quiere decir que en el cálculo de las claves con el algoritmo RSA, se hace que un exponente sea siempre «1», independientemente del parámetro «e» usado. La línea concreta que ha causado el estropicio ha sido:
for (i = 0; i < (int)sizeof(exp); ++i) { que, al ser corregida, se ha convertido en: for (i = 0; i < (int)sizeof(exp) * 8; ++i) { Ahora, los usuarios de Ruby que hayan usado esta implementación para el cálculo de claves durante estas últimas semanas, tendrán que revocar las antiguas y generar nuevas, además de comprobar toda la seguridad de cualquier sistema que hayan querido proteger mediante criptografía simétrica.