天天看點

[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了

★★★ 個人部落格導讀首頁—點選此處 ★★★

.

說明:

在預設情況下,本文講述的都是ARMV8-aarch64架構,linux kernel 64位

.

自制ARM Trustzone學習視訊(17min):

文章目錄

        • 1、ARM Trustzone的安全擴充簡介
        • 2、ARM Trustzone技術下的軟體框圖

1、ARM Trustzone的安全擴充簡介

ARM Trustzone是什麼? ARM Trustzone不具體指一個硬體,也不是一個軟體,而是一套技術一套标志,在支援ARM Trustzone的SOC中,需按照ARM Trustzone技術對各個子子產品進行設計。

[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了
  • (1)、AMBA-AXI總線的擴充, 增加了标志secure讀和寫位址線:AWPROT[1]和ARPROT[1]
  • (2)、processor的擴充(或者說master的擴充),在ARM Core内部增加了SCR.NS比特位,這樣ARM Core發起的操作就可以被标記“是以secure身份發起的通路,還是以non-secure身份發起的通路”
  • (3)、TZPC擴充,在AXI-TO-APB端增加了TZPC,用于配置apb controller的權限(或者叫secure controller),例如将efuse(OTP Fuse)配置成安全屬性後,那麼processor以non-secure發起的通路将會被拒絕,非法的通路将會傳回給AXI總線一個錯誤。
  • (4)、TZASC擴充,在DDRC(DMC)之上增加一個memory filter,現在一般都是使用TZC400,或由SOC廠商自己設計一個這樣的IP,或叫MPU,或內建在DMC内部,它的作用一般就是配置DDR的權限。 如果配置了DDR中某塊region為安全屬性,那麼processor以non-secure發起的通路将會被拒絕。
  • (5)、MMU對安全擴充的支援

    TTBRx_EL0、TTBRx_EL1的擴充:在armv7上,這兩個寄存器對于secure和non-secure屬性是banked的,也就是說在安全世界和非安全世界各有一組這樣的寄存器,是以在linux和tee中可以各自維護一張自己的記憶體頁表.

    cache的擴充:其實cache指令(寄存器)并沒有什麼擴充,而是在MMU頁表的entry的屬性中,增加了NS的屬性,當非安全世界使用MMU進行翻譯位址時,檢查到該entry的屬性為secure,将會miss掉。

  • (6)、gic對安全擴充的支援,在gicv2、gicv3的版本中,都增加了對安全擴充的支援. 以gicv3為例,将中斷劃分成了group0、secure group1和non-secure group1. 在軟體的配置下,group0和secure group1的中斷将不會target到REE(linux)中處理

2、ARM Trustzone技術下的軟體框圖

EL3 is AArch64:

[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了

EL3 is AArch32:

[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了

AArch32和AArch64 secure monitor的了解:

  • 如果secureos和monitor都是64位,secureos跑在el1, monitor跑在el3;
  • 如果secureos和monitor都是32位,secureos和monitor都跑在EL3(secureos在svc模式、monitor在svc模式),它倆共用頁表;
  • 如果monitor是64位,secureos是32位,那麼secureos跑在svc模式(el1),monitor跑在el3,他倆不共用頁表

armv7:

[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了
歡迎添加微信、微信群,多多交流
[trustzone]-ARM trustzone的安全擴充介紹-一篇就夠了