"); //-->
By Toradex 胡珊逢
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 文件系统是,例如 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-imageOP-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 的软硬件生态中,用户可以轻松使用该功能。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。