Seguridad adecuada para el dispositivo IoT

2

Estoy desarrollando un producto con MCU Cortex-M simple (sin sistema operativo a bordo, firmware en el metal) y conectividad a Internet a través de un módulo externo.
¿Cómo lo hago seguro? Más específicamente, ¿cómo protejo los datos que se envían hacia y desde el servidor remoto?

Mis pensamientos son:

  1. No puedo asumir que el firmware pueda estar protegido; Ya que todos los usuarios tendrán acceso físico a él, eventualmente encontrarán una forma de volcarlo. La protección de lectura de flash no funcionará, el cifrado del flash no evitará que se descargue de RAM o algo más.
  2. El uso de flash / eeprom cifrado externo no funcionará por los mismos motivos.
  3. Confiar en HTTPS en el chip externo no será suficiente porque el módulo externo está conectado a la MCU a través de UART y se puede detectar o manipular fácilmente.

Tengo una comprensión muy básica de la criptografía, pero sé que no debería inventar la mía, así que supongo que tendré que cifrar todos los datos que se envían al servidor mediante una clave pública conocida como criptografía. Probablemente utilizando claves de sesión. Pero eso aún requiere el uso de una clave secreta maestra en el dispositivo y no sé cómo almacenarlo de forma segura debido a 1).

¿Alguna idea? ¿Existe una solución a prueba de balas bien conocida?

¿O simplemente debería generar claves aleatorias para cada dispositivo (no derivadas de la ID del dispositivo o algo así)? Entonces, si un dispositivo se ve comprometido, no afectará a toda la red, y eso es todo.

UPD: Aclaración: no quiero que el propietario del dispositivo se haga pasar por otros dispositivos y cargue datos falsos (sobre otros dispositivos) en la base de datos.

    
pregunta Amomum 13.10.2018 - 20:59
fuente

2 respuestas

1

Si el problema es que no quieres que ningún dispositivo suplante a otros, el problema es simple y ya está resuelto. Solo mire cada servicio en línea que tiene usuarios y no quiere que un usuario acceda a los datos que pertenecen a otro usuario: la autenticación.

Debes usar TLS, este es el primer punto. Sin TLS estás construyendo un castillo en la arena.

Segundo: tenga una rutina de registro que sus dispositivos seguirán cuando se conecten por primera vez y aún no tengan un par de claves: genere uno nuevo, envíelo al servidor. En cualquier momento después de que el dispositivo envíe algo, deberá firmar los datos con su clave, para que el servidor sepa que es legítimo.

Un atacante solo podrá hacerse pasar por dispositivos que posee, o puede acceder físicamente, y no hay forma de evitarlo. Pero no pueden hacerse pasar por ningún otro, incluso con acceso a su base de datos.

    
respondido por el ThoriumBR 14.10.2018 - 04:05
fuente
1
  

Más específicamente, ¿cómo protejo los datos que se envían hacia y desde el servidor remoto?

No estoy seguro de haber entendido correctamente tu pregunta. Pero entiendo la parte anterior de que solo desea proteger los datos en tránsito entre el cliente y el servidor. En este caso, HTTPS (o TLS simple) es suficiente. Esto utilizará automáticamente diferentes claves de cifrado para diferentes sesiones TLS (donde la sesión TLS tendrá la misma duración que la conexión TCP a menos que se use la reanudación de la sesión), por lo que no existe el riesgo que imagina que tenga la misma clave de cifrado en todos los dispositivos.

Pero HTTPS o TLS no protegerán contra alguien que tenga acceso físico al dispositivo e intercepte los datos allí antes del cifrado y después del descifrado. Sólo protege los datos en tránsito.

    
respondido por el Steffen Ullrich 13.10.2018 - 21:59
fuente

Lea otras preguntas en las etiquetas