垂直应用

信息安全(十三)

安全固件烧录/SFI





大家好,欢迎大家观看 STM32 信息安全(十三):SFI——安全固件烧录,又叫安全固件安装。




SFI介绍



SFI,全称:Secure Firmware Install,安全地做固件安装。之前提到过,安装,就是指在空片上烧录应用固件。它有别于SFU,安全地固件升级。后者适用于芯片上已经有初始版本的应用程序在运行了,部署到现场后,在产品生命周期内,做产品升级。而SFI适用于本来就是空片,现在要烧录初始版本的应用程序,因此通常发生在产线上。安全地安装,这里“安全”二字, 就是特别考虑到产线的可靠性。如果是工程师在实验室里,自己开发、调试、烧写,不大谈得上“安全”,除非你是在做应用的协同开发,需要对关键算法进行保护,那可以通过之前我们介绍的STM32上的存储与执行保护等模块来实现。


SFI适用于OEM把一批次的STM32和自己开发好的固件给到第三方或者不可信的产线去烧录时,对OEM在安全方面的顾虑给出了解决方案。一般会有哪些顾虑呢?


首先,OEM开发的固件会有私密性要求,不想被产线拿走,否则会有知识产权泄露的风险。

第二,OEM会对自己开发的固件被烧录的次数有控制。给了一批次比如说500片给到产线,就希望这个固件烧500次。OEM不希望产线拿到这个固件,给自己的100片STM32也烧录了通样的代码,然后就贴牌出去,这样也会给OEM产品的品牌资产带来风险。




SFI过程


SFI过程中的用户体验



我们还是先从用户角度看一下,SFI的过程。首先在SFI适用的场景中,会有三方角色。

ST负责提供STM32芯片,OEM负责开发产品,还有一个第三方生产商,主要就是负责批量烧片。


第一步:OEM把开发好的应用代码加密后给到产线方,》》从而保证应用代码的Confidentiality。

第二步:OEM从ST订购一批STM32,比如说5000片,也给到产线方;或者产线方直接从ST订购一批STM32。

第三步:OEM把加密代码的对称密钥烧录到HSM中,包括OEM授权烧录的次数。HSM是hardware secure module的简称,是配合SFI服务的一个硬件。ST现在发布的HSM就是智能卡。

第四步:OEM把HSM,就是这里的智能卡,也发给产线方

有了HSM的帮助,》》产线可以确保收到的OEM固件的完整可靠性,即Integrity和Authentication

第五步,产线方,在HSM的支持下,把加密好的固件密文烧到STM32芯片里。

最后,在选项字节里设置上PCROP或者RDP等保护,把5000片烧录就绪的芯片返回给OEM。


整个过程中,黄色高亮部分的步骤是需要相关软硬件工具支持的。




SFI过程中的技术实现



现在再来看一下SFI过程中的技术实现:

首先,OEM从ST购买HSM。这个HSM里面预装了ST的证书,即ST的公钥;HSM实际就是一个智能卡,里面还运行了一个“license管理的软件”。

然后,OEM开发好代码,使用自己的密钥,就是图中粉色的钥匙,通过STM32的一个软件工具 Trusted Package Creator生成固件密文。通常建议一个产品的固件使用一个密钥。

再把固件秘钥,也通过Trusted Package Creator烧到HSM中。一同烧入的还有OEM授权产线商凭此HSM能够烧录固件的次数。就是图里的lic. counter。

OEM把固件的密文,和这个HSM,发给第三方产线商。

产线商,使用STM32CubeProgrammer,在HSM的帮助下,把收到的OEM的固件密文,安全地烧录到STM32芯片里。


这就是SFI过程中,主要参与的双方OEM和产线商,各自要做的事情的大概情况。




SFI过程 · OEM方的技术实现



如果再进一步来看OEM要做的事情。OEM拿到从ST订购的HSM的时候,HSM里已经预置了该HSM支持的STM32产品ID,每个产品类型还有其对应的ST公钥。并且用于license管理的软件也预置进去了。


OEM根据自己的需要,对HSM做personalization,定制化。使用Trusted Package Creator工具,把加密固件所用的密钥及相关信息,还有该HSM可以烧录固件的次数写到HSM里。


同样,使用这个Trusted Pacakage Creator工具对固件加密,生成密文。把密文和HSM一起给到产线商。




SFI过程 · 产线方的技术实现



产线方是如何使用这个HSM,和密文的呢?密文又是如何被转换成明文,烧到STM32的片上或者片外flash的呢?注意,现阶段存储在STM32片上芯片、待运行的是明文;如果所用STM32系列集成了OTFDEC,可以被待运行的固件以密文方式放在片外Q-SPI flash上。


我们以智能卡形式的HSM为例,看看使用STLINK、STM32CubeProgrammer如何实现以上的安全烧录过程。


首先STM32芯片上,在出厂前,已经预置了芯片自己的一对公私钥,和ST的证书。


在安全烧录时,CubeProgramer发指令》》通过stlink读取预置在芯片里,该芯片的公钥和ST的证书。由于HSM中买来时,已经有ST写在里面的针对某个芯片系列,比如L462,的公钥,那个公钥就是用来验证芯片返回的ST的证书的。》》通过,说明这个芯片确实是L462产品线,不是F103系列,甚至不是其他家的MCU。


CUbeProgrammer使用该L462芯片的公钥,对OEM写在HSM中的固件加密密钥,进行再加密。得到的就是所谓licence文件。显然,这个license文件,只有拥有这个芯片的公钥的L62拿到才有效。通过stlink把licence文件发给芯片。就是 把OEM固件秘钥,安全地给到了芯片。


HSM侧,每使用目标芯片的公钥对存在自己智能卡里面的OEM固件秘钥加密一次,counter值就自减1。这就实现了烧写次数的控制。


CubeProgrammer,再把OEM的固件密文也通过stlink下载到芯片。


芯片拿到了OEM的密文,也拿到了OEM密文的解密秘钥,那么后面的事情就迎刃而解了。

看到这里,大家可能会问,芯片不是空片吗?那么谁来做后面的解密和烧录工作呢?




SFI小结



这就需要芯片侧的安全固件支持。目前支持SFI服务的有3大家族里的4个产品线。L46CE,通过fastrom,把解密和烧写的代码,在芯片出厂前预置在用户flash上。执行完解密和烧写用户固件后,这段代码会被擦除。H7家族的两个系列,是通过系统BL里面的预置的RSS服务来完成;L5也是一样。


其余STM32型号,ST都提供定制服务。


胶片里最后还列出了SFI服务相关文档,大家有兴趣可以下来参阅。




下一期,我会给大家介绍一下ST的另外一个服务级别的安全方案:SFI。敬请大家关注,谢谢观看。





微信扫一扫