《瑞薩RA產(chǎn)品家族初學(xué)者指南》系列文章已收錄成合集,歡迎點(diǎn)擊上方查看合集并訂閱!
11. 安全性和TrustZone
本章目錄
-
什么是TrustZone,它有什么作用?
-
安全環(huán)境和非安全環(huán)境的劃分
-
器件生命周期管理
-
TrustZone用例
11.2 安全環(huán)境和非安全環(huán)境的劃分
現(xiàn)在我們已經(jīng)清楚,程序需要?jiǎng)澐譃榘踩头前踩h(huán)境,我們?cè)撊绾蜗鄳?yīng)地對(duì)軟件進(jìn)行分區(qū)?為此,基于TrustZone的系統(tǒng)始終包含兩個(gè)不同的項(xiàng)目:一個(gè)安全項(xiàng)目,另一個(gè)是非安全項(xiàng)目。二者都可以利用SRAM以及代碼和數(shù)據(jù)閃存,但只有安全代碼可以直接訪問(wèn)兩個(gè)(安全和非安全)分區(qū)。
可借助e2 studio中的項(xiàng)目配置器設(shè)置這些項(xiàng)目。創(chuàng)建新項(xiàng)目后,系統(tǒng)將提示您選擇項(xiàng)目應(yīng)具有的類型:
-
扁平化(非TrustZone)項(xiàng)目
-
TrustZone安全項(xiàng)目
-
TrustZone非安全項(xiàng)目
圖11-4:通過(guò)項(xiàng)目配置器的“Type Selector”(類型選擇器)頁(yè)面,可以在扁平化、安全和非安全項(xiàng)目之間進(jìn)行選擇
請(qǐng)注意,如果選擇扁平化(非TrustZone)項(xiàng)目,則微控制器將在引導(dǎo)后保持安全模式。另外,在設(shè)置TrustZone項(xiàng)目時(shí)需要格外小心,以確保正確管理安全和非安全分區(qū)之間的連接。在項(xiàng)目配置器中創(chuàng)建非安全項(xiàng)目時(shí),將非安全項(xiàng)目與安全項(xiàng)目或捆綁包進(jìn)行關(guān)聯(lián)以實(shí)現(xiàn)此要求。在“Project Type Selection”(項(xiàng)目類型選擇)屏幕上選擇“TrustZone Non-secure Project”(TrustZone非安全項(xiàng)目)并單擊“Next”(下一步)后,e2 studio將要求您為非安全項(xiàng)目指定一個(gè)對(duì)應(yīng)的安全項(xiàng)目。
創(chuàng)建安全項(xiàng)目后,即可將安全的堆和驅(qū)動(dòng)程序提供給非安全環(huán)境。為此,右鍵單擊最上面的模塊,從彈出的菜單中選擇“Non-secure Callable”(非安全可調(diào)用)。選擇該條目后,請(qǐng)注意左側(cè)的小箭頭:它指示此模塊現(xiàn)在為非可安全調(diào)用模塊(參見(jiàn)圖11-5)。
圖11-5:可以將安全項(xiàng)目中堆棧的最頂層模塊設(shè)為非安全可調(diào)用模塊
最后一點(diǎn)是,也可以在e2 studio內(nèi)對(duì)內(nèi)存進(jìn)行分區(qū):轉(zhuǎn)到“Run → Renesas Device Partition Manager”(運(yùn)行 → 瑞薩器件分區(qū)管理器),將運(yùn)行一個(gè)實(shí)用程序。器件分區(qū)管理器可以在開(kāi)發(fā)期間執(zhí)行生命周期狀態(tài)管理,另外還允許設(shè)置和查詢IDAU區(qū)域,以及解鎖已擦除的閃存模塊。
圖11-6:器件分區(qū)管理器可以定義各種內(nèi)存分區(qū)的大小
如果要深入了解用于配置RA產(chǎn)品家族微控制器專用的Arm TrustZone的工具和相關(guān)工作流程,您可以識(shí)別下方二維碼或復(fù)制對(duì)應(yīng)的網(wǎng)址在瀏覽器中打開(kāi)查看瑞薩網(wǎng)站上提供的RA Arm TrustZone工具入門,介紹有關(guān)使用工具和設(shè)置項(xiàng)目的基礎(chǔ)知識(shí):
https://www.renesas.cn/cn/zh/document/apn/ra-arm-trustzone-tooling-primer
11.2.1 跨邊界的函數(shù)調(diào)用
現(xiàn)在,如果位于非安全環(huán)境的應(yīng)用程序的一部分要調(diào)用位于安全環(huán)境的閃存外設(shè),以對(duì)非安全數(shù)據(jù)閃存進(jìn)行編程,會(huì)發(fā)生什么情況?為此,Arm v8M Cortex-M33內(nèi)核的指令集中添加了一條新指令:SG或安全網(wǎng)關(guān)。該指令必須位于內(nèi)存的安全和非安全部分之間的非安全可調(diào)用(NSC)區(qū)域。這可確保即使在安全環(huán)境的其他位置找到SG操作碼,也不能將其用作入口點(diǎn)。在SG指令之后,可以對(duì)安全端的代碼進(jìn)行調(diào)用(參見(jiàn)圖11-7)。
圖11-7:從非安全環(huán)境中調(diào)用安全函數(shù)
將通過(guò)BXNS LR(BXNS = 跳轉(zhuǎn)并交換到非安全狀態(tài))操作碼從安全端返回到非安全端,此操作將跳轉(zhuǎn)到BL Func_A_Entry分支期間放置在鏈接寄存器(LR)中的地址。在函數(shù)返回時(shí),函數(shù)的返回狀態(tài)被存儲(chǔ)在LR中返回地址的LSB中。這一位的數(shù)值將和返回到調(diào)用函數(shù)時(shí)的狀態(tài)進(jìn)行比較,以防止從非安全代碼調(diào)用的安全API返回到一個(gè)指向安全地址的假返回地址。
在第一條指令不是NSC區(qū)域中的SG操作碼的情況下,執(zhí)行位于非安全環(huán)境中的代碼對(duì)安全環(huán)境中的代碼的調(diào)用,則在帶CM33內(nèi)核的微控制器上會(huì)發(fā)生安全故障。將在安全狀態(tài)下處理該故障。
還可以從安全代碼調(diào)用非安全代碼,但不建議這樣做,因?yàn)檫@有可能導(dǎo)致數(shù)據(jù)泄露,導(dǎo)致安全問(wèn)題。安全代碼可以通過(guò)參數(shù)將某些寄存器值傳輸?shù)椒前踩h(huán)境,并且編譯器將從其余寄存器中清除其他安全數(shù)據(jù)。該機(jī)制還隱藏了安全軟件的返回地址,從而確保非安全環(huán)境中的代碼不會(huì)操縱返回地址(參見(jiàn)圖11-8)。
圖11-8:從安全環(huán)境中調(diào)用非安全函數(shù)
通過(guò)BLXNS(通過(guò)鏈接跳轉(zhuǎn)并交換到非安全狀態(tài))指令從安全代碼調(diào)用非安全代碼的推薦方法是:在第一次啟動(dòng)時(shí)初始化安全環(huán)境中的代碼,然后將程序控制傳遞給非安全環(huán)境。此后,從非安全環(huán)境到安全環(huán)境的任何數(shù)據(jù)傳輸均應(yīng)通過(guò)FSP回調(diào)進(jìn)行管理。
原文標(biāo)題:瑞薩RA產(chǎn)品家族初學(xué)者指南-第11章(2)
文章出處:【微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
mcu
+關(guān)注
關(guān)注
146文章
17004瀏覽量
350335 -
瑞薩
+關(guān)注
關(guān)注
35文章
22293瀏覽量
86089
原文標(biāo)題:瑞薩RA產(chǎn)品家族初學(xué)者指南-第11章(2)
文章出處:【微信號(hào):瑞薩MCU小百科,微信公眾號(hào):瑞薩MCU小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論