前面聊了许多厂商的TEE实现,当然少不了Google!
目前各个厂商通常会在此ARM TrustZone基础上各自实现自己的TEE OS系统,对Rich OS的接口、改动也不一致。比如说高通芯片平台采用的是QSEE,MTK芯片平台则有好多家TEE厂商提供OS,这造成了开发成本的上升以及软件系统的碎片化等问题。而Trusty OS就是Google针对这些问题提出的解决方案。
可信任 (Trusty) 是一套支持可信任执行环境的软件组件(TEE)。TEE 可在移动设备运行。Trusty 包括几个部分:
看看Google是怎么介绍自己的TEE的:
任何 TEE OS都可以用来实现 TEE 。换言之, TEE 是一个规范。具体的实现可以不同。TEE所运行的处理器通常是系统中一个独立的处理器,或者是主处理器的一个虚拟化实例。TEE 处理器利用硬件支持的内存和 I/O 保护机制,实现和系统其他部分的隔离。
现代移动设备中,TEE 处理器方式已经被广泛使用。一般而言,移动设备中的主处理器被认为是“不安全的 (untrusted) ”,并且不能访问某些特定的内存、硬件寄存器、OTP/Fuse等。OTP/Fuse 硬件组件一般可以用于保存设备相关的加密密钥等信息)。运行在主处理器上面的软件把需要访问秘密数据的任何操作都委托给 TEE 处理器代理操作。
一个典型的并被广泛使用的 TEE 例子就是版权管理机制 DRM。主处理器只能看见加密后的内容;TEE 处理器则可以访问解密密文所需要的设备特定密钥。此模型提供了一个可防范软件攻击的高级别安全保护机制。
除此以外,还有许多利用了 TEE 的场景案例:
· 移动支付 / mobile payments
· 银行安全 / secure banking
· 磁盘加密 / full-disk encryption
· 多级授权 / multi-factor authentication
· 重置保护 / device reset protection
· 无线显示 / wireless display, screen cast
· 安全密码 / secure PIN
· 指纹识别 / fingerprint recognition
· 木马检测 / malware detection
Trusty 提供API, 可用于两类应用程序的开发:
· 运行在 TEE 处理器的可信任应用程序或服务
· 普通/未信任应用程序,其运行在主处理器并且利用 TEE 处理器提供的服务
运行在主处理器的程序利用 Trusty API 连接受信任的应用程序以交换任意信息,仿佛通过基于 IP 的网络服务一样。应用程序自己定义信息交换的格式和语法。信息的可靠传输是通过 Trusty 基础架构来保证的,该信息传输是完全异步的。
受信任程序在 TEE 操作系统内核中以隔离的进程方式运行。每个进程运行在自身的虚拟内存沙盒中,该沙盒利用 TEE 处理器的 MMU 机制实现。内核被一个受保护的时钟节拍器驱动, 采用基于优先级的,循环算法调度机制。在当前的安卓 Trusty 实现中,所有进程共享同一优先级。
所有 Trusty 应用程序都是单线程。目前不支持多线程。 Trusty 应用程序一旦被加载,则仅初始化一次并常驻内存,直到系统再次重启。 Trusty 应用程序不支持动态加载和动态卸载。 Trusty 应用程序被设计成事件驱动型的服务器模式(event-driven server),它等待来自其他 TEE 处理器程序或者主处理器程序的命令。受信任程序也可以被设计成其他服务器程序的客户端。
当前所有Trusty 程序都是由同一组织开发并同 Trusty 内核映像进行打包,产生一个完整的签名软件映像。在开机的时候,bootloader 会进行签名验证。目前 Trusty 尚不支持第三方开发应用程序。
尽管 Trusty OS 支持新应用程序的开发,但是需要极度小心此类开发。每个新应用程序都将增大系统受信任计算环境 (Trusted Computing Base) 的区域。受信任程序可以访问设备秘密信息并且执行相关的计算和数据传输。
之前TEE文章如下: