手把手教你用STM32Trust生成加密固件
作者:strongerHuang
微信公眾號:strongerHuang
STM32生態(tài)很強(qiáng)大,今天講述的是通過STM32Trust生成器生成SFI和SMI加密固件的內(nèi)容。
www.st.com/stm32trust
SFI:Secure Firmware Installation,安全固件安裝解決方案。
SMI:Secure Module Install,安全模塊安裝。
OEM:Original Equipment Manufacturer,原始設(shè)備制造商(或原廠);
SFI格式是由ST公司創(chuàng)建的固件加密格式,它使用帶有128位密鑰的AES-GCM算法將固件(Elf、Hex、Bin或Srec格式)轉(zhuǎn)換為SFI格式的加密和認(rèn)證固件。
SMI格式是ST公司創(chuàng)建的一種格式,旨在保護(hù)合作伙伴的軟件(軟件模塊和庫)。
三、安裝STM32Trust生成器
STM32TrustedPackageCreator安全包生成器工具屬于STM32CubeProgrammer編程工具中的一部分(附加的工具)。
所以,在安裝STM32CubeProgrammer工具時,集成有STM32TrustedPackageCreator這個工具,只是默認(rèn)不安裝,需要手動勾選。
打開STM32TrustedPackageCreator工具,在主界面你就會看到一些我們之前說的SFI、SMI、HSM內(nèi)容。
四、SFI固件生成過程
主要過程如下框圖,由原廠固件、隨機(jī)數(shù)、密鑰,經(jīng)過STM32TrustedPackageCreator工具加密成SFI格式固件。
在執(zhí)行AES-GCM加密一個區(qū)域之前,我們計算初始化向量(IV)為:
IV = nonce + Area Index
該工具將固件映像劃分為幾個加密的部分,這些部分對應(yīng)于不同的內(nèi)存區(qū)域。
這些附加到相應(yīng)描述符(由工具生成的未加密的描述性頭部)的加密部分稱為區(qū)域。
這些領(lǐng)域分不同的類型:
區(qū)域“P”和“R”并不代表真正的固件區(qū)域,而是在SFI映像被分割成幾個部分時創(chuàng)建的,這是在SFI映像的全局大小超過用戶在創(chuàng)建SFI映像期間預(yù)定義的允許RAM大小時的情況。
下面RAM大小和CT地址輸入用于SFI:
五、SMI固件生成過程
SMI同樣是一種加密固件,只是這里面加密的是針對模塊和庫。
SMI加密過程和SFI有點類似,如下圖:
AES-GCM加密使用以下輸入:
?128位AES加密密鑰
?輸入nonce作為初始化向量(IV)
?作為附加身份驗證數(shù)據(jù)的安全版本(AAD)
在創(chuàng)建SMI映像文件之前,對SMI映像有效性進(jìn)行PCROP檢查:
?PCROP部分必須在Flash字(256位)上對齊,否則將顯示警告
?該區(qū)域的大小必須至少為2個Flash單詞(512位),否則將顯示警告
?該部分必須在Flash單詞邊界(256位單詞)上結(jié)束,否則將顯示警告
?如果緊隨PCROP部分之后的部分的起始地址與PCROP部分的最后一個Flash單詞重疊(在執(zhí)行PCROP對齊約束之后),則生成失敗并出現(xiàn)錯誤消息。
如果一切正常,在指定的路徑下創(chuàng)建兩個輸出:
?SMI圖像
?Lib數(shù)據(jù)
SMI格式布局如下:
六、總結(jié)
現(xiàn)在眾多處理器廠家都在推出“安全級別”芯片,其中,軟件加密也算一項,本文重點讓大家知道這個加密過程。
MCU堆棧空間,你設(shè)置了多少?
HAL庫中do{...} while(0U)宏定義的作用和意義
FreeRTOS如何減少RAM占用空間并加快執(zhí)行速度
長按前往圖中包含的公眾號關(guān)注
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!