NXP iMX8MP 使用 OP-TEE

OP-TEE 是 Trusted Execution Environment(TEE)的開源實(shí)現(xiàn)方案。在 Arm 處理器上,它可以和非安全操作系統(tǒng)如 Linux 并行運(yùn)行,通常會(huì)使用 Arm 處理器的 TrustZone,確保數(shù)據(jù)和代碼的可信和一致性。文章接下來(lái)將使用 ToradexVerdin iMX8M Plus平臺(tái)演示如何開啟 OP-TEE 功能。

OP-TEE 簡(jiǎn)介

在 Arm 架構(gòu)上 OP-TEE 可以分為兩個(gè)部分。

  • Normal World

這是 Rich Execution Environment(REE),運(yùn)行諸如 Linux、Android 等操作系統(tǒng)。它們使用 tee-supplicant 驅(qū)動(dòng)和 TEE 通信

  • Secure World

這是 Trusted Execution Environment(TEE),運(yùn)行 Trusted Applications 或者其他安全系統(tǒng)

TEE 獨(dú)立于 REE,因而它是存儲(chǔ)和管理機(jī)密信息(如加密密鑰)的理想解決方案,同時(shí)能隔離生物認(rèn)證、數(shù)字支付、版權(quán)保護(hù)等安全敏感操作的執(zhí)行過程。

得益于meta-toradex-security,目前在 Toradex 的多個(gè)模塊上已經(jīng)可以使用 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

和之前的使用加密分區(qū)和Secure Boot一樣,只需要將 meta-toradex-security layer 添加到 Yocto 編譯環(huán)境中即可使用,并在 local.conf 開啟相關(guān)配置。使用tdx-opteeclass 即可開啟 OP-TEE。TDX_OPTEE_INSTALL_TESTS和TDX_OPTEE_PKCS11添加測(cè)試用例和 PKCS#11 功能。

INHERIT += "tdx-optee"TDX_OPTEE_INSTALL_TESTS	= "1"TDX_OPTEE_PKCS11 = "1"

在編譯鏡像之前,我們還需要修改下 mmc 工具的 recipe。對(duì)于 BSP 7 版本使用的 scarthgap 分支,在 layers/meta-toradex-demos/recipes-devtools/mmc 添加 mmc-utils-cos_%.bbappend,內(nèi)容如下:

\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"

同時(shí)在 local.conf 文件中添加IMAGE_INSTALL:remove = " mmc-utils"。

OP-TEE 需要一種安全存儲(chǔ)解決方案來(lái)保存持久性數(shù)據(jù),包括加密密鑰、密鑰材料及通用數(shù)據(jù)。目前 OP-TEE 提供兩種安全存儲(chǔ)實(shí)現(xiàn)方案:

  • 第一種基于 Normal World(REE)的文件系統(tǒng)實(shí)現(xiàn)。

  • 第二種利用 eMMC 設(shè)備的重放保護(hù)內(nèi)存塊(RPMB)分區(qū)實(shí)現(xiàn)。

REE 文件系統(tǒng)

當(dāng)使用 REE 文件系統(tǒng)是,例如 Linux 系統(tǒng),OP-TEE 將相關(guān)數(shù)據(jù)存放在/data/tee/,該路徑可以通過DX_OPTEE_FS_PARENT_PATH更改。這些數(shù)據(jù)經(jīng)過 Hardware Unique Key 加密,加密和解密操作在不同 SoC 的專用模塊上完成,如 NXP iMX 處理器的 CAAM 或 EdgeLock Enclave,TI AM6x 處理器的 DMSC。配置之前的加密分區(qū)使用,和可以將/data掛載到一個(gè)獨(dú)立的分區(qū),進(jìn)行分區(qū)的加密和數(shù)據(jù)一致性校驗(yàn)。

REE 文件系統(tǒng)是默認(rèn)的配置,在完成上面的設(shè)置后,即可編譯鏡像。

RPMB

當(dāng)使用 RPMB 時(shí),就不再需要/data分區(qū)。eMMC 上的 RPMB 分區(qū)可以作為 OP-TEE 的安全存儲(chǔ)。RPMB 能夠在寫入和讀取數(shù)據(jù)時(shí)支持完整性和真實(shí)性驗(yàn)證。該技術(shù)最初在 eMMC 4.4 版本中引入,目前大多數(shù) Toradex 模塊均已支持并可直接使用。使用 RPMB 分區(qū)時(shí),系統(tǒng)通過對(duì)稱密鑰進(jìn)行讀寫認(rèn)證。其運(yùn)作機(jī)制簡(jiǎn)要說明如下:

  1. 首先需在安全環(huán)境(通常為受保護(hù)的工廠治具)中將認(rèn)證密鑰預(yù)燒錄至存儲(chǔ)設(shè)備。

  2. 執(zhí)行寫入操作時(shí),數(shù)據(jù)會(huì)經(jīng)過哈希計(jì)算并使用認(rèn)證密鑰生成簽名(該簽名亦稱消息驗(yàn)證碼,簡(jiǎn)稱 MAC),存儲(chǔ)設(shè)備僅在驗(yàn)證簽名有效后才會(huì)接受寫入請(qǐng)求。

  3. 執(zhí)行讀取操作時(shí),設(shè)備返回的數(shù)據(jù)將附帶 MAC 值。主機(jī)端可重新計(jì)算 MAC 并與接收值進(jìn)行比對(duì),從而確保信息的真實(shí)性。

將TDX_OPTEE_FS_RPMB設(shè)置為 1 時(shí),即可使用 RPMB。使用 RPMB 時(shí)需要注意,任何操作前都需向該分區(qū)寫入私鑰。這種密鑰燒錄僅能執(zhí)行一次,且必須在安全的配置環(huán)境中完成。為此引入TDX_OPTEE_FS_RPMB_MODE變量,用于配置 RPMB 操作模式。支持以下三種模式:

  • development:通過 tee-supplicant 在內(nèi)存中模擬 RPMB 分區(qū)。這基于內(nèi)存實(shí)現(xiàn),因此重啟系統(tǒng)或重新啟動(dòng) tee-supplicant 守護(hù)進(jìn)程后存儲(chǔ)內(nèi)容將丟失。適用于開發(fā)場(chǎng)景。

  • factory:使用 eMMC 的 RPMB 物理分區(qū),OP-TEE 通過 SoC 硬件唯一密鑰(HUK)及設(shè)備特定信息生成并燒錄 RPMB 密鑰。此模式專用于工廠安全預(yù)配環(huán)境,嚴(yán)禁在可信安全工廠環(huán)境之外使用。

  • production:在使用已預(yù)先燒錄 RPMB 密鑰的前提下啟用 eMMC 的 RPMB 物理分區(qū)。適用于依賴預(yù)置 RPMB 密鑰實(shí)現(xiàn)安全存儲(chǔ)的生產(chǎn)環(huán)境。

TDX_OPTEE_FS_RPMB_MODE默認(rèn)為development,在后續(xù)測(cè)試使用該配置,local.conf 設(shè)置如下:

#TDX_OPTEE_FS_RPMB = "1"

在選擇好上面兩種模式后使用bitbake進(jìn)行鏡像編譯。并使用 Toradex Easy Installer 燒錄。

bitbake tdx-reference-multimedia-image

OP-TEE 測(cè)試

前面在 local.conf 中我們已經(jīng)添加了測(cè)試用例配置。optee_example_hello_world會(huì)發(fā)送一個(gè)數(shù)字到 TEE 中的 TA 上進(jìn)行加 1 運(yùn)算。

\clearpage

~# optee_example_hello_worldInvoking TA to increment 42
TA incremented value to 43

OP-TEE 完整的測(cè)試。

~# 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模式時(shí),xtest會(huì)出現(xiàn)一個(gè)測(cè)試失敗內(nèi)容。這是由于內(nèi)存模擬的 RPMB 并沒有使用密鑰對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。

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 定義了一套標(biāo)準(zhǔn)調(diào)用接口,可將密碼學(xué)操作(如簽名)卸載至外部模塊執(zhí)行。該模塊可以是智能卡,而在 OP-TEE 場(chǎng)景中則表現(xiàn)為軟件形態(tài)的 PKCS#11 可信應(yīng)用。即使以軟件形式存在,它仍會(huì)像硬件模塊那樣呈現(xiàn)給用戶空間。該可信應(yīng)用通過共享動(dòng)態(tài)庫(kù)進(jìn)行訪問,這個(gè)共享對(duì)象充當(dāng)“橋梁”角色,將密碼學(xué)請(qǐng)求轉(zhuǎn)換為 OP-TEE 調(diào)用。

~# 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)

總結(jié)

OP-TEE 為 Arm 平臺(tái)上的 Linux 系統(tǒng)提供了一個(gè)可信計(jì)算單元,不僅能夠保護(hù)數(shù)據(jù)安全,同時(shí)也是部分行業(yè)的安全規(guī)范需求。在 Toradex 的軟硬件生態(tài)中,用戶可以輕松使用該功能。

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

NXP iMX8MM 通過本地服務(wù)器更新 BSP 鏡像

NXP iMX8MM ARM 平臺(tái) Weston RDP 遠(yuǎn)程桌面部署測(cè)試

基于 NXP iMX8MP 平臺(tái)測(cè)試 CODESYS TargetVisu

通過 Docker 部署測(cè)試 CODESYS PLC示例

Yocto layer 使用 TI AM62 安全啟動(dòng)功能