聯詠 NT9856X Secure Boot 與加密流程,其目的為確保從上電後到 Linux 啟動整個過程中,系統的完整性與資料安全性。
NT9856x Secure Boot啟動流程:
Step 1:ROM Code 執行 & 驗證 Loader
- ROM 固化於 SoC 內部,不可修改。
- 功能:
- 驗證 Loader 是否有簽章(RSA2048 + SHA256);
- 驗證方式為:ROM code 讀取 public key + 簽章後,對 loader image 做雜湊比對。
- 只有驗證通過才會跳轉執行 Loader。
🔸 相關 EFUSE:
- SECUREBOOT_SECURE_EN = 1
- RSA public key 存入 EFUSE
Step 2:Loader 功能與驗證 U-Boot
- 讀取 NAND / eMMC / SPI Flash 的 u-boot。
- 如果 SECUREBOOT_DECRYPT_UBOOT = Secure,則:
- Loader 會進行 U-Boot 解密(AES128)與簽章驗證(RSA2048)。
- 驗證 U-Boot 的 Hash 與簽章是否一致。
Step 3:U-Boot 驗證 Kernel & DTB
- 若啟用 secureboot,U-Boot 會驗證 kernel、DTB(device tree)、ramdisk 等:
- 這些區段可能加密(AES)或簽章(RSA)。
- 使用 nvt-secure-en, nvt-write-key, nvt-sign 等工具製作/簽章。
- U-Boot 提供 crypto 驗證功能(通常內建於 u-boot image)。
Step 4:Kernel 啟動 Linux 系統
- 確認 Secure Boot 是否已啟用;
- 檢查 EFUSE 的 RSA key hash 是否正確;
- 確認資料區是否加密。
安全流程關鍵元件
元件 | 功能說明 |
|---|---|
| EFUSE | 儲存 RSA 公鑰、Secure Boot 開關旗標等 |
| RSA2048 | 對 image 做簽章與驗章 |
| AES128 | 資料區加密 |
| PKCS#1 v1.5 | RSA padding 格式 |
| OTP/EFUSE 寫入工具 | nvt_write_key, nvt_secure_en |
建議流程(燒錄與寫入 key)
- 先燒錄未簽章 image → 寫入 EFUSE RSA key:
- 燒錄簽章後正式 image(loader + uboot + kernel + rootfs)
- 整個 boot 流程由 ROM 開始驗證
五題自問自答:
Q1:Secure Boot 在 NT9856x 啟動流程中最早從哪一階段開始生效?
A1: Secure Boot 最早在 SoC 的 ROM Code 階段就生效,ROM Code 會驗證 Loader 是否有正確簽
章(RSA2048 + SHA256),驗證通過後才跳轉至 Loader。
Q2:要讓 Secure Boot 正常運作,必須在 SoC 中啟用哪些 EFUSE 設定?
A2: 需啟用:
- SECUREBOOT_SECURE_EN = 1(啟用 Secure Boot)
- 寫入 RSA2048 的 Public Key
- (可選)啟用 rsa_chk_en 進行 hash 驗證、data_encrypt 加密資料
Q3:U-Boot 如何驗證 Kernel 是否被竄改?
A3: 若啟用 Secure Boot,U-Boot 會針對 kernel、DTB、ramdisk 等部分進行 RSA2048 驗章與
SHA256 雜湊比對,以確保這些映像檔未被竄改。
Q4:在什麼情況下會使用 AES128 加密 image?又是誰解密?
A4: 若 ENCRYPTDATA=AES128,則 kernel 或 rootfs 等 image 會使用 AES128 加密。解密工作會
在 Loader(對 u-boot)或 U-Boot(對 kernel)中完成。
Q5:一次性將 EFUSE 寫入並啟用 Secure Boot,是否可以直接用 sign 過的 image 啟動?
A5: 不行。需先用 未簽章 image 啟動 Linux 或 U-Boot,執行 nvt_write_key 與
nvt_secure_en 將 EFUSE 寫入與啟用,之後才能燒錄與啟動簽章的正式 image。
參考來源