Inzwischen haben die meisten Programmierer von Secure Boot und den Vorteilen seiner Verwendung gehört. Nach einem kurzen Blick in die Dokumentation erscheint Secure Boot jedoch zu kompliziert und zeitaufwändig und wird als „gewünscht, aber nicht notwendig“ für die Zukunft beiseite gelegt. Kommt Ihnen das bekannt vor?

Mit der Integration von Secure Boot und Yocto duch Variscite, war es nie einfacher, Secure Boot auf Ihrem Variscite i.MX8-basierten Produkt zu aktivieren. Während das manuelle Erstellen und Signieren Ihrer Images außerhalb des Yocto-Build-Systems viele Schritte erfordert und Raum für menschliche Fehler lässt, spart die Nutzung von Yocto zum automatischen Signieren Ihrer Images Zeit, ist leicht reproduzierbar, kann an viele Entwickler verteilt werden und erfordert nur eine kleine Konfiguration in local.conf.

Was ist Secure Boot und wer sollte es verwenden?
Secure Boot ist der Prozess der Authentifizierung der Boot-Images und des Betriebssystems in Ihrem Produkt. So können Sie darauf vertrauen, dass die Software, die auf Ihrem Produkt läuft, authentisch ist und nicht von Externen modifiziert oder ersetzt wurde. Unter anderem verhindert dies, dass Ihr Produkt umfunktioniert oder mit bösartiger Boot- oder Betriebssystem-Software infiziert wird.

Wie funktioniert es?
Die Produktfamilien i.MX8 (i.MX8Q und i.MX8X) und i.MX8M (i.MX8M, i.MX8M Mini, i.MX8M Nano und i.MX8M Plus) SoC verfügen über eine optionale Hardware-Funktion zur Aktivierung von Secure Boot. Die Produktfamilie i.MX8M bietet High Assurance Boot (HAB), und die Produktfamilie i.MX8 bietet Advanced High Assurance Boot (AHAB). Auch wenn die Architektur sich in den beiden Produktfamilien leicht unterscheidet, erzielen beide dasselbe Endergebnis.
Die HAB/AHAB-Authentifizierung basiert auf der Kryptographie mit öffentlichem Schlüssel. Die Authentifizierung erfolgt über einen Super Root Key (SRK), der ein RSA-Schlüsselpaar ist. Die Boot-Images werden offline mit dem privaten Schlüssel signiert. Die entstehenden signierten Images werden dann mit dem entsprechenden öffentlichen Schlüssel auf dem i.MX-Prozessor verifiziert. Der öffentliche Schlüssel ist in der endgültigen Binärdatei enthalten, und ein Hash des öffentlichen Schlüssels ist im SoC in einmalig programmierbaren E-Fuses programmiert, um die Vertrauenswurzel zu schaffen.
Das erste Boot-Bild wird vom i.MX ROM Bootloader authentifiziert. Jedes Image ruft dann die HAB/AHAB-API auf, um das nächste Bild zu authentifizieren und eine Vertrauenskette aufzubauen.

Wie beginne ich?
Die Yocto-Schicht von Variscite, meta-variscite-hab, macht den Einstieg in die Nutzung von Secure Boot auf Ihrem Produkt einfach. Der allgemeine Prozess läuft wie folgt ab:

  1. Folgen Sie der Wiki-Anleitung von Variscite „Yocto aus dem Quellcode bauen“, um Ihre Yocto-Build-Umgebung einzurichten
  2. Laden Sie sich das Code Signing Tool (CST) von NXP herunter
  3. Verwenden Sie CST zur Erstellung eines Public-Key-Infrastructure (PKI)-Baums. Dies muss nur einmal gemacht werden.
  4. Konfigurieren Sie meta-variscite-hab in conf/local.conf mit den benutzerdefinierten spezifischen Informationen
  5. Verwenden Sie bitbake zur Erstellung eines signierten SD-Karten-Images
  6. U-Boot: Programmieren Sie i.MX SoC E-Fuses mit SRK Public Key Hash
  7. U-Boot: Verifizieren Sie das signierte Image, indem Sie running hab_status oder ahab_status ausführen
  8. U-Boot: Schließen Sie das Gerät, indem Sie in eine spezielle SoC-E-Fuse schreiben

Um eine vollständige Schritt-für-Schritt-Anleitung zu erhalten, besuchen Sie bitte das Variscite-Software-Wiki für Ihr Variscite SoM: