OP-TEE(Open Source Project Trusted Execution Environment)主要是为用户提供了一种安全存储的机制,通过硬件对被保护的数据进行加密存储,因此可以使用该机制来保存敏感数据、密钥等信息。在进行对应操作时,设备会进入到被称为TEE(Trusted Execution Environment)的环境下,和正常运行时的操作系统隔离开。隔离的实现是通过Arm芯片硬件(Arm TrustZone技术)来完成的,所以安全性和可靠性是非常高的。
OP-TEE作为Trusted Execution Environment(TEE),是基于Arm TrustZone技术作为底层硬件隔离机制实现的。在TEE规范中,我们通常使用的操作系统,比如Linux,Android等,都属于non-secure OS,也可被称作REE(Rich Execution Environment),与TEE相对应。TEE是被设计可以作为non-secure OS的一部分在Arm芯片上运行的,以英创公司的Linux主板为例,这就相当于在主板的non-secure Linux中运行了一个OP-TEE OS,而OP-TEE OS就专门负责安全性要求的操作。
为了保证安全性,通过Arm TrustZone技术的隔离机制,OP-TEE对REE的系统和应用是不可访问的。因此在REE中是无法获取到OP-TEE保存的数据的,举一个简单例子,手机中的指纹或者面容解锁就会用到这一项技术,REE中的应用无法获得指纹或者面容数据,只能得到一个是否验证通过的结果,具体的验证过程都是在TEE中完成的。
通过上文简单的介绍,可以看出REE和TEE之间是需要交互的。OP-TEE提供了CA/TA这种调用机制,因此实际应用中程序需要分为CA和TA两部分。CA(client application)是运行在REE中的程序,也就是通常运行的普通业务代码,而TA(trusted application)是运行在TEE中的,实现了具体需要在TEE中执行的操作。OP-TEE为TA提供了专用的TEE Internal Core API来实现具体的功能,为CA提供了TEE client API来与TA通信,获取对应的安全服务。对于TEE Internal Core API和TEE client API官网有详细的介绍和说明,感兴趣的客户可以点击链接查看。CA/TA的具体软件架构可以参考下图:
我们通过OP-TEE提供的一个简单例程hello_world来看一下实际应用中是如何实现OP-TEE功能的。首先看例程的目录结构,如下图:
可以看到有host和ta两个目录,其中host中就是CA部分的代码,而ta目录就是TA部分的代码。CA部分其实就是正常运行在Linux系统中的代码,当遇到需要TEE相关功能时,就可以通过TEE client API来与TA通讯,并获取对应的安全服务。例程在这里是直接发起了TEE相关的请求。CA编译后会生成一个在Linux系统下可执行的二进制文件,可以拷贝到主板的任意目录下。
TA通过TEE Internal Core API来实现在TEE中具体的操作,所以根据需求不同,所实现功能也会不同,例程在这里只是简单的打印了提示信息,表示成功调用TA并进入到了TEE中。TA通过编译会生成一个只能在TEE中执行的.ta文件,需要拷贝到主板的/lib/optee_armtz/目录中。
在主板中可以直接运行CA生成的二进制文件,当CA调用TEE client API与TA通讯时,系统就会寻找到对应的.ta文件,并进入到TEE中执行。运行结果如下图:
这里只是简单介绍了一下OP-TEE的基础概念,并表明英创Linux主板可以支持OP-TEE的运行。如果有感兴趣的客户,欢迎和英创的工程师联系,获取更加详细的信息。