垂直应用

信息安全(十一)

SBSFU在STM32G0上的实现





大家好,欢迎大家观看 STM32 信息安全(十一):SBSFU在STM32G0上的实现

前两期我们了解了SBSFU的原理,要实现这个服务,拆分下来需要打通哪些关键环节。并且在STM32G0的nucleo板上,运行一个现成的、ST实现的SBSFU软件包,以建立最初关于SBSFU的感性认识。


这一期,我们结合STM32G0上集成的具体安全模块和安全资源,看看SBSFU在G0上是如何实现的。




安全启动的原理




先回顾一下安全启动的原理。要能够作为安全应用的锚点,即信任根,需要满足以下几个条件:

有一个唯一的启动地址;启动后一定要执行一段安全代码;这段代码不能被绕过执行;也不能被修改。这段代码要做的事情,就是设置芯片的安全环境,然后使用加解密技术对后面要运行的代码做完整性检查,而且是“广义的完整性检查”。检查通过才把执行权交出去。


STM32G0芯片,有哪些安全特性,可以实现以上要求呢?



一句话来讲,就是:通过,“存储与执行保护模块”,“集成密码学技术” ,并使用环境监测等辅助手段,一同实现对安全启动的要求。


我们看表格里G0这一列:

唯一入口的要求,就是保证系统复位后总从这里运行。那么RDP1和Boot-LOCK,可以保证这一点,每次都从用户flash的首地址开始执行。


安全启动代码固化,即不能修改。我们可以通过WRP/写保护,防止内部代码的无意修改;由于RPD1和BOOT_LOCK的使能,也防止外部了从调试端口干扰的可能。Secure User memory,更是把这部分敏感代码和后面的用户业务代码隔离开来。


我们使用X-Cube-Crypto加解密软件库来支持安全启动代码对用户代码认证的密码学要求。由于密钥属于敏感数据,使用PCROP和MPU保护存储在用户flash上的密钥。


其他的安全措施,还有tamper入侵检测,看门狗,关掉GPIO引脚上调试功能等。




密码学技术集成



我们在SBSFU中集成加解密软件库,来对要运行的用户代码进行合法性检查,或者对收到的用户固件密文解密。


回顾一下前面讲的用户程序签名原理:把整个程序,做SHA256的哈希运算,得到该程序的摘要值,然后使用开发者的私钥进行签名运算,得到对这个程序的签名,就是图中的粉色方框部分。应用程序本身,可以加密后传输或者明文传输,没有限定,SBSFU安全包都有支持,取决于应用本身。


这是最标准的消息签名流程。





在SBSFU实现中,稍微有一点不同。应用程序本身的处理还是没啥变化,直接传明文或者加密后传密文都可以。但是对用户程序的摘要,我们称之为“Firmware tag“,我先不急着签名,先放在那里。然后再把这个应用程序的一些属性信息,比如版本号、程序大小,和FW tag放在一起。图中两个粉色方框的部分,叫做该用户程序的元数据”Meta data”。


<p styl

微信扫一扫