PEmicro-erlebniswelt

Programmierung NXP i.MX RT10xx mit Secure Boot

Die Cyclone-Produktionsprogrammierer von PEmicro machen das Programmieren von NXP i.MX RT10xx-Geräten mit aktiviertem Secure Boot extrem einfach und sicher.  Das im Lieferumfang des Programmiergeräts enthaltene Secure Boot Utility übernimmt die Signatur, Verschlüsselung der i.MX RT10xx-Anwendung sowie die Details zur Konfiguration und Sperrung der Sicherheitssicherung. Der Programmierer unterstützt eine extrem schnelle Secure JTAG-Verbindung zum Ziel-i.MX-Gerät.  

Die Produktionsprogrammierungs-Images von PEmicro sind stark codiert und optional kryptografisch sicher ,  sodass die Firmware-Dateien, Verschlüsselungsschlüssel, Sicherungseinstellungen und Kennwörter des Benutzers ab dem Moment, in dem das Image während des Herstellungsprozesses generiert wird, sicher geschützt sind. Programmierimages können für die Verwendung auf bestimmten Cyclones mit festgelegten Datumsbereichen und Programmierzahlen eingeschränkt werden. 

Erfahren Sie mehr über die i.MX-Sicherheitsfunktionen und sehen Sie sich eine Demonstration zum Erstellen eines sicheren i.MX RT10xx-Programmierimages an.

 
Erstellen eines Secure Boot-Programmierimages für i.MX RT1011

Das folgende Video zeigt, wie Sie das Image Creation Utility zusammen mit dem integrierten Secure Boot Utility verwenden, um ein eigenständiges Programmier-Image zu generieren, das einen NXP i.MX RT1011-Prozessor sichert:

secure-boot-video

Übersicht über relevante i.MX-Sicherheitsfunktionen

1. Führen Sie nur signierte Firmware aus

Die i.MX RT-Serie unterstützt einen sicheren Startvorgang, bei dem nur mit bestimmten Zertifikaten signierter Anwendungscode ausgeführt werden kann. Im Allgemeinen generieren Sie einmalig eine Gruppe von vier Signaturzertifikaten, die in einer PEKeyFile-Sammlung gespeichert sind. Wenn Sie den Hash dieser Zertifikate in die Sicherungen eines i.MX RT-Geräts mit anderen geeigneten Einstellungen programmieren, startet das i.MX-Gerät nur Code, der mit einem dieser Zertifikate signiert ist.

Diese Funktion bewirkt, dass Sie ein i.MX-Gerät während der Produktion so programmieren können, dass immer nur der von Ihnen signierte Anwendungscode gestartet wird. Dies kann verwendet werden, um zu verhindern, dass böswilliger, nicht autorisierter oder beschädigter Code in Ihrem Produkt ausgeführt wird.

Die Originalzertifikate sind nicht in die Sicherungen des Geräts programmiert und verbleiben als solche in Ihrer privaten Obhut. In die Sicherungen sind nur die Hashwerte der Zertifikate programmiert, und nur der öffentliche Teil des Zertifikats ist in Ihrer Anwendung enthalten.

Eine PEKeyFile-Sammlung enthält den Satz von vier Signaturzertifikaten und kann mit einer beliebigen Anzahl sicherer Startprojekte verbunden werden.

NXP_imx_1

2. Verschlüsselung der Anwendungsfirmware 

Neben der Option für signierten Code gibt es eine Option, um auch den Anwendungscode zu verschlüsseln. Der Anwendungscode wird verschlüsselt im internen / externen Speicher gespeichert. In den meisten Fällen wird der Prozessor in einem Prozess namens Execute In Place (XIP) direkt aus dem verschlüsselten Speicher ausgeführt. Die Entschlüsselung erfolgt im laufenden Betrieb mit den On-Chip-BEE- oder OTFAD-Modulen. Alternativ kann der verschlüsselte Code auch beim Booten entschlüsselt, im RAM gespeichert und nicht mehr über genügend RAM verfügen. Das Ausführen der Anwendung aus dem RAM kann im Vergleich zu verschlüsseltem XIP moderate Leistungsvorteile bieten. Wenn sich der RAM jedoch außerhalb des Prozessors befindet, kann er leicht ausgelesen werden. 

Im Allgemeinen generiert der Benutzer einmalig für ein bestimmtes Produkt (oder eine bestimmte Produktlinie) einen AES-Kryptografieschlüssel, den PEmicro als „ verschlüsselten Startschlüssel “ bezeichnet . Dieser Schlüssel wird manchmal mit anderen zufälligen Schlüsseln verwendet, um den Anwendungscode zu verschlüsseln, bevor er zum Flashen gespeichert wird. Wenn der  verschlüsselte Startschlüssel mit anderen geeigneten Einstellungen in die Sicherungen eines i.MX RT-Geräts programmiert ist  , kann das i.MX-Gerät Anwendungscode ausführen und entschlüsseln, der mit demselben verschlüsselten Startschlüssel  verschlüsselt wurde .

NXP_IMX_2

Es ist nicht erforderlich, dass ein i.MX-Prozessor, in dessen Sicherungen ein verschlüsselter Startschlüssel programmiert ist, nur verschlüsselte Binärdateien ausführt. Der Prozessor kann entweder signierte oder signierte + verschlüsselte Anwendungen ausführen.

Der Vorteil der Verschlüsselung der Benutzeranwendung besteht darin, dass sie eine starke Abwehr gegen das Kopieren von Produkten darstellt. Wenn die Anwendung unverschlüsselt ist und im externen Speicher gespeichert ist, kann sie kopiert, mit einem anderen Zertifikat signiert (oder nicht signiert) und auf einem leeren neuen i.MX-Gerät ausgeführt werden. Das Verschlüsseln der Anwendung mit dem verschlüsselten Startschlüssel verhindert dies. Ohne eine Kopie des verschlüsselten Startschlüssels ist der Anwendungscode nicht lesbar, und selbst wenn er kopiert wird, kann ein anderes i.MX-Gerät ihn nicht entschlüsseln. 

Eine PEKeyFile-Sammlung kann eine beliebige Anzahl verschlüsselter Startschlüssel enthalten.

3. JTAG-Zugriff mit einem Passwort einschränken

Um den Debug-Zugriff auf das Gerät nach der Produktionsprogrammierung zu verhindern, können Sicherungen so eingestellt werden, dass entweder das Debug-Modul deaktiviert oder der sichere JTAG-Modus aktiviert wird. Für den sicheren JTAG-Modus muss die Debug- / Programmierhardware während der Verbindung ein Kennwort verwenden. Ohne das entsprechende Kennwort erlaubt der sichere JTAG-Modus keinen Lese- / Schreibspeicher und führt keinen Codezugriff über das Debug-Modul aus. 

NXP_IMX_3
NXP_IMX_4

Wenn das richtige Kennwort angegeben ist, kann der normale JTAG / SWD-Modus zum Debuggen oder Neuprogrammieren des Geräts verwendet werden. 

PEmicro-Dienstprogramme speichern JTAG-Kennwörter zusammen mit Signaturzertifikaten und verschlüsselten Startschlüsseln in einer einzigen PEKeyFile-Erfassungsdatei (.peKeyFile). Das PEKeyFile speichert einen einzelnen Satz von vier Signaturzertifikaten und eine unbegrenzte Anzahl von JTAG-Passwörtern und verschlüsselten Startschlüsseln. Viele sichere Startprojekte können dieselben Sicherheitselemente gemeinsam nutzen.

Ein sicherer JTAG-Zugriff auf das Gerät nach der werkseitigen Programmierung kann hilfreich sein, um das Gerät neu zu programmieren oder später eine Fehleranalyse durchzuführen.

PEMicro empfiehlt, entweder den sicheren JTAG-Modus zu aktivieren oder den JTAG-Port vollständig zu deaktivieren, wenn Sicherheit wichtig ist. Die Cyclone-Programmierer und Multilink-Debug-Schnittstellen von PEMicro unterstützen den sicheren JTAG-Modus.

Eine PEKeyFile-Sammlung kann eine beliebige Anzahl von I.MX-Kennwörtern enthalten

4. Sperren empfindlicher Sicherungen

Es gibt Sicherungen mit vertraulichen Werten, insbesondere die Sicherungen, die den verschlüsselten Startschlüssel und das JTAG-Kennwort enthalten. Einer der Vorteile der Programmierlösung PEmicro Cyclone besteht darin, dass die erzeugten Programmierimages vollständig in sich geschlossen und verschlüsselt sind. Das bedeutet, dass die Werte sensibler Schlüssel während des Herstellungsprozesses und vor Personen geschützt sind, die mit den Programmierdaten umgehen. 

Sobald die Tasten im Zielgerät selbst programmiert sind, wird empfohlen, sie für zukünftige Lesevorgänge zu sperren. Wenn im Secure Boot Utility die Option „Sicherungen sperren“ aktiviert ist, sperrt der Cyclone die empfindlichen Sicherungen direkt nach dem Programmieren gegen Lesen / Schreiben. Auf dem Gerät ausgeführter Anwendungscode sowie Zugriffe über Debug-Schnittstellen können die Werte dieser empfindlichen Sicherungen nicht lesen. 

NXP_IMX_5

Obwohl die Funktionen zum Signieren, Verschlüsseln und JTAG-Kennwort / Deaktivieren den Zugriff auf das Lesen dieser Sicherungen verhindern sollten, empfiehlt PEmicro aus Sicherheitsgründen, den Zugriff auf diese sensiblen Sicherungen dauerhaft einzuschränken („sperren“).

PEmicros Dienstprogramme zur Image-Erstellung und zum sicheren Booten

Das Imageserstellungsprogramm von PEmicro ist eine grafische Benutzeroberfläche, mit der ein Benutzer alle Eingaben definieren kann, die zum Erstellen eines eigenständigen Programmierimage erforderlich sind. Ein eigenständiges Programmier-eSAP-Image enthält alle Firmware-Dateien, Sicherungsdefinitionen, Energieeinstellungen, Debug-Einstellungen, Serialisierung, Algorithmen und mehr, die während der Programmierung benötigt werden, und ist zum Schutz des Inhalts verschlüsselt. Das Image Creation Utility generiert eine Konfigurationsdatei (.CFG), die vom SAP Image Compiler zum Erstellen des Images verwendet wird.

i.MX RT10xx-Anwendungen, die für die Produktion erstellt werden, erfordern zusätzliche Sicherheitseinstellungen, um das Signieren und Verschlüsseln des Anwendungscodes sowie das Generieren aller erforderlichen Sicherungsdateien, Schlüssel, Zertifikate und Kennwörter zu erleichtern. PEMicro enthält das grafische Secure Boot Utility, das bequem in das Image Creation Utility integriert ist, um diese Details zu verarbeiten.

NXP_IMX_6

Das Secure Boot Utility erstellt / speichert beim Beenden eine Secure Boot Project-Datei (.SBP), die später zum Erstellen von Teilen des eSAP-Images verwendet wird. 

Empfohlene i.MX RT-Sicherheitseinstellungen für die Produktion

Das Secure Boot Utility verfügt über zwei Haupttypen von Einstellungen, die sich auf die Sicherheit der i.MX-Anwendung auswirken: 1) Anwendungseinstellungen und 2) Geräteeinstellungen. Anwendungseinstellungen beziehen sich auf das Signieren und Verschlüsseln von Anwendungscode, und Geräteeinstellungen befassen sich mit der Einschränkung des Zugriffs auf Chipressourcen wie JTAG und empfindliche Sicherungen. Wenn Sie viele dieser Einstellungen ändern, ändert sich das Sicherheitsprofil des i.MX RT-Geräts. Die gute Nachricht ist, dass das Secure Boot Utility über eine Registerkarte mit einer Sicherheitsübersicht verfügt, auf der die Secure Boot-Einstellungen auf Sicherheitslücken analysiert werden. PEmicro empfiehlt, die Sicherheitsübersicht zu überprüfen, wenn Änderungen an den Sicherheitseinstellungen im Secure Boot Utility vorgenommen werden, und alle festgestellten Sicherheitslücken zu beseitigen. Hier sind die wichtigsten Einstellungen:

Um sicherzustellen, dass auf dem Zielprozessor nur signierter Code ausgeführt wird, sollte dieser geschlossen sein.

NXP_IMX_8

Um sicherzustellen, dass der programmierte Code verschlüsselt ist und das Zielgerät über die zum Ausführen von verschlüsseltem Code erforderlichen Schlüssel verfügt, sollte der sichere Startmodus auf OTFAD oder BEE eingestellt sein (je nach Gerät wird der eine oder andere verwendet):

 

Um empfindliche Sicherungen (Boot Encryption Key und JTAG Password) für den zukünftigen Zugriff zu sperren, sollten die Sicherungen sperren auf "Ja" gesetzt sein:

 

NXP_IMX_9
NXP_IMX_10

Der JTAG-Status sollte entweder dauerhaft deaktiviert („No Debug“) oder passwortgeschützt („Secure JTAG“) sein:

Empfohlene SAP-Image-Verschlüsselung (Stand Alone Programming) für die Produktion

Ein eigenständiges Programmierimage kann beim Erstellen verschlüsselt werden. Unabhängig davon, ob Verschlüsselung verwendet wird, hat der Benutzer keinen direkten Zugriff auf den Inhalt des Programmierimage, da alle Daten auf raffinierte Weise codiert und in eine einzelne Datei eingebettet werden. Durch Hinzufügen einer Schicht von Kryptografie nach Industriestandard wird diese Schutzhülle erheblich gehärtet. PEmicro empfiehlt die Verschlüsselung für Fälle, in denen der Kunde:

  1. Beschränken Sie das Programmierimage auf die Verwendung nur auf bestimmten Cyclone-Einheiten. Diese Cyclones müssten mit demselben Kryptografieschlüssel bereitgestellt werden, mit dem das Image verschlüsselt wurde.
  2. Beschränken Sie die Programmierung auf einen bestimmten Datumsbereich oder eine bestimmte Programmieranzahl
  3. Machen Sie es praktisch unmöglich, den Inhalt des Programmierimage zurückzuentwickeln
NXP_IMX_11

Wenn ein verschlüsseltes Image auf der Festplatte gespeichert wird, hat es die Erweiterung .esap (.sap ist die Erweiterung für unverschlüsseltes Image). Die PEmicro-Dienstprogramme und das Cyclone-Display zeigen deutlich an, wann ein Image verschlüsselt ist.

Ändern der sicheren Starteinstellungen im Image Creation Utility

 

Das Secure Boot Utility ist wie folgt in das Image Creation Utility integriert:

NXP_IMX_12
NXP_IMX_13

Über die Schaltfläche Secure Boot-Projekt verknüpfen / erstellen können Sie ein Secure Boot-Projekt angeben oder erstellen und mit der aktuellen Image Creation-Konfiguration verknüpfen. Mit der Schaltfläche Secure Boot Project bearbeiten wird das  Secure Boot Utility gestartet , mit dem der Benutzer die Einstellungen für den sicheren Start ändern kann. Mit der Schaltfläche Löschen wird die Verknüpfung eines verknüpften sicheren Startprojekts aufgehoben. 

Jedes Mal, wenn das Secure Boot-Projekt über das Image Creation Utility bearbeitet / geändert oder auf die Schaltfläche Programmiersequenz neu generieren geklickt wird, kann der Benutzer das Programmiersequenzskript in der Image Creation-Konfiguration aktualisieren, um es an die Einstellungen des Secure Boot Project anzupassen. Es wird allgemein empfohlen, das Programmiersequenzskript zu aktualisieren, obwohl alle Änderungen, die Sie zuvor am Programmiersequenzskript vorgenommen haben, verloren gehen.  

Das Kontrollkästchen "Signierte Binärdateien automatisch erstellen ...". während des SAP-Image-Erstellungsprozesses “bewirkt, dass der Image-Erstellungsprozess jedes Mal, wenn ein eSAP-Image erstellt wird, die vorzeichenbehaftete oder signierte + verschlüsselte Anwendung aus der nicht signierten Anwendungseingabe sowie eine Sicherungsdatei erstellt, die alle Sicherheitsoptionen enthält, die auf dem verknüpften Secure Boot Project basieren geschaffen. Im obigen Beispiel werden  evkmimxrt1010_iled_blinky_final.srec  und  evkmimxrt1010_iled_blinky_fuses.OPT  jedes Mal unmittelbar vor dem Erstellen des eSAP-Programmierimage erstellt. 

Der Erstellungsprozess für diesen Fall ist hier zu sehen:

NXP_IMX_14

Basierend auf den Einstellungen in der Secure Boot Project-Datei generiert der Secure Boot Utility-Befehlszeilen-Compiler Zwischen-Flash / Fuse-Ausgabedateien, die dann vom SAP Image Compiler beim Erstellen des eigenständigen Programmierimage verwendet werden. Diese Zwischendateien sind:

NXP_IMX_15

Gesicherte Anwendungsdatei:  Dies ist eine S-Record-Datei, die alle Anwendungsdaten, Tabellen enthält, die der Bootloader zum Starten der Anwendung benötigt, sowie alle geeigneten Signaturen und Hashes, die zum Starten im entsprechenden Modus erforderlich sind. Die Quellanwendungsbinärdatei und die spezifischen Zertifikate / Schlüssel, die zum Verschlüsseln / Signieren der Anwendungsdaten verwendet werden, sind in der Secure Boot Project-Datei angegeben.

NXP_IMX_16

Konfigurationsdatei für  aggregierte Sicherungen: Dies ist eine Optionsdatei (.opt), die den gesamten Satz von Sicherungen beschreibt, die als Teil des eigenständigen Prozesses programmiert werden sollen. Dies umfasst benutzerdefinierte Sicherungen zusätzlich zu allen Sicherungen, die zum Implementieren der Sicherheitsauswahl in der Secure Boot Project-Datei erforderlich sind.

Diese Referenz im Programmiersequenzskript in der Image Creation-Konfiguration bewirkt, dass diese Zwischenbinärdateien im eSAP-Programmierimages erfasst werden und zum Programmieren des Zielprozessors verwendet werden. Im obigen Beispiel wird die signierte Anwendungsdatei mit dem entsprechenden externen Flash-Programmieralgorithmus und die Sicherungsdatei mit dem OTP-Algorithmus i.MX RT1011 (One Time Programmable Fuse Region) programmiert. Sobald das Skript aus dem Secure Boot Project importiert wurde, kann es geändert werden. Auf diese Weise können detaillierte Änderungen an der im eSAP-Image verwendeten Programmiersequenz vorgenommen werden.

Beachten Sie, dass auf diese Zwischenausgabedateien im automatisch generierten Programmierskript verwiesen wird, das in die Image Creation-Konfiguration importiert wurde:

NXP_IMX_17

PEmicro Cyclone FX Universal