你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H5 评测】基础硬件加密与随机数性能 - STM32H5E5实测硬件AES加解密、HASH运算、TRNG真随机数输出速率与稳定性

[复制链接]
无敌帅帅帅 发布时间:2026-10-19 15:46
整个测试包含三个部分:1 `& g: ?, d& W+ I# Y# z

4 k2 A; n  u1 E6 o1. AES加密测试
* S9 x" j" j$ L# p& @0 Y% N( H2. SHA-256测试' i# L! L& @6 |7 l* r/ l
3. TRNG生成测试
1 a# o5 e* X! y& s. c4 p' \3 r, v! o9 J3 @4 [
还是接着之前的工程代码继续测试。
4 F5 Z' a2 A" H. s  S【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
& T5 x6 g6 B9 W  q3 u9 }7 D2 n8 I! y  O$ ~+ @; {) P7 Q4 j) z
关于AES测试我在CubeMX中没有找到对应的AES外设,这里只看到HASH和RNG两个外设。
- i  a2 `: g  @6 H 10.jpg
: E- ~" o2 m) Z1 p$ V& `于是我打开官网搜索STM32H5E5ZJ芯片,这里简介也只看到了HASH和TRNG。) I" `$ s! n: \( D  C1 i: J) T
11.jpg 12.jpg
9 F6 Z4 K- i( r  b我又下载了芯片参考手册,继续搜索AES发现了有SAES,这个应该是只能在安全区使用的AES
$ c0 l* X, o! X" g" Y 14.jpg
6 U* i% j; J7 D( v! i! N然后我重新用CubeMX创建带TrustZone的工程代码,搜索AES还是没有找到,到这里我就有点搞不明白了,STM32H5E5ZJ到底有没有AES外设呢?- h; |# a2 ]! e+ [
13.jpg
: W5 R, b5 A- E8 t/ I6 m  e, ?' T' ~; k: z5 g/ z: I2 n0 \5 H9 z6 T
我在stm32h5e5xx.h中也没有找到AES和SAES相关宏定义,于是我就准备先使用软件AES加密来测试这一项。
! l/ T1 r' Q% e; s/ j
& k8 t& Z3 |* Z3 V8 n- ?
  • 1. AES加密测试4 L- U5 b, A7 V/ o3 n) E% ^
使用纯软件方法进行AES-128 ECB加密,大小为1kbyte,测试耗时。  {9 D3 T  K5 I5 ~9 j% ]" Y& r( G
2 ^6 d4 C7 ]/ b  E# y
/* 软件 AES-128-ECB 加密 1KB */0 z5 ^1 s. z* a
static void run_sw_aes_test(void): ^. `2 t  M0 c" g, V" i; \
{$ Z6 h9 w/ v! |' q. @4 q) d
    static const uint8_t key[16] = {
8 a& ?. Y" X, x2 O% q( T        0x2B,0x7E,0x15,0x16,0x28,0xAE,0xD2,0xA6,  S8 e; {$ E6 T
        0xAB,0xF7,0x15,0x88,0x09,0xCF,0x4F,0x3C5 C$ m. E3 ?3 |% N& Y
    };
3 p4 n" R) M3 A' b- _4 G) [    static uint8_t rk[11][16];6 s, \& g" Y6 ~0 c( G" p
    static uint8_t out_buf[CRYPTO_BUF_SIZE];, n2 h6 _( ]3 v+ f, C$ f* z9 |
1 Z4 E3 D6 i  K- L8 Y7 b3 O
    for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)
+ D: g& l' z7 A: z        crypto_buf = (uint8_t)i;
" g6 K' e% K; @1 n5 Q' a$ N5 j; k; u) [* W) F
    aes128_key_expand(key, rk);4 ^! j$ A& ~$ l/ q
9 c$ Q4 R# D9 I" L7 u
    uint32_t t0 = DWT_GET();
0 K' A6 E* P6 \2 N+ d    for (uint32_t off = 0; off < CRYPTO_BUF_SIZE; off += 16)
5 M7 x; A4 u/ ]) Z2 v6 Q* R        aes128_encrypt_block((const uint8_t (*)[16])rk, crypto_buf + off, out_buf + off);( W( f% O$ @2 A1 c  `
    uint32_t cycles = DWT_GET() - t0;
% F3 J: f: H% n2 X: T, W$ o
: A% d6 m/ z# {9 y+ I    printf("[4a] SW AES-128  : %lu cycles -> %lu KB/s  (1KB)\r\n",
1 O% b5 l( [% B8 g4 E5 z           cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u)));
2 \! y" y. P0 d& c7 Y}
4 a4 U5 B* f( b/ O/ t; ?$ w! i& g( d( L8 |5 i9 n$ ^$ r. v' R
  • 2. SHA-256测试1 \; T+ n( M5 w% V8 P, ^: N

0 H8 A/ ]; Q2 gHASH测试了SHA-256,也是1kbyte大小
. n7 @' z7 z8 d6 ~9 B; j7 M2 P0 E" t
/* SHA-256 哈希 1KB */  z3 N7 t. ^- d0 U* k% h
static void run_hash_test(void)
6 s9 h# r. u6 t8 b{
% Z0 I" ?8 C, m9 m' |- i: @    static uint8_t digest[32];' E* U1 ~3 Y, E" c* R0 D$ Q
1 k0 ?  K: H3 U
    for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)8 p+ t' d: \8 V+ D
        crypto_buf = (uint8_t)i;
2 r5 d8 p' G/ T4 D; R0 t8 y' s* H% b' K" M! }9 z
    uint32_t t0 = DWT_GET();
+ n8 t8 n6 `* X8 W; L2 z    HAL_HASH_Start(&hhash, crypto_buf, CRYPTO_BUF_SIZE, digest, 1000);
$ e+ k, u6 }! @2 X* {# R    uint32_t cycles = DWT_GET() - t0;
! o8 N. O& ^) A  V' S! d2 [: E2 M* x7 n
    printf("[4b] SHA-256     : %lu cycles -> %lu KB/s  (1KB)\r\n",
8 w' r# p2 M% X6 s+ j" q& O           cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u)));0 _: u) c0 p# L7 e! I. D6 _. t
}6 E) g  R+ M) U! |0 Y1 L- e( ?( h
- G# S4 q$ V9 m
  • 3. TRNG生成测试
    ' b1 G& q% B% |; x
. E8 e" {2 X$ {, x) r
随机数测试了生成1次随机数耗时, W- T" L$ i3 A* O9 z

! s" T; F0 G- O$ |2 w, |/* TRNG 真随机数生成速率 */9 i0 v' s% A$ j/ Y+ x1 l. n6 p
static void run_trng_test(void)" m  a& k2 S  Z8 W: L, Q5 O" G! p% J
{6 ?) y3 s. l  P/ V# ~7 y" Y$ C
    uint32_t val;. \( _2 g! n  [9 J5 ~# Y# L& g& o
    /* 先读一次丢弃,确保下一个已就绪 */; V* t4 X6 u5 E  Q2 z
    HAL_RNG_GenerateRandomNumber(&hrng, &val);9 @) L4 ]. o! v- W$ [/ x

/ O9 v9 J; u6 u    uint32_t t0 = DWT_GET();
% g& R$ ?8 ~) ?1 K9 q: ]# t' |( g    HAL_RNG_GenerateRandomNumber(&hrng, &val);
, S$ o7 [3 \9 S- a$ |! Q    uint32_t cycles = DWT_GET() - t0;, \4 w8 Z' P* x: E
5 e5 ^: z+ [! q0 j  K8 H
    printf("[4c] TRNG        : %lu cycles = %lu ns  (1x 32-bit)\r\n",. E. |5 r+ r& y; a9 b1 p2 r7 P
           cycles, CYCLES_TO_NS(cycles));: P: S% }- |5 Z" c7 M" r! u$ ^( o" r
}  V2 A6 M. W9 R0 J+ Y) U
1 B" E8 w+ r, f" V" p4 M
测试结果如下:3 }2 U9 C7 d) W, t7 K" b

+ y0 d9 M: n  \3 U6 b% Q[4] Crypto & TRNG Performance Test...
- f0 K3 b7 a9 V7 Y0 X8 m9 S[4a] SW AES-128  : 228948 cycles -> 1091 KB/s  (1KB)
8 K& p$ j: R' U) Q% h3 x8 J8 Y' P[4b] SHA-256     : 4587 cycles -> 54501 KB/s  (1KB)) o3 ]/ h; y8 ]7 [! S) ~6 s3 H# V
[4c] TRNG        : 69 cycles = 276 ns  (1x 32-bit)
8 R' G% H/ G) g) q! M2 T2 ]4 z. X+ C3 f
; j. F/ M- m: O$ D9 ]0 n
HASH和TRNG的测试速度都很快,因为AES使用的软件实现方法,用了一个简单的查表计算,和硬件HASH计算差异还是挺大的,就是不确定STM32H5E5ZJ芯片是不是真的没有AES外设。
5 Q/ H/ h$ z" z- ~* J! C$ P2 l: q. ^, H, m% f

+ @/ f0 B0 I- p+ O% W( a  {) Q+ i0 U- j3 f* M
& I2 A' B  g) B( x7 q# k4 B
赞 1 收藏 1 评论3 发布时间:2026-10-19 15:46

举报

3个回答
神经蛙2233 回答时间:2026-10-20 12:01:08

楼主行动迅速啊👍 ,这么快就开示评测了。AES的协处理器手册里确实写了有这硬件,CubeMX找不到或许只是Cubemx没支持,我在Cube包的例子中找到了,例子工程里面叫CRYP,其中最详细的是这在STM32Cube_FW_H5_V1.7.0\Projects\STM32H573I-DK\Examples\CRYP,这里面有5个AES相关的例子。 考虑到H5E5芯片是新出的,cube包的例子可能还没完善,但是最接近的E5的比较新的、有AES的芯片是F5。所以可以看看STM32Cube_FW_H5_V1.7.0\Projects\STM32H5F5J-DK\Examples\CRYP\CRYP_SAES_SharedKey

image.png

无敌帅帅帅 回答时间:2026-10-20 14:17:32
神经蛙2233 发表于 2026-10-20 12:01
. y! v! F6 h0 N4 s0 X$ N* T8 i7 z# @[md]楼主行动迅速啊👍 ,这么快就开示评测了。AES的协处理器手册里确实写了有这硬件,CubeMX找不到或许只是 ...
2 A3 X# j5 \2 U
这个我看过,是H573的代码,我用CubeIDE单步调试看过H5E5所有寄存器,没有找到AES相关寄存器。
& u9 y1 n+ ~& `3 t- K! B
: p9 }* o/ _5 w, G% R' x 26.jpg 27.jpg 28.jpg 29.jpg 30.jpg 31.jpg 32.jpg 33.jpg 34.jpg 35.jpg
; n  Q$ ]/ R" C$ _
神经蛙2233 回答时间:2026-10-21 09:45:44

image.png

参考:AN5959_Migrating_within_STM32H5_MCUs

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版