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:
- 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.
- El uso de flash / eeprom cifrado externo no funcionará por los mismos motivos.
- 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.