Tabla de contenidos
En el mundo de la informática, hay muchas partes móviles, y todo el tiempo se establecen actualizaciones y nuevas teorías. Uno de esos algoritmos que sorprendentemente no encaja en este molde es el algoritmo RSA. De hecho, RSA existe desde hace casi 50 años y prácticamente no ha cambiado durante este tiempo.
Te puede interesar leer: Cambiar de Android a iOS: todo lo que necesitas saber
Como uno de los algoritmos de cifrado más utilizados, es algo que todos los programadores deberían saber, especialmente aquellos que trabajan en ciberseguridad. En este artículo, explicaremos qué es RSA, cómo funciona y los principios detrás de él.
¿Qué es el algoritmo RSA?
RSA se introdujo en 1977 y lleva el nombre de sus fundadores: Ron Rivest, Adi Shamir y Leonard Adleman. Fue un algoritmo revolucionario en su momento y sigue siendo ampliamente utilizado en la actualidad. El principio básico detrás de esto es utilizar un par de claves, conocidas como claves pública y privada. Mientras que la clave pública se utiliza para el cifrado, la clave privada es responsable del descifrado. Tú cifras el mensaje y el receptor lo descifra utilizando la clave privada.
Al utilizar el producto de dos números primos como clave de cifrado, se logra un alto nivel de seguridad. Esto se debe a que es extremadamente intensivo desde el punto de vista computacional intentar calcular la clave privada utilizando simplemente la clave pública. Debido a que funciona con dos claves diferentes, RSA se denomina algoritmo de criptografía asimétrica.
¿Cómo funciona el algoritmo RSA?
Como se mencionó, hay una clave pública y una clave privada involucradas. La clave pública consta de un módulo del producto de números primos y lo que se denomina exponente de cifrado. El módulo se calcula como el resto de dividir un número por otro. En este caso, elevamos la representación numérica del mensaje a la potencia del exponente y la dividimos por el producto de los números primos. La clave de descifrado tiene un exponente y un módulo de descifrado. Cuando el mensaje se eleva a la potencia del exponente de descifrado, se decodifica el mensaje original.
Como ejemplo simple, considera una página web que solicita datos de un servidor. El servidor recibe la clave pública del sitio web, que la cifra mediante una clave pública. Este mensaje se envía de vuelta al sitio web, que lo descifra utilizando su clave privada. Alguien más puede tener acceso a la clave pública, pero sin tener la clave privada, los datos están seguros y no pueden ser descifrados por un tercero.
Dado que la seguridad depende del hecho de que es difícil factorizar un número entero particularmente grande, depende en gran medida del tamaño de la clave. La fuerza del cifrado aumenta exponencialmente con el tamaño de la clave. Actualmente, las claves suelen tener una longitud de 1024 o 2048 bits, que son inviables de descifrar tal como están.
Proceso paso a paso del algoritmo RSA
Los pasos del algoritmo RSA se pueden resumir como tales:
- Generación de claves
- Cifrado
- Descifrado
Examinémoslos para ver cómo funcionan.
Generación de claves
Primero, necesitamos generar las claves pública y privada utilizando números primos. Debemos elegir dos primos distintos, que se denotan como p y q. El producto de estos se llama n por lo que tenemos n = p * q. Luego usamos la función totient de Euler para determinar el rango de valores posibles que podemos tener para la parte exponente de la clave. La función totiente de Euler viene dada por: φ(n) = (p-1) * (q-1) donde φ(n) es la función. El exponente elegido, e, debe ser primo relativo de la función, lo que significa que no tiene ningún factor común con p y q excepto 1.
Contenido relacionado: 10 consejos para aumentar seguridad de smartphone
Un ejemplo
Por ejemplo, consideremos p = 11 y q = 3. En este caso, n = 11 * 3 = 33. Por tanto, φ(n) = 10 * 2 = 20. Podemos elegir 3 como número relativamente primo para e.
Luego viene un paso relativamente complicado. Necesitamos calcular el inverso multiplicativo modular de e módulo φ(n). Este será nuestro exponente privado, utilizado para el descifrado. En términos simples, el módulo calcula el resto cuando un número se divide por otro, en este caso, e por φ(n). Usando e como 3 y φ(n) como 20, obtendríamos un resto de 3, ya que 3 no se puede dividir entre 20.
El inverso multiplicativo modular, d, de e módulo φ(n), es un número que cuando se multiplica por e y se divide por mod φ(n), el resto es 1.
Esto se puede escribir como: ed / mod φ(n) ≡ 1 o ed ≡ 1 mod φ(n), donde ≡ significa que estos términos son congruentes. Esto significa que tanto ed como 1 tienen el mismo resto cuando se dividen por φ(n).
En otras palabras, existe un valor para d donde ed es divisible por φ(n). Si restamos 1 a ed, obtenemos: ed – 1 = 0 modificación φ(n)
Sabemos que e = 3, por lo tanto 3d – 1 debe ser divisible por φ(n), que es 20.
Si probamos números enteros que comienzan en 1, encontramos que el valor más pequeño de d es 7. Podemos verificar esto calculando (7 * 3) – 1, que es igual a 20.
Por tanto, tenemos nuestra clave pública (n, e), o (33, 3), y nuestra clave privada (n, d), o (33, 7).
Algoritmo euclidiano extendido
Alternativamente, podemos usar el algoritmo euclidiano extendido para encontrar d, que es ideal para casos más complicados. Este algoritmo proporciona los coeficientes de la identidad de Bézout y calcula el máximo común divisor de dos números enteros, a y b, tales que: hacha + por = mcd(a,b) Sabemos que en nuestro caso, el mcd debe ser igual a 1 para que e y φ(n) sean primos relativos. Sustituyendo a por e y b por φ(n), obtenemos: 3x + 20y = 1 Empezamos dividiendo 20 entre 3, que se puede escribir así: 20 = 3(6) + 2, donde 2 es el resto.
A continuación, continuamos moviendo el divisor hacia la izquierda, y el resto hacia donde estaba el divisor, y haciendo el mismo cálculo: 3 = 2(1) + 1 Una vez que tengamos un resto de 1, el proceso estará completo. Ahora necesitamos sustituir para encontrar el valor de d. 3 = 2(1) + 1 también se puede escribir como 3 – (20 – 3(6)) = 1, porque 2 = 20 – 3(6), según la ecuación anterior. Ahora podemos simplificar esto a 3(7) – 20 = 1. Por lo tanto, podemos deducir que d = 7, que coincide con el valor anterior.
Ahora que tenemos nuestras claves pública y privada, podemos pasar al siguiente paso: el cifrado.
Cifrado
Primero, necesitamos un mensaje de ejemplo para cifrar. En aras de la simplicidad, vayamos con «HOLA». No podemos usar representación ASCII aquí, ya que los mensajes resultantes serían más grandes que el módulo n. Entonces, vayamos con una representación más simple, usando el alfabeto estándar. No podemos usar 0 o 1 aquí, porque darán el mismo valor de cifrado. Por lo tanto, comenzaremos en 2. Este mensaje entonces sería equivalente a H = 9, E = 6, L = 13 y O = 16.
La fórmula de cifrado es texto cifrado = (texto sin formato^e) mod n, donde e = 3.
Entonces, por ejemplo, ciphertext_H = (9^3) mod 33, que es igual a 3. El resto de letras son iguales a 18, 19 y 4. Los concatenamos, lo que básicamente significa combinarlos, para dar «3 18 19 19 4».
A continuación, pasemos a cómo se descifraría este mensaje.
Te sugerimos leer: ¿Qué es IMAP? | Protocolo de acceso a mensajes de Internet
Descifrado
El proceso de descifrado es esencialmente el inverso del cifrado y utiliza nuestro exponente de descifrado, d. Siguiendo con el ejemplo anterior, tenemos “3 18 19 19 4”, y calculamos: texto plano = (texto cifrado^d) mod n, donde d = 7.
Por ejemplo, para «H», tenemos (3^7) mod 33, que es igual a 9. Este es nuestro mensaje original. Continuar con el resto nos da el resto de nuestros personajes originales: 6, 13, 13 y 16.
¿Cuáles son los usos del algoritmo RSA?
El algoritmo RSA no es perfecto, pero tiene muchos usos, siempre que se implemente correctamente. Algunos de los usos más comunes son:
- Comunicarse de forma segura a través de Internet, correo electrónico y almacenar datos. RSA se utiliza como parte de los protocolos SSL/TLS para el intercambio seguro entre servidores web.
- Intercambio de claves secretas que se utilizarán para el cifrado simétrico.
- Firmas digitales, para verificar que un mensaje no ha sido manipulado.
¿Cuáles son las desventajas del algoritmo RSA?
Como se mencionó anteriormente, la seguridad de RSA depende en gran medida del tamaño de la clave. Se recomienda utilizar un tamaño de clave lo más grande posible, pero esto puede provocar un rendimiento más lento. Es más, el consenso actual es que las claves de 1024 bits, que se utilizan comúnmente, pueden ya no ser suficientes para protegerse contra posibles ataques.
Esto se debe a que la potencia informática sigue aumentando, junto con la capacidad de implementar algoritmos de factorización más potentes para descifrar los cifrados. De hecho, se han creado con éxito claves de 4096 bits, pero el principio es que cualquier algoritmo de cifrado es teóricamente vulnerable. Incluso cuando se utiliza el relleno adecuado, se recibirá un mensaje de error cuando el relleno sea incorrecto. Esto puede ayudar a los piratas informáticos a deducir el texto sin formato después de suficientes iteraciones.
Sin embargo, cabe decir que cualquier algoritmo es potencialmente vulnerable y muchos de los problemas que surgen con RSA se deben a una implementación incorrecta. Esto a menudo incluye generar claves aleatoriamente, usar un tamaño de clave insuficiente, usar números primos de una forma específica, usar la misma clave para cifrado y firma, o usar exponentes pequeños (comúnmente se elige 3).
Existen algunas alternativas que a menudo se prefieren a RSA. Estos incluyen criptografía de curva elíptica (ECC), el algoritmo Diffie-Hellman (DH), el estándar de cifrado avanzado (AES) y el algoritmo de firma digital (DSA).
Conclusión
RSA es uno de los algoritmos de cifrado más establecidos y utilizados y existe desde finales de los años 70. Si se usa correctamente, proporciona una forma relativamente simple y segura de cifrar, principalmente en comunicaciones por Internet y firmas digitales. El algoritmo utiliza aritmética modular y números primos para crear un par de claves seguras. Las mejores prácticas incluyen usar un tamaño de clave grande, implementar el algoritmo correctamente, no usar números primos de una forma específica o claves generadas aleatoriamente y usar relleno.
Preguntas frecuentes
¿Qué es el algoritmo RSA?
El algoritmo RSA, que lleva el nombre de Rivest, Shamir y Adleman, sus inventores, se utiliza para cifrar mensajes para una comunicación segura y firma digital.
¿Cómo funciona el algoritmo RSA?
RSA funciona utilizando números primos y aritmética modular para generar claves públicas y privadas. Tú cifras el mensaje y el receptor lo descifra con su clave privada.
¿Qué tan seguro es RSA?
RSA puede ser seguro, pero, como ocurre con cualquier algoritmo de cifrado, puede ser vulnerable a ataques. Se recomienda encarecidamente utilizar tamaños de clave grandes, no utilizar claves generadas aleatoriamente o números primos de una forma específica, utilizar relleno y asegurarse de que su implementación sea correcta.
¿Cuál es la longitud de clave más común para RSA?
Los más utilizados son 1024 o 2048 bits. Se han generado claves de 4096 bits con éxito, pero aún no se utilizan de forma generalizada.
¿Qué son las firmas digitales?
Las firmas digitales ayudan a autenticar documentos y verificar que no hayan sido manipulados, al permitir que el destinatario firme digitalmente el documento. Al utilizar un cifrado adecuado, esta firma es segura.
No te vayas sin leer: ¿Qué es GraalVM? Máquina virtual para Java
¿Qué es el cifrado asimétrico?
RSA funciona mediante cifrado asimétrico, lo que significa que utiliza un par de claves para cifrar y descifrar. La clave privada se mantiene en secreto, como su nombre indica. El cifrado simétrico, por otro lado, utiliza una clave compartida para cifrar y descifrar.
¿Podemos reutilizar claves RSA?
No, las claves deben generarse de forma única cada vez que las necesites.
¿Qué alternativas a RSA existen?
Las alternativas incluyen algoritmos ECC, AES, DH y DSA.