Estoy desarrollando un servidor de retransmisión VoIP público, que ayudará a evitar los cortafuegos de Internet al permitir que dos clientes se conecten con él y luego retransmitirá datos entre los dos. Ambos clientes se conectarán con un punto final de API para autenticarse primero y solicitar una sesión VoIP, claves de cifrado, etc. El único trabajo del servidor VoIP es transmitir datos. Estaba pensando en proporcionar un número aleatorio (ID) de 64 bits utilizando un CNG para ambos clientes junto con las claves de cifrado, desde el punto final de la API. La forma en que funcionará es que cuando los clientes se conecten con el servidor VoIP se identificarán simplemente proporcionando el ID en texto sin formato (sin SSL). El servidor de retransmisión examinará las ID (y si son válidas, no se han utilizado, etc.) y vinculará las dos conexiones internamente y responderá con un mensaje de confirmación a ambos clientes de que el enlace está activo. Luego, los clientes pueden usar las claves de cifrado (AES) para comenzar a enviar datos cifrados entre sí. El beneficio que veo de este enfoque es que no tengo que escribir ningún código de encriptación para el servidor de retransmisión de VoIP y simplificaré el desarrollo de VoIP por un gran margen. ¿Ustedes piensan que esta es una configuración segura? ¿Es esto propenso a los ataques de Man in the middle?
Algunas aclaraciones: Inicialmente, ambos clientes se conectarán con la API EndPoint (Servicio RestFul) a través de una conexión segura (SSL) para autenticarse, solicitar una llamada VoIP, que creará dos ID únicas (el par se enviará a la VoIP). Servidor de retransmisión también) y claves de cifrado AES (solo enviadas a los clientes). La idea es que el servidor VoIP no necesita saber nada acerca de la conexión, por lo tanto, perder el tiempo y el esfuerzo de desarrollo en la configuración de SSL. Solo emparejará dos conexiones entre sí, así que solo verifique los ID que proporciona cada conexión entrante y luego empareje las dos conexiones (es decir, envíe datos desde A- > B y B- > A). Los clientes utilizarán el cifrado AES en sus extremos para cifrar los datos que envían al servidor de retransmisión pero no serán el protocolo TLS / SSL. Con respecto a las ID, ambos clientes obtendrán una ID única, pero el servidor de retransmisión tendrá ambas ID, por lo que puede vincularlas.