Linux嵌入式平台安全启动理解介绍

一、意义


        安全启动可以防止未授权的或是进行恶意篡改的软件在系统上运行,是系统安全的保护石,每一级的前一个镜像会对该镜像进行校验。

1.1 安全启动原理介绍

 
通过数字签名进行镜像完整性验证(使用到非对称加密算法和哈希算法)
签名过程:
raw_image--->use hash--->digest(摘要)
private_key--->digest--->signature
image+signature组合成为签名镜像
验签过程:
use hash--->raw_image--->digest1
public_key--->signature--->digest2
digest1 =? digest2
等于则验签成功,否则验签失败

代码实现过程如下:


#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/sha.h> 
#include <openssl/crypto.h> 
 
#define PUBLIC_KEY_PATH ("/hd1/program/config/ca/client_sunell_public.pem")
#define PRIVATE_KEY_PATH ("/hd1/program/config/ca/client_sunell_private.pem")
 
 
void printHash(unsigned char *md, int len)
{
 
	int i = 0;
    for (i = 0; i < len; i++)
	{
		printf("%02x", md[i]);
	}
 
	printf("\n");
}
 
 
/*读取私钥*/
RSA* ReadPrivateKey(char* p_KeyPath)
{	
	FILE *fp = NULL; 
	char szKeyPath[1024];
	RSA  *priRsa = NULL, *pubRsa = NULL, *pOut = NULL;
	
	printf("PrivateKeyPath[%s] \n", p_KeyPath);
 
	/*	打开密钥文件 */
	if(NULL == (fp = fopen(p_KeyPath, "r")))
	{
		printf( "fopen[%s] failed \n", p_KeyPath);
		return NULL;
	}
	/*	获取私密钥 */
	priRsa = PEM_read_RSAPrivateKey(fp, NULL, NULL,NULL);
	if(NULL == priRsa)
	{
		ERR_print_errors_fp(stdout);
		printf( "PEM_read_RSAPrivateKey\n");
		fclose(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Linux安全启动过程主要包括以下几个步骤: 1. 配置硬件平台密钥:通过为内核和initrd安装受硬件保护的平台密钥,确保只有授权的代码可以启动系统。这样可以防止未经授权的操作系统或恶意软件加载并运行。 2. 启动验证:在启动过程中,固件会验证加载的引导程序的数字签名是否有效和受信任。这样可以确保引导程序的完整性和来源的可信度。 3. 内核签名验证:一旦引导程序验证通过,它将加载操作系统的内核。在加载内核之前,固件会验证内核的数字签名。只有经过授权和签名的内核才能被加载和运行。 4. 初始化RAM文件系统(initrd):一旦内核被加载和验证通过,它将解压缩和加载initrd文件系统。initrd包含了用于启动系统的临时文件和驱动程序。 5. 加载根文件系统:在初始化RAM文件系统之后,内核将加载并挂载真正的根文件系统。这是操作系统的核心文件系统,包含了所有的文件和目录。 通过以上步骤,Linux安全启动确保了启动过程的完整性和可信度,防止了未经授权的代码或恶意软件的加载和运行。这提供了额外的安全层级,保护系统免受潜在的攻击和威胁。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [linux secure boot(安全启动)下为内核模块签名](https://blog.csdn.net/inthat/article/details/128844657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [safeboot:带有UEFI安全启动和TPM支持的脚本可略微改善Linux启动过程的安全性](https://download.csdn.net/download/weixin_42129797/16659297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a2591748032-随心所记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值