3. 密码学基础

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 验证固件合法性的核心机制。它结合了哈希算法和非对称加密,确保固件的完整性和来源真实性。

签名生成流程:

  1. 对固件镜像计算哈希值(如 SHA-256)。
  2. 使用签名者的私钥对哈希值进行 RSA 加密,生成数字签名。
  3. 将签名附加到固件镜像中,或存储在单独的签名文件中。

签名验证流程:

  1. 从固件镜像中提取数字签名。
  2. 使用对应的公钥对签名进行 RSA 解密,得到原始哈希值。
  3. 对当前固件镜像重新计算哈希值。
  4. 比较两个哈希值:若一致,则验证通过;否则拒绝加载。
安全警告:私钥泄露意味着攻击者可以签署恶意固件。私钥必须存储在硬件安全模块(HSM)或经过严格访问控制的加密存储中。切勿将私钥明文存储在开发机或代码仓库中。
数字签名生成与验证流程 数字签名生成与验证流程 固件镜像 SHA-256 哈希计算 私钥 RSA 加密 数字签名 待验证固件 + 签名 SHA-256 哈希计算 公钥 RSA 解密 原始哈希值 比较哈希值 一致 → 验证通过

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 策略的基础。
UEFI Secure Boot PKI 信任链 UEFI Secure Boot PKI 信任链 平台密钥 (PK) 信任根 密钥交换密钥 (KEK) 授权 db/dbx 更新 签名数据库 (db) 允许的签名/哈希 禁止签名数据库 (dbx) 撤销的签名/哈希 固件启动时:db 验证通过 → 允许加载;dbx 匹配 → 拒绝加载

3.5 密码学在 UEFI Secure Boot 中的综合应用

Secure Boot 的启动验证流程将上述密码学组件串联为一个完整的信任链:

  1. 固件签名:开发者在构建固件时,使用私钥对镜像进行数字签名。
  2. 公钥注册:将对应的公钥以 X.509 证书形式注册到平台的 db 中。
  3. 启动验证:UEFI 固件在加载每个镜像前,从 db 中提取公钥,验证镜像的数字签名。
  4. 撤销机制:当密钥泄露或发现漏洞时,将相关公钥或镜像哈希加入 dbx,阻止其加载。
开发工具提示:使用 OpenSSL 命令行工具可以完成密钥生成、证书签发和签名操作。例如:
openssl req -new -x509 -newkey rsa:2048 -keyout KEK.key -out KEK.crt -days 3650