ACM32系列 MCU安全特性概述

2024-03-08 17:20

本文主要是介绍ACM32系列 MCU安全特性概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      随着物联网的发展,智能化产品的不断涌现,信息安全问题也日渐受到关注。因此,通用安全MCU产品也应运而生,能够更好地帮助客户在其产品设计中加强安全性,助力IoT的应用创新。

本文将详细介绍ACM32系列 MCU的安全特性。

1  安全启动与安全更新

    ACM32系列 MCU提供安全启动与安全更新参考实现,具体可见对应的软件包。安全启动与安全更新利用芯片的硬件安全特性来保证启动代码和更新固件不被篡改,启动入口唯一。

2   存储保护

    存储保护主要就是保护存储区的代码和数据不被篡改以及非法获取,主要需要抵抗三个方面的攻击,软件攻击、非侵入式攻击和侵入式攻击。

• 软件攻击主要包括通过调试端口访问数据,软件漏洞和缓冲区溢出等;

• 非侵入攻击主要包括通过故障注入导致程序和数据出错,以及旁路攻击获取敏感信息;

• 侵入式攻击主要是通过开盖或者直接通过测试仪器来探测内部信号;

       针对这些攻击,芯片主要从五个方面进行应对,包括存储区域访问控制、存储地址加扰、数据加密和完整性校验以及环境检测。

     其中存储区域访问控制包括读保护(RDP),写保护(WRP),专有代码读保护(PCROP),存储区域权限控制以及安全存储区。

 具体配置可见《ACM32-在线编程器》:http://www.aisinochip.com/index.php/product/detail/id/44.html

• 读取保护(RDP)是全局Flash读保护,可保护嵌入式固件代码,避免复制、逆向工程、使用调试工具读出或其他方式的入侵攻击。该保护功能在用户下载Flash代码后,由用户在下载固件时自行设置。

图片

eflash启动:勾选表示从eflash启动,未选表示从Boot模式;

SWD使能:勾选表示使能SWD功能,未选表示禁止SWD功能;

读保护配置锁定:勾选后,将锁定“eflash启动”和“SWD使能”的设置,生效后不可再更改;反之未选则不会锁定。

勾选或取消选择所要配置的项目,点击“配置”进行操作,操作完成,将在“发送显示区”显示操作结果,复位或重新上电生效。

注:此配置可能会影响SWD或者BOOT功能,请谨慎操作。

• 写保护(WRP)用于保护指定区域Flash数据,避免数据被恶意更新或擦除。写保护可应用于Flash内指定的内存空间。

图片

写保护(WRP)后,相应的区域将禁止擦写,片擦指令将不能使用。

在所要配置的区域,输入“起始地址”和“操作长度”,勾选“配置”按钮,点击“使能/禁止”进行操作,操作完成,将在“发送显示区”显示操作结果,复位或重新上电生效。

若操作范围超过eflash最大长度,或要使能的两个区域地址重叠,将报错。

注:使能/禁止后,立即写入相应NVR,读取配置为操作后的设置,但需复位或重新上电方能生效。

• 专有代码读保护(PCROP)用于保护指定区域Flash代码,保护专有代码不被最终用户代码、调试器工具或恶意代码所修改或读取。

图片

PCROP使能后,所选区域只能执行,不能读取和擦写,片擦指令将不能使用。

在所要配置的区域,输入“起始地址”和“操作长度”,勾选“配置”按钮,点击“使能/禁止”进行操作,操作完成,将在“发送显示区”显示操作结果,复位或重新上电生效。

若操作范围超过eflash最大长度,或要使能的两个区域地址重叠,将报错。

注:禁止PCROP区域后,此时读取配置依然是禁止前的设置,需要将SWD使能关闭,复位或重新上电方能生效。

• 存储区域权限控制利用内核本身自带的MPU单元,这个单元可以划分出几个region,每个region可以设置不同的访问属性,配合内核的User和Privilege模式,能够实现对敏感数据的访问控制,使得敏感数据不能够被恶意代码获取。这样隔离能够有效地降低软件漏洞带来的风险。

• 安全存储区可以用于保护特有的一些程序,安全存储区的大小可以进行配置,程序运行期间可以通过寄存器打开对这段安全存储区的保护,保护使能后则无法再次访问其中的任何内容。

图片

在所要配置的区域,输入“操作长度”,点击“使能/禁止”进行操作,操作完成,将在“发送显示区”显示操作结果,复位或重新上电生效。若操作范围超过eflash最大长度,将报错。

注:使能/禁止后,立即写入相应NVR,读取配置为操作后的设置,但需复位或重新上电方能生效。

存储数据加密,地址加扰主要就是对片内FLASH和SRAM上的数据进行加密存储,并且存储的地址也被串扰。针对于部分代码和数据需要放在片外存储器的情况,公司也有部分系列带有OTFDEC(On The Fly DECryption)硬件,OTFDEC模块在总线与OSPI之间,可以实时地解密外部Flash上的密文代码和数据,只需要设置好相应的区域、密钥等,OTFDEC就可以自动解密被访问的密文数据,无需额外的软件参与解密,不需要将解密数据加载到内部RAM,可以直接运行片外Flash上的加密代码。OTFDEC模块也支持加密,但不是实时加密,数据首先被加密到RAM中,需要另外将RAM中的密文写回外部FLASH。

存储数据完整性校验主要就是对存储区的数据进行奇偶校验,可以有效抵抗故障注入攻击。

环境检测主要是检测芯片工作电压是否在正常范围,如果不在正常工作范围则进行报警,以抵抗电压故障注入攻击。

3  密码学算法引擎

上海航芯MCU系列都带有HASH,AES,TRNG和CRC硬件模块。直接调用对应的API函数即可使用相应的算法功能,有效满足数据传输及其完整性校验中的密码需求。

4  入侵保护

入侵保护主要是芯片可以检测遭受的物理入侵从而删除备份寄存器中的敏感数据,从而保护芯片敏感数据不会窃取。该功能主要由RTC和备份寄存器完成。

备份寄存器处于备份域中。待机模式唤醒或系统复位操作都不会影响这些寄存器。只有当被检测到有侵入事件和备份域复位时,这些寄存器才会复位。

RTC支持两个外部IO侵入事件检测,并可以记录侵入时间。并且需要输入私钥才允许对RTC寄存器进行写操作,避免攻击者篡改RTC寄存器。

5   生命周期管理

生命周期管理主要针对芯片测试开发到芯片使用阶段中可能存在的一些安全风险,例如调用测试或者调试接口非法获取数据。具体对应的功能包括测试模式禁止,JTAG禁止和128位唯一序列号。

• 测试模式禁止:芯片测试完成之后将测试模式禁止,交给客户的芯片不能再返回到测试模式,这样攻击者就不能通过测试接口获取敏感数据;

• JTAG禁止:当读保护(RDP)设置Level 1以上时,则会将JTAG功能禁止,使得攻击者不能通过调试接口获取敏感数据;

• 128位唯一序列号:128位唯一序列号绑定了芯片出厂的LOT/WAFER ID和坐标等。该序列号唯一且不可复制,开发者可将应用程序与该芯片的序列号绑定,这样可以使每个下载应用程序的芯片不可被复制。管理员需要管控好每颗芯片的序列号,这样便于产品的定位和追踪,防止安全产品的复制。

6  安全生产

    安全生产主要是保证交由第三方工厂进行烧写的代码或者数据不被盗取和篡改以及过量生产。

    针对安全生产,上海航芯提供了一套安全的解决方案,全程代码加密烧录,并带动态校验码(动态校验码与芯片唯一序列号绑定),而且可以进行烧录计数,进行产量控制,避免过量生产。并且支持在线/离线烧录,远程交付和更新固件,在保证固件安全性的前提下极大方便客户进行烧录固件。

这篇关于ACM32系列 MCU安全特性概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787835

相关文章

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

Java中常见队列举例详解(非线程安全)

《Java中常见队列举例详解(非线程安全)》队列用于模拟队列这种数据结构,队列通常是指先进先出的容器,:本文主要介绍Java中常见队列(非线程安全)的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一.队列定义 二.常见接口 三.常见实现类3.1 ArrayDeque3.1.1 实现原理3.1.2

JDK9到JDK21中值得掌握的29个实用特性分享

《JDK9到JDK21中值得掌握的29个实用特性分享》Java的演进节奏从JDK9开始显著加快,每半年一个新版本的发布节奏为Java带来了大量的新特性,本文整理了29个JDK9到JDK21中值得掌握的... 目录JDK 9 模块化与API增强1. 集合工厂方法:一行代码创建不可变集合2. 私有接口方法:接口

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

SpringBoot3.4配置校验新特性的用法详解

《SpringBoot3.4配置校验新特性的用法详解》SpringBoot3.4对配置校验支持进行了全面升级,这篇文章为大家详细介绍了一下它们的具体使用,文中的示例代码讲解详细,感兴趣的小伙伴可以参考... 目录基本用法示例定义配置类配置 application.yml注入使用嵌套对象与集合元素深度校验开发