Desarrollamos un protocolo para el control remoto por computadora de un determinado tipo de juguete. Básicamente es una red de sensores y actores que generalmente está conectada a la PC del usuario a través de un puerto serie o USB. Ahora, algunos usuarios desean conectarse a través de Ethernet y queremos diseñar algún tipo de puerta de enlace en un dispositivo integrado.
Se espera que se use solo en redes LAN domésticas (por ejemplo, desde dispositivos móviles a través de un enrutador WiFi), pero estas no deben considerarse seguras y siempre existe la posibilidad de exponerse a Internet. Los riesgos involucrados son múltiples:
- esos juguetes son caros y podrían ser destruidos por el abuso
- el medio ambiente podría verse afectado por la alteración de las fuentes de alimentación del actor
- los dispositivos son capaces de actualizaciones de firmware (no seguras) y pueden ser tomados o bloqueados
- perturbación genérica de la operación de servicio
- escuchas ilegales de datos privados
El dispositivo de puerta de enlace incrustada expondría algún tipo de servidor que acepta conexiones, que deben estar limitadas a las autorizadas. ¿Cómo hacer esto?
Después de la idea inicial de envolver nuestro protocolo serie en paquetes UDP (para baja latencia y baja sobrecarga), consideramos TCP para evitar lidiar con la pérdida de paquetes en redes inalámbricas. TLS es el siguiente paso lógico, que proporciona cifrado 1 . ¿Pero cómo realizar la autenticación y la autorización?
¿Es TLS aplicable en absoluto, cuando se usa en un contexto no web? No necesariamente tenemos nombres de host, ni siquiera acceso a Internet, y no sé cómo validar los certificados. No podemos usar una CA, por lo que nuestra PKI sería diferente y no sé qué agujeros de seguridad se introducen al administrar certificados manualmente. Probablemente ya sea un problema suficiente para que cada servidor, cada dispositivo, tenga su propio certificado generado de forma aleatoria. (También encontré estas dos preguntas relacionadas con problemas similares)
¿Algún tipo de proceso de emparejamiento (similar a Bluetooth o WPS) resolvería el problema con certificados sin validar? El dispositivo integrado estaría equipado con un simple botón para aceptar un cliente 2 , y el cliente recordará (¿"fijará"?) El certificado del servidor. Esta primera conexión sería susceptible a un ataque MITM, pero las conexiones subsiguientes no lo serían. ¿Eso suena viable y seguro? tengo dudas acerca de los planes de elaboración propia.
Una alternativa al emparejamiento que consideré sería un esquema de autorización de contraseña, donde el cliente envía una contraseña al servidor para obtener acceso. 3 Sin embargo, los usuarios tienden a elegir contraseñas débiles, y también yo no tengo idea de cómo (es decir, qué protocolo utilizar) enviar la contraseña a través de la conexión no segura (aún sin haber validado ningún certificado), evitando MITM o los ataques de reproducción.
Por favor, ayúdeme a encontrar una buena solución, ya sea respondiendo las preguntas anteriores o sugiriendo un enfoque completamente diferente que omití por completo. Nuestros principales objetivos / restricciones son:
- buena facilidad de uso incluso para usuarios no técnicos, sin ningún mantenimiento administrativo
- implementación sencilla con bibliotecas ampliamente disponibles para muchos lenguajes de programación
- alto nivel de seguridad (si es necesario, ignorando la fase de configuración donde podría ser imposible)
1: Siempre que se usó con la configuración correcta, me reuní.
2: Supongo que no debemos olvidar una forma de eliminar clientes
3: Con la contraseña inicial asignada al azar a cada dispositivo e impresa en la parte inferior