前言STM32H5系列属于是STM32F4系列的升级版,采用ARM Cortex-M33内核,并且搭载了Armv8-M的TrustZone技术,不过仅仅于此还是不够安全,于是乎新增了额外的硬件安全单元以及ST自己的安全方案,之前是使用了RDP读保护来保护固件安全,现在采用了全新的产品生命周期管理机制来取代不够灵活的RDP读保护,首先需要明确的就是产品生命周期如何划定。 一、产品生命周期ST将产品生命周期划分为4个阶段:开发阶段,生产阶段,使用阶段,使用结束。这四种阶段如果只需要单线一直到底,也只需要RDP读保护直接保护就好,如开发阶段不需要进行保护,代码固件开发完毕之后,在生产阶段,直接开启RDP level 1以上就可以保护固件不被读取,再交由客户使用,直到产品使用结束,这个固件也是被RDP保护着。但是在科技高速发展的今天,各种职业方向百花齐放,讲究的是术业有专攻,团队合作teamwork才是关键,于是RDP读保护这种方式就变得很笨重,不同的研发团队想要保护自己的代码变得不容易,合作开发很困难。在这种情况下,STM32H5就引入了新的产品生命周期状态,即Product State,如下图所示: 分离出更多的状态可以保证不同的团队都能分开调试并保护自己的固件,利于团队合作共赢。 二、产品生命周期状态转换Product State虽然是新的产品生命周期划分,但是实质上还是芯片的寄存器配置,具体含义如下: 其中Open就是完全不受保护,完全开放,Closed代表调试关闭,能够进行回退,而Locked则是调试关闭的同时不能够重新回退,也就是在Locked状态是完全不能继续调试芯片了,最终的成熟产品才有可能使用这个状态。至于其他的状态都代表了一种过程,其转换关系如下: PS:该视频发布时,并没有H533系列芯片,但是H533系列安全功能与H56X/57X芯片部分相同。 以上简单略过一下Product State的状态,以及它们的转换,可想而知,这种选项字的配置方式即能够通过上位机进行也能够通过芯片自身的程序进行操作。这次便是通过上位机程序STM32CubeProgrammer与STM32TrustedPackageCreator进行产品生命周期的设置管理 三、Debug AuthenticationSTM32H5系列划分出详细的产品生命周期管理机制,但是需要对特定状态进行回退,就必须加入某种安全的协议进行回退协商,保护芯片中的固件不会被非法修改,而这个安全协议就是Debug Authentication简称DA,STM32H5提供了原生的DA功能,用于临时恢复芯片的调试连接与Product State的回退。具体用法还分成TrustZone使能与未使能的情况,当TrustZone使能的情况需要通过数字证书进行操作,而没有使能TrustZone只需要输入密码就能回退。具体情况如下: 四、具体实验步骤使能TrustZone的情况还需要增加数字证书的说明,作为初探,这次只使用不使能TrustZone的方式进行。只需要来个Password就可以对芯片的固件进行保护,需要使用到ST提供的两个上位机软件进行操作。为了方便起见,本人就只是简单使用了Cube固件包里面的点灯例程当作使用的固件。 将固件下载到芯片之后RESET可以看到开发板上的LD2开始闪烁。证明芯片能够正常下载程序,也能顺利运行。 接下来使用STM32TrustedPackageCreator生成DA协议的.obk文件,并且烧写.obk文件进入单片机。 最后点击Generate OBkey生成密匙文件。 生成好.obk文件之后,通过STM32CubeProgrammer将芯片的Product State设置为Provisioning,代表准备给芯片烧录密匙文件。 选择好PRODUCT_STATE为17之后在选择Apply,此时会出现几个提示与警告,不需要理会。 Apply之后会提示Option bytes写入成功,但是也是跳出无法连接port 1的警告信息,因为在Provisioning状态下只能通过Hotplug模式进行连接,警告信息里面也有说明。 再进行连接并读取Option Bytes可以看到PRODUCT_STATE里面的Value变成了17,现在开始烧写.obk文件。 依然是在STM32CubeProgrammer中进行烧写 此时断开STLINK的连接,选择旁边的DA选项卡,下面的logs会出现特定的数值代表此时已经是烧录上.obk文件了 在logs里面出现ST provisioning integrity status 0xeaeaeaea说明已经完成了.obk文件的烧写,此时Product State就不需要在Provisioning这个状态了,重复之前通过STM32CubeProgrammer将芯片的Product State设置为Provisioning的操作,将Product State切换到Closed。(千万需要注意,如果点击到Locked就变砖了,我们只是进行测试调试还是需要进行回退操作的)。此时会跳出不少提示与警告,再次无视,选择用STLINK连接芯片可以发现: 此时Closed状态已经不允许调试端口接入了,所以STLINK无法连接开发板。然后可以看到开发板的LD2还在闪烁,表示固件依然在顺利运行。在当前Closed状态下,没法进行调试下载等等操作,只能看到点灯程序在运行。这么简单的程序也需要保护?还好在当前状态下可以回退到OPEN状态再次调试程序。 接下来需要从Closed状态回退到Open状态 使用STM32CubeProgrammer选中小盾牌,选择DA,与之前查看.obk文件是否烧写进入单片机时的操作一致,点击Discover后可以看到下方出现芯片信息 可以看到是被Password方式锁住了,产品生命周期也来到了Closed状态。之后点击Browse选择到生成.obk文件的目录下Password.bin,最后点击Full Regression即可回退到Open状态。 此时连接STLINK能够顺利连接,并且在Option bytes处可以看到PRODUCT_STATE的Value变为ED,也就是回退到了OPEN状态。 五、总结本次是对于STM32H5新增安全机制的初次探索,一开始是在ST wiki中寻找文章并且进行操作的,结果wiki处没有一个很系统的总结,需要个人自己去打造基础之后再进行实验操作,按照wiki里的操作完成之后,完全是云里雾里就结束了。没有实质性的收获,毕竟是因为没有基础,不过还好ST推出了【STM32H5 信息安全培训】的课程。视频可以说是非常全部的讲解了当时的H5全系列信息安全相关的信息,本人也是跟随视频的脚步照葫芦画瓢进行操作,但是也对H5系列新增的信息安全模块有了进一步的深入理解。 不过还属于是跟着视频进行的照葫芦画瓢,因为使用的是H533RE也没有进行视频相关固件的下载,之后还会进行使能TrustZone之后的Product State生命周期管理的操作,并且继续学习之后关于H5安全机制的应用,最后依照自己的理解进行操作与解读,争取移植并修改固件到可以使用的程度。 STM32 B站官方视频号:https://space.bilibili.com/2100019006 【STM32H5 信息安全培训】合集:https://www.bilibili.com/video/BV1FC411p7Cg/?share_source=copy_web&vd_source=348ed027c500f7bd59a4eb77f3c8f510 |
STM32H503生成带dead time的互补PWM
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
实战经验 | STM32H5 USBD Classic驱动 CDC移植
【STM32H7S78-DK评测】移植AI框架TensorFlow【DSP指令加速篇】
【STM32H7S78-DK评测】移植AI框架TensorFlow【下篇】
NUCLEO-H563ZI刷入Micropython固件并点亮LED灯
基于STM32H5的DA之初体验经验分享(带 Trust Zone)
【免费申请】高性能和低成本双Buff加持的NUCLEO H533RE,等你来!
【STM32H7S78-DK评测】搭建基于ST官方VSCode扩展的STM32开发环境