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

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

[复制链接]
胤幻1988 发布时间:2021-10-23 17:32
STM32U585主打了数据安全,当然也提供了多种方式。我们这里用B-U585I-IOT02A开发板测试 PKA加密~也就是大家经常在计算机领域听到的公钥加密法~
我们先来看看一些导图:
应用场景:
TT1.png
TT2.png
完全硬件自发,无需CPU干预:
TT3.png
使用流程:
TT4.png
TT5.png
好,由于全在MCU内部,这了也没有什么原理图,我们直接开始CUBEMC的配置:
AA1.png
AA2.png
AA3.png
AA4.png
AA5.png
AA6.png
AA11.png
AA7.png
自动生成代码,我们添加我们的私钥及公钥对,对其进行测试:
  1. PKA_HandleTypeDef hpka;

  2. RNG_HandleTypeDef hrng;

  3. /* USER CODE BEGIN PV */
  4. PKA_ModExpProtectModeInTypeDef in = {0};

  5. /* Input vectors */
  6. uint32_t input1_OpSize  = 32;
  7. uint32_t input1_ExpSize = 32;
  8. 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};
  9. 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};
  10. 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};
  11. 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};
  12. 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};

  13. uint8_t buffer[32];

  14. __IO uint32_t hal_EndOfProcess = 0;
  15. __IO uint32_t hal_ErrorCallback = 0;
复制代码
计算结果与预制值得比较函数:
  1. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength);
复制代码
在main函数里面添加:
  1. /* Initialize all configured peripherals */
  2.   MX_ICACHE_Init();
  3.   MX_RNG_Init();
  4.   MX_PKA_Init();
  5.   /* USER CODE BEGIN 2 */

  6.   /* Set input parameters */
  7.   in.OpSize  = input1_OpSize;
  8.   in.expSize = input1_ExpSize;
  9.   in.pMod    = input1_1;
  10.   in.pExp    = input1_2;
  11.   in.pOp1    = input1_3;
  12.   in.pPhi    = input1_4;

  13.   /* Start PKA protected Modular exponentiation operation */
  14.   if (HAL_PKA_ModExpProtectMode_IT(&hpka, &in) != HAL_OK)
  15.   {
  16.     /* HAL PKA Operation error */
  17.     Error_Handler();
  18.   }

  19.   /* Wait until operation finish */
  20.   while (!hal_EndOfProcess);
  21.   hal_EndOfProcess = 0;

  22.   /* Retrieve computation result */
  23.   HAL_PKA_ModExp_GetResult(&hpka, buffer);

  24.   /* Check retrieved result with expected result */
  25.   if ((Buffercmp((uint8_t*)buffer, (uint8_t*)output1, 32) != 0) || (hal_ErrorCallback == 1))
  26.   {
  27.     /* HAL PKA Operation error */
  28.     Error_Handler();
  29.   }
复制代码
一些回调函数:
  1. /**
  2.   * @brief  Process completed callback.
  3.   * @param  hpka PKA handle
  4.   * @retval None
  5.   */
  6. void HAL_PKA_OperationCpltCallback(PKA_HandleTypeDef *hpka)
  7. {
  8.   hal_EndOfProcess = 1;
  9. }

  10. /**
  11.   * @brief  Error callback.
  12.   * @param  hpka PKA handle
  13.   * @retval None
  14.   */
  15. void HAL_PKA_ErrorCallback(PKA_HandleTypeDef *hpka)
  16. {
  17.   hal_ErrorCallback = 1;
  18. }

  19. /**
  20.   * @brief  Compares two buffers.
  21.   * @param  pBuffer1, pBuffer2: buffers to be compared.
  22.   * @param  BufferLength: buffer's length
  23.   * @retval 0  : pBuffer1 identical to pBuffer2
  24.   *         >0 : pBuffer1 differs from pBuffer2
  25.   */
  26. static uint16_t Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
  27. {
  28.   while (BufferLength--)
  29.   {
  30.     if ((*pBuffer1) != *pBuffer2)
  31.     {
  32.       return BufferLength;
  33.     }
  34.     pBuffer1++;
  35.     pBuffer2++;
  36.   }

  37.   return 0;
  38. }
复制代码
我们在while开启LED循环,只有前面秘钥验证正确后,才能执行到该处~
  1.   /* USER CODE BEGIN WHILE */
  2.   while (1)
  3.   {
  4.     BSP_LED_Toggle(LED7);
  5.     HAL_Delay(400);
  6.     /* USER CODE END WHILE */

  7.     /* USER CODE BEGIN 3 */
  8.   }
复制代码
编译,下载查看,测试通过LED闪烁:
5080.gif

用PKA加密的好处就是有多种模式可选,而且不用CPU干啥,也无需外围加密芯片~s是个不错的选择!
当然,这是有大量的兑换机制有ST及其他密码学人员帮我们弄好了,其实也是挺复杂的。对于我们开
发着而言,直接拿来用即可~无需知道下单的鸡长什么~当然有大神因此去读密码学也是不是不可能~
收藏 1 评论12 发布时间:2021-10-23 17:32

举报

12个回答
STMWoodData 回答时间:2021-10-24 21:34:32
加密功能不错
liuxingkeji 回答时间:2021-10-27 10:16:39
学习学习
子曰好人2号 回答时间:2021-10-27 10:19:50
这个加密功能应用场景还是比较广泛的
joshua天宇 回答时间:2021-10-27 10:32:29
强大
wudianjun2001 回答时间:2021-10-27 10:32:59
加密还是很必要的
昱枫 回答时间:2021-10-27 10:34:23
学习学习
zhangt0713 回答时间:2021-10-27 11:01:03
这个加密,不需要外围的单独芯片,确实方便
QIANYING79 回答时间:2021-10-27 14:38:32
学习学习
qiangtech 回答时间:2021-10-28 10:12:30
谢谢分享。
orima 回答时间:2021-10-28 21:03:47
学习学习,写的很详细
VegardCheng 回答时间:2021-10-28 22:43:25
PKA加密和其他对比怎样?
BEEE 回答时间:2021-10-28 23:42:58
想赶快使用ST新推出这款STM32U5系列产品,学习学习

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版