手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解_帅峰云;黄腾;宋洋_AZW3_MOBI_EPUB_PDF_电子书(无页码)_帅峰云;黄腾;宋洋
内容节选
14.4.2 物理地址到虚拟地址表的建立 要使用虚拟地址来访问具体的物理地址就需要建立虚拟地址与物理地址之间的映射关系。OP-TEE默认将这种映射关系设置成一一映射,而对于预留出来的虚拟地址空间则会按照其在static_memory_map变量中的索引位置和预留的虚拟空间的大小进行配置,预留虚拟地址空间的默认映射的物理起始地址为0。OP-TEE通过调用init_mem_map函数来实现映射关系的建立,该函数的内容如下:static void init_mem_map(struct tee_mmap_region *memory_map, size_t num_elems){ const struct core_mmu_phys_mem *mem; struct tee_mmap_region *map; size_t last = 0; size_t __maybe_unused count = 0; vaddr_t va; vaddr_t __maybe_unused end; bool __maybe_unused va_is_secure = true; /* any init value fits */ /* 将使用register_phys_mem定义的内存块区域按照type的值由小到大的 方式依次排列到static_memory_map数组中*/ for (mem = &__start_phys_mem_map_section; mem < &__end_phys_mem_map_section; mem++) { //从phys_mem_map_section段中获取一个定义好的内存区域信息 struct core_mmu_phys_mem m = *mem; if (!m.size) continue; assert(m.addr || !core_mmu_type_to_attr(m.type)); /* 如果定义的内存区域类型为MEM_AREA_IO_NSEC或MEM_AREA_IO_SEC,则按照页对齐的原则调整其地址和大小 */ if (m.type == MEM_AREA_IO_NSEC || m.type == MEM_AREA_IO_SEC) { m.addr = ROUNDDOWN(m.addr, CORE_MMU_PGDIR_SIZE); m.size = ROUNDUP(m.size + (mem->addr - m.addr), CORE_MMU_PGDIR_SIZE); } /* 将phys_mem_map_section段中定义的所有类型内存区域信息填充到static_memory_map数组中 */ add_phys_mem(memory_map, num_elems, &m, &last); } #ifdef CFG_SECURE_DATA_PATH /* 检查SDP内存空间地址是否与DRAM/SRAM的内存空间地址有重叠,如果重叠则产生panic */ verify_special_mem_areas(memory_map, num_elems, &__start_phys_sdp_mem_section, &__end_phys_sdp_mem_section, "SDP"); /* 检查SDP内存空间地址是否与非安全的DDR地址空间地址有重叠,如果重叠则产生panic */ check_sdp_intersection_with_nsec_ddr(); #endif /* 检查非安全的DDR地址空间与DRAM/SRAM的地址空间是否有重叠,如果重叠则产生panic */ verify_special_mem_areas(memory_map, num_elems, &__start_phys_nsec_ddr_section, &__end_phys_nsec_ddr_section, "NSEC DDR"); /* 预留出一段MEM_AREA_RES_VASPACE类型的内存空间,并将该类型的内存空间信息插入到static_memory_map数组末尾 */ add_va_space(memory_map, num_elems, MEM_AREA_RES_VASPACE, RES_VASPACE_SIZE, &last); /* 预留出一段MEM_AREA_SHM_VASPACE类型的内存空间,并将该类型的内存空间信息插入到static_memory_map数组末尾 */ add_va_space(memory_map, num_elems, MEM_AREA_SHM_VASPACE, RES_VASPACE_SIZE, &last); /* 设定static_memory......
- 信息
- 推荐序
- 前言
- 致谢
- 第一篇 基础技术篇
- 第1章 可信执行环境
- 1.2 TEE如何保护数据安全
- 1.3 现有TEE解决方案
- 1.4 为什么选择OP-TEE
- 第2章 ARM的TrustZone技术
- 2.2 ARM安全扩展组件
- 2.3 TrustZone技术对资源隔离的实现
- 2.4 小结
- 第3章 ARM可信固件
- 3.2 ATF的主要功能
- 3.3 ATF与TEE的关系
- 3.4 小结
- 第4章 OP-TEE运行环境的搭建及编译
- 4.1 获取OP-TEE代码并搭建运行环境
- 4.2 运行CA和TA示例
- 4.3 OP-TEE源代码结构
- 4.4 OP-TEE编译
- 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.3 ATF的启动过程
- 6.4 小结
- 第7章 OP-TEE OS的启动过程
- 7.2 ARM64位与ARM32位OP-TEE启动过程的差异
- 7.3 小结
- 第8章 OP-TEE在REE侧的上层软件
- 8.1 OP-TEE的软件框架
- 8.2 REE侧libteec库提供的接口
- 8.3 REE侧的守护进程——tee_supplicant
- 8.4 各种RPC请求的处理
- 8.5 小结
- 第9章 REE侧OP-TEE的驱动
- 9.1 OP-TEE驱动模块的编译保存
- 9.2 REE侧OP-TEE驱动的加载
- 9.3 REE侧用户空间对驱动的调用过程
- 9.4 OP-TEE驱动中重要的结构体变量
- 9.5 OP-TEE驱动与OP-TEE之间共享内存的注册和分配
- 9.6 libteec库中的接口在驱动中的实现
- 9.7 tee_supplicant接口在驱动中的实现
- 9.8 小结
- 第三篇 OP-TEE内核篇
- 第10章 ARM核安全态和非安全态间的切换
- 10.2 Monitor模式下的处理过程
- 10.3 ARMv8基本知识
- 10.4 EL3的处理过程
- 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.6 小结
- 第12章 OP-TEE对中断的处理
- 12.1 系统的中断处理
- 12.2 中断控制器
- 12.3 异常向量表配置
- 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.2 调用TA命令操作在OP-TEE中的实现
- 13.3 关闭会话操作在OP-TEE中的实现
- 13.4 小结
- 第14章 OP-TEE的内存和缓存管理
- 14.1 物理内存和缓存数据的硬件安全保护
- 14.2 ARM核对内存的访问
- 14.3 OP-TEE对内存区域的管理
- 14.4 MMU的初始化和映射页表
- 14.5 OP-TEE内存安全权限检查
- 14.6 系统的共享内存
- 14.7 数据是否需要写入Cache
- 14.8 小结
- 第15章 OP-TEE中的线程管理
- 15.1 OP-TEE中的线程
- 15.2 线程状态切换
- 15.3 线程运行时的资源
- 15.4 线程运行时资源的使用关系
- 15.5 OP-TEE中线程的调度
- 15.6 线程的死锁
- 15.7 小结
- 第16章 OP-TEE的系统调用
- 16.2 OP-TEE系统调用的实现
- 16.3 小结
- 第17章 OP-TEE的IPC机制
- 17.1 IPC机制的作用
- 17.2 IPC机制的原理
- 17.3 IPC的实现
- 17.4 小结
- 第四篇 应用开发篇
- 第18章 TA镜像的签名和加载
- 18.1 TA镜像文件的编译和签名
- 18.2 TA镜像的加载
- 18.3 TA镜像合法性的验证
- 18.4 加载TA镜像到OP-TEE的用户空间
- 18.5 TA运行上下文的初始化
- 18.6 小结
- 第19章 OP-TEE中的密码学算法
- 19.1 算法使用示例
- 19.2 OP-TEE中的SHA算法
- 19.3 OP-TEE中的AES算法
- 19.4 OP-TEE中的RSA算法
- 19.5 小结
- 第20章 OP-TEE的安全存储
- 20.2 安全存储使用示例
- 20.3 安全存储功能使用的密钥
- 20.4 安全文件、dirf.db文件的数据格式和操作过程
- 20.5 安全存储文件的创建
- 20.6 安全文件的打开操作
- 20.7 安全文件的读写操作
- 20.8 安全文件中数据的加解密
- 20.9 小结
- 第21章 可信应用及客户端应用的开发
- 21.1 TA及CA的基本概念
- 21.2 GP标准
- 21.3 GP标准对TA属性的定义
- 21.4 GP标准定义的接口
- 21.5 TA和CA的实现
- 21.6 TA和CA的集成
- 21.7 TA和CA的调试
- 21.8 TA和CA的使用
- 21.9 小结
- 第22章 安全驱动的开发
- 22.1 安全设备的硬件安全隔离
- 22.2 OP-TEE中安全驱动的框架
- 22.3 安全驱动的开发过程和示例
- 22.4 安全驱动示例的测试
- 22.5 小结
- 第23章 终端密钥在线下发系统
- 23.1 密钥在线下发系统的框架
- 23.2 密钥在线下发的数据包格式
- 23.3 密钥在线下发系统示例
- 23.4 离线工具的使用
- 23.5 小结
- 第24章 基于OP-TEE的在线支付系统
- 24.1 在线支付系统的基本框架
- 24.2 可信通信通道
- 24.3 数据交互协议
- 24.4 在线支付系统示例的实现
- 24.5 示例的集成
- 24.6 组包操作嵌入内核
- 24.7 支付系统与生物特征的结合
- 24.8 小结
- 第25章 TEE可信应用的使用领域
- 25.1 在线支付
- 25.2 数字保护
- 25.3 身份验证
- 25.4 其他领域
- 术语表