PEmicro-erlebniswelt

Programación de NXP i.MX RT10xx con arranque seguro

Los programadores de producción Cyclone de PEmicro hacen que programar dispositivos NXP i.MX RT10xx con Secure Boot activado sea extremadamente fácil y seguro.  La Utilidad de Arranque Seguro incluida con el programador se encarga de la firma y encriptación de la aplicación i.MX RT10xx, así como de los detalles de configuración y bloqueo del fusible de seguridad. El programador admite una conexión JTAG segura extremadamente rápida con el dispositivo i.MX de destino.  

Las imágenes de programación de producción de PEmicro están fuertemente codificadas y son opcionalmente criptográficamente seguras ,  , por lo que los archivos de firmware del usuario, las claves de codificación, las configuraciones de copia de seguridad y las contraseñas están protegidos de forma segura desde el momento en que se genera la imagen durante el proceso de fabricación. Las imágenes de programación pueden restringirse para su uso en Ciclones específicos con rangos de fechas y números de programación especificados. 

Obtén más información sobre las funciones de seguridad de i.MX y mira una demostración sobre cómo crear una imagen de programación i.MX RT10xx segura.

 
Creación de una imagen de programación de arranque seguro para i.MX RT1011

El siguiente vídeo muestra cómo utilizar la Utilidad de Creación de Imágenes junto con la Utilidad de Arranque Seguro incorporada para generar una imagen de programación independiente que proteja un procesador NXP i.MX RT1011:

secure-boot-video

resumen de las funciones de seguridad relevantes de i.MX

1. Ejecuta sólo firmware firmado

La serie i.MX RT admite un proceso de arranque seguro en el que sólo se puede ejecutar código de aplicación firmado con certificados específicos. Generalmente, se genera una vez un conjunto de cuatro certificados de firma, que se almacenan en una colección PEKeyFile. Si programas el hash de estos certificados en las copias de seguridad de un dispositivo i.MX RT con otros ajustes adecuados, el dispositivo i.MX sólo iniciará código firmado con uno de estos certificados.

El efecto de esta función es que puedes programar un dispositivo i.MX durante la producción para que sólo ejecute código de aplicación que hayas firmado. Esto puede utilizarse para evitar que se ejecute en tu producto código malicioso, no autorizado o corrupto.

Los certificados originales no se programan en las copias de seguridad de la máquina y, como tales, permanecen bajo tu custodia privada. Sólo los valores hash de los certificados se programan en las copias de seguridad y sólo la parte pública del certificado se incluye en tu aplicación.

Una colección PEKeyFile contiene el conjunto de cuatro certificados de firma y puede asociarse a cualquier número de proyectos de inicio seguro.

NXP_imx_1

2. Cifrado del firmware de la aplicación 

Además de la opción de código firmado, existe la opción de encriptar también el código de la aplicación. El código de la aplicación se almacena encriptado en la memoria interna / externa. En la mayoría de los casos, el procesador lo ejecutará directamente desde la memoria encriptada en un proceso denominado Ejecutar in situ (XIP). El descifrado se realiza sobre la marcha utilizando los módulos BEE u OTFAD del chip. Otra posibilidad es que el código encriptado se desencripte en el momento del arranque, se almacene en la RAM y deje de tener suficiente RAM. Ejecutar la aplicación desde la RAM puede ofrecer ventajas de rendimiento moderadas en comparación con el XIP cifrado. Sin embargo, si la RAM está fuera del procesador, se puede leer fácilmente. 

Generalmente, el usuario genera una vez una clave criptográfica AES para un producto concreto (o línea de productos), que PEmicro denomina " clave de lanzamiento encriptada " . Esta clave se utiliza a veces con otras claves aleatorias para encriptar el código de la aplicación antes de almacenarlo para el flasheo. Si la clave de lanzamiento encriptada  se programa en las copias de seguridad de un dispositivo i.MX RT con otros ajustes apropiados  , el dispositivo i.MX puede ejecutar y desencriptar el código de aplicación encriptado con la misma clave de lanzamiento encriptada  .

NXP_IMX_2

No es necesario que un procesador i.MX con una clave de lanzamiento encriptada programada en sus copias de seguridad ejecute sólo binarios encriptados. El procesador puede ejecutar aplicaciones firmadas o firmadas + encriptadas.

La ventaja de cifrar la aplicación de usuario es que proporciona una sólida defensa contra la copia. Si la aplicación no está cifrada y se almacena en la memoria externa, puede copiarse, firmarse (o no) con otro certificado y ejecutarse en un nuevo dispositivo i.MX vacío. Cifrar la aplicación con la clave de lanzamiento cifrada impide esto. Sin una copia de la clave de lanzamiento cifrada, el código de la aplicación es ilegible, e incluso si se copia, otro dispositivo i.MX no puede descifrarlo. 

Una colección PEKeyFile puede contener cualquier número de claves de lanzamiento encriptadas.

3. Restringir el acceso JTAG con una contraseña

Para impedir el acceso de depuración a la unidad después de la programación de producción, se pueden establecer fusibles para desactivar el módulo de depuración o activar el modo JTAG seguro. Para el modo JTAG seguro, el hardware de depuración / programación debe utilizar una contraseña durante la conexión. Sin la contraseña adecuada, el modo JTAG seguro no permite leer / escribir en la memoria y no realiza el acceso al código a través del módulo de depuración. 

NXP_IMX_3
NXP_IMX_4

Si se especifica la contraseña correcta, se puede utilizar el modo JTAG / SWD normal para depurar o reprogramar la unidad. 

Las utilidades PEmicro almacenan las contraseñas JTAG junto con los certificados de firma y las claves de arranque encriptadas en un único archivo de captura PEKeyFile (.peKeyFile). El PEKeyFile almacena un único conjunto de cuatro certificados de firma y un número ilimitado de contraseñas JTAG y claves de lanzamiento encriptadas. Muchos proyectos de lanzamiento seguro pueden compartir los mismos elementos de seguridad.

El acceso JTAG seguro al dispositivo después de la programación de fábrica puede ser útil para reprogramar el dispositivo o realizar análisis de fallos más adelante.

PEMicro recomienda activar el modo JTAG seguro o desactivar completamente el puerto JTAG si la seguridad es importante. Los programadores Cyclone y las interfaces de depuración multilink de PEMicro admiten el modo JTAG seguro.

Una colección PEKeyFile puede contener cualquier número de contraseñas I.MX

4. Bloquear las copias de seguridad sensibles

Hay copias de seguridad con valores sensibles, especialmente las que contienen la clave de lanzamiento encriptada y la contraseña JTAG. Una de las ventajas de la solución de programación PEmicro Cyclone es que las imágenes de programación creadas son completamente autónomas y están encriptadas. Esto significa que los valores de las claves sensibles están protegidos durante el proceso de fabricación y de las personas que manipulen los datos de programación. 

Una vez programadas las claves en el propio dispositivo de destino, se recomienda bloquearlas para futuras lecturas. Si la opción "Bloquear fusibles" está activada en la Utilidad de Arranque Seguro, el Cyclone bloqueará los fusibles sensibles contra lectura/escritura inmediatamente después de la programación. El código de aplicación ejecutado en la unidad y el acceso a través de interfaces de depuración no pueden leer los valores de estos fusibles sensibles. 

NXP_IMX_5

Aunque las funciones de firma, encriptación y contraseña / desactivación JTAG deberían impedir el acceso a la lectura de estas copias de seguridad, PEmicro recomienda restringir ("bloquear") permanentemente el acceso a estas copias de seguridad sensibles por motivos de seguridad.

Utilidades de creación de imágenes y arranque seguro de PEmicro

La utilidad de creación de imágenes de PEmicro es una interfaz gráfica de usuario que permite al usuario definir todas las entradas necesarias para crear una imagen de programación autónoma. Una imagen eSAP de programación autónoma contiene todos los archivos de firmware, definiciones de copia de seguridad, ajustes de alimentación, ajustes de depuración, serialización, algoritmos y demás necesarios durante la programación, y está encriptada para proteger su contenido. La Utilidad de Creación de Imágenes genera un archivo de configuración (.CFG) que utiliza el Compilador de Imágenes SAP para crear la imagen.

las aplicaciones i.MX RT10xx creadas para producción requieren una configuración de seguridad adicional para facilitar la firma y encriptación del código de la aplicación y la generación de todos los archivos de copia de seguridad, claves, certificados y contraseñas necesarios. PEMicro incluye la Utilidad gráfica de arranque seguro convenientemente integrada con la Utilidad de creación de imágenes para gestionar estos detalles.

NXP_IMX_6

La Utilidad de Arranque Seguro crea / guarda un archivo de Proyecto de Arranque Seguro (.SBP) al salir, que luego se utiliza para crear partes de la imagen eSAP. 

Ajustes de seguridad de i.MX RT recomendados para producción

La Utilidad de Arranque Seguro tiene dos tipos principales de ajustes que afectan a la seguridad de la aplicación i.MX: 1) Ajustes de la aplicación y 2) Ajustes del dispositivo. Los ajustes de aplicación están relacionados con la firma y el cifrado del código de la aplicación, y los ajustes de dispositivo se ocupan de restringir el acceso a los recursos del chip, como JTAG y los fusibles sensibles. Cambiar muchos de estos ajustes modificará el perfil de seguridad del dispositivo i.MX RT. La buena noticia es que la Utilidad de Arranque Seguro tiene una pestaña Visión general de la seguridad que analiza la configuración del Arranque Seguro en busca de vulnerabilidades de seguridad. PEmicro recomienda que compruebes el resumen de seguridad cada vez que se realicen cambios en la configuración de seguridad en la Utilidad de arranque seguro y corrijas cualquier vulnerabilidad que se encuentre. Estos son los ajustes más importantes:

Para garantizar que sólo se ejecuta código firmado en el procesador de destino, éste debe estar cerrado.

NXP_IMX_8

Para garantizar que el código programado está encriptado y que el dispositivo de destino dispone de las claves necesarias para ejecutar el código encriptado, el modo de lanzamiento seguro debe configurarse como OTFAD o BEE (se utiliza uno u otro dependiendo del dispositivo):

 

Para bloquear las copias de seguridad sensibles (Clave de encriptación de arranque y Contraseña JTAG) para futuros accesos, la opción Bloquear copias de seguridad debe estar en "Sí":

 

NXP_IMX_9
NXP_IMX_10

El estado JTAG debe estar desactivado permanentemente ("Sin depuración") o protegido por contraseña ("JTAG seguro"):

Cifrado de Imagen SAP Recomendado (Programación Autónoma) para Producción

Una imagen de programación autónoma puede encriptarse cuando se crea. Independientemente de si se utiliza o no el cifrado, el usuario no tiene acceso directo al contenido de la imagen de programación, ya que todos los datos están inteligentemente codificados e incrustados en un único archivo. Al añadir una capa de criptografía estándar del sector, esta coraza protectora se endurece significativamente. PEmicro recomienda la encriptación para los casos en que el cliente

  1. Restringe la imagen de programación para utilizarla sólo en unidades Cyclone específicas. Estos Cyclones tendrían que ser aprovisionados con la misma clave criptográfica utilizada para encriptar la imagen.
  2. Restringir la programación a un intervalo de fechas o número de programación concretos
  3. Hacer prácticamente imposible la ingeniería inversa del contenido de la imagen de programación
NXP_IMX_11

Cuando una imagen encriptada se almacena en el disco duro, tiene la extensión .esap (.sap es la extensión para imagen no encriptada). Las utilidades PEmicro y la pantalla Cyclone indican claramente cuándo una imagen está encriptada.

cambiar la configuración de inicio seguro en la Utilidad de Creación de Imágenes

 

La Utilidad de Arranque Seguro está integrada con la Utilidad de Creación de Imágenes de la siguiente manera:

NXP_IMX_12
NXP_IMX_13

el botón Vincular / Crear Proyecto de Arranque Seguro te permite especificar o crear un Proyecto de Arranque Seguro y vincularlo a la configuración actual de Creación de Imagen. El botón Editar Proyecto de Arranque Seguro lanza la Utilidad de Arranque Seguro  , que permite al usuario cambiar la configuración del arranque seguro. El botón Borrar desvincula un Proyecto de Arranque Seguro vinculado. 

Cada vez que se edita/modifica el Proyecto de arranque seguro mediante la Utilidad de creación de imágenes o se pulsa el botón Regenerar secuencia de programación, el usuario puede actualizar el script de la secuencia de programación en la configuración de Creación de imágenes para que coincida con los ajustes del Proyecto de arranque seguro. En general, se recomienda actualizar el script de la secuencia de programación, aunque se perderá cualquier cambio que hayas hecho previamente en el script de la secuencia de programación.  

La casilla de verificación "Crear automáticamente binarios firmados ...". durante el proceso de creación de imágenes SAP "hace que el proceso de creación de imágenes cree la aplicación firmada o firmada + encriptada a partir de la entrada de la aplicación sin firmar cada vez que se crea una imagen eSAP, así como un archivo de copia de seguridad que contiene todas las opciones de seguridad creadas a partir del Proyecto de Arranque Seguro vinculado. En el ejemplo anterior,  evkmimxrt1010_iled_blinky_final.srec  y  evkmimxrt1010_iled_blinky_fuses.OPT  se crean cada vez inmediatamente antes de que se cree la imagen de programación eSAP . 

El proceso de creación para este caso puede verse aquí:

NXP_IMX_14

Basándose en los ajustes del archivo del Proyecto de Arranque Seguro, el compilador de línea de comandos de la Utilidad de Arranque Seguro genera archivos de salida Flash / Fuse intermedios que luego utiliza el Compilador de Imágenes SAP al crear la imagen de programación autónoma. Estos archivos intermedios son:

NXP_IMX_15

Archivo de aplicación seguro:  Se trata de un archivo S-Record que contiene todos los datos de la aplicación, las tablas requeridas por el gestor de arranque para iniciar la aplicación, y todas las firmas y hashes necesarios para iniciarla en el modo apropiado. El binario fuente de la aplicación y los certificados / claves específicos utilizados para cifrar / firmar los datos de la aplicación se especifican en el archivo del Proyecto de Arranque Seguro.

NXP_IMX_16

Fichero de configuración para las copias de seguridad agregadas de  : Se trata de un archivo de opciones (.opt) que describe todo el conjunto de copias de seguridad que se programarán como parte del proceso autónomo. Esto incluye las copias de seguridad personalizadas, además de las copias de seguridad necesarias para implementar la selección de seguridad en el archivo del Proyecto de Arranque Seguro.

Esta referencia en el script de la secuencia de programación en la configuración de creación de la imagen hace que estos archivos binarios intermedios se capturen en la imagen de programación eSAP y se utilicen para programar el procesador de destino. En el ejemplo anterior, el archivo de aplicación firmado se programa con el algoritmo de programación de flash externa adecuado y el archivo fusible se programa con el algoritmo OTP i.MX RT1011 (Región fusible programable una sola vez). Una vez importado el script del Proyecto de Arranque Seguro, se puede modificar. De este modo, se pueden realizar cambios detallados en la secuencia de programación utilizada en la imagen eSAP.

Ten en cuenta que se hace referencia a estos archivos de salida intermedios en el script de programación generado automáticamente e importado en la configuración de Creación de Imagen:

NXP_IMX_17

PEmicro Ciclón FX Universal