• 正文
  • 相关推荐
申请入驻 产业图谱

STM32 SAES+HUK 安全存储实战指南:特性、用例与避坑技巧

11/21 13:20
653
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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,CPUDMA、调试端口均无法读取,仅 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),同时避开常见的时钟、解密流程问题。

相关推荐