NXP iMX8MP 使用 OP-TEE
OP-TEE 是 Trusted Execution Environment(TEE)的開源實現方案。在 Arm 處理器上,它可以和非安全操作系統如 Linux 并行運行,通常會使用 Arm 處理器的 TrustZone,確保數據和代碼的可信和一致性。文章接下來將使用 ToradexVerdin iMX8M Plus平臺演示如何開啟 OP-TEE 功能。
OP-TEE 簡介
在 Arm 架構上 OP-TEE 可以分為兩個部分。
Normal World
這是 Rich Execution Environment(REE),運行諸如 Linux、Android 等操作系統。它們使用 tee-supplicant 驅動和 TEE 通信
Secure World
這是 Trusted Execution Environment(TEE),運行 Trusted Applications 或者其他安全系統
TEE 獨立于 REE,因而它是存儲和管理機密信息(如加密密鑰)的理想解決方案,同時能隔離生物認證、數字支付、版權保護等安全敏感操作的執行過程。
得益于meta-toradex-security,目前在 Toradex 的多個模塊上已經可以使用 OP-TEE,包括 Apalis iMX6、Aquila AM69、Colibri iMX6、Colibri iMX7D 1GB、iMX95 Verdin EVK、SMARC iMX8MP、SMARC iMX95、Verdin AM62、Verdin AM62P、Verdin iMX8MP、Verdin iMX8MM、Verdin iMX95。
在 Yocto 中開啟 OP-TEE
和之前的使用加密分區和Secure Boot一樣,只需要將 meta-toradex-security layer 添加到 Yocto 編譯環境中即可使用,并在 local.conf 開啟相關配置。使用tdx-opteeclass 即可開啟 OP-TEE。TDX_OPTEE_INSTALL_TESTS和TDX_OPTEE_PKCS11添加測試用例和 PKCS#11 功能。
INHERIT += "tdx-optee"TDX_OPTEE_INSTALL_TESTS = "1"TDX_OPTEE_PKCS11 = "1"
在編譯鏡像之前,我們還需要修改下 mmc 工具的 recipe。對于 BSP 7 版本使用的 scarthgap 分支,在 layers/meta-toradex-demos/recipes-devtools/mmc 添加 mmc-utils-cos_%.bbappend,內容如下:
\clearpage
# Disable update-alternatives for this packageALTERNATIVE:${PN} = ""ALTERNATIVE_PRIORITY = ""# Ensure no postinsts run (offline or on-target)pkg_postinst:${PN} := ":"pkg_postinst_ontarget:${PN} := ":"# Make the final layout directly during do_install (no alternatives, no postinsts)do_install:append () { # Base recipe installs ${bindir}/mmc; give it the provider name, plus a symlink
if [ -e ${D}${bindir}/mmc ]; then
mv ${D}${bindir}/mmc ${D}${bindir}/mmc.mmc-utils-cos fi
ln -sf ${bindir}/mmc.mmc-utils-cos ${D}${bindir}/mmc
}# (Optional) bump the revision so you don't reuse an old IPKPR = "r1"同時在 local.conf 文件中添加IMAGE_INSTALL:remove = " mmc-utils"。
OP-TEE 需要一種安全存儲解決方案來保存持久性數據,包括加密密鑰、密鑰材料及通用數據。目前 OP-TEE 提供兩種安全存儲實現方案:
第一種基于 Normal World(REE)的文件系統實現。
第二種利用 eMMC 設備的重放保護內存塊(RPMB)分區實現。
REE 文件系統
當使用 REE 文件系統是,例如 Linux 系統,OP-TEE 將相關數據存放在/data/tee/,該路徑可以通過DX_OPTEE_FS_PARENT_PATH更改。這些數據經過 Hardware Unique Key 加密,加密和解密操作在不同 SoC 的專用模塊上完成,如 NXP iMX 處理器的 CAAM 或 EdgeLock Enclave,TI AM6x 處理器的 DMSC。配置之前的加密分區使用,和可以將/data掛載到一個獨立的分區,進行分區的加密和數據一致性校驗。
REE 文件系統是默認的配置,在完成上面的設置后,即可編譯鏡像。
RPMB
當使用 RPMB 時,就不再需要/data分區。eMMC 上的 RPMB 分區可以作為 OP-TEE 的安全存儲。RPMB 能夠在寫入和讀取數據時支持完整性和真實性驗證。該技術最初在 eMMC 4.4 版本中引入,目前大多數 Toradex 模塊均已支持并可直接使用。使用 RPMB 分區時,系統通過對稱密鑰進行讀寫認證。其運作機制簡要說明如下:
首先需在安全環境(通常為受保護的工廠治具)中將認證密鑰預燒錄至存儲設備。
執行寫入操作時,數據會經過哈希計算并使用認證密鑰生成簽名(該簽名亦稱消息驗證碼,簡稱 MAC),存儲設備僅在驗證簽名有效后才會接受寫入請求。
執行讀取操作時,設備返回的數據將附帶 MAC 值。主機端可重新計算 MAC 并與接收值進行比對,從而確保信息的真實性。
將TDX_OPTEE_FS_RPMB設置為 1 時,即可使用 RPMB。使用 RPMB 時需要注意,任何操作前都需向該分區寫入私鑰。這種密鑰燒錄僅能執行一次,且必須在安全的配置環境中完成。為此引入TDX_OPTEE_FS_RPMB_MODE變量,用于配置 RPMB 操作模式。支持以下三種模式:
development:通過 tee-supplicant 在內存中模擬 RPMB 分區。這基于內存實現,因此重啟系統或重新啟動 tee-supplicant 守護進程后存儲內容將丟失。適用于開發場景。
factory:使用 eMMC 的 RPMB 物理分區,OP-TEE 通過 SoC 硬件唯一密鑰(HUK)及設備特定信息生成并燒錄 RPMB 密鑰。此模式專用于工廠安全預配環境,嚴禁在可信安全工廠環境之外使用。
production:在使用已預先燒錄 RPMB 密鑰的前提下啟用 eMMC 的 RPMB 物理分區。適用于依賴預置 RPMB 密鑰實現安全存儲的生產環境。
TDX_OPTEE_FS_RPMB_MODE默認為development,在后續測試使用該配置,local.conf 設置如下:
#TDX_OPTEE_FS_RPMB = "1"
在選擇好上面兩種模式后使用bitbake進行鏡像編譯。并使用 Toradex Easy Installer 燒錄。
bitbake tdx-reference-multimedia-image
OP-TEE 測試
前面在 local.conf 中我們已經添加了測試用例配置。optee_example_hello_world會發送一個數字到 TEE 中的 TA 上進行加 1 運算。
\clearpage
~# optee_example_hello_worldInvoking TA to increment 42 TA incremented value to 43
OP-TEE 完整的測試。
~# xtestRun test suite with level=0 TEE test application started over default TEE instance ...... 47279 subtests of which 0 failed 156 test cases of which 0 failed 0 test cases were skipped TEE test application done!
在使用 RPMB 并開啟development模式時,xtest會出現一個測試失敗內容。這是由于內存模擬的 RPMB 并沒有使用密鑰對數據進行驗證。
regression_1015 FAILED first error at /usr/src/debug/optee-test/4.4.0.imx/host/xtest/regression_1000.c:1366 regression_1016 OK regression_1017 OK 47128 subtests of which 1 failed 156 test cases of which 1 failed 0 test cases were skipped TEE test application done!
PKCS#11 定義了一套標準調用接口,可將密碼學操作(如簽名)卸載至外部模塊執行。該模塊可以是智能卡,而在 OP-TEE 場景中則表現為軟件形態的 PKCS#11 可信應用。即使以軟件形式存在,它仍會像硬件模塊那樣呈現給用戶空間。該可信應用通過共享動態庫進行訪問,這個共享對象充當“橋梁”角色,將密碼學請求轉換為 OP-TEE 調用。
~# pkcs11-tool --module /usr/lib/libckteec.so.0 --show-infoCryptoki version 2.40 Manufacturer Linaro Library OP-TEE PKCS11 Cryptoki library (ver 0.1) Using slot 0 with a present token (0x0)
總結
OP-TEE 為 Arm 平臺上的 Linux 系統提供了一個可信計算單元,不僅能夠保護數據安全,同時也是部分行業的安全規范需求。在 Toradex 的軟硬件生態中,用戶可以輕松使用該功能。
提交
NXP iMX8MM 通過本地服務器更新 BSP 鏡像
NXP iMX8MM ARM 平臺 Weston RDP 遠程桌面部署測試
基于 NXP iMX8MP 平臺測試 CODESYS TargetVisu
通過 Docker 部署測試 CODESYS PLC示例
Yocto layer 使用 TI AM62 安全啟動功能

投訴建議