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

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

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~
7 Q6 ]# }6 a! R' O8 l' }  R( K我们先来看看一些导图:
  ^! M# U( o$ L应用场景:4 \7 [2 I  T$ y8 Y( V- l0 h6 a4 {# l
TT1.png
: C; A) j" v( d7 m( x5 w  ]. M TT2.png
1 [; ]! f4 O7 W  }8 C( t完全硬件自发,无需CPU干预:
0 r* l: I! _! m& C( @) i" B8 { TT3.png 5 G9 B8 U4 f  z: P8 c3 ]
使用流程:1 q: x& ]: j* g- P, i
TT4.png % \& s/ f. b# ^$ D
TT5.png
' U" r- W& j3 `& M好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:. g0 K7 K9 i# J! N5 ]
AA1.png
9 [' M: i' i4 P# ?, q* J AA2.png 7 N& A1 [7 _- _4 a3 P0 [. a0 q' t
AA3.png # p. T, u9 o( S
AA4.png 0 i0 m9 u9 e9 p& f* Q
AA5.png   l) U$ [" D/ w1 h; V' U: _9 G
AA6.png 7 k# v6 T# a+ ]
AA11.png
  d+ O9 q* n8 L AA7.png 1 E* r" `9 s' _4 A: L
自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:
5 a' i$ U! a+ ]5 A8 T
  1. PKA_HandleTypeDef hpka;
    ' R5 l! d. w8 I$ Y2 O: C) n

  2. * Y$ h# q4 w. N: C# u
  3. RNG_HandleTypeDef hrng;  E, j8 B. ~# {, i) l# g
  4. 1 c5 M0 h0 T5 s# y2 m: w" x
  5. /* USER CODE BEGIN PV */
    + g+ j4 B, W! Q3 L1 e8 J
  6. PKA_ModExpProtectModeInTypeDef in = {0};
    * x, P4 @! l) B8 {; h- J% |

  7. 9 r2 V( ?7 [! }7 u* Y
  8. /* Input vectors */
    $ t. n! v4 L$ A, k+ P" F
  9. uint32_t input1_OpSize  = 32;
    % K9 G/ I  H/ I- M
  10. uint32_t input1_ExpSize = 32;
    9 R; F0 B$ M- K! ~+ R7 ~
  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};# a; k$ k* S1 `1 ^( v( R/ @
  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};
    - w4 ~# m! `" N8 }! \# o
  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};
    6 N( j2 [* m  n3 W4 F; I% p/ y
  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};
    6 F  ]3 E. i( p0 I7 X, o
  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};
    : d9 u0 S5 p/ \, W) s) H
  16. * i9 T& ^! t0 o3 T6 F
  17. uint8_t buffer[32];" e7 f6 F# |  g/ ]  d
  18. ' d0 M% D& B1 r" I! E& c" T# _
  19. __IO uint32_t hal_EndOfProcess = 0;4 m; s5 I1 _2 R) L1 _  q+ r: a4 O( y
  20. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:2 C; J1 C  {% B3 z6 Y
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:- w3 C6 i' B. M" N; I
  1. /* Initialize all configured peripherals */% w  r2 X: S1 B. L1 s" C- h' t9 X
  2.   MX_ICACHE_Init();
    ' t* o9 J+ V" j, S( \% z
  3.   MX_RNG_Init();( k; R, r% [3 f* I0 n. a$ B( u6 \
  4.   MX_PKA_Init();
    ( f9 g( A, f- k: ^" O! w
  5.   /* USER CODE BEGIN 2 */. n' n' @/ \  `2 W/ P$ x
  6. / ?& {% t0 w& c/ L9 z
  7.   /* Set input parameters */
    % X' G5 H  y' R9 p$ o. p
  8.   in.OpSize  = input1_OpSize;
    3 g9 d6 r& y0 J( ]( q
  9.   in.expSize = input1_ExpSize;
    % o& t! \4 f: r0 c: u- z: p' f; G% i
  10.   in.pMod    = input1_1;
    - M* j9 L& ]4 _+ E9 T; Q
  11.   in.pExp    = input1_2;
    9 K; J5 a! r# M5 g+ d$ Q% p
  12.   in.pOp1    = input1_3;$ n- c& D$ g% Y. S8 W
  13.   in.pPhi    = input1_4;
    / v7 Q  W# Y. U# G. e
  14. & Q+ x) f6 ?* X& M$ O: G
  15.   /* Start PKA protected Modular exponentiation operation */& P2 ^1 l& [2 F. e
  16.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)
      j8 s4 j4 X5 }/ J
  17.   {+ }# S6 j) m3 q+ J$ {8 t
  18.     /* HAL PKA Operation error */
    , g5 m$ K! p* I# X& ~7 C
  19.     Error_Handler();+ T  D. m$ h% h$ P& }$ N" D; V) g3 M
  20.   }8 e* F6 u9 S9 ~3 A* x/ ]( I
  21. . h/ x8 t8 d5 A1 @9 N/ d
  22.   /* Wait until operation finish */; E3 \% t. s" {4 v# W
  23.   while (!hal_EndOfProcess);& ^" t! s8 s: `+ h" m& J) o
  24.   hal_EndOfProcess = 0;& j+ R8 Z: N8 x1 I# Z3 L' X- k( S
  25. # w2 t, d( q) _0 R' c6 W% I. H+ W" g& V
  26.   /* Retrieve computation result */
    4 c% `- a9 n' @% S" y: G- O
  27.   HAL_PKA_ModExp_GetResult(&hpka, buffer);3 q; D7 q) f& B: @/ x: E
  28. 5 o7 v; j5 W4 O$ d1 C, |$ t* p
  29.   /* Check retrieved result with expected result */; [* \0 K( r3 C$ I7 g4 I! J
  30.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))
    3 B+ W( [  d0 c# u! l' u
  31.   {
    ! i7 i( ]% W* N0 V1 a2 S, ?
  32.     /* HAL PKA Operation error */
    7 D! O/ R+ I' s5 k) w) T. X+ r7 \+ O
  33.     Error_Handler();
    . A6 ~; v9 t; h1 S
  34.   }
复制代码
一些回调函数:
' H- f: {6 h& T0 v( k
  1. /**1 O: s7 _8 U/ d
  2.   * @brief  Process completed callback.! C& q3 v- ]5 Y3 e
  3.   * @param  hpka PKA handle6 U- M% L& Y3 D! t; {
  4.   * @retval None$ T# I2 i3 \; n0 K( ?8 V8 I+ r3 q
  5.   */# n5 D7 ]5 R# ]4 L
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)
    & r) W+ `: q9 n1 h6 s5 \$ P
  7. {
    4 R* @8 H9 ]( j  ?
  8.   hal_EndOfProcess = 1;% B8 Z! U1 m7 P3 G& l/ S
  9. }8 k( z( r# d- B% G1 @
  10. . o/ d' u' z8 \0 b& @2 X$ u
  11. /**
    8 d/ B9 g' l8 [2 i" z
  12.   * @brief  Error callback." S& ?# u* j  _% ]) `9 q
  13.   * @param  hpka PKA handle
    ! }( g) n, _0 g, s+ u( Z7 A9 @
  14.   * @retval None
    3 ^- `. L- Z5 L' `! C1 z/ {
  15.   */6 u, A7 H6 H3 F4 V
  16. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)- E- i) t  w+ y% u
  17. {
    2 L- I( c+ n9 \' I/ d# A3 t
  18.   hal_ErrorCallback = 1;6 y6 ?, j- `! J6 \  u
  19. }% o0 W5 }9 g, w$ ^  m- H, A

  20. ' l( S5 v0 P2 Q$ ~
  21. /**- \5 ^: B* t) z4 G& T+ Q7 q
  22.   * @brief  Compares two buffers.
    8 V9 T( A: p6 s- S# ~
  23.   * @param  pBuffer1, pBuffer2: buffers to be compared.) C/ d7 `5 z9 z% w* Z6 x' u; b7 t1 A
  24.   * @param  BufferLength: buffer's length
    , f4 z9 v0 p0 U5 r, k6 }* I' S
  25.   * @retval 0  : pBuffer1 identical to pBuffer2( C5 [' Y7 m/ ]4 w) y
  26.   *         >0 : pBuffer1 differs from pBuffer2+ c1 Y, o% \$ a5 ~0 u
  27.   */
    1 d5 Z5 E. N' @! B( W0 o
  28. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
    9 y! D) ]* l# I: c
  29. {5 M0 T$ F/ r) s: T
  30.   while (BufferLength--)& l* B. }: e: |/ v/ x1 I& j; ?) X
  31.   {! |+ \8 W: |2 N% d! C" q
  32.     if ((*pBuffer1) != *pBuffer2)4 @7 V' p( [7 O2 o
  33.     {+ A, T3 ?; M2 t3 S9 \! [
  34.       return BufferLength;- l5 `0 A2 D' b, m
  35.     }8 \5 c( _/ h* [6 {* H* y6 x
  36.     pBuffer1++;$ `; x. c( j9 Z( U+ w7 r( B
  37.     pBuffer2++;
    8 K4 F% x" U7 S8 M6 @
  38.   }
    3 o* j2 P+ ?- c& V; f5 V% X# Z
  39. 3 n# _6 h5 _- D# n/ c
  40.   return 0;
    . V1 b% A6 ^4 h, j9 R% x9 C+ |
  41. }
    1 T& x4 c* _" d# `& w- u( K
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~
9 b" J; ]9 _2 B3 J; d" c, f
  1.   /* USER CODE BEGIN WHILE */
    " ~. u  B, ]1 k0 L
  2.   while (1); ]: k6 V) A& @# w; }5 {( \
  3.   {
    ; H. a2 d& ?3 z+ i
  4.     BSP_LED_Toggle(LED7);  f' N( m3 _- d1 U3 a8 O
  5.     HAL_Delay(400);
    8 W8 C2 J* a7 Q! W- I+ o
  6.     /* USER CODE END WHILE */
    1 I5 S! n! F/ w6 {

  7. 2 j- ]3 t' u7 q' Y' f+ ~4 h
  8.     /* USER CODE BEGIN 3 */
    9 t! Z% D5 W. d" c' w) l0 Q  J' L" @
  9.   }
复制代码
编译,下载查看,测试通过LED闪烁:
& g8 W7 ?! w! @ 5080.gif
% z0 H* [# u2 x& o' }0 E; \+ R
7 ?0 g( O, h1 I$ u用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!
+ k" X2 l& M9 Z0 g1 D) U当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开: d5 v, b- r' z  n" y) t6 @8 }
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~- A* A! _1 }+ d. V( r& @) ^
收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错$ q8 c( E% a  S7 a  J! L
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习
( c+ k7 L% }* I) K' t
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的" s' K9 d1 d* @% B5 B/ m3 ^! X
joshua天宇 回答时间:2021-10-27 10:32:29
强大 & x' g9 G" e* u; E, y& R
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的
  F- r. G/ A$ Z, z( V
昱枫 回答时间:2021-10-27 10:34:23
学习学习
1 Z# y* A4 T9 j3 r* ?% G
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便
2 F% v! d; j" y" [/ R4 ?
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习  Q/ D6 d9 {$ B- V8 E8 p
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。
8 i7 e; a- r- U% Y( S
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细! U: b, p  _: z- G, y* d( ^9 {
EricCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?1 f- Z& {- d$ P& x' l4 J
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习( b$ x) j1 M3 ?( |9 h- a$ P
% Q( N# B+ Q1 Q  M& S3 E) L
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版