PPTP en sí, como se especifica, no incluye ningún cifrado; pero la implementación PPTP más utilizada, incluida con Windows, incluye una capa de cifrado no estándar, que resultó ser bastante mal hecha y, por lo tanto, craqueables de muchas maneras, algunas de ellas genéricamente mortal . En este caso específico, la clave utilizada para el cifrado se calculó de manera determinista (a través de una simple invocación de la función hash) sobre la concatenación de la contraseña de usuario hash, y un nonce aleatorio que se intercambió (como texto claro) durante el paso de autenticación inicial. >
En general , para que una clave simétrica se comparta entre dos sistemas, hay dos opciones:
-
La clave se deriva de un secreto compartido inicial, que se configuró mediante algún procedimiento de inicialización. Esto es lo que Microsoft estaba haciendo con PPTP, siendo el "secreto inicial" el (hash de) la contraseña del usuario. La derivación puede incluir algunos valores aleatorios (que deben enviarse de un sistema a otro) para que se genere una clave diferente cada vez.
-
Una clave se genera dinámicamente con un protocolo de acuerdo clave . Este es el modelo de SSL y, de hecho, hay una implementación de VPN que usa SSL (por ejemplo, OpenVPN ) . Para prevenir los ataques Man-in-the-Middle , debe ocurrir algún tipo de autenticación. SSL utiliza certificados X.509 . Consulte esta respuesta para algunas explicaciones sobre cómo una cosa tal como crear un secreto compartido de la nada puede funcionar. Las diferencias entre una VPN y una conexión HTTPS de navegador a servidor web no son relevantes aquí: se aplican los mismos conceptos.