El crecimiento de Internet y las redes de comunicación dieron pie a la necesidad de generar un sistema que permitiera tener conexiones seguras a través de la red sin necesidad de compartir una llave por algún otro medio previo a la comunicación. Los criptosistemas de llave pública permitieron desarrollar varias soluciones basadas en tener disponibles llaves de cifrado al alcance de todos, sin exponer la seguridad de la comunicación.
RSA es un criptosistema de llave pública creado por Rivest, Shamir y Adlemam, en 1978. Permaneció bajo patente desde 1983 hasta el año 2000 por Laboratorios RSA, por lo que no fue hasta entonces que se comenzó a utilizar comercialmente. Tiene la característica de que ambas llaves pueden ser utilizadas para cifrar y descifrar indistintamente. Aunque no se ha logrado comprobar su seguridad, tampoco su inseguridad, y es considerado uno de los algoritmos asimétricos más seguros, ya que no ha sido roto hasta el día de hoy. Utiliza como base matemática el problema de factorización de números primos.
Otro tipo de criptosistemas son los de llave simétrica. En ellos, la misma llave es utilizada para cifrar y descifrar información (por ejemplo, AES). Al ser una única llave, ésta debe compartirse previamente por algún otro medio seguro; por ejemplo, compartir la contraseña de tu celular frente a frente a alguien en que tú confíes. RSA intenta solucionar este problema con el uso de dos llaves.
La solución consta de dos llaves; éstas son una pública, siempre disponible para quien sea, y una privada, conocida únicamente por el dueño. La llave pública cifra y la privada descifra. Así, todos pueden mandar información cifrada y nadie más que no tenga la llave privada correspondiente puede descifrar.
El problema de factorización de números primos se refiere a la dificultad de calcular los dos números primos utilizados para realizar un producto; de esta manera…
Calcular p*q = n es computacionalmente sencillo.
Calcular n sin conocer p o q es computacionalmente complicado.
Computacionalmente es costoso y la forma más efectiva de poder encontrar estos valores es por fuerza bruta, pero al utilizar números lo suficientemente grandes este proceso se hace hasta el momento imposible. Al igual que con el problema del logaritmo discreto, el problema de factorización de primos permite tener funciones de sólo ida con trampa que hacen posible solucionar el problema de manera sencilla si esta trampa se conoce.
Para generar un par de llaves KP (llave pública) y KS (llave privada) es necesario seguir los siguientes pasos:
Posterior a la generación de llaves se puede comenzar con el proceso de cifrado y descifrado de mensajes, para que estos sean leídos por el dueño de las llaves correspondiente.
Dado un mensaje m:
El cifrado se realiza calculando c = me (mod n).
El descifrado calculando m = cd (mod n).
El descifrado se puede visualizar como cd = (me)d = m (mod n). Esto es posible debido a la siguiente comprobación.
Concluyendo, el intercambio de mensajes por medio de RSA funciona de la siguiente forma:
Dos entidades, Ana y Beto, se quieren comunicar de manera confidencial, así que Ana quiere compartir información con Beto:
Ambos generan su par de llaves pública y privada y hacen públicas sus respectivas llaves.
Ana toma la llave pública de Beto y cifra el mensaje que desea enviar de la siguiente manera:
c = meb (mod n)
Ana manda su mensaje cifrado c a Beto.
Beto recibe el mensaje cifrado de Ana y lo descifra con su llave privada de la siguiente manera:
cdb (mod n)
Si Beto quisiera responder a Ana con un mensaje cifrado, se llevaría a cabo el mismo proceso, pero ahora usando el par de llaves de Ana.
A alto nivel, un intercambio de mensajes se vería de la siguiente manera:
Dos entidades, Alice y Bob, se quieren comunicar. Alice quiere compartir información con Bob.
Ambos generan su par de llaves, pública y privada, y hacen públicas sus respectivas llaves públicas.
Alice toma la llave pública de Bob y cifra su mensaje.
Alice manda su mensaje cifrado a Bob.
Bob recibe el mensaje cifrado de Alice y lo descifra con su llave privada.
Si Bob quisiera responder a Alice se llevaría a cabo el mismo proceso, pero con el par de llaves de Alice.
De la misma manera podríamos usar la llave privada de Alice para cifrar, proceso al cual le llamamos firma digital y que sirve para garantizar que sólo Alice pudo realizar dicho proceso. Su contraparte es la verificación y se hace con la llave pública de Alice.
Hasta el momento no se ha implementado ningún ataque efectivo a este algoritmo, razón por la cual RSA es ampliamente utilizado como algoritmo para el intercambio y generación de llaves de sesión simétricas. Es implementado por muchas bibliotecas de criptografía, además de poder ser utilizado para realizar firmas digitales. Al ser un algoritmo lento, se prefiere su uso para cifrar e intercambiar llaves simétricas entre otras aplicaciones similares.
Entre las aplicaciones comunes se encuentra Secure Shell (SSH), quien por medio de RSA lleva a cabo el intercambio de información de manera segura entre ambos extremos de la comunicación. También es utilizado como forma de autenticación para acceder a un servidor tipo Virtual Private Network (VPN), a través del protocolo de Transport Layer Security (TLS).
El uso de las llaves en los esquemas asimétricos es importante, ya que dependiendo de la llave es la operación por realizar.
A continuación, podrás evaluar tú mismo el conocimiento adquirido acerca del algoritmo RSA y su funcionamiento.
Lucena, M. J. (2001). Criptografía y seguridad en computadores (pp. 145-147). Universidad de Jaén.
Menezes, A. J., Van Oorschot, P. C. & Vanstone, S. A. (1997). Handbook of Applied Cryptography (pp. 321-385). CRC Press.
Rivest, R., Shamir, A. & Adleman, L. (1978, february). A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM, 2(21), 120-126.
Wikipedia. (2020). RSA (cryptosystem). https://en.wikipedia.org/w/index.php?title=RSA_(cryptosystem)&oldid=973884875
Aldeco, R. (2021). RSA: Criptosistema de llave pública. Unidades de Apoyo para el Aprendizaje. CUAIEED/Facultad de Ingeniería-UNAM. (Vínculo)