我們都知道STM32WB是雙核多協(xié)議無線微控制器,即主頻為64 MHz的 ArmCortex‐M4內(nèi)核(應(yīng)用處理器)和主頻為32 MHz的ArmCortex‐M0+內(nèi)核(網(wǎng)絡(luò)處理器),支持Bluetooth 5和IEEE 802.15.4無線標(biāo)準(zhǔn)。雙核的好處是可以優(yōu)化對資源的安全使用,保證和RF協(xié)議棧相關(guān)處理的實時性,并可同時提供電源管理的靈活性。
STM32WB的信息安全是以雙核隔離為基礎(chǔ)的。
STM32WB雙核架構(gòu)和雙核間的隔離機制
調(diào)試端口訪問:
出廠的芯片缺省關(guān)閉CM0+一側(cè)的調(diào)試端口訪問,即使在RDP0的狀態(tài)下也只能調(diào)試CM4內(nèi)核。
OptionByte中包含雙核隔離相關(guān)的安全設(shè)置,例如CM0+才能訪問的Flash區(qū)間等等。這些OptionByte受到保護,無法隨意被修改。缺省出廠芯片已經(jīng)使能CM0+的保護,相關(guān)的一些OptionByte設(shè)置無法通過調(diào)試端口或CM4進行修改。
片上Flash:
Flash的一部分只能由CM0+訪問,CM4無法對該部分Flash進行讀、寫、擦。
片上SRAM:
SRAM的一部分只能由CM0+訪問,CM4無法對該部分SRAM進行讀、寫。
CRYPTO硬件資源:如AES,TRNG,PKA
系統(tǒng)上電復(fù)位時,缺省CRYPTO相關(guān)的硬件CM4可以使用。CM0+內(nèi)核可以通過修改SystemConfig相應(yīng)的寄存器使得這些硬件資源只能由CM0+內(nèi)核進行控制,也稱為把這些硬件資源配置成Secure訪問模式。其中當(dāng)AES1被配置為Secure時,CM4內(nèi)核無法訪問密鑰寄存器,但是依舊可以訪問AES1的其他寄存器使用AES1硬件單元進行加解密操作。
CKS (Customer Key Storage)
AES算法是應(yīng)用程序中經(jīng)常用到的一種保障數(shù)據(jù)機密性和完整性的方法,例如用于隱私數(shù)據(jù)的加密存儲、加密通信等。其中,密鑰作為最敏感的信息也需要受到保護。
STM32WB的CKS功能提供在MCU上的密鑰安全存儲和安全使用方法 :
存儲在片上安全Flash的密鑰無法通過調(diào)試端口獲取(即使在RDP0條件下)
運行在CM4內(nèi)核的應(yīng)用程序代碼也無法獲得片上安全Flash中存儲的密鑰,避免軟件漏洞帶來的風(fēng)險
應(yīng)用程序代碼依舊能夠通過CKS和AES1硬件模塊使用存儲的密鑰進行加解密操作
CKS能夠存儲多組密鑰,應(yīng)用程序代碼可以通過密鑰索引來指定AES運算所使用的密鑰
用戶密鑰存儲
用戶密鑰存儲在“安全”Flash區(qū)域,用戶代碼和調(diào)試端口不可訪問
CKS最多可以存儲100個用戶應(yīng)用密鑰(用于AES運算)
允許存儲128位或者256位的AES密鑰
對密鑰的操作只能通過用戶代碼調(diào)用FUS接口完成
把密鑰寫到“安全”Flash區(qū)域,需要安全的操作環(huán)境

用戶密鑰的寫入 (Key Provisioning)
可以通過用戶代碼完成,也可以通過CubeProgrammer的GUI或者命令行完成
寫入應(yīng)用密鑰的明文//simple key,需要安全的操作環(huán)境
寫入應(yīng)用密鑰的密文//encrypted key,無需安全的操作環(huán)境
基于AES-128 GCM
寫入用于解密encrypted key的密鑰的明文//master key,需要安全的操作環(huán)境
該操作在手冊中用“write”或“l(fā)oad”表示
用戶密鑰的寫入通過應(yīng)用代碼實現(xiàn)
參考例程:
STM32Cube_FW_WB_VxxxProjectsP-NUCLEO-WB55.NucleoApplicationsCKS
給CKS_param賦值
typedef PACKED_STRUCT{uint8_t KeyType;uint8_t KeySize;uint8_t KeyData[32 + 12];} SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t;SHCI_C2_FUS_StoreUsrKey_Cmd_Param_t CKS_param;CKS_param.KeyType = …;CKS_param.KeySize = …;memcpy(CKS_param.KeyData, pKeySimple_128, 16
調(diào)用FUS服務(wù):SHCI_C2_FUS_StoreUsrKey
輸入:CKS_param結(jié)構(gòu)體
輸出:芯片為該密鑰分配的索引
SHCI_C2_FUS_StoreUsrKey (&CKS_param, &key_simple_128_idx );
用戶密鑰的寫入使用STM32CubeProgrammer GUI實現(xiàn)
STM32CubeProgrammer 從2.4版本開始支持
芯片切換到系統(tǒng) Bootloader 啟動運行DFU,
STM32CubeProgrammer 以USB方式連接芯片
步驟:選擇KEY文件 ——》 指定KEY類型 ——》 寫入KEY
注意:GUI界面沒有返回為該密鑰分配的索引,需要用戶自己記錄
應(yīng)用密鑰的裝載和使用
Load:AES1的密鑰裝載
SHCI_C2_FUS_LoadUsrKey (key_simple_128_idx)
該操作會把AES1密鑰寄存器配置成Secure
SAES1@SYSCFG_SIPCR
只能由運行在CM0+上的FUS來配置
運行在CM4上的用戶代碼可以讀取其狀態(tài)
安全狀態(tài)和AES1時鐘是否使能沒有關(guān)系
使用步驟
Step1:AES1模塊初始化
初始化結(jié)構(gòu)體的pKey,設(shè)置為空指針即可
使能AES1時鐘
Step2:密鑰裝載
要在AES1模塊disable1的時候 (EN=0)
Step3:使用AES1做加解密
hcryp1.Init.DataType = CRYP_DATATYPE_8B;hcryp1.Init.KeySize = CRYP_KEYSIZE_128B;hcryp1.Init.Algorithm = CRYP_AES_CBC;/* Key will be provided by CKS service */hcryp1.Init.pKey = NULL; hcryp1.Init.pInitVect = AESIV;HAL_CRYP_Init (&hcryp1);SHCI_C2_FUS_LoadUsrKey (key_simple_128_idx);HAL_CRYP_Encrypt(&hcryp1, Plaintext, size, EncryptedBuf, timeout)
應(yīng)用密鑰的使用
Lock:
SHCI_C2_FUS_LockUsrKey (key_simple_128_idx)
對某個key lock之后,將無法再對該key進行Load操作,再次Load該Key時FUS API返回錯誤代碼0xFF;但是不影響已經(jīng)在AES1密鑰寄存器中的key
對該key load的禁止操作,會一直生效直到下次系統(tǒng)復(fù)位
注意事項:關(guān)于后續(xù)更新
為了避免有效密鑰一直存在于AES1密鑰寄存器中,建議使用完畢后Load一個dummy key或者disable AES1
后續(xù)FUS版本(從 STM32CUbeWB1.11開始)會增加API:Unload
早期出廠芯片預(yù)裝的FUS版本較老,在FUS升級的時候,通過CSK存儲在芯片里的用戶key會被擦除
從FUS1.1.1.1或者FUS1.2.0開始,再做FUS升級,不會影響到已經(jīng)存在的用戶key應(yīng)用密鑰的使用
小結(jié)
使用CKS對AES密鑰進行保護,與傳統(tǒng)的直接將AES密鑰存儲在Flash中的做法有明顯的優(yōu)勢:
CKS存儲的密鑰數(shù)據(jù)無法通過調(diào)試端口獲取,已經(jīng)存儲的密鑰數(shù)據(jù),即使在RDP為0的情況下也不能通過調(diào)試端口訪問。
密鑰使用過程中應(yīng)用程序代碼雖然可以使用密鑰進行加解密操作,但是始終無法直接獲取密鑰數(shù)據(jù)本身,降低了軟件漏洞可能帶來的風(fēng)險。
原文標(biāo)題:信息安全專題 | 安全存儲(2)STM32WB的用戶密鑰存儲 (CKS)
文章出處:【微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
責(zé)任編輯:haq
-
存儲
+關(guān)注
關(guān)注
13文章
4791瀏覽量
90066
原文標(biāo)題:信息安全專題 | 安全存儲(2)STM32WB的用戶密鑰存儲 (CKS)
文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
極海APM32F427系列MCU榮獲IEC 60730/60335功能安全認證
AN5289 使用 STM32WB 系列微控制器構(gòu)建射頻應(yīng)用筆記
LAT1215+如何讓 STM32WB 在沒有 LSE 時運行 BLE 應(yīng)用程序
STM32WB 系列微控制器 OTA 和無線固件更新應(yīng)用筆記
硬件加密引擎在保障數(shù)據(jù)安全方面有哪些優(yōu)勢呢?
CW32L010的安全運行庫保護是什么功能?
STM32WB連接擴展板技術(shù)解析:從硬件架構(gòu)到開發(fā)實踐
STM32WB09xE藍牙低功耗MCU技術(shù)解析
根據(jù)Datasheet里cyT2B5L有1024位otp,全部都能用來存儲密鑰嗎?
凌科芯安國產(chǎn)安全MCU簡介
MAX36051 DeepCover安全管理器,具有128字節(jié)無痕跡存儲器技術(shù)手冊
STM32WB的CKS功能提供在MCU上的密鑰安全存儲和安全使用方法
評論