垂直应用

信息安全(八)

STM32G0的安全功能





大家好,欢迎大家观看 STM32 信息安全(八):STM32G0的安全功能。




STM32G0的安全功能




我们以STM32G0为例,看看之前讨论的那些模块级别的小单元,彼此配合,通力协作,能够提供哪些应用层面的安全功能。


安全的固件安装SFI 和 安全的固件升级 SFU,是在产品全生命周期内,在开发、测试完成后,出了开发部大门,在产线上生产,以及产品部署到现场后产品维护的有力安全保障。

固件IP保护,是拥有核心算法的方案商最需要的;密钥存储,涉及到一切加解密相关应用,正在包括安全通信;安全通信,暗含了消息保密性,消息完整性,和通信对方的身份认证,在iot应用中尤为关键,一般会同时需要这三块的支持。


任务隔离,防止不受信的代码恶意攻击或者无意污染到关键代码。无论是单机运行,还是做iot应用连网,都是需要考虑的。




任务隔离



MPU可以很好的对任务进行隔离,除了任务的代码段,还可以隔离任务各自使用的RAM区。如果担心MPU看不牢DMA,也可以对DMA所在区域进行权限访问的控制。如图所示,蓝色方框一目了然告诉我们MPU的保护对象,是从Flash到RAM到片上外设。




密钥存储



密钥存储,属于关键数据的安全存储;关键数据除了密钥,还可以是用户的私密数据,应用的关键参数等,在安全相关应用中是必不可少的要求。


之前说过,加解密算法都是公开的,敏感的是算法每次运行是用到的密钥。在STM32G0上,安全用户存储区可以用来实现这个功能。这里没有单独列出UBE,唯一启动入口,但是使用安全用户存储区默认都是结合UBE的。这样可以保证,关键数据,只能在上电运行的安全环境中获取和使用;当离开这个安全环境,一旦打开安全开关,这段区域就不可见了,对后面执行的普通代码不可见了。而且它也无法再次关闭这个安全开关。因为这个安全开关一旦打开,会生效到下次系统复位。


因为这个安全开关还是需要上电后代码控制寄存器来打开的,就是说上电初始阶段,这段区域是不受保护的;因此加上RDP来防止调试接口的连接,避免从外部窥探敏感数据的风险。




身份认证

身份认证起源于远程通信,在现在的iot应用中再次得到广泛运用。身份认证除了芯片端要支持对应的加解密算法,对称密钥技术,或者非对称密钥技术,还需要有一个密钥来落实都主体上。通过证明有这个密钥,来证明主体的真实性。那么关键的环节之一还是密钥存储。



除此之外,进行身份认证的代码,放在安全区域,并且加上写保护,避免被意外修改。


这里的安全通信,主要还是通信本身,要支持confidentiality、authentication,这些都涉及到密码学的应用。可以使用X-Cube-Crypto加解密库的纯软件实现,也可以利用STM32G0上的硬件模块,比如对称加密AES、随机数产生器TRNG、甚至CRC来加速软件的执行。





固件IP保护

关键固件的保护,是OEM或者算法提供商比较关心的,防止第三方读取从而盗取软件开发的IP。



使用RDP1对全部用户flash可以进行保护,主要是防止来自芯片外部的攻击,尤其是调试端口;PCROP对关键代码段的进一步保护,可以防止芯片内普通用户flash部分通过IAP或者远程升级等注入入侵代码,对关键代码的威胁。但是PCROP的范围不是越大越好,尤其是不能覆盖住复位向量表所在的地方,否则系统复位走数据总线去取复位向量,会被block住,意味着芯片复位跑不起来了。




SFU

SFU,安全固件升级,要支持接收到的是升级固件是密文,就需要加解密AES模块的支持。要验证升级代码的合法性,需要用到hash和验签操作。由于STM32G0没有硬件hash模块,就需要X-Cube-Crypto软件加密库来帮忙了。这些仅仅是从密码学方面的支持,光是加解密、验签还是不够的。



在执行和存储保护方面,我们会用到读保护、写保护,PCROP、安全用户存储区。具体如何利用这些安全特性,我们后面会详细讨论。




SFI

SFI,安全地去安装STM32固件。I, installation,“安装” 不是我们国内嵌入式的常用说法,这里install,简单理解,就是烧片的意思,而且是对一个空片烧片。



它主要解决设备量产的问题,不是自己在实验室烧写几个板子那么简单。当你要做产品的批量烧写,成百上千,就需要去产线完成。如何保证你的代码不在产线上被泄露;或者即使代码没有泄露,但是过量烧写,怎么控制?这些都是SFI要解决的问题。后面讲SFI的时候,我们详细展开讨论。



本期主要以STM32G0为例,介绍了它能提供的应用层面的安全功能

下期我会展开对SBSFU,安全启动和安全固件升级,这个话题的详细讨论。敬请大家关注,谢谢观看。




微信扫一扫