この記事ではJetson NanoのSecure Boot Sequenceについて解説します。Secure Bootを有効にする方法はこちらの記事を参照してください。またBoot Sequenceを解説した記事も合わせてご覧ください。
Secure Boot Components
Boot Sequenceの記事では使われなかった以下のコンポーネントが登場します。
- SE
- Security Engine
- 内部の暗号エンジンとその鍵が保存されるコンポーネント
- Fuse
- こちらの記事を参照
PKH(Public Key Hash)、SBK(Secure Boot Key)、DK(Device Key)が予めFuseに書き込まれています。SBKとDKは https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3261/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/bootloader_secure_boot.html#wwpID0E0BI0HA を参照してください。
Jetson NanoでSBK、DKを使うことはサポートされていないのでここでのSBK、DKの説明は参考程度に留めてください。

Secure Boot
Start from ROM
電源が投入されるとBPMPがROMをフェッチしプログラムの実行を開始します。
Secure Bootの観点ではROMは書き換えができないので常に安全です。逆の言い方をするとROMにバグがあると更新ができないためROMの開発は慎重に設計・実装されなければなりません。

Load BCT, store PK to SE, and validate BCT
ROMはOn board flashからBCTをSysRAMにロードします。

ROMはBCTに含まれるPK(Public Key)のハッシュ値とFuseのPKHを比較します。

ROMはPKのハッシュ値とPKHが一致していたら、PKをSEに保存します。

以下のSBK、DK、SSKの説明は参考程度にと留めてください。Jetson NanoでSBK、DK、SSKはサポートされていません。
ROMはFuseのSBKをSEに保存、SBKとDKとUIDからSSKを導出し、SSKをSEに保存します。なおSSKの導出方法は不明です。

ROMはBCTのsignをSEのPKで検証します。

Load and validate TegraBoot
ROMはOn board flashからTegraBootをSysRAMにロードします。

ROMはTegraBootのsignをSEのPKで検証します。

Jump to TegraBoot
ROMはSysRAM上のTegraBootに遷移します。

Load and validate TOS and CBoot
TegraBootはOn board flashからTOSとCBootをSDRAMにロードします。

TegraBootはTOSのsignをSEのPKで検証し、CBootのsignをSEのPKで検証します。

Jump to TOS
TegraBootはCPUを開始し、開始されたCPUはSDRAM上のTOSをフェッチしプログラムの実行を開始します。

Jump to CBoot
TOSはTrust Zoneから抜けSysRAM上のCBootに遷移します。

Load and validate u-boot
CBootはOn board flashからu-bootをSDRAMにロードし、u-bootのsignをCBootがもつPKで検証します。
CBootによるu-bootの検証が適切に行われているか調査が必要です。

Jump to u-boot
CBootはSDRAM上のu-bootに遷移します。
Nvidiaが提供するSecure Bootはここで終了です。u-bootによるinitrdとkernelの検証はユーザによる実装が必要です。

Load initrd & kernel
u-bootはSD cardからinitrdとkernelをSDRAMにロードします。

Jump to kernel
u-bootはSDRAM上のkernelに遷移します。

mount rootfs
Linux kernelはrootfsをマウントしrootfsのプログラムを開始します。

以上です。
参考記事
- https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3271/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/bootloader_secure_boot.html
- https://www.brainshark.com/1/player/nvidia?dm=5&pause=1&nrs=1&fb=0&r3f1=ecd6a8fbf7faa2b0e0aac9aba1e0e6f7f8a3b890bfe0eaa6&custom=jetson_security_secureboot
- https://www.thegoodpenguin.co.uk/blog/diving-into-the-nvidia-jetson-nano-boot-process/
- https://www.youtube.com/watch?v=Td4o7b24I28