Alicia y Bob están tratando de establecer una conversación segura, pero desconocida para ellos es Eva, que puede interceptar y modificar todos los paquetes enviados entre ellos.
La comunicación es la siguiente:
-
Alice envía un saludo a Bob e incluye algunos parámetros (por ejemplo, una clave pública efímera Diffie-Hellman) A. Eve intercepta el mensaje y reemplaza A por E.
-
Bob responde con los parámetros B y también envía su certificado que contiene su clave pública y su dominio. Eve intercepta esto. En este punto, Eve y Bob obtienen un EB compartido secreto de E, B y sus datos privados asociados (por ejemplo, claves privadas DH efímeras asociadas), que Alicia no sabe.
-
Eve reenvía el mensaje de (2) a Alice, dejando el certificado igual (no siendo CA, no puede crear el suyo) pero cambiando B por E. En este punto, Alice y Eve obtienen un EA secreto compartido de E, A y datos privados asociados, que Bob no sabe.
-
Alice verifica el certificado. No se manipuló, por lo que no se levantan banderas.
-
Alice cifra un mensaje usando la clave pública de Bob (del certificado) y lo envía a Bob. Contiene el secreto secreto de EA.
-
Eve intercepta este mensaje (que es cierto que no puede descifrar) y lo descarta. En su lugar, envía a Bob uno nuevo, encriptado con su clave pública, que contiene el secreto EB compartido. Bob mira esto y coincide con el secreto compartido que esperaba, y por eso considera que el apretón de manos es un éxito.
De ahora en adelante, Bob y Eve tienen una conversación usando el secreto compartido EB, y Eve y Alice tienen una conversación usando el secreto EA compartido. Ni Bob ni Alice son conscientes de que Eve está espiando.
Supuestamente, esto debe evitarse mediante el certificado, pero no entiendo cómo.