optee學習筆記_1

TEE

伴隨着日益增多的智能終端設備,爲了確保終端設備的數據安全,我們最好還要在系統中構建一個相對來說更爲可信的運行環境,以確保即便在系統被攻破後,入侵者也無法獲取用戶的關鍵信息,這樣的一個可信賴安全的運行環境被稱爲可信執行環境(Trusted Execution Environment,TEE) 。

如果將整個運行環境按照可信與不可信分爲安全世界(secure world)和正常世界(Normal world),那麼一套完整的TEE解決方案就需要包含正常世界的客戶端應用(Client Application,CA)、安全世界的可信應用(Trust Application,TA)、可信硬件驅動、以及安全世界的可信操作系統(TEE OS)以及可信的硬件。

ARM自ARMv6結構開始,就引入了TrustZone技術。支持TrustZone技術的ARM核將運行狀態分爲安全世界和正常世界兩種狀態,並通過安全監控模式調用指令(secure monitor call,smc)實現安全世界和正常世界狀態的轉換。在安全世界狀態,系統只能訪問安全世界的資源,同理,在正常世界只能訪問正常世界的資源。通常也將安全世界稱爲TEE側,正常世界稱爲REE側。REE即Rich Execution Environment。

目前國內外不同的廠商有不同的TEE解決方案,但是一般都會遵循GP(Global Platform)規範,提供相同的API供開發者開發CA和TA。

OP-TEE

OP-TEE是一套按照GP規範開發,支持通用ARMv7和ARMv6平臺的開源TEE解決方案。開發者可以輕鬆的從github上獲取optee源碼。

整個optee的源碼主要有四個project,分別是:

optee_os: https://github.com/OP-TEE/optee_os.git

optee_client: https://github.com/OP-TEE/optee_client.git

optee_test: https://github.com/OP-TEE/optee_test.git

optee_linuxdriver: https://github.com/OP-TEE/optee_linuxdriver.git

{

ps:在本文檔中,我copy了官方linux內核中driver/tee目錄中的driver做分析

也可以直接去我的github上講四個project下載下來:

https://github.com/4LogCoder/optee.git
}

你可以選擇單獨下載這四個project,同時也可以使用repo工具,統一管理,repo倉庫的地址是:https://github.com/OP-TEE/manifest.git

 

OP-TEE源碼框架

整個optee的源碼主要有四個部分,分別是:

optee_os:一個小型的安全操作系統內核

optee_clien:主要分爲兩個部分,一是tee_supplicant源碼,編譯後作爲一個正常世界的可執行文件,系統啓動後一直在後臺運行,輔助響應optee_os對正常世界的資源訪問和操作;二是libteec庫的源碼,供運行在正常世界用戶空間的CA調用。

optee_linuxdriver:linux系統的driver,是正常世界和安全世界的交流途徑。

Optee_test:optee提供的測試demo,可供用戶參考。

 

OP-TEE框架

再詳細分析源碼之前,我們先以一個完整的demo介紹下optee的工作流程。

Demo功能:利用SHA算法計算一段明文的摘要,並返回結果。

在詳細介紹之前,我們先看一下整個框架圖:

  1. 首先運行在Normal World User空間的CA調用libteec庫相關接口,申請一塊共享內存(share memory),將待計算的明文存放在這塊內存中,並申請初始化一個session。
  2. 在linteec庫中,由系統調用進而陷入Normal World的kernel空間,也就是到達tee_linuxdriver,在driver中,調用smc指令,進行Normal world和secure world的轉換
  3. 轉換至secure world狀態後由optee_os對命令解析,在這裏的命令爲初始化一個session,首先需要去動態load相應的TA文件,由於我們編譯後的TA文件一般存放在REE側的文件系統中,所以在這裏,optee_os會發起RPC請求,也就是重新調用smc指令,轉換至Normal world後,通過optee_linuxdriver到達tee_supplicat,tee_supplicat解析這一請求,去指定的文件夾尋找指定的TA文件,並load進內存。
  4. 在經過初始化session後,相應的TA文件已經load,此時我們再在CA中發起SHA計算請求,並將共享內存地址作爲參數傳入
  5. 此時系統再次陷入Normal world的kernel空間,並通過smc調用,將請求發送至optee_os
  6. optee_os接收請求後,調用相應的TA執行,TA執行計算完成之後,將計算結果放在共享內存中,並返回,按照相同的路徑傳回至CA中,至此計算完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章