当前位置: 首页 > news >正文

【UEFI】关于Secure Boot

提示:

文章目录

  • 前言
  • 一、Secure Boot的定义和作用
    • 1.定义
    • 2.作用
  • 二、关于加密
  • 二、Secure Boot的主要变量
    • 1.PK -- Platform Key
    • 2.KEK -- Key Exchange Key
    • 3.db -- Database
    • 4.dbx -- Database Excluded
  • 三、Secure Boot Mode
  • 四、Secure Boot的主要流程
  • 参考
  • 总结


前言

提示:
个人学习总结,仅供参考。


一、Secure Boot的定义和作用

1.定义

早前的UEFI 2.3.1 – Chapter 27.5中描述:Make sure the data is secured before BIOS hand-off,即为:确保在BIOS阶段时load的image是安全的
关于这里的image定义:
1.设备的UEFI驱动;
2.OS的loader如:Linux 、Windows…等等;
3.可以正常BOOT的image,比较常用到的是shell.efi

安全启动是一种计算机系统的安全功能,旨在确保系统启动过程中只能加载经过数字签名的受信任的OS和启动加载程序。通过使用Secure Boot,系统可以防止恶意软件在启动过程中植入并运行,提高系统的安全性。

2.作用

防止恶意软件侵入。
它的做法是采用密钥(Key)。UEFI规定,主板出厂的时候,可以内置一些可靠的公钥(public key)。然后,任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。也就是说,这些软件必须用对应的私钥签署过,否则主板拒绝加载。由于恶意软件不可能通过认证,因此就没有办法感染Boot。

在安全启动中,证书颁发机构 (Ca :Certificate authority) 包括 OEM (或其委托) 和 Microsoft。Ca 生成构成信任根的密钥对,然后使用私钥对合法操作(如允许的早期启动 EFI 模块和固件服务请求)进行签名。对应的公钥将嵌入到启用了安全启动的 UEFI 固件中,并用于验证这些操作。

二、关于加密

SHA: 安全散列算法。一种非对称加密算法,用于生成证书数据的摘要。
RSA: 一种公钥加密系统。一种哈希算法,是不可逆函数,用于对摘要进行加密,从而生成签名。

公钥加密:公钥加密使用一对数学相关的加密密钥,称为公钥和私钥。如果只知道其中一个密钥,无法计算另一密钥。如果使用一个密钥对信息进行加密,则只有对应的密钥才能对该信息进行解密。
对于安全启动,私钥用于对代码进行数字签名,公钥用于验证该代码的签名以证明其真实性。如果私钥被泄露,则具有相应公钥的系统不再安全。这可能会导致启动工具包攻击,并会损害负责确保私钥安全性的实体的信誉。

密钥对:公钥分发,私钥自留。常见的公钥格式:cer/crt/pub,常见的私钥格式:pfx/key。
RSA 2048 加密:一种非对称加密算法,以原始形式存储RSA-2048模块所需的空间为2048位。
自签名证书:由与证书的公钥匹配的私钥签名的证书。根证书颁发机构 (CA) 证书属于此类别。
数字证书的主要用途是验证签名数据(如二进制等)的来源。证书的常见用途是使用传输层安全性 (TLS) 或安全套接层 (SSL:Secure socket layer) 的 internet 消息安全。通过使用证书验证已签名的数据,接收方可以知道数据的来源,以及是否在传输过程中对其进行了更改。通常,数字证书包含一个可分辨名称 (DN) 、一个公钥和一个签名。DN 标识一个实体(例如,公司),其中包含与证书的公钥匹配的私钥。使用私钥对证书进行签名,并在证书中放置签名会将私钥与公钥进行联系。证书可以包含某些其他类型的数据。例如,一个X.509证书包括该证书的格式、该证书的序列号、用于对该证书进行签名的算法、颁发该证书的 CA 的名称、请求该证书的实体的名称和公钥以及CA的签名。

二、Secure Boot的主要变量

主要的变量variables包括以下四个:
PK,KEK,db,dbx

需要知道其中的key的作用:
1.Private Key私钥,签名 2.Public Key公钥,验证

1.PK – Platform Key

PK在平台所有者和平台固件之间建立信任关系。
平台所有者将其中公钥(PKpub)注入到平台固件中。平台所有者稍后可以使用PK的私钥(PKpriv)更改平台所有权或注入KEK。
平台只能有唯一一个PK变量。 因为一个硬件平台只能被一个拥有者所拥有。
Microsoft 建议平台密钥的类型为X.509:EFI_CERT_X509_GUID,签名算法为SHA256-RSA,其中包含长度为2048位的公钥、身份信息、签名信息和有效性信息。

与拥有者相关的公钥被存储在FLASH(某些平台里是NVRAM)里面的 PK 变量里面,同时,拥有者的私钥可以来对 PK,KEK,db,dbx 进行签名和管理。

2.KEK – Key Exchange Key

KEK在操作系统和平台固件之间建立信任关系。 每个操作系统(以及可能需要与平台固件通信的每个第三方应用程序)都将KEK公钥(KEKpub)注册到平台固件中。
可以存在多个。KEK 的私钥可以来对db和dbx进行签名和管理。

3.db – Database

白名单数据库,允许bootloaders的公钥集合。
可以存在多个。是用于对被许可的EFI文件予以加载的数据签名库 。(在UEFI平台里面,操作系统加载文件就是一个EFI文件)

4.dbx – Database Excluded

黑名单数据库 (不允许bootloaders的公钥集合)。
只要谁的 EFI 签名在这,谁就被屏蔽掉。
可以存在多个。


清除平台密钥平台所有者通过调用 SetVariable (大小为0的变量,并重置平台)来清除平台密钥(PKpub) 。如果平台处于设置模式,则无需对空变量进行身份验证。如果平台处于用户模式,则必须用当前 PKpriv 对空变量进行签名; 强烈建议不要将生产 PKpriv 用于对包进行签名以重置平台,因为这样可以通过编程方式禁用安全启动。这主要是一种预生产测试方案。还可以使用安全的平台特定方法(Delete PK)清除平密钥。在这种情况下,全局变量安装模式也必须更新为1(Setup mode)。

三、Secure Boot Mode

secure boot mode安全启动模式包括以下四个:
Setup,User,Employ,Audit

四、Secure Boot的主要流程


参考

  1. UEFI 2.10 Spec:
    https://uefi.org/specs/UEFI/2.10/32_Secure_Boot_and_Driver_Signing.html#device-authentication
  2. UEFI之 Secure boot
  3. 1

总结

网上的资料比较少,有待补全。

相关文章:

  • 2.3.5 覆盖率数据的合并
  • 【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页
  • 计算机二级:基础操作题
  • 大模型在支气管哮喘手术全流程风险预测与治疗方案制定中的应用研究
  • 【HTML 基础教程】HTML 编辑器
  • 【Java 优选算法】链表
  • C++:异常的深度解析
  • STM32学习笔记之常见外设汇总
  • 【QA】外观模式在Qt中有哪些应用?
  • 【C++】Chapter02 内存管理
  • 群体智能优化算法-多版本优化器(Multi-Verse Optimizer, MVO,含Matlab源代码)
  • (Arxiv-2025)MagicDistillation:用于大规模人像少步合成的弱到强视频蒸馏
  • notify_one() 会阻塞吗?
  • 5分钟快速上手Docker容器化部署:从零到实践
  • 紧凑交叉引用表
  • 使用XiaoESP32S3在Arduino环境中实现颜色识别
  • 安铂克科技APLC系列射频模拟信号发生器
  • 常见框架漏洞之一:Thinkphp5x
  • Qt开发:QVariant的使用
  • 精选前端面试题(持续更新中ing)
  • 美国多地爆发集会抗议特朗普政府多项政策
  • 赵厚均评《唐诗与唐代园林景观的审美建构研究》|林泉恣探历,风景暂徘徊
  • 苹果手机为何无法在美制造?全球供应链难迁移
  • 2025年第一批“闯中人”已经准备好了
  • 大学2025丨对话深大人工智能学院负责人李坚强:产学研生态比“造天才”更重要
  • 4月人民币对美元即期汇率微跌,今年以来升值0.48%