Skip to content

Secure boot và TrustZone: khái niệm cơ bản

Trang này gom các khái niệm nền cần biết trước khi đọc tài liệu secure boot trên SoC ARM: chuỗi boot, Root of Trust, TrustZone, Exception Level, TF-A và OP-TEE. Ví dụ minh họa lấy từ SoC Rockchip. Case study cụ thể trên RK3399 nằm ở bài Vì sao Linux không đọc được secure eFuse trên RK3399?.

Bức tranh chung: chuỗi boot

Secure boot là cơ chế để mỗi bước trong chuỗi boot chỉ chạy bước kế tiếp khi chữ ký của nó hợp lệ. Trên SoC ARM 64-bit, chuỗi boot điển hình gồm:

  1. Boot ROM: code cố định trong chip, chạy đầu tiên.
  2. First loader (SPL hoặc loader của hãng): nạp các thành phần sau.
  3. TF-A BL31, tùy chọn kèm OP-TEE: firmware chạy ở Secure World.
  4. U-Boot: bootloader đầy đủ.
  5. Linux kernel.

Hash của public key lưu trong eFuse (hoặc OTP) là điểm neo cho cả chuỗi: Boot ROM dựa vào nó để tin first loader, rồi mỗi bước tin bước kế tiếp.

Ví dụ: Rockchip

Trên Rockchip, first loader là SPL hoặc miniloader của hãng, và chuỗi cụ thể có thể khác tùy board.

Sơ đồ chuỗi secure boot trên Rockchip: eFuse chứa hash public key, Boot ROM verify first loader, first loader chuyển key cho U-Boot, U-Boot verify boot.img

Mũi tên cam là bước so hash với eFuse. Mũi tên xanh đánh số là các bước verify chữ ký, giải thích trong khung bên dưới sơ đồ.

Cần kiểm chứng

Sơ đồ ghi ở bước 3 rằng U-Boot so hash của key với eFuse/OTP. Bài RK3399 chỉ mô tả first loader chuyển key cho U-Boot để verify boot.img, không nhắc U-Boot đọc eFuse. Nên đối chiếu lại mục 1.3 và 1.4 của Secure Boot Application Note V1.9 trước khi dựa vào chi tiết này.

Nền tảng tin cậy

Mọi thứ trong secure boot dựa trên một điểm xuất phát không sửa được, rồi mở rộng niềm tin từng bước.

Thuật ngữ Ý nghĩa
Root of Trust Điểm xuất phát được tin vô điều kiện. Ở đây là Boot ROM cộng với hash của public key trong eFuse.
Chain of trust Chuỗi xác minh nối tiếp: ROM kiểm tra loader, loader kiểm tra U-Boot, U-Boot kiểm tra kernel.
Boot ROM / MaskROM Code cố định trong chip, không sửa được. Trên Rockchip, "MaskROM mode" còn là chế độ nạp firmware qua USB khi không có boot media hợp lệ.
Chữ ký số (SHA256 + RSA2048) Firmware được hash rồi ký bằng private key. Chip verify bằng public key tương ứng.
Vì sao lưu hash của key Hash nhỏ (256 bit) và cố định, còn public key RSA dài hơn nhiều. Chip tính hash của key trong firmware rồi so với giá trị trong eFuse.
Provisioning Công đoạn ghi hash vào eFuse/OTP trên từng thiết bị, thường ở dây chuyền sản xuất.
Anti-rollback / revocation counter Bộ đếm để chặn nạp lại firmware cũ có lỗ hổng. Xuất hiện trong layout OTP của RK3328/RK3228H.

Phân vùng bảo mật của ARM

Phần cứng, không phải driver, quyết định ai được truy cập tài nguyên nào. Đó là ý tưởng của TrustZone.

Thuật ngữ Ý nghĩa
TrustZone Cơ chế phần cứng của ARM chia hệ thống thành Secure World và Non-secure World. Bus mang một bit phân biệt hai world.
Secure World / Non-secure World Linux chạy ở Non-secure. Firmware tin cậy chạy ở Secure và truy cập được tài nguyên mà Non-secure không được chạm.
Exception Level (EL0 đến EL3) EL0 là ứng dụng, EL1 là kernel (Linux), EL2 là hypervisor (xem Hypervisor & Hyper-V), EL3 là secure monitor, tầng đặc quyền cao nhất.
SMC (Secure Monitor Call) Lệnh để code ở EL1/EL2 gõ cửa EL3, nhờ làm việc mà nó không được tự làm.
PSCI Giao diện chuẩn quản lý nguồn (bật/tắt CPU core), ví dụ quen thuộc của một dịch vụ gọi qua SMC.

Phần mềm chạy ở Secure World

TF-A là phần gần như luôn có. OP-TEE là phần tùy chọn, chỉ cần khi sản phẩm muốn có TEE.

Thành phần Vai trò
TF-A (Trusted Firmware-A) Firmware tham chiếu của ARM cho Armv8-A. Chia thành nhiều stage (bảng dưới); phần ở lại lúc runtime là BL31, chạy ở EL3.
BL31 Stage ở lại runtime của TF-A, xử lý SMC và PSCI. Trên Rockchip thường chỉ thấy BL31.
OP-TEE Hệ điều hành nhỏ mã nguồn mở chạy ở Secure World (S-EL1), cung cấp TEE. Linux nói chuyện với nó qua driver TEE và SMC.
TEE / TA TEE (Trusted Execution Environment) là môi trường thực thi tin cậy. TA (Trusted Application) là ứng dụng chạy trong đó, ví dụ lưu key hoặc DRM.
SPL Bootloader nhỏ chạy đầu tiên, đủ nhỏ để nạp vào SRAM.
U-Boot Bootloader đầy đủ, chạy sau SPL và nạp kernel.

Các stage của TF-A và chuỗi boot

TF-A đặt tên các image trong chuỗi boot theo số BL (Boot Loader stage). Bảng dưới ánh xạ chúng vào chuỗi boot ở đầu trang.

Stage Vai trò Mức đặc quyền thường gặp Trên Rockchip
BL1 Boot ROM tin cậy, nạp BL2 EL3 Thay bằng Boot ROM của chip
BL2 Khởi tạo nền tảng (DRAM...), nạp các image sau S-EL1 (hoặc EL3 tùy cấu hình) Thay bằng SPL hoặc miniloader
BL31 Secure monitor runtime: SMC, PSCI EL3 TF-A BL31
BL32 Secure OS (tùy chọn) S-EL1 OP-TEE
BL33 Non-secure bootloader EL2 hoặc EL1 U-Boot

Thuật ngữ khi đọc tài liệu Rockchip

Các từ này xuất hiện khi đọc TRM của RK3399, Secure Boot Application Note và loạt bài của Bootlin. Phân tích chi tiết nằm trong bài RK3399.

Thuật ngữ Ý nghĩa
TRM (Technical Reference Manual) Tài liệu phần cứng chi tiết của chip. Chương 16 của TRM RK3399 mô tả cơ chế secure slave.
APB Bus ngoại vi tốc độ thấp, nơi các eFuse được gắn vào.
sGRF (Secure General Register File) Thanh ghi cấu hình bảo mật. Quyết định các slave loại "per configure" là secure hay non-secure.
Loại secure của slave Bốn loại theo TRM: secure, non-secure, boot-secure, per configure.
SError Lỗi bất đồng bộ do bus báo về sau khi lệnh truy cập bộ nhớ đã qua MMU.
nvmem Subsystem của Linux để đọc các bộ nhớ nhỏ không bay hơi như eFuse, OTP, EEPROM.
OTP và eFuse Hai công nghệ write-once. OTP dùng anti-fuse (hở thành dẫn), eFuse dùng electromigration (dẫn thành hở).

Áp dụng vào RK3399

RK3399 có hai bank eFuse. EFUSE0 (non-secure) lưu CPU ID, wafer info, leakage và đọc được qua driver nvmem. EFUSE1 (secure cố định) lưu cờ secure boot và hash của RSA public key; chỉ Secure World truy cập được, Linux chạm vào sẽ gây SError rồi kernel panic. Muốn đọc từ Linux thì nhiều khả năng phải đi qua SMC vào TF-A hoặc OP-TEE.

Phân tích đầy đủ, kèm layout eFuse và lưu ý khi đưa vào sản phẩm: Vì sao Linux không đọc được secure eFuse trên RK3399?

Nhầm lẫn hay gặp

  • Secure boot không mã hóa firmware. Nó chỉ đảm bảo firmware do bên giữ private key ký.
  • Theo app note của Rockchip, secure boot kiểm tra tính hợp lệ của phần mềm chứ không kiểm tra phần cứng. Firmware đã ký vẫn boot được trên bản sao mạch cùng loại chip.
  • Linux không đọc được secure eFuse là thiết kế bảo mật, không phải lỗi driver.
  • OP-TEE không bắt buộc. Chỉ có TF-A vẫn chạy được secure boot.
  • Mất hoặc lộ keypair RSA thì thiết bị đã xuất xưởng không thể update firmware nữa.

Nguồn tham khảo