垂直应用

STM32信息安全硬件特性




1STM32硬件安全特性概览

  1.1身份识别

  1.2存储保护、软件IP保护

  1.3代码/系统隔离

  1.4启动入口限定(锁定启动地址)

  1.5Anti-Tamper防篡改检测

  1.6Crypto密码学单元

  1.7安全存储

2培训资源


STM32硬件安全特性概览


STM32 MCU底层硬件具备各种安全特性,能够覆盖存储访问保护、代码/系统隔离、启动入口限定、防篡改检测、密码学算法加速、身份识别、安全存储等多方面的安全需求,例如

身份识别:UID, OTP

存储访问保护/软件IP保护:RDP(读保护),WRP(写保护),PCROP(专有代码保护),OTFDEC(On-The-Fly Decryption实时解密模块)

代码/系统隔离:MPU,Firewall(防火墙),TrustZone,Secure User Memory(安全用户存储区)

启动入口限定:RDP2,BOOTLOCK(启动锁定)

防篡改检测:Anti-Tamper 

密码学算法硬件:AES,HASH,PKA,TRNG

安全存储:CKS, HUK+SAES

芯片硬件安全功能结合上层软件能够实现更多应用层级的安全功能,例如安全启动,安全更新,安全存储,安全通信,可信执行环境等等

 Picture11.png


1.1身份识别


Unique ID芯片唯一标识

STM32众多列产品都带有UID,出厂时已经烧写在STM32芯片的系统Flash区域,UID的长度为96bit,作为该款芯片的唯一标识号。

UID的常见用途

基于UID通过某种算法生成搭载该芯片的产品的唯一序列号

基于UID进行密钥派生

芯片的参考手册有专门章节描述,请参考Device electronic signature章节

OTP一次性写入区域

STM32 MCU的多数系列都带有OTP区域,例如F2,F4,L4,F7,G0,G4,WB,L5,U5等等(OTP区域的支持以及大小要看具体产品型号)。

OTP的常见用途

一次性写入产品标识信息,写入后无法变更

一次性写入不可变更数据,例如安全启动用于验证应用合法性的公钥信息

OTP的操作方式请参考芯片的参考手册Embedded Flash memory (FLASH)章节的相关描述


1.2存储保护、软件IP保护


WRP 内部Flash写保护

WRP能够保护片内Flash指定区域的内容不被意外或恶意地修改或擦除,STM32全系列产品都带有写保护功能。

根据产品系列的不同,WRP的配置方式略有不同,L4、G0、G4、WB、L5、U5等系列可以设置受保护的起始和末尾Page,其它一些系列可以独立设置需要保护的Page/Sector。


WRP结合RDP2可以使得一段片上Flash成为相当于ROM的区域,该区域代码或数据将具有不可改变的特性。

STM32U5的WRP还增加了LOCK功能,一旦WRP LOCK被设置,WRP的区域设置无法随意修改,WRP LOCK的撤销必须伴随RDP降级,可以达到将部分FLASH ROM化的效果。


RDP读保护

RDP读保护所保护的对象包括内部Flash,选项字节,内部SRAM(如SRAM2),OTP区域,Backup后备域RAM及寄存器等。在STM32L5和STM32U5这些新系列中,RDP的保护对象还扩展到OTFDEC区域密钥等。


RDP具有0、1、2三个级别(注:F1系列的RDP功能不支持RDP2),支持TrustZone的L5和U5还增加了一个0. 5级别。出厂时芯片的RDP级别缺省为0,即完全开放、没有保护;RDP设置为级别1时,调试端口虽然可以连接,但是受保护的各个区域(Flash,RAM,Backup RAM/register)无法通过调试端口访问,即使从system bootloader启动或者从RAM运行的代码也无法访问那些区域;RDP1状态下选项字节仍旧可以修改,因而可以回退到RDP0,但是该操作会触发全片Flash擦除;RDP2状态则会完全关闭调试端口,并且无法回到RDP1或者RDP0。STM32U5的RDP增加了OEM Key机制。设置OEM2Key可以允许使用OEM2Key从RDP2回退到RDP1,同时RDP1到RDP0.5的回退也受到OEM2Key的控制;设置OEM1Key,将使得RDP1到0的回退受到OEM1Key的控制,不能随意进行RDP降级。


L5和U5是基于CM33内核带有TrustZone的产品系列,对应也增加了一个RDP0. 5级别。RDP0.5状态能够禁止调试端口对Secure资源的访问,但依旧允许Non-Secure区域的调试,给TrustZone环境下的开发带来更多灵活性。同时RDP0.5级别时,上电缺省调试端口就处于关闭状态,只有当CPU运行至非安全状态时,调试端口才能再次被打开,因而可以基于此在L5和U5上实现安全调试机制,相关更多内容请参考实战经验文章:使用STM32L5的TrustZone特性控制调试端口访问,保护片上代码安全

RDP1、RDP2可以提供基本的代码和IP保护功能,防止设备出厂后片内代码和数据从调试端口被任意获取获取。


PCROP私有代码保护

PCROP提供了一个额外层次的代码保护,PCROP可以设置内部Flash的指定区域只能进行取指令操作,而无法进行数据读访问,也不能修改或擦除,也就是说无论是通过调试器还是芯片运行的代码(包括运行在PCROP区域内部的代码本身)都无法以数据访问的形式读取PCROP保护区域的内容(包括里面的指令和数据)。

PCROP的常见用途是防止恶意软件窃取MCU内部的代码,PCROP保护区域的代码无法被任何软件读取,但是可以执行(以指令访问的形式被取指),其中的函数API可以被调用。PCROP同时也可以成为对数据进行保护的变通手段,这时候,需要将被保护的数据转换成一段指令,只有执行该段指令之后,数据才会被恢复到寄存器或者RAM当中。

PCROP相关资料:

应用笔记/软件包

应用笔记/软件包

AN4701

Proprietary code read-out protection on microcontrollers of   the STM32F4 Series

STM32F4系列微控制器的专有代码读取保护

F4应用笔记

AN4758

Proprietary code read-out protection on STM32L4, STM32L4+   and STM32G4 Series microcontrollers

STM32L4STM32L4plus以及STM32G4微控制器上的专有代码读保护

L4/L4+应用笔记

AN4968

Proprietary code read out protection (PCROP) on STM32F72xxx   and STM32F73xxx microcontrollers

STM32F72xF73xPCROP使用明》

F7应用笔记

AN4246

Proprietary Code Read Out Protection on STM32L1   microcontrollers

STM32L1 微控制器的专有代码读取保护

L1应用笔记

X-CUBE-PCROP

Proprietary code read-out protection (PCROP)   software expansion for STM32Cube (AN4701, AN4758 and AN4968)

《专有代码保护 (PCROP) STM32Cube软件扩展包》

PCROP扩展软件包及简介

DB2641

Proprietary code read-out protection (PCROP),   software expansion for STM32Cube

STM32Cube专有代码读保护(PCROP)软件扩展


PCROP区域函数无法被调用的问题与解决

STM32F4xx PCROP应用

代码实现PCROP清除

实战经验文章


WRP,RDP,PCROP的操作方式请参考芯片的参考手册FLASH memory protection章节的相关描述。(对应示例程序包含在各个STM32 MCU系列的STM32Cubexxx固件包里)


WRP,RDP,PCROP能够对代码、数据提供基本的保护,如果希望这种保护具有更多的灵活性,包括考虑芯片内运行的软件本身对敏感数据、代码的访问控制等,则可以进一步使用代码和系统隔离机制,参见代码/系统隔离部分的介绍。


OTFDEC(On-The-Fly Decryption)实时解密

OTFDEC功能用于保护放置于外部OSPI Flash上的代码和数据的机密性。代码和数据可以事先经过AES加密后以密文的形式存储于外部OSPI Flash,从而防止由于数据、代码明文存放于外部Flash而带来的安全风险。系统运行时,外部Flash上的密文代码和数据经由OTFDEC模块实时解密,该解密过程对CPU透明,无需额外软件参与。支持OTFDEC的STM32系列包括L5,U5,H73x/Bx


OTFDEC相关例程包含在相关STM32MCU固件包里。详细的使用方法详见芯片参考手册OTFDEC章节的相关描述,也可以参考AN5281。

应用笔记

AN5281

How to use OTFDEC for encryption/decryption   in trusted environment on STM32H7Bxxx and STM32H73xx microcontrollers

《如何使用STM32H7Bxxx和STM32H73xxx微控制器上的OTFDEC进行加解密操作》

H7 应用笔记

OTFDEC

使用STM32L5OTFDECICACHE功能实时高效运行片外Flash中的加密代码

OTFDEC_Efficiency_基于STM32H735G-DK板的验证

 

实战经验文章


1.3代码/系统隔离


MPU存储器保护单元

MPU是Cortex-M内核具备的功能,可以通过定义不同的Region(区域)设置不同地址范围的属性和CPU访问权限,例如某个地址范围是否允许执行,是否允许读或写,是否允许特权模式访问或者用户模式访问。通过合理配置和使用MPU可以实现对系统资源和代码的隔离。例如可以将非代码区的地址范围的访问权限设置不可执行;或者将Flash的某个区域设置为只允许特权模式读访问,配合代码的特权和用户模式转换,达到部分代码能够访问该资源而其余代码无直接法访问该资源的目的。使用MPU保护某段数据仅允许部分代码访问的示例程序及说明请参考相关实战经验文章:使用STM32的MPU实现代码隔离和访问控制

除F0系列外,其它STM32系列都带有MPU单元。

有关MPU的更详细内容可以参考 AN4838


应用笔记

AN4838

Managing memory   protection unit in STM32 MCUs

STM32微控制器上管理内存保护单元》

MPU 应用笔记



Firewall防火墙

利用Firewall防火墙硬件IP可以在片上Flash和RAM中隔离出一块保护区,该保护区具有唯一的入口,只有从该入口进入后防火墙隔离区域内的代码和数据才能够被执行和访问,从防火墙保护区域跳转出去之前也必须进行关闭防火墙操作才能够允许跳转,也就是说函数只能从设计允许的出口退出,除此之外任意的调用、访问和跳转都会引发系统复位。通过防火墙提供的隔离功能,部分关键的软件和数据可以放置于防火墙隔离区内,防火墙外的应用程序只能够通过防火墙提供的唯一入口函数调用防火墙内部的功能,而无法直接看到其中的代码或者数据,起到将关键操作与系统其它部分的软件隔离开的作用。


防火墙的功能是系统运行后动态开启的,而不是来自Option Byte的静态设置,但是防火墙一旦使能,则在下次复位前始终有效,且不能被禁止。


具有防火墙功能的STM32系列包括STM32L0和STM32L4。相关例程在STM32CubeL4固件包里。

 更详细的内容可以参考 下列文档


应用笔记/软件包

AN4730

Using the FIREWALL embedded in STM32L0/L4/L4+ Series MCUs   for secure access to sensitive parts of code and data

STM32L超低功耗系列MCU中嵌入的防火墙的应用手册》

应用笔记

AN4729

STM32L0/L4 FIREWALL overview

STM32L0STM32L4防火墙概述》


发现STM32防火墙的安全配置

关键数据和代码在L0上的保护_基于防火墙和PCROP

实战经验文章


防火墙使用与配置使用防火墙保护关键数据及其操作的示例可以参考 

TrustZone

STM32L5是第一个基于CM33内核带有TrustZone安全扩展(security extention)的STM32MCU产品系列,在STM32最新的STM32U5系列同样基于CM33内核并支持TrustZone。V8-M TrustZone及其在STM32L5/U5上的系统级实现提供了更加完整和灵活的隔离功能。CPU的运行区分安全和非安全状态,存放在Flash, RAM上的代码和数据被分配到安全和非安全区,允许CPU安全或者非安全状态下的访问,除此之外,系统的各个外设以及CPU之外的Bus Master也都能够被赋予安全和非安全属性,这样就意味着安全区所管理的不仅仅只有代码和数据,还可以包含关键外设及其对应的中断等等。基于TrustZone提供的隔离功能,可以在MCU上实现可信执行环境,关键代码与操作置于可信执行环境内,避免系统的关键资源因为应用软件可能带有的脆弱性而受到攻击。

关于V8M-TZ的具体细节,可以参考ARM相关的文档;STM32L5/U5的TZ系统架构等可以参考STM32L5/U5的参考手册,以及相关应用笔记

 

应用笔记

AN5347

STM32L5 Series TrustZone® features

STM32L5TrustZone特性》

TruzeZone

AN5421

Getting started with STM32L5 Series microcontrollers and   TrustZone® development

《基于STM32L5TrustZone发入门体验》

AN5600

AN5600:   STM32L5 Series GPIO usage with TrustZone®

《TrustZone架构下使用STM32L5系列GPIO的使用》

 

安全用户存储区

安全用户存储区是STM32 MCU内部Flash上的一块特殊存储区域,该区域在上电复位后可以访问,软件可以通过设置寄存器打开对该区域的保护功能,一旦保护打开,该区域将变得完全不可访问,这种保护在整个Power Cycle都有效且不能撤销,直到下一次复位。

目前支持安全存储区功能的STM32产品系列包括G0,G4,H7,L5、U5。

(注:在不同系列中,类似功能的名称可能略有不同,例如H7系列中叫做Secure User Memory/area,G0/G4中叫做Secure Memory Area,L5/U5中叫做Hide Protection(HDP) area)

受保护的安全存储区的大小位置可以通过芯片的Option Byte进行设置,属于静态设置,上电自动生效,不需要软件进行配置;保护的打开需要通过软件动态使能。安全存储区域的一个典型用法是将每次上电只运行一次的代码和数据放在该区域,例如安全启动的代码,在跳转到普通应用程序区域之前可以将安全存储区的保护使能,则跳转后安全启动代码及其使用的Flash上的数据(例如密钥)变得完全不可见,可以使得启动代码与应用程序完全隔离开,避免应用程序访问任何启动阶段使用的敏感代码与数据。这个功能可以用于实现DICE机制。

安全用户存储区的详细内容请参考芯片参考手册相关章节的描述

  • STM32G0、G4:Embedded Flash memory (FLASH)章节有关Securable memory area的描述

  • STM32L5、U5:Embedded Flash memory (FLASH) 章节有关HDP(Hide Protect)的描述

  • STM32H7:  Embedded Flash memory (FLASH) 章节有关Secure access mode章节的描述

H7系列相关应用笔记


应用笔记

AN5601

HDP secure area   for STM32H7B3xx microcontrollers

《STM32H7B3xx微控制器的HDP安全存储区》

STM32H7

应用笔记



STM32H7系列的安全存储区还能带来额外的调试端口保护功能,在RDP0的情况下也可以产生上电调试端口缺省关闭的效果,且相比RDP2更灵活,具体内容可以参考相关实战经验文章:使用STM32H7安全用户存储区

1.4启动入口限定(锁定启动地址)


Unique Boot Entry唯一启动入口

唯一启动地址功能可以用于安全启动的实现,保证每次启动时总是运行安全启动代码,使得安全启动代码对系统和后续代码的校验无法被绕过。唯一启动入口的实现在不同的STM32系列上不尽相同。

  • STM32G0、G4系列(G0x1,G4x1)具有Boot_Lock启动入口锁定功能。G0/G4设置Boot Lock+RDP1将使得芯片只能从用户Flash首地址启动,且在G0系列中该组合将使得调试端口上电缺省无法连接,类似于RDP2的效果;

  • STM32L5和U5也带有BootLock功能,在TZ使能后方可使用。一旦设置Boot Lock选项字节,则系统总是从SECBOOTADDR配置的安全区Flash地址启动(可以不是Flash首地址)。需要注意的是:STM32L5的BOOT_LOCK功能一旦设置无法取消,且SECBOOTADDR内容也不能再修改。

  • STM32H7带有Security安全功能的系列(例如H75x,H7Bx,H73x),当Security功能被使能的时候,系统将总是从RSS(Root Security Service)启动,配合安全用户存储区以及BOOTADDR配置,可以锁定用户代码总是从安全用户存储区的代码地址开始运行;

  • STM32WL系列也带有BOOT_LOCK功能,能够锁定内核启动地址。

  • STM32 F、L及WB系列可以通过设置RDP2确保每次启动总是从内部Flash地址开始执行。


关于STM32的各个系列的启动模式,详见芯片参考手册相关章节的描述

1.5Anti-Tamper防篡改检测


Anti-Tamper的目的是检测电路板级别的物理攻击,并且在检测到入侵事件时自动清除敏感数据。Anti-Tamper包括静态检测和动态检测(STM32L5、U5系列支持动态检测),配合电路板上的布线和开关一起使用,用于检查是否出现设备外壳被非法打开的情况。静态检测针对防篡改引脚的电平或边沿变化。动态检测则使用成对的检测管脚,输出管脚会持续输出随机序列,输入管脚将检查收到的序列与输出的序列是否匹配,相比静态检测更难被绕过。

除了防篡改引脚,异常检测的范围还包括对时钟频率,温度以及电压的监测,任何的异常都将自动引发(存储于后备域寄存器或RAM的)敏感数据的擦除,并触发相应的中断,由应用程序作进一步处理,例如保存异常检测事件,用作后续的审计等。

Anti-Tamper功能在很多STM32系列中都支持,具体请参考芯片参考手册Tamper and backup registers (TAMP)相关章节的描述。

1.6Crypto密码学单元


  • 密码学相关的功能单元包括TRNG真随机数发生器,AES、CRYP加解密引擎,HASH加速器,PKA公钥算法加速器。

  • TRNG模块在除F0,F1,F3,L1外的其他系列产品上都有支持,真随机数发生器能够产生符合随机性要求的随机数,作为密码学操作、加密通信等的基础

  • STM32 MCU中的对称密钥算法加速器硬件有两种,AES或者CRYP引擎。CRYP引擎包含AES及DES/TDES算法,除F0,F1,F3以外,其它的系列均带有AES或者CRPT引擎(具体请参见具体型号的相关文档),支持加解密、各种Chaining Mode以及秘钥派生等算法。STM32U5系列还增加了SAES模块,具备侧信道攻击防御能力。

  • HASH模块能够进行SHA-1,SHA-224,SHA-256以及HMAC操作,带有HASH硬件模块的系列包括F4,F7,L4,H7,L5,U5

  • PKA公钥算法加速器主要提供公钥算法(RSA,DH,ECC)相关的密码学运算功能,无需其它软硬件参与额外的运算。PKA模块能够大幅度提高公钥算法相关密码学运算的速度,释放CPU的运算资源,并降低运算所需要的功耗。目前带有PKA公钥算法加速器的系列包括WB,WL,L4Q、L5和U5。其中STM32U5系列的PKA硬件单元除了运算性能进一步提升,还兼具侧信道攻击防御能力。


密码学单元的具体使用方法,请参考芯片参考手册AES,CRYP,HASH,TRNG,PKA相关章节的描述。密码学硬件单元使用例程包含在对应STM32系列的Cube固件包里。

X-CUBE-CRYPTOLIB软件包中也包含使用硬件加速版本的库,具体参见UM1924 STM32加密库使用说明

相关文档资料

用户手册/演示文稿

UM1924

STM32 crypto library

《STM32加密库》

用户手册

CAVP认证

X-CUBE-CRYPTOLIB FIPS CAVP certification

演示文稿

AN4230

STM32 microcontroller random number generation validation   using the NIST statistical test suite

《使用NIST统计测试套件验证STM32微控制器随机数生成》

应用笔记

 

1.7安全存储


STM32不同的MCU系列有不同的硬件可以实现安全存储。

STM32L0和STM32L4系列带有Firewall硬件单元,配合PCROP,可以将密钥和使用密钥的crypto代码与其余部分的应用代码隔离开,实现密钥的安全存储与使用。详细内容请参考相关实战经验文档:关键数据和代码在L0上的保护_基于防火墙和PCROP

STM32H7带有crypto的型号中,通过使能Security选项字节,结合安全用户存储区、PCROP,以及硬件CRYPT单元密钥寄存器只写特性,在Boot阶段将密钥加载至Crypto硬件单元,跳转到应用程序后密钥不可见,但应用内可以使用CRYPT硬件进行加解密操作。详细内容请参考相关实战经验文档:使用STM32H7安全新特性实现敏感数据的安全存储与使用

STM32WB提供CKS(Customer Key Storage)功能,利用M0+与M4之间的双核隔离特性,在M0+侧提供AES密钥存储功能,M4上运行的应用代码可以使用密钥进行加解密操作,但是无法获取密钥数据本身。详细内容请参考相关实战经验文档:STM32WB的密钥安全存储和使用

STM32L5和U5系列支持TrustZone架构,利用TrustZone带来的系统隔离特性,配合HDP,AES硬件单元等实现对密钥的保护,同时在软件上提供基于TF-M软件框架的安全存储服务。有关TF-M的更多内容可以参考UM2671和UM2851

应用笔记

AN4730

Getting started with STM32CubeL5 TFM application

《STM32L5 TF-M应用入门

应用笔记

AN4729

Getting started with STM32CubeU5 TFM application

《STM32U5 TF-M应用入门

AN5185

ST firmware upgrade services for STM32WB Series

STM32WB系列的ST固件升级服务

应用笔记STM32WB CKS


STM32U5上,除了STM32L5已经提供的功能外,还新增加了HUK和SAES (Secure AES),HUK是硬件唯一密钥,出厂已经预置在每一颗U5芯片中,这个密钥直接关联到SAES模块,CPU和DMA都无法访问,提供了一个基于硬件的一机一密的密钥安全存储的功能。相关详细说明请参考U5参考手册SAES章节的描述。使用HUK和SAES对密钥进行加密存储和安全使用的参考例程包含在U5的Cube软件包中。


培训资源


 

培训课程及资料

STM32信息安全线上课程

视频课程

STM32的存储与执行保护

培训课件

STM32的加解密硬件模块

STM32G0的安全功能

STM32加解密技术

STM32软硬件安全技术

STM32 安全技术Hands-On(基于STM32G0)

STM32通用MCU信息安全培

STM32L5产品培训:STM32L5的系统新架构

STM32L5产品培训:从Cortex-M33内核认识TrustZone

STM32L5产品培训:STM32CubeMX_支撑TZ应用

STM32L5产品培训:TrustZone环境下新的用户编程模型

STM32L5_Security培训_part1_整体介绍_低功耗_高性能

STM32L5_Security培训_part2_启动_内核_trustzone

STM32L5_Security培训_part3_flash_sram_OB_外设_安全服务

STM32L5_Security培训_part4_生态系统

 


微信扫一扫