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

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

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~. T8 \; F7 T/ Q
我们先来看看一些导图:! H: n- `9 i. S9 \  @
应用场景:
5 I2 u( D; Z( P0 q$ q% k TT1.png
7 }: f( p2 T: y' G) } TT2.png
& G$ a) ^( U* X6 n完全硬件自发,无需CPU干预:4 e/ O) j' b5 z3 X' V
TT3.png
4 O: w5 I6 v9 a使用流程:/ M6 E5 J$ H( A$ j6 G+ p
TT4.png 2 a5 u5 }5 Q7 Z8 A. h
TT5.png
/ C5 B9 ]' m8 ]9 G, }好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:
; O- W1 K( H8 B% E% S$ w- G AA1.png
9 l5 @5 I6 Q4 B2 Y, u AA2.png : x8 H* F5 Z! B5 z' R
AA3.png   B3 s+ L7 L: F. ^, ~
AA4.png
' N+ J+ ~1 |( ~" e% o6 ]& ]# [ AA5.png & Q- l; z# t& f8 C% }
AA6.png 0 y" m% d& ~# O1 I" e7 V; q
AA11.png , P" R) [0 s" E$ x* P' i  f
AA7.png 9 o! b, o! b3 L$ o& }" z
自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:$ v5 c: @; }& v6 x6 F1 @
  1. PKA_HandleTypeDef hpka;
    - o. {2 `3 }0 b

  2. $ d% q8 F6 k5 W+ f: h2 F9 v$ ^
  3. RNG_HandleTypeDef hrng;
    2 ~: M4 z1 \# h6 j3 h7 }* b7 @
  4. . D" [0 V" E7 K5 \9 p
  5. /* USER CODE BEGIN PV */
    : b0 ^& |# f/ j
  6. PKA_ModExpProtectModeInTypeDef in = {0};
    1 f* p" D, M6 {: @8 ^

  7. ) y6 \6 W$ w) k. L% C2 P# K; j
  8. /* Input vectors */' W: `) w3 t; K2 c# P; J2 R
  9. uint32_t input1_OpSize  = 32;
    " P" C) H4 ]; c% Z2 B) e( L
  10. uint32_t input1_ExpSize = 32;
    / h3 Y9 B/ @. W
  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};
    ! q. R$ Q. 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};
    . C5 J4 B7 C. i! m6 Y9 `
  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};
    , c- I4 Q& g" n& @
  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};! Y! M1 t/ l! ^
  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};
    $ J# ]5 Q& X" t' Y2 T9 \

  16. . S! Q! _* M% S7 o5 S& Y
  17. uint8_t buffer[32];3 x1 X# q2 W4 B. g* Y
  18. : A1 r! ^" o6 n
  19. __IO uint32_t hal_EndOfProcess = 0;
    8 F2 M9 L% T8 L* Y3 W
  20. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:
7 n& U; z' f; s: g; M. V
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:5 x! b9 m$ ~+ S4 v/ {) ?
  1. /* Initialize all configured peripherals */" ?+ L. ^/ ]' k/ [+ n8 _
  2.   MX_ICACHE_Init();
    # S7 P$ f5 ?8 o/ {( r" t$ K' w
  3.   MX_RNG_Init();
    ' k( m$ ]; U4 N9 J0 x# a! T
  4.   MX_PKA_Init();
    8 p# j, A- c3 C# ]; S% s# ?0 r
  5.   /* USER CODE BEGIN 2 */4 g6 `( [3 a+ Y* ^. N

  6. $ s1 C5 V3 K4 g
  7.   /* Set input parameters */
    % o- V6 N/ A6 Q+ ~; q
  8.   in.OpSize  = input1_OpSize;
    5 Y8 Q: q# x- b
  9.   in.expSize = input1_ExpSize;8 u! C- }( S0 r8 l6 f, J& `
  10.   in.pMod    = input1_1;: b- i. h/ _8 h* o9 f* K: `
  11.   in.pExp    = input1_2;
    ; h0 P9 K3 V! j+ w/ ^
  12.   in.pOp1    = input1_3;( L/ O, l$ ~# u! n' v( F; j( X+ E
  13.   in.pPhi    = input1_4;% w: ]2 p7 H4 [

  14. & L) [3 W( d; G& d. M
  15.   /* Start PKA protected Modular exponentiation operation */
    0 j1 r0 [* p1 K* L8 [+ L; d
  16.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)
    ' o$ i2 n+ r# |5 ^( f
  17.   {8 n# b0 a+ l* i) z- U: X* N5 h
  18.     /* HAL PKA Operation error */6 [$ h' g0 J) d
  19.     Error_Handler();
    6 S; W, {* A$ i' f3 x
  20.   }  n: C2 ~# [. U! T, ], }. P

  21.   @2 _9 n: G, B0 K* n# Z
  22.   /* Wait until operation finish */
    : e  B% p6 m" q- w% p
  23.   while (!hal_EndOfProcess);
    1 }  a" G+ F  A' {5 s! u
  24.   hal_EndOfProcess = 0;6 o1 m; n' |  D# S
  25. ) t/ @7 I5 }0 t& r
  26.   /* Retrieve computation result */9 [* U  l; v* U; F/ T$ f
  27.   HAL_PKA_ModExp_GetResult(&hpka, buffer);  k+ y" B$ Z' A
  28. 6 v6 c7 \8 u4 f7 r, K) C5 Z- F
  29.   /* Check retrieved result with expected result */
    8 J5 j! P4 z2 v. r0 e! i4 C$ e2 i2 K
  30.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))
    0 N% |5 @$ J+ g+ h) d; J* c6 A
  31.   {) F) A% K7 N. \" b3 d
  32.     /* HAL PKA Operation error */+ R5 ]  u* d* J; s* j! E! ~% M
  33.     Error_Handler();) _/ ^2 w# p, ^$ T
  34.   }
复制代码
一些回调函数:
( z4 Z% ]4 h) i' _1 s
  1. /**/ z0 g4 b0 V8 ~7 ]
  2.   * @brief  Process completed callback.7 Q% w" t5 L* s- y
  3.   * @param  hpka PKA handle, _- {' ?, |+ P- V/ z
  4.   * @retval None0 M1 ]& ^3 `4 U: [) r; ~$ f4 V, ]
  5.   */% P! j  z- {& A6 K! G0 c& D7 |
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)
    * W2 [4 l& Y7 W
  7. {- S; Q! S$ R4 O' \6 A
  8.   hal_EndOfProcess = 1;2 s. r, c7 G0 p# P
  9. }" @" ~% u. `/ t. Q
  10. * S2 C2 h. L; u, `; N3 _
  11. /**" ~( m. @/ p  e. t  \
  12.   * @brief  Error callback.* x6 F2 S( A+ w- {* w
  13.   * @param  hpka PKA handle
    & Q1 f5 w4 ~$ K" b/ n2 \$ U/ }
  14.   * @retval None
    " Q# C1 I- H( e3 ~, P
  15.   */
    1 Q, Z* o% @3 p8 {( [" t( s% X
  16. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)
    - \- b0 f) h9 m
  17. {
    1 J1 W4 j* ^# {8 Z" H1 D* K
  18.   hal_ErrorCallback = 1;, S: i1 \8 j3 `/ h
  19. }
    3 U* P$ i- o3 x6 J4 F8 A2 I

  20. , O- _; b# h* }1 L0 X  C, @
  21. /**
    - u  U; B9 ?, M8 s9 e( o2 c
  22.   * @brief  Compares two buffers.
    ; ~$ K5 T+ B3 Z5 _7 j, D- ]6 M
  23.   * @param  pBuffer1, pBuffer2: buffers to be compared.
    6 }0 c& Q! z3 _+ ]: v
  24.   * @param  BufferLength: buffer's length
    % M: ^; c" K2 y* n( C5 W& j5 j
  25.   * @retval 0  : pBuffer1 identical to pBuffer26 ^- r4 d9 W: }! s
  26.   *         >0 : pBuffer1 differs from pBuffer2
    / x0 n+ T* r7 H
  27.   */
    / K# V$ d9 F1 o3 s" \7 z
  28. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)% S: w6 B0 q5 Q7 C4 X
  29. {
    1 t; B+ i. \# x. O' S
  30.   while (BufferLength--)
    ) j0 e! G( K1 X. v
  31.   {
    0 a# @/ n" f/ \3 ~
  32.     if ((*pBuffer1) != *pBuffer2)
    6 H# @7 u* j% g! F- v5 L" U: Z7 a
  33.     {' M8 X6 I( ?* l, [% @
  34.       return BufferLength;, q% h) B1 Q0 ~- h, q
  35.     }, m  w6 R8 X6 h' a+ T, ?. J% Z
  36.     pBuffer1++;
    : Q' @: u& i1 r9 h' k
  37.     pBuffer2++;3 c1 m) }3 f* F. T" _6 J
  38.   }
    7 N1 q* B& C' B2 K1 s
  39. 0 P$ M3 X  |( s
  40.   return 0;5 o5 T1 j4 |  E4 Z" `5 X. n# a
  41. }* F" g: [3 O- S  M
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~7 f$ ?( u0 W' f/ E
  1.   /* USER CODE BEGIN WHILE */
    5 U- M: v8 ~, [1 W: N- m) Z! I
  2.   while (1)
    ) q$ g+ L2 r' Y8 O9 j! E' ]& X) [
  3.   {
    ( Q: x, a  r' H0 s* \2 x# O; P
  4.     BSP_LED_Toggle(LED7);
    6 @4 n, R2 ?" Y" Z& o; q
  5.     HAL_Delay(400);
    6 O9 ]+ Q, a6 @& q6 r3 U, Z$ n
  6.     /* USER CODE END WHILE */* ?" v( W$ [* `3 ]+ A
  7. & c6 b- U; R, s9 |4 t4 q
  8.     /* USER CODE BEGIN 3 */
    7 v0 p$ E7 n' [4 j. Q4 \5 X
  9.   }
复制代码
编译,下载查看,测试通过LED闪烁:# ~- P3 B5 g; f: |% J  |- p
5080.gif
9 V. j) \0 ]: c0 ?/ o  I" @1 Y1 V! u* Y; k) }9 X5 }1 X& N$ g. d
用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!. p: G6 \) l2 E  J. M8 _
当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开4 ^% p! E$ K4 B0 v7 T# H
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~  L: A; ~+ i+ K; B3 ~! ~/ k; L
收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错
& f3 }2 d; J- A& U" Y0 D- K
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习) E) e4 j, b, \$ U7 x  F$ w9 y
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的
$ r. F+ ^- W+ M' b! G
joshua天宇 回答时间:2021-10-27 10:32:29
强大
0 }- k( a" E- V# _: x
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的
9 F/ ^3 P2 x1 j( L4 O' E( Q
昱枫 回答时间:2021-10-27 10:34:23
学习学习 ! _) q! l3 F- c, ]2 T: z( c) o
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便
( T7 w+ f* S' Q: B7 u0 `: f
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习  Q: E1 |2 x% d9 ]
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。
& Q% J5 B4 r2 F  M  ~
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细
$ {( W7 Y+ Y. f7 |
EricCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?
6 u4 M6 w5 c6 @2 W, Q3 E9 i
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习
0 H' s* Z) C/ E1 {4 l
0 A3 Q+ a! g9 J4 \, Y: `! m$ d" N
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版