4. Secure Boot密钥体系

Secure Boot 的安全强度并不取决于“是否开启校验”,而取决于密钥体系是否分层清晰、职责隔离、存储可信。量产阶段一旦密钥设计混乱,例如用同一把密钥既签 BL2 又签应用、私钥放在构建服务器明文目录、根密钥无法轮换,后续所有安全启动链都会变成“形式校验”。本节从密钥类型、层级关系、生成流程与安全存储四个角度,建立可落地的密钥体系认知。

一、核心原理:四类密钥与两条信任路径

Secure Boot 中常见的密钥可按“用途”和“数学性质”两个维度划分。按用途可分为根密钥(Root Key / PK)、签名密钥(Signing Key)、加密密钥(Encryption Key)和会话密钥(Session Key);按数学性质则分为非对称密钥与对称密钥。理解它们的关键,是看清两条信任路径:

  • 非对称路径(验签路径):根公钥固化在芯片 OTP/eFuse 或 ROM 中,逐级验证下一级公钥或镜像签名,形成信任链。私钥永不进入设备,只在离线签名环境使用。
  • 对称路径(解密/完整性路径):用于镜像加密、BLOB 解密或运行时安全通信,密钥通常由根密钥派生,或由非对称密钥协商产生,必须防止明文落盘。

根密钥是整个体系的信任锚点,它不一定直接签名镜像,而是用于签名“二级密钥证书”或“密钥清单”。签名密钥承担日常镜像签名,可按镜像类型、产品线、生命周期阶段拆分。对称密钥则更多出现在加密固件、安全存储和调试解锁场景中。

核心原则:根密钥离线、签名密钥分级、对称密钥派生、所有私钥不落设备、所有公钥可追溯。

二、密钥层级:从信任根到镜像的四层结构

典型的量产密钥层级可抽象为四层:L0 信任根(PK/ROTPK)、L1 密钥签名密钥(KAK/KEK)、L2 镜像签名密钥(ISK)、L3 内容加密密钥(CEK/DEK)。层级越靠上,生命周期越长、使用频率越低、保护等级越高。下图给出该层级关系与验证方向:

Secure Boot 密钥层级与信任链 L0 信任根 PK / ROTPK 公钥哈希固化于 OTP/eFuse,私钥离线保管 L1 密钥签名密钥 KAK / KEK 由根密钥签名,用于授权下级签名密钥 L2 镜像签名密钥 ISK 按 BL2 / BL31 / OS 分域,支持轮换 L3 内容加密密钥 CEK / DEK 对称密钥,用于镜像加密与安全存储 验签方向:逐级向下 派生/授权方向:向上追溯 非对称密钥 RSA / ECDSA / EdDSA 私钥签名,公钥验签 用于 L0 / L1 / L2 对称密钥 AES-128/256、SM4 加解密快,需安全分发 用于 L3 与运行时 安全存储要求 私钥:HSM / 离线介质 对称密钥:TEE / OTP 禁止明文入库与日志 BL2 / BL31 / U-Boot / Kernel / RootFS

图中左侧虚线表示验签方向:设备上电后,ROM 用固化公钥验证 L1 证书,再用 L1 公钥验证 L2 签名密钥,最终用 L2 公钥验证镜像。右侧虚线表示派生与授权方向:下级密钥的合法性必须能向上追溯到根。L3 对称密钥通常不参与签名链,而是由 L2 或设备唯一密钥派生,用于解密镜像或保护安全存储区。

三、密钥生成与量产流程

密钥生成必须在受控环境中完成,推荐使用 HSM 或离线签名机。以下是一个可复用的量产密钥生成流程:

  1. 生成根密钥对:在 HSM 内生成 RSA-3072 或 ECDSA P-256 密钥对,私钥永不导出,仅导出公钥哈希用于烧录。
  2. 生成 KAK/KEK:由根私钥签名生成证书,绑定用途、有效期和产品线。
  3. 生成 ISK:按镜像类型拆分,例如 BL2 一把、BL31 一把、OS 一把,避免单点泄露影响全链。
  4. 派生对称密钥:使用 HKDF 从设备唯一密钥或根密钥派生 CEK,按镜像版本和用途加盐。
  5. 烧录与锁定:将根公钥哈希写入 OTP/eFuse,关闭调试口,锁定安全启动使能位。
# 示例:使用 OpenSSL 生成 ECDSA P-256 签名密钥(仅演示,量产应在 HSM 内完成)
openssl ecparam -name prime256v1 -genkey -noout -out isk_bl2.pem
openssl ec -in isk_bl2.pem -pubout -out isk_bl2_pub.pem

# 生成密钥证书请求,由根密钥签名
openssl req -new -key isk_bl2.pem -subj "/CN=ISK-BL2/O=ProductA" -out isk_bl2.csr
openssl x509 -req -in isk_bl2.csr -CA root_ca.pem -CAkey root_ca_key.pem \
  -CAcreateserial -days 3650 -sha256 -out isk_bl2_cert.pem

# 查看公钥哈希,用于烧录 OTP
openssl dgst -sha256 -binary isk_bl2_pub.pem | openssl base64
量产建议:根密钥至少准备“当前使用”和“备份轮换”两套,备份密钥离线封存;签名密钥按季度或按版本轮换,轮换时通过 KEK 重新签发证书,无需更换根。

四、安全存储:私钥、对称密钥与设备唯一密钥

密钥存储是量产中最容易出问题的环节。常见做法对比如下:

密钥类型 推荐存储位置 是否可导出 典型风险
根私钥 PK HSM / 离线保险柜 否 明文存放导致信任根泄露
KAK/KEK 私钥 HSM 或签名服务器加密分区 否 权限过大、多人可调用
ISK 私钥 签名机加密密钥库 受控导出 误提交到代码仓库
对称密钥 CEK TEE / OTP / 安全元件 否 日志打印、内存转储
设备唯一密钥 芯片 OTP / PUF 否 产线重复烧录同一密钥

设备唯一密钥(Device Unique Key)是量产差异化的关键。每台设备在产线注入不同密钥,可防止“一钥破全量”。若芯片支持 PUF,可由物理指纹派生密钥,无需存储明文。对称密钥在运行时使用后应立即从普通内存清除,避免被 dump。

五、常见误区与复盘

  • 误区一:根密钥直接签镜像。 根密钥使用频率越高,暴露面越大。应通过 KAK/ISK 分层隔离。
  • 误区二:所有镜像共用一把 ISK。 一旦某镜像签名流程被攻破,攻击者可伪造任意镜像。应按镜像域拆分。
  • 误区三:对称密钥硬编码在代码中。 反编译即可获取。应使用 TEE 或 OTP 保护,并通过 HKDF 派生。
  • 误区四:忽略密钥轮换与吊销。 量产设备应支持通过 KEK 更新 ISK 证书,并保留吊销列表或版本号。
  • 误区五:调试口未关闭。 即使密钥体系正确,未锁定 JTAG 也可能被读取 OTP 或注入代码。
复盘要点:密钥体系设计完成后,必须做一次“泄露演练”——假设某把 ISK 私钥泄露,评估影响范围、轮换路径和恢复时间。若无法在可接受时间内完成轮换,说明层级设计仍有缺陷。

综上,Secure Boot 密钥体系的核心是“根离线、签分级、对称派生、存储隔离”。根密钥决定信任起点,签名密钥决定日常可运维性,对称密钥决定数据保密性,而安全存储决定这些密钥是否真的安全。量产前应把密钥生成、烧录、轮换、吊销和审计形成闭环,才能让安全启动链真正可信。