3. 密码学基础
安全Boot不是单一算法,而是一条由多种密码学原语串联起来的信任链。理解每种原语在启动流程中的位置与职责,是设计、实现和排障安全Boot的基础。本节从“数据完整性—机密性—身份真实性—信任锚”四个维度,梳理哈希、对称加密、非对称加密、数字签名、证书与密钥管理在安全Boot中的具体作用。
一、核心原理:五类原语的分工
安全Boot的核心目标是:在每一级启动阶段,验证下一级镜像的完整性与来源真实性,只有验证通过才允许执行。不同密码学原语承担不同职责:
- 哈希(Hash):把任意长度镜像压缩为固定长度摘要,用于检测数据是否被篡改。安全Boot中常用 SHA-256、SHA-384、SM3。哈希本身不提供身份认证,必须与签名或可信摘要配合。
- 对称加密(Symmetric Encryption):使用同一密钥加解密,速度快,适合加密大容量镜像或密钥封装。安全Boot中常见 AES-128/256-CBC、AES-GCM、SM4。它解决机密性,不解决“谁签的”。
- 非对称加密(Asymmetric Encryption):公钥公开、私钥保密,用于密钥交换或加密小数据。安全Boot中更多使用其签名能力,而非直接加密镜像。
- 数字签名(Digital Signature):私钥签名、公钥验签,同时保证完整性与来源真实性。安全Boot中常用 RSA-2048/3072、ECDSA P-256、Ed25519、SM2。
- 证书与密钥管理:证书把公钥与身份绑定,密钥管理决定密钥如何生成、存储、轮换、吊销和销毁。它们是信任链的“锚点”和“生命周期保障”。
关键结论:哈希负责“有没有被改”,签名负责“是不是可信方签的”,证书负责“公钥属于谁”,密钥管理负责“整条链是否长期可信”。四者缺一不可。
二、方法流程:从镜像到启动的验签链路
以典型的多级安全Boot为例,验签流程如下:
- 镜像发布方对镜像计算哈希,得到摘要 H。
- 用私钥对 H 签名,生成签名 S,与镜像、证书链一起打包。
- 设备 BootROM 内置信任根公钥或信任根证书,作为唯一不可变信任锚。
- BootROM 用信任根公钥验证下一级引导程序的证书链,确认其公钥可信。
- 用该公钥验证引导程序镜像的签名 S,并重新计算哈希比对。
- 验证通过后,引导程序加载并验证操作系统镜像,逐级向下传递信任。
若镜像需要保密,可在签名之外再叠加对称加密:先用 AES 密钥加密镜像,再用非对称算法保护 AES 密钥。此时“先验签、后解密”或“先解密、后验签”的顺序必须严格定义,否则会引入解析漏洞。
三、案例/场景:一条典型的安全Boot验签命令
在嵌入式 Linux 项目中,常用 U-Boot 的 bootm 配合 FIT 镜像完成验签。FIT 镜像把内核、设备树、根文件系统打包,并在 signature 节点中声明签名算法与密钥。以下是一个简化的 FIT 配置片段:
images {
kernel {
data = /incbin/("Image");
type = "kernel";
arch = "arm64";
os = "linux";
compression = "none";
hash {
algo = "sha256";
};
};
};
signatures {
key {
algo = "sha256,rsa2048";
key-name-hint = "boot-key";
sign-images = "kernel", "fdt", "ramdisk";
};
};
设备端启动时,U-Boot 会读取 FIT 中的签名节点,使用内置公钥验证签名,并重新计算内核哈希。若哈希不匹配或签名无效,启动立即中止。这个过程中,哈希保证内核未被篡改,RSA 签名保证镜像来自持有私钥的发布方,证书或公钥哈希保证公钥本身可信。
四、误区与复盘
常见误区一:只做哈希不做签名。哈希只能检测意外损坏,攻击者可以同时替换镜像和哈希值。没有签名的哈希校验不构成安全Boot。
常见误区二:把对称加密当作身份认证。AES 加密能保护机密性,但任何持有密钥的一方都能加密,无法证明镜像来源。身份真实性必须依赖数字签名。
常见误区三:忽略密钥生命周期。私钥泄露后,即使算法再强,整条信任链也会崩塌。必须设计密钥轮换、吊销和防回滚机制。
常见误区四:验签顺序错误。先解析未验证的镜像头再验签,可能触发解析漏洞。正确做法是先验证签名,再解析内容。
| 密码学原语 | 安全Boot中的作用 | 典型算法 | 失败后果 |
|---|---|---|---|
| 哈希 | 检测镜像完整性,生成摘要供签名 | SHA-256、SHA-384、SM3 | 无法发现篡改 |
| 对称加密 | 保护镜像机密性,封装密钥 | AES-GCM、SM4 | 镜像泄露,但不影响来源认证 |
| 非对称加密 | 密钥交换、保护对称密钥 | RSA-OAEP、ECDH、SM2 | 密钥泄露风险 |
| 数字签名 | 验证镜像来源真实性与完整性 | RSA-2048、ECDSA P-256、Ed25519、SM2 | 可执行未授权镜像 |
| 证书 | 绑定公钥与身份,构建信任链 | X.509、CBOR 证书 | 公钥来源不可信 |
| 密钥管理 | 保障密钥全生命周期安全 | HSM、OTP、安全存储、KDF | 信任根失效,整链崩塌 |
复盘时可以用一句话检查安全Boot设计:信任根是否不可变、每一级是否验签、哈希与签名是否配对、密钥是否可轮换、失败是否安全停止。只有这五点同时成立,密码学原语才真正转化为可落地的启动安全能力。