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