Qué es el cifrado y cómo funciona

Hoy en día, el cifrado se utiliza hasta en las aplicaciones más simples. Ya que es muy sencillo hackear tu información en Internet, el cifrado y otros tipos de criptografía son las mejores herramientas para proteger tu información.

La mayoría de aplicaciones y programas utiliza algún tipo de cifrado. Las mejores VPNs utilizan AES con claves de 256 bits, por lo que utilizar una VPN es el mejor modo de asegurar tu actividad en Internet.

Oras aplicaciones populares, como WhatsApp y Gmail, también utilizan algún tipo de cifrado.

No obstante, aunque usamos criptografía en nuestra vida cotidiana, la mayoría de nosotros no sabe cómo funciona.

Para ayudarte a comprender cómo funciona la criptografía, vamos a analizar un ejemplo práctico.

El problema de los canales abiertos

Tomemos como ejemplo una sala de chat de Internet estándar en la que los usuarios se comunican unos con otros por mensajes de texto. Veamos cómo crearíamos una sala de chat segura con mensajes cifrados.

La primera implementación sería un canal simple de comunicaciones basado en TCP. Al no haber seguridad, todos los mensajes que envían los usuarios están abiertos a un posible ataque.

Así, cuando Alice y Bob se envían mensajes de texto, un atacante podría situarse en medio y espiar los mensajes. Esto se conoce como ataque Main in the Middle (“persona en medio”). Un hacker también podría alterar los mensajes y redirigirlos, ya que el canal de comunicación transmite por defecto los mensajes en forma de texto simple, sin cifrado. Lo mismo ocurre con toda la comunicación HTTP a través de redes WiFi abiertas. Claramente, es necesario un sistema mejor.

Cifrado simétrico

El cifrado simétrico utiliza un algoritmo que convierte el mensaje original en forma de texto simple en un mensaje cifrado ciphertext utilizando una clave de cifrado. El destinatario del mensaje utiliza la misma clave para convertir el mensaje en ciphertext de vuelta a texto simple. Aplicando este concepto a nuestro ejemplo:

Cuando Alice quiere enviar un mensaje a Bob, lo cifra con una clave simétrica. Cuando Bob lo recibe, Bob utiliza la misma clave para descifrar el mensaje. Sin esta clave un atacante no puede acceder a la comunicación cifrada entre los dos usuarios, por lo que ésta es confidencial.

Normalmente se genera una clave simétrica por cada sesión y no es válida para futuras comunicaciones. Esta se llama session key o clave de sesión.

No obstante, este enfoque tiene puntos débiles:

  1. Escalabilidad: Nuestra solución no es escalable. Si 1.000 usuarios quieren comunicarse entre ellos, cada uno de ellos necesitaría 999 claves diferentes para establecer un canal seguro.
  2. Distribución de claves: Antes asumimos que ambas personas tenían acceso a la clave simétrica, pero ¿cómo la obtuvieron? Si Alice genera una clave simétrica (clave de sesión) y se la envía a Bob, el atacante podría interceptarla y descifrar cualquier comunicación futura.

Por tanto, ¿cuál es la siguiente opción?

Cifrado asimétrico

El cifrado asimétrico utiliza dos claves: una clave privada y una pública. Cuando el texto simple se cifra con una clave pública, sólo puede ser descifrado con la clave privada correspondiente y viceversa.

Esta es una solución al problema de dos claves simétricas. El cifrado asimétrico es más lento que el simétrico, por lo que generalmente se usan ambos conjuntamente. Veamos cómo:

Todos los usuarios tienen un par de claves pública-privada. La clave pública está disponible y es conocida por todos, pero la clave privada es confidencial y la protege su dueño.

Cuando Alice quiere enviar un mensaje a Bob, primero crea una clave de sesión (simétrica) y después cifra el mensaje con la clave pública de Bob. Dado que Bob tiene la clave privada correspondiente, sólo él puede descifrar el mensaje y obtener la clave de la sesión.

A partir de entonces, esa clave de sesión puede ser utilizada para cifrar y descifrar los mensajes entre ambos, lo que resuelve el problema de la distribución de claves sin comprometer la velocidad ya que el lento cifrado asimétrico sólo se utiliza para el intercambio inicial.

También se resuelve así el problema de la escalabilidad, ya que todos necesitan sólo un par de claves pública-privada para comunicarse unos con otros.

Ahora el sistema ha mejorado significativamente, pero sigue sin ser completamente seguro. Seguimos teniendo problemas con:

  1. Autenticación: Estamos usando la clave pública de Bob como punto de partida, pero ¿cómo la obtuvimos? La clave pública que recibimos pudo haber procedido de Bob o de alguien que se haya hecho pasar por él (un atacante), por lo que, aunque nos estamos comunicando de forma segura, lo hacemos con la persona equivocada.
  2. Integridad de los datos: El mensaje podría alterarse durante la transferencia de los datos. Tenemos que asegurarnos de que los datos no se manipulan.

Certificados y firmas digitales

La autenticación requiere un sistema de confianza. El sistema consiste en que una Autoridad de Certificados (CA) de confianza asegura que una clave pública pertenece a una persona determinada, ya que cada uno de los usuarios del sistema registra un certificado digital con la CA; este certificado contiene la información de la identidad del propietario y una clave pública.

Así, cuando Alice quiere comunicarse con Bob, ella puede comprobar con la CA si la clave pública que ha recibido pertenece a Bob. El HTTPS de Internet funciona del mismo modo. Un certificado raíz se vincula a varios certificados hijos con firmas digitales (descrito más adelante).

Pero ¿cómo sabemos que el certificado recibido es de la CA raíz y no de un atacante? Normalmente, los certificados raíces de una CA de confianza están programados en el navegador, lo que nos da un punto de partida de confianza.

El problema de la integridad de datos puede resolverse utilizando firmas digitales (no confundir con certificados digitales).

Cuando Alice quiere enviar un mensaje a Bob, primero crea una clave de sesión y la cifra con la clave pública de Bob. Llamemos a este paquete de datos PART1. A continuación, Alice crea un hash de mensaje utilizando uno de los muchos algoritmos de hashing disponibles (MD5/SHA256). Un hash de mensaje es una conversión de sentido único de un byte de longitud variable a uno de una longitud determinada.

No se puede obtener el mensaje original a partir del valor del hash, y es estadísticamente improbable que dos mensajes tengan el mismo valor de hash.

Después de crear el hash, Alice lo cifra con su clave privada. Esto recibe el nombre de firma digital ya que puede utilizarse para comprobar que el mensaje procede de ella y no ha sido manipulado.

La firma digital y el mensaje original se cifran después con la clave de la sesión. Llamemos a este paquete PART2; nos queda entonces lo siguiente:

PART1 = CLAVE_PUBLICA_BOB -> (CLAVE_SESION)

PART2 = CLAVE_SESION -> (MENSAJE + FIRMA_DIGITAL)

Aliance envia PART1 y PART2 a Bob. Ya que sólo Bob tiene la clave privada, sólo Bob puede descifrar PART1 y acceder a la CLAVE_SESION.

A continuación, Bob utiliza esta clave de sesión para descifrar PART2 y recuperar el mensaje y la firma digital, y luego utiliza la clave pública de Alice para descifrar la firma digital y recuperar el hash del mensaje. Bob calcula el hash MENSAJE y lo compara con el hash del paso anterior.

Si los hashes coinciden, significa que se ha preservado la integridad de datos y no ha habido manipulación.

Como puedes ver, ahora tenemos un ecosistema completamente seguro.

Mediante el uso de certificados y firmas digitales, podemos crear un sistema de autenticación cifrado que sea rápido, seguro, confidencial y escalable.

Ahora que sabes cómo funciona el cifrado, echa un vistazo a nuestras VPNs favoritas para disfrutar de él. ¡Muchas tienen periodos de prueba gratuitos!

¿Fue útil? ¡Compártelo!
Compartir en Facebook
Twitear esto