armv8-M(cortex-m) Trustzone总结和介绍
1、簡(jiǎn)介
先看一張軟件架構(gòu)圖:
1.1、ARMV8-M Trustzone簡(jiǎn)介
TrustZone 技術(shù)的概念并不新鮮。該技術(shù)已在 Arm Cortex-A 系列處理器上使用多年,并且現(xiàn)在已擴(kuò)展到涵蓋 Armv8-M 處理器。
在較高層次上,Armv8-M 的 TrustZone 技術(shù)的概念類似于 Arm Cortex-A 處理器中的 TrustZone 技術(shù)。處理器具有安全和非安全狀態(tài),非安全軟件只能訪問(wèn)非安全存儲(chǔ)器。Armv8-M 的技術(shù)在設(shè)計(jì)時(shí)考慮了小型節(jié)能系統(tǒng)。與 Cortex-A 處理器中的 TrustZone 技術(shù)不同, Armv8-M 的Secure 和 Normal 世界是基于內(nèi)存映射的,轉(zhuǎn)換在異常處理代碼中自動(dòng)發(fā)生。
Armv8-M 和 Armv8-A所支持的Trustzone技術(shù)有以下方面的不同:
- Armv8-M 的 TrustZone 技術(shù)支持 多個(gè)安全entry points,而在 Cortex-A 處理器的 TrustZone 技術(shù)中,Secure Monitor 處理程序是唯一的entry points。
- 執(zhí)行在安全狀態(tài)時(shí)仍可處理非安全中斷
在許多具有實(shí)時(shí)處理功能的微控制器應(yīng)用中,確定性行為和低中斷延遲是重要的要求。在運(yùn)行安全代碼時(shí)處理中斷請(qǐng)求的能力至關(guān)重要 - 通過(guò)允許在安全和非安全狀態(tài)之間共享寄存器組,Armv8-M 實(shí)現(xiàn)的功耗可以類似于 Armv6-M 或 Armv7-M
- 狀態(tài)切換的低開(kāi)銷允許安全和非安全軟件頻繁交互,這在以下情況下很常見(jiàn)。 安全固件包含軟件庫(kù),例如 GUI 固件或通信協(xié)議棧
在具有 Armv8-M 架構(gòu)安全擴(kuò)展的設(shè)計(jì)中,對(duì)系統(tǒng)安全至關(guān)重要的組件可以放置在安全的世界。這些關(guān)鍵組件包括:
- 安全引導(dǎo)加載程序。
- 秘鑰。
- 閃存編程支持。
- High value assets(高價(jià)值資產(chǎn))。
安全(Trusted)和非安全(Non-trusted)軟件可以一起工作,但非安全應(yīng)用程序不能直接訪問(wèn)安全資源。相反,任何對(duì) Secure 資源的訪問(wèn)都可以通過(guò) Secure 軟件提供的 API,這些 API 可以實(shí)現(xiàn)身份驗(yàn)證來(lái)決定如果允許訪問(wèn)安全服務(wù)。通過(guò)這種安排,即使非安全應(yīng)用程序中存在漏洞,黑客
不能攻擊掉整個(gè)芯片。
1.2、Armv8-M Trustzone背景下的安全需求
安全這個(gè)詞在嵌入式系統(tǒng)設(shè)計(jì)中可以有很多不同的含義。在大多數(shù)嵌入式系統(tǒng)中,安全性可以包括但不限于到:
- 通訊保護(hù)
這種保護(hù)可以防止數(shù)據(jù)傳輸被未授權(quán)方看到或攔截,并且可能包括其他技術(shù),例如密碼學(xué)。 - 數(shù)據(jù)保護(hù)
這種保護(hù)可防止未經(jīng)授權(quán)的各方訪問(wèn)存儲(chǔ)在設(shè)備內(nèi)的秘密數(shù)據(jù)。 - 固件保護(hù)
這種保護(hù)可防止片上固件被逆向工程。 - 運(yùn)行保護(hù)
此保護(hù)可防止關(guān)鍵操作出現(xiàn)惡意故意故障。 - 篡改保護(hù)
在許多安全敏感產(chǎn)品中,需要防篡改功能來(lái)防止設(shè)備的操作或保護(hù)機(jī)制受到影響。被覆蓋。
TrustZone 技術(shù)可以直接解決嵌入式系統(tǒng)的以下一些安全要求: - 數(shù)據(jù)保護(hù)
敏感數(shù)據(jù)可以存儲(chǔ)在安全內(nèi)存空間中,并且只能由安全軟件訪問(wèn)。非安全軟件只能訪問(wèn)安全 API 向非安全域提供服務(wù),并且僅在安全檢查或身份驗(yàn)證之后。 - 固件保護(hù)
預(yù)加載的固件可以存儲(chǔ)在安全存儲(chǔ)器中,以防止其被逆向工程和受到惡意攻擊。Armv8-M 的 TrustZone 技術(shù)也可以與額外的保護(hù)技術(shù)一起使用。例如,設(shè)備級(jí)讀出保護(hù),一種技術(shù)當(dāng)今業(yè)界常用,可配合Armv8-M的TrustZone技術(shù),保護(hù)最終完成的固件產(chǎn)品。 - 安全啟動(dòng)
安全啟動(dòng)機(jī)制使您對(duì)平臺(tái)充滿信心,因?yàn)樗冀K從安全內(nèi)存啟動(dòng)。
TrustZone 技術(shù)還可與面向下一代的高級(jí)微控制器中使用的附加保護(hù)功能一起使用物聯(lián)網(wǎng) (IoT) 產(chǎn)品。例如,為物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)的微控制器可以包含一系列安全功能。
TrustZone 技術(shù)的使用有助于確保所有這些功能只能使用具有有效entry point的 API 來(lái)訪問(wèn),如下所示圖顯示:
通過(guò)使用 TrustZone 技術(shù)來(lái)保護(hù)這些安全功能,設(shè)計(jì)人員可以:
- 防止不受信任的應(yīng)用程序直接訪問(wèn)安全關(guān)鍵資源。
- 確保僅在驗(yàn)證和檢查后才重新編程 Flash 映像。
- 防止固件被逆向工程。
- 以軟件級(jí)別的保護(hù)存儲(chǔ)機(jī)密信息
無(wú)線通信接口的安全性
在其他一些應(yīng)用場(chǎng)景中,例如帶有經(jīng)過(guò)認(rèn)證的內(nèi)置無(wú)線電堆棧的無(wú)線 SoC,TrustZone 技術(shù)可以保護(hù)標(biāo)準(zhǔn)化操作,例如無(wú)線通信行為。
TrustZone 技術(shù)可以確保客戶定義的應(yīng)用程序不會(huì)使認(rèn)證失效,如下圖所示。
2、Trustzone擴(kuò)展的兩種安全狀態(tài)
Trustzone技術(shù)下的兩個(gè)安全狀態(tài)(Security State): Non-Secure State 和 Secure State.
在TF-M中也稱之為: NSPE(NON-Secure Processing Environment)和SPE(Secure Processing Environment)
關(guān)于reset
- 如果實(shí)施了安全擴(kuò)展,則標(biāo)記為安全的內(nèi)存區(qū)域和其他關(guān)鍵資源只有在 PE 以安全狀態(tài)執(zhí)行時(shí)才能訪問(wèn)
- 如果實(shí)施了安全擴(kuò)展, 則在 Cold reset 和 Warm reset時(shí),PE將進(jìn)入Secure狀態(tài)
- 如果實(shí)施了安全擴(kuò)展, 則在 Cold reset 和 Warm reset時(shí),PE將進(jìn)入NON-Secure狀態(tài)
關(guān)于banked
實(shí)施了安全擴(kuò)展后,下列寄存器都是banked by security:
- 通用寄存器中的R13(SP)
- 特殊寄存器中的 : MASK寄存器(PRIMASK, BASEPRI, FAULTMASK)、CONTROL 寄存器、棧指針限制寄存器(MSPLIM ,PSPLIM)
- System Control Space (SCS)
msr/mrs指令編碼
MRS 和MSR指令編碼中的bit[7]表示操作的是哪組寄存器(Secure or NON-Secure)
補(bǔ)充術(shù)語(yǔ)
RAZ:Read-As-Zero 讀到的總是0
WI :Writes Ignoredx 寫無(wú)效
RAO:Read-As-Oned讀到的總是1
SBZP:Should-Be-Zero-or-Preserved on writes 寫總是0
SBOP : Should-Be-One-or-Preserved on writes. 寫總是1
UNK:unknown 讀寫時(shí)返回值未知
詳見(jiàn):ARM Glossary
cortex-A Trustzone 和 cortex-M Trustzone的對(duì)比:
在cortex-M上,雙系統(tǒng)的切換,使用的是 Secure Gateway (SG) 指令,但只允許在特殊的memory上調(diào)用SG,即使 NSC(non-secure callable)
安全狀態(tài)的切換
切換安全狀態(tài)的方式有以下兩種:
- 直接函數(shù)調(diào)用和返回(non-secure callable)
- 異常/中斷的進(jìn)入和退出
3、 內(nèi)存的劃分
如果實(shí)施了安全擴(kuò)展,則 4GB 內(nèi)存空間將劃分為安全和非安全內(nèi)存區(qū)域。
安全內(nèi)存空間進(jìn)一步分為兩種類型:安全(S)和非安全可調(diào)用(NSC : Non-secure Callable)
NSC 是一種特殊類型的安全內(nèi)存。這種類型的內(nèi)存是 Armv8-M 處理器允許保存 SG 指令的一種內(nèi)存,使軟件能夠從非安全狀態(tài)轉(zhuǎn)換為安全狀態(tài)。
通過(guò)將 SG 指令的功能限制在 NSC 內(nèi)存中,安全軟件創(chuàng)建者無(wú)需在正常安全內(nèi)存中意外包含 SG 指令或數(shù)據(jù)共享編碼值,包含 NSC 內(nèi)存位置。
通常 NSC 內(nèi)存區(qū)域包含小型分支跳轉(zhuǎn)(entry points)的表。 為了防止非安全應(yīng)用程序分支到無(wú)效入口點(diǎn),這里有Secure Gateway (SG) 指令。
當(dāng)非安全程序調(diào)用安全端的函數(shù)時(shí):
- API 中的第一條指令必須是 SG 指令。
- SG 指令必須位于由 安全屬性單元 (SAU :Security Attribution Unit) 或?qū)嵤┒x的屬性單元 ( IDAU : Implementation Defined Attribution Unit) 定義的 NSC 區(qū)域中。
引入NSC內(nèi)存的原因是為了防止其他二進(jìn)制數(shù)據(jù),例如查找表,其值與SG指令的操作碼相同,作為進(jìn)入安全狀態(tài)的入口函數(shù)。 通過(guò)分離 NSC 和 Secure 內(nèi)存類型,包含二進(jìn)制數(shù)據(jù)的 Secure 程序代碼可以安全地放置在 Secure 區(qū)域中,而無(wú)需直接暴露于 Normal 世界,并且只能使用 NSC 內(nèi)存中的有效入口點(diǎn)進(jìn)行訪問(wèn)。
4、Attribution units (SAU and IDAU)
- SAU :Security Attribution Unit
- IDAU : Implementation Defined Attribution Unit
復(fù)位的時(shí)候SAU是disabled的
如果SAU是disabled的,且系統(tǒng)中也沒(méi)有包含IDAU,又由于reset時(shí)默認(rèn)的狀態(tài)是Secure Security State,那么系統(tǒng)將無(wú)法切換到Non-secure狀態(tài),所有切換non-secure Security狀態(tài)的操作都會(huì)產(chǎn)生Fault錯(cuò)誤
SAU寄存器的總結(jié)
SAU開(kāi)啟之后:
- 沒(méi)有在 SAU region 范圍內(nèi)的,都視為安全內(nèi)存
- SAU_RLAR.NSC=0 表示非安全內(nèi)存
- SAU_RLAR.NSC=1 表示NSC內(nèi)存
5、Secure和Non-secure的狀態(tài)切換
總結(jié)
以上是生活随笔為你收集整理的armv8-M(cortex-m) Trustzone总结和介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ARMV8-M学习笔记-入门
- 下一篇: 累积计税法:算一算您一年缴了多少个税