TrustZone 旨在幫助從事資源受限設備的嵌入式開發人員改進其安全架構。它為開發人員提供了一種容器化和隔離軟件的方法,同時仍提供 Cortex-M 處理器所期望的特性,例如低中斷延遲。TrustZone 將內存、處理域和應用程序分成兩個獨立的域 — 安全和非安全,有時也分別稱為可信應用程序和用戶應用程序。
用戶域包含用戶應用程序、RTOS、設備驅動程序、協議棧和通用外圍設備等項目。用戶域的行為與當今典型的 Cortex-M 應用程序完全相同。事實上,開發人員可以使用禁用 TrustZone 的 TrustZone 處理器,他們不會注意到任何差異。不過,這會破壞整個目的。安全域包含幾個旨在保護系統的項目,例如安全啟動、安全存儲、加密庫,甚至 RTOS 任務和內核代碼。這些項目肯定存在于當今的用戶應用程序中。但是有了 TrustZone,他們現在能夠在沒有明確這樣做的情況下以不再直接訪問的狀態存在。
第一次使用 TrustZone 的開發人員會發現,即使是軟件的開發方式也不同。開發人員現在需要將他們的應用程序分成兩個獨立的應用程序,而不是使用單個代碼項目:固件項目和用戶項目。固件項目包含應用程序的所有安全代碼,并將駐留在安全內存位置。外部世界或用戶應用程序無法訪問這些內存位置,除非嵌入式開發人員專門在其代碼中創建安全網關以公開安全功能。不過,重要的是要知道,安全區域可以完全訪問所有內存位置。這意味著,如果為安全域編寫的軟件計劃訪問不太安全的用戶應用程序空間中的數據或固件,則需要非常小心。
用戶應用程序是標準的,是目前每個 Cortex-M 開發人員都習慣的類型。如前所述,用戶應用程序受限于它可以訪問的內存位置、功能和外圍設備。如果需要執行安全功能,用戶應用程序可以通過安全網關調用安全域。如果用戶應用程序嘗試訪問任何其他安全內存區域,則會導致錯誤。這可以防止錯誤的用戶程序隨機訪問安全內存或以任何方式對其進行操作。
TrustZone 應用程序首先在安全域中執行。開發人員從他們的安全啟動應用程序開始,并可以啟動他們的處理器。一旦完成,執行可以從安全狀態切換到用戶狀態并開始執行用戶代碼。
當處理器從用戶狀態切換到安全狀態時,硬件處理轉換,開發人員無需添加代碼。相反,編譯器會自動添加一條 CPU 指令,指示切換到安全狀態。在兩種狀態之間切換的最壞情況確定性開銷是三個時鐘周期。根據應用程序,如果嵌入式開發人員正在進行函數調用并且需要驗證函數參數或測試在域之間傳遞的指針,則開銷可能會更大。
當開發人員第一次遇到 Cortex-M 的 TrustZone 時,他們會發現他們編寫應用程序的方式將永遠改變。他們實際上必須設置兩個應用程序,其中一個將存在于用戶域中,另一個存在于安全域中。當存在提高系統安全性的機會時,必須以不同的方式開發軟件不一定是壞事。開發人員需要仔細考慮他們的應用程序架構,并確保他們正確地識別他們的軟件和數據應該存在的領域。TrustZone 是嵌入式開發人員可以用來提高系統安全性的工具。但只有通過正確使用,任何系統都會變得更加安全。