Rooted CON 2014 RSA cumple 36 años y se le ha ... - UPM · Las ecuaciones que rigen a RSA para...

29
RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 1 Rooted CON 2014 RSA cumple 36 años y se le ha caducado el carné joven Dr. Jorge Ramió - UPM - Criptored Madrid, viernes 7 de marzo de 2014 RESUMEN Se repasa la historia de este longevo algoritmo estándar de clave pública, que a pesar del paso del tiempo sigue resistiéndose ante ataques de todo tipo; desde aquellos con tintes muy académicos como la factorización entera o el ataque con un divide y vencerás mediante la paradoja del cumpleaños, que a fecha de hoy se muestran impracticables para claves grandes, hasta los más sofisticados y recientes ataques basados en el concepto de canal lateral, que en este caso sí son preocupantes. A pesar de ello y tras 36 años de vida, parece no vislumbrarse un cambio en el estándar, al menos a corto plazo. Y para cuando ello ocurra, que eso algún día va a ocurrir, ¿estaremos preparados o nos encontraremos ante otro Y2K o caso MD5? I. INTRODUCCIÓN Me preguntaba hace unos días un amigo de Palencia, de Villamuriel del Cerrato para ser más precisos donde por cierto vienen realizando unas espléndidas Jornadas de Seguridad desde hace tres años, que por qué le tengo tanto cariño a este algoritmo: mis apuntes de clases y en especial el capítulo de criptografía asimétrica del libro electrónico de 2006 [1], el curso El algoritmo RSA publicado en Crypt4you [2], el libro Cifrado de las comunicaciones digitales de la cifra clásica al algoritmo RSA [3] de 0xWord escrito con mi colega el Dr. Alfonso Muñoz, desarrollo de software para prácticas de laboratorio con dicho algoritmo a partir de trabajos fin de carrera de algunos alumnos [4], varias conferencias impartidas sobre este tema, etc. Una buena pregunta. La respuesta es muy sencilla y puede resumirse en tan sólo dos razones. La primera, que RSA es un sistema de cifra muy simple, cuya seguridad está basada en un principio matemático también muy simple y que todo el mundo es capaz de comprender: multiplicar dos números primos, aunque éstos sean de muchos dígitos, es una tarea fácil, que lógicamente nos va a requerir más tiempo si dichos números son cada vez más grandes pero, por el contrario, conocido ese número producto de dos primos, encontrar esos dos valores primos se transforma en una tarea muy difícil a medida que vamos haciendo ese número más grande. En otras palabras, que si en el primer caso se va duplicando el tamaño de la entrada se debe trabajar el doble en cada caso para hacer esos cálculos pero, en el segundo, este tiempo de cómputo va a aumentar más del doble, y cada vez más, convirtiéndose así en una operación de muy difícil resolución. El concepto difícil se aquí asocia tanto a la necesidad de tiempo requerido para resolver el problema como por los recursos de cómputo que son necesarios para tal fin, de manera que si hablamos de productos de dos primos del mismo o similar tamaño cuyo resultado esté por sobre los mil bits, esto es unos 300 dígitos decimales, dicho problema se vuelve literalmente intratable. Es lo que en matemática se denominan problemas de tipo NP o No Polinomial. Con

Transcript of Rooted CON 2014 RSA cumple 36 años y se le ha ... - UPM · Las ecuaciones que rigen a RSA para...

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 1

Rooted CON 2014 RSA cumple 36 años y se le ha caducado el carné joven

Dr. Jorge Ramió - UPM - Criptored Madrid, viernes 7 de marzo de 2014

RESUMEN Se repasa la historia de este longevo algoritmo estándar de clave pública, que a pesar del paso del tiempo sigue resistiéndose ante ataques de todo tipo; desde aquellos con tintes muy académicos como la factorización entera o el ataque con un divide y vencerás mediante la paradoja del cumpleaños, que a fecha de hoy se muestran impracticables para claves grandes, hasta los más sofisticados y recientes ataques basados en el concepto de canal lateral, que en este caso sí son preocupantes. A pesar de ello y tras 36 años de vida, parece no vislumbrarse un cambio en el estándar, al menos a corto plazo. Y para cuando ello ocurra, que eso algún día va a ocurrir, ¿estaremos preparados o nos encontraremos ante otro Y2K o caso MD5? I. INTRODUCCIÓN Me preguntaba hace unos días un amigo de Palencia, de Villamuriel del Cerrato para ser más precisos donde por cierto vienen realizando unas espléndidas Jornadas de Seguridad desde hace tres años, que por qué le tengo tanto cariño a este algoritmo: mis apuntes de clases y en especial el capítulo de criptografía asimétrica del libro electrónico de 2006 [1], el curso El algoritmo RSA publicado en Crypt4you [2], el libro Cifrado de las comunicaciones digitales de la cifra clásica al algoritmo RSA [3] de 0xWord escrito con mi colega el Dr. Alfonso Muñoz, desarrollo de software para prácticas de laboratorio con dicho algoritmo a partir de trabajos fin de carrera de algunos alumnos [4], varias conferencias impartidas sobre este tema, etc. Una buena pregunta. La respuesta es muy sencilla y puede resumirse en tan sólo dos razones. La primera, que RSA es un sistema de cifra muy simple, cuya seguridad está basada en un principio matemático también muy simple y que todo el mundo es capaz de comprender: multiplicar dos números primos, aunque éstos sean de muchos dígitos, es una tarea fácil, que lógicamente nos va a requerir más tiempo si dichos números son cada vez más grandes pero, por el contrario, conocido ese número producto de dos primos, encontrar esos dos valores primos se transforma en una tarea muy difícil a medida que vamos haciendo ese número más grande. En otras palabras, que si en el primer caso se va duplicando el tamaño de la entrada se debe trabajar el doble en cada caso para hacer esos cálculos pero, en el segundo, este tiempo de cómputo va a aumentar más del doble, y cada vez más, convirtiéndose así en una operación de muy difícil resolución. El concepto difícil se aquí asocia tanto a la necesidad de tiempo requerido para resolver el problema como por los recursos de cómputo que son necesarios para tal fin, de manera que si hablamos de productos de dos primos del mismo o similar tamaño cuyo resultado esté por sobre los mil bits, esto es unos 300 dígitos decimales, dicho problema se vuelve literalmente intratable. Es lo que en matemática se denominan problemas de tipo NP o No Polinomial. Con

2 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

un par de ejemplos básicos y unos números no tan grandes será más que suficiente para todo el mundo entienda a qué tipo de problema se están enfrentando; no hay que ser muy listos para ello. Y la segunda razón es que las matemáticas discretas que deben conocerse para comprender el funcionamiento de RSA son conceptos extremadamente básicos. Si te dicen que “un cuerpo” no es sólo el de Angelina Jolie o el de Brat Pitt, que sí lo son, sino que hay otros cuerpos compuestos en este caso por muchos ceros y muchos unos, y que cuando llegas al final de ese cuerpo ... no el de nuestros queridos amigos claro... no te caes al precipicio sino que vuelves al punto de origen donde habías comenzado tu recorrido, como sucede con un reloj cuando una aguja da toda una vuelta a la circunferencia, y comprendes de esta manera el concepto de un cuerpo finito o módulo n de cifra, pues ya tenemos mucho avanzado. Hay algún concepto más dentro de las matemáticas discretas conocido como inverso en un cuerpo (que no invertido… esto daría juego para varias interpretaciones y comentarios fuera de lugar) pero también de muy fácil comprensión. Si un número es el inverso de otro dentro de un cuerpo, entonces la operación de cifra que realizo con mi clave privada (firma digital) la pueden deshacer todos quienes conozcan mi clave pública (verificación de una firma), y la operación de cifra que realizo con la clave pública de un destinatario (envío de un número secreto, una clave de sesión por ejemplo) sólo la puede deshacer ese destinatario (intercambio de clave) usando su clave privada. Estos son los principios básicos de la criptografía de clave pública o criptografía asimétrica, simple como cualquier invento que se precie. Las ecuaciones que rigen a RSA para generar claves y cifrar o firmar no las veremos en este documento. Se pueden encontrar en infinidad de sitios en Internet, sin ir más lejos en el curso y libros comentados al comienzo. Lo importante es que, pese a su simpleza y con más de 36 años a sus espaldas, RSA sigue aguantando el paso del tiempo. De hecho, aunque Rivest, Shamir y Adleman lo inventan en 1977, el algoritmo se publica un mes de febrero de 1978 y por tanto en febrero de 2014 (coincidiendo con la Rooted CON 2014) ha cumplido ya 36 años. La idea de que si es algo es muy simple no va a funcionar ni se va a vender, o bien que debe tener algún truco escondido o debilidad y que tarde o temprano se descubrirá, con RSA no ha funcionado pues 36 años son muchos años, y en criptografía moderna eso es casi toda una eternidad. Ni el glorioso y controvertido DES puede presumir de esos datos en su currículum. Siendo un estándar ampliamente utilizado, RSA ha soportado todo tipo de ataques durante más tres décadas y media, logrando sortear tempestades, aunque eso sí haciendo uso de un procedimiento al que podríamos catalogar de algorítmicamente poco elegante pero efectivo, como es aumentar el tamaño de la clave o, mejor dicho, del módulo o cuerpo en el que se cifra. Es una solución, qué duda cabe, pero no podemos aumentar de forma indefinida el tamaño del módulo de trabajo porque la velocidad y las prestaciones del sistema se resentirían al ser estos sistemas de cifra asimétricos muy lentos. Si bien siempre han existido nubarrones en su entorno, lo cierto es que últimamente ya no sólo llueve sobre el algoritmo RSA sino que se avecina un verdadero diluvio al publicarse en

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 3

diciembre de 2013 un interesante artículo, RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis [5], en el que los autores demuestran cómo es posible extraer, sin demasiadas complicaciones todo hay que decirlo, una clave privada nada menos que de 4.096 bits simplemente escuchando el sonido que éstos emiten en nuestro ordenador al hacer una operación de descifrado o de firma digital, que es cuando se usa dicha clave. Destacar que entre esos autores se encuentra Adi Shamir, uno de los inventores de RSA, y que ha sido patrocinado por importante organismos. Podemos leer en el artículo: This work was sponsored by the Check Point Institute for Information Security; by the Israeli Ministry of Science and Technology; by the Israeli Centers of Research Excellence I-CORE program (center 4/11); and by NATO’s Public Diplomacy Division in the Framework of "Science for Peace". [5]. Por último, es menester indicar que se ha elegido a RSA en este artículo por la novedad y el impacto del trabajo anteriormente presentado, pero que este tipo de ataque por canal lateral también funciona con otros algoritmos que realizan operaciones de exponenciación modular como, por ejemplo, Difiie y Hellman o Elgamal. Es verdad que puede parecer una imagen dantesca que con tan poco esfuerzo se rompa una clave de 4.096 bits, pero afortunadamente hay también algunas contramedidas que pueden establecerse en la implementación de tales algoritmos para que no se vean afectados por este tipo ataques, pero ello conlleva inversión de dinero, esfuerzo tecnológico, adaptación de los protocolos, actualización de los estándares, etc., algo que el tiempo ya nos ha demostrado infinidad de veces que no es inmediato. En esta misma línea, debe mencionarse que el trabajo [5] se centra en el ataque a RSA en su implementación en el programa de correo seguro GnuGP de la serie 1.x, y que nuevas versiones de este programa ya cuentan con las contramedidas [6], propuestas además por los propios autores de la investigación. Analizaremos en este documento cosas interesantes y sorprendentes de este algoritmo, porqué los ataques más tradicionales y que podríamos calificar incluso de ortodoxos no han prosperado, ni creo lo harán en el futuro, y qué peligro tienen los ataques basados en canal lateral. II. UN POCO DE HISTORIA Quince meses después de que dos investigadores de Stanford University, Whitfield Diffie y Martin Hellman, con alguna ayuda de Ralph Merkle eso sí, cambiasen definitivamente los conceptos y la historia de la criptografía tras su invento del intercambio de claves en la fecha mítica de noviembre de 1976, que a la postre significa el nacimiento de la criptografía de clave pública, en febrero de 1978 otros tres investigadores, ahora del Massachussets Institute of Technology MIT, Ron Rivest, Adi Shamir y Leonard Adleman, dan una vuelta de tuerca a la propuesta de Diffie y Hellman, inventando y publicando el algoritmo RSA, que permite además de ese intercambio de claves o comunicación secreta, una firma digital. Cierto es que cinco años antes un grupo de investigadores del Government Communications Headquarters GCHQ [7] bajo las órdenes del matemático Clifford Cocks, habían llegado a la misma conclusión que sus colegas del MIT, pero su desarrollo era un alto secreto del gobierno británico y no pudo ver la luz ni mucho menos patentarse. Son curiosidades de la criptografía

4 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

en el entorno militar de lo que la historia también nos ha dado muchos ejemplos, sin ir más lejos el trágico final de Alan Turing. Los inicios del algoritmo RSA fueron muy duros pues nadie apostaba por un sistema mucho más lento que los sistemas de cifra simétrica, pero que a cambio permitía enviar una clave de sesión a través de un medio inseguro pero con una seguridad computacional muy alta, al igual que DH, pero además firmar digitalmente un documento o autenticarse. ¿Qué era eso de una firma digital? Ni siquiera existía un protocolo seguro para comunicaciones por Internet. Es más, ¿qué se sabía de Internet en 1978? Pues nada, simplemente no existía, sólo había noticias de la ARPANET de origen militar y no es hasta 1979 cuando se hace una primera comunicación entre cuatro universidades en los Estados Unidos. El protocolo TCP/IP nace cuatro años después, en el 1982. RSA fue patentado por el MIT en 1983. Con el paso del tiempo RSA se convierte en el estándar PKCS#1 en 1991, surgen otros algoritmos similares como Elgamal y Curvas Elípticas, ambos en 1985 e incluso podría decirse que más robustos que RSA, pero éste sigue aguantando la competencia y se mantiene como estándar dominando el mercado. La historia que sigue más o menos la conocemos todos. III. CURIOSIDADES Y ATAQUES EN RSA Si bien matemáticamente todo es justificable y en este caso no es tan complejo demostrarlo, lo cierto es que llama la atención en RSA las variantes que se producen en la generación de una clave cuando no se tiene la precaución de usar los parámetros adecuados. Aunque en la práctica no existe tal libertad en la elección de todos los parámetros en juego para quien genera el par de claves pública y privada en RSA, vamos a plantear unas cuantas preguntas a las que iremos dando respuesta, tanto de forma teórica como práctica mediante ejemplos o demos, para comprender en qué situación se encuentra la seguridad y fortaleza de este algoritmo.

1. ¿Puedo o debo elegir los primos p y q de igual valor? 2. ¿Puedo elegir como clave pública e el valor que yo quiera? 3. ¿Se cifrarán todos los números secretos que pueda generar como clave de sesión? 4. ¿Debo preocuparme porque mi clave RSA tenga números que no se cifren y vayan en

claro? 5. ¿Si hay una clave pública, existe entonces una única clave privada? 6. ¿Debo preocuparme si mi clave RSA tiene más de una clave privada? 7. ¿El secreto intercambiado está asegurado si no conozco la clave privada del destino? 8. ¿En el ataque por cifrado cíclico, si el resultado de una cifra se vuelve a cifrar con los

mismos parámetros y la operación se repite varias veces, recorremos todo el cuerpo? 9. ¿Es factible el ataque por factorización entera para claves reales? 10. ¿Todos los ataques a RSA son del tipo NP? 11. ¿Los ataques de canal lateral tienen poco futuro?

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 5

Las respuestas a todas estas preguntas será un rotundo NO. Vamos a verlo en detalle. 1) Pregunta 1: ¿Puedo o debo elegir los primos p y q de igual valor? Aunque nadie limita esta opción, si los primos p y q son iguales la clave resultante tendrá como característica negativa que, independiente del valor que se elija como clave pública, aparecen p números cuya función es la misma que la de la clave privada. Es lo que más adelante llamaremos claves privadas parejas. Además, estos valores estarán separados siempre por una distancia igual a p-1. Por ejemplo, si la clave fuese de 1.204 bits con dos primos de 512 bits, tendríamos 2512 (una barbaridad) números que harían lo mismo que nuestra clave privada. Respuesta No. No se deben elegir p y q de igual valor. Demo: Usar el software genRSA [8]. Genere de manera aleatoria una clave decimal de 32 bits, copie valor de p en q, vuelva a generar la clave ahora manualmente y observe el número de claves privadas parejas que aparecen. Si desea hacer la prueba con claves de mayor tamaño, debe cambiar la opción Unidades a hexadecimal. Aunque el programa genRSA genera claves de hasta 2.048 bits, no lo intente con claves muy altas porque escribir en archivo esa cantidad tan enorme de datos no está dentro de las posibilidades del programa.

Figura 1. Uno de los problemas de elegir p y q iguales: alto número de claves privadas parejas.

6 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Algo anecdótico: busque genRSA en Google. Es muy posible que aparezca en el primer lugar, antes que OpenSSL que es donde pertenece este popular comando. 2) Pregunta 2: ¿Puedo elegir como clave pública e el valor que yo quiera? La clave pública e debe ser un valor mayor que 1 y menor que φ(n) o (p-1)(q-1), pero no se tendrá libertad para elegir este valor al azar. Si elegimos un valor de clave pública muy alto, cercano a (p-1)(q-1) y el valor del módulo n es alto, como sucede en la práctica que es como mínimo de 1.024 bits, entonces nuestra clave privada será un valor extremadamente bajo que podrá ser atacada por fuerza bruta con total facilidad. Si se da el caso contrario, entonces nuestra clave privada será tan grande que nadie intentará romperla por fuerza bruta al ser computacionalmente imposible. Por ello en la práctica se usa como clave pública estándar el valor 65.537, número 4 de Fermat, que además de primo tiene otras particularidades interesantes al ser un número pequeño (aunque no tan pequeño) y lleno de ceros. Ver Lección 2 Valores de diseño de las claves del curso El algoritmo RSA [9]. Respuesta No. No puede elegirse cualquier número como clave pública e. En los certificados digitales X.509 y en función del navegador utilizado, veremos como clave pública e el valor 65.537 en Firefox o bien su representación en hexadecimal 010001 en Internet Explorer.

Figura 2. Clave pública de un certificado digital X.509 de un banco. Demo: Usar el software genRSA. Generación aleatoria de una clave hexadecimal de 2.048 bits. Cambiar valor de clave pública e a 010001 (ver este valor en decimal y en binario con la ayuda de la calculadora de Windows) y volver a generar la clave ahora manualmente. Será una clave igual que la de la figura anterior, con la diferencia que genRSA trabaja con librerías Crypto++

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 7

del año 2004. Copiar el valor de clave privada d en la casilla de la clave pública e, volver a generar la clave manualmente y observar qué pasa con la clave privada.

Figura 3. El problema de dejar al usuario elegir un e aleatorio: clave privada muy pequeña. 3) Pregunta 3: ¿Se cifrarán todos los números secretos que pueda generar como clave de sesión? Como en criptografía asimétrica se cifrarán números (lo de cifrar mensajes como “Hola colega” y similares es sólo un juego de laboratorio sin ninguna aplicación práctica), éstos podrán ser desde el valor 0 hasta n-1, es decir todos los elementos del cuerpo o módulo n. Pero el 0 y el 1 no se cifrarán pues 1e mod n = 1 y 0e mod n = 0. Además, se puede demostrar que n-1e mod n = n-1. En el mejor de los casos existirán otros 6 valores que no se cifrarán, es decir irán en claro, esto es Xe mod n = X. Esto es lo que se conoce como el valor mínimo de números o mensajes no cifrables, que es igual a 9. Sin embargo, dependiendo de qué valores elijamos para los primos p y q, esta cantidad de números no cifrables puede aumentar, llegando en algunos casos extremos a ser todo el cuerpo, es decir cualquier número que se cifre irá en claro. Respuesta No. No todos los números se cifran del cuerpo, algunos irán el claro, siendo esta cantidad como mínimo 9.

8 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Demo: Usar el software genRSA. Generación aleatoria de una clave decimal de 20 bits, insistir hasta que el valor de Mensajes no cifrables sea superior a 100. Aceptar esta clave y generar el log de mensajes no cifrables (unos 10 a 20 segundos). Abrir el archivo html y observar los valores 0, 1 y n-1. Elegir un valor al azar y cifrar con genRSA para observar que va en claro. Crear otra clave de valores: p = 3.181; q = 3.137; pxq = 9.978.797; φ(n) = (p-1)(q-1) = 9.972.480 Si e = [φ(n)/2+1] = 4.986.241 (observar valor d) NNC = 9.978.797 (todo el cuerpo va en claro) Si e = [φ(n)/10]+1 = 997.249 (observar valor d) NNC = 1.998.269 (muchos)

Figura 4. Clave mal diseñada en la que todos números que se cifran van en claro. 4) Pregunta 4: ¿Debo preocuparme porque mi clave RSA tenga números que no se cifren y vayan en claro? Aunque no resulte agradable saber que algún número aleatorio que se genere -por ejemplo para una clave simétrica de sesión- pueda transmitirse en claro al coincidir ese valor con alguno de estos números no cifrables de la clave del destino, y que en una generación de clave RSA no cuidada por mala elección de los primos p y q esta cantidad de elementos no cifrables puede llegar a ser muy alta, la probabilidad de que un número por ejemplo de 128 bits creado al azar (claves simétricas típicas y en la actualidad mínimas) sea precisamente uno de estos valores no cifrables de la clave de destino es tan pequeña, que esa posibilidad perfectamente puede despreciarse.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 9

Respuesta No. No, en sistemas reales esta probabilidad es tan baja que se puede despreciar. Demo: Usar calculadora de Windows. Un valor secreto de 128 bits equivale a un número decimal de unos 38 dígitos (19.747.469.878.953.653.324.042.891.381.624.673.599) como por ejemplo éste que además es primo (puede comprobarlo con msieve151). Como es un número aleatorio, la confianza (>50%) de acierto de será de uno entre 2127, un valor insignificante. Como dato, en 1999 la poderosa máquina DES Cracker y 100 mil PCs en Internet rompieron la clave del DES (56 bits) en menos de un día, con una capacidad de cómputo de 250 mil millones de claves por segundo. Con esa potencia, romper una clave de 128 bits con un 50% de probabilidad de acierto significaría unos 21 trillones de años… y la edad de universo es de “tan sólo” unos 15 mil millones de años. Conclusión: tranquilidad total. 256 = 72.057.594.037.927.936 -> 40 horas (ataque DES con probabilidad 50% en 1999) 2128 = 3,4028236692093846346337460743177e+38 -> X X = (2128 x 40) / 256

X = 188.894.659.314.785.808.547.840 horas Como 1 año = 8.760 horas Resultado: 21.563.317.273.377.375.405 años (21 trillones) 5) Pregunta 5: ¿Si hay una clave pública, existe entonces una única clave privada? Aunque los inversos matemáticos son únicos, es decir si el valor 31 es el inverso de 5 en el cuerpo 77 (e.g.: 31x5 = 155 mod 77 = 2x77 + 1 mod 77 = 1) y ese valor será único, no sucederá lo mismo con las claves pública y privada de una clave RSA en tanto éstas se calculan en el cuerpo trampa o privado φ(n) = (p-1)(q-1), pero luego la cifra o la firma se hace en el cuerpo público n = pxq. En este cuerpo público n de cifra, cada clave pública tendrá como mínimo una clave diferente a la clave privada que realiza la misma función y que se llamarán claves privadas parejas CPP; lo mismo ocurrirá con la clave privada y la clave pública en sentido inverso. Nuevamente, si no cuidamos la elección de p y q (e.g. no usamos primos fuertes), este valor de claves privadas parejas (o públicas parejas) puede subir a valores muy altos como ya se ha comentado. Respuesta No. Existe al menos una segunda clave que hará el mismo papel de la clave privada. Si no se tiene cuidado con los parámetros en la creación de la clave, esta cantidad puede subir a varios cientos e incluso miles. Demo: Usar el software genRSA. Generar manualmente la clave que se indica de 1.024 bits, que bien podría una ser clave real, y observar el valor de las claves privadas parejas CPP. Puede usar copiar y pegar. p=BEC96D795ADE4CC6FAA73676E43EB08867C81C6C864938729FBDE9834A64370F845D98460D76718B0E43DA25FF6DA238C84D92F426B9F60D511E5A6BDCCF92E1 q=F25CB470A2CF2CD35756E7F72D4BE5AB48918A92527AF42371E88CF376B3DB37584BA084E09F1FDAA53DBBE13BBAC772A8549A5917D6E15AD1BC3A726898FFEF e=010001

10 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Figura 5. Clave mal diseñada en la que el valor de las CPP es muy alto. Resultado: la clave tiene 3.673 claves privadas parejas. 6) Pregunta 6: ¿Debo preocuparme si mi clave RSA tiene más de una clave privada? En la práctica, dado que se fuerza a que e = 65.537 y el módulo n, y también φ(n), son números de al menos 1.024 bits, la clave privada d será también un valor muy alto (fácil de demostrar matemáticamente por el concepto asociado a los inversos). Por este motivo, aunque la clave creada tenga incluso miles de CPP todas éstas estarán situadas muy cerca del cuerpo. Respuesta No. Aunque la clave RSA tenga miles de CPP (hoy en día en las nuevas versiones de OpenSSL ya no ocurre) todas ellas estarán en una especie de nebulosa muy cerca del cuerpo n y por lo tanto plantearse un ataque por fuerza bruta no tiene sentido alguno, es algo más que computacionalmente imposible. Demo: Usar el software genRSA. Para el ejemplo anterior, la CPP más grande tiene 1.024 bits, lo que es común y lógico, pero puede observar que la CPP más pequeña tiene 1.012 bits. Una manera de comprobarlo con la misma aplicación consiste en guardar la clave anterior, abrir el archivo html resultante y elegir los valores de CPP mayor y menor. Pegar esos valores en genRSA como si fuesen los p y q de una nueva clave a crear, sólo para ver la cantidad de bits que tienen ambos valores dado que la aplicación lo indica al lado derecho de tales números.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 11

Lógicamente esos números tendrán posibilidades ínfimas de ser primos, lo que puede comprobar si lo desea solicitando en el mismo programa la realización de un test de primalidad de Miller Rabin o de Fermat, por ejemplo con 50 iteraciones. 7) Pregunta 7: ¿El secreto intercambiado está asegurado si no conozco la clave privada del destino? Aunque se nos indica que en criptografía de clave pública lo que se cifra en emisión con la clave pública de destino, para añadir secreto o confidencialidad al mensaje, se descifra en recepción solamente con la clave privada, que es inversa a la anterior, recuperando así el secreto, esto no es cierto. También se puede recuperar o romper el secreto a partir del criptograma usando para ello la misma clave pública de la víctima que todo el mundo conoce; es lo que se llama ataque por cifrado cíclico. ¿Cómo funciona este ataque? Muy fácil. Se captura el criptograma C0, éste se cifra nuevamente con la clave pública de destino (conocida) obteniéndose C1 y este proceso se repite con C2, C3, etc., hasta que se encuentre como resultado de esa enésima cifra el mismo valor C0 de partida, momento en el cual el ataque ha prosperado y se descubre el secreto que precisamente estaba en el paso del cifrado anterior. Todo esto sin necesidad de conocer o romper la clave privada de la víctima. Una cosa interesante en este ataque es que prospera recorriendo una parte muy pequeña del cuerpo de cifra, por lo general del orden del 0,001 % del mismo, y es además lineal, es decir de tipo P. Respuesta No. Es posible, aunque extremadamente difícil para claves con valores reales, recuperar el secreto cifrado, esto es romper el secreto, conociendo únicamente la clave pública de la víctima o receptor. Demo: Uso del software RingRSA (en desarrollo) [10]. Realizar un ataque por cifrado cíclico a la siguiente clave de 40 bits: p = 667.241; q = 568.751; e = 11.901. M = 19 (encontrado en vuelta 595.500) Espacio recorrido del módulo: 0,000156919483% M = 20 (encontrado en vuelta 23.820) Espacio recorrido del módulo: 0,000006276779% M = 21 (encontrado en vuelta 119.100) Espacio recorrido del módulo: 0,000031383897% Según el valor elegido para el ataque, éste tarda más o menos tiempo porque recorre caminos distintos. No obstante, como ya se ha indicado, siempre se recorre un camino mucho menor que todos los números o elementos del módulo, no llegando en la gran mayoría de los casos ni siquiera al 0,001% del mismo. Es cierto que para algunas claves generadas y ciertos valores de ataque puede darse el caso de tener que recorrer hasta el 5% del espacio n para poder romper el secreto, pero esto no es lo habitual. Por ejemplo para esta clave de 32 bits con p = 46.171, q = 53.101, n = 2.451.726.271, e = 7, y una clave privada d = 1.751.162.143, con los valores de ataque 3, 5, 6, 9 (y muchos otros más) se encuentra la clave privada después de realizar 9.396 cifrados. Si, por el contrario, elegimos

12 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

valores de ataque 55.155.388 y otros más, se encuentra ahora la clave privada después de realizar tan sólo 2 cifrados como se muestra en la figura 6.

Figura 6. Secreto roto usando la clave pública de la víctima en función del valor de ataque. Más aún, para claves del mismo tamaño en función de los valores de p y q el ataque deberá recorrer espacios muy diferentes hasta lograr encontrar la clave privada. Por ejemplo en un ordenador Hewlett-Packard p6730es, Intel Core i7-2600, CPU 3.40 GHz, 8,0 GB de RAM, esta clave de 48 bits p = 13.700.251, q = 9.304.639, n = 127.475.889.764.389, e = 65.537, tarda 199 minutos en romperse el secreto 123, más de tres horas. Pero para otra clave, también de 48

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 13

bits, y ahora con los siguientes valores p = 10.648.483, q = 9.193.669, n = 97.898.628.054.127, e = 65.537 (un módulo tan sólo un 23% menor) el ataque prospera en solamente 13 segundos. Si el ataque fuese lineal en función del tamaño de la entrada o módulo, debería haber tardado más de dos horas. Todo esto se debe a los anillos de cifra que se producen en este ataque a RSA y que se comentarán en la siguiente cuestión. Repetir el ejercicio para la clave de 48 bits con p = 12.288.487, q = 14.165.231, e = 65.537 y ataque al secreto 123. Observe que el módulo es mucho más grande n = 174.069.256.995.497.

Figura 7. Ataque por cifrado cíclico al secreto enviado por una clave de 48 bits en 35 segundos y recorriendo sólo un 0,00000014% del espacio de números del módulo n. 8) Pregunta 8: ¿En el ataque por cifrado cíclico, si el resultado de una cifra se vuelve a cifrar con los mismos parámetros y la operación se repite varias veces, recorremos todo el cuerpo? En esta operación que se realiza para un ataque por cifrado cíclico, no se recorre todo el cuerpo porque se crean anillos cuyo tamaño es muchísimo más pequeño que el módulo n como se ha observado en los ejercicios anteriores. Por ejemplo, si a la clave n = 11x13 = 143 y con e = 7 se le realiza un ataque por cifrado cíclico para romper el secreto 123 que se ha cifrado con ella, solamente necesitaremos 4 cifrados porque el número 123 se encuentra en uno de los 26 anillos de tamaño 4 que tiene ese cuerpo 143, en este caso con los valores [6, 7, 85, 123] puesto que 1237 mod 143 = 7, 77 mod 143 = 6, 67 mod 143 = 85 y 857 mod 143 = 123. Como hemos vuelto al número de origen del ataque, se cierra por tanto el anillo.

14 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Si multiplicamos la longitud de los anillos por las veces que éstos aparecen (que son únicos, no repetidos) y añadimos los números no cifrables, para este ejemplo 21, obtendremos el cuerpo de cifra completo, es decir los valores desde 0 hasta n-1. Comprobarlo en la figura 8. Respuesta No: Dado que se forman anillos de cifra, el ataque prosperará recorriendo una cantidad de números muy inferior a la del cuerpo n. Demo: Uso del software RingRSA (en desarrollo) [10]. Generar manualmente la clave RSA con p = 11, q = 13 y e = 7. Realizar un ataque por cifrado cíclico siendo el valor secreto N = 123 y comprobar lo indicado en el párrafo anterior. Generar ahora los anillos de esta clave y observar todos sus anillos. Generar la clave de 20 bits con p = 557, q = 883 y e = 2.281 y observar sus anillos. Cambiar la clave e por 13, volver a generar la clave y observar cómo cambian los anillos. Observe la gran cantidad de anillos que aparecen en esta clave de 25 bits: p = 2.393; q = 2.351; e = 3; n = 5.625.943; d = 3.747.467.

Figura 8. Anillos de ataque cíclico a la clave RSA con p = 11, q = 13 y e = 7.

Figura 9. Anillos de ataque cíclico a la clave RSA con p = 557, q = 883 y e = 2.281.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 15

Figura 10. Anillos de ataque cíclico a la clave RSA con p = 557, q = 883 y e = 13.

Figura 11. Clave de 25 bits con p = 2.393, q = 2.351, e = 3, que cuenta con 31 anillos diferentes. Generar los anillos es un trabajo pesado porque hay que recorrer todo el cuerpo cifrando todos sus elementos con la clave pública. Por ejemplo, en el equipo HP antes comentado esta clave de 32 bits (p = 46.171, q = 53.101 y e = 7) tarda algo más de 56 minutos en generarlos. En la siguiente figura se muestran los anillos de la clave anterior. En la tabla central se indican los primeros valores de cada uno de los 169.632 anillos amarillos de longitud 9.396. Esto es, si atacamos con el número 3, el programa va a realizar 9.396 cifras entregando en cada caso valores de salida distintos y en la última cifra calculada se repetirá como salida el número 3 con el cual se inició el ataque.

16 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Figura 12. Generación de anillos para una clave de 32 bits y tabla del primer anillo. Para la clave de 40 bits de la pregunta 7, p = 667.241, q = 568.751, e = 11.901, generar los anillos y detener el cálculo cuando se llegue aproximadamente al número 25 para comprobar los anillos de los números secretos atacados, el 19, el 20 y el 21.

Figura 13. Generación de anillos para una clave de 40 bits detenida a los 17 segundos. 9) Pregunta 9: ¿Es factible el ataque por factorización entera para claves reales? El ataque característico a RSA consiste en intentar encontrar los factores p y q del módulo n, con lo cual ya resulta trivial calcular la clave privada a partir de la pública mediante la ecuación d = inv [e, (p-1)(q-1)]. Para valores de n en torno a los mil bits o superiores, este ataque se ha mostrado computacionalmente imposible, siendo el último número RSA factorizado uno de 768 bits en diciembre de 2009:

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 17

1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413. Muchos investigadores han intentado, y siguen intentando, reducir el tiempo que consumen estos algoritmos de factorización, entre ellos el Dr. Hugo Scolnik [11], pero de momento los avances no son del todo halagüeños. Respuesta No. Para valores de n sobre los 800 bits el tiempo requerido es demasiado grande. Demo: Usar el software msieve151 [12]. Por ejemplo, para encontrar los factores comunes de 249466747125192798859465494967943591682682693901288852594696933237244570457253508108210113, un número de 90 dígitos (297 bits) producto de dos primos consecutivos, en la máquina HP ya comentada se necesitan 38 minutos.

Figura 14. Pantalla de msieve151 de la factorización del número anterior. El archivo msieve.log que entrega el programa es el siguiente: Thu Feb 27 20:35:10 2014 Msieve v. 1.51 (SVN 845) Thu Feb 27 20:35:10 2014 random seeds: a38426d0 91daea70 Thu Feb 27 20:35:10 2014 factoring 249466747125192798859465494967943591682682693901288852594696933237244570457253508108210113 (90 digits) Thu Feb 27 20:35:11 2014 searching for 15-digit factors Thu Feb 27 20:35:11 2014 commencing quadratic sieve (90-digit input) Thu Feb 27 20:35:11 2014 using multiplier of 2 Thu Feb 27 20:35:11 2014 using generic 32kb sieve core Thu Feb 27 20:35:11 2014 sieve interval: 35 blocks of size 32768 Thu Feb 27 20:35:11 2014 processing polynomials in batches of 6 Thu Feb 27 20:35:11 2014 using a sieve bound of 1574029 (59667 primes) Thu Feb 27 20:35:11 2014 using large prime bound of 125922320 (26 bits) Thu Feb 27 20:35:11 2014 using double large prime bound of 380351263773360 (42-49 bits) Thu Feb 27 20:35:11 2014 using trial factoring cutoff of 49 bits Thu Feb 27 20:35:11 2014 polynomial 'A' values have 11 factors Thu Feb 27 21:12:49 2014 59877 relations (15835 full + 44042 combined from 633545 partial), need 59763 Thu Feb 27 21:12:50 2014 begin with 649380 relations Thu Feb 27 21:12:50 2014 reduce to 146204 relations in 9 passes Thu Feb 27 21:12:50 2014 attempting to read 146204 relations Thu Feb 27 21:12:50 2014 recovered 146204 relations Thu Feb 27 21:12:50 2014 recovered 124293 polynomials Thu Feb 27 21:12:50 2014 attempting to build 59877 cycles

18 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Thu Feb 27 21:12:50 2014 found 59877 cycles in 5 passes Thu Feb 27 21:12:50 2014 distribution of cycle lengths: Thu Feb 27 21:12:50 2014 length 1 : 15835 Thu Feb 27 21:12:50 2014 length 2 : 11472 Thu Feb 27 21:12:50 2014 length 3 : 10593 Thu Feb 27 21:12:50 2014 length 4 : 8015 Thu Feb 27 21:12:50 2014 length 5 : 5644 Thu Feb 27 21:12:50 2014 length 6 : 3532 Thu Feb 27 21:12:50 2014 length 7 : 2217 Thu Feb 27 21:12:50 2014 length 9+: 2569 Thu Feb 27 21:12:50 2014 largest cycle: 19 relations Thu Feb 27 21:12:50 2014 matrix is 59667 x 59877 (14.9 MB) with weight 3669817 (61.29/col) Thu Feb 27 21:12:50 2014 sparse part has weight 3669817 (61.29/col) Thu Feb 27 21:12:51 2014 filtering completed in 3 passes Thu Feb 27 21:12:51 2014 matrix is 55769 x 55833 (14.0 MB) with weight 3453179 (61.85/col) Thu Feb 27 21:12:51 2014 sparse part has weight 3453179 (61.85/col) Thu Feb 27 21:12:51 2014 saving the first 48 matrix rows for later Thu Feb 27 21:12:51 2014 matrix includes 64 packed rows Thu Feb 27 21:12:51 2014 matrix is 55721 x 55833 (10.4 MB) with weight 2877322 (51.53/col) Thu Feb 27 21:12:51 2014 sparse part has weight 2395631 (42.91/col) Thu Feb 27 21:12:51 2014 using block size 22288 for processor cache size 8192 kB Thu Feb 27 21:12:51 2014 commencing Lanczos iteration Thu Feb 27 21:12:51 2014 memory use: 6.7 MB Thu Feb 27 21:12:58 2014 lanczos halted after 882 iterations (dim = 55719) Thu Feb 27 21:12:58 2014 recovered 17 nontrivial dependencies Thu Feb 27 21:12:58 2014 prp45 factor: 499466462462889292700096245572889152567727697 Thu Feb 27 21:12:58 2014 prp45 factor: 499466462462889292700096245572889152567727729 Thu Feb 27 21:12:58 2014 elapsed time 00:37:48

Observe que los primos p y q son consecutivos (algo completamente infrecuente) y por tanto la factorización de n con este método requiere mucho tiempo. Sin embargo, con el método de Fermat, más sencillo y válido sólo para el producto de primos muy cercanos, se encuentran los dos primos en un único paso como se demuestra en [13]. En el primer criptoreto [14] lanzado en Criptored el 2 de julio de 2013, el valor a factorizar era CD942ACE3C9390EC39AA4433E505B47E59DB5D2ADB5ABEE1F5E8A1FE7372D00B2A1A91D40B9, un número de 300 bits que se factoriza según la solución enviada [15] en 56 minutos y 35 segundos, usando una máquina Intel Core 2 Extreme Processor X7900 Dual-Core 2.80 GHz. Como dato comparativo, la máquina HP citada en este documento y utilizada en todas las mediciones, encuentra los valores de p y q en 55 minutos con 28 segundos: Sun Mar 09 11:37:35 2014 Msieve v. 1.51 (SVN 845) Sun Mar 09 11:37:35 2014 random seeds: 4c2849c0 cef2f71f Sun Mar 09 11:37:35 2014 factoring 1635825652681547035943309547759496165514648039667052932149611175425184839478857467701313721 (91 digits) Sun Mar 09 11:37:36 2014 searching for 15-digit factors Sun Mar 09 11:37:36 2014 commencing quadratic sieve (91-digit input) …

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 19

… Sun Mar 09 12:33:03 2014 prp44 factor: 39190636737150939411204087073921663586710519 Sun Mar 09 12:33:03 2014 prp47 factor: 41740216257595498333580872443988938561454154959 Sun Mar 09 12:33:03 2014 elapsed time 00:55:28

Figura 15. Pantalla de msieve151 al terminar de factorizar el número de 300 bits del primer criptoreto, con entrada en hexadecimal. 10) Pregunta 10: ¿Todos los ataques a RSA son del tipo NP? Ya se ha visto que el ataque por cifrado cíclico, que no rompe la clave pero sí el secreto, era de tipo lineal e incluso requería mucho menos tiempo para prosperar debido al comportamiento especial del ataque por los anillos que se forman. Algo parecido sucede con el ataque basado en la paradoja del cumpleaños, que es de tipo P y además permite sea distribuido en red, funcionando por tanto el principio de divide y vencerás. Esto es, si atacan m máquinas de características similares, el trabajo se distribuye entre ellas y el tiempo de éxito del ataque se reduce en m veces. El número de cifrados estimados para romper la clave privada según el problema de la paradoja y basado además en mediciones empíricas está en torno a 3(n)1/2. Sólo es necesario conocer la clave pública de la víctima, los valores de n y e. Consiste en lo siguiente: se elige un número aleatorio N para comenzar el ataque, que puede ser cualquiera por el ejemplo el número 2 que tiene características interesantes. Se divide el cuerpo de cifra n en dos zonas, una zona izquierda i con números del 2 a n/2 y una zona derecha j con números del n/2+1 a n-1. Se cifra el valor de ataque N con i = 2 (Ni mod n) y con j = n/2+1 (Nj mod n) y se comprueba si los resultados son iguales. Si no son iguales, se incrementan los contadores de i y de j y se cifra nuevamente N ahora con i = 3 y j = n/2+2, comprobando a partir de ahora si el último resultado de la zona derecha j ha colisionado con el primero de la zona izquierda i, o al revés, si el último resultado de la zona izquierda i ha colisionado con el primero de la zona derecha j. Si no existe colisión, se vuelve a incrementar los contadores y se repite el proceso hasta que se produzca la colisión indicada. Este comportamiento, una colisión de un último valor de una columna con el primero de la columna opuesta, es lo que permite un ataque distribuido en red y el consiguiente divide y vencerás. Cuando se produce dicha colisión, el ataque termina y pueden darse tres situaciones: que se encuentre la clave privada d, que se encuentre una clave privada pareja CPP, o bien que se

20 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

encuentre un falso positivo. En los dos primeros casos el ataque prospera; en el tercero no porque la supuesta clave privada encontrada sólo sirve para descifrar el valor N con el cual se ha iniciado el ataque pero no es válido para cualquier valor de N. No obstante, los casos de falsos positivos son escasos. Aunque la paradoja de cumpleaños permite un divide y vencerás, no es práctico porque los valores usados como módulo son muy altos (sobre los mil bits) y por tanto requeriría de una inmensa capacidad de cómputo. Respuesta No. RSA no es inmune a un ataque distribuido en red, ni por ataques con cifrado cíclico ni por ataques basados en la paradoja del cumpleaños. Demo: uso del software LegionRSA [19]. Configurar en el servidor un nuevo ataque generando la clave RSA de 64 bits en donde n = 10.425.448.828.540.137.673, (siendo p = 1.697.957.273; q = 6.139.994.801) y e = 65.537. Atacando en local con localhost, arrancar ahora el cliente indicando que se usarán la mitad de procesadores de esa máquina; éste se une al ataque y queda a la espera de que servidor lo inicie. Ahora en el servidor dar a Iniciar ataque distribuido y observar cómo trabajan cliente y servidor. Con el equipo HP ya comentado y usando 4 de sus 8 procesadores para el ataque, éste prospera tras 13 segundos. Con una tasa media de unos 600.000.000 de cifrados por segundo, el programa encuentra la clave privada d = 2.513.580.371.636.102.273. Las figuras 16 y 17 muestran las pantallas del servidor y del cliente con 4 procesadores en este ataque en modo local.

Figura 16. Pantalla del servidor terminado el ataque a una clave de 64 bits.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 21

Figura 17. Pantalla del cliente terminado el ataque a una clave de 64 bits. Observe que sólo se introduce el valor del módulo n y la clave pública e. Para claves 50 bits o menores el resultado es automático. Para claves de 70 bits el ataque puede durar un par de minutos, para 71 bits unos 3 minutos, para 72 bits unos 5 minutos, para 73 bits unos 7 minutos, para 74 bits unos 10 minutos, para 75 bits unos 12 minutos, etc. Como puede apreciarse, esto se corresponde con un comportamiento lineal o de tipo P. Si se duplica el tamaño de entrada, se duplica también el tiempo necesario para que prospere el ataque, algo que no ocurre en el ataque por factorización entera. Para una clave de 80 bits y con sólo 4 de los 8 procesadores atacando, ese mismo ordenador tardará aproximadamente 55 minutos en romper la clave, con una tasa media de 660.000.000 cifrados por segundo. En todos los casos, observe que el porcentaje de cifrados esperados se acerca bastante al valor estimado 3(n)1/2. Si su ordenador tiene más de 2 procesadores (los PCs actuales tienen comúnmente 8) puede arrancar dos o más clientes en la misma máquina, cada uno trabajando independientemente. Si hay m clientes -y bastantes más procesadores- atacando simultáneamente en diferentes máquinas conectadas en red, el servidor reparte el trabajo de manera dinámica acorde a la potencia de cálculo de los mismos, y el tiempo de ataque se reduce como mínimo en m veces. Para la siguiente clave de 80 bits se ha probado en un laboratorio con 20 PCs el ataque local y en red, entregando los siguientes resultados para unas máquinas antiguas con las siguientes características: Intel Pentium 4 CPU 3.20 GHz 3.21 GHz 2.50 GB de RAM, con Windows XP 32 bits y usando sus 2 procesadores. p = 499.758.111.863; q = 1.492.359.224.729; e = 65.537

22 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

n = 745.818.628.371.895.537.860.127 d = 194.656.875.326.414.056.304.913 Ataque en local: localhost Mensaje de ataque = 2 Tasa media cifrados = 56.251.200 cifrados/segundo Cifrados estimados = 2.590.823.740.692 Cifrados realizados = 1.992.117.336.593 (76%) Peticiones de trabajo recibidas = 49.804 Tiempo requerido = 9 horas, 50 minutos, 14 segundos (35.414 segundos) Clave encontrada en localhost= 194.656.875.326.414.056.304.913 Nota: Con el PC usado normalmente en este trabajo y con sólo con 4 de sus 8 procesadores, este ataque tarda solamente 50 minutos. Ataque en red: 20 PCs clientes (40 procesadores) conectados vía dirección IP del servidor Mensaje de ataque = 2 Tasa media cifrados = 1.146.046.982 cifrados/segundo Cifrados estimados = 2.590.823.740.692 Cifrados realizados = 1.990.683.608.285 (76% pero 1.433.728.308 menos de cifrados) Peticiones de trabajo recibidas = 3.799 Tiempo requerido = 28 minutos, 57 segundos (1.737 segundos) Clave encontrada en CLIENTE14= 194.656.875.326.414.056.304.913

Figura 18. Servidor de un ataque con LegionRSA a una clave de 80 bits en modo local.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 23

Figura 19. Cliente de un ataque con LegionRSA a una clave de 80 bits en modo local. Con 20 PCs en el laboratorio comentado tenemos el siguiente escenario.

Figura 20. Laboratorio durante el ataque distribuido con LegionRSA a una clave de 80 bits. Las figuras 21 y 22 muestran las capturas de pantalla del servidor y del cliente en un ataque por paradoja del cumpleaños distribuido en red.

24 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Figuras 21 y 22. Servidor y cliente atacando una clave de 80 bits en red.

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 25

En modo local ha tardado 9 horas con 50 minutos (590 minutos) y en red 29 minutos. Como conclusión, el ataque ha tardado veinte veces menos pues 590/29 = 20,34. ¿Qué capacidad de supercómputo haría falta para al menos intentar atacar claves reales dentro de un tiempo prudente? … Mejor ni pensarlo. 11) Pregunta 11: ¿Los ataques de canal lateral tienen poco futuro? No, en absoluto, son la gran amenaza a todos los sistemas de cifra. Los últimos trabajos publicados a finales de 2013 sobre ataques por canal lateral a RSA que miden el consumo de energía en el ordenador por los cálculos matemáticos que se realizan en el algoritmo al cifrar o descifrar, la manifestación acústica de dicho trabajo, etc., han demostrado que en este caso e independientemente del tamaño de la clave, este tipo de ataques puede encontrar fácilmente los ceros y unos de la clave utilizada en una operación característica del descifrado o firma digital. Y es que la operación con los unos de la clave privada lleva más tiempo que la misma operación con los ceros, al existir en la primera una multiplicación adicional. Ver apartado Algoritmo de exponenciación rápida del Capítulo 7 Teoría de los Números en [1].

Figura 23. Fuente Wikipedia: An attempt to decode RSA key bits using power analysis. The left peak represents the CPU power variations during the step of the algorithm without multiplication, the right (broader) peak - step with multiplication, allowing to read bits 0, 1. Lo peligroso de este ataque es que, a diferencia de los otros ataques que intentan buscar debilidades en el propio algoritmo o bien en el problema matemático que se usa para proteger la clave privada, normalmente un problema del tipo one way function con trampa como es el caso de RSA, DH y Elgamal, prospera sin importar el tamaño de la clave, la gran baza utilizada durante décadas por los algoritmos asimétricos que huían del peligro de los avances en los ataques simplemente aumentando el tamaño de claves. En RSA en menos de 20 años hemos utilizado claves de 256, 512, 1.024 y hoy ya recomendable 2.048 bits, como podemos ver hoy en la mayoría de los certificados digitales X.509. Sobre este tema de ataques por canal lateral existe abundante información en la red. Además de los documentos ya citados [5] y [6], es muy recomendable la lectura de la ponencia Diseño de un conjunto de herramientas software para ataques por canal lateral [17] de los autores A. Fuentes, L. Hernández, A. Martín, B. Alarcos, presentada en el VI Congreso Iberoamericano de Seguridad Informática CIBSI 2013. De las diapositivas utilizadas por los autores en su presentación [18] se extrae la siguiente figura por su claridad para mostrar el método de lectura de dichos bits según el consumo de potencia de la máquina.

26 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

Figura 24. Diapositiva mostrada en la presentación [18] de la ponencia Diseño de un conjunto de herramientas software para ataques por canal lateral en CIBSI 2013. Otro tanto se puede decir con respecto al trabajo del ataque a una clave RSA de 4.096 bits [5] comentando al comienzo de este artículo.

Figura 25. Manifestación acústica de un bit 0 y de un bit 1 en la figura 16 del trabajo RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis [5]. Los ataques por canal lateral son, por tanto, una gran amenaza, no sólo al sistema RSA sino a todo algoritmo que realice operaciones matemáticas diferenciando las operaciones con ceros y

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 27

con unos. La única solución es enmascarar estos efectos físicos mediante técnicas de tipo TEMPEST y similares, lo cual ya se ha hecho con GnuGP de la serie 1.x y posteriores como ha sido comentado al comienzo de este artículo. Respuesta No. Actualmente los ataques por canal lateral son la gran amenaza y pueden significar un antes y un después en la implementación de todos los algoritmos de cifra, quizás no tanto no en su diseño. IV. CONCLUSIONES Hemos venido de la mano de RSA desde los inicios de la criptografía de clave pública, y de eso hace ya más de 36 años. Pocos inventos, tal vez ninguno, en Internet pueden decir lo mismo, posiblemente sea un caso único de longevidad. Decir que sólo RSA se ha roto por este tipo de ataque por canal lateral no es propio; se podría haber hecho lo mismo con cualquier otro algoritmo similar como DH o Elgamal. No debe perderse de vista que lo que hay que actualizar son las implementaciones de dichos algoritmos. Los ataques tradicionales como la factorización entera, incluso novedosos como el ataque cíclico y por la paradoja del cumpleaños distribuido en red, ambos lineales aquí presentados, no pueden con el algoritmo RSA debido al gran tamaño de la clave que utiliza. Sin embargo, los ataques por canal lateral pueden hacerle mucho daño y ha recibido ya el primer aviso serio a través de destacados científicos, entre ellos Shamir, uno de sus creadores. Sin caer en la paranoia, hay que estar muy atentos a los nuevos avances en este tipo de ataques. A pesar de estos ataques, RSA sigue aguantando pero sus días pueden estar contados si no se modifican sus implementaciones. Ante este tipo de situación de interés máximo por demostrar la debilidad de un algoritmo, aunque aquí la víctima no sea sólo RSA pero sí la más importante, debemos recordar que algo similar ocurrió con MD5 hace ahora ya 10 años y últimamente aunque en menor medida con SHA-1, y que no es bueno caer en paranoias pero sí estar atentos a nuevas evoluciones de estos ataques. No obstante, con todo esto, ya va siendo hora de decirle a RSA, y por extensión a otros algoritmos algo más jóvenes, que ha vivido bastante más de lo que cualquier criptólogo hubiese vaticinado en su nacimiento, que su carné joven le ha caducado hace ya unos cuantos años, y que la comunidad científica debería comenzar a pensar en un nuevo estándar para el intercambio de clave y la firma digital, inmune ya en su propio diseño a este tipo de ataques. Tal vez ha llegado la hora de las curvas elípticas. Información adicional y de lectura recomendada:

• Entrevista en la Rooted CON 2014 en blog Hoja de Router, David Gómez. http://www.hojaderouter.com/seguridad/algoritmo-rsa-cifrado-seguridad-informatica/12390

28 RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió

• Presentación en PowerPoint de la ponencia RSA cumple 36 años y se le ha caducado el carné joven, Jorge Ramió, Rooted CON 2014. http://www.criptored.upm.es/guiateoria/gt_m001k1.htm

• Vídeo de la presentación, próximamente en la página web de Rooted CON 2104. http://www.rootedcon.es/

V. BIBLIOGRAFÍA

1. Libro Electrónico de Seguridad Informática y Criptografía, versión 4.1 de 1 de marzo de 2006, Jorge Ramió. http://www.criptored.upm.es/guiateoria/gt_m001a.htm

2. El algoritmo RSA, Crypt4you, Jorge Ramió. http://www.criptored.upm.es/crypt4you/temas/RSA/leccion0/leccion00.html

3. Cifrado de las comunicaciones digitales de la cifra clásica al algoritmo RSA, 0xWord, Alfonso Muñoz, Jorge Ramió. http://0xword.com/es/libros/36-libro-cifrado-comunicaciones-rsa.html

4. Freeware para prácticas de laboratorio en Criptored, varios autores. http://www.criptored.upm.es/paginas/software.htm#propio

5. RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis, D. Genkin, A. Shamir, E. Tromer. http://www.tau.ac.il/~tromer/papers/acoustic-20131218.pdf

6. Página web del artículo [5] con FAQs y explicaciones, D. Genkin, A. Shamir, E. Tromer. http://www.cs.tau.ac.il/~tromer/acoustic/

7. Government Communications Headquarters GCHQ. http://www.gchq.gov.uk/Pages/homepage.aspx+

8. Software genRSA (Nota: para máquinas de 64 bits puede volverse inestable). http://www.criptored.upm.es/software/sw_m001d.htm

9. Lección 2. Valores de diseño de las claves, curso El algoritmo RSA en Crypt4you, Jorge Ramió. http://www.criptored.upm.es/crypt4you/temas/RSA/leccion2/leccion02.html

10. RingRSA. Software en desarrollo correspondiente al Proyecto Fin de Grado del alumno Abel Casado Gimeno, próxima publicación en Criptored.

11. Avances en la Factorización Entera, DISI 2007, Hugo Scolnik. http://www.youtube.com/watch?v=Zrd8tM_1Pnk

12. Msieve151. http://sourceforge.net/projects/msieve/files/msieve/Msieve%20v1.51/

13. Ataque por factorización a través del método de Fermat, Lección 8 El Algoritmo RSA Crypt4you, Jorge Ramió. http://www.criptored.upm.es/crypt4you/temas/RSA/leccion8/leccion08.html#apartado8-3

14. Primer criptoreto en Criptored, Alfonso Muñoz. http://www.criptored.upm.es/paginas/retos.htm

15. Solución al primer criptoreto en Criptored, Alfredo Beaumont. http://www.criptored.upm.es/descarga/writeup-alfredo-beaumont.pdf

RSA cumple 36 años - Madrid, marzo de 2014 - Rooted CON © Jorge Ramió 29

16. LegionRSA. Software de prácticas para ataques a RSA mediante la paradoja del cumpleaños, Roberto Ruiz Sánchez. http://www.criptored.upm.es/software/sw_m001o.htm

17. Diseño de un conjunto de herramientas software para ataques por canal lateral, CIBSI 2013, A. Fuentes, L. Hernández, A. Martín, B. Alarcos. http://www.criptored.upm.es/descarga/ListadoActasCIBSI_TIBETS2013.zip

18. Diapositivas de la presentación Diseño de un conjunto de herramientas software para ataques por canal lateral, A. Fuentes, L. Hernández, A. Martín, B. Alarcos. http://www.cibsi.utp.ac.pa/documentos/Ataques_por_Canal_Lateral.pdf

19. Entrevista en la Rooted CON 2014 por Hoja de Router, David Gómez. http://www.hojaderouter.com/seguridad/algoritmo-rsa-cifrado-seguridad-informatica/12390

20. Presentación en PowerPoint de la ponencia RSA cumple 36 años y se le ha caducado el carné joven, Jorge Ramió, Rooted CON 2014. http://www.criptored.upm.es/guiateoria/gt_m001k1.htm

21. Vídeo de la presentación, próximamente en la página web de Rooted CON 2104. http://www.rootedcon.es/

Madrid, 10 de marzo de 2014 Jorge Ramió Aguirre [email protected]