Hace 3 años, se descubrió un gravísimo error en la implementación de
OpenSSL de Debian que limitaba dramáticamente la entropía de las claves
calculadas. Ahora, los programadores de Ruby han cometido un fallo muy
similar que han calificado de "horrible".
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.Más información:
Revision 33633
http://svn.ruby-lang.org/cgi-bin/vie...revision=33633