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

STM32L1xx 微控制器上的专有代码读保护

[复制链接]
STMCU小助手 发布时间:2022-7-13 10:33
前言. i* f8 _: f* C0 \+ P7 g
在微控制器领域,对嵌入式代码的知识产权保护已经成为被高度重视的问题。为了提供这方面的保护,STM32 微控制器采用多种不同方法来保护 Flash 代码,避免复制和逆向工程。: b! U; a3 e5 S3 J7 k. O  D
本应用笔记描述了通用 STM32 系列的 Flash 保护功能。重点关注 Proprietary Code Read OutProtection(PCROP),它内嵌于中等容量的 STM32L151xC、 STM32L152xC、 STM32L162xC 和STM32L100xC微控制器中。
/ x/ X3 Z3 `0 e! g$ a表 1 列出了本应用笔记涉及的微控制器/ K) w  r, q# ?* t& M

) D. ]3 V7 ^. V9 }+ Q7 n
~ZY@89{%T$MP}H9S~TRT~91.png
5 H1 W7 Z0 h% f2 [, R
0 S  H# F- W) j9 _2 v" M
1 Flash 代码保护
' H1 s( [( R1 j4 H3 P7 v. [STM32 微控制器系列产品具有下列代码保护功能:
3 Y# s, Z9 h  ^' a" l9 v7 v- [1. 全局读保护 (Read-out Protection, RDP)5 f7 o2 g- J7 o; s7 H  U6 v
2. 写保护
( k; n" D8 n5 A" w. F" p7 x3. 专有代码读保护 (Proprietary Code Read Out Protection, PCROP)% N6 C' J1 E7 D" d8 O: `3 l
这些功能用来保护嵌入式固件代码的知识产权,这表示对复杂嵌入式系统的关注正在日益增加。
2 H3 x8 u2 K0 Z/ ~7 G
! y4 H6 z- g6 v# x* I& l
1.1 全局读保护 (RDP): u! A5 A+ b% S# X( d8 i- T0 _
全局读保护可保护嵌入式固件代码 (预加载到闪存中),避免逆向工程、使用调试工具读出或其他方式的入侵攻击。' q5 X# q  L; r3 U) a8 K- ]+ m
该保护在二进制代码载入嵌入式闪存后,由用户进行设置。' V; z. v# [5 e, ]/ v
表 2 描述了 3 个用户定义的保护级别。
, {5 g* J0 Y: a; q ! i* o3 S/ ?8 w) a! u/ f
UD4[Y]W17FKSLZHE@~QWVS1.png
8 ?; y6 i1 O* E3 a5 v  @* H9 K  A7 A
一旦用户代码被载入闪存中,即可避免代码倾出。可通过激活级别 1 或级别 2 保护来实现,或者通过 RDP 选项字节按照图 1. 中所示的准则进行编程。

1 O* Z; o0 a/ t' q# v( j2 S+ P
1 G+ e* T0 S# d' Q+ E( ~
1 D2 G# Z* [  m; o

# ^4 N; z1 c1 b( U# j1 n5 \3 x, _2 O* R. b/ ^

% S" T3 {' `( B% A. x, n两个保护级别 (1 和 2)都可以保护闪存。其内容不可被 Serial Wire 或 JTAG Debug 访问、自举程序系统软件或通过向易失性 RAM 存储器载入其他软件来读取。
/ D- ^- e( W7 Y6 z两个保护级别的主要区别在于易失性数据 (RAM 内容)保护,此保护仅存在于级别 2 中。RDP 保护被设为级别 1 时,调试工具仍然能够连接和访问 MCU (RAM 和寄存器)的所有易失性资源。这些工具通过向 RAM 载入一些测试代码来检查部件和 / 或系统。4 B' n$ h6 I8 U% Y& ~) Z) V
并且,级别 1 保护允许通过擦除全部 Flash 内容来恢复已编程部分。可通过将 RDP 选项字节从级别 1 重新编程为级别 0 来实现 (参见图 1)。
8 o' s* q7 P3 C% |: f# C另一方面,级别 2 保护是不可逆的 (熔断)。一旦 RDP 设为级别 2, RDP 选项字节和所有其他选项字节都会被冻结,不能再修改。
+ ?6 u7 M6 K' Q但是,用户 Flash 内容 (除了所有写保护扇区,参见第 1.2 节:写保护)在用户代码本身的控制下仍然可被更新。通过执行 IAP (In Application Programming,在应用编程)自举程序代码来允许一些扇区的固件更新。
" A! k% {; J& @( j/ i1 A为了确保能够保护预先编程的用户代码,自举程序协议可以由用户指定 (执行相关保护来避免攻击、倾出和 / 或恶意代码更新)。  E8 W  \8 K- Y0 C$ [
注: 利用 STM32 上提供的嵌入式 AES 加速器实现了一些 Secure Bootloader 示例,应用笔记AN4023 - STM32 安全固件升级中对此有描述。
9 B8 ]  R& m  D, |关于读保护的更多详细信息,请参考微控制器参考手册。
6 q1 p6 H) U1 u7 V5 [
& ^1 J; j! D, S, ^+ D# X; n/ B3 Y1.2 写保护; A  v/ C  t& O9 J
写保护通过 Flash 区 (扇区)实现,可保护指定扇区,避免代码更新或擦除。
3 p2 _+ B+ ^) X( d, k% F* q利用一个选项位来激活对每个 Flash 扇区的写保护。当设置扇区 i (选项位 nWRPi = 0)为写保护时,该扇区不能被擦除或编程。
7 ^+ d3 ~/ l8 c: N8 ]7 Q表 3 显示了对于不同 RDP 级别的扇区写保护。

; Q) @/ n- q' t9 H0 @0 ^; i9 m7 Q7 g$ m% `6 X5 Z
! G7 N$ ?: d9 }9 u3 b. L
8%)TT)EJRSOQCD`OY5_M.png
7 Q- c. x8 `) X1 p+ ~# X# [
8 s" I  A) r1 B$ u" `5 ^
3 o; x) B' e! `6 l) U$ k3 d

7 P2 ~- z: Z- @1.3 专有代码读保护- g* f: b# ]" ^! J9 T& h$ K& r$ C
专有代码读保护 (PCROP)是一种替代保护,也是通过扇区实现,可保护特定代码 (知识产权)不受攻击。# Q  X: s# I. l9 Q8 U" f
PCROP 在微控制器代码保护和代码管理上实现了 2 种主要功能。' s5 B$ h9 d! Q' z6 X9 ~7 S4 I
表 4 中将两种 PCROP 功能分别与 RDP 保护方法进行了对比。2 K8 S  X& Q8 R( \& T, k7 s! k

$ c/ t! Y3 ~3 M2 L5 E4 s  a  _
9`PMF1`[V~[WVXS[I}81VOP.png
- F) o2 D# z. Z  v6 Z6 Z4 a, D* P, m+ t6 k
这种保护基于一种只执行机制。 Flash 代码区域仅能被 STM32 CPU (作为指令代码)获取,而所有其他访问 (DMA,调试和 CPU 数据读取)是严格禁止的。
5 c- r, m) x% K* e* |( O在保护可执行代码不被读取时,这种只执行机制会产生一种副作用,导致被保护代码本身(从该区域执行)不能访问存储在相同区域的相关数据值 (如文字库)。为了避免该区域中数据访问的需要 (特别是文字库访问),必须在 ARM/Keil 编译器中选择一个特殊的命令行选项:" c2 H, t: D% s* R+ T' D2 y
(armcc --no_literal_pools --max_string_in_code = 0).
  w, {: v) S) h5 \, i0 n1 j
. o( G, B: i/ g* D+ {2 V  N6 u
此命令行选项使用其他指令转换文字库操作。这些指令可创建寄存器值,而无需任何数据读取访问。它主要用于载入地址可变寄存器。由于替代方法效率较低,此选项将这些操作转换为效率略低的代码。但性能损失是有限的 (低于 5%),这对于受保护的代码部分来说是可接受的。; V/ x- Z0 }$ s3 u" Q# e" A* P
利用与写保护同样的选项字节来选择 PCROP 扇区。因此这 2 个选项是互斥的。但是,受保护不被读取的扇区 (PCROP)也不会被写入 / 擦除。因此, PCROP 可认为是扇区写保护的超集。
5 b0 H( Q% f# T/ R3 ~1 l' r7 [为了激活 PCROP (改变 nWRP 选项位的功能),必须激活 SPRMOD 选项位。该操作是不可逆的。
8 ?) ~1 |9 p- |# A! d. S同样在 PCROP 模式下,设置为读保护的扇区也不能被复位成无保护状态。因此,新扇区可成为读保护区 (当 RDP 设为级别 0 或 1 时),但是被保护的扇区不能通过擦除或修改成为无保护区。
& F' w: j/ g* B" d7 T# B4 ]* v. F根据 RDP 级别,存在可能的变通方案来恢复受保护芯片。若 STM32 处于 RDP 级别 1 且RDP 选项字节设为级别 0,则用户 Flash 区域将被完全擦除。这是 SPRMOD 和 nWRP 位可被复位、所有受保护扇区成为无保护的唯一一种情形。

5 W/ _  h/ Z- Y6 y4 c/ v9 R但是,由于此操作总是与用户 Flash 区域的全局擦除相关联,因此代码保护不受影响。" G7 k6 V0 D3 N" `3 L+ w
当 RDP 设为级别 2,所有选项字节都会被冻结,不能再修改。因此,受保护扇区不能再被擦除或修改,这样就成为永久性保护。
, g+ S: i, Y8 c- E' o+ P0 B- [& g/ |. Z4 n7 h, L
完整版请查看:附件
5 t  J# a2 h+ b, \

DM00075930_ZHV1.pdf

下载

265.09 KB, 下载次数: 0

赞 收藏 评论0 发布时间:2022-7-13 10:33

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版