手机安全和可信应用开发指南

admin 2022年8月28日16:06:22移动安全评论3 views7001字阅读23分20秒阅读模式

微信公众号:计算机与网络安全


手机安全和可信应用开发指南
(全文略)

本书采取由浅入深的方式介绍TrustZone技术的原理、OP-TEE的整体架构及其主要功能模块的原理,同时介绍如何基于OP-TEE进行可信应用、客户端应用(Client Application,CA)、安全驱动等功能的开发。
本书主要分为4篇,总计25章,第一篇,基础技术篇(第1章~第4章)介绍了TrustZone技术的背景、实现原理、系统基本框架以及OP-TEE开发环境的搭建;第二篇,系统集成篇(第5章~第9章)分析了OP-TEE在REE和TEE中各组件的作用和联系,为将OP-TEE集成到基于ARMv7/ARMv8处理器的开发平台打下基础;第三篇,OP-TEE内核篇(第10章~第17章)介绍OP-TEE内核的中断处理、线程管理和通信等主要功能的实现原理,使读者对TEEOS的架构设计有进一步的认识;第四篇,应用开发篇(第18~25章)介绍基于OP-TEE在加密、解密、安全存储、在线支付等方面的实际应用,以及如何开发基于OP-TEE的可信应用程序和安全驱动软件。
目录

前言
第一篇 基础技术篇
第1章 可信执行环境
1.1 系统存在的安全问题
1.2 TEE如何保护数据安全
1.3 现有TEE解决方案
1.3.1 智能手机领域的TEE
1.3.2 智能电视领域的TEE
1.3.3 IoT领域及其他领域的TEE
1.4 为什么选择OP-TEE
第2章 ARM的TrustZone技术
2.1 TrustZone技术
2.1.1 片上系统硬件框架
2.1.2 ARMv7架构的TrustZone技术
2.1.3 ARMv8架构的TrustZone技术
2.2 ARM安全扩展组件
2.2.1 AXI总线上安全状态位的扩展
2.2.2 AXI-to-APB桥的作用
2.2.3 TrustZone地址空间控制组件
2.2.4 TrustZone内存适配器组件
2.2.5 TrustZone保护控制器组件
2.2.6 TrustZone中断控制器组件
2.2.7 Cache和MMU的扩展
2.3 TrustZone技术对资源隔离的实现
2.3.1 中断源的隔离
2.3.2 片上RAM和片上ROM的隔离
2.3.3 片外DRAM的隔离
2.3.4 外围设备的隔离
2.4 小结
第3章 ARM可信固件
3.1 为什么使用ATF
3.2 ATF的主要功能
3.3 ATF与TEE的关系
3.4 小结
第4章 OP-TEE运行环境的搭建及编译
4.1 获取OP-TEE代码并搭建运行环境
4.1.1 OP-TEE开发环境的搭建
4.1.2 获取OP-TEE的源代码
4.1.3 获取编译OP-TEE的toolchain
4.1.4 编译QEMU
4.1.5 运行OP-TEE
4.1.6 运行xtest和optee_example_hello_world
4.2 运行CA和TA示例
4.2.1 示例代码的获取和集成
4.2.2 目录和文件创建
4.2.3 CA端代码的修改
4.2.4 TA端代码的修改
4.2.5 TA和CA在OP-TEE的集成
4.3 OP-TEE源代码结构
4.4 OP-TEE编译
4.4.1 编译目标的依赖关系
4.4.2 bios.bin镜像的生成过程
4.4.3 run-only目标的执行
4.5 小结
第二篇 系统集成篇
第5章 QEMU运行OP-TEE的启动过程
5.1 bios.bin的入口函数
5.2 OP-TEE镜像的加载和启动
5.3 Linux内核镜像的加载和启动
5.4 rootfs的挂载
5.5 OP-TEE驱动的启动
5.6 tee_supplicant的启动
5.7 小结
第6章 安全引导功能及ATF的启动过程
6.1 安全引导的作用
6.2 安全引导的原理
6.2.1 ARMv7安全引导的过程
6.2.2 ARMv8安全引导的过程
6.3 ATF的启动过程
6.3.1 ATF中bl1的启动
6.3.2 ATF中bl2的启动
6.3.3 ATF中bl31的启动
6.3.4 ATF中bl32的启动
6.3.5 ATF启动过程小结
6.4 小结
第7章 OP-TEE OS的启动过程
7.1 OP-TEE镜像启动过程
7.1.1 OP-TEE OS的入口函数
7.1.2 OP-TEE的内核初始化过程
7.1.3 OP-TEE服务项的启动
7.1.4 OP-TEE驱动的挂载
7.2 ARM64位与ARM32位OP-TEE启动过程的差异
7.3 小结
第8章 OP-TEE在REE侧的上层软件
8.1 OP-TEE的软件框架
8.2 REE侧libteec库提供的接口
8.2.1 libteec库提供的接口说明
8.2.2 CA调用libteec库中接口的流程
8.3 REE侧的守护进程——tee_supplicant
8.3.1 tee_supplicant编译生成和自启动
8.3.2 tee_supplicant入口函数
8.3.3 tee_supplicant存放RPC请求的结构体
8.3.4 tee_supplicant中的无限循环
8.3.5 tee_supplicant获取TA的RPC请求
8.3.6 TA RPC请求的解析
8.3.7 RPC请求的处理
8.3.8 回复RPC请求
8.4 各种RPC请求的处理
8.4.1 加载TA镜像
8.4.2 操作REE侧的文件系统
8.4.3 操作RPMB
8.4.4 分配共享内存
8.4.5 释放共享内存
8.4.6 记录程序执行效率
8.4.7 网络套接字操作
8.5 小结
第9章 REE侧OP-TEE的驱动
9.1 OP-TEE驱动模块的编译保存
9.2 REE侧OP-TEE驱动的加载
9.2.1 设备号和class的初始化
9.2.2 optee_driver_init函数
9.2.3 挂载驱动的probe操作
9.2.4 获取切换到Monitor模式或EL3的接口
9.2.5 驱动版本和API版本校验
9.2.6 判定OP-TEE是否预留共享内存空间
9.2.7 配置驱动与OP-TEE之间的共享内存
9.2.8 分配和设置tee0和teepriv0的设备信息结构体变量
9.2.9 tee0和teepriv0设备的注册
9.2.10 请求队列的初始化
9.2.11 使能TEE中共享内存的缓存
9.2.12 OP-TEE驱动挂载的总结
9.3 REE侧用户空间对驱动的调用过程
9.4 OP-TEE驱动中重要的结构体变量
9.4.1 OP-TEE驱动的file_operation结构体变量tee_fops
9.4.2 tee0设备的tee_driver_ops结构体变量optee_ops
9.4.3 teepriv0设备的操作结构体变量optee_supp_ops
9.4.4 共享驱动缓存操作变量tee_shm_dma_buf_ops
9.5 OP-TEE驱动与OP-TEE之间共享内存的注册和分配
9.6 libteec库中的接口在驱动中的实现
9.6.1 libteec库中的open操作
9.6.2 libteec库中的release操作
9.6.3 libteec执行get_version操作
9.6.4 libteec库中的open session操作
9.6.5 libteec库中的invoke操作
9.7 tee_supplicant接口在驱动中的实现
9.7.1 接收OP-TEE的RPC请求
9.7.2 获取OP-TEE的RPC请求
9.7.3 OP-TEE的RPC请求的返回
9.8 小结
第三篇 OP-TEE内核篇
第10章 ARM核安全态和非安全态间的切换
10.1 ARMv7基本知识
10.1.1 ARMv7运行模式扩展
10.1.2 安全状态位扩展
10.1.3 重要寄存器
10.1.4 安全监控模式调用的汇编指令
10.2 Monitor模式下的处理过程
10.2.1 Monitor模式对安全监控模式调用的处理
10.2.2 正常世界状态中触发安全监控模式调用的处理过程
10.2.3 安全世界状态中触发安全监控模式调用的处理过程
10.3 ARMv8基本知识
10.3.1 ARM核运行模式的新定义
10.3.2 ARMv8安全状态位扩展
10.3.3 寄存器资源
10.3.4 安全监控模式调用汇编指令
10.4 EL3的处理过程
10.4.1 ATF中EL3异常向量表的注册
10.4.2 EL3处理安全监控模式调用的流程
10.4.3 安全世界状态中触发安全监控模式调用的处理过程
10.4.4 正常世界状态中触发安全监控模式调用的处理过程
10.4.5 opteed_smc_handler函数
10.5 小结
第11章 OP-TEE对安全监控模式调用的处理
11.1 OP-TEE的线程向量表
11.2 ARMv7中Monitor模式对安全监控模式调用的处理
11.3 ARMv8中EL3处理安全监控模式调用的实现
11.4 OP-TEE对快速安全监控模式调用的处理
11.5 OP-TEE对标准安全监控模式调用的处理
11.5.1 OP-TEE对RPC请求返回操作的处理
11.5.2 OP-TEE对libteec库触发的安全监控模式调用的处理
11.6 小结
第12章 OP-TEE对中断的处理
12.1 系统的中断处理
12.2 中断控制器
12.2.1 GIC寄存器
12.2.2 ARMv7 SCR寄存器的设定
12.2.3 ARMv8 SCR寄存器的设定
12.2.4 GICv2架构
12.2.5 GICv3架构
12.3 异常向量表配置
12.3.1 ARMv7中Monitor模式的异常向量表
12.3.2 ARMv8中EL3阶段的异常向量表
12.3.3 OP-TEE异常向量的配置
12.4 OP-TEE的线程向量表
12.5 全局handle变量的初始化
12.6 ARMv7 Monitor对FIQ事件的处理
12.7 ARMv8 EL3阶段对FIQ事件的处理
12.8 OP-TEE对FIQ事件的处理
12.9 OP-TEE对IRQ事件的处理
12.10 小结
第13章 OP-TEE对TA操作的各种实现
13.1 创建会话在OP-TEE中的实现
13.1.1 静态TA的创建会话操作
13.1.2 动态TA的创建会话操作
13.2 调用TA命令操作在OP-TEE中的实现
13.2.1 静态TA的调用命令操作的实现
13.2.2 动态TA的调用命令操作实现
13.3 关闭会话操作在OP-TEE中的实现
13.3.1 静态TA的关闭会话操作
13.3.2 动态TA的关闭会话操作
13.4 小结
第14章 OP-TEE的内存和缓存管理
14.1 物理内存和缓存数据的硬件安全保护
14.1.1 内存设备安全区域的隔离
14.1.2 MMU和缓存中数据的安全隔离
14.2 ARM核对内存的访问
14.2.1 ARM核获取内存数据的过程
14.2.2 获取缓存数据的过程
14.2.3 缓存和TLB中条目的一致性
14.3 OP-TEE对内存区域的管理
14.3.1 OP-TEE中内存区域的类型
14.3.2 内存区域编译设置
14.4 MMU的初始化和映射页表
14.4.1 MMU的初始化入口函数
14.4.2 物理地址到虚拟地址表的建立
14.4.3 MMU转换页表的创建
14.4.4 MMU寄存器配置
14.5 OP-TEE内存安全权限检查
14.6 系统的共享内存
14.6.1 共享内存的配置
14.6.2 OP-TEE驱动与OP-TEE之间的共享内存
14.6.3 OP-TEE内核空间与用户空间之间的共享内存
14.7 数据是否需要写入Cache
14.8 小结
第15章 OP-TEE中的线程管理
15.1 OP-TEE中的线程
15.2 线程状态切换
15.2.1 Free态到Active态的实现
15.2.2 Active态到Suspend态的实现
15.2.3 Suspend态到Active态的实现
15.2.4 Active态到Free态的实现
15.3 线程运行时的资源
15.3.1 线程数据结构体
15.3.2 OP-TEE分配的内核栈
15.3.3 线程运行于用户空间的资源
15.3.4 tee_ta_session结构体
15.4 线程运行时资源的使用关系
15.5 OP-TEE中线程的调度
15.6 线程的死锁
15.6.1 死锁的原理
15.6.2 防止死锁
15.7 小结
第16章 OP-TEE的系统调用
16.1 OP-TEE系统调用的作用
16.2 OP-TEE系统调用的实现
16.2.1 系统调用的整体流程
16.2.2 系统调用的定义
16.2.3 系统调用表tee_sv_syacall_table
16.3 小结
第17章 OP-TEE的IPC机制
17.1 IPC机制的作用
17.2 IPC机制的原理
17.3 IPC的实现
17.3.1 TA调用其他TA的实现
17.3.2 TA调用系统服务和安全驱动的实现
17.3.3 TA对密码学系统服务的调用实现
17.3.4 对SE功能模块进行操作的系统服务
17.3.5 加载TA镜像的系统服务
17.4 小结
第四篇 应用开发篇
第18章 TA镜像的签名和加载
18.1 TA镜像文件的编译和签名
18.1.1 TA镜像文件的编译
18.1.2 对TA镜像文件的签名
18.2 TA镜像的加载
18.2.1 REE侧获取TA镜像文件的内容
18.2.2 加载TA镜像的RPC请求
18.2.3 RPC请求的发送
18.2.4 读取TA镜像文件内容到共享内存
18.3 TA镜像合法性的验证
18.3.1 验证TA镜像合法性使用的RSA公钥的产生和获取
18.3.2 TA镜像文件合法性的检查
18.4 加载TA镜像到OP-TEE的用户空间
18.5 TA运行上下文的初始化
18.6 小结
第19章 OP-TEE中的密码学算法
19.1 算法使用示例
19.1.1 示例代码获取和集成
19.1.2 板级编译文件的修改
19.1.3 通用编译文件的修改
19.1.4 编译运行
19.2 OP-TEE中的SHA算法
19.2.1 TA中使用SHA算法的实现
19.2.2 SHA算法实现接口说明
19.3 OP-TEE中的AES算法
19.3.1 TA中使用AES算法的实现
19.3.2 AES算法实现接口说明
19.4 OP-TEE中的RSA算法
19.4.1 TA中使用RSA算法的实现
19.4.2 RSA算法实现接口说明
19.5 小结
第20章 OP-TEE的安全存储
20.1 安全存储简介
20.2 安全存储使用示例
20.2.1 示例代码获取和集成
20.2.2 板级编译文件的修改
20.2.3 通用编译文件的修改
20.2.4 编译运行
20.3 安全存储功能使用的密钥
20.3.1 安全存储密钥
20.3.2 可信应用的存储密钥
20.3.3 文件加密密钥
20.4 安全文件、dirf.db文件的数据格式和操作过程
20.4.1 dirf.db文件和安全文件的格式
20.4.2 安全存储功能中使用的重要结构体
20.4.3 安全存储中的文件节点组成
20.4.4 查询安全文件中的特定数据块
20.5 安全存储文件的创建
20.5.1 安全存储软件框架
20.5.2 dirf.db文件的创建
20.5.3 安全文件的创建
20.6 安全文件的打开操作
20.6.1 安全文件的打开
20.6.2 打开dirf.db文件并建立节点树
20.6.3 安全文件在/data/tee目录下的文件编号
20.6.4 打开特定安全文件
20.7 安全文件的读写操作
20.7.1 安全文件中数据的读取
20.7.2 安全文件中数据的写入
20.8 安全文件中数据的加解密
20.8.1 各种类型数据的组成及作用
20.8.2 元数据的加密
20.8.3 数据块区域的加密策略
20.9 小结
第21章 可信应用及客户端应用的开发
21.1 TA及CA的基本概念
21.2 GP标准
21.3 GP标准对TA属性的定义
21.4 GP标准定义的接口
21.4.1 GP定义的客户端接口
21.4.2 GP定义的内部接口
21.5 TA和CA的实现
21.5.1 建立CA和TA的目录结构
21.5.2 CA代码的实现
21.5.3 TA代码的实现
21.6 TA和CA的集成
21.6.1 CA和TA的Makefile的修改
21.6.2 OP-TEE中comm.mk和xxx.mk文件的修改
21.7 TA和CA的调试
21.8 TA和CA的使用
21.9 小结
第22章 安全驱动的开发
22.1 安全设备的硬件安全隔离
22.2 OP-TEE中安全驱动的框架
22.2.1 系统服务层
22.2.2 驱动层
22.2.3 驱动文件在源代码中的位置
22.3 安全驱动的开发过程和示例
22.3.1 示例代码获取和集成
22.3.2 驱动实现
22.3.3 添加系统服务
22.3.4 添加系统调用
22.3.5 测试使用的TA和CA
22.4 安全驱动示例的测试
22.5 小结
第23章 终端密钥在线下发系统
23.1 密钥在线下发系统的框架
23.2 密钥在线下发的数据包格式
23.3 密钥在线下发系统示例
23.3.1 示例代码获取和集成
23.3.2 板级编译文件的修改
23.3.3 通用编译文件的修改
23.3.4 编译运行
23.4 离线工具的使用
23.5 小结
第24章 基于OP-TEE的在线支付系统
24.1 在线支付系统的基本框架
24.2 可信通信通道
24.3 数据交互协议
24.3.1 数据头部区域
24.3.2 数据区域
24.3.3 电子签名区域
24.3.4 交互数据包的格式
24.4 在线支付系统示例的实现
24.4.1 第一次握手请求
24.4.2 第二次握手数据的解析
24.4.3 第三次握手请求
24.4.4 支付请求
24.4.5 支付反馈
24.5 示例的集成
24.5.1 示例代码的获取和集成
24.5.2 板级编译文件的修改
24.5.3 通用编译文件的修改
24.5.4 编译运行
24.5.5 示例支持的命令说明
24.5.6 服务器端工具
24.6 组包操作嵌入内核
24.7 支付系统与生物特征的结合
24.8 小结
第25章 TEE可信应用的使用领域
25.1 在线支付
25.2 数字版权保护
25.3 身份验证
25.4 其他领域
术语表


附:手机安全和可信应用开发指南.pdf


- The end -

原文始发于微信公众号(计算机与网络安全):手机安全和可信应用开发指南

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月28日16:06:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  手机安全和可信应用开发指南 http://cn-sec.com/archives/1259682.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: