精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Crypto算法庫使用技巧之基于STM32 AES GCM應用提示

STM32單片機 ? 來源:STM32單片機 ? 作者:STM32單片機 ? 2021-09-24 14:23 ? 次閱讀

引言

X-CUBE-CRYPTOLIB 是基于 STM32 的 Crypto 算法庫,支持對稱密鑰、非對稱密鑰、哈希等多種算法。正確地使用 Cyrptolib 算法庫,可以在應用程序中實現數據加密、設備身份認證、加密通信等多種應用層所需的安全功能。相反,若不能正確地使用算法庫往往會帶來加解密數據錯誤等系列問題。

關于 STM32 Crypto 算法庫應用中的常見的問題之一就是應用程序沒有使能 MCU 的CRC 模塊,盡管輸出的數據和期望值不同,但加解密函數的調用并未返回異常。本文在此描述另外一種沒有正確使用算法庫的情況。

問題描述

客戶應用項目中需要在固件更新過程中對固件進行加密并驗證,根據推薦采用了 AES- GCM 算法完成該任務。下載的固件通過 AES-GCM 進行加密,并帶 TAG 可以用于驗證固件來源的合法性。在項目的代碼中使用 X-Cube-Cryptolib 進行 AES-GCM 運算。上位機使用 cryptopp820 加密庫對固件目標 bin 文件進行加密,然后在 MCU 上通過X-Cube- Cryptolib 加密庫進行 AES-GCM128 解密,解密數據沒有問題,但是 TAG 數據總是無法校驗通過。

問題分析與定位

正常情況下,當調用 AES_GCM_Decrypt_Finish(P_pAESGCMctx, NULL, P_pOutputSize);執行后,AESctx.mFlags 結果會提示是否通過校驗。如果校驗成功,該值應該等于 0x22,而運行結果中看到的卻是 0x12。

確認庫函數使用方法

將調用 AES-GCM 功能的代碼放在 X-Cube-Cryptolib 中一個簡單的測試程序的環境進行測試,查看是否有該問題,結果發現測試程序中 AES-GCM 校驗是可以成功的,但是集成到客戶應用中時就無法成功。那我們接下來重點研究應用程序環境。

應用程序環境

應用程序使用了 FreeRTOS,基于 IAR 編譯環境。

查看庫文件的使用

確認使用了正確的庫文件。

確認是否存在多線程訪問

AES-GCM 的函數會在幾個線程中調用,而且確認不會出現同時調用的情況,不存在 raise condition 的問題。

查看內存使用情況

最初懷疑是否因為任務棧溢出造成,于是查看內存使用情況。IAR stack size: 0x4800

IAR heap size: 0x4000

FreeRTOS heap size: 85KB

執行AES 運算的線程 stack size: 2560B

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

AESGCMctx_stt 結構的大小有 2360 字節,AES-GCM 加解密函數需要的 stack 大小大概在 450 字節左右,但是應用代碼中將該變量定義為全局變量,以便可以在幾個不同的線程中使用,這樣可以確認線程棧大小沒有問題,不存在 stack overflow 的問題。

查看生成代碼的.map 文件

通過比較,所有 cryptolib 中的 symbol 在 map 中的大小都正常,唯一有問題的是 AESGCMctx_stt 結構變量的大小。應用代碼.map:AESctx 0x2002f1f4 0x8f8 Data Gb AES_GCM_Decrypt.o [1]

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

驗證不過的問題應該和這個結構的數據有直接關系,接下來研究是什么造成了這個不同。

查看項目使用的 crypto 庫頭文件

經檢查,INCLUDE_AES192 和 INCLUDE_AES256 兩個宏定義在 config.h 的定義中被注釋掉,這將導致 aes_gcm.h 中 AESGCMctx_stt 數據結構的成員變量 uint32_t amExpKey[CRL_AES_MAX_EXPKEY_SIZE];的大小發生變化,因為CRL_AES_MAX_EXPKEY_SIZE 的定義根據INCLUDE_AES128/192/256 是否定義會有所不同。

//#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 */

問題解決

將 config.h 里面被注釋掉的兩行定義打開,重新編譯,此時 TAG 驗證能夠正常通過。#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. */

小結

簡言之,如果使用 X-Cube-Cryptolib 庫的話,作為用戶就不要改動 config.h 的內容, 不可想當然地自行調整配置。其實,庫是預先編譯好了的,所有的功能都已經包含,只是鏈接的時候根據用戶使用到的函數去鏈接最終的目標文件。

這個客戶就是按照以為關閉某些配置可以節省代碼空間的想法,貿然注釋掉了他以為自己不需要的功能,造成數據結構大小發生變化等,影響加密庫的正常使用。

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17002

    瀏覽量

    350328
  • STM32
    +關注

    關注

    2266

    文章

    10873

    瀏覽量

    354843
  • IAR
    IAR
    +關注

    關注

    5

    文章

    345

    瀏覽量

    36625
  • 函數
    +關注

    關注

    3

    文章

    4307

    瀏覽量

    62433

原文標題:工程師筆記 | Crypto算法庫使用技巧 —— 基于STM32 AES GCM應用提示

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    aes算法在移動應用中的應用場景

    AES算法(Advanced Encryption Standard,高級加密標準)在移動應用中的應用場景十分廣泛,主要體現在以下幾個方面: 1. 數據傳輸安全 在移動應用中,用戶經常需要通過網絡
    的頭像 發表于 11-14 15:14 ?228次閱讀

    aes加密的常見錯誤及解決方案

    AES(Advanced Encryption Standard,高級加密標準)是一種對稱加密算法,它使用固定長度的密鑰對數據進行加密。在使用AES加密時,可能會遇到一些常見錯誤。以下是對這些錯誤
    的頭像 發表于 11-14 15:13 ?533次閱讀

    aes在云存儲中的應用實例

    云存儲服務允許用戶通過互聯網訪問和存儲數據,這使得數據的安全性和隱私性成為關鍵問題。AES作為一種高效的對稱加密算法,提供了強大的數據保護能力。 2. AES基本原理 AES是一種對稱
    的頭像 發表于 11-14 15:11 ?294次閱讀

    aes算法在數據傳輸中的應用

    隨著信息技術的飛速發展,數據安全已成為一個日益重要的議題。AES(高級加密標準)算法作為一種廣泛使用的對稱加密技術,因其高效性和安全性,在數據傳輸領域扮演著至關重要的角色。 1. AES算法
    的頭像 發表于 11-14 15:09 ?279次閱讀

    藍牙AES+RNG如何保障物聯網信息安全

    對數據進行加密,即使別人截獲了加密后的數據,也無法識別利用該數據。目前市面上大部分低功耗藍牙BLE產品具備AES加密功能。AES(Advanced Encryption Standard)是對稱加密算法的一個
    發表于 11-08 15:38

    村田電容gcm和grm區別?

    村田電容的GCM系列和GRM系列在多個方面存在顯著的差異。以下是關于這兩個系列電容的詳細比較: 1、應用領域 : GCM系列:GCM系列電容以其低ESR(等效串聯電阻)和高品質因數(Q值)為主
    的頭像 發表于 05-29 15:33 ?831次閱讀
    村田電容<b class='flag-5'>gcm</b>和grm區別?

    ModusToolbox?中為CY8CPROTO-062-4343W) TDA5235_868_5_BOARD運行“Cryptography_AES_Demonstration”, 如何調試實際加密寄存器?

    “Cryptography_AES_Demonstration”。 如何調試實際加密寄存器(AES 芯片塊)? 在調試模式下,可以打開外設視圖,但它不會列出 CRYPTO 塊。
    發表于 05-17 06:57

    AES加密協議是什么?AES加密協議的應用

    標準化過程:AES是在1997年由比利時密碼學家Joan Daemen和Vincent Rijmen共同提出的Rijndael算法基礎上發展起來的。經過嚴格的國際評審和對比測試,美國國家標準與技術研究
    的頭像 發表于 04-15 15:34 ?764次閱讀

    STM32L072系列支持AES加密算法嗎?

    STM32L072,L0系列,Cortex-M0/M0+/M1處理器基于ARMv6-M架構,查指令集是沒有AES加密支持的請問要怎么支持AES加密算法
    發表于 04-10 08:05

    使用lsm303agr傳感器做一個電子羅盤,能否使用X-CUBE-MEMS1算法庫

    使用ST的lsm303agr傳感器做一個電子羅盤的應用,希望使用的是nrf52832作為數據采集端,并希望能移植X-CUBE-MEMS1算法庫,請問可行嗎?如何操作?
    發表于 04-02 07:35

    全志R128 SDK HAL 模塊開發指南——Crypto Engine

    Crypto Engine 模塊介紹 CE 模塊主要支持對稱算法、非對稱算法、摘要算法進行數據的加密和解密功能。 CE 模塊主要支持的算法
    發表于 03-21 10:44

    請問有人用過瑞芯微自定義3A算法模塊嗎

    目前也研究了好一陣了,想請教一下如何開發自己的3A算法庫或者別的圖像處理算法庫。想和各位討論一下
    發表于 01-25 10:15

    xmc7200如何將KEIL的算法庫移植到MTB?

    你好我正在使用xmc7200芯片,我想將 KEIL 算法庫移植到MTB使用,我應該如何操作?最好的問候
    發表于 01-25 06:08

    mini57系列運行帶算法庫的程序,編譯沒有錯誤但無法運行是為什么?

    我用mini57系列的芯片跑做一個心率檢測的產品。加入心率算法庫后,發現程序無法運行,但是編譯沒有報錯。我在線仿真發現無法進入main函數,程序運行不了。算法庫是用新塘的demo在keil的環境下生成的。 不知道是為什么。
    發表于 01-15 08:33

    IN6xx硬件AES介紹

    硬件AES
    橙群微電子
    發布于 :2023年12月04日 14:57:33