對ARM TrustZone的理解
ARM把TrustZone固化在硬件里的道理是:
系統的安全性不能全靠軟件來保證,而且改寫現有的不安全的軟件,使之更安全也不大可行。
較為可行的方案就是引入一塊安全的硬件邏輯,并且只讓一小塊軟>件控制此安全邏輯。
這樣既保護了既有投資,也把系統的安全風險降到最小。
因為操作系統和普通應用都可以運行在安全態,所以安全態不同于傳統的運行態環狀的特權劃分,因此ARM把安全態描述成一個平行區域,稱之為安全區,又稱為安全監控模式。
核心態程序要進入到安全區運行,必須執行安全監控中斷( secure monitor interrupt, SMI) 指令,而應用程序則必須通過API 函數來調用SMI 指令,此時,操作系統要負責檢查應用程序是否安全,若通過檢查則執行SMI 指令進入到安全區。這樣,整個系統的安全性就全由操作系統負責了。換句話說,TrustZone需要軟件的支持,才能達到安全目標。
執行SMI 指令的具體動作是,SMI 在CP15的安全狀態寄存器中設置S位.。S位擴展還體現在AMBA總線上,這樣外設也可以實現對TrustZone的支持。
安全監控程序(固件)是獨立于操作系統的、自足的、不可重入的一小段代碼。只要CP15安全狀態寄存的S位處于置1狀態,安全監控程序就要起作用(監測所有處理器操作)。首先監控程序要負責保存>上下文狀態,即寄存器內容(一般保存到緊致內存TCM中),并且把當前處理器配置信息保存到CP15的單獨一組分編(banked)寄存器中。TrustZone的開銷是增加了大約350位狀態信息,完成上下文切換需要200時鐘周期。
由于TrustZone為安全區配備了單獨的緩存、TLB和緊致內存TCM,上下文切換并不會導致這些性能構件內容的倒換,也即不會導致系統性能的降低。
ARM建議把安全監控程序及其運行時需要的內存置于一個TCM塊中,以使延遲更低且更可預測。
安全擴展對于中斷處理也有影響。因為中斷既可以來自外設,也可來自軟件,那就必須假定中斷有可能造成安全漏洞,這樣,在安全代碼執行時,就不能簡單地讓任何中斷切入進來。ARM建議的方案是,把中斷也分為安全的和非安全的,安全代碼只能被安全中斷打斷。當然,也可以把所有中斷都提升為安全的,但那樣會引入不必要的延遲。
TrustZone是體系結構的擴展,系統軟件可以利用這一擴展提供安全支持,TrustZone本身并不能實現安全保障功能,但這一解決方案硬件實現不復雜,也不增加許多功耗,仍是具有很好性價比的安全嵌入式解決方案。
評論