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

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

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~# u7 J; z& [. w) S( ?( c0 y7 C8 g
我们先来看看一些导图:
, \/ Z$ ]6 h/ [/ D% j3 ~; @应用场景:
! J  i( \3 J! u6 @ TT1.png
1 W8 E$ ^! S; o% V3 r' X! W* K TT2.png 4 x# M3 r) u- z& f7 g0 q& x7 O
完全硬件自发,无需CPU干预:4 P; L9 o8 [2 O/ I& W* K
TT3.png
6 O: V, d/ a, A) s使用流程:6 Y5 L! e' s1 J# `8 k
TT4.png
" i" l" o0 a" s4 j2 Y1 }1 f8 N/ Y) I$ j TT5.png
" M3 H" \$ \8 [( L7 U8 I好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:) m. C% h! s9 ^4 |& r
AA1.png 5 o! X" ?9 T5 d
AA2.png
6 }% D6 O) G0 e$ }/ a: ^ AA3.png
$ C  i3 N5 q8 h2 U3 p7 l4 q" d AA4.png   P" A- Q7 z: y# x- c; n$ D: [# |
AA5.png ) R" c4 g5 p: P1 X6 C4 ^' }
AA6.png
0 v- ]2 q5 J# B2 H" x: V- [ AA11.png # G& o3 Z1 U! S7 @: D
AA7.png $ o9 a  h, J+ h: ^6 x$ X
自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:
6 }5 C1 ]. S6 I' x8 f
  1. PKA_HandleTypeDef hpka;
      z; o( x5 e9 ?6 d# Z% w
  2. & H" W8 q6 ?& f
  3. RNG_HandleTypeDef hrng;! _5 A* @% _& K9 V2 ]5 e# ^% ~

  4. ; L$ b8 A  u2 ~  X7 w5 t
  5. /* USER CODE BEGIN PV */) i  W% g4 U6 X, ~# j4 J# Q
  6. PKA_ModExpProtectModeInTypeDef in = {0};) ~) L0 {; N: O' n* S

  7. - S5 S, C( F6 P3 Z
  8. /* Input vectors */
    6 U/ r/ t& B6 o3 `; U' D
  9. uint32_t input1_OpSize  = 32;
    " J9 k0 u5 G9 E, f0 o' e
  10. uint32_t input1_ExpSize = 32;( R4 X% G& o' |8 k2 u6 k7 {; m
  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};
    - @5 G; N- I8 c. K5 C
  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};: C2 {. n* q' G, ?. B9 K
  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};
    / T1 A7 G9 T4 v+ a4 t
  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 I. n* _% h* r- F0 f
  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};4 \, o" N9 o* C/ O4 {

  16. : I' _" s9 A; U& A$ b* k+ X+ v9 |
  17. uint8_t buffer[32];
    8 l) r( x1 X8 C5 e! P9 q( M

  18. ) j, F8 t3 R4 V
  19. __IO uint32_t hal_EndOfProcess = 0;: o5 h8 @! Z, n
  20. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:! I$ n4 _% O9 ~
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:! l# M6 d" o) b6 v
  1. /* Initialize all configured peripherals */
    / x5 d% W( {4 h3 f
  2.   MX_ICACHE_Init();- ~1 T+ P& j+ R# W  y
  3.   MX_RNG_Init();* ?7 L3 q6 {; I, v, R' Y
  4.   MX_PKA_Init();
    2 I( h8 g& H* p, `
  5.   /* USER CODE BEGIN 2 */
    + {8 o& D0 a6 `7 d4 S7 ?6 V
  6. ' E3 ^2 B; u# O$ V9 C+ K* F
  7.   /* Set input parameters */1 X! U1 c+ g0 c
  8.   in.OpSize  = input1_OpSize;( e1 C6 l7 t8 h- u  a( U; W3 h
  9.   in.expSize = input1_ExpSize;+ N3 i4 V+ N& {2 ]/ s
  10.   in.pMod    = input1_1;
    / J) A7 E+ V) c- f. b6 @
  11.   in.pExp    = input1_2;9 S  _+ D6 n9 N. a  ]6 U* E; _
  12.   in.pOp1    = input1_3;
    ) p! n& W3 W7 W( a2 s, ~* k
  13.   in.pPhi    = input1_4;
    0 e2 Y! v# o7 E, B
  14. 0 q4 ^" L' J5 e$ o8 S
  15.   /* Start PKA protected Modular exponentiation operation */) e5 X. ?: z9 U$ f9 ^0 i0 z
  16.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)3 H% |( L  e2 Q
  17.   {8 l% r" G. {) E% l2 y/ o
  18.     /* HAL PKA Operation error */! K& S8 r' l, f2 A
  19.     Error_Handler();
    & q9 U0 V9 q: R7 D8 i7 ?/ V2 j
  20.   }$ g9 ?# G, {9 F2 Z
  21. 1 _8 p; S8 n& b" y' K7 r. ^
  22.   /* Wait until operation finish */
    2 A% K" ^$ B$ q/ V
  23.   while (!hal_EndOfProcess);
    & G; P# A7 n6 M& i1 |# s$ s
  24.   hal_EndOfProcess = 0;
    6 q! }5 E5 H  K

  25. . B, o" W( N  v+ a
  26.   /* Retrieve computation result */
      O3 `: B! Z' ?; x
  27.   HAL_PKA_ModExp_GetResult(&hpka, buffer);
    ' S2 \! i$ w' c: i9 _

  28. ; H2 v% T2 O( X3 P2 C
  29.   /* Check retrieved result with expected result */) s8 O, X3 U0 t! t5 f
  30.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))" j' q& \8 K8 V. _6 E3 @+ ]1 o( P
  31.   {
    8 d: t! f5 `6 n9 |' l1 z
  32.     /* HAL PKA Operation error */
    6 ~3 J3 D/ Z* r/ L0 F
  33.     Error_Handler();
    4 p4 n. [/ b0 `+ i
  34.   }
复制代码
一些回调函数:
( L, N2 U; F3 H  T2 c& t! Z- P" l
  1. /**
    0 b# d+ d+ U4 v
  2.   * @brief  Process completed callback.
    ! h( V6 ]0 Q3 U* }" T3 P( s4 r
  3.   * @param  hpka PKA handle
    1 B2 M5 s4 \9 s; h7 V
  4.   * @retval None" ]4 ~  @# M1 F3 H( U
  5.   */
    5 f5 U+ H8 {7 H0 J- V' h
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)  Z$ r! r7 \" w: d
  7. {4 I# o, N9 v$ l& q7 T6 F
  8.   hal_EndOfProcess = 1;
    " g5 h2 C& O# \# A
  9. }
    ( N8 n5 c' R5 g- C" ?( [$ d
  10. 0 R; m* W) x. S
  11. /**
    0 r& j. W+ k7 H
  12.   * @brief  Error callback.4 r  e, g4 M& y/ k" }
  13.   * @param  hpka PKA handle
    4 f& X6 w- q3 z/ g" j
  14.   * @retval None
    # A! h& {0 B( T4 l6 h4 t
  15.   */. |8 S. @8 N$ x) @$ H
  16. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)
    + J: s1 d; b2 j/ c& v5 h% r% E% q2 p
  17. {9 d0 j4 a& k, e& ]6 g3 f, s3 X5 J
  18.   hal_ErrorCallback = 1;
    0 }" O* Y0 X# D" w$ K" y
  19. }3 Q: T% @9 A9 `7 a' `* o- G: S

  20. 8 a7 @: n/ B, o
  21. /**
    * I1 `% P  n# o
  22.   * @brief  Compares two buffers., t* Z7 w) I4 B/ ^+ g
  23.   * @param  pBuffer1, pBuffer2: buffers to be compared.3 L9 h4 E3 B2 P* \8 z8 l' ?
  24.   * @param  BufferLength: buffer's length
    # ~, n. {5 t! Z" B! T
  25.   * @retval 0  : pBuffer1 identical to pBuffer2+ |) S7 y9 I2 F
  26.   *         >0 : pBuffer1 differs from pBuffer2
    * M/ [; u+ {; J& L( f
  27.   */4 l5 v$ z  s! o, L  Q/ e, v
  28. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)0 t& J& }2 o8 w* k2 n. l, w
  29. {
    ( \6 j8 ~3 A( C# \& ^
  30.   while (BufferLength--)
    ' `9 t/ b' \7 S6 o! U9 s
  31.   {6 b/ ^5 Q. G' o3 x' F
  32.     if ((*pBuffer1) != *pBuffer2)1 {4 s. i9 Y) k
  33.     {9 D6 y7 l8 W. Y8 [4 J" E# s9 \
  34.       return BufferLength;
    " z* l* N. d# J4 w& \3 @2 Q
  35.     }
    # |! K2 W$ K5 K3 s4 ]2 X' Y/ l
  36.     pBuffer1++;
    & S) _( P2 R0 t; b: T$ m$ H; \
  37.     pBuffer2++;
      H0 q5 p. Q( O6 Q( f2 k4 S/ w
  38.   }# R# B7 D+ x# }3 E$ b/ t

  39. % _9 ?* f4 n7 t' X
  40.   return 0;
    % D! h) `- l# l. ?" {! t) I- G
  41. }- b4 n6 P* c- P0 S* t7 j
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~: l. [9 V+ d+ D# D4 r7 `3 I# x
  1.   /* USER CODE BEGIN WHILE */# L. t9 q* @0 o& q6 b+ R3 j
  2.   while (1)
    0 s1 n; W) H- j
  3.   {
    3 }  G- J6 s/ ^0 o1 F7 b5 o! X2 `  T
  4.     BSP_LED_Toggle(LED7);
    ; G5 r2 b  Z: G$ N
  5.     HAL_Delay(400);
    / [  x/ n. B0 W, C9 `
  6.     /* USER CODE END WHILE */( w& }- J/ P, l1 b
  7. 2 I/ U* V2 @- O
  8.     /* USER CODE BEGIN 3 */
    - P1 b1 Q8 @6 X
  9.   }
复制代码
编译,下载查看,测试通过LED闪烁:
) ~( ^' u/ u- E 5080.gif . ]9 ]' y  Y. u, e7 e7 W
  y4 q+ _2 p. ~
用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!
& d- F, Q& Y" y9 p当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开( E% S+ d5 g- M& F/ K$ N; O
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~$ d9 c  c5 M' M* Q
收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错, J3 a6 e" j( {" U6 I$ G$ n
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习4 }* b  `3 A" h5 p
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的' F" m- W# U& y% L
joshua天宇 回答时间:2021-10-27 10:32:29
强大
) J, ?$ U0 Q0 r5 U! V) k
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的  M: s! u$ y. l$ X& r5 w+ w
昱枫 回答时间:2021-10-27 10:34:23
学习学习
1 S" ?  A2 K) |# i
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便
( }, T: ?. \! V" ?/ Q" ?1 b1 Y
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习7 a) d6 j& V! K
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。
" I0 }. P6 h9 a+ F
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细
/ V* _& G7 o# x. c$ h
EricCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?6 `5 `+ k4 R+ |* k4 B7 |
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习
  i  P1 E& S1 c$ ?2 u, Z
6 _: l% i% n1 V: `/ g5 d- ?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版