垂直应用

STM32信息安全概览





目录

STM32Trust

安全启动与安全更新

代码保护

安全存储

密码学算法引擎

安全隔离

安全生产

安全认证与评估

参考资料与培训资源

文档资料

培训资源

视频资源

 

STM32 Trust

随着物联网以及智能化产品的不断涌现,信息安全问题也日渐受到关注。信息安全是一个从系统层面需要统一考虑的问题:在提供服务的云端、通信管道、边缘及终端节点都需要部署完整的安全策略,终端节点设备不应该因为资源和处理能力有限而成为整个系统信息安全的薄弱环节。STM32Trust正是在这样的背景下应运而生,目标是帮助客户在其新产品的设计中能够加强安全性,并充分利用STM32MCU硬件特性及其生态系统资源来实现安全设计。


STM32Trust 是一个集合了信息安全知识、生态系统和安全服务的综合的安全架构,基于多层次的安全策略,提供针对代码和执行保护在内的完整工具。STM32Trust基于客户实际使用场景中对信息安全的需求,提出了安全功能的概念,来更好地契合来自客户的实际需求以及信息安全相关规范的共性要求,帮助客户快速找到自己的应用中所需要的安全功能。

 Picture1.png


一些典型的安全功能需求:

-安全启动

-安全固件更新

-代码保护

-安全存储

-密码学算法引擎

-安全隔离

-安全生产

-


安全启动与安全更新

STM32提供安全启动与安全更新参考实现,分为两大类,X-Cube-SBSFU是针对Cortex V6/V7内核的STM32MCU参考实现软件包,TF-M SBSFU是针对基于Cortex V8M内核的参考实现。二者的具体代码不同,但是对于安全启动和安全更新所遵循的思想是一致的,也有很多共性特征,例如充分利用各个MCU系列的硬件安全特性来保证安全启动的启动入口唯一、启动代码不可修改等要求;支持不同的Crypto方案;参考实现包含的签名打包工具;支持单镜像和双镜像模式;经过第三方安全评估认证等。


 Picture2.png


安全启动与安全更新参考实现在STM32各个系列的支持情况

-X-CUBE-SBSFU支持除了F0,F1,F2,F3以外的所有非CM33内核的系列

-TF-M SBSFU支持CM33带TrustZone内核的系列,目前包括L5和U5

更多关于安全启动与安全更新的内容请点击 STM32 安全启动与安全固件更新参考实现


 Picture3.png


代码保护



代码保护的一个最基本的方面是调试端口访问控制,避免代码从调试端口被任意读出。

读保护RDP是多数STM32都支持的一个基本功能,从安全的角度考虑推荐使用RDP及别2,将调试端口永久关闭。

比较新的系列除了RDP2还有其他更加灵活的功能,即使不使用RDP2同样可以达到上电缺省关闭调试访问的效果,例如

-G0系列的RDP1+BOOT_LOCK功能

-H7系列的Security+安全用户存储区功能

-L5和U5的TrustZone+RDP0.5(L5和U5系列可以在RDP级别0.5的时候关闭安全侧的调试功能,实现安全调试,U5还增加了OEMKey功能,可以用Key保护RDP的降级)


Picture4.png

 

代码保护需要考虑的另外一个场景是部分代码和数据需要放在片外存储器的情况。

STM32也部分系列带有OTFDEC(On The Fly DECryption)硬件,OTFDEC模块在Bus Matrix 与OSPI之间,可以实时地解密外部Flash上的密文代码和数据,只需要设置好相应的区域、密钥等等,OTFDEC就可以自动解密被访问的密文数据,这个过程对CPU和DMA透明,无需额外的软件参与解密,不需要将解密数据加载到内部RAM,可以直接运行片外Flash上的加密代码。

OTFDEC模块也支持加密,但不是实时加密,数据首先被加密到RAM中,需要另外将RAM中的密文写回外部FLASH。


安全存储


敏感数据存储通常的做法是加密存储, 其中密钥的安全存储和使用是关键,需要考虑来自芯片外部和内部的攻击

外部攻击主要依赖于调试端口访问控制和芯片生命周期管理

来自芯片内部攻击主要是逻辑攻击,考虑的是软件漏洞可能带来的风险。通常通过硬件隔离机制,避免关键数据被代码任

意访问(包括存在风险的代码)

 Picture5.png


STM32不同的MCU系列实现安全存储的方式不尽相同

STM32L0和STM32L4系列带有Firewall硬件单元,配合PCROP,可以将密钥和使用密钥的crypto代码与其余部分的应用代码隔离开,实现密钥的安全存储与使用

STM32H7带有crypto的型号中,通过使能Security选项字节,结合安全用户存储区、PCROP,以及硬件CRYPT单元密钥寄存器只写特性,在Boot阶段将密钥加载至Crypto硬件单元,跳转到应用程序后密钥不可见,但应用内可以使用CRYPT硬件进行加解密操作。

STM32WB提供CKS(Customer Key Storage)功能,利用M0+与M4之间的双核隔离特性,在M0+侧提供AES密钥存储功能,M4上运行的应用代码可以使用密钥进行加解密操作,但是无法获取密钥数据本身。

STM32L5系列支持TrustZone架构,利用TrustZone带来的系统隔离特性,配合HDP,AES硬件单元等实现对密钥的保护,同时在软件上提供基于TF-M软件框架的安全存储服务。

STM32U5上,除了STM32L5已经提供的功能外,还新增加了HUK和SecureAES,HUK是硬件唯一密钥,出厂已经预置在每一颗U5芯片中,这个密钥直接关联到SAES模块,CPU和DMA都无法访问,提供了一个基于纯硬件的一机一密的密钥安全存储的功能。


关于存储保护相关的硬件特性的更多内容请点击STM32信息安全硬件特性


密码学算法引擎


软件方面,STM32提供支持所有系列的软件密码算法库X-CUBE-CRYPTOLIB,最新的V4版本新增加了对SM等算法的支持,同时带来了更简洁易用和更高运行效率的算法实现。

Cryptolib软件包下载链接https://www.st.com/x-cube-cryptolib

关于最新版本密码学算法库的更多内容请点击 STM32 密码学算法库


硬件方面,很多STM32系列都带有HASH,AES和TRNG硬件模块,较新的L4Q、WB、WL、L5和U5系列还带有PKA(Public Key Accelerator)公钥算法加速器硬件,支持RSA和ECC相关运算;U5上的SAES以及改进的PKA模块还增加了对侧信道攻击

的防御能力,进一步提高算法引擎的安全性。

 Picture6.png



安全隔离


隔离到底解决什么问题,有什么用处?

-首先,隔离主要针对逻辑攻击,它的一个假设前提是软件可能存在漏洞,软件漏洞可能被利用,进而导致关键信息收到损害,如被盗取,被修改等等

-隔离的思想首先是区分资源不同的访问属性,软件运行在不同状态时对资源的访问权限是不同的,这里的资源可能是memory,可能是外设,甚至是内核的中断和寄存器等等,这样就可以把片上运行的软件进行区分,关键资源只允许关键的一小部分代码访问,其他应用程序的部分即使存在漏洞,比如说有buffer overflow的问题,可能导致恶意代码的注入和执行,即使有这样的情况,那些关键资源也还是处在一个安全的状态,不能够被恶意代码获取。这样隔离就可以降低软件漏洞可能带来的风险

 Picture7.png

STM32MCU具有哪些隔离机制?


 Picture8.png

-绝大部分的STM32 MCU(除了M0内核的MCU以外)内核本身都带有的MPU单元,这个单元可以划分出几个region,每个region可以设置不同的访问属性,配合内核的User和Privilege模式,能够实现对关键资源的访问控制

-除了MPU以外,某些STM32系列还有一些特别的硬件单元,可以起到隔离的作用,比如

-L0、L4的Firewall,Firewall可以保护Flash和RAM中的一部分,CPU和DMA都无法直接访问Firewall保护区域里面的内容,只能通过唯一的入口函数地址以函数调用的方式使用Firewall里的代码提供的服务

-部分系列(例如G0, G4, H7, L5和U5)还带有一个叫做安全用户存储区、或者隐藏Flash区的功能,这段特殊Flash区的大小可以由Option Byte进行配置,运行期间可以通过寄存器打开对这段Flash区域的保护,保护使能后在复位前将无法再次访问其中的任何内容

-还有一类是双核隔离机制,例如WB和WL

-M0+和M4两个内核核对Flash, SRAM,选项字节以及Crypto等外设具有不同的访问权限。WB的CKS就是基于双核隔离实现的密钥存储服务。

-ST最新的CM33内核系列的STM32 MCU采用的是TrustZone的隔离技术

-TrustZone技术将所有系统资源,从内核到memory到外设都可以区分为安全和非安全两种属性,代码在运行的时候有安全和非安全两种状态,对不同安全属性的资源也有着不同的访问权限

-STM32基于TrustZone的系统级隔离机制有着非常大的灵活性,不仅仅可以实现简单的秘钥存储以及crypto操作,还可以在安全区中运行更复杂的逻辑,比如一段指纹比对或者身份认证的算法等等


安全生产


安全生产主要针对的是代码或者数据交由第三方工厂进行烧写的情况可能存在的风险,例如数据盗取,数据篡改以及过量生产

STM32针对安全生产提供的解决方案是SFI,Secure  Firmware Install

-这个功能首先从芯片上提供支持,MCU中会预置SFI相关的代码以及密钥对,目前支持SFI的系列包括L4的一个型号,H7的部分型号,L5和U5的全系列等

-OEM可以使用自己的秘钥对需要烧写的binary进行加密,然后将加密密钥导入HSM,ST提供的HSM是银行卡安全级别的智能卡,OEM可以将HSM和加密后的binary密文交付工厂进行烧写

-烧写的过程需要配合支持SFI的烧写工具,ST提供的工具是STM32CubeProgrammer,STM32TrustPackageCreator是另一个PC工具,用于配置HSM以及加密OEM的binary,生成加密后的SFI文件

-通过SFI进行烧写全过程没有明文的binary出现,且带有完整性校验,HSM还可以进行烧录计数,进行产量控制,避免过量生

产情况的发生



有关SFI的更多内容请点击 STM32 安全生产方案



安全认证与评估


 Picture10.png



参考资料与培训资源


文档资料



STM32信息安全总览

AN5156

Introduction to STM32 microcontrollers   security

STM32系列微控制器的安全性介绍》

应用笔记

码保护相关资料

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应用笔记

DB2641

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

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

PCROP扩展软件包简介

AN5281

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

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

H7 应用笔记

 

/统隔离相关资料

AN4730

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

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

安全防火Firewall

应用笔记

AN4729

STM32L0/L4 FIREWALL overview

STM32L0STM32L4防火墙概述》

AN4838

Managing memory protection unit in STM32 MCUs

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

MPU

应用笔记

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的使用》

AN5601

HDP secure area   for STM32H7B3xx microcontrollers

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

STM32H7

应用笔记

随机数与密码学算法相关资料

UM1924

Legacy STM32 cryptographic library

STM32加密

Cryptolib V3

户手册

CAVP认证

X-CUBE-CRYPTOLIB FIPS CAVP certification

演示文稿

AN4230

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

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

应用笔记

 

安全动与安全固件更新软件包相关资料

AN5056

Integration guide for the X-CUBE-SBSFU   STM32Cube Expansion Package

X-CUBE-SBSFU STM32Cube扩展包集成指南》

X-CUBE-SBSFU

UM2262

Getting started   with the X-CUBE-SBSFU STM32Cube Expansion Package

X_CUBE_SBSFU安全动和固件更新软件入门》

AN5447

Overview of Secure   Boot and Secure Firmware Update solution on Arm® TrustZone® STM32L5 Series   microcontrollers

STM32L5的安全动和安全固件升级方案介绍

STM32L5 SBSFU

UM2671

Getting started   with STM32CubeL5 TFM application

《STM32L5 TF-M应用入门》

STM32L5 TF-M

UM2851

Getting started   with STM32CubeU5 TFM application

STM32U5 TF-M应用入门

STM32U5 TF-M

UM2745

STM32CubeL5 TFM   security guidance for SESIP profile for Arm® PSA Level 2 chip

STM32L5 TF-M针对SESIP和Arm® PSA Level2认证的安全指南

STM32L5 TF-M

 

安全生产相关资料

AN4992

STM32 MCUs secure firmware install (SFI)   overview

《安全固件安装(SFI)概述》

安全固件安装

AN5054

Secure programming using STM32CubeProgrammer

《使用STM32CubeProgrammer进行安全编程》

安全烧录

UM2238

STM32 Trusted Package Creator tool software   description

STM32 Trusted Package Creator软件工具描述》

安全包生成工具

UM2237

STM32CubeProgrammer software description

STM32CubeProgrammer软件说明》

CubeProgrammer使用手册

DB4265

Hardware security module for secure firmware installation

用于安全烧录的硬件安全模块HSM

STM32HSM-V2

DB3919

Hardware security module for secure programming

用于安全烧录的硬件安全模块HSM

STM32HSM-V1

简要说明

 

其他

AN2606

STM32 microcontroller system memory boot mode

STM32™ 微控制器系统存储器自举模式

动模式

AN3371

Using the hardware real-time clock (RTC) in   STM32 F0, F2, F3, F4 and L1 series of MCUs

《如何使用STM32硬件RTC

电源后备域与防入侵检测

AN5185

ST firmware upgrade services for STM32WB Series

STM32WB系列的ST固件升级服务

应用笔记

STM32WB CKS

OTFDEC

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

实战经验文章

OTFDEC_Efficiency_基于STM32H735G-DK板的验证

调试保护

使用STM32L5TrustZone特性控制调试端口访问,保护片上代码安全

使用STM32H7安全用户存储区

隔离访问

安全存储

使用STM32MPU实现代码隔离和访问控制

理解与应用MPU的特权与用户模式

如何根据应用需求调整STM32L5memory partition

使用STM32H7安全新特性实现敏感数据的安全存储与使用

STM32WB的密钥安全存储和使用

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

PCROP

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

STM32F4xx   PCROP应用

代码实现PCROP清除

Firewall

发现STM32防火墙的安全配置

Crypto

STM32 Cryptolib 使用技巧——AES GCM 解密认证失败问题的研究

基于STM32加密库开发比特币应用的补充说明

CSS

时钟安全系统的应用(LSE篇)

安全启动

一步一步使用STM32安全启动与固件更新

 

 训资源


训课程及资料

综合

- 信息安全基础

- 密码学基础

-   STM32硬件安全特性

- 安全启动与安全固件更新

STM32信息安全线上课程

视频课程

信息安全基础

信息安全的概念和方法论

培训课件

STM32安全的概念与系统分析方法

密码学基础

密码学基本原理_上

密码学基本原理_中

密码学基本原理_下

密码学原理的应用_TLS

STM32硬件安全特性

STM32的加解密硬件模块

STM32的存储与执行保护

STM32的加解密硬件模块

STM32G0的安全功能

STM32加解密技术

STM32软硬件安全技术

安全启动与安全固件更新

SBSFU原理介绍

SBSFU初体验

SBSFU在STM32G0上的实现

X_Cube_SBSFU和STM32G0

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

安全服务/解决方案

安全固件烧录_SFI

STM32硬件安全特性

STM32通用MCU信息安全培训

 视频资源


视频资源

调试端口保护

H753安全调试理论介绍

H753安全调试操作演示

L5安全调试介绍+Demo演示

本地化视频资源

安全存储

H753安全存储和使用介绍

H753安全存储和使用Demo

关键代码和数据在L0上的保护

安全生产

SFI 固件安全烧录介绍

STM32H753 SFI操作演示

STM32L5 SFI操作演示

  STM32U5加密信息安全

 STM32U5 低功耗+安全新旗舰

 STM32U5 基于TF-M的安全解决方案演示