En el mundo actual de la tecnología embebida y los sistemas ARM, asegurar la cadena de arranque es fundamental para garantizar la integridad y la autenticidad del software que se ejecuta en un dispositivo. El ODROID M1, basado en el potente SoC RK3568B de Rockchip, ofrece soporte para Secure Boot o arranque seguro, una característica crítica para proteger la plataforma ante manipulaciones y ataques maliciosos en la etapa inicial del arranque. Implementar esta tecnología puede parecer desafiante, pero con una metodología adecuada y las herramientas correctas es posible activar y verificar el arranque seguro de forma efectiva. El concepto de arranque seguro en ARM se basa en almacenar un hash del clave pública en una memoria segura, conocida por el BootROM (el primer código que ejecuta el procesador), lo que asegura que solo se puedan ejecutar imágenes firmadas con claves autorizadas. En el caso concreto del RK3568B, en lugar de guardar la clave pública entera, se almacena su hash en la memoria OTP (One Time Programmable), una memoria programable una única vez que garantiza la inmutabilidad del valor y la seguridad frente a modificaciones posteriores.
La clave pública se incluye dentro del pre-cargador o pre-loader, que contiene los componentes TPL (Tertiary Program Loader) y SPL (Secondary Program Loader). Cuando el dispositivo se enciende y el arranque seguro está habilitado, el BootROM calcula el hash sobre la clave pública embebida en el pre-loader y lo compara con el hash almacenado en la OTP. Si ambos coinciden, se usa la clave para validar las firmas digitales de los componentes TPL y SPL. Solo si estas firmas son correctas, el BootROM continúa el proceso de arranque con estas imágenes verificadas, lo que crea una base sólida para todo el sistema. El proceso para habilitar Secure Boot en ODROID M1 implica varias etapas, empezando por la generación de un par de claves RSA con una longitud de 2048 bits.
Si bien el SoC RK3568 soporta hasta claves RSA de 4096 bits y algoritmos ECC, la función responsable de grabar el hash de la clave en OTP exige específicamente claves RSA de 2048 bits para funcionar correctamente. Para crear esta clave se recomiendan herramientas establecidas como OpenSSL que permiten generar la clave privada, la clave pública y el certificado correspondiente para firmar imágenes. Tras disponer de las claves, es necesario construir una versión especial del SPL capaz de escribir el hash de la clave pública en la memoria OTP. La compilación de U-Boot, el gestor de arranque ampliamente utilizado en sistemas embebidos, debe incluir habilitaciones específicas para el soporte de firmas FIT (Flattened Image Tree) y para que SPL pueda incorporar y gestionar nodos de clave pública con la propiedad "burn-key-hash". Esta propiedad indica a SPL que debe grabar el hash en OTP durante el proceso de verificación.
Modificaciones en los archivos de configuración también son necesarias para adaptar correctamente rkbin, que contiene herramientas esenciales como boot_merger y rk_sign_tool, utilizadas para empaquetar cargadores y firmar imágenes respectivamente. Al modificar archivos .ini y asegurar que las rutas apunten a las imágenes generadas, se integra todo el flujo para construir y actualizar el pre-loader firmado que será almacenado en la memoria SPI flash del ODROID M1. La fase de instalación demanda entrar en modo MaskROM, un modo especial por hardware para programar la memoria de arranque. En ODROID M1, esto se consigue apretando el botón de recuperación durante el reinicio, lo que permite que el dispositivo acepte nuevas imágenes desde un ordenador mediante herramientas como upgrade_tool.
Este software se utiliza para borrar la memoria SPI y escribir el nuevo pre-loader firmado, que contiene las instrucciones para validar y grabar el hash clave en OTP. Una vez cargado el pre-loader y con el hash de clave en OTP, el siguiente paso implica flashear la imagen de U-Boot firmada para que continúe el proceso de arranque seguro. Para facilitar pruebas, es común usar una tarjeta SD con particiones específicas donde se almacenen el SPL, U-Boot y otras particiones necesarias para el correcto funcionamiento, como 'misc', que es requerida por U-Boot SPL durante el arranque. Con este entorno preparado y la tarjeta SD insertada, al iniciar el dispositivo, el sistema ejecuta SPL que verifica las firmas de las imágenes contenidas en el FIT, confirmedo con mensajes explícitos en la consola UART mostrando la validación exitosa de todas las particiones firmadas. El SPL detecta la propiedad "burn-key-hash" en el nodo de firma y realiza la escritura segura en OTP del hash, lo que bloquea técnicamente la posibilidad de arranque de imágenes no firmadas o alteradas.
Para validar que Secure Boot está realmente activo, se puede utilizar un cargador temporal llamado ramboot, preparado con la herramienta boot_merger y firmado con las mismas claves, para consultar el estado de SecureMode del SoC. Una respuesta afirmativa confirma que la plataforma está bloqueada en modo seguro. Finalmente, la integración de un firmware U-Boot actualizado, basado en versiones recientes como la 2024.01, con soporte para firmas en configuraciones y nodos de clave pública, completa la cadena de confianza desde el BootROM hasta el momento en que el sistema operativo o firmware personalizado empieza a ejecutarse. Configurar correctamente las variables de entorno para apuntar al cross-compiler y archivos de BL31 y TPL es esencial para una compilación exitosa y funcional.
Habilitar el arranque seguro en el ODROID M1 no solo mejora la seguridad frente a ataques de software en la etapa inicial, sino que también protege la propiedad intelectual y permite crear sistemas embebidos con certificaciones más estrictas de seguridad. Es importante considerar que la memoria OTP tiene una capacidad limitada (aproximadamente 8k bits según la especificación RK3568), lo que podría dejar espacio para almacenar múltiples hashes y gestionar diferentes claves públicas, lo cual abre la puerta para futuras ampliaciones y mejoras en la gestión de arranque seguro. En conclusión, el proceso para implementar Secure Boot en ODROID M1 es una combinación minuciosa de generación de claves criptográficas, construcción adaptada de imágenes U-Boot, modificaciones en herramientas y archivos de configuración, y una correcta programación del dispositivo en modo MaskROM. Esta implementación representa un paso significativo para fortalecer la seguridad en dispositivos basados en la plataforma Rockchip, alineándose con las mejores prácticas y tendencias actuales en seguridad embebida. Para quienes trabajan con plataformas ARM y especialmente con SoCs Rockchip, constituye un caso de estudio ejemplar.
Además, compartir experiencias y desarrollos sobre tecnologías de raíz de confianza y cadena de confianza mediante comunidades especializadas fomenta la evolución constante y la mejora de métodos para proteger sistemas embebidos frente a amenazas cada vez más sofisticadas.