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

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

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~
- J+ V+ S* M% S$ `我们先来看看一些导图:, y1 Y1 R7 h8 x5 ?$ J% u8 ]
应用场景:( f$ S1 W' p5 a& C  ~: r8 H
TT1.png
% A9 J/ \" V  V- k/ ]5 F TT2.png
: s7 W2 v" k$ b3 z) g7 Z1 ^完全硬件自发,无需CPU干预:; Q" f: e# _( ]. G( d# f
TT3.png : p: S6 ]/ F, e
使用流程:
1 S# f! W: e  c TT4.png
4 K  t* y* |  ^+ d1 [; T' c/ j TT5.png
! c8 c! m, [7 h, H4 T! K  t好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:
9 o9 i# b# C' V AA1.png
) K" y$ I* G' f$ p AA2.png
7 \4 S# P5 N# p: f( K3 X; k: a& y" { AA3.png - m+ J# w" b: a
AA4.png 2 t- h- c3 Q- u: K! a% P
AA5.png 2 D1 Q4 `1 h0 o1 Q8 ?' F
AA6.png
9 w7 b- Y7 Y- b AA11.png % {& p4 @/ z( x
AA7.png
& a+ y2 N7 v  p! m6 _自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:! p/ x5 f4 A' M( x8 D, Y
  1. PKA_HandleTypeDef hpka;/ m( H2 Y0 f# T" T
  2. : O* r5 q& S! {
  3. RNG_HandleTypeDef hrng;, _6 O4 o8 z/ g0 L! I! a
  4. % y6 a# R" j9 p! ~+ F6 s
  5. /* USER CODE BEGIN PV */0 p) C* _% k# c! m5 [" `5 [8 j, n: @
  6. PKA_ModExpProtectModeInTypeDef in = {0};
    6 b: y/ t! W& l0 B/ `' b8 X6 T

  7. & Z; e! o- C3 p, C: c" e
  8. /* Input vectors */
    7 t! o# r& K. C) p1 V( m$ A* c$ Z
  9. uint32_t input1_OpSize  = 32;
    . o: E' d2 x% U3 t
  10. uint32_t input1_ExpSize = 32;; [) D, m- l" O. @, q5 ?
  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};
    ' ?7 C9 l1 j) ^' G8 a
  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};2 M1 m# y' S/ v
  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};
    $ L0 v- R& f( K1 `6 Z4 D
  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};/ a! x- S* s6 I1 r/ g
  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};# C) j7 a+ c' U7 x

  16. / A( @' [! y( w; V3 O
  17. uint8_t buffer[32];. i, W2 S4 A6 X7 _, W
  18. 2 H. c" L7 T2 k$ O' U9 i& t
  19. __IO uint32_t hal_EndOfProcess = 0;
    ( W. u; V/ E( _( @+ Z1 g
  20. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:
1 S) [/ e6 z+ g1 W
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:
% P. |! T0 M9 k) Y
  1. /* Initialize all configured peripherals */
    ! J, b1 R- i4 J4 ]3 J# x8 l0 h
  2.   MX_ICACHE_Init();1 [2 \( z/ w! J8 r/ B: z, q
  3.   MX_RNG_Init();, d: U& k7 I$ r9 i1 r
  4.   MX_PKA_Init();
    . G: b; y5 `7 B! e3 i3 D
  5.   /* USER CODE BEGIN 2 */
    ) c6 ^& v, M- K$ U
  6. ( }: d. v+ m4 k1 L9 k
  7.   /* Set input parameters */  U7 o' A5 ]. F; S; w
  8.   in.OpSize  = input1_OpSize;* |3 ]9 d! N1 r* E1 r- G
  9.   in.expSize = input1_ExpSize;
    : x7 v* L# O1 e7 ]. E
  10.   in.pMod    = input1_1;
    ( b$ }7 p& a' o) g$ A
  11.   in.pExp    = input1_2;
    : n1 w# w$ j9 C7 @
  12.   in.pOp1    = input1_3;
    7 Z2 j4 I; |$ w" l! q/ k, }
  13.   in.pPhi    = input1_4;0 r2 X4 j; @) B3 x
  14. ; _5 N4 t& L) F' U/ s6 U1 H) M
  15.   /* Start PKA protected Modular exponentiation operation */
    : `/ U; a0 A8 O4 i7 g
  16.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)' T- S3 v; b; @# F
  17.   {
    ; ^/ t% v! D" u( ?# O% f) Y
  18.     /* HAL PKA Operation error */+ r; ^  c5 B( x9 a; z6 [
  19.     Error_Handler();
    3 m$ B6 h. _0 N
  20.   }, r* Y; G& ^1 v6 f; J

  21. $ X$ ?8 r7 ]0 i4 t
  22.   /* Wait until operation finish */
    : `7 R' p1 J+ a3 S
  23.   while (!hal_EndOfProcess);$ b- R; _& F! I; J* K# D, K* b6 K
  24.   hal_EndOfProcess = 0;
    6 T8 ~8 w2 O, A, t- t) H( k

  25. 8 b( x  x" K5 J
  26.   /* Retrieve computation result */9 Q& i/ \! B& V1 }, P5 ^
  27.   HAL_PKA_ModExp_GetResult(&hpka, buffer);# w  E. S* S7 q4 B( a

  28. 9 b6 q. T8 H) I  t% D4 p; C2 G) A* @
  29.   /* Check retrieved result with expected result */
    6 o% ^5 v+ l+ e! [
  30.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))5 m7 x7 S' N, J: X# [( p/ G. F
  31.   {
    . ~% a+ I* o! n/ c
  32.     /* HAL PKA Operation error */0 ~  i9 ]. C. Q. Z: q8 o
  33.     Error_Handler();
    " B; Y5 }! L8 w7 ~- o. g% i
  34.   }
复制代码
一些回调函数:5 l. V/ Y7 L/ O& v, r8 x
  1. /**
    & t2 j: n8 h) x# `8 J
  2.   * @brief  Process completed callback.9 M( Q2 L/ I8 l- m# ~1 d
  3.   * @param  hpka PKA handle+ e4 ^' u' U) d
  4.   * @retval None
    6 u- I7 F. p; K7 h: g' k7 w7 d! f
  5.   */0 j% C! w+ P/ v. y
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)
    7 m8 W& Z7 \1 }- ~" k
  7. {& [% p. q" V. j( x
  8.   hal_EndOfProcess = 1;5 ]( @' k6 d+ y$ v4 ^
  9. }" S7 j& Y2 E$ j* {% Z2 b9 _( L

  10. - m# [, {+ u3 k7 }+ J
  11. /**/ f, f$ ~, N! R6 l
  12.   * @brief  Error callback.
    6 |& z0 H8 G, W) m3 U2 p
  13.   * @param  hpka PKA handle
    5 D: l. ~2 D& y+ P) c0 G
  14.   * @retval None+ L/ a5 I8 }: u
  15.   */" H* O  Q+ o7 K+ Y
  16. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)  A- S2 |0 \9 i# g! g
  17. {( K( V& L5 f2 r& r9 X
  18.   hal_ErrorCallback = 1;
    6 ?0 u& }8 x9 B( c8 s& x
  19. }6 a, `; H9 e3 D6 a
  20. 4 j7 F9 x. }% o7 [" W
  21. /**
    ! c+ X2 Y0 x2 S8 Z8 e6 z2 X- M2 t5 m
  22.   * @brief  Compares two buffers.+ z: n' h4 O5 N9 \. x) i
  23.   * @param  pBuffer1, pBuffer2: buffers to be compared.
    " ?& Q- f. O7 D6 O8 t* G
  24.   * @param  BufferLength: buffer's length
    ) Q7 w8 _4 Z/ l. p7 }* i' o
  25.   * @retval 0  : pBuffer1 identical to pBuffer2
    9 z% f. q0 Y1 c4 J$ |
  26.   *         >0 : pBuffer1 differs from pBuffer2  A- T  b" J7 s1 g% R& }) B
  27.   */8 B: k# O- F, X9 l
  28. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)2 O% _8 N  _' F. p- g3 g# w
  29. {
    % q$ V) I; {9 P! N9 u. e, d* o
  30.   while (BufferLength--)' ~$ J+ f! |* B% f
  31.   {
      b8 B- q; S0 S( a8 G  ~
  32.     if ((*pBuffer1) != *pBuffer2)2 U$ T* B6 f& A0 y6 e# e0 }( q0 e' a
  33.     {( C9 \# V: W' L  K1 A7 M, D0 G
  34.       return BufferLength;
    7 y* H# h7 a0 X. b
  35.     }$ Z" H+ z" o! Q1 ?! x0 J
  36.     pBuffer1++;
    # a: p! y% a; A$ Q4 C8 x2 {  o
  37.     pBuffer2++;
    " M8 B$ D' r8 a6 @5 J  J2 A4 n
  38.   }* P1 w0 {3 B3 X! i
  39. 5 y2 V2 {. o# g$ o
  40.   return 0;
    * o% D5 l" U7 J
  41. }* a8 t* O- U- j4 p: P+ C7 E; E
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~5 W; D/ `; P( |. h# z6 }
  1.   /* USER CODE BEGIN WHILE */
    5 ?, }5 P3 |! a( |; u
  2.   while (1)- P6 q+ E' ], K6 [6 i
  3.   {
    0 B+ ^; ?: k. |$ f
  4.     BSP_LED_Toggle(LED7);
    * }( M: g: e! F' Z3 h1 n8 b
  5.     HAL_Delay(400);, t! @$ t& q" U1 i6 K0 `. P
  6.     /* USER CODE END WHILE */
    ! `4 J! D' v( b1 m* B

  7. 0 B4 H- \  C8 P! f  E8 o$ ?
  8.     /* USER CODE BEGIN 3 */' X3 d/ ~$ x. @- C  y  @# o
  9.   }
复制代码
编译,下载查看,测试通过LED闪烁:
  f7 C1 Z! C$ X9 M 5080.gif 2 ^4 c7 t. J' r
# Y  i: ?) K: N% {5 o& y, n
用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!
0 n$ [" H1 H2 f3 m. J当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开2 n% u/ I2 y- a) `3 J! {  m# _1 q6 E
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~
) h4 ^& U/ N% o$ B- o  U! a% W
赞 收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错3 f$ @# Y% s# X( r$ X
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习
0 G6 P0 m- ~6 P
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的
$ v6 R( A- t  G0 a2 b: N
joshua天宇 回答时间:2021-10-27 10:32:29
强大 0 k; B0 B& @& {: o% q" f
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的. U) b& K7 h+ v! T; z  L
昱枫 回答时间:2021-10-27 10:34:23
学习学习 5 r. L! k4 _5 |$ v) }( l
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便
" ~1 T, u6 ]6 q& m
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习
' ]6 ^6 e: d  ?( `! W. h1 d3 J
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。
2 E9 |% d9 X, y  o& G
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细, ~& L1 t+ B- G3 y
VegardCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?( }+ r/ d2 P- l; b6 z
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习
2 M. G, x; Y& @; T. J, l2 \1 |" z) E  c* [/ m- l

所属标签

相似技术帖

官网相关资源

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