Un cliente se está comunicando con un servidor a través de https usando autenticación bidireccional. Me gustaría añadir una capa extra de seguridad.
El protocolo se vería algo así como:
-
Una clave simétrica de 128 bits se almacena en un archivo en el servidor.
-
El cliente se conecta a la dirección IP del servidor mediante https: // y obtiene acceso a través de su certificado de cliente en el que el servidor confía.
-
El cliente muestra una página html vacía con un cuadro de entrada en el que tiene que escribir la clave simétrica, que luego se almacena localmente como una variable js en el navegador.
-
Se realiza un paso de verificación al enviar un mensaje cifrado AES al servidor utilizando la clave simétrica del cliente, que luego el servidor descifra con su versión de la clave simétrica. Si esto tiene éxito, el cliente tiene acceso al resto del html.
-
Todos los datos subsiguientes que son intercambiados por el cliente y el servidor se cifran / descifran usando la clave simétrica para AES-CBC.
Dos ejemplos de por qué esta capa adicional puede proporcionar seguridad adicional:
- Si el atacante obtiene un certificado en el que confía el cliente y actúa como servidor. No podría leer los mensajes enviados por un cliente.
- Si el atacante obtiene un certificado en el que confía el servidor, todavía deberá escribir la clave simétrica.
¿Tengo razón sobre los dos ejemplos y, en segundo lugar, ves algún error / ataque que desconozco?
P.S. Para aclarar: la misma clave simétrica se usaría para cada sesión, ya que es la que está fija y almacenada en el servidor. Se utiliza un IV aleatorio para cada cifrado AES-CBC y se envía junto con el mensaje cifrado.