Un bug en la librería OpenSSL permite factorizar una clave RSA 1024 bits en 20 minutos

Escrito por Sergio De Luz
Seguridad

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.

La herramienta se llamada RSAhack y se puede descargar el programa Python desde GitHub de forma gratuita. En el siguiente vídeo se puede ver una demostración de su funcionamiento:

Os recomendamos visitar la página web oficial del autor de esta herramienta.

Actualización:

Parece ser que el autor cometió un error y la vulnerabilidad de RSA en OpenSSL no existe, de hecho se ha eliminado la entrada.


Continúa leyendo
  • Nova6K0

    OpenSSL. Eso que entre otras cosas, usa el eDNI o DNI Electrónico. Por cierto el lumbreras que hizo lo de dividir la clave, vamos, tela.

    Salu2

  • Uno

    En vuestra linea, sin comprobar lo que decis.

    Donde decis “Para un ataque a una clave de 1024 bits deberemos atacar una de 512 bits.” es falso. Se divide el tamaño en dos numeros, p y q, de tamaño 1025/2. Sigues necesitando atacar p y q que son cada uno de 512. Y aún no sabemos exactamente en que consiste el fallo que han publicado. Pero ni mucho menos es un ataque a 512 bits.

    Donde decis “La herramienta se llamada RSAhack y se puede descargar el programa Python desde GitHub de forma gratuita. En el siguiente vídeo se puede ver una demostración de su funcionamiento:” es falso. El código enlazado es un pequeño script en python para manejar claves RSA, sin más.

    • Cristian Amicelli

      Exacto la herramienta es solo un PoC, no es funcional totalmente. lamento que se preste a confunción

      • Uno

        No, no es ni un PoC. Es un código genérico para manejar claves de RSA.

        • Cristian Amicelli

          si es Genérico, solo recibe los números primos y el exponente publico, nada más que eso.-

  • Cristian Amicelli

    No es Factorización, es simplemente Fuerza Bruta, ya teniendo una lista de números primos y es en donde radica la dificultad de este ataque que es contar con todos los números primos, el vídeo es solo un PoC a modo demostración, en ningún caso mensione que es factorización, puede corregir esa información.-

    • Hola,

      He modificado esa información y puesto que es por fuerza bruta.

      • Cristian Amicelli

        hola Sergio, perdona la molestia, te explico, el ataque se puede realizar en base a la lista de números primos que se tenga, no es siempre tan rápido, puede que tarde meces, inclusive años, el vídeo se utiliza una clave que esta preparada para realizar la demo

        • Hola Cristian,

          Gracias por tu aclaración, espero que nuestros lectores lo tengan en cuenta 🙂

    • juli

      Cristian, por favor aclara publicamente que tu video encuentra el modulo a partir de una lista de primos previamente generada donde estan los factores de esa clave.

  • Peter

    La demostración de navajanegra fue un timo enorme. Un “truco de magia” bonito.

    La frase que se obtuvo no fue la original, pero la mayoría de los ponentes ni se dieron cuenta…

    ¿Fallo en OpenSSL?? NO, NO y NO.

    Además la formación en criptografia de Cristian Amicelli es más que justita…

    • juli

      Muchos timos de hacking se originan en España 🙁 La calidad de las presentaciones es pesima, se perdonan las mentiras

      • Román Ramírez

        ¿Muchos? ¿cuáles? ¿qué presentaciones?

        Esto sí es un comentario atrevido y falto de rigor, y te lo digo yo que organizo uno de los eventos más importantes que se hacen en España y en Europa.

        Cita ejemplos de esa supuesta calidad pésima y de esos timos, que me encantará ponerte en tu sitio.

  • juli

    Por favor eliminen este artículo es todo una gran confusión y algunas mentiritas

  • Dos

    ¿Que hacéis aún con la noticia publicada? Ya se ha desmentido, consultad el hilo de reddit que habéis mal-copiado. Además seguís teniendo el fallo, en ningún momento se dijo que se redujese la complejidad del ataque a 512 bits. Son dos números primos p y q cada uno de 512 bits que al multiplicarlos se obtiene una clave de 1024 bits.

    El “fallo” consistía en la posibilidad de sacar todos los primos de 512 ya que es un numero fijo, pero no hay disco duro suficiente en este planeta para ello, y para atacar simplemente ir multiplicándolos en vez de calculándolos.

    • Hola,

      Nunca se eliminan las noticias, y menos cuando hay una gran cantidad de comentarios constructivos 🙂

      Ah! y no lo copiamos de Reddit como dices, nos hicimos eco de la página web oficial, en Reddit no daban tantos datos 😉