STM32L5基于Cortex-M33 內(nèi)核,其內(nèi)核基于ARMV8-M架構(gòu),自帶有TrustZone安全技術(shù),從內(nèi)核到整個芯片系統(tǒng),實現(xiàn)了安全區(qū)域和非安全區(qū)域之間的有效隔離。在調(diào)試端口保護方面,TrustZone 和 RDP(讀保護)的配合,同樣可以實現(xiàn)靈活的調(diào)試端口訪問控制,有效阻斷來自調(diào)試端口對片上代碼的窺探。
TrustZone 保護片上代碼的機密性
調(diào)試端口連接可控
在RDP1或者RDP0.5條件下,如果芯片使用了TrustZone上電調(diào)試接口就不可連接(具有類似RDP2的效果)
比RDP2更靈活,可以由用戶代碼控制后續(xù)調(diào)試端口訪問權(quán)限,實現(xiàn)安全調(diào)試,并保留修改選項字節(jié)的可能性
用戶片上Flash進一步隔離
安全閃存區(qū)域不能被非安全世界任意訪問
非安全世界不能訪問安全世界的數(shù)據(jù)
非安全世界不能訪問安全世界的外設(shè)
非安全世界訪問安全世界的函數(shù),需要按照一定規(guī)則,不可隨意調(diào)用
TrustZone 助力代碼保護示例
資源在“安全世界”和“非安全世界”之間的分配
示例菜單和測試功能
示例運行注意事項
資源的分配
上電運行安全世界代碼,做資源分配
安全世界:
關(guān)鍵操作,關(guān)鍵數(shù)據(jù)
配合讀保護,可以阻斷調(diào)試端口連接
非安全世界:
人機交互
可以使能調(diào)試端口,但是無法訪問到安全世界的關(guān)鍵數(shù)據(jù)和外設(shè)
調(diào)試端口的連接控制RDP=0
讀保護級別為0(芯片缺省狀態(tài))
芯片復(fù)位可被調(diào)試端口連接
運行示例
調(diào)試端口的連接控制RDP=0.5
讀保護級別為0.5
硬件保證:CPU處于安全狀態(tài)時,調(diào)試無法連接;包括復(fù)位時,運行安全代碼時
軟件操作:安全代碼在跳轉(zhuǎn)到非安全區(qū)域之前,關(guān)閉調(diào)試端口
保護效果
CPU運行在非安全區(qū)域時,缺省調(diào)試無法連接;可通過身份認證來使能對非安全代碼的調(diào)試
帶身份認證的調(diào)試使能
基于“挑戰(zhàn)-應(yīng)答”模型
芯片產(chǎn)生隨機序列,合法用戶持有匹配私鑰對隨機序列的簽名,才能被芯片使用其存儲在安全世界里的對應(yīng)公鑰驗簽成功
例程運行注意事項
RDP0.5時,S代碼自動關(guān)閉調(diào)試端口。使用STM32CUbeProgrammer hotplug也無法連接;IDE下載NS代碼也不會成功;需要用戶通過菜單打開調(diào)試端口,之后STM32Cubeprogramer才能連接成功,IDE下載也才能成功。
RDP非0時,片上Flash中如果沒有可以跑到非安全狀態(tài)的有效代碼,調(diào)試端口不再可連 除非改變啟動方式,從系統(tǒng)BL啟動(系統(tǒng)BL的代碼是一定可以跑到非安全狀態(tài)的) 需要確??梢詮南到y(tǒng)BL啟動(選項字節(jié)中的啟動控制:nSWBOOT0)
【Q】為何例程沒有提供RDP回退的菜單? 【A】TrustZone使能時,RDP回退只能由調(diào)試接口或者系統(tǒng)BL完成 例程通過硬件和軟件兩方面一起作用,實現(xiàn)了對非安全代碼的可控調(diào)試 硬件:讀保護級別不為零+TZ使能 復(fù)位時+ 運行在安全代碼區(qū)域時,調(diào)試不可連接 軟件:安全區(qū)代碼在跳轉(zhuǎn)到非安全區(qū)代碼之前,軟件關(guān)閉調(diào)試端口 菜單【1】、【2】:測試作用,不會集成到產(chǎn)品中 菜單【D】:即使通過通信端口在非安全區(qū)注入惡意代碼來調(diào)用打開調(diào)試端口的功能,由于不知道簽名所需要的私鑰,驗證無法通過,不能打開調(diào)試端口 。
責(zé)任編輯:lq6
-
STM32
+關(guān)注
關(guān)注
2270文章
10895瀏覽量
355729
原文標(biāo)題:ARMV8-M中的TrustZone如何保護代碼的安全?
文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論