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

B-U585I-IOT02A开发板测试 之PKA加密机制测试

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~5 x5 H$ }9 g& f7 M6 p( c
我们先来看看一些导图:8 r0 ^! h  i/ j9 n2 G
应用场景:
6 p( R, ^6 Y5 n& J  C TT1.png * i' s; R3 ]7 K- e2 a2 _- N0 s) R3 d/ X
TT2.png - v6 i! g( N/ v
完全硬件自发,无需CPU干预:. j* S7 @/ E  G/ c% R2 X
TT3.png
* j3 B& J# g& ~7 V2 j使用流程:# B" V; }2 f" U7 ?: f6 w
TT4.png % x, s4 ^" l6 R0 N; R9 u9 k
TT5.png 1 K# p8 q( n: `$ x
好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:' m: u2 Y0 r7 B+ U3 p7 m
AA1.png
4 \. y8 z5 t  {% \0 G1 [ AA2.png 7 a5 J- h; _# [6 A
AA3.png
+ W$ g& u/ k" G9 s- k AA4.png : y2 w  J1 G* I
AA5.png * E1 q+ m! |+ V9 C
AA6.png
$ V0 u2 W7 E5 z5 h AA11.png + M% [  C8 |" D4 Z& l! A
AA7.png 3 p+ q1 y( S' R7 r
自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:
% Q! @, y' b2 o1 |0 y8 n1 N
  1. PKA_HandleTypeDef hpka;" r% h0 Y0 k  q) n
  2. " J2 a. X; z: b- i' H8 `
  3. RNG_HandleTypeDef hrng;0 l8 Z+ [8 r' \

  4. * w8 a$ G# j7 @
  5. /* USER CODE BEGIN PV */) l, Q( A# W7 [  H
  6. PKA_ModExpProtectModeInTypeDef in = {0};$ C' q2 M( n: \% q3 m  k
  7. % M% N  a* U% N/ R- S
  8. /* Input vectors */
    / y9 ?$ m& l) u2 H0 j. X. `
  9. uint32_t input1_OpSize  = 32;
    " E+ @/ W2 k1 A: q
  10. uint32_t input1_ExpSize = 32;
    . {" k4 k1 N' T
  11. uint8_t input1_1[32]    = {0xE4, 0x88, 0xD8, 0x11, 0x76, 0xE5, 0x06, 0xFA, 0xB7, 0xC2, 0xFC, 0x5D, 0xF3, 0xCB, 0x75, 0x55, 0x34, 0x3F, 0x45, 0xB4, 0x78, 0x52, 0xBA, 0x7E, 0xFB, 0xF5, 0xB1, 0x2A, 0xF4, 0x0B, 0xF4, 0xB3};
    1 o! Y( v4 B) o8 i8 u6 I
  12. uint8_t input1_2[32]    = {0x12, 0x28, 0x49, 0x3A, 0x81, 0xFE, 0xCA, 0x62, 0x2B, 0x2D, 0x83, 0xCD, 0x97, 0x2C, 0x28, 0x23, 0x39, 0x76, 0xF1, 0xF3, 0x71, 0xCE, 0x16, 0x84, 0xA0, 0x37, 0x98, 0xE0, 0xC7, 0x0B, 0xF4, 0x39};$ g+ x' @  z7 G# u7 [8 x2 Y, o& c
  13. uint8_t input1_3[32]    = {0x45, 0xAB, 0x14, 0x95, 0x48, 0x22, 0x69, 0xC4, 0x8F, 0x1E, 0xCA, 0x23, 0x0C, 0x1F, 0x5A, 0xB4, 0xBC, 0xE7, 0x12, 0xD8, 0x50, 0x09, 0x54, 0xBB, 0xE2, 0x1D, 0x2A, 0x39, 0x86, 0x3E, 0xDB, 0xFB};7 S* n7 c/ a1 M2 t! U
  14. uint8_t input1_4[32]    = {0xE4, 0x88, 0xD8, 0x11, 0x76, 0xE5, 0x06, 0xFA, 0xB7, 0xC2, 0xFC, 0x5D, 0xF3, 0xCB, 0x75, 0x53, 0x50, 0x7D, 0xA2, 0xCD, 0x98, 0x24, 0x33, 0x76, 0x14, 0x8F, 0xCF, 0xA3, 0xF5, 0xCF, 0x4A, 0x88};5 c& V" N5 m& m
  15. uint8_t output1[32]     = {0xD1, 0x2F, 0x36, 0x6C, 0x61, 0xB5, 0x66, 0x48, 0x61, 0x17, 0x8A, 0x1E, 0x6B, 0xD0, 0xE7, 0xBF, 0x66, 0x0A, 0x2B, 0x07, 0x9D, 0x4D, 0x82, 0x68, 0x7E, 0xB1, 0x9D, 0x29, 0x94, 0x43, 0x6D, 0x39};  s- c* `1 N- `; }1 r" Y
  16. 1 u  |7 t- C& l# e
  17. uint8_t buffer[32];
    1 e7 `# D% g6 @# F( M  F5 n% f
  18. # }  M* {8 N* ~4 f" U
  19. __IO uint32_t hal_EndOfProcess = 0;* A- h  x- \5 C' ?* e6 X
  20. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:6 V2 Y& K& t# X9 e) K) F$ v% @
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:
/ U& I2 _# v7 H1 N7 e* @
  1. /* Initialize all configured peripherals */8 ]0 D! Z7 q! u* l; R
  2.   MX_ICACHE_Init();
    ; d8 |" |0 X% l# b
  3.   MX_RNG_Init();  n/ H/ }4 X$ A  D  h/ q
  4.   MX_PKA_Init();2 r8 X* x7 X, T! [
  5.   /* USER CODE BEGIN 2 */. z5 @& W# W' B2 T5 U" d

  6. 6 ?$ w: k" l- {3 |5 @+ l. d
  7.   /* Set input parameters */
    ; Q) W- i3 U5 Z) ^  m" R
  8.   in.OpSize  = input1_OpSize;( X+ V" k" T9 A% b8 a/ \7 }
  9.   in.expSize = input1_ExpSize;5 ^& _  f  s" M- q
  10.   in.pMod    = input1_1;
    + E9 ?/ a9 }" N# g' }, C: a1 z
  11.   in.pExp    = input1_2;
    ( E0 c2 q/ K( w8 T6 z. o/ E
  12.   in.pOp1    = input1_3;% U: L( X- k4 P+ i
  13.   in.pPhi    = input1_4;
    - ^+ ?, M# i/ c4 ^. h+ e6 N) `! p- W

  14. % f  @) N0 e8 G" |
  15.   /* Start PKA protected Modular exponentiation operation */; s+ e  {6 i! \) X
  16.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)
    & D  Y5 `3 x7 ?; j/ \9 a, C
  17.   {
    : X' H5 S( d, D5 M
  18.     /* HAL PKA Operation error */; p2 p0 S) w. c! _7 N! Q; k
  19.     Error_Handler();
    " V$ \1 y( [( d2 W
  20.   }5 s8 Q# L0 a& }9 B0 H* Z# K3 v" _
  21. 7 M* {7 m- @2 m( ^2 G4 I
  22.   /* Wait until operation finish */
    * S$ O9 o6 r% o" M$ e7 d2 u
  23.   while (!hal_EndOfProcess);
    6 J4 L  ^. }# A/ g
  24.   hal_EndOfProcess = 0;
    0 e, Y# ^, h5 [( @8 I0 `, x

  25. ( S' m# v" W8 o3 q2 _  V$ P
  26.   /* Retrieve computation result */  v# h( E# n0 J8 R5 f
  27.   HAL_PKA_ModExp_GetResult(&hpka, buffer);3 |2 [* M( t3 Q* s$ S! z
  28. 2 }9 \) ~# i  i) k/ N  v2 z
  29.   /* Check retrieved result with expected result */2 T  r' k5 B0 s7 V/ ~$ I2 M( L
  30.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))5 W5 ^! k' g# X3 s* u" Z( q
  31.   {
    7 O5 ?5 Q% A& z5 P/ {4 i
  32.     /* HAL PKA Operation error */% [& d+ z' K& y. t' u. e$ B
  33.     Error_Handler();
    * ?0 ~1 [" A7 @+ D6 L0 r& N
  34.   }
复制代码
一些回调函数:
! H! r- D2 W- E& e$ L5 M% c( A5 o
  1. /**6 Z6 L! K: U8 R+ y- M
  2.   * @brief  Process completed callback.3 x, H8 B* X$ }
  3.   * @param  hpka PKA handle
    . E7 n2 D3 c  J) r5 O/ e& V
  4.   * @retval None* |% Z* `* Z9 @# d
  5.   */. M/ V7 T' w) V2 s5 s. _1 X9 X
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)
    " R* c! C; U/ Y1 ~. }0 u: s3 x
  7. {
    ) T  b( I' P2 E
  8.   hal_EndOfProcess = 1;
    + T, ?- q" l/ l
  9. }* v$ i! g+ I- o
  10. 4 r6 u9 f. w/ K+ p
  11. /**
    + e: }* n1 X0 s
  12.   * @brief  Error callback.
    ! F/ @0 ?" r0 O0 `4 {. s
  13.   * @param  hpka PKA handle
    6 W: U6 q1 z8 H$ v2 Q  p# O
  14.   * @retval None
    + {/ l: Q; {2 Q9 w$ h
  15.   */+ D+ }9 j" ^# x% [" \5 {
  16. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)# i( U* k3 t. Y/ R
  17. {( E+ v) W8 l: F
  18.   hal_ErrorCallback = 1;
    # o; N- n1 x/ O6 o! P
  19. }6 Q. F6 l* V/ T3 P9 V" U/ }

  20. / _$ S4 P) M- {- m
  21. /**! x7 d# y- N, ?( |& Z
  22.   * @brief  Compares two buffers., w6 u: h7 ~! ]2 _1 I  m
  23.   * @param  pBuffer1, pBuffer2: buffers to be compared.
    + |: u" Y' J: ^5 W
  24.   * @param  BufferLength: buffer's length) j5 h! p8 {4 T; A5 P+ H
  25.   * @retval 0  : pBuffer1 identical to pBuffer2
    " n2 R  y3 s6 S
  26.   *         >0 : pBuffer1 differs from pBuffer2, Y1 ^3 l& P( ^/ B' k, n  V+ s" K
  27.   */7 b3 j- M7 x5 |, F1 y
  28. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
    * y* _; Z) G8 F) W" ^0 V
  29. {8 l8 e: L1 S& i6 @( G; n! y
  30.   while (BufferLength--)
    9 x: f6 p" D# w- M! ?9 f4 {( k
  31.   {
    , M) y. O& O" f5 X, _$ S/ |" Y& ~( k8 q
  32.     if ((*pBuffer1) != *pBuffer2)4 o/ h: i1 M* G& Z' q5 G
  33.     {
    & |. p4 z2 f7 E! G
  34.       return BufferLength;
    1 ?$ e. y; b8 `, a
  35.     }
    - O0 P& {! `: F1 B) N
  36.     pBuffer1++;( t6 R& S% m/ P9 c- I: q0 H
  37.     pBuffer2++;
    / c, X( F6 T9 k( @5 z
  38.   }. }( L% W* @6 c$ U
  39. ; q7 S- s$ x5 N( {% z5 N
  40.   return 0;9 S* ~2 x2 F6 G9 ]2 u# T
  41. }
    / @6 K  z5 q% L. P, W9 O( s/ M4 {
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~% |& [7 E! H6 [' N& Y
  1.   /* USER CODE BEGIN WHILE */7 Q  k* z% M2 }9 k: @, f4 ]
  2.   while (1)6 m( z) F7 z6 C1 D0 B6 }
  3.   {
    . a& L8 j( X' M0 G9 U+ @+ O
  4.     BSP_LED_Toggle(LED7);  _9 B8 F5 L; c2 E  p
  5.     HAL_Delay(400);
    ( R4 m' |) p7 L2 u
  6.     /* USER CODE END WHILE */. R, j* p1 q$ T$ s9 b

  7. 7 u% i5 H0 g' x* [$ ]' d
  8.     /* USER CODE BEGIN 3 */
    * W( M- F/ H" T4 ]$ d
  9.   }
复制代码
编译,下载查看,测试通过LED闪烁:
( D% L( R7 B& s  F! P 5080.gif
6 X! I# ~2 d: ~, m! d2 T# b' b, ^: o4 u0 `8 a- S
用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!
2 t7 c) ^4 P  H' D( C2 {当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开8 u6 J  X& l# V# c& V
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~
% W8 [( Z% f& a4 t5 t( m) `. E
收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错1 s, M4 d" R' x1 j% @5 ~
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习
$ c" x' e, J8 v
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的  s; ?' p/ T9 b0 D9 v/ f8 C( N- t
joshua天宇 回答时间:2021-10-27 10:32:29
强大 ! n' V5 t! L/ z8 E
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的
2 S$ B  @, |( z5 w$ B
昱枫 回答时间:2021-10-27 10:34:23
学习学习 9 A0 |% r4 D) q9 r; x$ \5 ^
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便; w/ l( O4 A, G5 A7 `; {
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习; k. @9 T, o, {% X5 s
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。3 z9 |0 Z# `# B. {  c, A6 u
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细: X. S! ~, G* i3 e8 D
EricCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?
  k# o2 n9 g; ?. `/ U; T8 E
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习
2 h2 Q# Y+ g/ i3 r1 N) T# \. o* f' N4 x
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版