Estoy diseñando una aplicación web donde los usuarios intercambiarán mensajes cortos con el servidor con mucha frecuencia (por ejemplo, unos pocos caracteres por segundo). Quiero que toda la comunicación sea confidencial, pero el rendimiento (percibido) debe ser aceptable. Tuve la idea de poner HTTP y HTTPS a trabajar juntos usando el siguiente esquema:
El navegador solicitará dos claves (bastante grandes) del servidor a través de HTTPS, luego las almacenará en la memoria (en principio, estoy pensando en teclas de una sola vez, es decir, datos aleatorios). Luego, los contenidos de cada mensaje se enviarán en XOR con la primera clave (sin reutilización, por supuesto) y se enviarán a través de HTTP. El servidor enviará la respuesta de la misma manera, utilizando la otra clave. Cuando una o ambas claves estén a punto de usarse, se solicitará otra, y así sucesivamente.
La razón detrás de esto es que tanto la solicitud XOR como la solicitud HTTP son baratas para mensajes pequeños, por lo que el rendimiento percibido será bueno. Las llamadas HTTPS, más caras, no serán críticas en el tiempo y se beneficiarán de la mayor escala de las claves intercambiadas. Se podría usar otro cifrado de flujo en lugar de pads de una sola vez, y en el futuro (cuando se admita adecuadamente en todas partes), se podría usar WebSockets en lugar de solicitudes HTTP.
¿Se ha usado este tipo de cosas antes? ¿Esto aseguraría adecuadamente la comunicación, o es una idea estúpida, por alguna razón? No pude ver ninguna deficiencia, pero me gustaría escuchar la opinión de personas más experimentadas antes de dedicar demasiado tiempo a esto.