M-CRPS 伺服器安全啟動與升級:X-Cube-SBSFU 使用技巧(第三部分)——移植到另一個 STM32 硬體平台

關鍵字 :安全啟動安全升級SBSFU簽名校驗加解密

1. 引言
 

安全啟動與安全更新是嵌入式設備的基本安全要求之一:安全啟動提供信任根,確保每次設備啟動時運行的應用程式的完整性與合法性;安全更新則在韌體升級過程中避免系統軟體被惡意修改或替換。


為了方便客戶在其嵌入式設備的設計中更容易地整合安全啟動和安全更新功能,STM32 提供了安全啟動與安全更新的參考實現,支援眾多 STM32 MCU 系列。其中 X-CUBE-SBSFU 是針對 Cortex V6/V7M 核心的 STM32 MCU 產品的參考方案,軟體包下載地址:https://www.st.com/x-cube-sbsfu。


在 X-CUBE-SBSFU 使用技巧的第一篇中,我們介紹了軟體包及其軟體架構等內容,讓讀者對這個軟體包有了初步的認識;第二篇則重點介紹了如何將 SBSFU 與應用程式整合,實現安全啟動和安全升級的相關主題;而在這一篇,我們將討論如何將 SBSFU 參考實現從一個 STM32 MCU 平台移植到另一個 STM32 MCU 型號的硬體平台。

2. 參考實作的選擇


X-CUBE-SBSFU 的參考實現通常基於 STM32 現有的 ST 官方開發板,例如 Nucleo 開發板、Discovery 探索套件板。這些開發板上的 STM32 MCU 型號是事先確定的,而使用者在他們實際的專案中很可能並非使用相同的 STM32 MCU 型號。這時候就需要對 X-CUBE-SBSFU 的參考實現進行硬體平台的移植。移植通常基於一個已有的參考實現,因此移植前的第一步就是選擇最合適的參考實現。


參考實現的選擇需要考慮幾個方面:首先是STM32 MCU系列,其次是所需要的功能和配置,最後就是根據需求找到最接近的STM32 MCU型號的參考實現。功能和配置的需求可能涉及多個方面,例如


• Flash 排版
單鏡像還是雙鏡像方案
o 是否需要使用外部 Flash 等
• 加密方案
o 是否需要加密
o 是否使用X509數位憑證
是否需要STSAFE等?
• 加密實現選擇
o 使用STM32 Cryptolib 還是開源的mbedtls/mbedcrypto
• 是否需要 KMS 密鑰管理服務


確定需求之後,找到同一STM32系列中所有滿足需求的參考工程,Projects目錄下的STM32SBSFUProjectsList.html文件列出了不同開發的參考實現所支持的配置組合,例如表1所示。

3. 底層硬體配置的相關修改


SBSFU 參考實現所涉及的底層硬體主要包括串口、FLASH、使用者按鍵 GPIO、DAP 調試端口 GPIO、防篡改 GPIO、STSAFE 接口等等。
 

3.1. 串口
UART主要用於串口列印以及基於YModem協議的通信。需要根據目標STM32 MCU及其硬體板的串口定義,修改對應的UART外設及其GPIO腳位配置。SBSFU中的相關定義位於sfu_low_level.h檔案中,例如

3.2. 快閃記憶體


在安全啟動和韌體更新的過程中,需要對 Flash 進行讀寫操作,因此底層驅動的一個重要部分就是 Flash 驅動。如果 Flash 發生變化,那麼這部分驅動的修改在 SBSFU、SECoreBin 和 UserApp 幾個工程中都需要進行。


通常我們會盡量選擇Flash類型相同或相近的晶片平台作為參考實現,例如目標MCU的Flash是基於page的,那麼也選擇基於page的晶片作為參考實現;如果目標MCU的Flash是基於sector的,那也選擇基於sector的晶片作為參考實現;目標MCU的Flash是雙bank的,那麼也選擇基於雙bank的晶片作為參考實現。


Flash驅動在SBSFU工程中涉及三個源文件:
• sfu_low_level_flash.c:底層的 Flash 初始化、讀取、寫入、擦除、配置等。
• sfu_low_level_flash_int.c:SBSFU 使用內部 flash 的驅動介面,如果 page/sector 或者 bank 模式不同,可能需要檢查這部分是否需要修改。
• sfu_low_level_flash_ext.c:主要針對外部 Flash 的操作,如果使用外部 Flash,那麼可能需要重新適配這個部分。


SECoreBin 工程同樣會用到 Flash 驅動進行讀寫等操作,主要在 se_low_level.c 文件中,類似 sfu_low_level_flash.c 中的實現也需要複製到這個文件中。


UserApp 最終會被實際的使用者應用程式取代,所以並不是一定需要移植,但在前期 SBSFU 尚未與應用程式整合且希望先驗證 SBSFU 移植時,可以考慮將 UserApp 也進行移植。由於涉及的硬體不多,這個移植也不會很複雜。UserApp 的 Flash 驅動在 flash_if.c 中,類似 SBSFU 專案中的 Flash 驅動修改也需要反映在這個檔案中。


X-Cube-SBSFU 參考實現中的內部 Flash 操作是基於 HAL Driver 實現的,所以一般來說,如果 Flash 的類型相同,通常不需要特別修改。如果真的進行了跨 STM32 系列的移植,那麼需要特別注意 Flash 操作的幾個方面,例如基於 sector 還是 page 的操作、單 bank 還是雙 bank,以及在調用 HAL_FLASH_Program 寫操作時每次寫入的大小等等。

4. 記憶體佈局的調整


X-CUBE-SBSFU 在每個參考工程的實現中都有預設的記憶體映射定義(例如圖1所示),在不同平台上,SecureBoot 區域所佔用的空間也有所不同。

如果目標MCU與參考實現使用的MCU的Flash、RAM大小不一致,則需要對記憶體佈局進行調整。通常,如果目標MCU的存儲空間更大,那麼即使不進行調整,移植後的SBSFU應該也可以直接運行,只需要在後期與應用整合時另外調整Active Slot、Download Slot和Swap Slot幾個區域的位置及大小即可。如果目標MCU的記憶體相較於參考平台MCU的記憶體要小,則必須對預設的記憶體佈局定義進行調整。


對於SRAM主要是大小定義的修改,SBSFU使用的SRAM通常不會很大,而且多數情況下後期會釋放給應用使用,一般不需要其他特別的調整。


內部Flash佈局的調整可能涉及兩個方面:應用佔用空間的修改和SecureBoot佔用空間的修改。

5. 小結


X-CUBE-SBSFU 是基於 STM32 MCU 的安全啟動和安全更新的參考實現,支援眾多 STM32 系列。X-CUBE-SBSFU 參考實現包含完整的參考程式碼以及配套的工具,並以原始碼形式提供給客戶,具備極大的靈活性。使用者既可以直接使用該軟體包與應用程式進行整合,為其系統快速添加安全啟動和安全更新功能;也可以僅以此作為參考,重新撰寫自己的安全啟動和安全更新實現。


本文著重介紹了如何將SBSFU參考實現從一個STM32硬體平台移植到另一個STM32硬體平台的內容,包括底層硬體驅動和存儲空間佈局的修改,以及演算法庫版本的切換等。

★博文內容參考自 網站,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

參考來源

ST: https://www.st.com.cn/zh/embedded-software/x-cube-sbsfu.html

評論