你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32U5 RDP回退功能测评

[复制链接]
小萝卜啦啦啦 发布时间:2023-2-13 20:48
STM32芯片的保护等级有3级,0、1、2。
等级0:无保护
等级1:无法访问Flash和部分sram及其他一些资源。但是可以设置回0,退回0需要擦除整个Flash
等级2:完全锁死芯片,无法调试、烧录等操作。且该等级无法逆转。
而STM32U5系列具有保护等级回退功能,可以从2退回1,1退回0。
一.理论知识
官方有一份文档关于保护等级降级的描述和操作,文档编号为《LAT1086》,有兴趣的可以主动去阅读。
因为我没有使用TrustZone的经验,为了今天试验的顺利进行,本文只讨论TrustZone不使用的情况,不过大部分的操作都是通用的,额外缺漏的可以从ST的文档中自主学习。
当TrustZone不使用时,保护等级变化如图所示
2.png
从0->1、0->2、1->2都只需要设置RDP参数即可,和普通STM32一样。但是多了从2->1、1->0这两个。
从2退回1时,需要使用OEM2秘钥。从1退回0时需要OEM1秘钥。
所以在使用该功能时,需要设置两个OEM秘钥。关于秘钥有以下几个注意点:
①需要注意的是秘钥不能为全0或1
$ A+ {; T  ~5 M
②秘钥不是在任何时刻都可以设置/修改的,具体如下图所示
3.png
③秘钥设置后无法撤销,但是可以修改(这一条我不太理解,我看ST的意思是秘钥一旦设置好以后就无法清除,只能在允许修改的情况下修改。但是我试验时发现是有清除按钮的,是文档写的太早,而现在已经有清除功能了?)

# `2 ?  D5 D) o9 a
因此,强烈建议在等级0时设置秘钥、修改秘钥
* ]( h0 X) G" d5 D" W% Q: Q8 X
二.实操
首先我们先检查一下保护等级。我们需要使用STM32CubeProgrammerv2.8.0及以上的版本,且Stlink固件需要V3J8M3及以上。我这边使用的是目前最新版2.12.0和V3J10M3
2.1检查秘钥设置情况

7 Z7 d0 a# p9 M$ S& C
板卡连接电脑,打开STM32CubeProgrammer,选择ST-Link,连接
4.png
连接好后,正确识别到芯片了
5.png
点击左侧的REG图标,Device选择STM32U5XX,Search内输入FLASH,回车
在NSSR中有两个参数“OEM1LOCK”、“OEM2LOCK”。当值为0时表示未设置秘钥,1为设置了秘钥

# Y2 e" ~  i7 t9 z4 M3 N" z& Z
我手上的芯片是全新的,所以这两个参数都是0,未设置。
6.png

4 z6 s# Y5 Q. s7 ?. [
2.2设置OEM秘钥

, V0 N/ v5 ~/ Q% ]0 {
我们设置OEM秘钥,我使用的2.12.0版本的软件已经有图形化操作界面了,不需要再和ST文档中那样使用命令行了,可以直接在下图界面设置秘钥、解锁
7.png
这个全新的界面我也是第一次使用,保险起见我先阅读一下官方文档《UM2237 Rev20》中的“2.9.2 RDP regression with password (STM32U5Series only)”,这一章节专门是描述该页面是如何使用的
8.png
5 B; v& [8 N8 C5 l1 m4 U
先看一下RDP等级
9.png
是0级,可以设置OEM秘钥1和2
设置秘钥,需要注意的是,秘钥不能全为0或1。
. b2 b! w$ w9 O1 s( z
在Password框内输入想设置的秘钥,我这边设置的是0x11223344,0x55667788。设置的时候注意0x和密码长度,我输入了一下发现这个框没有做限制,可以随意输入,不知道点击设置后会不会有错误提示,因为我手上只有一块板子,不敢乱设,就不尝试了
10.png
点击set password后会有一个提示框
11.png
我们点击第一个Apply Lock RDP1
9 Z) T. u. H; q
设置完成
12.png
检查一下标志位,变成1了,OEM1秘钥就设置完成了。OEM2秘钥设置类似,就不展示了
13.png
( z5 w" }( S+ @
2.3从等级1降级至等级0

5 u  P# W% _8 }& X  D
我先把等级设置为1,试一下用OEM1秘钥解锁、降级
14.png
设置完成
15.png
接下来解锁
16.png
点击ApplyUnlock RDP1
17.png
解锁完成,就可以去降级了
18.png
尝试降级
19.png
降级成功
20.png
) D$ M( D/ p0 W1 t4 h% x
2.4移除秘钥

4 F; t/ K7 l/ y2 Q
如果想要移除秘钥可以在保护0时点击Disablepassword
21.png
点击apply
22.png
移除成功
23.png
检查一下标志位,变成0了
24.png

; K  F  b: w+ q1 I
2.5从等级2降至等级1
我们在等级0时先设置好OEM1、OEM2秘钥,这里就不再赘述步骤了

" I0 Y4 W' M1 r; h0 k$ q+ H, r
秘钥设置如图所示
25.png
两个秘钥设置成功
26.png
直接将保护等级设置为2(心里还是蛮紧张的,很害怕操作失误,这块板子变砖)
27.png
这里还很贴心的弹出了一个提示框,告诉我可以设置一个OEM2秘钥来去除等级2保护
28.png
点击确定后,还会再次确认是否要继续,并提示该操作的风险
29.png
设置完成,芯片断连,保护2生效
30.png
随后点击Unlock RDP2(密码框内要有秘钥),Apply Unlock RDP2
31.png
再点击右侧的连接
途中虽然有弹出错误/失败的提示框,我们不必理会,正常的,最终会成功连接上芯片!此时RDP保护等级为FF,代表我们成功了
32.png
下面是ST文档中的一些描述
33.png
34.png
虽然官方的描述在内部逻辑上不是非常详细,我个人的理解是,当芯片处于等级2时,其他系列的芯片在调试口收到任何数据都是拒绝处理的,U5会处理一种数据,那就是携带OEM2秘钥的解锁指令。一旦秘钥正确,就会触发硬件解锁+降级至1的操作。然后就可以正常通过调试口连接芯片了,此时RDP保护等级会显示FF,虽然不是DC,但是芯片已经处于等级1了。
我们可以重复之前的操作,把等级1降至等级0,步骤我就不赘述了,和之前的一样
" J7 z2 X! ~0 O/ o3 v
已经降至0了
35.png
5 G1 w. k1 S# Y9 J4 K% k7 J, `
3.反思
今天的分享结束了,但是我还有一个疑问,如果有人用暴力的方式一直尝试解锁,芯片会不会有保护措施呢?虽然0x00000000 00000000~0xFFFFFFFF FFFFFFFF很多,挨个尝试要很久,但是终将会被破解。是否有和手机一样的输入多少次错误秘钥就禁止一定时间输入秘钥?
( O; ]  S; w% m9 K* l  z5 d; H* B8 p

. g$ A& e% L5 w0 ?7 c3 O  N3 c6 ~8 e, H, k5 |
收藏 评论1 发布时间:2023-2-13 20:48

举报

1个回答
STMCU-管管 回答时间:2023-2-14 13:36:48
支持,很详细了
, h# I3 f+ G6 f6 i; U
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版