En la era de Internet de las cosas (IoT) , la comunicación inalámbrica se está volviendo cada vez más popular en la vida cotidiana. En el mundo de los dispositivos IoT, ESP32 es un popular microcontrolador System on Chip (SoC) de bajo costo con WiFi híbrido integrado y chips Bluetooth de Espressif Systems. Debido a su diseño robusto y su consumo de energía ultrabajo, se ha vuelto tan popular en las aplicaciones de IoT. Pero cuando hablamos de aplicaciones IoT, la seguridad en IoT vendrá a nuestra mente para la seguridad de los datos y la conexión segura. ESP32 es compatible con la autenticación mutua basada en certificados X.509 para HTTPs, IoT cloud ( AWS-IoT , Azure , Google Firebase, etc.) autenticación y comunicaciones de datos. A través de Internet, ESP32 también nos brinda la seguridad de los datos almacenados en la memoria FLASH y los Sectores de arranque para evitar que los datos sean robados. Hoy hablamos de las funciones de seguridad del ESP32 , principalmente relacionadas con los sectores de arranque. Las dos características de seguridad principales en ESP32 se denominan Secure-Boot y seguridad flash, también conocida como Flash-Encryption.
¿Qué eFUSE bloquea en ESP32?
El ESP32 tiene un bloque de memoria programable por única vez (OTP) de 1024 bits . Este bloque de memoria OTP se divide en 4 bloques de 256 bits cada uno.
Estos bloques de memoria almacenan las claves del cifrado Flash y Secure Boot . Debido al bloque de memoria OTP, no hay ningún software presente para leer esos bloques de memoria. Un único hardware ESP32 puede leer y validar las funciones de seguridad.
¿Qué es el cifrado Flash? ¿Cómo habilitarlo en ESP32?
ESP32 Flash Encryption es una función de seguridad para ESP32 proporcionada por ESP-IDF by Espressif System para proteger la memoria flash. El cifrado flash cifra el contenido de la memoria flash SPI de ESP32 y, cuando esta función está habilitada, los siguientes tipos de datos se cifran de forma predeterminada:
- Cargador de arranque de firmware
- Tabla de particiones
- Particiones tipo “app” o Particiones de aplicación
- Cualquier partición marcada con un indicador «encriptado» en la tabla de particiones también está encriptada.
En los proyectos ESP-IDF, los usuarios pueden habilitar fácilmente Flash Encryption desde la configuración del proyecto mediante el
idf.py menuconfig
Después de abrir el menú de configuración del proyecto ESP32, ahora navegue hasta
"Características de seguridad" --> "Habilitar el cifrado flash en el arranque" --> "Habilitar el modo de uso (Desarrollo (NO SEGURO))" / "Habilitar el modo de uso (Lanzamiento)"
En el cifrado flash hay dos modos:
- Modo de desarrollo: en este modo, las particiones de la memoria flash ESP32 están todas encriptadas y abiertas para su modificación y también son accesibles para la lectura flash mediante el UART.
- Modo de lanzamiento: este modo está especialmente recomendado para las etapas de fabricación y producción. En este modo, la lectura del flash por UART/JTAG está totalmente bloqueada y el nuevo firmware solo puede actualizarse por aire (OTA) .
Cuando el cifrado flash está habilitado, los binarios del código actual parpadean en la memoria del ESP32 como un archivo de texto sin formato. Pero después de completar el proceso flash, en el primer arranque del ESP32, el dispositivo mismo cifró todas y cada una de las particiones mencionadas arriba, una por una usando la clave de cifrado flash AES que se almacena en el eFUSE-BLK1 en el momento del flash. . Después de cifrar la partición, el dispositivo ESP32 se reinició y procesó con la lógica programada.
El proceso de ejecución flash del ESP32 descifra los datos de la memoria flash cuando la unidad de ejecución del ESP32 intenta leer y para el proceso de escritura, el proceso de ejecución flash cifra los datos antes de escribirlos en la memoria flash.
¿Qué es el arranque seguro? ¿Cómo habilitarlo en ESP32?
El arranque seguro ESP32 es una función de seguridad que proporciona seguridad para ejecutar aplicaciones correctas en el hardware ESP32. Cuando el arranque seguro está habilitado, todos y cada uno de los archivos binarios de la memoria flash [cargador de arranque de software y firmware de la aplicación] se verifican antes de cargarlos con las claves de firma del arranque seguro basado en RSA-3072 . Podemos llamar al arranque seguro un «Guardián del ESP32».
Para habilitar el cifrado de Flash, en los mismos pasos podemos habilitar el arranque seguro desde el menú de configuración del proyecto.
“Características de seguridad” --> “Habilitar arranque seguro de hardware en el gestor de arranque”
¿Cómo funciona el arranque seguro?
Cuando se inicia el dispositivo ESP32, entonces la ROM de confianza del hardware ESP32 o dijimos que el cargador de arranque de primera etapa ejecuta la verificación con la clave de arranque seguro basada en RSA-3072 en el cargador de arranque del software y luego el cargador de arranque del software verifica el firmware de la aplicación con la misma clave de firma y iniciar la aplicación.
Conclusión
El ESP32 viene con un entorno seguro [Secure-boot & Flash-Encryption], que debemos habilitar mientras actualizamos el código. Para mayor seguridad, necesitamos habilitar ambos.