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

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击,目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准,可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI 启动的 shim(垫片)进行测试审查后,获得微软 UEFI 签名。UEFI签名认证能够解决固件在启动时加载不了,无法正常工作等问题。

什么是BIOS、EFI和UEFI

BIOS是固化在电脑主板上一个程序,主要用于开机系统自检和引导加载操作系统。而现在的新型电脑用的基本都是UEFI启动,从EFI启动过渡而来,基本功能上都和BIOS差不多,都是完成系统自检、完成硬件初始化、加载操作系统。

EFI,是Extensible Firmware Interface的词头缩写,直译过来就是可扩展固件接口,它是用模块化、高级语言(主要是C语言)构建的一个小型化系统,它和BIOS一样,主要在启动过程中完成硬件初始化,但它是直接利用加载EFI驱动的方式,识别系统硬件并完成硬件初始化,彻底摒弃读各种中断执行。当EFI发展到1.1的时候,英特尔决定把EFI公之于众,EFI在2.0后也遂改称为UEFI。

UEFI 即统一可扩展固件接口,UEFI 用于替代较旧的 BIOS 固件接口和可扩展固件接口 (EFI) 1.10 规范。目前的计算机硬件基本上都集成了 UEFI 的固件,并逐步形成和推广成统一可扩展接口,负责加电自检(POST)、联系操作系统以及提供连接操作系统与硬件的接口。

UEFI具有一个独特的功能——安全启动(secure boot),而EFI是没有安全启动的。安全启动是UEFI扩展协议定义的安全标准,旨在帮助确保设备仅使用原始设备制造商 (OEM) 信任的软件启动,通俗的解释是叫做固件验证,开启UEFI的安全启动后,主板会根据TPM芯片(或者CPU内置的TPM)记录的硬件签名对各硬件判断,只有符合认证的硬件驱动才会被加载。而Win8以后的Windows则是在操作系统加载的过程中对硬件驱动继续查签名,符合Windows记录的硬件才能被Windows加载。

如何进行UEFI签名认证

开发者需要通过“Windows合作伙伴中心硬件仪表板”对UEFI 固件二进制文件进行数字签名,使其能够安装在 Windows 设备上。“Windows合作伙伴中心硬件仪表板”注册以及UEFI 固件签名都需要使用扩展验证(EV)代码签名证书。

UEFI 签名是 Windows 硬件开发人员中心仪表板提供的一项服务,开发人员通过该服务提交面向 x86、x86-64 或 ARM 计算机的 UEFI 固件二进制文件,通过手动审查批准这些二进制文件后,即可在启用安全启动且允许微软第三方UEFI CA的电脑上安装。

沃通CA提供微软指定证书颁发机构DigiCert、Sectigo等品牌EV代码签名证书,支持为驱动程序、UEFI固件、LSA插件进行签名,支持用于Windows合作伙伴中心硬件仪表板门户帐号注册。

微软最新UEFI签名要求

以下为微软对UEFI 签名认证的最新要求(2021年1月发布):

(1)UEFI 提交需要 EV 代码签名证书和 Azure Active Directory (AAD) 帐户。

(2)只有将发布给客户的生产质量代码(例如,“发布到制造”代码,而不是测试或调试模块)(没有仅限内部的代码或工具)才有资格进行 UEFI 签名。对于内部使用的代码,应将自己的密钥添加到安全启动数据库 UEFI 变量,或在开发和测试期间关闭安全启动。

(3)Microsoft UEFI CA 仅对那些供公众使用的产品进行签名,并且是跨所有 UEFI 安全启动支持的设备实现互操作性所必需的产品。如果产品特定于特定 OEM 或组织,并且外部不可用,则应使用私钥对其进行签名,并将证书添加到安全启动数据库。

(4)提交用于 UEFI 签名的代码不得受 GPLv3 或任何旨在赋予某人要求授权密钥的权利以便能够在设备上安装修改后形式的代码的许可证的约束。受已签名的此类许可证约束的代码可能会吊销该签名。例如,GRUB 2 在 GPLv3 下获得许可,不会被签名。

(5)如果存在与使用某些技术的代码相关的已知恶意软件向量,则该代码将不会签名,并且可能会被吊销。例如,使用未启用安全启动的 GRUB 版本将不会进行签名。

(6)如果提交代码中存在已知的安全漏洞,则不会对提交进行签名,即使你的功能未公开该代码也是如此。例如,OpenSSL 的最新已知安全版本是 0.9.8za 和 1.0.1h,因此,如果提交包含包含已知漏洞的早期版本,则不会对提交进行签名。

(7)在提交签名之前,您必须按照提交预测试文档(对于 UEFI 提交)测试您的产品。

(8)微软不会签署使用 EFI_IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 的 EFI 提交。相反,建议过渡到EFI_IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER。这可以防止不必要地使用运行时 EFI 驱动程序。

(9)使用 EFI 字节码 (EBC):Microsoft 不会签署基于 EBC 的提交的 EFI 提交。

(10)如果你的提交是 DISK 加密或基于文件/卷的加密,则必须确保不加密 EFI 系统分区,或者如果加密,请确保对其进行解密,并在 Windows 准备好启动时使其可用。

(11)如果你的提交由许多不同的 EFI 模块、多个 DXE 驱动程序和多个启动应用程序组成,Microsoft 可能会要求你将 EFI 文件合并为最小格式。例如,每个体系结构可能只有一个启动应用程序,并将 DXE 驱动程序合并到一个二进制文件中。

(12)如果你的提交是 SHIM(将执行移交给另一个引导加载程序),那么您必须首先提交给 SHIM 审查委员会并获得批准,然后才能签署提交。该审查委员会将检查以确保以下内容:

代码签名密钥必须仅由具有受信任角色的人员备份、存储和恢复,并在物理安全环境中至少使用双因素授权。

私钥必须使用硬件加密模块进行保护。这包括但不限于 HSM、智能卡、类似智能卡的 USB 令牌和 TPM。

操作环境必须达到至少等于 FIPS 140-2 级别 2 的安全级别。

如果嵌入式证书是 EV 证书,则应满足上述所有要求。我们建议您使用 EV 证书,因为这将加快 UEFI CA 签名周转速度。

提交者必须为填充程序加载的所有内容设计和实现强大的吊销机制,无论是直接的还是随后的。

如果您丢失密钥或滥用密钥,或者密钥泄露,则任何依赖该密钥的提交都将被撤销。

已知某些填充程序会给安全启动系统带来弱点。为了更快地完成签名,建议使用 shim - GitHub 分支中的 0.8 或更高版本的源代码。

(13)如果提交包含 iPXE 功能,则需要执行其他安全步骤。此前,微软已经完成了对2Pint的iPXE分支的深入安全审查。

相关文章:

什么是UEFI签名认证?UEFI签名有什么好处?

为了防御恶意软件攻击,目前市面上所有电脑设备启动时默认开启安全启动(Secure Boot)模式。安全启动(Secure Boot)是UEFI扩展协议定义的安全标准,可以确保设备只使用OEM厂商信任的软件启动。UEFI签名认证就是对运行在 UEFI 系统下的 efi 驱动和通过 UEFI …...

案例14-课程推送页面逻辑整理--vue

目录一级目录二级目录三级目录一、背景介绍二、问题分析问题1:逻辑边界不清晰,封装意识缺乏问题问题2:展示效果上的问题三、解决过程问题一 代码结构混乱问题解决问题二 代码结构混乱问题解决问题三 展示效果上的细微问题四、总结一级目录 二…...

5大GPU厂商共建 | openKylin社区GPU SIG首次例会召开!

3月8日,openKylin社区GPU SIG首次例会以线上形式召开。此次会议由长沙景美集成电路设计有限公司、摩尔线程智能科技(北京)有限责任公司、格兰菲智能科技有限公司、象帝先计算技术(重庆)有限公司等GPU厂商的多位SIG Mai…...

SpringBoot读取配置文件

目录一、简介1、SpringBoot 中常用读取配置方法2、 ConfigurationProperties和Value的区别二、使用 ConfigurationProperties 读取配置三、使用 Value 读取配置一、简介 在日常开发使用 SpringBoot 框架时,经常有一些配置信息需要放置到配置文件中,我们…...

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信

51驱动NRF24L01通信,NRF24L01与TTL转NRF24L01模块通信NRF24L01一、简介二、引脚功能描述程序设计一、对 24L01 的程序编程的基本思路如下:二、Tx 与 Rx 的配置过程1、Tx 模式初始化过程:2、Rx 模式初始化过程:三、基本程序函数通信…...

C++友元

欢迎来观看温柔了岁月.c的博客 目前 设有C学习专栏 C语言项目专栏 数据结构与算法专栏 目前主要更新C学习专栏,C语言项目专栏不定时更新 待C专栏完毕,会陆续更新C项目专栏和数据结构与算法专栏 一周主要三更,星期三,星期五&#x…...

MySQL内置函数

文章目录日期函数字符串函数数学函数其他函数日期函数 获取年月日: mysql> select current_date(); ---------------- | current_date() | ---------------- | 2023-02-01 | ---------------- 1 row in set (0.00 sec)获得时分秒: mysql> se…...

mysql数据库之innodb存储引擎架构之内存架构

一、逻辑存储结构 mysql5.5版本开始,默认使用innodb存储引擎,它擅长事务处理,具有崩溃恢复特性,在日常开发中使用非常广泛。 架构图(左侧为内存架构,右侧为磁盘架构) 二、 内存架构。 1、缓冲…...

Vue:(三十五)路由vue-router

今天,我们开始学习vue中一个很关键的知识点,路由。理解vue的一个插件库,专门用来实现SPA应用单页web应用整个应用只有一个完整的页面点击页面中的导航连接不会刷新页面,只会做页面的局部更新数据需要通过ajax请求获取下来&#xf…...

Dynabook笔记本电脑无法开机怎么重装新系统?

Dynabook笔记本电脑无法开机怎么重装新系统?有用户使用Dynabook笔记本电脑出现了无法正常开机的情况。遇到这样的问题是我们的电脑系统出现了损坏,可以尝试进行系统修复。如果无法修复的话,就需要进行系统重装了。以下为大家带来Dynabook笔记…...

React Native基础知识点

1、组件 与react编写web应用不同&#xff0c;不是使用div、span等标签。而是使用RN官方提供的组件&#xff0c;如View、Text等组件来搭建页面 2、宽高 React Native 中的尺寸都是无单位的&#xff0c;表示的是与设备像素密度无关的逻辑像素点。默认值为auto <View style{{…...

nginx 平滑升级

背景介绍 因为一些原因&#xff0c;比如说 Nginx 发现漏洞、应用一些新的模块等等&#xff0c;想对 Nginx 的版本进行更新&#xff0c;最简单的做法就是停止当前的 Nginx 服务&#xff0c;然后开启新的 Nginx 服务。但是这样会导致在一段时间内&#xff0c;用户是无法访问服务…...

数据结构——链表OJ题目讲解(2)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年3月10日 内容&#xff1a;数据结构链表OJ题目讲解 来源&#xff1a;牛客网和力扣 目录 前言&#xff1a; 刷题&#xff1a; 1.反转链表&#xff1a; 1.改变指向的解法&#xff1a; 2.取头结点插入到新链表&#xff1a; …...

GitHub上线重量级分布式事务笔记,再也不怕面试官问分布式了

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说&#xff0c;就是一次大的操作由不同的小操作组成&#xff0c;这些小的操作分布在不同的服务器上&#xff0c;且属于不同的应用&#xff0c;分布式…...

C++语法规则1(C++面向对象 )

C面向对象 面向对象的三大特征是继承&#xff0c;多态和封装&#xff0c;C重面向对象重要的就是这些&#xff0c;我们下面通过一些简单的实例加以理解&#xff0c;从这小节开始&#xff0c;我们将开启新的编程旅途。与 C 语言编程的思想完全不同了&#xff0c;这就是 C!理解概…...

Web漏洞-CSRF漏洞

CSRF漏洞介绍&#xff1a;CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;中文名称&#xff1a;跨站请求伪造&#xff0c;是一种劫持用户在当前已登录的Web应用程序上执行非本意操作一种攻击.原理&#xff1a;攻击者利用目标用户的身份&#xff0c;执行某…...

Python3-面向对象

Python3 面向对象 Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果你以前没有接触过面向对象的编程语言&#xff0c;那你可能需要先了解一些面向对象…...

拐点!新能源车交付均价首次「低于」燃油车,智能电动成新爆点

2023年开局&#xff0c;随着特斯拉打响新能源汽车市场的「价格战」首炮&#xff0c;除部分燃油车品牌&#xff08;仍依赖自身多年的用户和品牌积累的溢价能力&#xff09;没有跟进之外&#xff0c;几乎所有的新能源车型都在进行车型价格的下调。 而数据也在反映市场的拐点即将来…...

JavaScript String 字符串对象实例合集

文章目录JavaScript String 字符串对象实例合集返回字符串的长度为字符串添加样式返回字符串中指定文本首次出现的位置 - indexOf()方法查找字符串中特定的字符&#xff0c;若找到&#xff0c;则返回该字符 - match() 方法替换字符串中的字符 - replace()JavaScript String 字符…...

实习生培养计划

部门最近入职了实习生&#xff0c;为了更好的帮助实习生完成由学生向职业人的转变&#xff0c;并尽快融入企业稳步成长&#xff0c;现提出实习生培养计划&#xff0c;具体方案如下&#xff1a; 1、方案目的 1、使实习生快速转换角色与心态&#xff0c;适应从校园到企业的坏境…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...