垂直应用

信息安全(九)

SBSFU原理介绍





大家好,欢迎大家观看 STM32 信息安全(九):SBSFU原理介绍。


后面几期我们都会围绕STM32的这个信息安全包展开讨论。


SBSFU是信息安全的重点内容之一,我将以这样的思路来给大家介绍。


首先是原理,为什么要实现安全启动和安全固件升级。要实现这个服务,拆分下来需要打通哪些关键环节。

对原理有了一个总体认识和理解后,我们在STM32G0的nucleo板上,运行一个现成的、ST实现的SBSFU软件包,以建立最初关于SBSFU的感性认识。


然后,就G0拥有的安全相关硬件和软件资源,来分析SBSFU功能包是如何使用它们,来实现之前原理中的各个环节。

X-Cube-SBSFU软件包是ST提供的一个免费开源的实现,客户可以参考来实现自己的安全启动和安全升级;或者把它集成到自己的应用中。因此需要深入了解项目的组织结构,一些关键环节在代码级别的实现,包括连接文件里各个代码段的安排。



安全启动


构建信任链

首先来看原理。安全启动,就是为了构建信任链,并作为信任链的安全锚点,所谓信任根。我们接触过做安全应用的客户,一来就问我们,是否支持信任根。那么答案是:有SBSFU,就可以支持信任根。





信任根,英文里通常叫做root of trust。它是一切信任的基石。如果它不可靠,后面一切都免谈“安全”二字。要能做“信任根”,必须满足至少三个条件:第一,唯一的启动入口,就是只能从这里启动;第二,启动后运行的信任根代码不能被bypass,就是从这里启动后,必须要执行随后的信任根代码,不允许有调整PC指针,绕过信任根代码执行的情况;第三,启动代码要执行关键的,构建信任链的任务,因此不能被修改,无论是被恶意攻击还是无意被冲掉。如果这样子的一个安全的环境可以保证,那么里面运行的信任根代码,才有意义,否则就是无根之浮萍。构思再精巧、逻辑再严密,你毕竟是一段代码,如果能够绕过你的执行,或者把你替换掉,那你也就是个没用的01序列。


好了,安全环境有了,那么信任根代码要做一些什么事情呢?既然是信任链,光它自己一个起点是可信任的,还没用,它要构建信任链就得确保下一个节点也是可信任的。那就要对下一节点的内容做合法性验证,验证通过,才把执行权交给它。同样,第二阶段在执行完自己的本职工作后,为了把这个信任链继续构造下去,也要先验证它的下游节点代码是否可靠合法。是的话,才把执行权交出去。这就是信任链和安全启动,或者说和信任根的关系。




作为信任跟

SBSFU这段参考代码,是由SB和SFU两部分组成的。SB,safe boot,安全启动。和用户应用一样,也是放在用户闪存中。但是是放在用户闪存的起始地址,这样复位后,只要确保信任根的安全环境,运行的代码一定是这段safe boot代码。因为是放在用户flash上的,显然它是要由用户自己开发,当然ST提供了参考实现。这段代码出厂后不能再被修改了。这是信任根环境的必要条件之一。它的重要作用,就是检查后面的应用代码是否可靠。不可靠就复位,可靠才把执行权交出去。





消息认证

那么具体一点,信任根代码,或者说安全启动代码,到底如何来判断下一阶段代码是否可靠呢?这就要用到我们在第三部分,密码学原理里讲到的,“消息的广义完整性”。


信息的广义完整性,可以确保第一,信息没有被篡改;第二,信息的来源是可靠的。实现这个功能的工具就是:消息认证。




我们回顾一下 消息认证。消息认证能够实现从“消息狭义完整性” ,到“消息广义完整性” 的扩展。即,除了核实消息本身没有被篡改,或者传输过程中没有误差的引入。还有一个更加重要的任务,就是核实这条消息 就是真正的 通信对方 发过来的,而不是来自某个“中间人”。


微信扫一扫