Tengo un sistema compuesto por diferentes computadoras que deben comunicarse en un contexto en tiempo real.
Todas las comunicaciones deben estar cifradas y este sistema no está conectado a Internet, es solo un grupo de computadoras que están conectadas a través de diferentes switches.
Cada computadora puede tener diferentes conexiones con las otras, actuando como servidor y / o cliente, usando UDP y / o TCP.
Lo que me gustaría hacer es implementar algo que no sea voluminoso o demasiado complejo. Mi idea fue usar de alguna manera AES 128 (o 256) y el modo GCM.
Estaba pensando que podría haber un servidor central a cargo de la distribución de una sola clave que puedan usar todas las demás computadoras para cifrar todos los datos. Específicamente, estaba pensando en cargar todas las claves públicas a esta computadora y luego cada cliente, al iniciar el sistema, recupera la clave del servidor y usa esta clave para cifrar la comunicación con AES. Básicamente, estoy diciendo que use AES con una clave precompartida que se puede obtener desde un servidor central.
La contraseña creada en el servidor central se puede cambiar de forma manual o automática todos los días.
¿Qué opinas sobre este diseño? Estoy planeando desarrollar todo en C ++, ¿alguna sugerencia sobre qué tecnología / biblioteca debo usar?
He visto que hay libcrypto ++ de bajo nivel, pero que también hay OpenSSL que proporciona capacidades TLS y DTLS. ¿Es posible configurar OpenSSL para crear un sistema como el que he descrito o debo usar otras bibliotecas como libcrypto ++?