Cada vez que visitas una web segura, tu navegador ejecuta un baile criptográfico en milisegundos. Vamos a verlo paso a paso.
Escribes qubito.es en el navegador. Antes de hablar de cifrado, hay que encontrar al servidor. Tu navegador pregunta al DNS (la "guía telefónica" de internet) cuál es la dirección IP del servidor. Luego establece una conexión TCP (el famoso "three-way handshake"):
La conexión TCP está lista, pero es texto plano — cualquiera podría leerla. Ahora empieza el TLS Handshake. Tu navegador envía un "Client Hello" con la lista de algoritmos criptográficos que soporta y un número aleatorio:
El navegador ofrece sus opciones, como en un menú. ECDHE es cifrado asimétrico (clave pública/privada) y AES/ChaCha20 es cifrado simétrico (misma clave en ambos lados). Veremos por qué necesitamos los dos.
El servidor elige los algoritmos (de la lista del cliente) y envía su certificado digital. Este certificado es la "prueba de identidad" del servidor, firmada por una Autoridad de Certificación (CA) en la que tu navegador confía.
Tu navegador verifica la cadena de confianza: ¿Está firmado por una CA conocida? ¿Ha expirado? ¿El dominio coincide? Si todo es correcto, confía en la clave pública del servidor. Esta verificación usa criptografía asimétrica — firma digital con ECDSA.
Aquí está el truco genial: cliente y servidor necesitan una clave secreta compartida, pero no pueden enviarla directamente porque alguien podría interceptarla. Solución: Diffie-Hellman permite que ambos generen la misma clave secreta sin que ninguno la envíe.
Cada lado tiene un par de claves (pública + privada). Se intercambian solo las públicas. Luego cada uno combina su clave privada con la pública del otro y — gracias a las matemáticas de las curvas elípticas — ambos obtienen el mismo resultado: el Pre-Master Secret.
Ya tenemos el Pre-Master Secret. Pero no lo usamos directamente — se pasa por una función de derivación (HKDF) junto con los valores aleatorios que se intercambiaron, para generar las claves de sesión finales. A partir de aquí, todo el tráfico se cifra con AES-256-GCM — cifrado simétrico.
¿Por qué no usar cifrado asimétrico para todo? Porque es ~1000x más lento que el simétrico. El asimétrico (ECDHE) se usa solo para el intercambio de claves — un momento puntual. El simétrico (AES) se usa para cifrar los datos reales a toda velocidad.
¡Handshake completado! Ahora todo lo que envías y recibes está cifrado con AES-256-GCM. Veamos cómo se ve un mensaje antes y después del cifrado:
AES (Advanced Encryption Standard) opera sobre bloques de 128 bits (16 bytes). La clave de 256 bits se expande en 14 "round keys", y cada bloque pasa por 14 rondas de sustitución, permutación y mezcla. Aquí tienes una visualización simplificada de un bloque de 4×4 bytes:
Todo este proceso ocurre en ~50-100 milisegundos. Tu navegador acaba de: