3. 密钥与证书体系基础

在 TI Sitara 处理器的安全启动链路中,密码学原语并不是抽象概念,而是直接决定“哪一段固件可以被加载、由谁签名、如何被验证”的工程要素。理解非对称密钥、对称密钥、哈希、数字签名与 X.509 证书之间的关系,是读懂后续密钥烧写、证书链配置和镜像签名流程的前提。

一、对称密钥与非对称密钥的分工

对称密钥使用同一把密钥完成加密与解密,典型算法是 AES。它的优势是速度快、适合大数据量处理,因此在 Sitara 安全启动中主要承担两类任务:一是对固件镜像做加密,保护代码和数据的机密性;二是作为派生密钥的输入,参与密钥派生与完整性保护。对称密钥的弱点是分发困难——验证方必须事先持有同一把密钥,一旦泄露,机密性与完整性同时失效。

非对称密钥使用一对数学相关的密钥:私钥用于签名或解密,公钥用于验签或加密。Sitara 安全启动中常见的是 RSA 与 ECC。私钥只保留在签名服务器或 HSM 中,公钥则以证书或密钥哈希的形式固化到设备。这样,设备只需要信任公钥,就能验证由对应私钥签出的镜像,而无需在设备端保存任何签名私钥。非对称密钥解决了“信任如何从签名方传递到设备”的问题,但运算开销明显高于对称算法,因此通常只用于签名和验签,不用于大块数据加密。

二、哈希算法:把任意长度数据压缩成固定指纹

哈希算法把任意长度的输入映射为固定长度的摘要,例如 SHA-256 输出 256 bit(32 字节)。它有三个关键性质:单向性(无法从摘要反推原文)、抗碰撞性(难以找到两个不同输入产生同一摘要)、雪崩效应(输入微小变化导致摘要大幅改变)。在安全启动中,哈希用于生成镜像摘要,再由私钥对摘要签名;验证时设备重新计算摘要,并用公钥验证签名是否匹配。这样既避免了直接对整块镜像做非对称运算,又保证了镜像任何一字节被篡改都会导致摘要不匹配。

三、数字签名:把私钥、摘要与信任绑定

数字签名的典型流程是:签名方先对镜像计算哈希,得到摘要;再用私钥对摘要(或包含摘要的签名结构)执行签名运算,生成签名值;签名值与镜像、证书一起打包。验证方收到后,用公钥对签名值做验签运算,恢复出摘要,再对镜像重新计算哈希,两者一致则通过。Sitara 安全启动中的签名通常还包含镜像长度、加载地址、版本号等元数据,防止攻击者替换镜像或回滚版本。

Sitara 安全启动中的密钥、哈希与证书信任链 签名方(开发/发布环境) 固件镜像 MLO / U-Boot / Kernel / FS SHA-256 哈希 生成 32 字节摘要 私钥签名 RSA-2048 / ECDSA P-256 签名结构 签名值 + 元数据 + 证书 X.509 证书链 Root CA → 签名证书 烧写/加载 Sitara 设备(ROM Code / SPL 验证) 信任根 eFuse 中的公钥哈希 / 根证书 接收镜像与签名 从存储介质读取 证书链校验 逐级验签到信任根 公钥验签 恢复摘要并比对 重新计算哈希 对镜像本体做 SHA-256 摘要一致性判断 一致 → 放行;不一致 → 拒绝 验证结果 通过:跳转到下一级镜像,继续启动 失败:停止启动,进入恢复或错误状态 信任根固化于 eFuse,证书链与签名共同保证镜像来源可信、内容未被篡改

四、X.509 证书:把公钥和身份信息装进可验证的容器

X.509 证书是公钥基础设施中的标准格式,它把公钥、主体名称、有效期、用途扩展以及签发者信息打包,并由上级 CA 用私钥签名。Sitara 安全启动中,证书链通常包含根证书、中间证书和签名证书。设备端信任根可以是根证书本身,也可以是根证书公钥的哈希,固化在 eFuse 或 OTP 区域中。验证时,ROM Code 或 SPL 先校验证书链的签名,确认签名证书确实由可信 CA 签发,再用签名证书中的公钥验证镜像签名。这样,即使签名证书需要轮换,只要根信任不变,设备仍能安全地接受新证书。

五、在 Sitara 安全启动中的角色与配置要点

把上述原语串起来看,Sitara 安全启动的信任链是:eFuse 中的根公钥哈希 → 根证书 → 中间/签名证书 → 镜像签名 → 镜像哈希。每一级都依赖上一级的公钥或哈希来验证下一级。实际配置时,需要关注以下要点:

  • 密钥长度与算法选择:RSA-2048 或 RSA-4096 适合兼容性要求高的场景;ECDSA P-256 签名更短、验签更快,适合资源受限的 SPL 阶段。选择后需与 ROM Code 支持的算法列表匹配。
  • 哈希算法:SHA-256 是当前主流选择,SHA-1 已不推荐用于新设计。哈希算法必须在签名和验证两端一致,否则验签必然失败。
  • 证书扩展:签名证书应设置正确的 Key Usage(digitalSignature)和 Extended Key Usage,避免被其他用途证书误用。
  • eFuse 烧写:根公钥哈希或根证书哈希一旦烧入 eFuse 通常不可逆,烧写前必须确认密钥归属、备份和轮换策略。
  • 版本与回滚保护:签名元数据中应包含镜像版本号,配合 eFuse 中的单调计数器,防止攻击者刷入旧版本固件。
教学示例:假设使用 ECDSA P-256 + SHA-256 对 MLO 签名。签名方对 MLO 计算 SHA-256 得到 32 字节摘要,用私钥对摘要签名得到约 64 字节的签名值,再把签名值、签名证书和 MLO 一起打包。设备端 ROM Code 先用 eFuse 中的根公钥哈希验证证书链,取出签名证书公钥,对签名值验签恢复摘要,再对 MLO 重新计算 SHA-256,两者一致则继续启动。若中间任何一步失败,设备停止启动并进入错误处理流程。
常见误区:把“加密”和“签名”混为一谈。加密保护的是机密性,签名保护的是完整性和来源真实性。Sitara 安全启动中,签名是必须的,加密是可选的;只做加密不做签名,无法防止镜像被替换或篡改。