名詞解釋
ATF – Arm Trusted Firmware
TEE – Trusted Execute Environment
OPTEE-OS – Open-source Portable Trusted Execution Environment OS
GP – Global Platform
TA – Trust Application (Secure.OS)
CA – Client Application (Rich.OS)
Rich OS ←→ Secure OS
Non-Secure World ←→ Secure World
Normal World ←→ Secure World
Trusted Client ←→ Trusted Application
TEE硬體檢視
Arm公司提出的了TrustZone技術,用一根安全匯流排(稱為NS位)來判斷當前處於secure world還是non-secure world狀態,狀態的切換由ATF(Arm Trusted Firmware)來完成。
TEE軟體檢視
OP-TEE軟體架構
產品開發團隊負責開發一個執行在Linux上的Client Application(CA)和一個執行在OP-TEE上的Trusted Application(TA),CA使用TEE client API與TA通訊,並且從TA獲取安全服務。CA和TA使用共享記憶體進行通訊。
TEE啟動流程
理論上來說,在啟動過程中,OP-TEE必須儘可能早的啟動(bootloader的執行優先於OP-TEE會帶來一個缺陷,觸碰敏感資料)。在一個典型的linux啟動過程中,rom bootloader載入/執行一個第一階段bootloader(如:SPL,MLO,SBL1,FSBL),這個第一階段bootloader然後執行一個第二階段bootloader(如:U-Boot,LittleKernel),這個第二階段bootloader會執行linux核心,所有的這些過程來自一個安全世界上下文。
在一個基於ARMv7的處理器上,附有TEE的典型啟動流程是SPL載入OP-TEE和U-Boot,然後跳轉到OP-TEE,一旦OP-TEE初始化完畢,OP-TEE就會切換到非安全上下文,並且跳轉到U-Boot中。OP-TEE程式碼會繼續放在記憶體中,以便為linux核心提供安全服務。
在一個基於ARMv8的處理器上,TEE啟動流程還涉及到一個SPL載入ARM Trusted firmware的步驟。SPL跳轉到arm trusted firmware,這個firmware隨後與OP-TEE共同協作, OP-TEE轉而跳轉到處於非安全上下文的U-Boot中。
在一個ARMv8平臺上,ARM Trusted firmware提供一個監視器程式碼去管理安全世界和非安全世界之間的切換,而在ARMv7平臺上這一功能是被嵌入到OP-TEE中的。
OP-TEE Linux support
針對OP-TEE的linux核心驅動出現在核心版本4.12及其以上的版本,如果您執行的核心版本較老,那麼您需要backport 補丁(https://lwn.net/Articles/716737/)。當然您也需要做以下操作來使能此驅動
- 設定核心配置項:CONFIG_OPTEE=y
- 新增裝置樹節點(可以參考這裡https://github.com/nodeax/linux-at91/commit/6f4de47f0265d75a7d3a1335b5191d464d611ebe)
TEE加密操作架構示例
Optee Set-up in Ubuntu 18.04
# ----- prerequisite
sudo apt-get install -y git
sudo apt-get install -y android-tools-fastboot \
autoconf bison cscope curl \
flex gdisk libc6:i386 libfdt-dev libglib2.0-dev \
libpixman-1-dev libstdc++6:i386 libz1:i386 netcat \
python-crypto python-serial uuid-dev xz-utils zlib1g-dev
sudo apt-get install -y python3-pyelftools
# ----- extra python libraries
sudo apt-get install -y python3-pip
pip install pycryptodomex
# ----- optee compile dependency
sudo apt-get install -y libssl-dev
sudo apt-get install -y ninja-build
# ----- download and set-up repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# ----- download source code
mkdir -p $HOME/devel/optee
cd $HOME/devel/optee
repo init -u https://github.com/OP-TEE/manifest.git -m default.xml -b master
repo sync
# ----- download toolchain
cd build
make -f toolchain.mk toolchains
# ----- build for qemu
make -f qemu.mk all
# ----- run qemu
make -f qemu.mk run-only