Comprendo que el secreto de Perfect Forward está destinado a evitar que los datos enviados entre el cliente y el servidor se descifren en caso de que la clave privada se filtre algún tiempo después del envío de los datos.
Pero, ¿por qué necesitamos algo complicado como el intercambio de claves Diffie-Hellman para hacer esto? No podríamos simplemente usar XOR en su lugar, como esto:
- El cliente genera una clave de cifrado aleatoria, K y un número aleatorio de la misma longitud, R1
- El cliente envía K xor R1 al servidor
- El servidor genera un número aleatorio R2
- El servidor envía K xor R1 xor R2 al cliente
- El cliente xors el mensaje con su número aleatorio, enviando K xor R2 al servidor
- El servidor también muestra el mensaje con su número aleatorio, lo que da como resultado la clave, K, que luego se usa para cifrar todas las comunicaciones
Si, por alguna razón, se necesita una clave que no sea generada solo por el cliente / servidor, el servidor puede repetir este proceso y luego se pueden seleccionar las dos claves para obtener la clave final.
A menos que se conozca la clave privada SSL cuando ocurra este intercambio, lo que permitiría a un intermediario modificar los mensajes enviados entre el cliente y el servidor, nadie podrá averiguar cuál es la clave.
Entiendo que XOR es vulnerable a los ataques de texto plano conocido, pero como los números aleatorios y la clave de cifrado se usan solo una vez, no veo por qué esto debería importar.