STMCU小助手
发布时间:2022-8-10 09:15
|
方案概览 • STM32L0和STM32L4系列的硬件除了通常的RDP、WRP,还带有Firewall和 PCROP硬件安全特性 • 使用STM32的security硬件模块(Firewall和PCROP)实现对关键数据(密钥)的 保护:应用代码可以使用加解密功能,但是无法拿到密钥2 V2 U) F- [& w • 本方案提供了在STM32L073上的参考实现,以及相应测试代码 • STM32L073-Nucleo* g) C) ?& Q7 ^2 Y, Q% U% i) I • 方案包的内容( F& x% r }5 n3 M/ P • 三个IDE下的示例工程:IAR,MDK,STM32CubeIDE9 {& {9 U) h) `$ i/ d* V • 方案介绍文档 • 脚本工具(生成秘钥相关文件)6 d9 P9 K5 d8 {, O0 n 2 ]# a8 w5 n' e2 a. Q1 J6 Z PCROP • 防什么?:来自CPU、DMA以及通过调试端口的数据访问5 n \+ D7 I$ e4 W5 Z6 Z# Z • 保护什么? • 用户片上Flash的一段区域(由选项字节设置区域范围,保护上电即生效) • 保护机制" ~: B9 A% Z8 l! }3 R" b • PCROP区域仅能被指令访问,不允许数据访问(包括DMA 、调试访问)$ _# T; c* l) i H Q • 用途 • 常用于保护关键代码,只可被执行,不能被读出(dump) • 防止内部攻击:注入恶意程序读取关键代码/ \8 T Q, j( p, G+ g • 防止外部攻击:来自调试端口的读取3 i% |% z7 t1 Z m" N, G • 也可用于保护“代码化的” 关键常数数据 • 需要先将关键常数转换成代码 • CPU执行这段代码,会把关键数据恢复到SRAM或者寄存器中,这段SRAM再 使用STM32的其他存储和执行保护模块,比如Firewall保护,防止恢复出来的' c: N* r8 g' J" s 关键数据被用户代码直接读取;或者寄存器本身是WO属性 * I& h9 w0 P6 A5 f, \ $ Y6 L1 o0 e5 i1 ]* N+ ~/ m9 D Firewall,防火$ h# e# z' q9 j- H" V2 H5 E% s X • 防什么?:CPU、DMA • 保护什么? ) h0 T: e- @2 z8 ]- c • 用户片上Flash、片上EEPROM 和 片上SRAM上的指定区域(防火墙里的区域) • 保护机制 • 防火墙里的代码、数据不能被墙外的代码直接访问 • 必须走固定入口(Call Gate)进入墙里再访问4 _/ T$ o8 r9 U P+ q0 K • 出去(跳转到防火墙以外的代码)之前必须置位寄存器: t# O6 u |1 q0 Q/ U2 b" Q • 否则产生系统复位 • 由寄存器设置范围并使能,即上电缺省没有保护1 q$ Z) C. S ~( M; y • 一旦防火墙使能,保护生效直到下一次系统复位 - D5 K' H* Q. H% {, K! e 2 c2 G. {' V; C% f 7 ]. b1 \5 ]) N" L3 q7 X 墙4 a9 N' x1 w% ^3 ^ ! _/ P! K) i1 P/ u% ? 8 a: ~8 Y6 l2 d4 E- D; y% L |
微信公众号
手机版