Cómo enviar mensajes secretos

La criptografía es la ciencia del uso de códigos y cifrados para proteger mensajes, en su nivel más básico. La encriptación consiste en codificar mensajes con la intención de que solo el destinatario deseado comprenda el significado del mensaje. Es una función bidireccional (debe poder deshacer cualquier codificación que haya hecho en el mensaje). Está diseñado para proteger los datos en tránsito.

Uno de los primeros cifrados implicó un simple cambio. Por ejemplo, si simplemente cambia todas las letras del alfabeto unas pocas, el alfabeto podría verse así:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

NOPQRSTUVWXYZABCDEFGHIJKLM

Luego, cada letra del alfabeto corresponde a una letra diferente, pero es difícil averiguar cuál, si aún no lo sabe. Usando este cifrado, el mensaje 'Hola' se traduce como 'Uryyb'.

Desafortunadamente, los avances en el análisis, particularmente el análisis de patrones impulsado por computadoras muy poderosas, hicieron que este tipo de cifrados fuera muy fácil de descifrar.

En respuesta a eso, hemos desarrollado algoritmos muy fuertes y complejos. Estos se pueden dividir en dos tipos básicos de cifrados: algoritmos simétricos y algoritmos asimétricos.

Los algoritmos simétricos también se conocen como algoritmos de 'clave secreta' y los algoritmos asimétricos se conocen como algoritmos de 'clave pública'. La diferencia clave entre los dos es que los algoritmos simétricos utilizan la misma clave para codificar y decodificar (consulte la primera figura a continuación), mientras que los algoritmos asimétricos utilizan claves diferentes para el cifrado y descifrado (consulte la segunda figura a continuación).

Como puede ver en la figura anterior, con cifrado simétrico, si Bob y Midge quieren comunicarse, Bob primero cifra su mensaje con la clave secreta (el mensaje cifrado se llama texto cifrado). Luego se lo envía a Midge. Midge luego descifra el mensaje con la misma clave secreta y puede leer el mensaje. Para devolver un mensaje, el proceso se invierte.

Este proceso es rápido, escalable y muy seguro. El problema con esto es que requiere que ambas partes ya tengan la misma clave secreta. Si no lo hacen, deben pasarlo por canales inseguros, lo que esencialmente elimina la seguridad del cifrado.

Con el cifrado asimétrico, como en la figura anterior, si Bob y Midge quieren comunicarse, Bob cifra su mensaje con la clave pública de Midge y se lo envía. Luego, descifra el mensaje con su clave privada para leerlo. Para devolver un mensaje, el proceso se invierte.

De esta manera, cualquiera puede enviar un mensaje a Midge, ya que ella puede poner su clave pública a disposición de cualquiera, pero solo ella puede descifrar un mensaje (ya que mantiene su clave privada en secreto). También resuelve la necesidad de pasar una clave secreta a través de canales inseguros, porque no es necesario pasar un secreto en absoluto. La desventaja es que requiere que todos los que quieran comunicarse tengan dos claves diferentes (no escalables) y es relativamente lento.

En general, cuando se habla de cifrado, las consideraciones más importantes son:

  • Autenticación / No repudio: si puede probar o no dónde se originaron los mensajes (¿Estoy seguro de quién envió este mensaje?).
  • Reutilizar: ¿Puedo seguir usando esta clave o necesitaré regenerarla para cada nueva comunicación?
  • Efectividad: ¿Qué tan rápido puedo transferir grandes cantidades de datos?
  • Escalabilidad: ¿es esto factible para grupos grandes?
  • Distribución: ¿cómo distribuye las claves a las personas con las que se está comunicando sin revelar el secreto a nadie más?

Ahí es donde comienzan a surgir diferencias significativas entre el cifrado simétrico y asimétrico, que se resumen a continuación:

Para utilizar lo mejor de ambos mundos, muchos protocolos de cifrado modernos utilizarán cifrado asimétrico para establecer una conexión y crear un secreto compartido. Luego, cambiarán al cifrado simétrico para beneficiarse de la diferencia de velocidad.

Cuanto más aprendo sobre criptografía, más creo que Alice y Bob probablemente deberían hablar en persona.

- Paul Reinheimer (@preinheimer) 13 de marzo de 2017