核心结论编译时只传入了 3 把顶层私钥剩下的所有子层级私钥都会由 cert_create 证书生成工具自动随机生成这是 TF-A 可信启动的标准设计无需用户手动提供。信任链的安全性锚定在根密钥ROT上下级密钥自动生成既简化了配置又能做到每个固件版本对应独立子密钥安全性反而更高。一、完整密钥层级与证书链对应结合你日志里的证书 ID完整的信任链层级如下标注了哪些是你手动指定、哪些是工具自动生成层级0根私钥 ROT_KEY你手动指定my_keys/rot_private.pem ↓ 签发 层级1可信密钥证书ID7 ├─ 包含可信公钥对应你指定的 TRUSTED_KEY 的公钥 └─ 包含非可信公钥对应你指定的 NON_TRUSTED_KEY 的公钥 ┌─ 层级2可信私钥 TRUSTED_KEY你手动指定my_keys/trusted_private.pem │ ↓ 签发 │ ├─ 层级2证书1SoC固件密钥证书ID9 │ │ └─ 包含SoC内容证书公钥 → 对应私钥【工具自动生成】 │ │ ↓ 签发 │ │ └─ 层级3SoC固件内容证书ID13→ 存放 BL31 哈希 │ │ │ └─ 层级2证书2可信OS密钥证书ID10 │ └─ 包含TOS内容证书公钥 → 对应私钥【工具自动生成】 │ ↓ 签发 │ └─ 层级3可信OS内容证书ID14→ 存放 BL32 哈希 │ └─ 层级2非可信私钥 NON_TRUSTED_KEY你手动指定my_keys/nontrusted_private.pem ↓ 签发 └─ 层级2证书3非可信固件密钥证书ID11 └─ 包含NT内容证书公钥 → 对应私钥【工具自动生成】 ↓ 签发 └─ 层级3非可信固件内容证书ID15→ 存放 BL33 哈希和你参数的对应关系传入的参数对应层级作用ROT_KEY层级0 根密钥签发顶层可信密钥证书是整个信任链的信任锚点公钥会固化到 BL1 中TRUSTED_KEY层级2 可信世界私钥签发安全世界的两类子密钥证书SoC、TOSNON_TRUSTED_KEY层级2 非可信世界私钥签发正常世界的非可信固件密钥证书自动生成的 3 把子密钥工具会自动生成 3 对 RSA 子密钥对分别用于签发最底层的内容证书SoC 固件内容证书私钥 → 签发 BL31 对应的内容证书ID13可信OS固件内容证书私钥 → 签发 BL32 对应的内容证书ID14非可信固件内容证书私钥 → 签发 BL33 对应的内容证书ID15二、自动生成密钥的机制说明1. 生成规则算法与长度和根密钥保持一致默认 RSA 2048 位可通过 KEY_SIZE4096 参数修改长度。随机性每次重新生成证书时都会重新生成全新的随机子密钥不同版本固件的子密钥完全独立。默认不保存自动生成的私钥默认只在内存中使用签发完内容证书后直接丢弃不会落盘保存进一步降低密钥泄露风险。2. 如何保存自动生成的密钥调试用如果需要把所有子密钥都保存到本地文件比如调试验签流程、后续重新签发只需要在编译参数中加 SAVE_KEYS1make ... SAVE_KEYS1 all fip生成的私钥会保存在构建目录下文件名对应为soc_fw_key.pemtos_fw_key.pemnt_fw_key.pem三、为什么不需要手动指定所有密钥这是可信启动的标准设计原则信任锚点上移下级密钥分散。安全性不降级整个信任链的合法性只依赖根密钥所有下级公钥都有上级私钥签名背书即使子密钥自动生成也完全在信任链内。降低泄露风险子密钥仅用于签发单版本固件的内容证书用完即弃即使泄露也只影响单个版本不会危及根密钥和其他版本。简化配置用户只需要管理好 3 把核心密钥即可不需要维护十几把不同层级的密钥大幅降低运维成本。如果有特殊需求需要完全自定义所有层级密钥也可以通过对应参数手动传入例如SOC_FW_KEYxxx.pem指定 SoC 内容证书的签发私钥TOS_FW_KEYxxx.pem指定可信OS内容证书的签发私钥NT_FW_KEYxxx.pem指定非可信内容证书的签发私钥但绝大多数场景下使用工具自动生成的子密钥是最优选择。