Podcast: Reproducir en una nueva ventana | Descargar
Tras explicar en los últimos capítulos la composición de los certificados digitales y analizar el caso específico de la autoridad de certificación Let’s Encrypt, hoy hablaremos sobre el uso más conocido de estos certificados: la navegación segura mediante HTTPS. Ya comentamos antes que una de las primeras recomendaciones de seguridad es no introducir usuarios o contraseñas en páginas web que no estén cifradas (hay que mirar el candadito en la barra de navegación).
Antes de entrar en el funcionamiento exacto de HTTPS, hablemos un poco de criptografía. Sin entrar en detalles podemos decir que hay dos grandes bloques de sistemas de cifrado: los de clave simétrica (donde se utiliza la misma clave para cifrar y descifrar) y los de clave asimétrica (donde hay dos claves diferentes: una para cifrar y otra para descifrar). Dentro de los algoritmos asimétricos, destacamos la criptografía de clave pública. Estos algoritmos tienen la característica de que una de las claves es pública y la conoce todo el mundo, y aún así es computacionalmente imposible obtener la otra clave (privada). En nuestro caso, el navegador del usuario podría utilizar la clave pública del servidor (que está disponible en el certificado X.509) para enviar información que sólo pueda ser leída por el servidor web (que tendrá la clave privada para descifrar el mensaje enviado).
Diffie-Hellman es un protocolo, que coge el nombre de los apellidos de sus dos autores, que permite generar una clave común para los dos interlocutores (navegador y servidor web) a partir de unos parámetros iniciales. Una vez se haya acordado la clave simétrica que usarán para esa conexión ya puede empezar la transferencia de inforamción de forma confidencial.
Funcionamiento de HTTPS
Cuando un navegador acceder a una página web (por ejemplo el securizando.com), el servidor le suele redirigir, si está disponible, a la versión HTTPS. El navegador se descarga el certificado público de la web y lo utiliza para cifrar la siguiente comunicación cliente>servidor. De esta forma únicamente el servidor puede leer la información enviada. ¿Qué se envía? Pues los parámetros de inicio del protocolo Diffie-Hellman para la generación de una clave simétrica.
Repasando:
- El navegador accede al servidor web y se descarga su certificado X.509 donde se encuentra su clave pública.
- El navegador inicia el protocolo Diffie-Hellman para conseguir una clave de sesión. Cifra los parámetros iniciales con la clave pública del servidor y se la envía.
- El servidor recibe los parámetros y inicia su parte del protocolo Diffie-Hellman. Envía sus parámetros al cliente firmados (así el cliente se asegura de que realmente es el servidor el que los envía y no un tercero). Este parámetro no va cifrado, pero el protocolo Diffie-Hellman hace que sólo con este parámetro no se pueda conseguir la clave final.
- Ahora el navegador sigue con el protocolo Diffie-Hellman y calcula la clave simétrica de sesión. A partir de este momento la comunicación entre cliente y servidor irá cifrada con la clave que han calculado los dos extremos.