本文梳理意法半导体(ST)的安全存储做法,以及跨多款 STM32 的密钥管理能力。
引言
要护住敏感信息,既要安全存放,也要控制谁能碰明文。敏感资产通常分两类:
- 密码学密钥
- 机密应用数据
STM32 安全架构用两层互补机制来做这件事:
- 安全存储(密钥存储):把密码学密钥与机密数据放稳,用硬件或软件访问控制挡住未授权访问
- 密钥管理:覆盖密钥全生命周期:安全供给、隔离、封装(wrap)/解封(unwrap)与使用,全程不暴露明文密钥
密钥管理靠专用硬件:Secure AES(SAES)与 Coupling and Chaining Bridge(CCB),做密钥隔离、密钥封装,以及给密码运算用的安全密钥共享。
1. 安全存储
安全存储用来在 STM32 上护住静态密码学密钥与机密应用数据,并做访问控制。
各系列实现不一样。本节说三条路:
- OBKeys:STM32H5 与 STM32H7R/S 上的专用硬件密钥存储 IP
- Customer Secure Storage(CKS):STM32WB 特有的 CPU 隔离安全存储
- 基于软件的安全存储:依托 STM32 硬件隔离机制
1.1 OBKeys
仅 STM32H5 与 STM32H7R/S 有。专用非易失存储器,用来放安全存储与密码学用的密钥。
存储按 HDPL(HDP level)域划分。每个域有自己的安全存储区与访问规则。访问控制由 SBS(system configuration, boot, and security)执行;H5 与 H7R/S 规则不同。SBS 见附录。
- 数据可安全供给(使用 RSS 函数
RSSLib->DataProvisioning()) - 数据隔离,仅授权系统部分可访问
- 防回滚与防克隆
- 数据无法从系统中提取或被复用
OBKeys 存放两类密钥:
- 应用硬件密钥(AHK),亦称硬件密钥:索引 0–7。用户不可访问,直接注入 SAES 引擎。可为 STiRoT 密钥或 Memory Cipher Engine(MCE)密钥(外部存储器加密)。SAES 经专用总线访问这些密钥。
- 软件密钥:索引 8–31,与用户应用相关,可由软件读/写,可供给(如 bootloader 密钥等)。
OBKeys 特性包括:
- 经 HDPL 级别控制访问
- 密码隔离:密钥可用 DHUK 或 AHK 加密存放
- 经 EPOCH 提供防回滚与防重放
- 某一 HDPL 级别可访问其当前 OBKey 区以及下一级(N 与 N+1)
1.2 硬件密钥
硬件秘密密钥用于在不暴露应用密钥的前提下保护它们。由 ST 建立,应用永远无法访问。STM32 上的硬件密钥概览:
- Hardware Unique Key(HUK),亦称 Root Hardware Unique Key(RHUK):制造阶段由 ST 供给的 256 位密钥
- Boot Hardware Key(BHK):存放于抗篡改备份寄存器,在启动时写入。一旦写入,在下次产品复位前应用既不可读也不可写
- Device Unique Attestation(DUA):制造阶段由 ST 供给的私钥(仅 U3 提供)
- 器件电子签名含芯片自身信息;这些密钥经密钥派生函数生成新密钥:
- Derived Hardware Unique Key(DHUK):由 RHUK 与当前 HDP 级别生成,每器件一把 256 位 AES 密钥
对 H5 与 H7R/S,还增加了用作密钥派生参数的计数器:
1.3 H7S/R 的安全存储
三个 OBKey 区,对应每个 HDP 级别(0、1、2),最大约 1 KB。概览:
- HDPL0:永久分配给意法半导体,永不擦除
- HDPL1:用于 initial Root of Trust(iRoT)密钥,可通过 regression 擦除
- HDPL2:用于用户应用,或若使用则用于 updatable root of trust(uRoT)
1.4 H5 的安全存储
- HDPL0:永久分配给意法半导体,永不擦除
- HDPL1:用于 iRoT 密钥,可通过 regression 擦除
- HDPL2:用于 secondary Root of Trust(uRoT)、操作系统(OS)或安全应用,也可通过 regression 擦除
- HDPL3S:保留给安全应用密钥,可通过 regression 擦除
- HDPL3NS:分配给非安全应用密钥,可通过非安全 regression(NS regression)擦除
OBKeys 用法流程:密钥存储固件选择当前上下文(含 HDPL 与安全/非安全状态)并交给硬件密钥访问控制单元;该单元按当前 HDPL 上下文与 SBS 寄存器选择 OBK-HDPL 与 EPOCH(应用设置 EPOCH_SEL);OBK-HDPL 选择 flash 中的安全存储区并在 SAES 中选择对应 DHUK;检查请求域是否可访问,无违规则用 DHUK 加密数据。
1.5 H7R/S 与 H5 对比
| 特性 | STM32H5 | STM32H7R/S |
|---|---|---|
| 安全存储技术 | 称为 OBKeys 的专用安全存储区 | 内部 flash 中的 OBK 安全存储 |
| 域数量 | 5 个域:HDPL0、HDPL1、HDPL2、HDPL3S、HDPL3NS | 3 个域:HDPL0、HDPL1、HDPL2 |
| TrustZone 安全/非安全划分 | 有,经 HDPL3S/HDPL3NS | OBK 无 TrustZone 支持 |
| 总存储大小 | 最多约 8 KB | 最大 1 KB |
| 访问模型 | 存储器映射 | 基于寄存器、链式列表结构 |
| OBKeys 覆盖的最大 HDPL | 直至 HDPL3 | 仅至 HDPL2 |
| 加密基础 | 支持密码的器件上每 HDPL 的 SAES + DHUK | SAES + DHUK 或 AHK |
| 防克隆/防回滚 | 支持 | 支持,含基于 EPOCH 的防回滚 |
| 供给 | RSSLib->DataProvisioning() |
RSSLib->DataProvisioning() |
| 供给时使用的加密密钥 | DHUK | AHK |
1.6 Customer secure storage(CKS)
仅 STM32WB 提供。STM32WB 有两颗 CPU:CPU1(Cortex®-M4)跑用户应用;CPU2(Cortex®-M0+)跑网络栈。
CKS 是仅 CPU2 可访问的安全存储方案:在安全区存放已供给密钥,使 AES 外设能安全访问这些密钥而不暴露,并向用户返回结果。这一切由 CPU2 管理,与运行用户应用的 CPU1 完全隔离。
1.7 基于软件的安全存储
ST 还提供软件方案:向用户应用暴露安全存储服务;这些服务靠下表里的硬件隔离机制隔开并保护。
| STM32 器件 | 硬件隔离 | 方案 |
|---|---|---|
| STM32L4 与 STM32L4+ | Firewall 与 MPU | SBSFU legacy;key management services(KMS),经 PKCS#11 API 提供安全存储与安全密钥管理 |
| STM32H573 | TrustZone®、MPU、HDP level | Secure Manager:Internal Trusted Storage(ITS)、Protected Storage(PS);ST 专有 TEE,经 PSA API 提供安全服务 |
| STM32H5、STM32U3、STM32L5、STM32WBA、STM32U5 | TrustZone®、MPU | TF-M(Trusted Firmware-M):开源 TEE,经 PSA API 暴露相同 ITS/PS 服务 |
注:PKCS#11(Public Key Cryptography Standards #11)是密码令牌/HSM 接口标准。PSA(Platform Security Architecture)是 Arm 的安全框架,用来规范联网设备的硬件与固件安全。
2. 密钥管理
密钥管理通过:
- SAES:secure AES 外设
- CCB:Coupling and Chaining Bridge
2.1 Secure AES(SAES)
SAES 是做安全密钥管理的硬件 AES 加速器(不只是把 AES 算得快),带抗侧信道攻击(SCA)与差分功耗分析(DPA)能力。
与标准 CRYP 外设不同,SAES 通过以下能力保护密钥免受软件与物理攻击:
- 只写密钥寄存器(可写不可读)
- 硬件管理的秘密密钥
- 密钥封装与解封
- 与 CRYP/AES 外设的安全密钥共享
- DPA 抗性
- 硬件 RNG 集成
正常模式下,CPU 将密钥载入 SAES 只写寄存器后无法回读。
做密钥管理时,SAES 支持密钥派生:经派生函数管理 DHUK,供后续封装/解封;DHUK 不暴露,按需生成。DHUK 派生依系列而定,一般以 RHUK 与当前 HDPL 级别为输入。
密钥封装/解封是密钥保护与隔离机制;密钥不应明文存放。对称密钥用 SAES 封装/解封;非对称密码则由 PKA 与 CCB 配合 SAES(见后文)。
封装过程概要:选择硬件秘密密钥(DHUK 或 DHUK XOR BHK 等,依系列而定)→ 提供待加密密钥 → 执行封装(加密;可选链接/计数器等模式)→ 保存到 flash。
解封:选择硬件秘密密钥 → 将已封装密钥写入数据寄存器 → 在 SAES 内解密并放入只写密钥寄存器 → 应用按需使用。
SAES 适合管密钥,但不是为高吞吐加密优化的。标准 CRYP/AES 跑批量数据更快,却护不住密钥。两边都要时,用 SAES 的密钥共享:从安全存储里选出密钥,共享给 CRYP/AES 做快速运算,应用看不到明文。两步:SAES 内部解封;再经硬件通路把解封后的密钥直接写进 CRYP/AES 密钥寄存器。
2.2 Coupling and chaining bridge(CCB)
CCB 用来护私钥,连 CPU 也碰不到明文。密钥用器件唯一密钥封装后放进安全存储。它夹在安全存储、SAES 与 PKA(有时还有 RNG)之间。
CCB 在 H5(并非全部 H5)、U3、C5 上按系列与料号提供。
内部机制:
- Coupling:CPU 同时向 SAES 与 PKA 投喂数据(同时发命令)
- Chaining:一个外设的结果作为另一外设的输入
DUA:制造阶段由 ST 预供给的密钥对(私钥与公钥),ECC 算法生成,约 265 字节。公钥可通过经 ST CA 签名的证书访问;私钥经封装,可通过 RSSe KW 服务访问。RSS KW 提供仅在特定器件可用的封装密钥。详见 STM32 wiki 上 STM32U3 的 KW 说明。
私钥相关高层用例:密钥对生成、安全密钥导入(RSA)、密钥协商(ECDH)、安全证明(数字签名)。ECDSA / ECC / RSA 支持矩阵:
| ECDSA 签名 blob | ECC 密钥 blob | RSA 密钥 blob | |
|---|---|---|---|
| (运算) | 签名 | 标量乘法 | 模幂 |
| 密钥生成 | yes | yes | - |
| 密钥导入 | - | yes | yes |
| 密钥协商 | - | yes | yes |
| 证明(attestation) | yes | - | yes |
2.3 私钥保护、封装与解封
明文密钥写入 PKA 存储器;由 CCB 负责送到 SAES 数据输入寄存器。SAES 内密钥派生函数收到标明使用 CCB 的附加参数。封装/解封使用 AES-GCM(带 Galois/Counter Mode)以实现认证加密。私钥封装与解封即走上述通路。
2.4 跨 STM32 产品的密钥管理矩阵
下表概括各系列通过硬件秘密密钥、密码外设与访问控制机制实现的密钥管理:
| 密钥管理 | U5 | N6 | WB6 | C5 | H5 | U3 | H7R/S |
|---|---|---|---|---|---|---|---|
| Keys · HUK | x | x | x | x | x | x | x |
| BHK | x | x | x | x | x | x | x |
| Access management · SAES | x | x | x | x | x | x | x |
| PKA | x | x | x | x | x | x | x |
| CCB | - | - | - | x | x | x | x |
| 密钥使用策略¹ | TZ | TZ | TZ | HDPL | HDPL/TZ/EPOCH | TZ | HDPL/EPOCH |
¹ 密钥使用策略:由硬件密钥访问控制与密码外设上下文强制执行,依系列可包含安全/非安全状态、HDPL、SBS 设置与 EPOCH。
3. 附录:System configuration boot and security(SBS)
SBS 是替代 SYSCFG 的外设,按料号出现在 STM32 C5、H5、H7R/S、U3。主要功能:
- 启动控制:设置正确启动地址与 HDPL 级别
- 调试控制:控制器件重新打开,保证正确事件序列以维护器件安全
- 系统配置(EXTI 源等)
- 安全状态:BKPRAM 与 PKA SRAM 擦除
- RSSCMD:应用向 RSS 传递命令
结论
本文覆盖了安全存储(OBKeys、CKS、软件途径)、密钥管理(SAES 与 CCB),以及跨 STM32 产品的密钥管理摘要。
来源:https://community.st.com/stm32-mcus-60/how-to-navigate-stm32-secure-storage-and-key-management-across-stm32-series-167818
参数以意法半导体官方最新资料为准。
74
