3、密码学基础:公钥基础设施(PKI)、数字签名原理、哈希算法(SHA-256/SHA-384)、非对称加密(RSA)
UEFI Secure Boot 的信任链核心建立在现代密码学之上。理解公钥基础设施(PKI)、数字签名、哈希算法和非对称加密是掌握 Secure Boot 开发的前提。本章将系统梳理这些基础概念,并聚焦其在 UEFI 固件中的具体应用。
3.1 哈希算法:数据的数字指纹
哈希算法(Hash Algorithm)将任意长度的输入数据映射为固定长度的输出值,称为哈希值或摘要。在 Secure Boot 中,哈希算法用于验证固件镜像的完整性:任何对镜像的微小修改都会导致哈希值完全改变。
| 算法 | 输出长度 | 安全强度 | UEFI 应用场景 |
|---|---|---|---|
| SHA-256 | 256 bits (32 bytes) | 高 | 镜像摘要、变量认证、EFI 签名列表 |
| SHA-384 | 384 bits (48 bytes) | 更高 | 高安全等级固件、未来兼容性 |
| SHA-1 | 160 bits (20 bytes) | 已弃用 | 仅用于兼容旧签名,不推荐新开发 |
开发要点:UEFI 规范要求 Secure Boot 至少支持 SHA-256。在生成签名时,务必使用 SHA-256 或 SHA-384,避免使用已不安全的 SHA-1。
哈希算法的单向性(从哈希值无法反推原始数据)和抗碰撞性(极难找到两个不同输入产生相同哈希值)是其安全性的根本保障。
3.2 非对称加密与 RSA 算法
非对称加密使用一对密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开分发,私钥必须严格保密。在 Secure Boot 中,RSA 是最广泛使用的非对称加密算法。
RSA 核心原理:
- 密钥生成:基于两个大素数的乘积,计算公钥指数 e 和私钥指数 d。
- 加密:使用公钥加密数据,只有对应的私钥能解密。
- 签名:使用私钥对数据哈希值进行加密,生成数字签名;公钥用于验证签名。
| 密钥长度 | 安全等级 | UEFI 签名支持 |
|---|---|---|
| RSA-2048 | 当前标准 | 所有 UEFI Secure Boot 实现 |
| RSA-3072 | 更高 | 部分新平台支持 |
| RSA-4096 | 最高 | 需要固件支持,兼容性需验证 |
实践建议:开发阶段使用 RSA-2048 即可满足 Secure Boot 要求。若需更高安全性,可选用 RSA-3072,但需确认目标平台的固件支持。
3.3 数字签名原理
数字签名是 Secure Boot 验证固件合法性的核心机制。它结合了哈希算法和非对称加密,确保固件的完整性和来源真实性。
签名生成流程:
- 对固件镜像计算哈希值(如 SHA-256)。
- 使用签名者的私钥对哈希值进行 RSA 加密,生成数字签名。
- 将签名附加到固件镜像中,或存储在单独的签名文件中。
签名验证流程:
- 从固件镜像中提取数字签名。
- 使用对应的公钥对签名进行 RSA 解密,得到原始哈希值。
- 对当前固件镜像重新计算哈希值。
- 比较两个哈希值:若一致,则验证通过;否则拒绝加载。
安全警告:私钥泄露意味着攻击者可以签署恶意固件。私钥必须存储在硬件安全模块(HSM)或经过严格访问控制的加密存储中。切勿将私钥明文存储在开发机或代码仓库中。
3.4 公钥基础设施(PKI)
PKI 是一套管理公钥和数字证书的体系,定义了密钥的生成、分发、存储、撤销和更新规则。在 UEFI Secure Boot 中,PKI 构建了从平台制造商到最终固件模块的信任链。
PKI 核心组件:
- 证书颁发机构(CA):签发和管理数字证书的信任根。
- 数字证书:将公钥与实体身份绑定的电子文档,包含颁发者、有效期、公钥等信息。
- 证书撤销列表(CRL):记录已被撤销的证书,防止使用已泄露的密钥。
- 注册机构(RA):辅助 CA 进行身份验证和证书申请处理。
UEFI Secure Boot 中的 PKI 层级:
| 层级 | 证书/密钥 | 作用 |
|---|---|---|
| 平台密钥 (PK) | PKpub / PKpriv | 平台所有权的根信任,控制 KEK 的更新 |
| 密钥交换密钥 (KEK) | KEKpub / KEKpriv | 授权签名数据库 (db/dbx) 的更新 |
| 签名数据库 (db) | 允许签名的公钥/哈希 | 存储受信任的签名者公钥或镜像哈希 |
| 禁止签名数据库 (dbx) | 禁止签名的公钥/哈希 | 存储已撤销的签名者公钥或镜像哈希 |
开发要点:在 UEFI 固件开发中,PK 通常由平台制造商在工厂烧录;KEK 由操作系统厂商管理;db 和 dbx 由系统管理员或 OTA 更新维护。理解这一层级关系是配置 Secure Boot 策略的基础。
3.5 密码学在 UEFI Secure Boot 中的综合应用
Secure Boot 的启动验证流程将上述密码学组件串联为一个完整的信任链:
- 固件签名:开发者在构建固件时,使用私钥对镜像进行数字签名。
- 公钥注册:将对应的公钥以 X.509 证书形式注册到平台的 db 中。
- 启动验证:UEFI 固件在加载每个镜像前,从 db 中提取公钥,验证镜像的数字签名。
- 撤销机制:当密钥泄露或发现漏洞时,将相关公钥或镜像哈希加入 dbx,阻止其加载。
开发工具提示:使用 OpenSSL 命令行工具可以完成密钥生成、证书签发和签名操作。例如:
openssl req -new -x509 -newkey rsa:2048 -keyout KEK.key -out KEK.crt -days 3650