4种Bootloader程序安全机制设计
新闻资讯
2023-06-21 12:03
104
0
不管是玩单片机,还是嵌入式Linux,基本上都会接触到bootloader,所以bootloader程序也是一个关键的组件,进行硬件初始化,应用程序的合法性、完成性检测、升级功能等等都与其息息相关。
像一些在ram运行的应用程序,或者是一些运行内存比较小的MCU等等,它需要保证从外部存储器中读取的应用程序是可信的,不能拿过来就执行,那往往是不安全的,特别是为了防止恶意程序的注入和攻击,在Bootloader程序中实现一定的安全机制就非常有必要了~
今天,我们就大致聊聊,一些常用的Bootloader安全机制的设计。image校验也常叫镜像校验,Bootloader程序可以对从外部存储器中读取的应用程序镜像进行校验,以确保其完整性和正确性,常见的镜像校验方式包括CRC、哈希值等。当然,如果你想简单一点使用求和检验也是可行的,将应用程序镜像中每个字节的值相加,得到一个校验和。Bootloader程序将计算得到的校验和与预先存储在应用程序镜像中的校验和进行比较,如果两者相等,说明应用程序镜像没有被篡改,校验和的优点是计算简单,缺点当然就是校验能力有限,更易受攻击。而相比求和校验,CRC等是一种更加可靠和安全的校验方式,它可以检测出更多的错误,并且不易受攻击。在STM32中,CRC校验可以使用硬件或软件实现。硬件CRC校验可以使用STM32的CRC模块,直接对应用程序镜像进行校验,速度快、精度高。软件CRC校验,则需要Bootloader程序自行实现CRC算法,速度较慢,但也可以得到较好的校验效果。如果校验通过,则可以加载应用程序镜像;如果校验失败,则应该拒绝加载应用程序镜像,并给出相应的提示。镜像校验是可以保证从外部存储器中读取的应用程序是可信的,避免恶意程序的注入和攻击。如果镜像校验失败,Bootloader程序可以拒绝加载应用程序镜像,避免恶意程序的注入。
签名认证并不是一个加密和解密的过程,它是一种数字签名技术。数字签名是一种用于确保电子文档的完整性和认证性的技术,它使用密钥对(公钥和私钥)来生成和验证签名。1、生成签名:文档的发送者使用私钥对文档进行哈希运算,然后使用私钥对哈希值进行加密,生成签名。2、验证签名:文档的接收者使用公钥对签名进行解密,得到哈希值,然后对文档进行哈希运算,得到另一个哈希值。接收者比较这两个哈希值,如果相等,则说明文档没有被篡改,并且签名是可信的。需要注意的是,数字签名技术依赖于密钥对的安全性,私钥需要妥善保管,防止泄露和丢失,公钥需要预置在Bootloader程序中,确保其可信和安全。签名认证需要使用一组密钥对,包括私钥和公钥。开发者使用私钥对应用程序进行签名,Bootloader程序使用公钥进行认证。如果签名认证失败,Bootloader程序可以拒绝加载应用程序镜像。
在STM32的Bootloader中,内存保护是一种重要的安全机制,可以保护Bootloader程序和其他重要的代码和数据不被应用程序覆盖、修改或篡改。内存保护通常使用硬件或软件实现。在STM32中,硬件内存保护可以使用CPU的内存保护单元(MPU)实现,软件内存保护可以使用内存管理单元(MMU)或软件实现的保护机制,具体使用哪种需要看资源情况。硬件内存保护可以将MCU的内存空间划分为若干个区域,并为每个区域配置不同的访问权限。Bootloader程序可以将应用程序加载到特定的区域中,防止应用程序覆盖或修改Bootloader程序和其他重要的代码和数据。硬件内存保护的优点是速度快、可靠性高,缺点是配置复杂,需要占用一定的硬件资源。软件内存保护可以使用MMU或软件实现的保护机制,但一般有MMU单元的都属于微处理器了,而微控制器。MMU是一种硬件单元,用于将虚拟地址映射到物理地址,并可以配置不同的访问权限。软件实现的保护机制可以在Bootloader程序中实现一些保护代码,用于检测和防止应用程序的篡改和攻击。软件内存保护的优点是灵活性高,缺点是速度较慢,可靠性较低。内存保护可以保护Bootloader程序和其他重要的代码和数据不被应用程序覆盖、修改或篡改。在实现内存保护时,需要注意区域划分、加载位置、访问权限、保护代码等方面的问题。
只读存储器(ROM)通常是一种非易失性存储器,具有读取快、安全可靠、不易受攻击等优点。将Bootloader程序放在只读存储器中,可以保证Bootloader程序的完整性和安全性,防止恶意程序的注入和攻击。只读存储器也可以是MCU的Flash、ROM等。
值得注意的是,Bootloader程序的安全机制应该根据实际的应用场景和需求进行设计和实现。安全机制的增加,会增加系统的复杂性和开发成本。因此,应该在安全性和可用性之间进行权衡。
文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!