PK, KEK, DB安全密钥概念
这三个名词是 UEFI Secure Boot(安全启动)体系中的核心概念。它们共同组成了一条基于非对称加密(公钥/私钥)的严密信任链(Chain of Trust)。
在传统的嵌入式开发中(比如直接使用 U-Boot 引导 Kernel),只要镜像没损坏就能跑。但在 UEFI 安全体系下,主板固件会“认人”,只有携带有效“数字签名”的引导程序和操作系统才被允许执行。
1. PK (Platform Key - 平台密钥)
- 角色: 信任链的绝对根节点。
- 作用: PK 是控制整台设备底层固件最高权限的钥匙。它的主要作用只有一个:控制谁有资格修改 KEK。
- 特性: 一台设备同一时间只能有一个合法的 PK。通常在设备出厂前,由硬件制造商(OEM)将 PK 的公钥烧录进主板固件中,私钥由制造商自己妥善锁在保险柜里。
- 进入“Setup Mode”(配置模式): 如果清除了固件里的 PK,系统就会进入一种不安全的配置模式,此时任何人都可以写入新的 PK,这也是设备初始化录入密钥的时机。
2. KEK (Key Exchange Key - 密钥交换密钥)
- 角色: 中层管理权限。
- 作用: KEK 的作用是控制谁有资格修改底层的 DB(白名单)和 DBX(黑名单)。
- 特性: 系统里可以存在多个 KEK。只有使用 PK 的私钥进行签名,才能向系统中添加或删除 KEK。在传统的 X86 PC 上,这里面通常会预置微软的 KEK 和主板厂商自己的 KEK。
3. DB (Signature Database - 签名数据库)
- 角色: 具体的执行白名单。
- 作用: 固件在引导操作系统时(比如加载 GRUB、Windows Boot Manager 或者 Linux Kernel),会去读取这个 DB 数据库。如果要执行的
.efi文件(引导程序)的签名或者 Hash 值在这个数据库里,固件才会放行并执行它。 - 特性: 只有拥有 KEK 私钥的人,才能更新这个 DB 数据库。
补充概念:DBX (Revoked Signature Database - 撤销签名数据库) 与 DB 对应,DBX 是“黑名单”。如果发现某个之前被信任的引导程序存在安全漏洞(比如经典的 GRUB 漏洞),拥有 KEK 权限的人可以把这个引导程序的 Hash 加入 DBX。即使它在 DB 里,系统也会拒绝引导它。
工作流程
当机器上电启动时,校验的流程是从下往上的:
- UEFI 固件准备加载操作系统的引导程序。
- 固件检查该程序的签名是否在 DB(白名单) 中。
- 要修改 DB,必须持有对应的 KEK 私钥 授权。
- 要修改 KEK,必须持有最高级别的 PK 私钥 授权。
这样一来,这台设备就只认该客户签发的系统。任何其他人试图插一个 U 盘去引导破解系统,或者试图刷入未经客户私钥签名的非官方 Linux 内核,都会在开机极早期的阶段被 UEFI 固件直接拦截并拒绝启动,从而在物理层面保障了计算节点和数据的绝对安全。
留下评论