¿Cifrado de la comunicación TCP?

0

Estoy usando una aplicación exe que se está comunicando con un dispositivo Raspberry Pi con puertos TCP configurados manualmente. La aplicación enviará datos desde el puerto 1234 a la Raspberry Pi que está escuchando en 19000. Pero la comunicación no está cifrada. ¿Puede alguien sugerirme cómo puedo hacer el cifrado entre estos dos puertos?

Navegué un poco y tuve la idea de que puedo implementar SSL sobre TCP. Si alguien tiene mejores soluciones, me encantaría escucharlo.

    
pregunta zappa 05.10.2018 - 08:56
fuente

3 respuestas

6
  

Navegué un poco y tuve la idea de que puedo implementar SSL sobre TCP

Usar SSL / TLS sobre TCP es una buena idea.

Es un protocolo establecido, bien conocido y bien estudiado donde se pueden encontrar muchas bibliotecas y existe mucha documentación. Y, si se usa adecuadamente, ofrece un cifrado sólido y también protección contra el rastreo pasivo y los ataques activos de intermediarios.
Pero asegúrese de usar las bibliotecas TLS recientes y siga la documentación actual y ampliamente publicada para hacer un uso adecuado de la seguridad que ofrece TLS. Además, no intentes "hacer trampa" deshabilitando la validación de certificados, etc., aunque parece que funcionará, por lo general será inseguro.

Dado que no tiene mucha experiencia en esta área, no debe intentar crear su propia capa de protección, ya que es muy probable que presente problemas de los que no sea consciente. Consulte también ¿Por qué no deberíamos rodar el nuestro? .

    
respondido por el Steffen Ullrich 05.10.2018 - 12:48
fuente
1

No mencionó qué sistemas operativos están involucrados (supongo que Linux en el rPi) ni si tiene acceso / se siente cómodo modificando el código.

Si bien podría aplicar el cifrado en el cliente y el servidor, sería mucho más sencillo implementar un túnel entre los 2 dispositivos: apunta a su cliente actual hacia un nuevo servicio en el host del cliente y restringe el servidor para que escuche una Servicio complementario que se ejecuta en el rPi. Entre los 2 nuevos servicios se encripta la conexión.

Hay muchas opciones para la tecnología en la que utiliza los nuevos servicios, pero las opciones más prácticas se basan en TLS o ssh. Para TLS puede usar stunnel o stud (el mismo servicio, configurado de manera diferente en cada extremo) para ssh usa reenvío de puertos desde un cliente ssh como putty / plink / ssh al opensshd en el rPi. En ambos casos, debe configurar el firewall en el rPi para que solo acepte conexiones en el puerto 19000 de localhost.

Ambos métodos se basan en pares de claves, pero el mecanismo basado en TLS tiene muchas más opciones y una posible complejidad. OTOH, si está utilizando un cliente de MSWindows, la interfaz de usuario stunnel es quizás más fácil de usar que con putty o plink.

    
respondido por el symcbean 05.10.2018 - 13:11
fuente
-3

Hola Zappa y bienvenidos,

Mi sugerencia es que comience con un algoritmo simple como RC4, por ejemplo, y mientras aprende, puede mejorar su solución y apuntar a TLS como su objetivo final. Dependiendo del idioma que esté utilizando, le recomendaré que utilice bibliotecas que facilitan el cifrado, no tiene sentido implementar AES por su cuenta. Como bibliotecas que puede usar, le recomendaré que comience con openssl y libsodium, ambas son compatibles con la mayoría de los idiomas y serán fáciles de integrar en su programa.

    
respondido por el camp0 05.10.2018 - 09:55
fuente

Lea otras preguntas en las etiquetas