Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

1

STM32助力代码保护
Ver 1.0
代码保护需要保护什么? 2
分析风险在哪里 3

Cloud

产品定义

产品终结 产品设计
OEM
固件升级

产品维护 产品开发

产品发布 原型测试 Firmware

ODM/CONTRACTOR
对代码保护安全性的正确认识 4

不可破解 • 破解成本高于破解带来的收益

• 没有不需要成本的保护
保护不需要成本
• 越高等级的保护成本也越高

保护是一劳永逸的 • 保护都是有时效性的

• 应该在产品设计阶段就充分考虑代
产品完成后再考虑保护 码的安全性设计
5

STM32的安全相关功能
系列
STM32

STM32 L0
STM32 F7
STM32 F4
STM32 F2
STM32 L1
STM32 F0
STM32 F1

STM32 L4
STM32 F3

STM32 H7
*ARM Debug
TRM Port

RESET
RMxxxx
Register

FLASH
AN4246
WRP

FLASH Mass
RMxxxx
ERASE

Tamper
AN3371
Pins

CRC
RMxxxx
Hardware

96-Bit
Unique ID

Crypto Library
UM1924
Support

AN4838
MPU
*AN179

FLASH
AN4246
RDP

AN4230 TRNG
安全相关的功能

AES Hardware
UM1924
Accelerator
AN4968
FLASH
AN4701
PCROP
AN4758
HASH Hardware
UM1924
Accelerator

AN4729 Firewall

SRAM
AN4729
RDP

Sys Clock
32
32
48
72
72

80

400
216
180
120

(MHz)

ARM
M7
M7
M4
M3
M3
M0
M4
M3

M4
M0+

Application Note# (AN)/User Manual# (UM)/Reference Manual#(RM) (www.st.com/mcu) (*infocenter.arm.com)

Cortex®
6
存储器保护单元(MPU) 7

Memory Protection Unit


MPU example
• Cortex™-M内核上的可选功能
Bootloader@ addr:
No Access
Region 0
• 读取、写入、只执行,或不可访问
的权限管理 Region 1
• 按区域根据设置的参数进行存储区
保护 MSP@ addr:
• 8个存储区保护区域 Privileged RW
Region 3
Main Stack
• 如果有非法访问,内核就会产生硬
件错误或者锁定
PSP@addr:
Unprivileged RW
Region 4
Process Stack
• 构建一个与其它代码隔离的
带有数据存储的“可信任”
STM32防火墙 8

代码区域
• 从一个单独的入口进入防火
墙,在其他任何位置访问防 Cortex-M GP-DMA
火墙内部都会导致系统复位
• 适用于保护独立于应用的算
总线矩阵
法,或者有关于安全的敏感
操作(例如哈希运算)

• 检测到对保护区域的任何侵 SRAM AHB/APB桥 Code


入都会导致MCU复位,包括 Data
DMA和中断侵入
• 启动配置完成后一直保持有 防火墙
效,直到下次系统复位

复位
非法访问/数据
PCROP(私有代码读取保护) 9

• 可以保护FLASH存储区不被第三方读取 Flash Bank 1 example

或修改

• 被保护的区域只能用于运行代码
WRP1a_start@
WRP1a
• 适合用来可执行代码的完全隔离 WRP1a_end@

PCROP_start@
• 适合用于保护第三方的知识产权
Protected
• 使用方法 area
• 指定存储区的起始与结束地址
• 一旦启用,该区域即受到保护 PCROP_end@
• 执行整片擦除时该区域也可以被保留
PCROP(私有代码读取保护) 10
STM32 读保护 11

Option RDP ≠ 0xCC


RDP = 0xAA RDP = 0xCC
Byte RDP ≠ 0xAA

Level 0 Level 1 Level 2


(开放的) (有限的访问) (不能访问)
BackUp Reg

BackUp Reg
FLASH FLASH

SRAM2 SRAM2
SRAM1 SRAM1

调试工具 / 从SRAM启动 / 从固化的系统存储区启动


存储区写入保护 12

• 可以按扇区保护存储
的内容不被意外修改

• 对系统复位不敏感

• 如果关闭写入保护,
已经写入的数据会被
擦除

• 保护数据的有力工具
Unique-ID 与 TRNG 13

芯片唯一编码 与 真随机数发生器
• 在ST工厂内预置的唯一设备鉴定码
• 对带有ID的STM32芯片都能做到全球唯一
• ST的编码规则保证了编码在几十年内都不会有重复

• 这个唯一编码适用于:
• 使用算法产生产品序列号
• 与加密机制使用产生绑定芯片的操作,或用于增强安全性(生成密钥)
• 在启动引导阶段用于设备签名

• 基于物理噪声的硬件随机数发生器
• 广泛用于加解密应用以及通讯
STM32 AES 硬件运算单元 14

高级加密标准 硬件运算单元
• 将原始明文用硬件运算转换为无法认读的密文
• 支持标准的操作模式和密钥大小
• 支持数据交换
• 支持DMA
• 支持几种标准的AES链模式

Cipher Key

Plaintext Cipher Ciphertext

Encryption direction
Decryption direction
STM32 AES 硬件运算单元 15

NIST FIPS 197 compliant implementation of AES

DMA request for AES operation mode


DMA request for
incoming data transfer
Encryption Key derivation outgoing data transfer

Decryption Key derivation +


Data swapping

Data swapping
Key: 128- 256-bit
decryption

Data out
AES chaining mode
Data In

ECB CBC CTR

GCM GMAC CMAC

AES Accelerator
STM32哈希运算处理器 16

HASH
• 硬件实现SHA1, SHA2和
MD5哈希算法
HASH
• 支持数据交换

Data swapping
Message

Input FIFO
• 支持DMA MD5 SHA-1, SHA-224
SHA-256 Digest

16 x 32bit
H0..H7
HMAC 8x32bit

HASH Processor

Compliant with:
FIPS Pub 180-2
Secure HASH Standards (SHA-1*, SHA-
224, SHA-256)
IETF RFC 1321 (MD5*)
STM32循环冗余检查 17

• 支持8,16,32位CRC
AHB Bus
• 支持DMA
32-bit (read access)

Data register (Output) • 用于检查数据完整性

CRC computation
engine

Polynomial

Reset/Initial value
Bit reversal (in/out)

Data register (Input) with buffer


32-bit (write access)
STM32加解密软件库 18

• 支持所有的STM32系列产品
• STM32F0, STM32F1, STM32F2, STM32F3, STM32F4, STM32F7, STM32L0, STM32L1
and STM32L4 (H7 in development)

• 以库文件形式发布,用户只需要调用相应的API

• 支持算法:
• DES &, 3DES, with ECB & CBC chaining modes
• AES, with ECB, CBC, CFB, OFB, CCM, GCM, CMAC, KEY WRAP, XTS modes
• Others: ARC4, ChaCha20, Poly1305, Chacha20-Poly1305
• HASH FUNCTIONS: MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
• RSA signature functions with PKCS#1v1.5
• ECC, with Key Generation, Scalar Multiplication (the base for ECDH) & ECDSA
• New ECC schemes: ED25519 & Curve25519

• 支持所有带硬件运算(HASH/AES)加速单元的STM32
STM32后备域、反侵入检测、OTP 19

• 独立的电源供电
Backup Domain
• 当VDD掉电时自动切换到VBAT电源上
• 当使用VDD供电时VBAT上没有电流 VBAT
power switch
RCC BDSR 32KHz OSC
reg (LSE)

• 后备域包括 VDD Wakeup


IWWDG
Logic
• 日历时钟 Anti-tamper
• 后备域寄存器与后备域SRAM switches
RTC
RTC_TAMP1
xx Register Bytes
• 为RTC提供独立的32KHz振荡器 SRAM*

RTC_TAMP2 Tamper

• 反侵入检测输入引脚 detection
RESET & Interrupt

• 电平触发 RTC_TAMP3

• 复位后备域寄存器与SRAM
Optional
• 记录侵入时间戳 filtering
capacitors

• 一次性编程区域
• 适合用于产品签名、证书或者密钥
STM32代码保护举例
如何防止产品代码被简单地复制 22

增加产品代码被复制的难度

代码多样化 增加反汇编难度 让结果不确定

使用UID参与特异化数
在代码中多次检验, 将特异化参数与影响
据计算
并内联检验函数 系统性能的参数绑定
增加产品代码的差异
数量
在检测失败时使系统
经常验证代码完整性
性能变差
定制化编程器
使用MPU等功能使代码
在汇编条件下难于调 延迟系统失效时间
使用自修改代码

软件的二次开发保护 23

为用户提供系统平台

存储器保护单元
BOOT (MPU)

防火墙
(Firewall)
应用
代码 私有代码保护
(PcROP)
软件的二次开发保护 24

提供软件库给客户用于开发

私有代码保护
(PcROP)

防火墙
(Firewall)
BOOT
应用代码
存储器保护单元
(MPU)
代码保护:远程安全升级代码 25

工厂阶段
量产工具
产品验证私钥 1
UID
2
签名
UID
UID

3 4 IAP程序 IAP
IAP程序 程序 产品验证码
通讯公钥 产品验证码
通讯公钥
5 应用可执行代码
可执行代码融合
应用可执行代码 V1.0 UID
应用可执行代码
模板 V1.0 UID V1.0 UID

产品验证密钥对 产品通讯密钥对 临时密钥


代码保护:远程安全升级代码 26

1 升级阶段
2
远程升级工具 UID
解密
通讯私钥
4
UID  UID
TRNG UID
3
验签 IAP
产品验证公钥
产品验证码 程序 产品验证码
5
可执行代码融合
应用可执行代码 通讯公钥
模板 V1.1 UID
应用可执行代码
临时密钥 临时密钥
6 V1.0
V1.1 UID
UID

应用可执行代码 密 HASH
V1.1 UID
加密 文 解密
7 校验码

8
HASH  9
校验码 签名 密文 验签 校验码
关键点总结 27

开发者应该做些什么?
• 代码安全是被设计出来的,最好是在开发的最初阶段

• 充分了解嵌入式产品的完整安全架构

• 分析和理解所有固件的加载机制

• 考虑过程与安全的生命周期

• 执行完整的产品安全分析并决定哪些功能是可实现的

• 开发必要的启动加载程序
29

You might also like