PEmicro-erlebniswelt

Programmation NXP i.MX RT10xx avec Secure Boot

Les programmateurs de production Cyclone de PEmicro rendent la programmation des appareils NXP i.MX RT10xx avec Secure Boot activé extrêmement simple et sûre.  L'utilitaire Secure Boot inclus dans le programmateur se charge de la signature, du cryptage de l'application i.MX RT10xx ainsi que des détails de configuration et de verrouillage de la sécurité. Le programmateur prend en charge une connexion Secure JTAG extrêmement rapide vers l'appareil i.MX cible.  

Les images de programmation de production de PEmicro sont fortement codées et, en option, cryptographiquement sécurisées ,  de sorte que les fichiers de micrologiciel, les clés de cryptage, les paramètres de sauvegarde et les mots de passe de l'utilisateur sont protégés en toute sécurité à partir du moment où l'image est générée pendant le processus de production. Les images de programmation peuvent être limitées pour l'utilisation sur certains cyclones avec des plages de dates et des numéros de programmation définis. 

Apprends en plus sur les fonctions de sécurité i.MX et regarde une démonstration sur la création d'une image de programmation i.MX RT10xx sécurisée.

 
Créer une image de programmation Secure Boot pour i.MX RT1011

La vidéo suivante montre comment utiliser l'utilitaire de création d'image avec l'utilitaire intégré Secure Boot pour générer une image de programmation autonome qui sécurise un processeur NXP i.MX RT1011 :

secure-boot-video

aperçu des fonctions de sécurité i.MX pertinentes

1. N'exécute que le firmware signé

La série i.MX RT prend en charge un processus de démarrage sécurisé dans lequel seul le code d'application signé avec certains certificats peut être exécuté. En général, tu génères une fois un groupe de quatre certificats de signature qui sont stockés dans une collection PEKeyFile. Si tu programmes le hash de ces certificats dans les sauvegardes d'un appareil i.MX RT avec d'autres paramètres appropriés, l'appareil i.MX ne lancera que le code signé avec l'un de ces certificats.

Cette fonction fait que tu peux programmer un appareil i.MX pendant la production pour que seul le code d'application que tu as signé soit toujours lancé. Cela peut être utilisé pour empêcher l'exécution de code malveillant, non autorisé ou endommagé dans ton produit.

Les certificats originaux ne sont pas programmés dans les sauvegardes de l'appareil et restent en tant que tels sous ta garde privée. Seules les valeurs de hachage des certificats sont programmées dans les sauvegardes, et seule la partie publique du certificat est contenue dans ton application.

Une collection PEKeyFile contient l'ensemble de quatre certificats de signature et peut être associée à n'importe quel nombre de projets de démarrage sécurisés.

NXP_imx_1

2. Crypter le firmware de l'application 

En plus de l'option pour le code signé, il existe une option pour crypter également le code d'application. Le code d'application est crypté et stocké dans la mémoire interne / externe. Dans la plupart des cas, il est exécuté dans un processus appelé Execute In Place (XIP) directement à partir de la mémoire cryptée. Le décryptage s'effectue en cours de fonctionnement avec les modules On-Chip BEE ou OTFAD. Alternativement, le code crypté peut être décrypté au démarrage, stocké dans la RAM et ne disposant plus de suffisamment de RAM. L'exécution de l'application à partir de la RAM peut offrir des avantages modérés en termes de performances par rapport au XIP crypté. Cependant, si la RAM se trouve en dehors du processeur, elle peut être facilement lue. 

En général, l'utilisateur génère une fois pour un certain produit (ou une certaine ligne de produits) une clé cryptographique AES, que PEmicro appelle " clé de démarrage cryptée " . Cette clé est parfois utilisée avec d'autres clés aléatoires pour crypter le code de l'application avant qu'il ne soit enregistré pour le flashage. Si la clé de démarrage cryptée  est programmée avec d'autres paramètres appropriés dans les sauvegardes d'un appareil i.MX RT  , l'appareil i.MX peut exécuter et décrypter le code d'application qui a été crypté avec la même clé de démarrage cryptée  .

NXP_IMX_2

Il n'est pas nécessaire qu'un processeur i.MX, dans les sauvegardes duquel une clé de démarrage cryptée est programmée, n'exécute que des fichiers binaires cryptés. Le processeur peut exécuter soit des applications signées, soit des applications signées + cryptées.

L'avantage du cryptage de l'application utilisateur est qu'il constitue une défense solide contre la copie de produits. Si l'application n'est pas cryptée et qu'elle est stockée dans la mémoire externe, elle peut être copiée, signée (ou non signée) avec un autre certificat et exécutée sur un nouveau dispositif i.MX vide. Le fait de crypter l'application avec la clé de démarrage cryptée empêche cela. Sans une copie de la clé de démarrage cryptée, le code de l'application n'est pas lisible, et même s'il est copié, un autre appareil i.MX ne peut pas le décrypter. 

Une collection PEKeyFile peut contenir un nombre quelconque de clés de démarrage cryptées.

3. Limiter l'accès JTAG avec un mot de passe

Pour empêcher l'accès de débogage à l'appareil après la programmation de production, les sauvegardes peuvent être configurées de manière à désactiver le module de débogage ou à activer le mode JTAG sécurisé. Pour le mode JTAG sécurisé, le matériel de débogage / programmation doit utiliser un mot de passe pendant la connexion. Sans le mot de passe correspondant, le mode JTAG sécurisé n'autorise pas la mémoire de lecture/écriture et n'effectue pas d'accès au code via le module de débogage. 

NXP_IMX_3
NXP_IMX_4

Si le mot de passe correct est indiqué, le mode JTAG / SWD normal peut être utilisé pour déboguer ou reprogrammer l'appareil. 

Les utilitaires PEmicro stockent les mots de passe JTAG avec les certificats de signature et les clés de démarrage cryptées dans un seul fichier de capture PEKeyFile (.peKeyFile). Le PEKeyFile stocke un seul ensemble de quatre certificats de signature et un nombre illimité de mots de passe JTAG et de clés de démarrage cryptées. De nombreux projets de démarrage sécurisés peuvent partager les mêmes éléments de sécurité.

Un accès JTAG sécurisé à l'appareil après la programmation d'usine peut être utile pour reprogrammer l'appareil ou pour effectuer une analyse d'erreur plus tard.

PEMicro recommande soit d'activer le mode JTAG sécurisé, soit de désactiver complètement le port JTAG si la sécurité est importante. Les programmateurs Cyclone et les interfaces de débogage Multilink de PEMicro supportent le mode JTAG sécurisé.

Une collection PEKeyFile peut contenir n'importe quel nombre de mots de passe I.MX

4. Verrouiller les sauvegardes sensibles

Il existe des sauvegardes avec des valeurs confidentielles, en particulier celles qui contiennent la clé de démarrage cryptée et le mot de passe JTAG. L'un des avantages de la solution de programmation PEmicro Cyclone est que les images de programmation créées sont complètement fermées et cryptées. Cela signifie que les valeurs des clés sensibles sont protégées pendant le processus de fabrication et contre les personnes qui manipulent les données de programmation. 

Une fois que les touches sont programmées dans l'appareil cible lui-même, il est recommandé de les verrouiller pour les futures opérations de lecture. Si l'option "Verrouiller les sauvegardes" est activée dans l'utilitaire Secure Boot, la Cyclone verrouille les sauvegardes sensibles contre la lecture / écriture directement après la programmation. Le code d'application exécuté sur l'appareil et les accès via les interfaces de débogage ne peuvent pas lire les valeurs de ces sauvegardes sensibles. 

NXP_IMX_5

Bien que les fonctions de signature, de cryptage et de mot de passe / désactivation JTAG devraient empêcher l'accès à la lecture de ces sauvegardes, PEmicro recommande, pour des raisons de sécurité, de restreindre ("verrouiller") l'accès à ces sauvegardes sensibles de manière permanente.

Utilitaires de création d'image et de démarrage sécurisé de PEmicros

L'utilitaire de création d'image de PEmicro est une interface utilisateur graphique qui permet à un utilisateur de définir toutes les entrées nécessaires pour créer une image de programmation autonome. Une image eSAP de programmation autonome contient tous les fichiers de micrologiciel, les définitions de sauvegarde, les paramètres d'alimentation, les paramètres de débogage, la sérialisation, les algorithmes et plus encore, nécessaires pendant la programmation, et elle est cryptée pour protéger son contenu. L'utilitaire de création d'image génère un fichier de configuration (.CFG) qui est utilisé par le compilateur d'image SAP pour créer l'image.

les applications i.MX RT10xx créées pour la production nécessitent des paramètres de sécurité supplémentaires pour faciliter la signature et le cryptage du code de l'application ainsi que la génération de tous les fichiers de sauvegarde, clés, certificats et mots de passe nécessaires. PEMicro comprend l'utilitaire graphique Secure Boot, qui est commodément intégré dans l'utilitaire de création d'image pour traiter ces détails.

NXP_IMX_6

L'utilitaire Secure Boot crée / enregistre un fichier Secure Boot Project (.SBP) à la fermeture, qui sera utilisé plus tard pour créer des parties de l'image eSAP. 

Paramètres de sécurité i.MX RT recommandés pour la production

L'utilitaire Secure Boot dispose de deux types principaux de paramètres qui affectent la sécurité de l'application i.MX : 1) les paramètres d'application et 2) les paramètres de l'appareil. Les paramètres de l'application concernent la signature et le cryptage du code de l'application, et les paramètres de l'appareil concernent la restriction de l'accès aux ressources de la puce comme JTAG et les sauvegardes sensibles. Si tu modifies beaucoup de ces paramètres, le profil de sécurité de l'appareil i.MX RT change. La bonne nouvelle est que l'utilitaire Secure Boot dispose d'un onglet avec une vue d'ensemble de la sécurité, dans lequel les paramètres Secure Boot sont analysés pour détecter les failles de sécurité. PEmicro recommande de vérifier l'aperçu de la sécurité lorsque des modifications sont apportées aux paramètres de sécurité dans l'utilitaire Secure Boot et de corriger toutes les failles de sécurité détectées. Voici les paramètres les plus importants :

Pour s'assurer que seul le code signé est exécuté sur le processeur cible, celui-ci doit être fermé.

NXP_IMX_8

Pour s'assurer que le code programmé est crypté et que l'appareil cible dispose des clés nécessaires pour exécuter le code crypté, le mode de démarrage sécurisé doit être défini sur OTFAD ou BEE (selon l'appareil, l'un ou l'autre sera utilisé) :

 

Pour verrouiller les sauvegardes sensibles (clé de cryptage de démarrage et mot de passe JTAG) pour un accès futur, les sauvegardes verrouillées doivent être définies sur "Oui" :

 

NXP_IMX_9
NXP_IMX_10

L'état du JTAG devrait être soit désactivé en permanence ("No Debug"), soit protégé par un mot de passe ("Secure JTAG") :

Cryptage d'image SAP recommandé (programmation autonome) pour la production

Une image de programmation autonome peut être cryptée lors de sa création. Indépendamment du fait que le cryptage soit utilisé ou non, l'utilisateur n'a pas d'accès direct au contenu de l'image de programmation, car toutes les données sont codées de manière sophistiquée et intégrées dans un fichier unique. En ajoutant une couche de cryptographie selon les normes industrielles, cette enveloppe de protection est considérablement renforcée. PEmicro recommande le cryptage pour les cas où le client :

  1. Limiter l'image de programmation à l'utilisation sur certaines unités Cyclone uniquement. Ces cyclones devraient être fournis avec la même clé de cryptographie que celle utilisée pour crypter l'image.
  2. Limite la programmation à une certaine plage de dates ou à un certain nombre de programmations
  3. Rendre pratiquement impossible l'ingénierie inverse du contenu de l'image de programmation
NXP_IMX_11

Lorsqu'une image cryptée est stockée sur le disque dur, elle a l'extension .esap (.sap est l'extension pour une image non cryptée). Les utilitaires PEmicro et l'écran Cyclone indiquent clairement quand une image est cryptée.

modifier les paramètres de démarrage sécurisé dans l'utilitaire de création d'image

 

L'utilitaire de démarrage sécurisé est intégré à l'utilitaire de création d'image de la manière suivante :

NXP_IMX_12
NXP_IMX_13

le bouton Lier / créer un projet Secure Boot te permet de spécifier ou de créer un projet Secure Boot et de le lier à la configuration actuelle de création d'image. Le bouton Modifier le projet Secure Boot permet de lancer l'utilitaire Secure Boot  , avec lequel l'utilisateur peut modifier les paramètres de démarrage sécurisé. Le bouton Supprimer permet de supprimer le lien d'un projet de démarrage sécurisé lié. 

Chaque fois que le projet Secure Boot est édité / modifié via l'utilitaire de création d'image ou que l'on clique sur le bouton Regénérer la séquence de programmation, l'utilisateur peut mettre à jour le script de la séquence de programmation dans la configuration de création d'image afin de l'adapter aux paramètres du projet Secure Boot. Il est généralement recommandé de mettre à jour le script de la séquence de programmation, bien que toutes les modifications que tu as apportées précédemment au script de la séquence de programmation soient perdues.  

La case à cocher "Créer automatiquement des fichiers binaires signés ..." pendant le processus de création d'image SAP "fait en sorte que chaque fois qu'une image eSAP est créée, le processus de création d'image crée l'application signée ou signée + cryptée à partir de l'entrée d'application non signée, ainsi qu'un fichier de sauvegarde qui contient toutes les options de sécurité basées sur le projet Secure Boot lié. Dans l'exemple ci-dessus,  evkmimxrt1010_iled_blinky_final.srec  et  evkmimxrt1010_iled_blinky_fuses.OPT  sont créés chaque fois juste avant la création de l'image de programmation eSAP . 

Le processus de création pour ce cas est présenté ici :

NXP_IMX_14

En se basant sur les paramètres du fichier Secure Boot Project, le compilateur de ligne de commande Secure Boot Utility génère des fichiers de sortie Flash / Fuse intermédiaires, qui sont ensuite utilisés par le compilateur d'images SAP lors de la création de l'image de programmation autonome. Ces fichiers intermédiaires sont

NXP_IMX_15

Fichier d'application sauvegardé :  Il s'agit d'un fichier S-Record qui contient toutes les données d'application, les tables dont le bootloader a besoin pour démarrer l'application, ainsi que toutes les signatures et hachages appropriés nécessaires pour démarrer dans le mode correspondant. Le fichier binaire de l'application source et les certificats / clés spécifiques utilisés pour chiffrer / signer les données de l'application sont indiqués dans le fichier Secure Boot Project.

NXP_IMX_16

Fichier de configuration pour les sauvegardes agrégées  : Il s'agit d'un fichier d'options (.opt) qui décrit l'ensemble des sauvegardes qui doivent être programmées dans le cadre du processus autonome. Cela inclut les sauvegardes personnalisées en plus de toutes les sauvegardes nécessaires pour implémenter les choix de sécurité dans le fichier Secure Boot Project.

Cette référence dans le script de la séquence de programmation dans la configuration de création d'image fait que ces fichiers binaires intermédiaires sont capturés dans l'image de programmation eSAP et sont utilisés pour programmer le processeur cible. Dans l'exemple ci-dessus, le fichier d'application signé est programmé avec l'algorithme de programmation Flash externe correspondant et le fichier de sauvegarde avec l'algorithme OTP i.MX RT1011 (One Time Programmable Fuse Region). Une fois que le script a été importé depuis le projet Secure Boot, il peut être modifié. De cette façon, des modifications détaillées peuvent être apportées à la séquence de programmation utilisée dans l'image eSAP.

Note que ces fichiers de sortie intermédiaires sont référencés dans le script de programmation généré automatiquement qui a été importé dans la configuration de création d'image :

NXP_IMX_17

PEmicro Cyclone FX universel