隨著汽車電子系統變得越來越智能,對功能安全(Safety)的要求越來越高,同時信息安全(Security)也越來越被關注,安全調試(Secure ?Debug)機制已成為一個重要的信息安全特性。NXP推出的S32K3系列MCU配備了多層次的生命周期管理和硬件安全引擎(Hardware Security Engine,HSE),以確保在產品開發與部署中的信息安全。
本文主要介紹如何在IAR Embedded Workbench for Arm中實現NXP S32K3的安全調試。
NXP S32K3生命周期與調試權限
NXP S32K3的生命周期(Lifecycle,簡稱LC)是芯片內用于表示設備狀態的重要機制,其狀態變化遵循單向流程,不可逆轉。生命周期的不同階段(如: CUST_DEL、OEM_PROD、IN_FIELD等)決定了開發者是否可以訪問特定的調試功能和HSE接口。調試功能通常在開發階段可用,而在量產階段需限制,以防止未經授權的訪問。在生命周期進入CUST_DEL后面的階段(如:OEM_PROD、IN_FIELD、PRE_FA),可以配置為Trusted,即開發者通過安全身份認證機制,才可以訪問調試端口,進行軟件調試。
安全調試身份認證機制
當MCU調試端口被設置為受保護狀態后,若調試器未能通過身份認證,將無法建立調試會話。NXP提供了兩種主要的身份認證方式:
- 靜態認證(Static Authentication):
調試器在每次復位后需提供相同的預設密鑰(Application Debug Key/Password, ADKP)以解鎖調試接口。 - 動態認證(Dynamic Authentication):
調試器在每次復位后,需基于芯片生成的挑戰數據進行加密計算,并返回相應響應數據以完成身份認證。
這兩種模式均需通過HSE接口在CUST_DEL階段配置,配置方式依賴于HSE的set attribute服務接口(HSE_DEBUG_AUTH_MODE_ATR_ID)。
另外,在每種身份認證方式下,都有兩種情況,一種是密鑰與MCU UID無關(w/o UID diversified), 另一種則是密鑰與MCU UID相關(w UID diversified)。
加鎖調試端口
加鎖調試端口具體流程請咨詢NXP。
- 128 位ADKP是一個非常重要的 OTP HSE 系統屬性,與安全調試、生命周期和 IVT 身份驗證等功能密切相關。通過配置ADKP可以實現加鎖調試端口,加鎖方式如下:可以直接編寫程序燒錄ADKP,或者通過HSE進行配置。
- 生命周期需要配置到CUST_DEL之后的生命周期(OEM_PROD、IN_FIELD等),調試端口可基于ADKP的配置進行保護。生命周期配置到進入下一階段之前,確保ADKP已配置。
安全調試輔助工具 SDAF
NXP提供了對應的安全調試輔助工具(Secure Debug Assist Firmware, SDAF),支持用戶在IAR Embedded Workbench for Arm中實現靜態和動態身份認證。該工具可用于密鑰派生、加密封裝、UID管理等關鍵操作。
SDAF支持如下功能:
- 利用芯片UID派生ADKP密鑰
- 封裝ADKP(支持RSA-2048加密)
- 將封裝密鑰注冊至本地數據庫
SDAF工具與IAR調試腳本配合使用,以實現身份認證流程。SDAF工具可以在NXP S32DS的安裝目錄中找到,更多關于SDAF工具的信息請咨詢NXP。
安全調試(靜態認證)操作流程
開發環境: IAR Embedded Workbench for Arm v9.60.4 + I-jet 硬件調試器
- 準備工作:
a) ? ?調試端口已加鎖的NXP S32K3 MCU
b)? ??獲取UID:在調試選項界面配置--macro_param vlk_path="C:/NXP/S32DS.3.5/S32DS/tools/S32Debugger/Debugger/Server/CCS/bin"即配置SDAF工具的路徑,然后直接啟動調試,身份認證失敗后會退出調試,但在Debug log中有打印UID信息。??(只有With UID Diversified情況下,需要進行這步操作)?
c) ? ?獲取ADKP。ADKP為認證密鑰,一般由安全人員保管。本示例的ADKP為0x00112233445566778899AABBCCDDEEFF
2.使用SDAF工具(需要使用admin權限操作SDAF工具),通過volkano_utils.exe的derive_adkp命令,用芯片 UID 來派生 ADKP。(只有With UID Diversified情況下,需要進行這步操作)
3.在Debugger選項中,按下圖格式輸入密鑰,本示例中:
a) ? ?Without UID Diversified模式: 密鑰為0x00112233445566778899AABBCCDDEEFF
b) ? ?With UID Diversified模式: 密鑰為上一步所生成的派生后的ADKP,本例為?0xB61A47A672A895E0F384EA32EBD99626
4.啟動調試后,在連接內核時,會調用調試腳本的函數_ExecDeviceCoreConnect() -> _authentication() ->_key(),將密鑰寫入相應的寄存器。
5.密鑰寫入后, _authentication()函數檢查是否JTAG調試已開放,如已開放,則繼續調試,否則退出調試。
總結
本文主要以靜態認證為例介紹了如何在IAR Embedded Workbench for Arm中實現NXP S32K3的安全調試。NXP S32K3的動態認證安全調試也已經在IAR Embedded Workbench for Arm中實現。