Un poco de contexto
Como está usando MQTT con AWS IoT, se espera que use certificados X.509 para autenticación y seguridad. Amazon tiene un poco de orientación sobre cómo debe proteger sus certificados, así que lo citaré aquí:
Los certificados permiten utilizar claves asimétricas con dispositivos. Esto significa que puede grabar claves privadas en un almacenamiento seguro en un dispositivo sin permitir que el material criptográfico sensible abandone el dispositivo.
Como actualmente está utilizando la Protección de lectura (RDP) de STM32 , todos los atacantes menos los más determinados tendrán problemas para acceder a sus certificados en su esquema actual:
La protección de lectura global permite que el código de firmware incorporado (precargado en la memoria Flash) proteja contra la ingeniería inversa, el volcado mediante herramientas de depuración u otros medios de ataque intrusivo.
- Nivel 0: sin protección (predeterminado)
- Nivel 1: la memoria flash está protegida contra la lectura mediante depuración o descarga de código mediante el código cargado de RAM
- Nivel 2: todas las funciones de depuración están deshabilitadas
¿El almacenamiento externo va a ser seguro?
Probablemente no sea tan seguro . Si se roba la clave privada de su cliente, un atacante puede enviar datos que parecen ser de su dispositivo, cuando en realidad no lo es. Aunque no está claro qué datos está enviando, cualquier dato no confiable puede ser un riesgo de seguridad.
¿Qué partes necesito para mantener en privado?
Cuando cree un certificado de dispositivo en AWS IoT, debería ver una imagen como esta:
Imagen de la página Crear y activar un certificado de dispositivo de la documentación de AWS IoT.
La clave privada es lo que realmente necesita mantener ... privada , y definitivamente debe almacenarse en la memoria protegida contra lectura si es posible. La clave pública y el certificado están diseñados para ser compartidos, por lo que si se está quedando sin espacio, puede moverlos de forma segura a un almacenamiento externo. Puede obtener un poco más de contexto en la página ¿Cómo funciona SSL / TLS? en Information Security Stack Exchange y criptografía de clave pública en Wikipedia. Creo que te estaría perjudicando si no incluyera esta imagen para explicar por qué la clave privada debe ser secreta:
.
Imagen de Wikipedia , lanzada al dominio público.
La clave pública de su dispositivo es lo que AWS IoT usa para firmar mensajes para enviar a su dispositivo (pero no prueba quién está enviando el mensaje ). Entonces, realmente, no es un gran desastre si alguien roba la clave pública, porque no debe ser un secreto.
La clave privada es lo que usa su dispositivo para descifrar mensajes, por lo que es un problema un poco mayor si un atacante roba esto.
También preguntó qué pasaría si el atacante robara el certificado RootCA. Si alguien robara la clave privada de AWS IoT , sería desastroso, pero el certificado RootCA en su dispositivo no lo es . Lo RootCA.crt
que Amazon le brinda es completamente público , y el propósito es que pueda verificar que no está siendo atacado de ninguna manera (lo más probable es que sea un intermediario que finja ser servidores de AWS IoT).
¿Qué daño podría hacer un dispositivo pirateado?
Su dispositivo robado solo puede realizar las acciones enumeradas en la política . Trate de seguir el principio del menor privilegio ; solo conceda a su dispositivo los privilegios que necesita absolutamente , por lo que si sucede lo peor, no puede causar demasiados estragos. Para su caso específico:
Se permite publicar en solo 2 canales (su nombre y un canal de alimentación de datos) que está conectado a un procesador de datos que ignorará cualquier paquete falso que llegue a él.
Eso es bueno. Cualquier ataque debe aislarse solo en los dos temas MQTT en los que el dispositivo puede publicar, para que no cause daños a gran escala.