Criptografía: encriptación simétrica vs asimétrica

La encriptación es un proceso reversible que convierte datos legibles en un formato ilegible (cifrado) utilizando algoritmos matemáticos de transformación y una llave (clave).

El objetivo principal es proteger la confidencialidad de los datos, asegurando que solo las partes autorizadas puedan acceder a la información original utilizando la misma llave (simétrico) u otra llave (asimétrico).

En la encriptación simétrica se utiliza la misma llave para encriptar y para desencriptar. Encriptar y desencriptar usando la llave es un proceso rápido y no demandante en términos computacionales. Desencriptar sin la llave es computacionalmente inviable (llevaría más tiempo que la edad del universo). Un ejemplo de algoritmo de encriptación simétrica muy usado es AES-256 y AES-512.

El problema es como compartir la llave entre ambas puntas. Cualquier hacker que intercepte la llave de encriptación podrá desencriptar el mensaje con facilidad.

Para solucionar este problema se inventó la encriptación asimétrica. En la encriptación asimétrica se generan 2 llaves en vez de una, una llave privada que no se comparte y una llave pública que se comparte libremente. Estas llaves se crean en pares, es decir están relacionadas entre sí a través de un cálculo matemático que generalmente se basa en el uso de números primos enormes (de miles de dígitos). Un numero primo es un número que no tiene divisores, excepto los triviales (1 y si mismo).

La llave pública que se comparte sirve para encriptar. Cualquiera puede encriptar un mensaje, incluso un hacker podría. Lo importante que una vez encriptado el mensaje solo se puede desencriptar con la llave privada que solo la tiene el que la creó.

Con la llave pública un hacker no puede desencriptar un mensaje encriptado con esa misma llave pública.

Para entender por qué pasa eso, usaremos una analogía. Imaginemos una cerradura que tiene 3 posiciones. A la derecha y a la izquierda la cerradura está cerrada, arriba está abierta. Ambas llaves entran y gira la cerradura, pero en direcciones contrarias. En este ejemplo la llave pública solo puede girar en sentido antihorario, mientras que la llave privada solo puede girar en sentido horario.

Si guardamos nuestra información en una bóveda con este candado imaginario y cerramos el candado con la llave pública (encriptación) la cerradura quedara en la posición de la izquierda como muestra la siguiente figura.

Está claro que con la misma llave pública (que cualquiera puede tener), no se puede abrir este candado, pues esta llave solo puede girar en sentido antihorario y más antihorario de lo que ya está la cerradura no se puede estar. Sin embargo, si puede abrirse con la llave privada, ya que esta llave gira en sentido horario. Y esta llave solo la tiene el que creó el par de llaves y jamás la compartió.

Nótese que, si ahora cerráramos la cerradura con la llave privada, solo podría abrirse con la llave pública.

Pero la llave publica la puede tener cualquiera. Por eso no sirve para garantizar confidencialidad, pero si la autenticidad del remitente. Este proceso de que cualquiera pueda abrir algo que solamente yo pude haber cerrado (porque soy el único que posee la llave privada ya que yo la cree y no se la compartí a nadie) es una forma de asegurar que ese contenido solo puede venir de mí y de nadie más. A esto se lo llama firma digital.

El primer gran algoritmo de encriptación asimétrica fue el RSA. La encriptación asimétrica es la base de criptografía pública. Gracias a ella podemos compartir información de internet. RSA, en particular utiliza una propiedad de los números primos, son fáciles de multiplicar, pero extremadamente difícil de factorizar. Esto significa que es fácil generar 2 numero primos de digamos 300 dígitos cada uno y multiplicarlos para obtener un numero de 600 dígitos. Este numero solo tendrá 2 divisores (factores) que serán precisamente esos 2 números primos. Encontrar eso 2 números (factorización en factores primos) es una tarea para lo cual no existe un algoritmo computacionalmente eficiente, es decir, que pueda ser resuelto en tiempos polinómicos (razonables). Encontrar esos 2 números primos permitiría romper el algoritmo de encriptación RSA, pero usando numero de cientos de dígitos, puede llevar millones de años usando la supercomputadora más avanzada que existe hoy.

Existen otros algoritmos asimétricos que no se basan en la factorización de números enormes sino en la resolución del logaritmo discreto, otro problema de gran dificultad. Si bien este tipo de algoritmos tiene una complejidad similar al de la factorización, tiene la ventaja que permite su implementación sobre una estructura matemática conocida como curvas elípticas, dando la posibilidad hoy en día de algoritmos superiores, como por ejemplo ECDH y ECElGamal. Estos algoritmos con solo 128 bits son tan seguros como RSA 2048.

Por eso, la criptografía nos da seguridad. Sin embargo, los demonios existen, y uno de ellos se llama computadora cuántica, que, aunque por ahora se encuentra en su infancia, tiene la capacidad de factorizar numeros enormes y resolver el problema del algoritmo discreto muy rápidamente. Ver aqui.

Cuando esta ocurra, y se estima que ocurrirá con un 50% de probabilidad en los próximos 20 años, ya no estaremos seguros con los algoritmos de encriptación tradicionales. Sin embargo, ya se están desarrollando algoritmos de encriptación post-cuánticos, pues existen muchas operaciones matemáticas que son incluso intratables para una computadora cuántica.