《手机安全和可信应用开发指南 TrustZone与OP-TEE技术详解》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:帅峰云,黄腾,宋洋编著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2018
  • ISBN:9787111609568
  • 页数:348 页
图书介绍: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的可信应用程序和安全驱动软件。

第一篇 基础技术篇 2

第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技术 6

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

第二篇 系统集成篇 34

第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章 安全引导功能及AT F的启动过程 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内核篇 130

第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-T EE的系统调用 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

第四篇 应用开发篇 250

第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