Saltar al contenido

Criptografía y criptoanálisis , TLS y seguridad en internet

Compartir en:

Oímos hablar mucho de la seguridad en internet, pero ¿en qué se basa la seguridad en internet? ¿Qué es lo que hace que nuestros datos viaje seguros? Evidentemente, estas preguntas son extremadamente complejas de responder, el campo de la seguridad informática es algo infinito, pero si tendría que expresarlo en una palabra, casi todo se basa en criptografía, y en un nivel más bajo, en matemáticas puras y duras.

Seguro que habéis oído a mucha gente decir que las matemáticas que ha estudiado nunca le han servido en su vida diaria, les sorprendería saber como estas hacen su vida más fácil.

La criptografía como ya sabréis es el arte de ocultar algo a simple vista, es la ciencia que estudia la escritura de los secretos ocultando el mensaje. Sin embargo, el criptoanálisis es la ciencia que centra sus esfuerzos en romper las técnicas de la criptografía, mostrando el mensaje encriptado sin conocer la clave, o demostrando las flaquezas del cifrado.

La una no se entiende sin la otra, por tanto, es importante conocer la diferencia de ambas.

TLS, encriptando en internet

Pongamos un ejemplo simple y cotidiano para ilustrar el funcionamiento de la privacidad en las comunicación de Internet, por ejemplo el simple hecho de consultar el correo.

Para que nosotros podamos acceder al correo y los datos viajen desde los servidores a nuestro ordenador, es necesaria una comunicación cifrada para que nadie pueda mirar nuestro correo entre medio ¿verdad? Todos queremos que nuestro correo sea privado y nadie pueda husmear en él.

Esto se consigue mediante el cifrado, concretamente con una combinación de cifrados que garantizan que el servidor nos envía la información de manera privada, y que solo yo, como destinatario, puedo entenderla.

Os recomiendo que leáis este post sobre el cifrado de clave simétrica y asimétrica para entender mejor el post.

El primer paso para acceder al correo es asegurarnos que el servidor de correo es quien dice ser (alguien puede hacerse pasar por este y ver nuestros datos). Esto se hace mediante un certificado, el servidor nos envía su certificado que asegura que es quien dice ser, este certificado se puede comprobar y validar en internet.

Ya estamos seguros de que el servidor es el de nuestro proveedor de correos, ahora es el momento de encriptar el contenido.

Para esto debemos intercambiar las claves de cifrado con el servidor de correo, pero ¿Cómo iniciamos un intercambio de claves para encriptar si nunca hemos hablado con este equipo?, la comunicación es por internet, ¿Cómo podemos enviar una clave para encriptar el contenido si internet es inseguro para esto?

Esto se hace mediante un proceso de encriptación de flujos de datos denominado TLS (Transport Layer Security).

El paso siguiente según TLS en la comunicación una vez comprobado el certificado, pasa porque nosotros como clientes enviemos un número aleatorio cifrado con la clave pública del servidor a este (recordemos que en el cifrado asimétrico podemos cifrar un contenido mediante la clave pública y solo el conocedor de la clave privada puede verlo). Esto asegura al servidor que nos envía datos a nosotros, y que si alguien interviene no conocerá este número.

Bien, todo ha ido correcto, el servidor ya tiene este número generado por nosotros, y gracias al certificado, estamos seguros de que hablamos con el servidor correcto, perfecto.

A continuación mediante este número se genera una clave de sesión (session key) en el servidor. Esta será la utilizada para encriptar la comunicación mediante clave simétrica (ambos lados conocen la clave de cifrado) pero ¿Cómo enviamos la clave generada al cliente de manera segura? Para esto se emplea el protocolo criptográfico Diffie-Hellmann.

Y diréis, y ¿cómo es posible enviar una clave por internet a dos partes que no han tenido contacto antes? Y ¿Por qué no usar esta técnica si funciona para encriptar de buenas a primeras sin tanto rollo?

A la segunda pregunta es fácil responder, necesitamos las comprobaciones correctas para asegurarnos que el servidor es quien dice ser, y el servidor necesita también saber que está enviando información al cliente que se la ha solicitado (y no a un atacante entrometido). Se vuelven necesarias las verificaciones de certificado, y la compartición de clave mediante criptografía asimétrica con el servidor. Además, el cifrado simétrico es muchísimo más eficiente en coste computacional, las comunicaciones serian muy lentas de no utilizarse.

La primera pregunta, sin embargo, es más complicada y tiene mucha carga matemática (que obviaremos para simplificar). Básicamente, ambos participantes comparten unos números públicos y generan para sí mismos un número secreto cada uno. Cada interlocutor hace una serie de operaciones con los números públicos y su número privado y se intercambian los resultados, mediante otra fórmula matemática que combina los resultados y su número secreto ambos participantes obtienen el mismo resultado, que será la clave simétrica a utilizar.

Los resultados se comparten públicamente, pero revertir las operaciones matemáticas y obtener la clave es un sextillón de veces más costoso que la exponenciación usada para transformar los números, por tanto, se considera un intercambio seguro (la complejidad matemática asegura que el cifrado no puede romperse).

Volvamos a nuestro servidor de correo, una vez terminado el intercambio de claves, tanto nosotros como el servidor estamos seguros de que los interlocutores son correctos, y ambos tenemos una clave para cifrar el contenido que solo ambos conocemos, ¡Excelente! Ya podemos empezar a intercambiar datos cifrados de manera eficiente y privada sin que nadie pueda acceder a esta información.

El motivo principal de todo este follón de claves es debido entre otras cosas, a que es mucho más eficiente cifrar y descifrar contenido con una clave simétrica, el cifrado asimétrica con clave pública solo se utiliza para la transmisión de claves y datos de sesión. Un cifrado asimétrico de los datos sería demasiado lento.

Complejidad matemática

Como podemos ver, la encriptación es segura, dada la dificultad y el coste computacional de romper el criptosistema, un atacante debe realizar unos cálculos matemáticos extremadamente complejos para romper la encriptación, es ahí donde reside la fortaleza y a la vez la debilidad de los algoritmos. Por tanto, podemos establecer que, hoy, la seguridad no es una seguridad teórica como la entendemos de manera clásica, sino que es seguridad computacional.

Pero ¿qué es esto de que los problemas sean difíciles? Para empezar, la dificultad es relativa, la idea es que el problema sea difícil computacionalmente, pero además esta dificultad sea unidireccional, es decir, que el cálculo en una dirección sea simple, pero su inversa sea extremadamente complicada.

La complejidad algorítmica se mide en tiempo y el resultado de lo que se tarda en resolver una función f con n como entrada de esta f(n). Las funciones son complejidades exactas y no suelen utilizarse para medir complejidad, sino las órdenes de magnitud (O(g(n))) que simplifican el cálculo. No voy a entrar en complejidades dado que es en sí bastante complejo, pero si voy a ilustrar los cálculos con una tabla.

Supongamos que tenemos un sistema que es capaz de procesar 1012 Instrucciones por segundo, bien, según su complejidad en la tabla siguiente vemos los tiempos de ejecución para diferentes complejidades matemáticas para este sistema:

ClaseComplejidadTiempo
ConstanteO(n)10-12 Segundos
LinealO(n)1 Segundo
CuadráticoO(n2)31.709 años
CúbicoO(n3)3,17.1016 años
ExponencialO(2n)102999×10(11) millones de año


Por tanto, vemos que conforme aumenta la complejidad, aumenta T, y esto hace que ciertos problemas, tengan una dificultad de cálculo insalvable actualmente.

Uno de los problemas matemáticos más difíciles de resolver es la factorización de números enteros. Pongamos el ejemplo que disponemos de dos números primos a y b, calcular su producto c es muy fácil, la complejidad necesaria es muy baja ya que los algoritmos de multiplicación de enteros son muy eficientes (c = a . b).

Sin embargo, si tenemos c, y sabemos que es el resultado de dos primos, si c es lo suficientemente grande, es muy difícil encontrar los números a y b (factorizarlos). Por estas propiedades, los números primos son muy utilizados en criptografía, y probablemente hayáis oído que son los guardianes de internet, aunque hay otros muchos problemas que se utilizan y combinaciones de estos.

Conclusión

En conclusión, el internet que conocemos hoy en día, todas las transacciones de datos actuales (bancarias, privadas, públicas, militares ….) utilizan las matemáticas para salvaguardar su privacidad. El arte de la criptografía y el criptoanálisis avanza conforme la potencia de cálculo aumenta y los sistemas cada vez incorporan nuevas salvaguardas ingeniosas en gran medida creadas con matemáticas avanzadas.

Uno de los principales retos a medio plazo de la criptografía es superar la potencia teórica de la computación cuántica que esta por llegar, supuestamente estos superordenadores podrían realizar los cálculos en segundos, lo cual es inquietante.

 Aunque es de suponer que todo avanza al unísono y quizás pasemos de los problemas actuales a los problemas cuánticos ¿criptografía cuántica tal vez?.


Juan Ibero

Inmerso en la Evolución Tecnológica. Ingeniero Informático especializado en la gestión segura de entornos TI e industriales, con un profundo énfasis en seguridad, arquitectura y programación. Siempre aprendiendo, siempre explorando.

Compartir en:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *