STM32信息安全概览
STM32信息安全概览
STM32Trust
安全启动与安全更新
代码保护
安全存储
密码学算法引擎
安全隔离
安全生产
安全认证与评估
参考资料与培训资源
文档资料
培训资源
视频资源
随着物联网以及智能化产品的不断涌现,信息安全问题也日渐受到关注。信息安全是一个从系统层面需要统一考虑的问题:在提供服务的云端、通信管道、边缘及终端节点都需要部署完整的安全策略,终端节点设备不应该因为资源和处理能力有限而成为整个系统信息安全的薄弱环节。STM32Trust正是在这样的背景下应运而生,目标是帮助客户在其新产品的设计中能够加强安全性,并充分利用STM32MCU硬件特性及其生态系统资源来实现安全设计。
STM32Trust 是一个集合了信息安全知识、生态系统和安全服务的综合的安全架构,基于多层次的安全策略,提供针对代码和执行保护在内的完整工具。STM32Trust基于客户实际使用场景中对信息安全的需求,提出了安全功能的概念,来更好地契合来自客户的实际需求以及信息安全相关规范的共性要求,帮助客户快速找到自己的应用中所需要的安全功能。
一些典型的安全功能需求:
-安全启动
-安全固件更新
-代码保护
-安全存储
-密码学算法引擎
-安全隔离
-安全生产
-…
STM32提供安全启动与安全更新参考实现,分为两大类,X-Cube-SBSFU是针对Cortex V6/V7内核的STM32MCU参考实现软件包,TF-M SBSFU是针对基于Cortex V8M内核的参考实现。二者的具体代码不同,但是对于安全启动和安全更新所遵循的思想是一致的,也有很多共性特征,例如充分利用各个MCU系列的硬件安全特性来保证安全启动的启动入口唯一、启动代码不可修改等要求;支持不同的Crypto方案;参考实现包含的签名打包工具;支持单镜像和双镜像模式;经过第三方安全评估认证等。
安全启动与安全更新参考实现在STM32各个系列的支持情况
-X-CUBE-SBSFU支持除了F0,F1,F2,F3以外的所有非CM33内核的系列
-TF-M SBSFU支持CM33带TrustZone内核的系列,目前包括L5和U5
更多关于安全启动与安全更新的内容请点击 STM32 安全启动与安全固件更新参考实现
代码保护的一个最基本的方面是调试端口访问控制,避免代码从调试端口被任意读出。
读保护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的降级)
代码保护需要考虑的另外一个场景是部分代码和数据需要放在片外存储器的情况。
STM32也部分系列带有OTFDEC(On The Fly DECryption)硬件,OTFDEC模块在Bus Matrix 与OSPI之间,可以实时地解密外部Flash上的密文代码和数据,只需要设置好相应的区域、密钥等等,OTFDEC就可以自动解密被访问的密文数据,这个过程对CPU和DMA透明,无需额外的软件参与解密,不需要将解密数据加载到内部RAM,可以直接运行片外Flash上的加密代码。
OTFDEC模块也支持加密,但不是实时加密,数据首先被加密到RAM中,需要另外将RAM中的密文写回外部FLASH。
敏感数据存储通常的做法是加密存储, 其中密钥的安全存储和使用是关键,需要考虑来自芯片外部和内部的攻击
•外部攻击主要依赖于调试端口访问控制和芯片生命周期管理
•来自芯片内部攻击主要是逻辑攻击,考虑的是软件漏洞可能带来的风险。通常通过硬件隔离机制,避免关键数据被代码任
意访问(包括存在风险的代码)
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模块还增加了对侧信道攻击
的防御能力,进一步提高算法引擎的安全性。
隔离到底解决什么问题,有什么用处?
-首先,隔离主要针对逻辑攻击,它的一个假设前提是软件可能存在漏洞,软件漏洞可能被利用,进而导致关键信息收到损害,如被盗取,被修改等等
-隔离的思想首先是区分资源不同的访问属性,软件运行在不同状态时对资源的访问权限是不同的,这里的资源可能是memory,可能是外设,甚至是内核的中断和寄存器等等,这样就可以把片上运行的软件进行区分,关键资源只允许关键的一小部分代码访问,其他应用程序的部分即使存在漏洞,比如说有buffer overflow的问题,可能导致恶意代码的注入和执行,即使有这样的情况,那些关键资源也还是处在一个安全的状态,不能够被恶意代码获取。这样隔离就可以降低软件漏洞可能带来的风险
STM32MCU具有哪些隔离机制?
-绝大部分的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 安全生产方案
STM32信息安全总览 |
||
Introduction to STM32 microcontrollers security 《STM32系列微控制器的安全性介绍》 |
应用笔记 |
代码保护相关资料 |
||
Proprietary code read-out protection on microcontrollers of the STM32F4 Series 《STM32F4系列微控制器的专有代码读取保护》 |
F4应用笔记 |
|
Proprietary code read-out protection on STM32L4, STM32L4+ and STM32G4 Series microcontrollers 《STM32L4和STM32L4plus以及STM32G4微控制器上的专有代码读保护》 |
L4/L4+应用笔记 |
|
Proprietary code read out protection (PCROP) on STM32F72xxx and STM32F73xxx microcontrollers 《STM32F72x、F73x的PCROP使用说明》 |
F7应用笔记 |
|
Proprietary Code Read Out Protection on STM32L1 microcontrollers 《STM32L1 微控制器的专有代码读取保护》 |
L1应用笔记 |
|
Proprietary code read-out protection (PCROP), software expansion for STM32Cube 《STM32Cube的专有代码读保护(PCROP)软件扩展》 |
PCROP扩展软件包简介 |
|
《如何使用STM32H7Bxxx和STM32H73xxx微控制器上的OTFDEC进行加解密操作》 |
H7 应用笔记 |
代码/系统隔离相关资料 |
||
《STM32L超低功耗系列MCU中嵌入的防火墙的应用手册》 |
安全防火墙Firewall 应用笔记 |
|
《STM32L0和STM32L4防火墙概述》 |
||
Managing memory protection unit in STM32 MCUs 《STM32微控制器上管理内存保护单元》 |
MPU 应用笔记 |
|
STM32L5 Series TrustZone® features 《STM32L5的TrustZone特性》 |
TruzeZone |
|
Getting started with STM32L5 Series microcontrollers and TrustZone® development 《基于STM32L5的TrustZone开发入门体验》 |
||
AN5600: STM32L5 Series GPIO usage with TrustZone® 《TrustZone架构下使用STM32L5系列GPIO的使用》 |
||
HDP secure area for STM32H7B3xx microcontrollers 《STM32H7B3xx微控制器的HDP安全存储区》 |
STM32H7 应用笔记 |
随机数与密码学算法相关资料 |
||
Legacy STM32 cryptographic library 《STM32加密库》 |
Cryptolib V3 用户手册 |
|
演示文稿 |
||
STM32 microcontroller random number generation validation using the NIST statistical test suite 《使用NIST统计测试套件验证STM32微控制器随机数生成》 |
应用笔记 |
安全启动与安全固件更新软件包相关资料 |
||
Integration guide for the X-CUBE-SBSFU STM32Cube Expansion Package 《X-CUBE-SBSFU STM32Cube扩展包集成指南》 |
X-CUBE-SBSFU |
|
Getting started with the X-CUBE-SBSFU STM32Cube Expansion Package 《X_CUBE_SBSFU安全启动和固件更新软件入门》 |
||
《STM32L5的安全启动和安全固件升级方案介绍》 |
STM32L5 SBSFU |
|
Getting started with STM32CubeL5 TFM application 《STM32L5 TF-M应用入门》 |
STM32L5 TF-M |
|
Getting started with STM32CubeU5 TFM application 《STM32U5 TF-M应用入门》 |
STM32U5 TF-M |
|
STM32CubeL5 TFM security guidance for SESIP profile for Arm® PSA Level 2 chip 《STM32L5 TF-M针对SESIP和Arm® PSA Level2认证的安全指南》 |
STM32L5 TF-M |
安全生产相关资料 |
||
STM32 MCUs secure firmware install (SFI) overview 《安全固件安装(SFI)概述》 |
安全固件安装 |
|
Secure programming using STM32CubeProgrammer 《使用STM32CubeProgrammer进行安全编程》 |
安全烧录 |
|
STM32 Trusted Package Creator tool software description 《STM32 Trusted Package Creator软件工具描述》 |
安全包生成工具 |
|
STM32CubeProgrammer software description 《STM32CubeProgrammer软件说明》 |
CubeProgrammer使用手册 |
|
Hardware security module for secure firmware installation 《用于安全烧录的硬件安全模块HSM》 |
简要说明 |
|
Hardware security module for secure programming 《用于安全烧录的硬件安全模块HSM》 |
简要说明 |
其他 |
||
启动模式 |
||
Using the hardware real-time clock (RTC) in STM32 F0, F2, F3, F4 and L1 series of MCUs 《如何使用STM32硬件RTC》 |
电源后备域与防入侵检测 |
|
ST firmware upgrade services for STM32WB Series 《STM32WB系列的ST固件升级服务》 |
应用笔记 STM32WB CKS |
|
OTFDEC |
实战经验文章 |
|
调试保护 |
||
隔离访问 安全存储 |
||
PCROP |
||
Firewall |
||
Crypto |
||
CSS |
||
安全启动 |
培训课程及资料 |
||
综合 - 信息安全基础 - 密码学基础 - STM32硬件安全特性 - 安全启动与安全固件更新 |
视频课程 |
|
信息安全基础 |
培训课件 |
|
密码学基础 |
||
STM32硬件安全特性 |
||
安全启动与安全固件更新 |
||
安全服务/解决方案 |
||
STM32硬件安全特性 |
视频资源 |
||
调试端口保护 |
本地化视频资源 |
|
安全存储 |
||
安全生产 |
||
STM32U5加密信息安全 |