STM32 安全生产方案——安全固件安装SFI
1概述
2SFI安全烧录流程及其配套工具
安全烧录流程
支持安全烧录的STM32 MCU
安全烧录工具
3参考资料与培训资源
文档资料
相关培训资源
嵌入式设备固件的安全是非常基础的安全需求,一方面固件本身作为软件IP有其价值,OEM不希望他开发的固件被窃取进而损害其利益;另一方面,可信的固件也是嵌入式设备信息安全的基础,因为如果不能保证设备所运行的固件的安全性,设备应用的安全则无从谈起。
设备固件的安全性需要从多个环节去考量:
设备使用期间的固件安全通常通过安全启动和安全固件更新来保证;
设备交付前的调试端口保护一般通过工厂烧录环节与固件烧录一并完成,因而这个部分也依赖工厂环境和烧录过程的安全性;
工厂生产时应当在安全可信的环境进行固件烧录;当固件交付于第三方工厂进行烧录的时候可能会存在对固件安全风险的担忧
针对固件在生产环节的安全性问题,STM32提供安全固件安装(Secure Firmware Install)解决方案
SFI安全烧录方案主要针对安全生产中的两大类问题:
1)烧录过程中保护固件及数据的保密性和完整性;
通过端到端安全方案保护OEM固件及配置数据的机密性和完整性
需要烧录的固件和数据不以任何明文形式存在于STM32芯片之外(包括烧录器到MCU的数据线上)
密文固件同时包含校验数据,一旦出现非法修改情况可以在烧录的过程被检测到
2)防止过量生产的情况;
每一次烧录都需要产生License,License与被编程的MCU一一对应
License的产生次数受到配置在HSM中最大生产数量的限制
安全烧录流程
•OEM首先可以使用STM32TrustedPackageCreator工具将明文固件及配置数据加密打包成可以用于SFI安全烧录的密文固件.sfi文件,固件加密使用的密钥KEY以及IV由OEM自行指定和保管
•OEM通过STM32TrustedPackageCreator工具将用于加密固件的密钥KEY以及最大允许编程数量MAXCOUNT写入HSM;配置好的HSM无法读出其中的KEY或者更改MAXCOUNT
•OEM将加密后的固件.sfi文件连同配置过的HSM一起交付工厂进行生产烧录
工厂使用支持SFI安全烧录的烧录器将密文固件写入MCU,MCU在内部解密恢复原始明文固件内容并写入Flash
支持SFI安全烧录的STM32 MCU中包含一个公钥算法(ECC)密钥对、一个ST签名的数字证书和和一段配合SFI安全烧录功能的代码,这些密钥和代码在ST的工厂里已经事先预置到MCU芯片当中
在安全烧录的过程中,烧录器需要从MCU中读取芯片数字证书,该证书将通过HSM进行验证
验证通过的情况下HSM将会产生一段License数据,该License中包含用于解密固件的密钥KEY,固件密钥KEY以密文形式存在,HSM使用MCU数字证书中的公钥对固件密钥进行加密
License传递到MCU中之后,MCU能够使用自身携带的私钥对License内容进行解密,进而恢复出固件加密密钥,最终能够对固件密文进行解密,得到原始的明文固件内容并写入FLASH
同样的License无法用在另外一颗MCU,因为每一个MCU内置的密钥对都是不同的,另外一个MCU将无法使用其私钥解密License内容
SFI安全烧录支持多种接口方式,包括SWD,USB,SPI,UART,具体某个芯片系列支持的方式请参考SFI安全烧录文档的相关描述。
支持安全烧录的STM32 MCU
目前支持SFI安全烧录功能的MCU包括以下系列:
STM32 MCU Part numbers | Order code |
STM32H75xxl | 支持该Part number的所有order code,请参考Datasheet中的order code信息 |
STM32H7B3xI | |
STM32H733xx | |
STM32H735xx | |
STM32L5xxxx | 支持STM32L5全系列 |
STM32WL5xxx | 支持STM32WL5x系列 |
STM32L462CE | STM32L462CEU6F |
STM32U5 |
* 其他STM32 MCU系列可以根据需求增加SFI支持
安全烧录工具
STM32提供一系列配合SFI安全烧录的工具,用于开发阶段验证SFI功能:
STM32TrustedPackageCreator是运行在PC上的SFI加密打包工具 + HSM配置工具
其安装程序包含在STM32CubeProgrammer安装程序内,可以与STM32CubeProgrammer一同安装
STM32TrustedPackageCreator用于加密和打包固件数据和OptionByte配置数据
STM32TrustedPackageCreator用于对HSM进行配置,写入OEM固件识别信息、固件加密密钥以及最大允许产生License的个数等
使用银行卡级别SE,以PVC卡形式提供
支持ISO7816 T=0 / T = 1 API命令格式
STM32HSM用于存储OEM固件加密密钥,固件识别号和最大允许生成License的个数
在安全生产阶段STM32HSM用于产生License数据并记录和控制产生License的个数
目前HSM有两个版本,V1适用于L4,H7,L5;V2可以支持所有新的系列,如L5,WL5x,U5等
STM32CubeProgrammer工具是一个可以对STM32进行编程的PC工具,可以运行于Window和Linux系统
STM32CubeProgrammer除了具备通常的STM32编程和OptionByte相关功能以外,还提供配合HSM进行SFI安全烧录的CLI命令行工具
文档资料
Hardware security module for secure firmware installation 《用于安全烧录的硬件安全模块HSM》 | 简要说明 | |
Hardware security module for secure programming 《用于安全烧录的硬件安全模块HSM》 | 简要说明 | |
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软件说明》 |
除以上公开资料外,对于希望基于STM32 SFI开发安全编程工具和方案的客户或第三方,在签署NDA的条件下可以进一步获取以下额外资料:
•AN5243 Bootloader SFI security extension for STM32H7 Series
•AN2428 Hardware secure module (HSM) for STM32CubeProgrammer secure firmware install (SFI)
•AN5391 SFI extension for STM32L5 series
相关培训资源
培训课程及资料 | |
视频课程 | |
培训课件 | |
视频 | |
更多SFI相关内容还可以参考以下链接