¿Cómo puede un servidor probar la autenticidad?

1

Estoy trabajando en una plataforma de mensajería segura y tengo problemas para descubrir cómo protegerme contra los ataques MITM.

Mi configuración actual se puede resumir de la siguiente manera: el servidor mantiene una clave privada y hace pública la clave pública que luego se puede instalar en los clientes. Al enviar datos al servidor, debe cifrarse con la clave pública, que luego se descifra en el servidor y se vuelve a cifrar con la clave privada antes de reenviarla al destinatario.

Esquema ASCII de la situación normal:

Remitente - Encrypted, can be intercepted but not deciphered - > Servidor - Encryped with the private key, if intercepted can be broken since the public key is public - > Destinatario

Solo a partir de esa información, deberíamos ver que la parte Sender- > Server es segura y que un hombre en el medio no haría nada (Intentar algo corromperá el protocolo y la conexión se terminará). Sin embargo, la parte Servidor > Destinatario no es segura contra ataques MITM ... ¡en absoluto!

Para empeorar las cosas, cuando se envían los datos, también se envían al remitente para confirmar que se enviaron, comprometiendo a ambos clientes con los ataques MITM.

Entonces, aquí está mi pregunta, en la conexión inicial, ¿cómo puede el servidor probar que es realmente el servidor real?

Escenarios de muestra:

Evil Server no debe pretender ser el Real Server Cliente - > Servidor malvado - > Servidor real

Real Server debe poder demostrar que él es, de hecho, Real Server. Cliente - > Real Server

Notas: Esto se hace sobre TCP. Estoy buscando una solución que no requiera una gran infraestructura, pero puedo permitir el uso de un par de servidores externos para verificar (sin embargo, estos también necesitarán una forma de probar su autenticidad).

    
pregunta Slava Knyazev 14.05.2016 - 01:02
fuente

1 respuesta

3

Comience cada sesión haciendo que el cliente genere una clave de cifrado simétrica, la cifre con la clave pública del servidor y la envíe al servidor. Tanto el servidor como el cliente pueden cifrar todas las comunicaciones posteriores durante la sesión con esa clave simétrica.

Un servidor impostor no tendría la clave privada del servidor, por lo que no puede descifrar la clave de sesión y, por lo tanto, no puede comunicarse con el cliente.

Por cierto, actualmente estás reinventando TLS con la fijación de certificados. En general, debe evitar inventar sus propios sistemas criptográficos. Utilice lo que ya está allí y las vulnerabilidades ya probadas por innumerables personas.

    
respondido por el Philipp 14.05.2016 - 01:08
fuente

Lea otras preguntas en las etiquetas