Professional Documents
Culture Documents
1 STM32助力代码保护
1 STM32助力代码保护
STM32助力代码保护
Ver 1.0
代码保护需要保护什么? 2
分析风险在哪里 3
Cloud
产品定义
产品终结 产品设计
OEM
固件升级
产品维护 产品开发
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+
Cortex®
6
存储器保护单元(MPU) 7
代码区域
• 从一个单独的入口进入防火
墙,在其他任何位置访问防 Cortex-M GP-DMA
火墙内部都会导致系统复位
• 适用于保护独立于应用的算
总线矩阵
法,或者有关于安全的敏感
操作(例如哈希运算)
复位
非法访问/数据
PCROP(私有代码读取保护) 9
或修改
• 被保护的区域只能用于运行代码
WRP1a_start@
WRP1a
• 适合用来可执行代码的完全隔离 WRP1a_end@
PCROP_start@
• 适合用于保护第三方的知识产权
Protected
• 使用方法 area
• 指定存储区的起始与结束地址
• 一旦启用,该区域即受到保护 PCROP_end@
• 执行整片擦除时该区域也可以被保留
PCROP(私有代码读取保护) 10
STM32 读保护 11
BackUp Reg
FLASH FLASH
SRAM2 SRAM2
SRAM1 SRAM1
• 可以按扇区保护存储
的内容不被意外修改
• 对系统复位不敏感
• 如果关闭写入保护,
已经写入的数据会被
擦除
• 保护数据的有力工具
Unique-ID 与 TRNG 13
芯片唯一编码 与 真随机数发生器
• 在ST工厂内预置的唯一设备鉴定码
• 对带有ID的STM32芯片都能做到全球唯一
• ST的编码规则保证了编码在几十年内都不会有重复
• 这个唯一编码适用于:
• 使用算法产生产品序列号
• 与加密机制使用产生绑定芯片的操作,或用于增强安全性(生成密钥)
• 在启动引导阶段用于设备签名
• 基于物理噪声的硬件随机数发生器
• 广泛用于加解密应用以及通讯
STM32 AES 硬件运算单元 14
高级加密标准 硬件运算单元
• 将原始明文用硬件运算转换为无法认读的密文
• 支持标准的操作模式和密钥大小
• 支持数据交换
• 支持DMA
• 支持几种标准的AES链模式
Cipher Key
Encryption direction
Decryption direction
STM32 AES 硬件运算单元 15
Data swapping
Key: 128- 256-bit
decryption
Data out
AES chaining mode
Data In
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)
CRC computation
engine
Polynomial
Reset/Initial value
Bit reversal (in/out)
• 支持所有的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)
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
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