99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Crypto算法庫(kù)使用技巧之基于STM32 AES GCM應(yīng)用提示

STM32單片機(jī) ? 來(lái)源:STM32單片機(jī) ? 作者:STM32單片機(jī) ? 2021-09-24 14:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

引言

X-CUBE-CRYPTOLIB 是基于 STM32 的 Crypto 算法庫(kù),支持對(duì)稱(chēng)密鑰、非對(duì)稱(chēng)密鑰、哈希等多種算法。正確地使用 Cyrptolib 算法庫(kù),可以在應(yīng)用程序中實(shí)現(xiàn)數(shù)據(jù)加密、設(shè)備身份認(rèn)證、加密通信等多種應(yīng)用層所需的安全功能。相反,若不能正確地使用算法庫(kù)往往會(huì)帶來(lái)加解密數(shù)據(jù)錯(cuò)誤等系列問(wèn)題。

關(guān)于 STM32 Crypto 算法庫(kù)應(yīng)用中的常見(jiàn)的問(wèn)題之一就是應(yīng)用程序沒(méi)有使能 MCU 的CRC 模塊,盡管輸出的數(shù)據(jù)和期望值不同,但加解密函數(shù)的調(diào)用并未返回異常。本文在此描述另外一種沒(méi)有正確使用算法庫(kù)的情況。

問(wèn)題描述

客戶(hù)應(yīng)用項(xiàng)目中需要在固件更新過(guò)程中對(duì)固件進(jìn)行加密并驗(yàn)證,根據(jù)推薦采用了 AES- GCM 算法完成該任務(wù)。下載的固件通過(guò) AES-GCM 進(jìn)行加密,并帶 TAG 可以用于驗(yàn)證固件來(lái)源的合法性。在項(xiàng)目的代碼中使用 X-Cube-Cryptolib 進(jìn)行 AES-GCM 運(yùn)算。上位機(jī)使用 cryptopp820 加密庫(kù)對(duì)固件目標(biāo) bin 文件進(jìn)行加密,然后在 MCU 上通過(guò)X-Cube- Cryptolib 加密庫(kù)進(jìn)行 AES-GCM128 解密,解密數(shù)據(jù)沒(méi)有問(wèn)題,但是 TAG 數(shù)據(jù)總是無(wú)法校驗(yàn)通過(guò)。

問(wèn)題分析與定位

正常情況下,當(dāng)調(diào)用 AES_GCM_Decrypt_Finish(P_pAESGCMctx, NULL, P_pOutputSize);執(zhí)行后,AESctx.mFlags 結(jié)果會(huì)提示是否通過(guò)校驗(yàn)。如果校驗(yàn)成功,該值應(yīng)該等于 0x22,而運(yùn)行結(jié)果中看到的卻是 0x12。

確認(rèn)庫(kù)函數(shù)使用方法

將調(diào)用 AES-GCM 功能的代碼放在 X-Cube-Cryptolib 中一個(gè)簡(jiǎn)單的測(cè)試程序的環(huán)境進(jìn)行測(cè)試,查看是否有該問(wèn)題,結(jié)果發(fā)現(xiàn)測(cè)試程序中 AES-GCM 校驗(yàn)是可以成功的,但是集成到客戶(hù)應(yīng)用中時(shí)就無(wú)法成功。那我們接下來(lái)重點(diǎn)研究應(yīng)用程序環(huán)境。

應(yīng)用程序環(huán)境

應(yīng)用程序使用了 FreeRTOS,基于 IAR 編譯環(huán)境。

查看庫(kù)文件的使用

確認(rèn)使用了正確的庫(kù)文件。

確認(rèn)是否存在多線程訪問(wèn)

AES-GCM 的函數(shù)會(huì)在幾個(gè)線程中調(diào)用,而且確認(rèn)不會(huì)出現(xiàn)同時(shí)調(diào)用的情況,不存在 raise condition 的問(wèn)題。

查看內(nèi)存使用情況

最初懷疑是否因?yàn)槿蝿?wù)棧溢出造成,于是查看內(nèi)存使用情況。IAR stack size: 0x4800

IAR heap size: 0x4000

FreeRTOS heap size: 85KB

執(zhí)行AES 運(yùn)算的線程 stack size: 2560B

通過(guò) FreeRTOS 的 uxTaskGetStackHighWaterMark() 函數(shù)查看該線程還有 500 字節(jié)左右剩余空間。

AESGCMctx_stt 結(jié)構(gòu)的大小有 2360 字節(jié),AES-GCM 加解密函數(shù)需要的 stack 大小大概在 450 字節(jié)左右,但是應(yīng)用代碼中將該變量定義為全局變量,以便可以在幾個(gè)不同的線程中使用,這樣可以確認(rèn)線程棧大小沒(méi)有問(wèn)題,不存在 stack overflow 的問(wèn)題。

查看生成代碼的.map 文件

通過(guò)比較,所有 cryptolib 中的 symbol 在 map 中的大小都正常,唯一有問(wèn)題的是 AESGCMctx_stt 結(jié)構(gòu)變量的大小。應(yīng)用代碼.map:AESctx 0x2002f1f4 0x8f8 Data Gb AES_GCM_Decrypt.o [1]

正常測(cè)試代碼 .map:AESctx 0x20002e64 0x938 Data Gb AES_GCM.o [1]

驗(yàn)證不過(guò)的問(wèn)題應(yīng)該和這個(gè)結(jié)構(gòu)的數(shù)據(jù)有直接關(guān)系,接下來(lái)研究是什么造成了這個(gè)不同。

查看項(xiàng)目使用的 crypto 庫(kù)頭文件

經(jīng)檢查,INCLUDE_AES192 和 INCLUDE_AES256 兩個(gè)宏定義在 config.h 的定義中被注釋掉,這將導(dǎo)致 aes_gcm.h 中 AESGCMctx_stt 數(shù)據(jù)結(jié)構(gòu)的成員變量 uint32_t amExpKey[CRL_AES_MAX_EXPKEY_SIZE];的大小發(fā)生變化,因?yàn)镃RL_AES_MAX_EXPKEY_SIZE 的定義根據(jù)INCLUDE_AES128/192/256 是否定義會(huì)有所不同。

//#define INCLUDE_DES ((uint16_t)0x0001) /*!《 DES functions are included in the library. *///#define INCLUDE_TDES ((uint16_t)0x0002) /*!《 TripleDES (TDES) functions are included in the library. */#define INCLUDE_AES128 ((uint16_t)0x0004) /*!《 AES functions with key size of 128 bit are included in the library. *///#define INCLUDE_AES192 ((uint16_t)0x0008) /*!《 AES functions with key size of 192 bit are included in the library. *///#define INCLUDE_AES256 ((uint16_t)0x0010) /*!《 AES functions with key size of 256 bit are included in the library. *///#define INCLUDE_ARC4 ((uint16_t)0x0020) /*!《 ARC4 functions are included in the library. *///#define INCLUDE_CHACHA ((uint16_t)0x0040) /*!《 ChaCha functions are included in the library. *///#define INCLUDE_CHACHA20POLY1305 ((uint16_t)0x0080) /*!《 oly1305- AES functions are included in the library */

問(wèn)題解決

將 config.h 里面被注釋掉的兩行定義打開(kāi),重新編譯,此時(shí) TAG 驗(yàn)證能夠正常通過(guò)。#define INCLUDE_AES128 ((uint16_t)0x0004) /*!《 AES functions with key size of 128 bit are included in the library. */#define INCLUDE_AES192 ((uint16_t)0x0008) /*!《 AES functions with key size of 192 bit are included in the library. */#define INCLUDE_AES256 ((uint16_t)0x0010) /*!《 AES functions with key size of 256 bit are included in the library. */

小結(jié)

簡(jiǎn)言之,如果使用 X-Cube-Cryptolib 庫(kù)的話,作為用戶(hù)就不要改動(dòng) config.h 的內(nèi)容, 不可想當(dāng)然地自行調(diào)整配置。其實(shí),庫(kù)是預(yù)先編譯好了的,所有的功能都已經(jīng)包含,只是鏈接的時(shí)候根據(jù)用戶(hù)使用到的函數(shù)去鏈接最終的目標(biāo)文件。

這個(gè)客戶(hù)就是按照以為關(guān)閉某些配置可以節(jié)省代碼空間的想法,貿(mào)然注釋掉了他以為自己不需要的功能,造成數(shù)據(jù)結(jié)構(gòu)大小發(fā)生變化等,影響加密庫(kù)的正常使用。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17984

    瀏覽量

    366941
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    364973
  • IAR
    IAR
    +關(guān)注

    關(guān)注

    5

    文章

    381

    瀏覽量

    37467
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64883

原文標(biāo)題:工程師筆記 | Crypto算法庫(kù)使用技巧 —— 基于STM32 AES GCM應(yīng)用提示

文章出處:【微信號(hào):STM32_STM8_MCU,微信公眾號(hào):STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    STM32_Cryptographic st加密庫(kù)V3.0.0移植以后啥也沒(méi)改,AES256ECB模式加解密都不對(duì),為什么?

    調(diào)用 status = STM32_AES_ECB_Encrypt( (uint8_t *) Plaintext, 64, Key, OutputMessage,&
    發(fā)表于 07-11 06:11

    harmony-utilsAES,AES加解密

    harmony-utilsAES,AES加解密 harmony-utils 簡(jiǎn)介與說(shuō)明 [harmony-utils] 一款功能豐富且極易上手的HarmonyOS工具庫(kù),借助眾多實(shí)用工具類(lèi),致力于
    的頭像 發(fā)表于 06-30 17:30 ?161次閱讀

    shimetapi:開(kāi)源RGB+EVS視覺(jué)融合相機(jī)事件相機(jī)工具鏈與算法庫(kù)

    的接口控制和算法處理。 一、shimetapi_Hybrid_vision_algo (算法層 SDK) 定位: 這是 SDK 的核心算法處理層,位于架構(gòu)的中間層(黃色部分)。 核心功能: 專(zhuān)注于處理來(lái)自
    的頭像 發(fā)表于 06-26 13:52 ?157次閱讀

    在未修改的lf-6.6.36-2.1.0內(nèi)核上運(yùn)行aes基準(zhǔn)測(cè)試時(shí),會(huì)立即崩潰,怎么解決?

    在未修改的 lf-6.6.36-2.1.0 內(nèi)核上運(yùn)行 aes 基準(zhǔn)測(cè)試(config_tee_crypto=y)時(shí),我們會(huì)立即崩潰: # cryptsetup benchmark -c aes
    發(fā)表于 03-31 06:50

    請(qǐng)問(wèn)STM32G473是否支持硬件AES?

    STM32G473參考手冊(cè)及數(shù)據(jù)手冊(cè)中含有硬件AES相關(guān)內(nèi)容及寄存器相關(guān)描述。但STM32G473xx.h中并無(wú)AES相關(guān)寄存器,pack版本已更新為最新。以地址方式直接賦值,Keil
    發(fā)表于 03-12 06:38

    【RA-Eco-RA4E2-64PIN-V1.0開(kāi)發(fā)板試用】RA4E2使用之AES128加密和解密

    加密和解密算法來(lái)進(jìn)行解釋和說(shuō)明數(shù)據(jù)加密和解密操作的。 AES(Advanced Encryption Standard)是對(duì)稱(chēng)加密算法的一個(gè)標(biāo)準(zhǔn),主要用于保護(hù)電子數(shù)據(jù)的安全。AES
    發(fā)表于 12-23 17:29

    常見(jiàn)的加密算法有哪些?它們各自的優(yōu)勢(shì)是什么?

    常見(jiàn)的加密算法及其優(yōu)勢(shì)如下: AES(Advanced Encryption Standard): AES是一種對(duì)稱(chēng)加密算法,采用分組密碼體制,支持128位、192位和256位密鑰長(zhǎng)度
    的頭像 發(fā)表于 12-17 15:57 ?1017次閱讀

    aes技術(shù)在物聯(lián)網(wǎng)中的應(yīng)用前景

    問(wèn)題也日益凸顯。高級(jí)加密標(biāo)準(zhǔn)(AES)作為一種廣泛使用的對(duì)稱(chēng)加密算法,因其高效性和安全性,在物聯(lián)網(wǎng)中扮演著越來(lái)越重要的角色。 1. 物聯(lián)網(wǎng)安全挑戰(zhàn) 物聯(lián)網(wǎng)設(shè)備通常具有計(jì)算能力有限、存儲(chǔ)空間小、能耗低等特點(diǎn),這使得它們?cè)诎踩?/div>
    的頭像 發(fā)表于 11-14 15:15 ?1010次閱讀

    aes算法在移動(dòng)應(yīng)用中的應(yīng)用場(chǎng)景

    AES算法(Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))在移動(dòng)應(yīng)用中的應(yīng)用場(chǎng)景十分廣泛,主要體現(xiàn)在以下幾個(gè)方面: 1. 數(shù)據(jù)傳輸安全 在移動(dòng)應(yīng)用中,用戶(hù)經(jīng)常需要通過(guò)網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-14 15:14 ?898次閱讀

    aes加密的常見(jiàn)錯(cuò)誤及解決方案

    AES(Advanced Encryption Standard,高級(jí)加密標(biāo)準(zhǔn))是一種對(duì)稱(chēng)加密算法,它使用固定長(zhǎng)度的密鑰對(duì)數(shù)據(jù)進(jìn)行加密。在使用AES加密時(shí),可能會(huì)遇到一些常見(jiàn)錯(cuò)誤。以下是對(duì)這些錯(cuò)誤
    的頭像 發(fā)表于 11-14 15:13 ?4242次閱讀

    aes在云存儲(chǔ)中的應(yīng)用實(shí)例

    云存儲(chǔ)服務(wù)允許用戶(hù)通過(guò)互聯(lián)網(wǎng)訪問(wèn)和存儲(chǔ)數(shù)據(jù),這使得數(shù)據(jù)的安全性和隱私性成為關(guān)鍵問(wèn)題。AES作為一種高效的對(duì)稱(chēng)加密算法,提供了強(qiáng)大的數(shù)據(jù)保護(hù)能力。 2. AES基本原理 AES是一種對(duì)稱(chēng)
    的頭像 發(fā)表于 11-14 15:11 ?1023次閱讀

    aes算法在數(shù)據(jù)傳輸中的應(yīng)用

    隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)安全已成為一個(gè)日益重要的議題。AES(高級(jí)加密標(biāo)準(zhǔn))算法作為一種廣泛使用的對(duì)稱(chēng)加密技術(shù),因其高效性和安全性,在數(shù)據(jù)傳輸領(lǐng)域扮演著至關(guān)重要的角色。 1. AES算法
    的頭像 發(fā)表于 11-14 15:09 ?1175次閱讀

    藍(lán)牙AES+RNG如何保障物聯(lián)網(wǎng)信息安全

    對(duì)數(shù)據(jù)進(jìn)行加密,即使別人截獲了加密后的數(shù)據(jù),也無(wú)法識(shí)別利用該數(shù)據(jù)。目前市面上大部分低功耗藍(lán)牙BLE產(chǎn)品具備AES加密功能。AES(Advanced Encryption Standard)是對(duì)稱(chēng)加密算法的一個(gè)
    發(fā)表于 11-08 15:38

    STM32的ADC采樣及各式濾波算法實(shí)現(xiàn)

    本文為手把手教學(xué)ADC采樣及各式濾波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL庫(kù)的ADC采樣函數(shù)為基礎(chǔ)進(jìn)行教學(xué),通過(guò)各式常見(jiàn)濾波的實(shí)驗(yàn)結(jié)果進(jìn)行分析對(duì)比,搭配VOFA+工具直觀的展示濾波效果。
    的頭像 發(fā)表于 10-28 10:51 ?7961次閱讀
    <b class='flag-5'>STM32</b>的ADC采樣及各式濾波<b class='flag-5'>算法</b>實(shí)現(xiàn)

    開(kāi)源物聯(lián)網(wǎng)技術(shù)--AES加密功能技術(shù)分享

    和傳輸?shù)臄?shù)據(jù)的安全,AES加密技術(shù)被廣泛應(yīng)用于以下幾個(gè)方面: 數(shù)據(jù)傳輸加密:物聯(lián)網(wǎng)設(shè)備之間傳輸?shù)臄?shù)據(jù)可以使用AES加密算法進(jìn)行加密,確保數(shù)據(jù)在傳輸過(guò)程中不被竊取或篡改。 身份驗(yàn)證:AES
    的頭像 發(fā)表于 09-11 14:50 ?1322次閱讀
    開(kāi)源物聯(lián)網(wǎng)技術(shù)--<b class='flag-5'>AES</b>加密功能技術(shù)分享