【STM32H5 评测】Part3 STM32H5E5 密码学加速性能测试
H5E5这个型号,虽然有H5全系标配的密码学硬件(RNG PKA HASH obkey等),但它不是主打安全的型号,缺少AES SAES等对称加密硬件。最容易令人迷惑的是,E5虽然有PKA(支持RSA 、ECDSA等非对称加密)硬件,但是却只有一半功能,E5的PKA只能验签,不能签名。虽然但是,E5也足够应对绝大多数安全场景的需求了,签名在云端服务器或工厂的计算机上做就可以,终端产品主要是验签。
1. 测试对象
- 芯片:STM32H5E5ZJ(NUCLEO-H5E5ZJ 开发板)
- 核心主频:HCLK = 250 MHz
- 被测外设:RNG(硬件随机数)、HASH(SHA-256 硬件加速)、PKA(公钥加速器)
2. 测试目标
- 验证 RNG、HASH、PKA 三个密码学外设的功能正确性
- 测量各外设的运算耗时 / 吞吐速率
3. 测试步骤
3.1 CubeMX 配置外设生成代码框架
在 STM32CubeMX 中启用以下外设并生成代码:
| 外设 |
关键配置 |
| RNG |
时钟错误检测 CED 使能 |
| HASH |
算法 = SHA-256,数据格式 = All bytes reversed |
| PKA |
默认(使能即可,无额外参数) |

3.2 从 STM32Cube 固件库移植参考代码
从以下路径提取测试所需的曲线参数和测试向量:
| 文件 |
来源 |
内容 |
prime256v1.c/h |
Projects/STM32H573I-DK/Examples/PKA/PKA_ECDSA_Sign |
NIST P-256 曲线参数(素数 p、系数 A/B、生成元 G、阶 n) |
sig_vectors.c/h |
Projects/NUCLEO-H5E5ZJ/Examples/PKA/PKA_ECDSA_Verify |
NIST CAVP [P-256, SHA-256] 签名验证测试向量(消息、公钥、签名 R/S、预期 hash) |
4. 关键代码
4.1 RNG 随机数生成
static HAL_StatusTypeDef rng_bytes(uint8_t *out, uint32_t len)
{
uint32_t val, i = 0;
while (i < len)
{
if (HAL_RNG_GenerateRandomNumber(&hrng, &val) != HAL_OK)
return HAL_ERROR;
uint8_t *p = (uint8_t *)&val;
for (int b = 0; b < 4 && i < len; b++)
out[i++] = p[3 - b]; /* big-endian */
}
return HAL_OK;
}
4.2 SHA-256 正确性 + 吞吐
/* correctness: 对比 NIST CAVP 预计算 hash */
HAL_HASH_Start(&hhash, (uint8_t *)SigVer_Msg, SigVer_Msg_len, hash_buf, 5000);
memcmp(hash_buf, SigVer_Hash_Msg, 32);
/* throughput: 8KB buffer 循环 40 次 */
for (int i = 0; i < 40; i++)
HAL_HASH_Start(&hhash, big_msg, 8192, hash_buf, 5000);
4.3 ECDSA P-256 验签
PKA_ECDSAVerifInTypeDef v = {0};
v.primeOrderSize = prime256v1_Order_len;
v.modulusSize = prime256v1_Prime_len;
v.coefSign = prime256v1_A_sign;
v.coef = prime256v1_absA;
v.modulus = prime256v1_Prime;
v.basePointX = prime256v1_GeneratorX;
v.basePointY = prime256v1_GeneratorY;
v.primeOrder = prime256v1_Order;
v.pPubKeyCurvePtX = SigVer_Qx; /* NIST 测试向量公钥 */
v.pPubKeyCurvePtY = SigVer_Qy;
v.RSign = SigVer_R;
v.SSign = SigVer_S;
v.hash = SigVer_Hash_Msg;
HAL_PKA_ECDSAVerif(&hpka, &v, 10000);
HAL_PKA_ECDSAVerif_IsValidSignature(&hpka);
5. 测试结果
Release 版本(HCLK 250 MHz)实测数据:
| # |
测试项 |
指标 |
结果 |
| 1 |
RNG 256-bit 随机数 |
生成耗时 |
< 1 ms |
| 2a |
SHA-256 正确性 |
与 NIST CAVP 预计算 hash 对比 |
匹配 |
| 2b |
SHA-256 吞吐 |
40 × 8KB = 320 KB |
7 ms,44.6 MB/s |
| 3 |
ECDSA P-256 验签(正向) |
NIST CAVP 测试向量 |
12 ms,VALID |
| 4 |
ECDSA P-256 验签(负向) |
篡改 hash 后重验 |
12 ms,INVALID(预期) |
6. 结论
- RNG / HASH / PKA 硬件加速均工作正常,功能正确性与 NIST CAVP 参考向量一致。
- SHA-256 吞吐约 44.6 MB/s(250 MHz),为纯软件实现的数量级以上。
- ECDSA P-256 单次验签约 12 ms。
- STM32H5E5 的 PKA 处于 Limited Mode(状态寄存器
PKA_SR_LMF 恒为 1),硬件仅支持 ECDSA 签名验证,不支持密钥对生成(ECCMul)和签名生成(ECDSASign)。签名功能需要选用 STM32H573 等带 Full PKA 的型号。
测试环境:CubeMX 生成框架 + HAL 库 + ARM GNU Toolchain 14.3.1,Release 优化,ICACHE 开启