Mi empresa desarrolla un producto IoT conectado a WiFi. Quiero asegurarme de que el proceso de obtención de las credenciales WiFi del usuario en el dispositivo sea lo más seguro posible. En este momento, el producto se encuentra en una etapa de prototipo, por lo que podemos (y haremos) más cambios antes de que llegue al mercado.
En este momento, el proceso es el siguiente:
- El dispositivo crea su propio punto de acceso WiFi. Las credenciales para este punto de acceso se imprimen en una etiqueta en el propio dispositivo.
- El usuario visita una determinada URL (una página web servida por un servidor web incorporado en el producto, utilizando HTTP simple)
- El usuario ingresa sus credenciales de WiFi en un formulario en esa página
- El dispositivo guarda esas credenciales y las usa para conectarse al WiFi del usuario
Varios chicos de la empresa piensan que esto es seguro. Un atacante tendría que entrar en el punto de acceso para detectar las credenciales de WiFi del usuario.
No estoy de acuerdo ya que creo que entrar en el WiFi es un obstáculo bastante bajo. El atacante podría haber echado un vistazo a las credenciales en la etiqueta durante una visita, forzado a entrar en el punto de acceso WiFi o explotar una debilidad en la autenticación del punto de acceso WiFi ( No es inaudito ). Sugiero cambiar el proceso para que se vea como sigue:
- La empresa crea un certificado raíz SSL autofirmado.
- Utilizamos este certificado raíz para firmar certificados individuales únicos para cada producto vendido. El certificado y la clave privada del producto se incorporan en la memoria flash durante la fabricación.
- El usuario accede a nuestro sitio web, descarga nuestro certificado raíz y lo instala en su sistema operativo.
- El dispositivo crea su propio punto de acceso WiFi. Las credenciales para este punto de acceso se imprimen en una etiqueta en el propio dispositivo.
- El usuario visita una determinada URL (una página web servida por un servidor web incorporado en el producto, utilizando HTTPS y el certificado único del dispositivo. El navegador confía en el certificado porque nuestro certificado raíz está instalado.)
- El usuario ingresa sus credenciales de WiFi en un formulario en esa página. La información se envía al dispositivo a través del canal cifrado TLS.
- El dispositivo guarda esas credenciales y las usa para conectarse al WiFi del usuario
Creo que este proceso es muy seguro. Pero impone otros problemas:
- ¿Cómo podemos actualizar el certificado de un dispositivo? Posible, pero muy engorroso y mucho esfuerzo.
- El usuario tiene que instalar manualmente un certificado. Esto no es muy fácil de usar y los usuarios menos expertos en tecnología pueden fallar en hacerlo correctamente, incluso si proporcionamos instrucciones muy detalladas.
Mi (s) pregunta (s):
- ¿Es el proceso sugerido lo suficientemente seguro para un producto de IoT (imagínelo como algún tipo de medidor de energía inteligente que mide su consumo de electricidad)?
- ¿Hay alguna manera de mejorar la experiencia de usuario del proceso (por ejemplo, para evitar la necesidad de instalar nuestro certificado)?
- ¿Hay alguna manera de mejorar el proceso en términos de complejidad de implementación para nosotros (sin comprometer la seguridad del usuario)?
- ¿Existen formas alternativas de obtener las credenciales de WiFi en nuestro dispositivo? No podemos usar Bluetooth y el dispositivo no tiene pantalla ni teclado.