【UEFI】数字签名的使用

简介

1) 数字签名是指附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换能使数据单元的接收者确认数据单元的来源和数据完整性,并保护数据,防止被人伪造。签名机制的本质特征是该签名只通过签名者的私有信息才能产生,也就是说,一个签名者的签名只能唯一地由他自己产生。当收发双方发生争执时,第三方(仲裁机构)就能够根据消息上的数字签名来裁定这条消息确实由发送方发出,从而实现安全性服务。

2)普通纯软件实现的数字签名方案是完全在操作系统进程中进行的,包括密钥的生成,存储和应用。尽管这样的密钥系统在密钥存储中可能会采用分层加密的方式以提高用户密钥的私密性。

3)现有的可用于数字签名的安全方案如加密机,TPM等一般都采用物理隔离,即采用额外的硬件来使数字签名系统与操作系统分离。TPM作为信息计算平台的核心安全控制和运算部件,它的工作要先于操作系统和BIOS,不可能使用计算机的内存外存和处理器,因此必须内部实现一些公开的安全算法,以便与其它部件的接口标准化,提供内部一些安全操作中的密码运算。

4)除了TPM这类比较简单的单片机加载装置以外,也有像加密机这样比较复杂,可以被多台计算机共享的加密装置,如加密机。
加密机是一个基于安全的操作系统平台,具有高级通信保密性、完整性保护功能的控制系统。它是专用软、硬件设备,可具有多个网络接口,可安装于内联网各区域网出口处。它是专用软硬件设备,可具有多个网络接口,可安装于内联网各局域网出口处,或安装于内联网与公共网络接口处,或集成于网络防火墙中,提供网络边界之间的加密,认证功能。

使用场景

BIOS更新固件

1、BIOS生成固件,在BIOS的某一块区域存储验签证书。
2、更新固件时,先检验该区域中的证书是否一致,如果一致就能刷flash,不一致则弹出证书验证失败。保证其它平台的固件不能互刷。

typedef struct _KL_VERIFY_BIOS_PROTOCOL{VERIFY_BIOS_CHECK_BIOS_VERSION                  CheckBiosVersion;VERIFY_BIOS_CERT_SIGN_BY_PSS_PADDING            VerifyBiosCertSignByPssPadding;VERIFY_BIOS_CERT_SIGN_BY_PKCS1                  VerifyBiosCertSignByPkcs1;
} KL_VERIFY_BIOS_PROTOCOL;
RetValue = VerifyBiosProtocol->VerifyBiosCertSignByPssPadding ((CONST UINT8 *)BiosSubCert, BiosSubCertSize,BiosSignData, BiosSignDataSize,SignImageBuffer, (UINT32)FileSize,(CONST UINT8 *)BiosCaCert, BiosCaCertSize);if (!RetValue) {DEBUG((EFI_D_ERROR, "Verify Bios Cert Fail 1,Line:%d \n",__LINE__));PrintHelpMessage(PRINT_VERIFY_ERR_MESSAGE);gBS->Stall(3000000);Status = EFI_SECURITY_VIOLATION;//goto Done;}

安全启动功能

1、安全启动是电脑行业成员开发的一种安全标准,用于帮助确保设备仅使用受原始设备制造商 (OEM) 信任的软件进行启动。 当电脑启动时,固件会检查每个启动软件片段的签名,包括 UEFI 固件驱动程序(也称为选项 ROM)、EFI 应用程序和操作系统。 如果签名有效,则电脑将会启动,而固件会将控制权转递给操作系统。 每类操作系统,如麒麟,UOS都有自己的证书,当安全启动功能被打开后,有该证书的固件成功进入系统。

2、大多数情况下,操作系统都是存放在本地存储器上的,例如本地的硬盘。UEFI引导管理器首先验证操作系统加载器的签名,如果通过,就将权限移交。在获得控制权后,加载器将加载os,并在此过程中的某一时刻调用 ExitBootServices() 。该调用结束后,只有UEFI运行时服务仍然可用。

/**This code checks if the file content complies with EFI_VARIABLE_AUTHENTICATION_2 format
The function reads file content but won't open/close given FileHandle.@param[in] FileHandle            The FileHandle to be checked@retval    TRUE            The content is EFI_VARIABLE_AUTHENTICATION_2 format.@retval    FALSE          The content is NOT a EFI_VARIABLE_AUTHENTICATION_2 format.**/
BOOLEAN
IsAuthentication2Format (IN   EFI_FILE_HANDLE    FileHandle
)
{EFI_STATUS                     Status;EFI_VARIABLE_AUTHENTICATION_2  *Auth2;BOOLEAN                        IsAuth2Format;IsAuth2Format = FALSE;//// Read the whole file content//Status = ReadFileContent(FileHandle,(VOID **) &mImageBase,&mImageSize,0);if (EFI_ERROR (Status)) {goto ON_EXIT;}Auth2 = (EFI_VARIABLE_AUTHENTICATION_2 *)mImageBase;if (Auth2->AuthInfo.Hdr.wCertificateType != WIN_CERT_TYPE_EFI_GUID) {goto ON_EXIT;}if (CompareGuid(&gEfiCertPkcs7Guid, &Auth2->AuthInfo.CertType)) {IsAuth2Format = TRUE;}ON_EXIT://// Do not close File. simply check file content//if (mImageBase != NULL) {FreePool (mImageBase);mImageBase = NULL;}return IsAuth2Format;
}

TPM完整性存储

1、Tcg安全服务建立在一个完整的引导保护序列,刚开机时,首先是BIOS取得控制权,BIOS系统将建立一个基本的I/O系统并初始化一些硬件。

2、引导程序开始于一个被称为CRTM(信任根,CORE Root of Trust for Measurement),按顺序引导其它硬件,TPM正是用来存储这些记录值,这些信息被存储到平台 配置存储器(PCR)中。通过检查PCR中的值,就可以判断这些值是否对应着可信的程序。

3、当一个使用者通过因特网连接一个远程计算机时,如何才能确信其所得TPM的PCR值就是当前远程计算机的系统启动顺序列值呢?
1)系统中采用一个nonce询问机制后,就能获得当前PCR值的签名集。Nonce 是作为质询发给对方的一串毫无意义的字符串或者随机数。通过在签名的返回值中加入nonce,对方就能知道得到的签名是新的。

2)TPM有一对由TPM内部产生的唯一背书密钥,这些密钥为身份标识,其主要作用是:为其他不可迁移的密钥创建认证证书,对PCR进行签名,以证明PCR的值是正确且是当前的值。

TCG_DXE_DATA                 mTcgDxeData = {{sizeof (EFI_TCG2_BOOT_SERVICE_CAPABILITY),     // Size{ 1, 1 },                           // StructureVersion{ 1, 1 },                           // ProtocolVersionEFI_TCG2_BOOT_HASH_ALG_SHA1,        // HashAlgorithmBitmapEFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2,  // SupportedEventLogsTRUE,                               // TPMPresentFlagTCG2_DEFAULT_MAX_COMMAND_SIZE,      // MaxCommandSizeTCG2_DEFAULT_MAX_RESPONSE_SIZE,     // MaxResponseSize0,                                  // ManufacturerID0,  // NumberOfPCRBanks0,  // ActivePcrBanks},
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python查看官网是否发布新的内容

目录 前言 第一章、python介绍和使用pip install下载包 1.python介绍 2.使用vscode编写python 3.pip install的使用 第二章、查看官网是否发布新的内容 第三章、代码实现 目录结构 代码实现 check_new_news.py files.py news.py main.py file.txt 运行演示 前言 也…

python读写csv和json数据

python读写csv数据 在Python中,读写CSV(Comma Separated Values)数据通常使用内置的csv模块。以下是一个简单的例子,展示了如何使用csv模块来读取和写入CSV文件。 首先,假设我们有一个名为example.csv的文件&#xff0…

算法训练营day34(补), 动态规划2

//62. 不同路径 func uniquePaths(m int, n int) int { dp : make([][]int, m) // 行赋初始值为1 for i : range dp { dp[i] make([]int, n) dp[i][0] 1 } // 列赋初始值为1 for j : 0; j < n; j { dp[0][j] 1 } for i : 1; i < m; i { for j : 1; j < n; j { dp[…

【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog 前言 在以前的Databricks中&#xff0c;主要由Workspace和集群、SQL Warehouse组成&#xff0c; 这两年Databricks公…

我们在SqlSugar开发框架中,用到的一些设计模式

我们在《SqlSugar开发框架》中&#xff0c;有时候都会根据一些需要引入一些设计模式&#xff0c;主要的目的是为了解决问题提供便利和代码重用等目的。而不是为用而用&#xff0c;我们的目的是解决问题&#xff0c;并在一定的场景下以水到渠成的方式处理。不过引入任何的设计模…

【YOLOX-nano】YOLOX-nano的推理实践

目录 1 pt文件和pth文件的区别 2 安装依赖库 3 模型下载 4 实践 YOLOX-nano.pth模型转换为YOLOX-nano.onnx模型</

【selenium】WebElement、WebDriver、三种等待方式

目录 一、WebElement 1、click()——触发当前元素的点击事件 2、clear()——清空内容 3、sendKeys(...) 4、按键操作&#xff0c;回车 解决button不好定位和点击的情况&#xff0c;用回车去解决 5、getTagName()——获取元素的的标签名 6、getAttribute(当前标签具有的属…

SpringBoot对于SpringMVC的支持

创建项目 版本说明这里使用的 SpringBoot 2.0.0.Release SpringBoot对于SpringMVC的支持 在之前的开发中很多场景下使用的是基于xml配置文件或者是Java配置类的方式来进行SpringMVC的配置。一般来讲&#xff0c;初始的步骤如下所示 1、初始化SpringMVC的DispatcherServlet2、…

设计模式-工厂方法模式(C++)

工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它定义了一个用于创建对象的接口&#xff0c;但将实际的对象创建过程延迟到子类中。这种模式解耦了具体产品的创建过程&#xff0c;使得系统更加灵活和可扩展。 下面是一个使用 C…

pytest结合Allure生成测试报告

文章目录 1.Allure配置安装2.使用基本命令报告美化1.**前置条件**2.**用例步骤****3.标题和描述****4.用例优先级**3.进阶用法allure+parametrize参数化parametrize+idsparametrize+@allure.title()4.动态化参数5.环境信息**方式一****方式二**6.用例失败截图1.Allure配置安装 …

Jmeter基础(2) 目录介绍

目录 Jmeter目录介绍bin目录docsextrasliblicensesprintable_docs Jmeter目录介绍 在学习Jmeter之前&#xff0c;需要先对工具的目录有些了解&#xff0c;也会方便后续的学习 bin目录 examplesCSV目录中有CSV样例jmeter.batwindow 启动文件jmeter.shMac/linux的启动文件jmete…

代码随想录 | 216.组合总和III● 17.电话号码的字母组合

216.组合总和III 思路&#xff1a; 和77. 组合思路一致&#xff0c;只不过多了一个cursum用来记录总和。 代码&#xff1a; class Solution:def combinationSum3(self, k: int, n: int) -> List[List[int]]:path []result []def backtracking( k, n, start, cursum):i…

web安全学习笔记【15】——信息打点(5)

信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指…

基于springboot财务管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

【C语言必知必会 | 第一篇】C语言入门,这一篇就够了

引言 C语言是一门面向过程的、抽象化的通用程序设计语言&#xff0c;广泛应用于底层开发。它在编程语言中具有举足轻重的地位。 此文为【C语言必知必会】系列第一篇&#xff0c;带你初步了解C语言&#xff0c;为之后的学习打下基础 文章目录 1️⃣发展历史2️⃣语言特点3️⃣语…

论文精读--GPT2

被BERT敲打了&#xff0c;但是仍然坚持解码器架构 Abstract Natural language processing tasks, such as question answering, machine translation, reading comprehension, and summarization, are typically approached with supervised learning on taskspecific dataset…

使用代理IP技术实现爬虫同步获取和保存

概述 在网络爬虫中&#xff0c;使用代理IP技术可以有效地提高爬取数据的效率和稳定性。本文将介绍如何在爬虫中同步获取和保存数据&#xff0c;并结合代理IP技术&#xff0c;以提高爬取效率。 正文 代理IP技术是一种常用的网络爬虫技术&#xff0c;通过代理服务器转发请求&a…

idea和jdk之间对应的版本(idea支持的jdk版本)

idea如果和jdk版本不对应&#xff0c;就会出现无法运行的情况&#xff0c;如下&#xff1a; 翻译&#xff1a;无法确定17的“tools.jar”库的路径&#xff08;C:\Program Files\Java\jdk-17&#xff09; 原因&#xff1a;idea版本是2020.2&#xff0c;而jdk版本是17&#xff0…

动态规划-

关键词&#xff1a; 重叠子问题&#xff1b;每一个状态一定是由上一个状态推导出来(类似数列a^n f(a^n-1,a^n-2)) 步骤&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 题目&#…

01_02_mysql06_(视图-存储过程-函数(变量、流程控制与游标)-触发器)

视图 使用 视图一方面可以帮我们使用表的一部分而不是所有的表&#xff0c;另一方面也可以针对不同的用户制定不同的查询视图。比如&#xff0c;针对一个公司的销售人员&#xff0c;我们只想给他看部分数据&#xff0c;而某些特殊的数据&#xff0c;比如采购的价格&#xff0…