Qualcomm Secure Boot and Image Authentication
doc
Qualcomm Secure Boot and Image Authentication
overview
secure boot 的起点是 PBL,只读,物理安全。
TEE(EL3)的boot chain: PBL -> XBL_SEC -> QTEE
REE(EL1)的boot chain: PBL -> XBL -> QHEE -> OS Bootloader -> OS Kernel
TEE的images可以同时被Qualcomm、OEM(设备制造商)并列签名,image遵守标准的ELF文件格式。
TEE loading
XBL_SEC先为TEE memory设访问控制
XBL把TEE image读入memory
XBL通知XBL_SEC校验TEE image
XBL_SEC锁定TEE image的memory
XBL_SEC校验TEE image
XBL_SEC跳转执行TEE image
XBL载入其他images(例如OS kernel)
signed image format
Qualcomm Technologies firmware images 遵守 ELF 标准格式,包含 { elf header, program headers, hash table segment, elf segments }
其实,hash table segment 也是一个elf segment,只是qualcomm为这个hash table segment设置了自定义的格式。
hash table segment 包含: - mbn header: hash table segment各个field的位置信息 - QTI metadata: Qualcomm对当前image设置的一些信息 - OEM metadata: OEM对当前image设置的一些信息 - Hash Table: 该ELF文件的{ elf header + program header}的hash、其他elf segments的hash - QTI signature - QTI Cert Chain - OEM signature - OEM Cert Chain - 0xFF padding
QTI signature/OEM signature所对应的原文范围都是 { mbn header, QTI metadata, OEM metadata, Hash Table }
image metadata
SW_ID : 当前image的类型
HW_ID : 当前image适用的芯片类型
OEM_ID: 当前image适用于哪个OEM
debug标识
当前image是否与单个device绑定,而不是全局通用的image
防回滚
旧版本的设计是把metadata写到leaf certificate的OU field了,解析比较麻烦,每次image升级都要重新签发leaf certificate。
cert chain & signature
RSSSSA-PSS, ECDSA NIST P-384
Root CA Cert的hash值 写在efuse里、或者hardware rom code里。
image loading
loader对image依次干这些事: - 安全载入elf header - 安全载入program header - 安全载入hash segment - 校验hash segment的签名,一直验到root ca cert的hash - 校验 { elf header + program header } 的hash是否与hash table里的一致 - 校验每个elf segment的hash是否与hash table里的一致 - 按elf header的设置跳转执行
summary
分拆REE/TEE的boot chain,更安全
把metadata从leaf certificate里面挪出来,省事
mbn
Exploring Qualcomm’s Secure Execution Environment
Qualcomm平台下基于QSEE的指纹识别方案移植之四TA移植
.mbn: 整个elf大文件
.flist: 把.mbn拆分成.mdt, .b00, .b01, …, .b06的文件信息列表
.mdt: 包含 { elf header, program header, hash segment }
.b00: 包含 { elf header, program header }
.b01: 包含 { hash segment }
.b02, …, .b06: 后面的segments