生态系统

STM32WB STM32L5 STM32H7

STM32H7上的SFI(安全固件烧录)介绍和演示





STM32H7上的SFI(安全固件烧录)介绍和演示 


欢迎大家继续关注STM32H7的课程,今天介绍STM32H7上的SFI。


SFI,固件的安全烧录
在不可信烧录产线安全地进行固件烧录


今天来和大家分享一下ST推出的一个安全服务:SFI,全称Secure Firmware install。
它解决STM32芯片,在不可信产线进行批量生产时的安全问题





所谓安全烧录,这里要解决两大“安全” 问题:第一,OEM开发的固件,在第三方产线不会被窃取,造成知识产权的泄露,也不会被恶意或者无意篡改。第二,不会发生过量生产的情况。比如,OEM要求产线烧录500K芯片,产线就不能烧录550K芯片,额外留50K作为所谓“原单货”。这些都是由STM32芯片在出厂前就由ST预置好的Secure bootloader以及每个芯片公私钥对来保证的。由于有STM32芯片私钥的参与,想把OEM固件烧录到引脚和功能全面兼容的其他厂家芯片上也是不可能的了。




SFI,它不是跑在STM32芯片上的固件,也不是一个PC端工具软件,而是一整套服务。由芯片硬件、工具软件和硬件工具三方面组成。
在芯片端,要能使用SFI服务,STM32需要在出厂前由ST预置Secure bootloader这个固件,以及由ST预先烧好每颗芯片的私钥以及包含其对应公钥的数字证书。
不是随便买一批次STM32芯片,就能使用SFI这个服务的。STM32L5是个例外,所有出厂的STM32L5已经预置了以上信息,因此全系列都支持SFI。后面我们会专门讲一下哪些芯片缺省支持该服务,哪些需要用户提出要求来让ST加入该服务的硬件支持。

OEM固件在不可信烧录产线不会被盗取,是因为OEM给到烧录厂家的是OEM固件的密文,由OEM固件经过AES128-GCM运算得到的结果,因此可以同时保证固件的机密性和完整性。在产线现场,无论是通过USB、USART等通信端口,还是通过JTAG、SWD等调试端口,在这些线上传递的0、1序列都是OEM固件的密文。因此在OEM侧,需要一个软件工具对开发出来的OEM固件做签名和加密。ST现在提供的工具软件叫做:Trusted Package Creator,是在安装STM32CubeProgrammer的时候,由用户勾选一起安装的。 烧录上位机,大家熟悉和常用的有STVP,STLINK Utility,但是目前支持SFI功能的是STM32CubeProgrammer。

硬件工具方面,除了常用的和STM32CubeProgrammer搭配使用的STLINK,还需要一个叫做HSM的硬件。它的作用是把OEM固件的加解密密钥和OEM授权烧录的次数,安全地的给到产线现场使用。OEM固件的加解密密钥是需要保密的,因此需要一个安全的方式从OEM给到产线现场,再烧录到STM32芯片里。这样,STM32芯片收到了OEM固件密文,又有OEM固件的加解密密钥,才可以对OEM固件密文进行解密,把明文烧到STM32的用户Flash上。HSM的全称是hardware secure module,目前ST是以一张智能卡的形式提供。SFI这一整套服务的详细介绍,大家可以移步ST全球官网 www.st.com/stm32hsm




接下来我们简要介绍一下客户使用SFI的操作流程,之后还会有具体操作演示。
SFI服务,需要ST、OEM、烧录厂家的三方参与。按照时间顺序:首先,OEM找ST购买支持SFI服务的STM32芯片,即预置了secure bootloader以及芯片公私钥对的STM32。还要购买HSM,这张智能卡里面预置了ST的公钥。

OEM把开发好的固件,使用Trusted Package Creator进行加密,得到OEM固件密文。然后OEM把刚才用到的这个密钥写到HSM中,同样使用Trusted Package Creator这个工具软件。一个HSM只能配置一个OEM固件密钥。OEM还需要往HSM里配置这张卡片允许烧录芯片的次数。一旦配置过,用户就无法再修改配置了。OEM密钥存储在HSM这个智能卡里,是无法非法读出来的;卡片当前还能烧写的次数,也呈只读状态。大家可能有点奇怪,使用STM32CubeProgrammer和STLINK烧写芯片就好了,HSM卡片怎么能限制烧录次数呢?SFI的烧录和普通烧录不一样。刚才已经说了,通过USB或者JTAG线下载到芯片里的是OEM固件密文,以及经过加密的密钥。密钥本身,是由OEM在自己安全的环境下写到了HSM中的,在产线环境中烧录器上位机需要HSM的操作来对密钥进行加密,再由USB或者JTAG线下载到芯片里。因此,通过限制HSM对OEM密钥进行加密的次数,从而限制在产线能够烧录STM32芯片的次数。

OEM把配置好的HSM小卡片,固件密文、以及芯片给到烧录厂家。烧录厂家使用HSM、烧录器STLINK,搭配支持SFI的烧录上位机STM32CubeProgrammer就可以把OEM固件安全烧到芯片中,避免OEM固件被窃取,被篡改,以及被过量生产。




截止目前为止,2020年10月,缺省支持SFI的芯片,如胶片中表格二所示。大家可以查询最新版本的AN4992,里面会对支持SFI的芯片芯片做及时更新。
不在列的芯片,如果客户需要SFI,可以联系ST提供定制服务。

接下来我们针对STM32H753的SFI过程,做一个实际操作的演示。


STM32H7上的SFI操作演示



先来看一个在H753芯片上的SFI操作过程。我们使用H753 nucleo板。先检查一下芯片上的写保护都去掉了,包括WRP,PCROP等。

我手里已经拿到了ST的这张HSM智能卡。它之前已经配置过OEM固件密钥了,我们现在可以读一下它的状态信息,可以使用Trusted Package Creator的图形界面,也可以使用命令行来读取。
打开Trusted Package Creator的图形界面,我们在这里操作,对我准备好的固件加密并签名。
把H753切换到系统BL启动,我们接下来准备使用系统BL支持的USB端口来做SFI通信和下载。

准备工作就绪,我们打开命令窗口。目前,STM32CubeProgrammer仅支持命令行做SFI操作。
板子切换到用户Flash启动,上电运行。
再看一下HSM当前状态,剩余烧写次数自减1







我们使用了分别使用了系统BLUSB接口,以及SWD调试接口,对H753演示了SFI的全过程。表格中列出了当前,不同芯片系列支持的SFI接口。

另外,之前提到的HSM小卡片,就是图中白色这张,一个和我们信用卡一样大小的智能卡。把照片放出来给大家一个直观的认识。



那么,关于STM32SFI安全服务的介绍就到此为止,谢谢大家。