一.前言
本文對TrustZone 進行簡單的介紹,不涉及具體的技術細節,旨在有一個概念性的感性的理解,后面有機會再分享幾篇更詳細的技術細節介紹和實際應用案例。
本文后續內容以瑞薩的RA系列為例,不同廠家芯片可能不同需要參考對應的手冊。
二.TrustZone介紹
Arm TrustZone 技術是Armv8-M 架構一個可選的架構擴展。
其核心思想就是樸素的硬件隔離思想,系統和軟件劃分為安全區域和非安全區域,安全軟件可以訪問安全和非安全存儲器和資源,而非安全軟件只能訪問非安全存儲器和資源。安全與非安全狀態與現有的線程和處理模式組合,即有四種處理器狀態,如下所示:
系統實現了安全擴展,則系統默認以安全狀態啟動的,即啟動時是無所不能的,一般此時對應bootrom完全相關工作,然后跳轉到用戶非安全程序運行。如果未實現安全擴展,則系統始終處于非安全狀態。
注意安全是一個系統工程,Arm TrustZone只是提供了一種實現安全的隔離技術,并未包括安全的所有方面,比如他就不涉及加密等,也并不是說使用Arm TrustZone就安全了,安全是需要系統考慮的,任何一處不安全整個系統就不安全,符合木桶原理。打個比方,武俠小說中很牛逼的反派人物,練就了金鐘罩鐵布衫刀槍不入,但是往往會有一個弱點就是比如足下或者腋下很脆弱,這就不是安全系統,木桶原理導致其很容易從非安全處被攻破,所以最后大決戰階段正派一開始被暴擊,最后快要掛了時,對準反派的弱點比如足下一擊,立馬KO。所以安全的考慮要系統的考慮,而不僅僅是考慮使用一種什么技術,及你就能考慮處理器就可以達到的。
三.關鍵組件
隔離的目的就是要隔離關鍵組件(資源),使得其受保護,不能被非信任軟件直接訪問,避免被攻擊。
關鍵組件包括以下內容:
l安全自舉程序,即前面提到的bootrom程序,因為系統啟動默認是安全狀態的(能不能啟動時不是安全狀態呢?不能,如果此時不是安全狀態則沒法配置安全資源,沒法進行初始化配置,所以啟動時必須是安全狀態,此時無所不能)。所以啟動程序要保證受保護,不會被攻破。
l密鑰,這個不用說,密鑰肯定是要保證不能被非法獲取的,否則別人有了你家的鑰匙,你再牛逼的防盜門也沒啥用。
l閃存編程支持,這也很重要,因為程序最終是要寫入FLASH的,如何保證程序燒錄的安全,不被篡改,不燒錄非授信程序等都是保證安全的前提。
l高價值資產,其他的,比如用戶信息數據等都是需要受保護的。
四.安全系統
要構建安全硬件平臺,安全注意事項不僅僅要考慮處理器級別,而是需要考慮系統級別,所以一再強調的是系統安全,而不是處理器安全,主要包括:
存儲器系統
總線系統
外設
調試系統等。
4.1存儲器系統
前面提到了TrustZone 技術的核心是隔離,所以針對存儲器系統就是劃分不同的區域對應不同的屬性。代碼閃存、數據閃存和 SRAM 分為 安全 (S)、非安全 (NS) 和非安全可調用 (NSC) 區域,比如瑞薩的RA系列MCU這個劃分是通過IDAU控制的。
如下圖所示:
代碼閃存和SRAM都可以執行程序所以有非安全可調用區域,而數據閃存不可執行程序只有非安全和安全區域之分。
當器件生命周期為安全軟件開發 (SSD) 狀態時,可通過使用串行編程命令將這些存儲器安全屬性編程到非易失性存儲器中。
安全區域,執行安全程序,具備最高權限可以訪問所有資源。
安全地址用于只能由安全代碼或安全 master 訪問的內存和外設。安全事務是那些由 master 發起并在安全狀態下運行的事務。
非安全區域,執行非安全程序,只能訪問非安全資源,也可以調用非安全可調用區域API,執行一些安全程序的接口。
非安全地址用于設備上運行的所有軟件均可訪問的內存和外設。非?安全事務源自以非安全方式運行的 master或訪問非安全地址的安全 master(僅數據事務,非獲取指令)。僅允許非安全事務訪問非?安全地址。非安全事務不能訪問安全地址。
非安全可調用區域NSC,即中間地帶,提供非安全程序可調用的安全API。
NSC 是一種特殊類型的安全位置。這種類型的內存是 Armv8-M 處理器允許為其保留 SG(安全門)指令的唯一類型,該指令允許軟件從非安全狀態轉為安全狀態。該 SG 指令可用于防止非安全應用程序從分支進入無效入口點。
當非安全代碼調用安全端函數時:
– API 中的第一條指令必須是 SG 指令。
– SG 指令必須在 NSC 區域內。
安全代碼還提供非安全可調用函數,為非安全代碼提供安全服務訪問。
基于 TrustZone 區域 的代碼和數據閃存安全功能
從非安全區域讀取代碼和數據閃存區域將生成 TrustZone 安全故障。
代碼和數據閃存 編程和擦除 (P/E) 模式入口可以配置為僅通過安全軟件實現,也可以配置為通過安全和非安全軟件實現。默認情況下,MCU 將代碼和數據閃存 P/E 功能配置為僅通過安全軟件實現。閃存驅動程序可以置于安全分區 中,并且可以配置為非安全可調用,以允許非安全應用程序執行閃存 P/E 操作。
支持安全區域和非安全區域的臨時和永久閃存塊保護。
SRAM
SRAM 存儲器可以通過存儲器安全屬性 (MSA) 分為安全/非安全 可調用/非安全狀態,并且可以防止非安全訪問。當 MSA 指示 SRAM 存儲區域處于安全或非安全可調用狀態 時,非安全訪問無法覆寫它們。
4.2總線系統
直接存儲器訪問控制器 (DMAC) 和數據傳輸控制器 (DTC) 由主 TrustZone 過濾器監控。在訪問總線之前,會提 前檢測閃存和 SRAM 的 TrustZone 違例區域。DMAC 和 DTC 中的主 TrustZone 過濾器可以檢測 IDAU 定義的閃 存區域(代碼閃存和數據閃存)和 SRAM 區域的安全區域。當非安全通道訪問這些地 址時,主 TrustZone 過濾器會檢測到安全違例,不允許訪問違例地址。
以太網DMA控制器
EDMAC RAM 緩沖區置于 TrustZone 的非安全 RAM 中。EDMAC 被硬編碼為 TrustZone 非安 全總線主器件。這些硬件特性允許以下兩個以太網程序分區選項:
在安全區域中運行以太網程序 ,在非安全區域中放置 EDMAC RAM 緩沖區
在非安全區域中運行以太網程序 EDMAC RAM 緩沖區。
MPU
總線主 MPU 可用于除 CPU 外的每個總線主器件的存儲器保護功能。安全軟件可以設置總線主 MPU 的安全 屬性。
4.3外設
MCU 中的大多數外設都可以配置為安全或非安全,但CS 區域控制器、QSPI、OSPI、ETHERC 和 EDMAC始終是非安全。
外設分為兩種類型。 類型 1 外設具有一種安全屬性,對所有寄存器的訪問由一種安全屬性控制。安全應用程序將類型 1 外設安 全屬性設置到外設安全屬性寄存器(PSARx:x = B 至 E)。外設的不同通道可以采用不同的安全屬性。例如,UART 通道 0 和通道 1 可以具有不同的安全或非安 全屬性。
類型 2 外設具有每個寄存器或每個位的安全屬性,根據這些安全屬性控制對每個寄存器或位域的訪問。安 全應用程序將類型 2 外設安全屬性設置到每個模塊中的安全屬性寄存器。
總結一下就是外設類型1顆粒度更大,所有寄存器一起控制安全屬性,類型2顆粒度更小。
時鐘生成電路針對每個時鐘樹控制都有單獨的安全屬性??墒褂靡幌聲r鐘控制方案。
整個時鐘樹僅通過安全項目進行控制,在非安全項目中被鎖定。
整個時鐘樹可通過非安全項目和安全項目進行控制。
4.4調試系統
開發階段希望有更強大的調試功能,以方便進行各種調試分析,而發布階段希望關閉調試功能以放置通過調試系統被攻破。所以調試功能分為了不同級別
調試功能分為 DBG0、DBG1 和 DBG2 三個級別,以 對支持 TrustZone 技術的調試功能提供支持,并為開發、生產和部署的產品提供安全性。
DBG2:允許調試器連接,無限制訪問存儲器和外設。
DBG1:允許調試器連接,但僅限訪問非安全存儲區域和外設
DBG0:不允許調試器連接
調試級別根據產品的器件生命周期狀態確定。通過器件生命周期管理系統可以實現調試級別的回退。
五.器件生命周期管理
使用 TrustZone 技術功能和安全加密引擎 9 (SCE9) 實現增強型器件 生命周期管理系統。器件生命周期管理在啟用 TrustZone 技術的應用程序開發、生產和部署階段非常重要,主要實現以下功能:
根據器件生命周期狀態定義和切換,在開發和生產階段創建、安 裝和使用器件生命周期管理密鑰等。
六.參考
《TrustZone technology for Armv8-M Architecture Version 2.1》
《Renesas RA Family Security Design with Arm TrustZone - IP Protection》
審核編輯 黃宇
-
處理器
+關注
關注
68文章
19286瀏覽量
229817 -
存儲器
+關注
關注
38文章
7492瀏覽量
163829 -
trustzone
+關注
關注
0文章
20瀏覽量
12539
發布評論請先 登錄
相關推薦
評論