Parte 2 de la optimización del primer MCU de First Arm® basado en Cortex®-M33 del mercado: Gestión de la seguridad del ciclo de vida

Por Stephen Evanczuk

Colaboración de Editores de DigiKey de América del Norte

Nota del editor: En la Parte 1 de esta serie de dos partes, se examinó cómo optimizar el MCU (microcontrolador ) de propósito general LPC55S6x de NXP Semiconductors para obtener un rendimiento alto a baja potencia. Aquí, en la Parte 2, se muestra cómo optimizar ese mismo microcontrolador para la gestión de la seguridad del ciclo de vida.

Para los desarrolladores de sistemas basados en microcontroladores, la amplitud de los requisitos de diseño para aplicaciones de rápido crecimiento, como la IoT (Internet de las cosas), la automatización industrial o los dispositivos electrónicos personales, muy a menudo exige un equilibrio entre la funcionalidad del sistema, el rendimiento y el consumo de energía. De cara a las crecientes amenazas a la seguridad, la necesidad de reforzar la seguridad en estos diseños agrega un desafío adicional que puede dejar a los desarrolladores con aun menos soluciones de microcontroladores viables. Los desarrolladores necesitan un microcontrolador que sea compatible no solo con los requisitos más conocidos para el consumo reducido de energía y el alto rendimiento, sino también con el aumento de las demandas de seguridad en todas las fases del ciclo de vida del diseño, incluido el aprovisionamiento, las comunicaciones, el arranque seguro, la actualización segura del firmware y más.

En la Parte 1, se presentó la familia de microcontroladores LPC55S6x de NXP y se describió cómo las características abordan los requisitos de rendimiento y bajo consumo de energía. La Parte 2 analiza cómo las características de seguridad extendida integradas a los microcontroladores LPC55S6x admiten la seguridad del ciclo de vida, desde el aprovisionamiento y las comunicaciones hasta el arranque seguro y las actualizaciones seguras del firmware.

Como se describe en la Parte 1, los microcontroladoresLPC55S66 de un solo núcleo y LPC55S69 de doble núcleo de NXP combinan el núcleo del procesador de propósito general Cortex®-M33 deArm ® con las capacidades de hardware diseñadas para abordar los requisitos de aplicación más especializados. Entre estas capacidades, los aceleradores por hardware para la criptografía simétrica y asimétrica proporcionan los mecanismos fundamentales necesarios para las comunicaciones seguras. En el pasado, los aceleradores criptográficos se consideraban suficientes para cumplir con características de seguridad básicas tales como la protección de datos. Sin embargo, debido a que en la actualidad los usuarios esperan características de seguridad más completas, los requisitos para la seguridad del ciclo de vida se complejizaron, desde el aprovisionamiento en la fabricación hasta la puesta en servicio en el campo, junto con el arranque seguro y la actualización segura del firmware.

El logro de esta protección extendida requiere de un conjunto integral de políticas y protocolos de seguridad que se encuentran muy por encima del nivel del hardware. Aun así, la eficacia de cualquier protocolo de seguridad depende fundamentalmente de la disponibilidad de mecanismos adecuados basados en hardware que aceleren la ejecución y eliminen o reduzcan las amenazas que aparecen inevitablemente en cualquier dispositivo conectado.

La arquitectura del LPC55S6x proporciona este tipo de compatibilidad basada en hardware para la seguridad del ciclo de vida con una variedad de capacidades, desde la compatibilidad con la tecnología TrustZone® de Arm hasta las múltiples capas de protección necesarias para lograr un nivel efectivo de seguridad.

Compatibilidad con TrustZone

TrustZone proporciona una base para la seguridad gracias a la capacidad para aislar los datos y la ejecución de códigos en dominios específicos seguros y no seguros. Durante la ejecución del programa, el núcleo principal de Cortex-M33 alterna varios estados de ejecución diferentes asociados con distintos modos de ejecución de código. Los siguientes son algunos estados de CPU y modos de ejecución:

  • Seguro con privilegios, para ejecutar un código a nivel de kernel o manejadores de dispositivos
  • Seguro sin privilegios, para ejecutar un código de usuario seguro
  • No seguro con privilegios, para ejecutar llamadas típicas del sistema
  • No seguro sin privilegios, para ejecutar aplicaciones típicas del usuario

La distinción entre ejecución con privilegios y sin privilegios es muy importante para la solidez general del sistema operativo. Sin embargo, a los efectos de este artículo, podemos agrupar esos modos de ejecución y enfocarnos solo en la diferencia entre operación segura e insegura. En la arquitectura TrustZone, el cambio de estado de la CPU de seguro a no seguro genera limitaciones admitidas por el hardware en el núcleo para el acceso a los datos o la memoria del programa.

En su estado seguro, el núcleo puede acceder a los datos tanto en regiones seguras como no seguras de la memoria, pero no puede acceder al código almacenado en una región no segura de la memoria (Figura 1, a la izquierda). En su estado no seguro, el núcleo solo puede acceder al código y a los datos de las regiones inseguras de la memoria (Figura 1, a la derecha).

Diagrama de los microcontroladores LPC55S6x de NXP (haga clic para ampliar)Figura 1: al ser compatibles con Arm TrustZone, los microcontroladores LPC55S6x de NXP garantizan que un núcleo que opera en estado seguro (S) (izquierda) solo pueda obtener instrucciones para la memoria del programa S-state, mientras que un núcleo que opera en estado no seguro (NS) (derecha) no puede alcanzar el código o los datos almacenados en la memoria S-State. (Fuente de la imagen: NXP Semiconductors)

La arquitectura del MCU LPC55S6x ejerce este control en el nivel más bajo de acceso al bus y así atenúa las amenazas comunes, como los desbordamientos de búfer utilizados por los atacantes para hacer que el código no seguro no privilegiado obtenga acceso por puerta trasera a regiones "protegidas". Aquí, NXP utiliza la unidad de atribución de seguridad (SAU) de TrustZone de Arm con su propia unidad de atribución definida por implementación (IDAU) diseñada para aislar por completo el código de kernel seguro del código de aplicación. La SAU proporciona el estado de seguridad (seguro o no seguro) e identifica si la instrucción proviene de una región permitida de la memoria. La IDAU se comunica con la DAU (unidad de atribución de dispositivos) para proporcionar una mayor granularidad y trabaja con la SAU para determinar el atributo de seguridad de una dirección específica. El resultado es una línea de petición del bus entregada en los niveles apropiados de seguridad y privilegio (Figura 2).

Diagrama de la protección del acceso en el nivel de transacción del bus de los microcontroladores LPC55S6x de NXPFigura 2: los microcontroladores LPC55S6x de NXP protegen el acceso en el nivel de transacción del bus, utilizando la SAU de Arm TrustZone con su propia IDAU para garantizar que las líneas de petición del bus del sistema operen a los niveles de seguridad y privilegio adecuados. (Fuente de la imagen: NXP Semiconductors)

Almacenamiento seguro y periféricos

Los mecanismos de protección de TrustZone aíslan el código de aplicación y los datos durante el tiempo de ejecución, y así abordan los datos en uso (uno de los principios clásicos de la seguridad de datos), que también incluyen a los datos en reposo y a los datos en tránsito. Aunque generalmente se asocian con los problemas de datos a nivel empresarial, estos mismos principios son válidos para el código y los datos en un sistema embebido. Aquí, un uso típico en sistema embebido de una memoria flash integrada de un microcontrolador para almacenar imágenes de firmware, códigos y datos puede surgir como un importante vector de ataque. El dispositivo LPC55S6x mitiga esta amenaza a través de un algoritmo de cifrado/descifrado denominado PRINCE. [Nota para los lectores: PRINCE no es un acrónimo].

El algoritmo PRINCE es adecuado para la implementación de seguridad en sistemas embebidos gracias a su velocidad y a los mínimos requisitos de recursos. Al implementarse en el hardware en dispositivos LPC55S6x, el algoritmo PRINCE opera en tiempo real, descifrando o cifrando datos sobre la marcha, a medida que los datos se leen o se escriben. A diferencia de muchos otros algoritmos criptográficos, el algoritmo PRINCE no necesita usar la RAM para mantener los datos originales o los resultados intermedios, lo que elimina otra vulnerabilidad en la seguridad. Como resultado, los desarrolladores pueden almacenar de manera más segura el código de aplicación, las imágenes de firmware e incluso las claves de seguridad en el flash interno del microcontrolador.

Si bien los motores criptográficos y el almacenamiento flash seguro bloquean el intercambio y el almacenamiento de datos, un sistema embebido seguro necesita el mismo nivel de seguridad para sus interacciones con sensores y transductores. Junto con las capacidades de acceso directo a memoria (DMA) seguras, la arquitectura del MCU LPC55S6x proporciona mecanismos que garantizan aún más el intercambio seguro entre el núcleo u otros bus masters y los periféricos integrados, la memoria o la entrada y salida de uso general (GPIO) (Figura 3).

Diagrama de la combinación de la matriz del bus multicapa con los MSW de los microcontroladores LPC55S6x de NXPFigura 3: los microcontroladores LPC55S6x de NXP combinan su matriz del bus multicapa con los MSW, los MPC y los PPC para aislar y asegurar las transacciones entre los diferentes bus masters de los dispositivos y sus periféricos y la memoria. (Fuente de la imagen: NXP Semiconductors)

En este esquema de protección, los MPC (verificadores de protección de la memoria) limitan el acceso a la memoria de las aplicaciones menos seguras. Los PPC (verificadores de protección periférica) proporcionan el mismo tipo de control de acceso para los periféricos, lo que les permite a los desarrolladores establecer diferentes reglas de acceso para los diferentes periféricos. Dado que el mecanismo de la SAU/IDU está disponible solo para el núcleo principal de Cortex-M33, se utilizan MSW (encapsulamientos de seguridad maestros) para proporcionar una protección de acceso similar para otros bus masters. Debido a que la matriz multicapa AHB crea una ruta dedicada entre los bus masters y los periféricos o la memoria, el resultado es una conexión del bus interna segura que está aislada de otras transacciones del bus que pueden estar ocurriendo en el dispositivo.

La arquitectura del MCU LPC55S6x aísla aún más el acceso seguro y no seguro a dispositivos externos a través de su sistema GPIO seguro. Este sistema extiende el mismo tipo de aislamiento a los pines GPIO que el que crean los mecanismos de TrustZone entre los estados de la CPU seguros y no seguros y los modos de ejecución de código. Por lo tanto, solo se puede acceder a los pines GPIO seguros mediante el núcleo principal de Cortex-M33 que opera en un estado seguro, lo que les permite a los desarrolladores proteger las señales de los dispositivos externos críticos.

Manejo de clave seguro

Los diversos mecanismos de protección descritos hasta ahora en este artículo proporcionan la base de un sistema embebido seguro. Sin embargo, para conectar ese sistema de forma segura a una red, a un teléfono inteligente o a otro host, los desarrolladores necesitan la capacidad de autenticar el objetivo de la conexión durante la puesta en servicio inicial y las transacciones en curso, y la capacidad de mantener un canal de comunicaciones cifrado de forma segura. A su vez, la seguridad de los algoritmos de criptografía asimétrica y simétrica como parte central de los protocolos de autenticación y de los mecanismos de encriptación depende, básicamente, de la seguridad de las claves privadas utilizadas dentro de estos protocolos y mecanismos.

Al utilizar la PUF (función física no reconocible) integrada, los microcontroladores LPC55S6x proporcionan un mecanismo altamente seguro para almacenar de manera segura las claves existentes y generar otras nuevas. Este enfoque gira en torno a la capacidad del hardware PUF para crear una clave raíz de la PUF única que se utiliza para cifrar otras claves de usuario. La singularidad de la clave raíz de la PUF deriva del uso de las funciones internas del dispositivo junto con los datos de inicio de la SRAM (RAM estática), que derivan de los contenidos aleatorios 0 y 1 de las celdas de la SRAM en el encendido. Durante la etapa de registro de la PUF, el dispositivo utiliza estas dos fuentes de datos aleatorios para crear una huella digital y un código de activación asociado de 1192 bytes (Figura 4).

Diagrama de la PUF integrada de los microcontroladores LPC55S6x de NXPFigura 4: la PUF integrada de los microcontroladores LPC55S6x de NXP utiliza el estado aleatorio de las SRAM al inicio y otras funciones internas para generar una huella digital y un código de activación que se utiliza para las operaciones posteriores de generación de claves y almacenamiento. (Fuente de la imagen: NXP Semiconductors)

Durante el aprovisionamiento de dispositivos en la fábrica o más adelante en el campo, este código de activación se almacena en el CFPA (área programable del campo del cliente) en la región flash protegida del dispositivo. Cada vez que se enciende el microcontrolador y se activa la PUF con el comando de inicio PUF Start, la PUF combina el código de activación existente con los datos de inicio de la SRAM para reconstruir la huella digital.

Después de este procedimiento de inicio de la PUF, el comando SetKey de la PUF hace que la PUF codifique las claves de usuario tales como las claves maestras compartidas provistas en la fábrica o las claves privadas proporcionadas por los desarrolladores para sus aplicaciones. Aquí, la PUF genera un código clave para la clave de usuario correspondiente que se basa en el tamaño de la clave, en un índice de clave y en la propia clave de usuario (Figura 5).

Diagrama de la oferta de la función SetKey por parte de la PUF del LPC55S6x de NXPFigura 5: la PUF del LPC55S6x de NXP proporciona una función SetKey que codifica una clave de usuario y un índice de clave mediante el uso de su huella digital, y así brinda un código clave que se usa más adelante para acceder a la clave de usuario original. (Fuente de la imagen: NXP Semiconductors)

Los desarrolladores también pueden generar nuevas claves usando el comando PUF GenerateKey, que lleva a cabo el mismo proceso de generación que SetKey pero con datos únicos generados internamente que reemplazan la función KEYIN, como se muestra en la Figura 5. Las claves configuradas o generadas con el índice de claves = 0 obtienen mayor protección como se indica a continuación.

Para usar claves, los desarrolladores utilizan el comando PUF GetKey para recuperar la clave de usuario original con dos rutas de salida diferentes en función del valor del índice de clave utilizado cuando se configuró o generó la clave. Si el índice de clave es mayor que cero, la clave de usuario está disponible a través del registro PUF CODEOUTPUT. Si el índice de clave es cero, la clave de usuario se pasa directamente al motor AES o a las tres regiones de la memoria flash admitidas por el motor PRINCE según lo especificado por el valor de KEYENABLE (Figura 6). Aunque no está involucrado directamente en la recuperación de claves, el registro KEYMASK de 4 bits de la PUF admite un mecanismo interno diseñado para mitigar los ataques de canal lateral.

Diagrama del comando GetKey de la PUF del LPC55S6x de NXP para acceder a las clavesFigura 6: para acceder a las claves, los desarrolladores utilizan el comando GetKey de la PUF de NXP LPC55S6x. Este utiliza el índice de clave y el código clave generado durante las operaciones de SetKey (o GenerateKey) para generar la clave de usuario original o enviarla a través de un bus privado a los aceleradores criptográficos del microcontrolador. (Fuente de la imagen: NXP Semiconductors)

Las claves de índice cero ayudan a fortalecer la seguridad del ciclo de vida incluso a partir de la etapa de aprovisionamiento en la fábrica. Una vez suministrada a través del comando SetKey de la PUF, una clave maestra compartida utilizada para la criptografía simétrica o la clave privada utilizada para la criptografía asimétrica nunca abandona el dispositivo ni tampoco ingresa al bus del sistema. En cambio, la transferencia de claves a los motores AES o PRINCE se produce internamente a través de una interfaz cableada dedicada que no es accesible mediante el software.

El mecanismo de administración de claves de la PUF y otras características de seguridad del microcontrolador se unen para dar lugar a otras fases de la seguridad del ciclo de vida, incluidos el arranque seguro y la actualización del firmware. Para un arranque seguro, el LPC55S6x admite múltiples métodos de protección, incluida la autenticación de imágenes firmadas con cifrado RSA2048 mediante certificados X.509 validados o el descifrado de imágenes almacenadas en una región flash PRINCE. En cualquiera de los casos, el gestor de arranque recupera de forma segura las claves necesarias para la validación de certificados o para el descifrado de imágenes desde el almacenamiento de claves de la PUF. A esto lo hace mediante el uso de los hash de claves generados por la PUF almacenados con las imágenes en la región flash protegida.

La actualización del firmware utiliza mecanismos similares para autenticar una imagen de firmware actualizada por aire, descifrarla y prepararla para el inicio.

Más allá de las necesidades inmediatas de arranque seguro y de actualización del firmware, los múltiples espacios de almacenamiento de claves y las capacidades de generación de claves del dispositivo son compatibles con los requisitos continuos del ciclo de vida de seguridad para la anulación de claves y certificados. A su vez, esta capacidad de administración de claves admite políticas de seguridad de nivel superior, tales como la revocación de imágenes del firmware.

Los desarrolladores pueden explorar rápidamente las capacidades de los microcontroladores LPC55S6x utilizando la placa de desarrollo LPCXpresso55S69 de NXP en combinación con el IDE (entorno completo de desarrollo integrado) MCUXpresso de NXP, IAR o IDE de Keil . Al estar integrado en el IDE de MCUXpresso, Config Tools de MCUXpresso ayuda a los desarrolladores a configurar el hardware del MCU y a generar el código de inicialización. Dentro de este conjunto de herramientas de configuración, la herramienta de TEE (entorno de ejecución confiable) les permite a los desarrolladores configurar con más facilidad el acceso de seguridad de múltiples niveles del MCU LPC55S6x. Mediante el uso de la interfaz gráfica de la herramienta de TEE, los desarrolladores pueden perfeccionar los privilegios de acceso a la memoria, a los bus masters y a los periféricos para cada uno de los cuatro modos de ejecución y de estado de la CPU descritos anteriormente (Figura 7).

Imagen del conjunto de herramientas Config Tools del MCUXpresso de NXP (haga clic para ampliar)Figura 7: dentro del conjunto de herramientas Config Tools del MCUXpresso de NXP, la interfaz gráfica de la herramienta de entorno de ejecución confiable les permite a los desarrolladores establecer los privilegios de acceso a la memoria, a los bus masters y a los periféricos para el código que se ejecuta en los cuatro estados de la CPU y los modos de ejecución (fuente de la imagen: NXP Semiconductors)

Para el desarrollo de códigos, NXP también proporciona una serie de ejemplos de códigos simples que proveen los patrones de diseño básicos para el uso de las características de seguridad del microcontrolador, tales como la GPIO segura, la administración de claves de la PUF y otras capacidades del dispositivo. Sin embargo, incluso durante la fase de desarrollo, el MCU LPC55S6x ayuda a mantener la seguridad del ciclo de vida a través de la depuración de cable único (SWD).

. Con esta capacidad, los desarrolladores autorizados pueden depurar su código seguro y deshabilitar cualquier acceso SWD adicional para asegurar los recursos antes de pasar el desarrollo a desarrolladores de software no seguros. A su vez, después de que los desarrolladores terminan la depuración de sus códigos, pueden deshabilitar todo el acceso a depuración a través del puerto SWD.

Conclusión

Los desarrolladores enfrentan la creciente demanda de diseños de bajo consumo y alto rendimiento capaces de mantener la seguridad durante todo el ciclo de vida, desde el aprovisionamiento en la fábrica hasta la operación segura en el campo. Como se describe aquí, la familia de microcontroladores LPC55S6x de NXP ofrece una solución efectiva que combina las capacidades de procesamiento de propósito general con un amplio conjunto de funciones de hardware especializadas necesarias para respaldar la seguridad del ciclo de vida.

 
DigiKey logo

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de DigiKey o de las políticas oficiales de DigiKey.

Acerca de este autor

Image of Stephen Evanczuk

Stephen Evanczuk

Stephen Evanczuk tiene más de 20 años de experiencia escribiendo para y sobre la industria de electrónica en un amplio rango de temas, entre ellos hardware, software, sistemas y aplicaciones, que incluyen IoT. Se doctoróen neurociencias (redes neuronales) y trabajó en la industria aeroespacial en sistemas seguros con distribución masiva y métodos de aceleración de algoritmos. Actualmente, cuando no escribe artículos sobre tecnología e ingeniería, trabaja en aplicaciones de aprendizaje profundo sobre sistemas de reconocimiento y recomendaciones.

Acerca de este editor

Editores de DigiKey de América del Norte