当前位置:首页>新闻中心>技术分享>航芯技术分享 | ACM32 MCU安全特性概述

航芯技术分享 | ACM32 MCU安全特性概述

发布时间:2022-04-25

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


本文将详细介绍上海航芯ACM32 MCU的安全特性。


安全启动与安全更新


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


存储保护


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


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


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


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


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


其中存储区域访问控制包括读保护(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。


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


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


密码学算法引擎


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


入侵保护


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


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


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


生命周期管理


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


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


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


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


安全生产


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


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


如需销售咨询,请邮件至sales@aisinochip.com