STM32 新系列(U5/H5/WBA/H7S/N6)搭载的安全 AES(SAES)与硬件唯一密钥(HUK),是实现嵌入式设备安全存储的核心硬件方案,可满足 EN303645、IEC62443 等标准要求,核心优势在于 “密钥不暴露、一机一密、抗攻击”,完美解决敏感数据、密钥的加密存储与安全使用需求。
资料获取:安全存储之SAES+HUK使用技巧和常见问题
1. 核心概念:SAES 与硬件密钥解析
1.1 核心组件定义
- SAES(安全 AES):独立于普通 AES 的安全加密引擎,硬件层面抵御侧信道攻击(功率 / 电磁分析)和错误注入攻击,支持硬件密钥导入,运算效率略低于普通 AES,但安全性更高。
- HUK(硬件唯一密钥):芯片出厂预置的 256bit 唯一密钥(RHUK),通过私有总线连接 SAES,CPU、DMA、调试端口均无法读取,仅 SAES 可通过密钥派生单元生成 DHUK(派生 HUK)用于加解密。
- 关键硬件密钥对比:
密钥类型 来源 唯一性 密钥可见性 核心场景 DHUK RHUK 派生 是(一机一密) 不可见 数据加密、防克隆 BHK 软件写入后备域 可选(用户定义) 锁定后不可见 Boot 阶段根密钥存储 AHK 用户烧录 OBK 区 可选(用户定义) 不可见 自定义密钥加密
1.2 SAES 核心特性
- 密钥来源灵活:支持 DHUK、BHK、AHK 及组合(如 DHUK⊕BHK)。
- 操作模式丰富:Normal(数据加解密)、Key Wrap(密钥封装)、Key Share(密钥共享)。
- 安全防护:入侵事件触发密钥自动清除,支持时域隔离(HDPL)和防重放攻击(EPOCH 计数器)。
2. 特性与系列适配对比
不同 STM32 系列对 SAES+HUK 的支持存在差异,选型时需重点关注:
| 特性 | STM32U5 | STM32WBA | STM32H5 | STM32H7S | STM32N6 |
|---|---|---|---|---|---|
| 密钥长度(128/256bit) | √ | √ | √ | √ | √ |
| 操作模式(ECB/CBC/CTR 等) | 基础模式 | √全支持 | √全支持 | √全支持 | √全支持 |
| 硬件密钥(DHUK/BHK/AHK) | 前两者 | 前两者 | 前两者 | 三者均支持 | 前两者 |
| HDPL 时域隔离 | × | × | √ | √ | √ |
| EPOCH 防重放 | × | × | √ | √ | √ |
| 时钟依赖(SHSI/HSI48) | √需使能 | × | × | × | × |
关键提醒:STM32U5 是唯一需要单独使能 SHSI(SAES 内核时钟)和 HSI48(RNG 时钟)的系列,其他系列无需额外配置。
3. 典型用例:安全存储实战方案
3.1 数据安全存储(防克隆、一机一密)
目标
- 加密存储机密数据(如用户配置、敏感参数),仅本机可解密,防设备克隆。
实现方案
- 采用 SAES Normal 模式,密钥选择 DHUK 或 DHUK⊕BHK。
- 加密流程:明文数据 → SAES(DHUK 密钥)→ 密文存储(Flash/OBK)。
- 解密流程:密文 → SAES(本机 DHUK)→ 明文,其他设备因 DHUK 不同无法解密。
核心优势
- 无需软件管理密钥,DHUK 一机一密,天然防克隆;密钥永不暴露,抵御暴力破解。
3.2 AES 密钥安全存储(密钥不暴露)
目标
- 存储用户自定义 AES 密钥(如通信共享密钥),密钥全程不暴露明文。
实现方案(二选一)
| 方案 | 核心逻辑 | 优势 | 适用场景 |
|---|---|---|---|
| Key Wrap 模式 | 明文 AES 密钥 → SAES(DHUK 封装)→ 密文存储;使用时 SAES 解密后自动导入 SAES 密钥寄存器 | 抗侧信道攻击 | 对密钥安全性要求高 |
| Key Share 模式 | 明文 AES 密钥 → SAES(DHUK 封装)→ 密文存储;使用时 SAES 解密后自动导入普通 AES 模块 | 运算效率高 | 对加解密速度有要求 |
关键要点
- 密钥仅以密文形式存储,使用时明文仅存在硬件内部,软件无法访问。
3.3 非对称密钥安全存储(签名 / 验签安全)
目标
- 存储设备私钥(如 RSA/ECC 私钥),仅可信代码可使用,防篡改、防泄露。
实现方案
- 私钥加密:非对称私钥 → SAES(DHUK)→ 密文存储(Flash 安全区 / OBK)。
- 可信执行:结合 TrustZone,密钥仅允许安全侧代码访问,使用时解密至安全 SRAM,运算后立即清除。
- 公钥处理:公钥可附加完整性校验,可选加密存储。
核心价值
- 私钥全程不暴露,调试端口(非 Open 状态)无法访问,满足安全认证场景需求。
4. 常见问题与避坑技巧
4.1 SAES 初始化失败(STM32U5)
- 现象:TF-M 环境下
tfm_crypto_init失败,HAL_CRYP_Init 超时。 - 原因:未使能 SHSI(SAES 内核时钟)和 HSI48(RNG 时钟)。
- 解决:在初始化代码中添加时钟使能:
RCC->CR |= RCC_CR_HSI48ON; // 使能HSI48(RNG依赖) RCC->CR |= RCC_CR_SHSION; // 使能SHSI(SAES内核依赖)
4.2 Stop 模式唤醒后 SAES 运算异常(STM32U5)
- 现象:唤醒后 SAES 加解密结果全为 0。
- 原因:Stop 模式下 SHSI/HSI48 时钟失能,SAES 内核无驱动时钟。
- 解决:唤醒后重新使能两个时钟,再启用 SAES 时钟。
4.3 ECB/CBC 模式连续解密结果异常
- 现象:第一次解密正常,第二次解密结果错误。
- 原因:解密前需执行密钥准备(Mode 2),第一次解密后密钥寄存器变为派生解密密钥,第二次基于错误密钥运算。
- 解决:两次解密之间重新初始化 CRYP 或重配置参数:
HAL_CRYP_GetConfig(&hcryp, &Conf); __HAL_CRYP_DISABLE(&hcryp); HAL_CRYP_SetConfig(&hcryp, &Conf); // 重新加载原始硬件密钥
4.4 不同芯片加密结果相同
- 现象:DHUK 加密同一段数据,多芯片密文一致。
- 原因:芯片处于 Open 状态(RDP=0/Product State=Open),真实 HUK 未激活,使用默认测试密钥。
- 解决:将芯片设置为非 Open 状态:
- U5/WBA:RDP 设置为 0.5 及以上。
- H5/H7S:Product State 设为 Closed/TZ Closed。
- N6:保持默认 BSEC Closed 状态。
SAES+HUK 是 STM32 实现 “硬件级安全存储” 的核心方案,核心价值在于 “密钥不暴露、一机一密、抗攻击”,适配从物联网终端到工业控制的各类安全需求。开发时需重点关注:系列适配(尤其 STM32U5 的时钟配置)、密钥选型(按场景选 DHUK/BHK/AHK)、模式选择(安全优先选 Key Wrap,效率优先选 Key Share),同时避开常见的时钟、解密流程问题。
阅读全文
653