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).
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. Un ejemplo de algoritmo de encriptación simétrica muy usado es AES-256 y AES-512.
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 algoritmo de encriptación asimétrica mas conocido es el RSA. La encriptación asimétrica es la base de criptografía pública. Gracias a ella podemos compartir información de internet. Como dijimos antes, utiliza una propiedad de los números primos, son fáciles de generar, pero extremadamente difícil de factorizar. Esto significa que es fácil generar 2 numero primos de digamos 500 dígitos cada uno y multiplicarlos para obtener un numero de 1000 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 de números primos) es una tarea para lo cual no existe un algoritmo computacionalmente eficiente, es decir, que pueda ser resuelto en tiempos razonables. Encontrar esos 2 números primos permitiría romper el algoritmo de encriptación RSA, pero para números como los propuestos (de cientos de dígitos), puede llevar millones de años (incluso miles de millones de años) para la supercomputadora más avanzada que existe hoy. 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 es un bebe sin mucho poder, tiene la capacidad de factorizar números primos (y resolver otro tipo de operaciones matemáticas similares) muy rapidamente. Quien quiera entender como una computadora cuántica convierte un cálculo intratable para una computadora clásica, en uno trivial, puede ver este post.
Cuando esta ocurra, y 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.