La semana pasada se celebró uno de los congresos más
importantes en España de seguridad informática, la conocida Navaja Negra 2014.
En esta conferencia, uno de los miembros de la organización presentó una
herramienta que permite explotar una vulnerabilidad en RSA de 1024 bits de
longitud de clave en la librería OpenSSL. Con esta herramienta se puede atacar
por fuerza bruta la clave RSA en unos 20 minutos con la potencia de un
ordenador portátil.
La herramienta explota un fallo en la implementación de
RSA en OpenSSL, este fallo se encuentra actualmente en todas las versiones y se
realiza a través de fuerza bruta. Cuando OpenSSL genera una clave de RSA
utiliza la función rsa_builtin_keygen que se encuentra dentro de
/crypto/rsa/rsa_gen.c
static int
rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb)
{
BIGNUM
*r0=NULL,*r1=NULL,*r2=NULL,*r3=NULL,*tmp;
BIGNUM local_r0,local_d,local_p;
BIGNUM *pr0,*d,*p;
int bitsp,bitsq,ok= -1,n=0;
BN_CTX *ctx=NULL;
ctx=BN_CTX_new();
if (ctx == NULL) goto err;
BN_CTX_start(ctx);
r0 = BN_CTX_get(ctx);
r1 = BN_CTX_get(ctx);
r2 = BN_CTX_get(ctx);
r3 = BN_CTX_get(ctx);
if (r3 == NULL) goto err;
bitsp=(bits+1)/2;
bitsq=bits-bitsp;
En la parte final se puede ver que para una clave de
1024 bits, se divide por 2 la longitud de la clave por lo que tendremos dos
claves, una de 512,5 bits y otra 511,5 bits. Para un ataque a una clave de 1024
bits deberemos atacar una de 512 bits. En otras implementaciones como GNUPG se
han dado cuenta de este error y en su librería sí está corregido este fallo.
Más información
- La
herramienta se llamada RSAhack y se puede descargar el programa Python
desde GitHub de forma gratuita. https://github.com/Nutr1x/CreateRSAPrivate
- Pagina
ofical autor heerramienta http://www.cristianamicelli.com.ar/blog/rsahack/
- Video
demostación funcionaminto herramienta http://www.youtube.com/watch?feature=player_embedded&v=0CNVG3kbQY4#t=0