0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊一些常用的Bootloader安全机制的设计

lilihe92 来源:最后一个bug 2023-06-11 09:51 次阅读

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

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

那么今天就大致聊聊,一些常用的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程序的安全机制应该根据实际的应用场景和需求进行设计和实现。

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





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6032

    文章

    44514

    浏览量

    632929
  • 存储器
    +关注

    关注

    38

    文章

    7452

    浏览量

    163598
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3564

    浏览量

    129223
  • CRC校验
    +关注

    关注

    0

    文章

    84

    浏览量

    15188
  • MCU控制
    +关注

    关注

    0

    文章

    48

    浏览量

    6729

原文标题:四种Bootloader程序安全机制设计

文章出处:【微信号:最后一个bug,微信公众号:最后一个bug】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    常用一些芯片资料

    以下是一些常用的芯片资料,如lcd1602,ds12c887,开发板proteus原理图
    发表于 05-09 17:18

    关于ARM的一些常用代码

    关于ARM的一些常用代码
    发表于 04-25 22:19

    bootloader一些疑问

    了?这个跳转是水区引导的呢? 问题有些多,但是都是原理性问题,我也是做好了boot后产生的一些疑问,麻烦Andy和大家了!
    发表于 06-21 09:33

    聊聊数字电路芯片设计的一些事情

    说说芯片设计这点事 芯片设计这个行当 ,从大的方面讲,主要分模拟和数字两大块, 而每大块又分前端和后端, 我想大部分同学对这个肯定是非常清楚的, 下面就数字电路聊聊芯片设计的一些事情,就是芯片设计有
    发表于 11-10 06:04

    AVR和STM32的bootloader机制记录和讲解

    放在AVR和STM32的bootloader机制,做了一些阅读、实验、编写和移植的工作,最后才有了这篇文章,算是个阶段成果汇报。这里先简单总结磨叽
    发表于 12-09 07:37

    常用一些PID算法有哪些?

    PID的原理是什么?常用一些PID算法有哪些?
    发表于 01-21 06:48

    聊聊对单片机的内部存储器RAM和FLASH的一些认识和理解

    单片机内部个重要组成部分,存储器占有很重要的地位,今天就来聊聊我对于单片机的内部存储器RAM和FLASH的一些认识和理解。1、先聊聊存储器 存储器是单片机结构的重要组成部分,存储器是
    发表于 01-26 08:09

    PCB布板一些简易常用规则

    PCB布板一些简易常用规则   这几天还是关注一些简单入门的东西吧,主要介绍一些PCB中一些建议规则1.我们要注意贴片器件(
    发表于 11-21 14:34 6618次阅读

    Protel在线教程:SCH的一些高级设置和常用技巧

    Protel在线教程:SCH的一些高级设置和常用技巧 前面我们走马观花的对SCH做了一些操作,这回我们来看看SCH中的一些高级设置和操作技巧   1.看看如何对SCH的操作
    发表于 04-22 09:00 1451次阅读
    Protel在线教程:SCH的<b class='flag-5'>一些</b>高级设置和<b class='flag-5'>常用</b>技巧

    关于PID一些常用知识

    本文档详细介绍分析了关于PID的一些常用知识
    发表于 08-29 14:22 2次下载

    SNMP常用一些OID详细例表说明

    本文档的主要内容详细介绍的是SNMP常用一些OID详细例表说明。SNMP常用一些OID,比如CPU、内存、硬盘什么的。要先了解这些,再使用SNMP监控服务器。
    发表于 08-08 17:33 2次下载
    SNMP<b class='flag-5'>常用</b>的<b class='flag-5'>一些</b>OID详细例表说明

    RAM、ROM常用安全机制

    存储器数据的稳定可靠是MCU安全运行的基础,但环境因素和存储器本身的物理特性都可能造成存储器数据异常,本文将详细介绍RAM&ROM常用安全机制
    的头像 发表于 06-13 14:48 4269次阅读
    RAM、ROM<b class='flag-5'>常用</b><b class='flag-5'>安全</b><b class='flag-5'>机制</b>

    分享一些Linux服务器的安全小贴士

    今天浩道跟大家分享一些Linux服务器的安全小贴士,让你维护linux服务器安全上有一些方向!
    发表于 01-29 11:27 306次阅读

    常用Bootloader安全机制的设计

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

    gvim中常用一些指令介绍

    在 Vim 编辑器中,有一些常用的指令可以帮助我们更高效地编辑文本。以下是一些在 gvim 中常用的指令
    的头像 发表于 10-10 15:47 1950次阅读