Entendiendo la criptografía

Imaginemos que Alice quiere transmitir un mensaje secreto a Bob y no puede quedar con él a solas para contarle el secreto. Todo lo que Alice diga a Bob o Bob a Alice será escuchado por Eve, la espía. ¿Cómo puede entonces Alice hacer llegar la información a Bob sin que Eve sepa de qué se trata?

¿En qué consiste la criptografía? En ocultar un mensaje dentro de otro que resulta ininteligible si no se dispone de información adicional (la de desencriptación). Un método criptográfico muy sencillo sería cambiar cada letra por la siguiente del abecedario. Así, la palabra HOLA quedaría IPMB. Sin embargo, este tipo de encriptaciones (sustitución de una letra por otra) son muy débiles y un espía puede romperlas muy fácilmente.

El siguiente paso en la evolución de la criptografía fue el uso de claves. Si dos personas querían comunicarse de forma secreta, establecían antes una clave secreta que solo conocían ellos (por ejemplo, la palabra “EDIFICIO”) y así podían enviarse mensajes secretos que sólo pudiesen desencriptarse conociendo la clave. Para no extender el post no voy a explicar ningún método que permita encriptar y desencriptar con una clave, pero sí un link a un sistema de este tipo: el cifrado de Vigenère (link a la Wikipedia, tiene un ejemplo sencillo y fácil de entender). Nota: puedes seguir leyendo sin entrar al link.

Estos métodos (dentro de los cuales también existen distintos niveles de seguridad, aunque no vamos a detenernos en eso) requieren siempre una cosa: que las dos partes implicadas conozcan la clave secreta. Los métodos más famosos de encriptación simétrica en la actualidad son AES y DES.

Sin embargo, cuando tú te conectas en internet a tu banco (donde la conexión es segura y encriptada), antes no has quedado con ellos para acordar ninguna clave común. Y aún así todo funciona… ¿Qué está pasando? La respuesta se encuentra en las matemáticas (¡sorpresa!), los números primos y la aritmética modular, aunque aquí lo explicaré con algo más sencillo: botes de pintura. Será algo así como Criptografía de clave pública (asimétrica) for dummies.

Imaginemos que Alice quiere transmitir un mensaje secreto a Bob y no puede quedar con él a solas para acordar una clave. Todo lo que Alice diga a Bob o Bob a Alice será escuchado por Eve, la espía. ¿Cómo puede entonces Alice hacer llegar la información a Bob sin que Eve sepa de qué se trata?

He aquí la solución. Alice escoge en su casa un color secreto, por ejemplo el verde. Este color no se lo dirá nunca a nadie (ni a Bob). Además, escoge otro color “base” (por ejemplo el morado) y mezcla en un bote el color base con el color secreto (morado+verde).

A continuación, le dice a Bob que el color base es el morado y además le manda por correo el bote con la mezcla. Por supuesto, Eve espía todo: sabe que el color base es el morado y observa el extraño color de la mezcla. Cuando Bob recibe el mensaje, elige él mismo un color secreto que no dirá a nadie (el azul) y, como Alice, mezcla en un bote aparte el color base con su color secreto (morado+azul) y esta mezcla se la manda a Alice (con Eve espiando).

Cuando el paquete llega a Alice, la situación es la siguiente: Alice sabe su color secreto (verde) y además tiene un bote con un color extraño que le ha mandado Bob (aunque ella no lo sabe, ese color extraño es la mezcla de morado+azul). Por otra parte, Bob sabe su color secreto (azul) y tiene un bote con un color raro (morado+verde).

Si ahora Alice añade al bote que tiene ella (el de Bob) su color secreto (verde), el color resultante será la mezcla morado+azul+verde. Por otro lado, si Bob añade su color secreto (azul) al bote que le ha dado Alice, el color resultante será la mezcla morado+verde+azul. Como da igual en qué orden mezclemos los colores, ¡resultará que Alice y Bob tienen ahora exactamente el mismo color en su mezcla! Y como esto lo han hecho en sus casas, Eve no tiene ni idea de cuál es este color mezcla… por lo que ese nuevo color será el que usen como clave para encriptar los mensajes (con AES, por ejemplo).

En vez de colores, en internet se usan números primos. Resulta que factorizar un número muy grande en producto de primos es una operación bastante compleja (para un número suficientemente grande, con “compleja” me refiero a que todos los ordenadores del mundo tardarían varias veces la edad del universo en factorizarlo). Sin embargo, multiplicar es bastante más sencillo. Si te digo que multipliques 83*251 lo resolverás relativamente rápido. Sin embargo, si te doy el número 20833 y te pregunto de qué dos primos viene ese número, tardarás ya algo más. Si en vez de 20833 te doy un número de 20 cifras… la operación empieza a volverse imposible.

Deja un comentario