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

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

[复制链接]
无敌帅帅帅 发布时间:2026-10-19 15:46
整个测试包含三个部分:" A* B7 w* h" ^# O: V& {1 i+ x

% x4 Z3 B. e" t1 ]# R1. AES加密测试( J3 E# c! B* ^4 g
2. SHA-256测试' v0 D; a9 V" |) X
3. TRNG生成测试
( Y. m5 O8 v! P8 C  _$ t4 W$ u  A( b7 Y2 m
还是接着之前的工程代码继续测试。
- ~  E% Z' P) k+ o! J! `$ U* t6 d【STM32H5 评测】CPU核心性能 - STM32H5E5跑 RTOS,观察任务切换速度、中断响应快慢
$ J5 K0 u* V! J5 A
. P3 }  X$ l9 Q: i8 z+ S8 P关于AES测试我在CubeMX中没有找到对应的AES外设,这里只看到HASH和RNG两个外设。
% J/ k% N1 A' m; N5 a0 X 10.jpg * H: c8 h. d0 N+ _
于是我打开官网搜索STM32H5E5ZJ芯片,这里简介也只看到了HASH和TRNG。
  T- K. H3 ]6 _8 F. p 11.jpg 12.jpg 0 Q% Y. T) x* N* X1 Y% M1 s
我又下载了芯片参考手册,继续搜索AES发现了有SAES,这个应该是只能在安全区使用的AES
/ ~* d, l5 F4 e3 ~ 14.jpg : J% ?: z1 z# v6 e" ]
然后我重新用CubeMX创建带TrustZone的工程代码,搜索AES还是没有找到,到这里我就有点搞不明白了,STM32H5E5ZJ到底有没有AES外设呢?7 Q3 k5 Q$ G9 G% [" C* H! o$ y( B
13.jpg - T! [0 g/ o, F; ^; @& J1 ^; x
* {& |2 v0 k6 f2 |" c0 S( C; Q
我在stm32h5e5xx.h中也没有找到AES和SAES相关宏定义,于是我就准备先使用软件AES加密来测试这一项。7 r: _$ o6 ?/ `8 T5 _

4 |4 r0 X3 h5 D; A+ ^# B4 S
  • 1. AES加密测试8 `, P) f7 t# J7 r8 H" Q4 n
使用纯软件方法进行AES-128 ECB加密,大小为1kbyte,测试耗时。
0 E  u: [3 e  u' o4 g2 i" ^- N  Z0 u- v; U1 e
/* 软件 AES-128-ECB 加密 1KB */3 k( D/ z5 K! M$ }7 s- \
static void run_sw_aes_test(void)6 k# Y- s8 ]! j8 A: Q
{
4 k/ \8 G3 {' G6 ~4 w' `  T0 N/ i    static const uint8_t key[16] = {. r' O' r5 e" I
        0x2B,0x7E,0x15,0x16,0x28,0xAE,0xD2,0xA6,
- _, b2 {: T: o# l$ {3 ?8 b        0xAB,0xF7,0x15,0x88,0x09,0xCF,0x4F,0x3C5 z8 X, |5 ?+ L' ]( P! L+ z( M1 Z8 y
    };
0 n9 ?; _: p& C& |! k0 s    static uint8_t rk[11][16];
8 |/ y( y4 @1 Q1 ?3 y/ Y  U/ ^) D5 f    static uint8_t out_buf[CRYPTO_BUF_SIZE];3 l$ d$ g1 t1 x' t: D# F

6 K. ^: @! F6 \' k- d7 {: E    for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)
$ v* v6 a" l% |7 x        crypto_buf = (uint8_t)i;
& i/ I8 r# V' U: N/ l3 q0 J- q
6 }. r0 J' ^1 Y    aes128_key_expand(key, rk);' b% O) g6 u( @5 h# M

3 o% u- g: v" O- ?3 N    uint32_t t0 = DWT_GET();( n7 M) a& v: l3 V5 R7 `* {
    for (uint32_t off = 0; off < CRYPTO_BUF_SIZE; off += 16)* x5 ?4 G. g; j5 b- j
        aes128_encrypt_block((const uint8_t (*)[16])rk, crypto_buf + off, out_buf + off);( Z) M$ O  Y0 N$ K; {' c7 X
    uint32_t cycles = DWT_GET() - t0;
2 V! ~. p- Y6 t2 u1 U7 B1 q" N. f" w# u: ~3 |
    printf("[4a] SW AES-128  : %lu cycles -> %lu KB/s  (1KB)\r\n",
! m  E( [7 N1 Y7 s" p0 H, Z           cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u)));
0 s1 r  Q* ]  F  `7 r' d7 R9 P0 }. P}& D( x. u4 J5 W

9 z$ Y$ r+ E1 u1 @" m) ]9 X: ~
  • 2. SHA-256测试
    # s8 h9 A+ Z  g

7 y+ q8 |$ N/ A+ T* DHASH测试了SHA-256,也是1kbyte大小
0 ^/ O0 w+ C8 ?0 T7 M6 s. c" ], x" a4 c& B! k$ h, `- d; Q; `; r5 k
/* SHA-256 哈希 1KB */% [+ I9 n7 f9 a) r' P
static void run_hash_test(void)
7 ^$ G+ Z  W1 n; i5 |) b9 D  Q{
8 c. `# k5 V( K& g* l* M" q, |    static uint8_t digest[32];$ ]0 U8 o6 f  ^! l# a- h& e

3 O; f1 T4 P- C7 m( ?, w    for (uint32_t i = 0; i < CRYPTO_BUF_SIZE; i++)/ H; r3 |3 G6 b5 ^3 ]
        crypto_buf = (uint8_t)i;) X- ~% `$ e: A3 \

4 k2 M! X" s# T9 B7 o4 ^/ [! v    uint32_t t0 = DWT_GET();
8 z) N# q# L( M' ]- p, g    HAL_HASH_Start(&hhash, crypto_buf, CRYPTO_BUF_SIZE, digest, 1000);
- ~- s$ O; \+ z( e. Q9 l    uint32_t cycles = DWT_GET() - t0;* M. S1 K8 g  [$ q
% r6 c5 o0 q6 Y' W% T" B/ X7 h8 M
    printf("[4b] SHA-256     : %lu cycles -> %lu KB/s  (1KB)\r\n",
+ K7 h9 \/ ^% \8 a$ [           cycles, (uint32_t)((uint64_t)CRYPTO_BUF_SIZE * CPU_FREQ_MHZ * 1000000u / ((uint64_t)cycles * 1024u)));: [/ d$ F1 S; s, ?
}5 f- D) O% \9 d5 |& ?+ U

6 h* ]  u: U7 f* s! G
  • 3. TRNG生成测试
    . F0 c2 j( Y7 l

( x0 m  ]- m' X/ j$ Q$ G) A随机数测试了生成1次随机数耗时
# J: r6 P7 g* a" R4 T
/ |# J. V# z! m# k6 ^- H& d5 U& [+ T/* TRNG 真随机数生成速率 */
/ i7 P) a7 \% Zstatic void run_trng_test(void)
) a4 a( P/ i2 ?! x{- X1 d2 `. J7 }
    uint32_t val;; Y5 u- x- E6 Z5 k6 B5 s5 i: x  k
    /* 先读一次丢弃,确保下一个已就绪 */2 n2 _3 W, f) L+ {; F% v- |
    HAL_RNG_GenerateRandomNumber(&hrng, &val);) @. ?) F$ T" H' x

+ o  S. ~4 G8 E9 m6 A8 b9 P2 E! g    uint32_t t0 = DWT_GET();3 g" R/ h9 Y  k3 |6 \- E3 b
    HAL_RNG_GenerateRandomNumber(&hrng, &val);8 ?+ ]7 }5 W- b0 d
    uint32_t cycles = DWT_GET() - t0;
, G  I! _, W0 g- ]& z/ W; j0 \* y: M+ J1 _: Z7 z
    printf("[4c] TRNG        : %lu cycles = %lu ns  (1x 32-bit)\r\n",9 K$ p+ G) N; s) H. |6 c, u  I
           cycles, CYCLES_TO_NS(cycles));1 a9 Y  i9 B& O; r9 e+ n
}
+ i( V/ Z3 ~  a. ]* T# k: h6 ~! @5 ]# y1 G" I5 f) R
测试结果如下:
2 J6 v- E+ e. E2 r- e7 e- _# I9 [! C9 C- p1 w# `) p
[4] Crypto & TRNG Performance Test...
% n- `1 K  _; h[4a] SW AES-128  : 228948 cycles -> 1091 KB/s  (1KB)
+ Z# k1 O, p5 N+ O4 y2 M[4b] SHA-256     : 4587 cycles -> 54501 KB/s  (1KB)
& R5 N% e$ I. j* ~$ q' R7 `' l1 ?[4c] TRNG        : 69 cycles = 276 ns  (1x 32-bit), U: P. T; _- p# X- u

$ E# K- t5 h! \: @3 h
* |8 p6 C" B2 G. P6 J& uHASH和TRNG的测试速度都很快,因为AES使用的软件实现方法,用了一个简单的查表计算,和硬件HASH计算差异还是挺大的,就是不确定STM32H5E5ZJ芯片是不是真的没有AES外设。
  k6 |: K9 c! H
9 L5 y2 t0 ~7 f% Y! |" U" G$ U* P: j
3 m) d4 I7 s5 B& q  Z
/ G$ @! I/ B$ c9 ~% r
赞 收藏 评论0 发布时间:2026-10-19 15:46

举报

0个回答

所属标签

相似技术帖

官网相关资源

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