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

四种Bootloader程序安全机制设计

d820eb806398490396ba38bc2c554508.gif

正文

大家周末好,我是bug菌~

不管是玩单片机还是嵌入式linux,基本上都会接触到bootloader,所以bootloader程序也是一个关键的组件,进行硬件初始化,应用程序的合法性、完成性检测、升级功能等等都与其息息相关。

像一些在ram运行的应用程序,或者是一些运行内存比较小的MCU等等,它需要保证从外部存储器中读取的应用程序是可信的,不能拿过来就执行,那往往是不安全的,特别是为了防止恶意程序的注入和攻击,在Bootloader程序中实现一定的安全机制就非常有必要了~

那么bug菌今天就大致聊聊,一些常用的Bootloader安全机制的设计:

1

进行image校验

image校验我们也常叫镜像校验,Bootloader程序可以对从外部存储器中读取的应用程序镜像进行校验,以确保其完整性和正确性,常见的镜像校验方式包括CRC、哈希值等。

当然你如果想简单一点使用求和检验也是可行的,将应用程序镜像中每个字节的值相加,得到一个校验和。Bootloader程序将计算得到的校验和与预先存储在应用程序镜像中的校验和进行比较,如果两者相等,说明应用程序镜像没有被篡改,校验和的优点是计算简单,缺点当然就是校验能力有限,更易受攻击。

而相比求和校验,CRC等是一种更加可靠和安全的校验方式,它可以检测出更多的错误,并且不易受攻击。

在STM32中,CRC校验可以使用硬件或软件实现。硬件CRC校验可以使用STM32的CRC模块,直接对应用程序镜像进行校验,速度快、精度高。软件CRC校验则需要Bootloader程序自行实现CRC算法,速度较慢,但也可以得到较好的校验效果。

如果校验通过,则可以加载应用程序镜像;如果校验失败,则应该拒绝加载应用程序镜像,并给出相应的提示。

镜像校验是可以保证从外部存储器中读取的应用程序是可信的,避免恶意程序的注入和攻击。如果镜像校验失败,Bootloader程序可以拒绝加载应用程序镜像,避免恶意程序的注入。

2

签名认证

签名认证并不是一个加密和解密的过程,它是一种数字签名技术。

数字签名是一种用于确保电子文档的完整性和认证性的技术,它使用密钥对(公钥和私钥)来生成和验证签名。

数字签名的过程如下:

1、生成签名:文档的发送者使用私钥对文档进行哈希运算,然后使用私钥对哈希值进行加密,生成签名。

2、验证签名:文档的接收者使用公钥对签名进行解密,得到哈希值,然后对文档进行哈希运算,得到另一个哈希值。接收者比较这两个哈希值,如果相等,则说明文档没有被篡改,并且签名是可信的。

需要注意的是,数字签名技术依赖于密钥对的安全性,私钥需要妥善保管,防止泄露和丢失,公钥需要预置在Bootloader程序中,确保其可信和安全。

签名认证需要使用一组密钥对,包括私钥和公钥。开发者使用私钥对应用程序进行签名,Bootloader程序使用公钥进行认证。如果签名认证失败,Bootloader程序可以拒绝加载应用程序镜像。

3

内存保护

在STM32的Bootloader中,内存保护是一种重要的安全机制,可以保护Bootloader程序和其他重要的代码和数据不被应用程序覆盖、修改或篡改。

内存保护通常使用硬件或软件实现。在STM32中,硬件内存保护可以使用CPU的内存保护单元(MPU)实现,软件内存保护可以使用内存管理单元(MMU)或软件实现的保护机制,具体使用哪种需要看资源情况。

硬件内存保护可以将MCU的内存空间划分为若干个区域,并为每个区域配置不同的访问权限。Bootloader程序可以将应用程序加载到特定的区域中,防止应用程序覆盖或修改Bootloader程序和其他重要的代码和数据。硬件内存保护的优点是速度快、可靠性高,缺点是配置复杂,需要占用一定的硬件资源。

软件内存保护可以使用MMU或软件实现的保护机制,但一般有MMU单元的都属于微处理器了,而微控制器。MMU是一种硬件单元,用于将虚拟地址映射到物理地址,并可以配置不同的访问权限。软件实现的保护机制可以在Bootloader程序中实现一些保护代码,用于检测和防止应用程序的篡改和攻击。软件内存保护的优点是灵活性高,缺点是速度较慢,可靠性较低。

内存保护可以保护Bootloader程序和其他重要的代码和数据不被应用程序覆盖、修改或篡改。在实现内存保护时,需要注意区域划分、加载位置、访问权限、保护代码等方面的问题。

4

使用只读存储器

只读存储器(ROM)通常是一种非易失性存储器,具有读取快、安全可靠、不易受攻击等优点。

将Bootloader程序放在只读存储器中,可以保证Bootloader程序的完整性和安全性,防止恶意程序的注入和攻击。只读存储器也可以是MCU的Flash、ROM等。

5

最后

值得注意的是,Bootloader程序的安全机制应该根据实际的应用场景和需求进行设计和实现。

安全机制的增加会增加系统的复杂性和开发成本,因此应该在安全性和可用性之间进行权衡。

最后

      好了,今天就跟大家分享这么多了,技术贵在积累和发现,如果你觉得有所收获,赞、分享、收藏。

最后一个bug,bug菌唯一创作平台

5da69787e527595ba7a1a0d1bd6180b5.jpeg

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 473e5431a07939c19b30946fc97db07f.gif

☞  嵌入式C语言进阶专辑 04d39579aa205b40f1b261e8f84aacb6.gif

☞  “bug说”专辑 2fd5b697959468eda172becfc85fe61c.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linuxea4f40168d347e4783b5da5ae1f15b46.gif

相关文章:

四种Bootloader程序安全机制设计

正文 大家周末好,我是bug菌~ 不管是玩单片机还是嵌入式linux,基本上都会接触到bootloader,所以bootloader程序也是一个关键的组件,进行硬件初始化,应用程序的合法性、完成性检测、升级功能等等都与其息息相关。 像一些…...

【DBA 警世录之习惯性命令---读书笔记】

👈【上一篇】 💖The Begin💖点点关注,收藏不迷路💖 【下一篇】👉 🔻【💣 话题引入:既然 DBA 这个职业如此危险,那么哪些习惯是 DBA 必须养成的呢&#x…...

Vue中如何进行状态持久化(LocalStorage、SessionStorage)

Vue中如何进行状态持久化(LocalStorage、SessionStorage)? 在Vue应用中,通常需要将一些状态进行持久化,以便在用户关闭浏览器或刷新页面后,仍能保留之前的状态。常见的持久化方式包括LocalStorage和Sessio…...

【30天熟悉Go语言】6 Go 复杂数据类型之指针

文章目录 一、前言二、数据类型总览三、指针1、特殊运算符& *2、内存角度来看指针3、使用指针修改数据4、指针使用的注意事项5、对比着看Java的引用类型 三、总结 一、前言 Go系列文章: GO开篇:手握Java走进Golang的世界2 Go开发环境搭建、Hello Wor…...

Linux内核使用红黑树的场景

进程调度队列 (Process Scheduling):内核需要对进程按照一定的调度策略进行排队,以便更好地利用 CPU 的时间片。因此,内核使用红黑树作为查找和管理进程调度队列的数据结构,以支持快速的查找、插入和删除操作。 文件系统 (File S…...

遗留的 AppSec 工具迷失在云端

随着应用程序开发步伐的加快,IT 和安全团队正在对旧的应用程序安全(AppSec) 工具失去信心。 根据 Backslash 对 300 名 CISO、AppSec 经理和工程师的调查,遗留工具无法跟上并陷入永远的追赶游戏。 影响是深远的,大多数组织都看到云原生 App…...

直流稳压电源与信号产生电路(模电速成)

目录 一、直流稳压电源 1、直流稳压电路 2、串联型稳压电路 3、集成稳压电路 二、信号产生电路 1、振荡电路 2、波形发生器 一、直流稳压电源 1、直流稳压电路 直流电源由 变压器、整流、滤波、稳压 四部分组成 整流:将交流变为直流 滤波:减小…...

0202性能分析-索引-MySQL

1 索引语法 创建索引 CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_column_name,...);Index_name:规范为idx_表名_字段名... 查看索引 SHOW INDEX FROM table_name;删除索引 DROP INDEX index_name ON table_name;按照下列要求,创建…...

Play wright自动化测试工具该如何更加完美地使用

目录 1.1 拦截网络请求 1.2 pytest 管理用例 1.3 PO模型 1.4 API 和 UI 自动化测试融合 1.5 数据驱动 1.6 动态挑选用例执行 1.6 Allure测试报告 1.7 持续集成 1.1 拦截网络请求 网络拦截: 无响应 pass 中止 route.abort("aborted") 放行 route…...

数据可视化学习笔记:Python实现汽车品牌销售量矩形树图

引言 本文将介绍如何使用 Python 和 Pyecharts 库创建一个汽车品牌销售量的矩形树图。我们将使用 Pandas 读取 CSV 文件数据,然后对数据进行处理、封装,最后将数据可视化为矩形树图。 准备工作 首先,我们需要先安装好相关库: PandasPyecharts可以使用 pip 命令进行安装:…...

【深蓝学院】手写VIO第3章--基于优化的 IMU 与视觉信息融合--作业

0. 题目 1. T1 T1.1 绘制阻尼因子曲线 将尝试次数和lambda保存为csv,绘制成曲线如下图 iter, lambda 1, 0.002000 2, 0.008000 3, 0.064000 4, 1.024000 5, 32.768000 6, 2097.152000 7, 699.050667 8, 1398.101333 9, 5592.405333 10, 1864.135111 11, 1242.7567…...

企业级信息系统开发讲课笔记4.11 Spring Boot中Spring MVC的整合支持

文章目录 零、学习目标一、Spring MVC 自动配置(一)自动配置概述(二)Spring Boot整合Spring MVC 的自动化配置功能特性 二、Spring MVC 功能拓展实现(一)创建Spring Boot项目 - SpringMvcDemo2021&#xff…...

chatgpt赋能python:Python安装EGG——一个简单的指南

Python安装EGG——一个简单的指南 如果你使用Python有一段时间了,你可能会遇到需要安装扩展包(Package)的情况。在Python中,这些扩展包的文件格式通常是.egg(Easy Installable GZip)。在本文中&#xff0c…...

Web前端-React学习

React基础 React 概述 React 是一个用于构建用户界面的JavaScript库。 用户界面: HTML页面(前端) React主要用来写HTML页面, 或构建Web应用 如果从MVC的角度来看,React仅仅是视图层(V),也就…...

【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

github仓库:https://github.com/open-rust-initiative/sensleak-rs Rust是一门神奇的编程语言,它提供了内存安全、零成本抽象、并发安全等特性,使开发人员能够编写高性能、高抽象和安全的代码。 这是我用rust开发的第一个工作,希望…...

搭建一个定制版New Bing吧

项目介绍 项目地址:https://github.com/adams549659584/go-proxy-bingai 引用项目简介:用 Vue3 和 Go 搭建的微软 New Bing 演示站点,拥有一致的 UI 体验,支持 ChatGPT 提示词,国内可用,国内可用&#xff…...

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻,上周Quest 3发布之后,本周苹果MR头显Vision Pro正式发布,也是本周AR/VR新闻的重头戏。 ​AR方面,苹果发布VST头显Vision Pro(虽然本质是台VR,但以AR场景为核心)以及visionOS&…...

在Spring Boot微服务使用JedisCluster操作Redis集群String字符串

记录&#xff1a;449 场景&#xff1a;在Spring Boot微服务使用JedisCluster操作Redis集群的String字符串数据类型。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。 1.微服务中配置Redis信息 1.1在pom.xml添加依赖 pom.xml文件&#xff1a; <…...

5.1 合并数据

5.1 合并数据 5.1.1 堆叠合并数据1、横向堆叠 concat()2、纵向堆叠 concat()和append() 5.1.2 主键合并数据 merge()和join()5.1.3 重叠合并数据 combine_first() 5.1.1 堆叠合并数据 堆叠就是简单地把两个表拼在一起&#xff0c;也被称作轴向连接、绑定或连接。依照连接轴的方…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...