专栏首页安智客Trusty TEE参考信息

Trusty TEE参考信息

Trusty是一套软件组件集合, 它支持实现移动设备上的可信任执行环境(TEE).Trusty包含有:

♣ 基于处理器架构的操作系统(Trusty OS).

♣ 基于TEE实现的驱动, 该驱动方便android kernel(linux)来同运行在该系统上的应用进行通讯.

♣ 基于软件的库组合, 它将提供给android系统软件通过kernel驱动同该系统上的应用进行通讯.

注意: Trusty/Trusty API会由管理者进行修改.

Trusty API的相关信息, 请参考API Reference

[Tips: trusty是android推荐的TEE实现方案.]

任何TEE系统(不仅限于Trusty)都能用于TEE环境的实现.

TEE环境的处理器通常是一个系统中单独分离的微处理器, 或者是主处理器的虚拟实例.

TEE处理器同系统中的其他部分隔离开来, 并且通过硬件的支持来实现对内存和I/O接口的保护.

TEE处理在现在的移动设备中非常重要, 设备上的主处理器被认为是"不可信任的", 并且被限制对 某些RAM的指定空间, 硬件寄存器 和 用以存储设备提供商保存在保险区间的加密数据(例如设备相关的密钥对) 进行访问.

主处理器上的软件在需要使用加密数据时, 均会通过TEE处理器代理完成.

android系统中, 对于该实现的最广泛的例子就是为保护内容的DRM framework提供服务.

TEE上的软件可以访问设备相关的密钥, 并使用该密钥进行保护内容的解码. 主处理器仅仅能够看到加密的内容, 这将对基于软件的攻击起到高级别的保护.

基于TEE的使用案例还有其他例子.

移动支付, 安全银行. 全局磁盘加密. 多步验证. 设备重置保护. 重播保护的存储. 无线显示("cast")受保护的内容. 安全密码和指纹验证过程都需要使用TEE. 同时它还可以进行间谍软件侦测.

[Tips: 一般来讲, 所有和密码/验证/敏感数据相关的操作, 都应该交由secure world进行处理.]

Trusty提供API来支持两种类型应用的开发:

♣ 运行在TEE处理器上的可信任应用/服务.

♣ 使用TEE处理器上提供服务的 正常/不可信的应用, 它将运行在主处理器上.

主处理器上软件可以使用Trusty API来同可信任应用进行通讯, 它们可以传递任意定义的消息.

该机制类似于基于IP的网络服务. 应用可以自己定义消息数据的格式/语意, 它可以是应用级别的协议.

底层的Trusty基本通讯功能将保证消息的可信任传输(以主处理器的驱动方式进行), 并且通讯是完全异步的.

可信任应用是以独立进程的方式在Trusty OS kernel上运行的. TEE处理器也会提供MMU功能, 这可以保证每个进程均运行在它自己的虚拟地址空间上.

TEE OS kernel将基于安全计时器对全部进程按照优先级顺序进行循环运行. 在当前Trusty实现中, 所有进程共享相同的优先级.

[Tips: 由于进程优先级相同, 所以运行在TEE中的进程必须仔细考虑处理时间/锁死等情况, 并尽量简化操作.]

Language and threading support

基于Trusty的应用可以用C/C++语言开发(C++支持有限), 并且可以访问一个较小的C库. 当前系统的main()函数并不接受参数. 系统调用过程由C库中的汇编代码实现, 所以可以通过名称来进行系统调用.

所有Trusty应用都是单线程的, Trusty用户空间不支持多线程功能.

Application structure

Trusty应用在载入时初始化单次, 并一直保留在系统中, 直到TEE处理器被重置. Trusty不支持动态的加载/卸载应用.

Trusted应用被编写以事件驱动的服务器形式, 它等待其他应用或者从主处理器上的其他应停用发送过来的请求命令. 同时它也可以作为其他可信任应用服务的客户端.

驱动事件的类型由API部分来描述, 并且有Trusty kernel来发送给对应的应用.

[Tips: TEE image将有bootloader在启动时一次初始化并运行. 这可以保证在image有效的情况下, TEE本身是安全的.]

Third-party Trusty applications

在当前情况下, 所有Trusty的应用均由设备提供商单独进行开发, 并将其和Trusty kernel镜像整合在一起. 该镜像将被签名, 并且由bootloader在启动过程中进行验证.

第三方的应用开发目前并不支持.

即使在Trusty系统允许新的开发者进行应用开发时, 开发者也必须非常注意安全问题, 并需要较多的开发经验.

每个新的应用将增加系统的可信任计算基础(TCB). 可信任应用可以访问设备的机密数据, 并且能够对其进行计算和数据传递操作.

当然基于TEE的应用开发可以带来广泛的机遇和改变, 由于TEE的定义限制, 这些应用在经过严格的攻击测试前是不能进行分发的. 通常情况下这类应用的运行应该由用户完全信任的数据证书来保证.

Downloading and building Trusty

可以在以下地址访问Android开源项目(AOSP)的Trusty实现:

https://android-review.googlesource.com/#/admin/projects/?filter=trusty

AOSP上的Trusty kernel 分支地址:

https://android.googlesource.com/kernel/common/+/android-trusty-3.10

https://android.googlesource.com/kernel/common/+/android-trusty-3.18

在已存在的android编译环境中使用以下方式编译Trusty:

$ repo init -u https://android.googlesource.com/trusty/manifest

$ repo sync

$ make -j24 generic-arm64

可以用过选择不同的编译目标来进行以上的编译:

device/*/*/project/*

其他TEE介绍

高通的可信执行环境---QSEE

Google的TEEOS----Trusty

关于open tee有如下几点事实

linaro公司及其op-tee介绍

TI公司M-Shield™移动安全技术

AMD芯片架构中TEE实现技术之PSP初探

Intel芯片架构中TEE的实现技术之SGX初探

MIPS架构上虚拟化TEE实现介绍

浅谈三星KNOX安全解决方案

比如openTEE实现中:

OpenTee协助设备提供商在arm系列CPU上实现完整的TEE-OS环境支持. 上图的绿色线框部分由OpenTee实现. 设备提供商基于tee_client/tee_os进行TEE相关应用的开发.

基于tee的android secure video path参考:

完成基于硬件的secure video path需要以下模块的共同支持:

♣ 按照android drm plugin标准实现对应的plugin模型(playready/widevine)-android side.

♣ 实现安全的TEE环境支持.

♣ video process unit可以支持clear/secure video decode/display. 基于android omx plugin标准实现(5.0/6.0?).

♣ 基于硬件的证书处理机制(某些运营商的证书会随设备出厂预装).

♣ HDCP支持.

本文分享自微信公众号 - 安智客(china_safer)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-02-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 再谈三星KNOX安全解决方案

    昨天谈到三星的KNOX,今天再谈谈三星KNOX安全解决方案,跟着白皮书来聊一聊! 昨天文章如下: 浅谈三星KNOX安全解决方案 ? KNOX白皮书,从5个方面...

    安智客
  • Google的TEEOS----Trusty

    前面聊了许多厂商的TEE实现,当然少不了Google! 目前各个厂商通常会在此ARM TrustZone基础上各自实现自己的TEE OS系统,对Rich OS的...

    安智客
  • Android 新特性之文件加密对TEE的要求

    昨天聊到Android新版本对于指纹开发的要求,很多朋友问我,Android新版本对于TEE有哪些具体要求,我们知道android后续版本只会更加强化安全的...

    安智客
  • Android开发笔记(五十一)通过Messenger实现进程间通信

    IPC是“Inter-Process Communication”的缩写,即进程间通信。Android为APP提供了多进程工作模式,这是因为多线程存在若干局...

    用户4464237
  • python下载百度音乐

    我把百度音乐的网页代码稍微分析了一下,如果要求不高,下载普通音质的歌曲是不需要登陆的(当然如果你用浏览器打开下载的话,普通音质也是要求登陆下载的)

    bear_fish
  • 如何用Junit5玩出参数化测试的新花样?

    这是之前一篇文章《用junit5编写一个类ZeroCode的测试框架》的续集。主要将在之前工作的基础上,围绕参数化测试展开。 框架主要设计点:

    Criss@陈磊
  • Mathematica 谜中智:二十四点 全新计算

    1. 一副扑克牌中抽去大小王剩下52 张,随后取4张数字牌,每张扑克牌代表一个数字,数值范围从1到13,其中 Jack (J)、Queen (Q) 和 King...

    WolframChina
  • Android实现扫描和生成二维码

    本文实例为大家分享了Android实现扫描和生成二维码的具体代码,供大家参考,具体内容如下

    砸漏
  • 身份证OCR识别SDK集成到APP

    随着互联网金融的的发展,越来越多的互联网金融公司都推出了自己的金融APP,这些APP都涉及到个人身份证信息的输入认证,如果手动去输入身份证号码和姓名,速度非常慢...

    ocr识别算法专家
  • paddlepaddle如何预加载embedding向量

    使用小批量数据时,模型容易过拟合,所以需要对全量数据进行处理,我是用的是word2vec训练的词向量. 那么训练好对词向量如何加载呢?

    Gxjun

扫码关注云+社区

领取腾讯云代金券