四种Bootloader程序安全机制设计

news2024/11/19 17:38:39

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

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

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

相关文章

【ABAP】数据类型(二)「预定义数据类型」

💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言A…

【哈希的模拟实现】

文章目录 1 哈希概念2 哈希冲突2.1 直接定址法 (常用)2.2 除留余数法 (常用)2.3 平方取中法2.4 折叠法2.5 随机数法2.6 数学分析法 3 闭散列3.1 线性探测3.2 二次探测 4 开散列4.1 开散列概念4.2哈希桶的模拟实现4.3 开散列与闭散列的比较 1 哈希概念 顺序结构以及平衡树中&…

Science|改变微生物群落可以增强树木对气候变化的耐受性

改变微生物群落可以增强树木对气候变化的耐受性 Shifting microbial communities can enhance tree tolerance to changing climates Research Article,2023-5-25,Science, [IF 63.714] DOI:10.1126/science.adf202 第一作者&…

Java常用快捷键

在编写java代码时,要提升自己的编写代码的速度,光是靠鼠标来完成各种的操作是不行的,还会显得十分不成熟,所以这是就需要我们使用一定的快捷键,在键盘点击之间,完成代码的操作。接下来我就为大家介绍常用的…

7.2DIY可视化后台表格自定义列显示类型

后台表格自定义列显示类型 本教程均在第一节中项目启动下操作 后台表格自定义列显示类型前言一、图片格式内容显示:二. 效果展示: http://localhost:9999/#/hdp三:自定义列使用:1.添加字段:自定义列,取值自幻灯片title2. 设置自定义信息: 三.效果展示本文章原自bilibli作者视频…

6月6日复盘总结 11H10min-|23:15~23:25*

​​​​​​​ 7:20-8:20 背书翻译单词 【1h】 8:30-9:00 乐词 【30min】 9:00-10:00 TPO66 L1 精听 【1h】 10:00-10:30 TPO66 L1 错题分析 【30min】 10:30-11:30 L2 Fish Movement 精听 【1h】 11:40-12:40 午饭+水果🍑+玩手机…

【华为OD统一考试B卷 | 100分】经典屏保(C++ Java JavaScript Python)

题目描述 DVD机在视频输出时,为了保护电视显像管,在待机状态会显示“屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹。 请根据如下要求,实现屏保Logo坐标的计算算法。 屏幕是一个800*600像素的矩形,规定屏幕的左上角点坐标原点,沿横边向右方向为X轴…

jeecg-boot权限篇

前言 本文档是对jeecg-boot官方文档的一个分析和补充,具体的可以同时互相参照来看,难免个人理解有出路,如有错误,还望补充和指正~ 文章目录 角色、用户、部门普通权限控制特殊定制化权限按钮控制文本输入禁用 列表控制…

碳中和城市建筑能源系统(2):网络篇(龙惟定)2022

碳中和城市建筑能源系统(2):网络篇 摘要 本文是碳中和城市建筑能源系统系列文章的第二篇,分别概要介绍了城市能源系统中的电网、热网和燃气网在碳中和背景下的新概念、新技术及新方法。强调未来的能源网以电网为主,三网融通,构成城区的能源互联网。综述了智能电网的灵活性、热…

我们不会很快有GPT-5;让 ChatGPT 帮我们总结 Hacker News

🦉 AI新闻 🚀 OpenAI联合创始人Sam Altman:我们不会很快有GPT-5 摘要:在2023北京智源大会的“AI安全与对齐”主题论坛上,OpenAI联合创始人Sam Altman表示,目前他们没有答案,不会很快有GPT-5&a…

OpenCV 项目开发实战--对图像种的斑点进行检测(Python、C++代码实现)

什么是斑点? Blob 是图像中一组连接的像素,它们共享一些共同的属性(例如,灰度值)。在上图中,暗连接区域是斑点,斑点检测旨在识别和标记这些区域。 文末附相关测试代码的下载链接 SimpleBlobDetector 示例 OpenCV 提供了一种基于不同特征检测和过滤斑点的便捷方法。让…

es相关的知识点

海量数据下如何提升es的操作性能 .filesystemcache os cache操作系统缓存 es中的数据,实际上写入磁盘,磁盘文件的操作系统,实际上会将数据写入到oscache中 es的搜索引擎严重依赖于底层的filesystemcache 如果filesystemcache的内存足够大,可以容纳所有的index segmentfile索引…

Mac环境下在vs code中配置copilot

1、下载vs code编辑器 2、在GitHub个人设置里,把copilot设为allow,这里涉及要开通服务就不再详述。 3、在vs code插件市场里下载GitHub copilot 安装好了以后根据指示输入你的GitHub账号即可 编译器底部出现copilot图标即表示安装成功 使用方法就是你先…

GD32F4单片机实现接收超时中断+DMA实现串口的不定长接收和DMA发送

1、通常的实现方式介绍 环形缓冲区定时器超时中断的方式 优点 环形缓冲区可以接收多帧数据数据帧超时间隔可以设置 缺点 设备任务比较繁重时,使用中断接收可能会丢失数据。尤其是在长时间关闭中断或者串口中断优先级不高时频繁进出中断。在使用RTOS的系统中&#x…

给第一行单元格赋值 + WPS JS获取工作表的总行数 + WPS JS获取工作表的总行数

戳我,了解更多相关办公的小技巧 给第一行单元格赋值 1、在计算机中有一种ASCII编码,其中A在计算机中的表示的数字是65,a的ascii码是97,b的ascii码是98。 2、从A1到F1可以看到第一个字母在变化,第2个数字始终是1&#x…

过电流保护原理

过电流保护是指当电流超过预定最⼤值时,使保护装置动作的⼀种保护⽅式。当流过被保护原件中的电流超过预先整定 的某个数值时,保护装置启动,并⽤时限保证动作的选择性,使断路器跳闸或给出报警信号。 过电流保护主要包括短路保护和…

北京通信展的精华内容,都在这里!(上篇)

友情提醒:本文图片较多,请大家注意手机流量。 大家好,我是小枣君。 昨天,中国国际信息通信展览会(PT展)在北京正式落幕了。 小枣君全程参加了这场行业盛会。按照惯例,我来给大家汇报一下现场的情…

ChatGPT Prompt 提示词设计技巧必知必会

本文内容整理自图灵社区直播《朱立成:ChatGPT Prompt提示词技巧必知必会》。 朱立成,图灵社区《ChatGPT即学即用》视频课程作者,软件工程师,对新事物充满好奇,关注ChatGPT应用。2001年毕业于浙江大学,从事软…

硬件设计电源系列文章-电路电源设计流程

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 本文主要介绍硬件单板电源设计流程。 整体架构流程 提示:这里可以添加技术整体架构 主要分三部: 电源需求: 根据硬件总体方案,确定各芯片所需的供电电压&#xff1…

go-Context详解

Context详解 简介 官网 context go package context-blog Context是一个很特殊的接口,在go里面主要承担的责任是在边界(方法,线程等)传递上下文,这些上下文包括 取消信号超时时间特殊的参数 需要有几个注意点 …