首页>参考读物>计算机科学与技术>安全

手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解
作者 : 帅峰云 黄腾 宋洋 编著
出版日期 : 2018-09-30
ISBN : 978-7-111-60956-8
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 361
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

TrustZone技术是一种提高ARM芯片安全性的技术,OP-TEE是基于ARM的TrustZone技术搭建的可信执行环境。两者的结合可为系统软件提供硬件级别的安全保护。
本书主要分为4篇,总计25章,第一篇介绍了TrustZone技术的背景、实现原理、系统基本框架以及OP-TEE开发环境的搭建;第二篇分析了OP-TEE在REE和TEE中各组件的作用和联系,为将OP-TEE集成到基于ARMv7/ARMv8处理器的开发平台打下基础;第三篇详细介绍OP-TEE内核的中断处理、进程管理和通信等主要功能的实现原理,使读者对TEE OS的架构设计有进一步的认识;第四篇介绍基于OP-TEE在加密、解密、安全存储、在线支付等方面的实际应用,以及如何开发基于OP-TEE的可信应用程序和安全驱动软件。
本书适合以ARM芯片为核心的手机或嵌入式系统功能与应用开发人员和技术支持人员,以及有志于研究和学习ARM芯片安全技术的大专院校学生。

图书特色

随着移动支付、身份识别等应用的普及,手机数据安全变得越发重要。本书针对用户关切,阐述如何使用TrustZone和TEE芯片级核心技术开发可信应用,保障手机数据安全
从硬件到软件详解TrustZone和OP-TEE技术的原理与实现,结合实际应用场景为读者提供直观的示例和源代码

图书前言

早在2014年,投资过Facebook、Skype、Twitter等的风投公司创始人安德森就说:“移动正在吞噬这个世界”(mobile is eating the world)。这毫不夸张,全球范围内移动设备的数量已经超过了世界人口的总和。在如今信息化技术高速发展的时代,人们的生活越来越离不开智能手机,越来越多的业务从原先复杂的流程演变到现在只需要简单地在手机上按几个按键。技术是一把双刃剑,总能给人带来难以想象的便利,但便利总是伴随着用户隐私的泄漏、身份认证的滥用等一系列的安全风险。据著名安全漏洞报告机构FreeBuf 2017年度移动应用程序安全漏洞与数据泄漏状况报告指出,多达88%的金融类App存在内存敏感数据泄漏问题,娱乐类移动应用程序更是安全漏洞的重灾区,社交类App被仿冒的概率比其他类别平均高出10倍以上。如何保障移动设备的安全,提高安全认证程序的可靠性,一直是近几年的热门话题。
由嵌入式处理器最大的设计商ARM公司提出的硬件虚拟化扩展技术TrustZone,发展到现在已经有十余年的光景,如今已成为智能手机平台不可或缺的部分。从Android 7.0开始,谷歌就明确表示,Android设备上有关生物特征(指纹、虹膜等)识别的方案一定要基于可信执行环境(Trust Execution Environment,TEE)来实现。TEE就是基于TrustZone技术建立的具有更高安全级别的可信执行环境,运行在TEE环境下的应用称为可信应用程序(Trusted Application,TA)。随着TEE可信应用开发的API的普及,国内越来越多的手机厂商开始集成TEE以及相关的可信应用。TEE环境的提供商也越来越多,从先前国外的Trustonic TEE、高通QSEE到现在国内的豆荚、华为、瓶钵等,可以说TEE的技术开发门槛在降低,应用热度在提高。在众多TEE产品方案中,有一个优秀的开源方案逐渐进入人们的视野,那就是OP-TEE。OP-TEE(Open Platform Trusted Execution Environment)由ST-Ericsson创建,由STMicroelectronics维护,2014年ARM的开源社区Linaro将OP-TEE方案开源。截至目前,OP-TEE一直是Linaro社区在维护的核心安全项目之一。目前看来,进入TEE领域最好的方式就是学习成熟的OP-TEE方案。作者便是在学习OP-TEE的过程中完成了本书,旨在为后继的入门者扫除一些障碍。
本书组织结构
本书将采取由浅入深的方式介绍TrustZone技术的原理、OP-TEE的整体架构及其主要功能模块的原理,同时介绍如何基于OP-TEE进行可信应用、客户端应用(Client Application,CA)、安全驱动等功能的开发。
本书主要分为四篇,总计25章,各篇的主要内容分别如下。
第一篇,基础技术篇(第1章~第4章),包含TrustZone技术的背景和实现原理、系统基本框架以及OP-TEE环境的搭建。
第二篇,系统集成篇(第5章~第9章),分析OP-TEE在REE和TEE中各个组件的作用和联系,对于有一定嵌入式以及Linux/Android开发经验的读者,该篇实质上给将OP-TEE集成到基于ARMv7/ARMv8处理器的开发平台打下基础。
第三篇,OP-TEE内核篇(第10章~第17章),包含OP-TEE内核的中断处理、线程管理和通信等主要功能的实现原理,使读者对TEE OS的架构设计有进一步认识。
第四篇,应用开发篇(第18章~第25章),介绍基于OP-TEE在加密、解密、安全存储等方面的实际应用,以及如何开发基于OP-TEE的可信应用程序。如果对OP-TEE有一定了解的读者希望通过实践开发来了解TEE的工作原理,可以直接从应用开发篇学习。
OP-TEE的代码量远没有Linux内核大,但其涉及的设计之复杂、模块之丰富也不是本书能完全涵盖的。我们的初衷是希望通过本书对重要模块的代码和流程进行分析,使读者对OP-TEE的架构有整体的认识,之后看到其他部分也能做到举一反三。
本书的主要代码均引用自GitHub上OP-TEE开源项目的源代码(链接:https://github.com/OP-TEE/optee_os),作者在翻译了一些代码英文注释的基础上根据自己的理解对部分代码补充了更多的注释。如果读者对书中代码的中文注释有疑问,可参考上述链接中的原始代码和注释。另外,OP-TEE也有详细的文档资料(https://github.com/OP-TEE/optee_os/tree/master/documentation ),强烈建议英文基础好的读者结合本书和官方文档来学习。如发现本书有纰漏和错误,或者需要改进之处,希望读者不吝指出。
本书特色
俗话说,基础打不牢,学问攀不高。本书采取自下而上的方式从硬件的角度介绍了TrustZone技术,并结合源代码逐步剖析了基于TrustZone技术的OP-TEE实现。在技术深度上,本书从入门者的角度出发由浅入深,从最基础的开发环境的搭建到最终的OP-TEE OS的内部实现都进行了介绍;从内容易读性上来讲,本书提供了基础的示例代码和各种算法的使用示例,并给出了所有示例的源代码链接及操作的实验步骤。相信读者通过边学习边实践的方式阅读完本书后,能够掌握TrustZone技术的基础原理和使用OP-TEE进行实际的应用开发。
由于任何TEE方案的源代码都属于芯片厂商的商业机密,外界无法一览各TEE方案的实现原理,且TrustZone也是最近几年才被正式商用的,所以网上的资料较少。本书是作者基于多年的工作积累并对实际工作过程中遇见的问题进行整理后形成的。
本书读者对象
手机、嵌入式系统和芯片开发者及技术支持人员;
手机和嵌入式系统安全与可信应用(支付系统、多媒体及身份识别等)开发人员;
相关专业安全技术研究者和大专院校学生;
广大关心安全技术的爱好者。

上架指导

计算机\安全

封底文字

万物互联与人工智能时代,安全变得越来越关键。TEE提供了自底向上的,由点及面的安全能力。TEE也从一个新兴的安全技术逐渐转变成一个得到广泛认可与普及的通用安全技术。在TEE高速发展的几年时间涌现出了许多优秀的开源TEE项目,其中OP-TEE无疑是佼佼者。本书以OP-TEE为例,较为全面地介绍TEE的相关技术原理与实践经验,是一本难得的TEE入门级书籍,感谢作者的付出和坚持。
—— 孟庆洋 原北京豆荚科技有限公司 CEO&CTO
随着移动互联网的发展,移动终端已变成互联网金融、内容分发的重要载体,在与黑客不断对抗升级的过程中,TrustZone技术已担当起移动终端重要安全堡垒的角色。OP-TEE则是一款经典的开源trustos。本书从TrustZone架构开始引出,结合对OP-TEE深入浅出的详细分析,可以让读者快速地对TrustZone有一个非常清晰的理解。该书比较适合初、中级安全从业者阅读。
—— 黄冕 互联网金融身份认证联盟副秘书长
信息安全是现代社会的所有参与者必须考虑和解决的问题。作为信息终端的提供方和使用者,信息安全的保证尤为重要。Linaro为此提供了完全开源开放的安全运行环境OP-TEE。本书从理论到实践系统地阐述了OP-TEE技术和应用,从硬件到软件全面介绍了TrustZone和TEE整个安全体系。无论对于手机安全应用的开发者,还是嵌入式安全系统的研制者都是极好的参考。感谢作者为大家奉献了一本专业的技术参考书。
—— 王子亮 Linaro大中华区技术总监
现行的移动终端设备及IoT设备越来越多地需要引入TEE来加强安全能力,从而保障支付、指纹、人脸识别等用户私有数据的私密性和安全性。本书是一部带你进入TEE的入门级书籍,如果你目前正要开展TEE相关的研究或工作,它可以一步步地带你熟悉并理解开源OP-TEE项目的实现机制及应用方法,为你现在的安全项目带来实际有意义的参考。
—— 尉鲁飞 阿里云飞天七十九部 安全专家

推荐序

近年来随着指纹支付的盛行,如支付宝、微信支付等,可信执行环境(Trusted Execution Environment,TEE)被广泛应用在手机、平板电脑等移动终端设备中。尤其是近年来谷歌对系统安全问题越来越重视,可信执行环境已成为谷歌提升系统安全性的重要技术之一,包含为人熟知的keymaster、gatekeeper等,未来在Android P上还会引入基于TUI(Trusted User Interface)衍生的Confirmation UI,这将会为使用者提供更好的安全体验。
可信执行环境是一个典型的软硬件协同合作的概念,基于ARM的TrustZone技术为系统提供资源的物理隔离,将系统执行环境区隔为安全区域和非安全区域。开发者通过使用安全操作系统(secure OS)提供的API开发更多的可信应用来实现特定的安全功能。系统的安全是环环相扣的信任链,从设备开机的安全引导到安全操作系统的安全性验证,一直到软件开发者开发的软件安全性验证,每层相扣,而可信执行环境为可信应用提供了一个基础且可信任的执行环境。
未来TEE的发展方向是多元的,TEE的应用也会进入更多的产业,除了目前大热的指纹识别之外,系统也会引入更多的生物识别技术,如虹膜与人脸识别,从摄像头获取图像到识别演算的整个过程都会在TEE中完成。此外TUI也是重要的方向之一,使用者如何确认所见即所支付,确认的支付金额或转账账号不会被别人攻击或修改,都是相当重要的安全需求。除了移动终端设备之外,车载系统和IoT设备也都有对应的安全需求,因此在可遇见的未来,TEE将会被广泛应用到不同领域、不同的电子设备中。
此外,安全应用的开发者如何将安全应用广泛部署到不同的设备中,以及如何安全升级它们也相当重要。当发现了软件漏洞,如何第一时间更新安全应用并避免版本回滚的攻击,是系统安全的一个重要议题,目前商用TEE的生态、安全应用的签名密钥都掌握在设备制造商手中,而安全应用的独立在线下发和更新,将是未来的重要技术发展方向。
机缘巧合,我认识峰云已经有相当久的时间了,他对TEE的了解相当深入,也相当用心地完成了该书,遇到有疑问与不理解的地方,他会想方设法地找出答案,他的专业与用心深受大家的肯定与赞赏。本书涵盖了TEE的硬件和软件知识,通过OP-TEE开源项目的协助,读者可以通过理论与实践的结合,深入理解TEE的原理、设计与应用。期望通过本书的出版,能够让更多人了解与接触TEE的相关知识,进而发现更多的应用场景,享受更多的安全服务,让未来的生活在因为科技更方便的同时,使用者的隐私与安全也能得到保护。

邱国政(Koshi)
Trustonic中国OEM经理

图书目录

推荐序
前言
致谢
第一篇 基础技术篇
第1章 可信执行环境 2
1.1 系统存在的安全问题 2
1.2 TEE如何保护数据安全 2
1.3 现有TEE解决方案 3
1.3.1 智能手机领域的TEE 4
1.3.2 智能电视领域的TEE 4
1.3.3 IoT领域及其他领域的TEE 5
1.4 为什么选择OP-TEE 5
第2章 ARM的TrustZone技术
2.1 TrustZone技术 6
2.1.1 片上系统硬件框架 6
2.1.2 ARMv7架构的TrustZone技术 7
2.1.3 ARMv8架构的TrustZone技术 8
2.2 ARM安全扩展组件 8
2.2.1 AXI总线上安全状态位的扩展 9
2.2.2 AXI-to-APB桥的作用 9
2.2.3 TrustZone地址空间控制组件 9
2.2.4 TrustZone内存适配器组件 10
2.2.5 TrustZone保护控制器组件 11
2.2.6 TrustZone中断控制器组件 12
2.2.7 Cache和MMU的扩展 12
2.3 TrustZone技术对资源隔离的实现 13
2.3.1 中断源的隔离 13
2.3.2 片上RAM和片上ROM的隔离 13
2.3.3 片外DRAM的隔离 13
2.3.4 外围设备的隔离 14
2.4 小结 14
第3章 ARM可信固件 15
3.1 为什么使用ATF 15
3.2 ATF的主要功能 15
3.3 ATF与TEE的关系 15
3.4 小结 16
第4章 OP-TEE运行环境的搭建及编译 17
4.1 获取OP-TEE代码并搭建运行环境 17
4.1.1 OP-TEE开发环境的搭建 17
4.1.2 获取OP-TEE的源代码 17
4.1.3 获取编译OP-TEE的toolchain 18
4.1.4 编译QEMU 19
4.1.5 运行OP-TEE 19
4.1.6 运行xtest和optee_example_hello_world 19
4.2 运行CA和TA示例 19
4.2.1 示例代码的获取和集成 20
4.2.2 目录和文件创建 21
4.2.3 CA端代码的修改 22
4.2.4 TA端代码的修改 22
4.2.5 TA和CA在OP-TEE的集成 22
4.3 OP-TEE源代码结构 24
4.4 OP-TEE编译 25
4.4.1 编译目标的依赖关系 25
4.4.2 bios.bin镜像的生成过程 27
4.4.3 run-only目标的执行 28
4.5 小结 32
第二篇 系统集成篇
第5章 QEMU运行OP-TEE的启动过程 34
5.1 bios.bin的入口函数 34
5.2 OP-TEE镜像的加载和启动 36
5.3 Linux内核镜像的加载和启动 37
5.4 rootfs的挂载 38
5.5 OP-TEE驱动的启动 38
5.6 tee_supplicant的启动 39
5.7 小结 39
第6章 安全引导功能及ATF的启动过程 40
6.1 安全引导的作用 40
6.2 安全引导的原理 40
6.2.1 ARMv7安全引导的过程 41
6.2.2 ARMv8安全引导的过程 42
6.3 ATF的启动过程 43
6.3.1 ATF中bl1的启动 44
6.3.2 ATF中bl2的启动 49
6.3.3 ATF中bl31的启动 54
6.3.4 ATF中bl32的启动 57
6.3.5 ATF启动过程小结 59
6.4 小结 59
第7章 OP-TEE OS的启动过程 60
7.1 OP-TEE镜像启动过程 60
7.1.1 OP-TEE OS的入口函数 60
7.1.2 OP-TEE的内核初始化过程 60
7.1.3 OP-TEE服务项的启动 67
7.1.4 OP-TEE驱动的挂载 69
7.2 ARM64位与ARM32位OP-TEE启动过程的差异 69
7.3 小结 71
第8章 OP-TEE在REE侧的上层软件 72
8.1 OP-TEE的软件框架 72
8.2 REE侧libteec库提供的接口 73
8.2.1 libteec库提供的接口说明 73
8.2.2 CA调用libteec库中接口的流程 84
8.3 REE侧的守护进程—tee_supplicant 84
8.3.1 tee_supplicant编译生成和自启动 84
8.3.2 tee_supplicant入口函数 85
8.3.3 tee_supplicant存放RPC请求的结构体 87
8.3.4 tee_supplicant中的无限循环 87
8.3.5 tee_supplicant获取TA的RPC请求 89
8.3.6 TA RPC请求的解析 89
8.3.7 RPC请求的处理 90
8.3.8 回复RPC请求 90
8.4 各种RPC请求的处理 91
8.4.1 加载TA镜像 91
8.4.2 操作REE侧的文件系统 92
8.4.3 操作RPMB 93
8.4.4 分配共享内存 93
8.4.5 释放共享内存 94
8.4.6 记录程序执行效率 95
8.4.7 网络套接字操作 97
8.5 小结 97
第9章 REE侧OP-TEE的驱动 98
9.1 OP-TEE驱动模块的编译保存 98
9.2 REE侧OP-TEE驱动的加载 99
9.2.1 设备号和class的初始化 100
9.2.2 optee_driver_init函数 101
9.2.3 挂载驱动的probe操作 101
9.2.4 获取切换到Monitor模式或EL3的接口 103
9.2.5 驱动版本和API版本校验 105
9.2.6 判定OP-TEE是否预留共享内存空间 106
9.2.7 配置驱动与OP-TEE之间的共享内存 106
9.2.8 分配和设置tee0和teepriv0的设备信息结构体变量 109
9.2.9 tee0和teepriv0设备的注册 111
9.2.10 请求队列的初始化 112
9.2.11 使能TEE中共享内存的缓存 112
9.2.12 OP-TEE驱动挂载的总结 113
9.3 REE侧用户空间对驱动的调用过程 113
9.4 OP-TEE驱动中重要的结构体变量 114
9.4.1 OP-TEE驱动的file_operation结构体变量tee_fops 114
9.4.2 tee0设备的tee_driver_ops结构体变量optee_ops 114
9.4.3 teepriv0设备的操作结构体变量optee_supp_ops 115
9.4.4 共享驱动缓存操作变量tee_shm_dma_buf_ops 115
9.5 OP-TEE驱动与OP-TEE之间共享内存的注册和分配 116
9.6 libteec库中的接口在驱动中的实现 117
9.6.1 libteec库中的open操作 117
9.6.2 libteec库中的release操作 118
9.6.3 libteec执行get_version操作 120
9.6.4 libteec库中的open session操作 120
9.6.5 libteec库中的invoke操作 122
9.7 tee_supplicant接口在驱动中的实现 123
9.7.1 接收OP-TEE的RPC请求 124
9.7.2 获取OP-TEE的RPC请求 126
9.7.3 OP-TEE的RPC请求的返回 127
9.8 小结 128
第三篇 OP-TEE内核篇
第10章 ARM核安全态和非安全态间的切换 130
10.1 ARMv7基本知识 130
10.1.1 ARMv7运行模式扩展 130
10.1.2 安全状态位扩展 130
10.1.3 重要寄存器 131
10.1.4 安全监控模式调用的汇编指令 132
10.2 Monitor模式下的处理过程 132
10.2.1 Monitor模式对安全监控模式调用的处理 133
10.2.2 正常世界状态中触发安全监控模式调用的处理过程 134
10.2.3 安全世界状态中触发安全监控模式调用的处理过程 136
10.3 ARMv8基本知识 136
10.3.1 ARM核运行模式的新定义 137
10.3.2 ARMv8 安全状态位扩展 137
10.3.3 寄存器资源 137
10.3.4 安全监控模式调用汇编指令 138
10.4 EL3的处理过程 140
10.4.1 ATF中EL3异常向量表的注册 140
10.4.2 EL3处理安全监控模式调用的流程 140
10.4.3 安全世界状态中触发安全监控模式调用的处理过程 141
10.4.4 正常世界状态中触发安全监控模式调用的处理过程 142
10.4.5 opteed_smc_handler函数 143
10.5 小结 145
第11章 OP-TEE对安全监控模式调用的处理 146
11.1 OP-TEE的线程向量表 146
11.2 ARMv7中Monitor模式对安全监控模式调用的处理 146
11.3 ARMv8中EL3处理安全监控模式调用的实现 147
11.4 OP-TEE对快速安全监控模式调用的处理 148
11.5 OP-TEE对标准安全监控模式调用的处理 150
11.5.1 OP-TEE对RPC请求返回操作的处理 152
11.5.2 OP-TEE对libteec库触发的安全监控模式调用的处理 152
11.6 小结 157
第12章 OP-TEE对中断的处理 158
12.1 系统的中断处理 158
12.2 中断控制器 158
12.2.1 GIC 寄存器 159
12.2.2 ARMv7 SCR寄存器的设定 160
12.2.3 ARMv8 SCR寄存器的设定 160
12.2.4 GICv2架构 163
12.2.5 GICv3架构 163
12.3 异常向量表配置 164
12.3.1 ARMv7中Monitor模式的异常向量表 165
12.3.2 ARMv8中EL3阶段的异常向量表 165
12.3.3 OP-TEE异常向量的配置 167
12.4 OP-TEE的线程向量表 170
12.5 全局handle变量的初始化 170
12.6 ARMv7 Monitor对FIQ事件的处理 172
12.7 ARMv8 EL3阶段对FIQ事件的处理 173
12.8 OP-TEE对FIQ事件的处理 176
12.9 OP-TEE对IRQ事件的处理 177
12.10 小结 180
第13章 OP-TEE对TA操作的各种实现 181
13.1 创建会话在OP-TEE中的实现 181
13.1.1 静态TA的创建会话操作 182
13.1.2 动态TA的创建会话操作 186
13.2 调用TA命令操作在OP-TEE中的实现 191
13.2.1 静态TA的调用命令操作的实现 193
13.2.2 动态TA的调用命令操作实现 194
13.3 关闭会话操作在OP-TEE中的实现 195
13.3.1 静态TA的关闭会话操作 197
13.3.2 动态TA的关闭会话操作 197
13.4 小结 197
第14章 OP-TEE的内存和缓存管理 198
14.1 物理内存和缓存数据的硬件安全保护 198
14.1.1 内存设备安全区域的隔离 198
14.1.2 MMU和缓存中数据的安全隔离 199
14.2 ARM核对内存的访问 200
14.2.1 ARM核获取内存数据的过程 200
14.2.2 获取缓存数据的过程 201
14.2.3 缓存和TLB中条目的一致性 203
14.3 OP-TEE对内存区域的管理 204
14.3.1 OP-TEE中内存区域的类型 204
14.3.2 内存区域编译设置 205
14.4 MMU的初始化和映射页表 206
14.4.1 MMU的初始化入口函数 206
14.4.2 物理地址到虚拟地址表的建立 208
14.4.3 MMU转换页表的创建 211
14.4.4 MMU寄存器配置 212
14.5 OP-TEE内存安全权限检查 213
14.6 系统的共享内存 214
14.6.1 共享内存的配置 215
14.6.2 OP-TEE驱动与OP-TEE之间的共享内存 215
14.6.3 OP-TEE内核空间与用户空间之间的共享内存 216
14.7 数据是否需要写入Cache 217
14.8 小结 218
第15章 OP-TEE中的线程管理 219
15.1 OP-TEE中的线程 219
15.2 线程状态切换 220
15.2.1 Free态到Active态的实现 220
15.2.2 Active态到Suspend态的实现 221
15.2.3 Suspend态到Active态的实现 222
15.2.4 Active态到Free态的实现 222
15.3 线程运行时的资源 223
15.3.1 线程数据结构体 223
15.3.2 OP-TEE分配的内核栈 224
15.3.3 线程运行于用户空间的资源 225
15.3.4 tee_ta_session结构体 226
15.4 线程运行时资源的使用关系 227
15.5 OP-TEE中线程的调度 228
15.6 线程的死锁 228
15.6.1 死锁的原理 229
15.6.2 防止死锁 229
15.7 小结 229
第16章 OP-TEE的系统调用 230
16.1 OP-TEE系统调用的作用 230
16.2 OP-TEE系统调用的实现 230
16.2.1 系统调用的整体流程 230
16.2.2 系统调用的定义 232
16.2.3 系统调用表tee_sv_syacall_table 232
16.3 小结 233
第17章 OP-TEE的IPC机制 234
17.1 IPC机制的作用 234
17.2 IPC机制的原理 234
17.3 IPC的实现 234
17.3.1 TA调用其他TA的实现 235
17.3.2 TA调用系统服务和安全驱动的实现 240
17.3.3 TA对密码学系统服务的调用实现 242
17.3.4 对SE功能模块进行操作的系统服务 246
17.3.5 加载TA镜像的系统服务 247
17.4 小结 247
第四篇 应用开发篇
第18章 TA镜像的签名和加载 250
18.1 TA镜像文件的编译和签名 250
18.1.1 TA镜像文件的编译 250
18.1.2 对TA镜像文件的签名 251
18.2 TA镜像的加载 253
18.2.1 REE侧获取TA镜像文件的内容 253
18.2.2 加载TA镜像的RPC请求 255
18.2.3 RPC请求的发送 256
18.2.4 读取TA镜像文件内容到共享内存 257
18.3 TA镜像合法性的验证 258
18.3.1 验证TA镜像合法性使用的RSA公钥的产生和获取 258
18.3.2 TA镜像文件合法性的检查 260
18.4 加载TA镜像到OP-TEE的用户空间 261
18.5 TA运行上下文的初始化 262
18.6 小结 263
第19章 OP-TEE中的密码学算法 264
19.1 算法使用示例 264
19.1.1 示例代码获取和集成 264
19.1.2 板级编译文件的修改 265
19.1.3 通用编译文件的修改 266
19.1.4 编译运行 267
19.2 OP-TEE中的SHA算法 267
19.2.1 TA中使用SHA算法的实现 267
19.2.2 SHA算法实现接口说明 268
19.3 OP-TEE中的AES算法 269
19.3.1 TA中使用AES算法的实现 269
19.3.2 AES算法实现接口说明 270
19.4 OP-TEE中的RSA算法 273
19.4.1 TA中使用RSA算法的实现 273
19.4.2 RSA算法实现接口说明 274
19.5 小结 277
第20章 OP-TEE的安全存储 278
20.1 安全存储简介 278
20.2 安全存储使用示例 278
20.2.1 示例代码获取和集成 279
20.2.2 板级编译文件的修改 280
20.2.3 通用编译文件的修改 280
20.2.4 编译运行 281
20.3 安全存储功能使用的密钥 281
20.3.1 安全存储密钥 282
20.3.2 可信应用的存储密钥 282
20.3.3 文件加密密钥 283
20.4 安全文件、dirf.db文件的数据格式和操作过程 284
20.4.1 dirf.db文件和安全文件的格式 285
20.4.2 安全存储功能中使用的重要结构体 286
20.4.3 安全存储中的文件节点组成 287
20.4.4 查询安全文件中的特定数据块 287
20.5 安全存储文件的创建 288
20.5.1 安全存储软件框架 288
20.5.2 dirf.db文件的创建 289
20.5.3 安全文件的创建 290
20.6 安全文件的打开操作 291
20.6.1 安全文件的打开 291
20.6.2 打开dirf.db文件并建立节点树 292
20.6.3 安全文件在/data/tee目录下的文件编号 294
20.6.4 打开特定安全文件 295
20.7 安全文件的读写操作 295
20.7.1 安全文件中数据的读取 295
20.7.2 安全文件中数据的写入 297
20.8 安全文件中数据的加解密 298
20.8.1 各种类型数据的组成及作用 298
20.8.2 元数据的加密 298
20.8.3 数据块区域的加密策略 299
20.9 小结 300
第21章 可信应用及客户端应用的开发 301
21.1 TA及CA的基本概念 301
21.2 GP标准 302
21.3 GP标准对TA属性的定义 302
21.4 GP标准定义的接口 303
21.4.1 GP定义的客户端接口 303
21.4.2 GP定义的内部接口 304
21.5 TA和CA的实现 308
21.5.1 建立CA和TA的目录结构 308
21.5.2 CA代码的实现 308
21.5.3 TA代码的实现 309
21.6 TA和CA的集成 309
21.6.1 CA和TA的Makefile的修改 309
21.6.2 OP-TEE中comm.mk和xxx.mk文件的修改 310
21.7 TA和CA的调试 310
21.8 TA和CA的使用 310
21.9 小结 311
第22章 安全驱动的开发 312
22.1 安全设备的硬件安全隔离 312
22.2 OP-TEE中安全驱动的框架 313
22.2.1 系统服务层 314
22.2.2 驱动层 314
22.2.3 驱动文件在源代码中的位置 314
22.3 安全驱动的开发过程和示例 315
22.3.1 示例代码获取和集成 315
22.3.2 驱动实现 316
22.3.3 添加系统服务 317
22.3.4 添加系统调用 317
22.3.5 测试使用的TA和CA 318
22.4 安全驱动示例的测试 319
22.5 小结 321
第23章 终端密钥在线下发系统 322
23.1 密钥在线下发系统的框架 322
23.2 密钥在线下发的数据包格式 323
23.3 密钥在线下发系统示例 324
23.3.1 示例代码获取和集成 324
23.3.2 板级编译文件的修改 325
23.3.3 通用编译文件的修改 325
23.3.4 编译运行 326
23.4 离线工具的使用 327
23.5 小结 327
第24章 基于OP-TEE的在线支付系统 328
24.1 在线支付系统的基本框架 328
24.2 可信通信通道 329
24.3 数据交互协议 329
24.3.1 数据头部区域 330
24.3.2 数据区域 330
24.3.3 电子签名区域 331
24.3.4 交互数据包的格式 331
24.4 在线支付系统示例的实现 331
24.4.1 第一次握手请求 332
24.4.2 第二次握手数据的解析 333
24.4.3 第三次握手请求 334
24.4.4 支付请求 334
24.4.5 支付反馈 335
24.5 示例的集成 336
24.5.1 示例代码的获取和集成 336
24.5.2 板级编译文件的修改 338
24.5.3 通用编译文件的修改 338
24.5.4 编译运行 339
24.5.5 示例支持的命令说明 339
24.5.6 服务器端工具 340
24.6 组包操作嵌入内核 340
24.7 支付系统与生物特征的结合 340
24.8 小结 341
第25章 TEE可信应用的使用领域 342
25.1 在线支付 342
25.2 数字版权保护 342
25.3 身份验证 343
25.4 其他领域 343
术语表 345

教学资源推荐
作者: 周学广 等
作者: [美]理查德 E. 布拉胡特(Richard E. Blahut)著
作者: 庞建民 陶红伟 刘晓楠 岳峰 编著
参考读物推荐
作者: [美] 布莱恩•罗素(Brian Russell) 德鲁•范•杜伦(Drew Van Duren) 著
作者: 沙梓社 吴航 著
作者: (英)Shakeel Ali;Tedi Heriyanto 著