你将收获

1、全体系的掌握optee的核心知识点(多核多线程、启动流程、各类API、TA/PTA/STA、driver、service、各类设计思想、内存管理、中断管理...);

2、掌握TEE OS的设计核心思想(不限与optee,对其它TEE也是如此),能够进入软件架构层次的各项设计;

3、学习和理解理解Armv8/Armv9架构、Trustzone架构

4、技术水平提升N个level, 掌握快速的学习方法;

适用人群

安全行业开发者; ATF、固件开发者; 系统架构师、战略规划师; 汽车行业软件工程师; ASIC硬件开发者; SOC/芯片底层软件开发者; 系统工程师/BSP软件工程师/驱动工程师; 学生; ......

课程介绍

课程大纲

  • 01-Trustzone简介
    什么是TEE?TEE基础科普
    TEE的生态介绍? 有哪些TEE厂商?各有什么特点?

  • 02-TEE技术简介
    什么是TEE?TEE基础科普
    TEE的生态介绍? 有哪些TEE厂商?各有什么特点?

  • 03-TEE的生态和应用
    这么些年过来,TEE为什么一直不温不火?
    TEE在手机生态中表现如何?发展趋势如何?
    TEE在汽车电子领域又是怎样的? 是否大有前途?
    TEE在服务器领域是否有应用?
    TEE在物联网IOT中是否有需求?
    TEE还在哪些领域中有需求?(电视机/机顶盒…)

  • 04-TrustzoneTEE的学习方法
    什么是trustzone? 什么是TEE? 什么是架构?
    Trustzone是硬件吗?是软件吗?
    当前主流的软件和硬件是怎么样子的?有什么标准规范吗?
    如何学习Trustzone/TEE? 学习Trustzone/TEE的最佳路径是怎样的?
    什么是软硬件交互?软硬件是怎样交互的?如何学习软硬件交互的主流框架?

  • 05-optee技术简介
    什么是open tee? 什么是optee?
    什么是TEE? 什么是optee?
    optee是大的系统软件中扮演什么角色?
    optee在架构生态中扮演什么角色?
    optee是谁领导和维护的?

  • 06-optee系统组件介绍
    大系统里都有哪些组件?组件如何理解?
    如何集成一家TEE?
    TEE都有哪些组件?
    组件之间如何交互?

  • 07-optee系统启动流程
    多系统如何理解?
    boottime和runtime如何理解?
    现在主流的系统是怎样的?

  • 08-optee os启动流程
    optee是如何启动的?
    optee是如何被加载到安全内存的?
    cpu是如何跳转到optee内核代码并开始执行的?
    optee os的初始化都干了啥?
    optee的单核启动和多核启动有什么区别?

  • 09-optee os线程向量表及其作用
    REE和TEE如何交互?
    CPU是怎样切到TEE中去的?
    CPU切到TEE后执行的第一行代码是什么?
    在boottime阶段CPU是如何切到TEE中的?
    在runtime阶段CPU是如何切到TEE中的?
    在runtine阶段CPU切换到TEE后怎样找到需要执行的代码?
    线程向量表是啥概念?

  • 10-optee的进入和退出
    cpu是如何进入optee的? 进入optee的入口有哪些?如果一些入口没有实现是怎样的?
    cpu是如何从optee中返回的?
    fast smc call和std smc call有什么区别?是如何区分的?使用场景是怎样定义的?
    多核启动是怎样换成optee os启动多核的?
    optee os是如何响应外部系统中断的?

  • 11-optee os的异常向量表和设计模型
    异常中断如何学习? 要想让异常中断机制正常工作需要注意哪些事项?
    异常、中断、异常中断这些词汇如何理解?有何不同?
    FIQ和IRQ有什么不同?
    在optee中,针对FIQ和IRQ的设计有什么区别?
    optee和商业TEE,在异常中断这块设计有什么区别吗?

  • 12-optee的同步机制
    optee都有哪些同步机制?有什么区别?
    optee要操作uart外设,在开启uart的时候需要操作clk寄存器,而REE侧的驱动程序可能也会操作clk寄存器。两者如果同时修改了,冲突了,怎么办?
    optee的spinlock和mutex有什么区别?
    optee系统里没有sleep函数,也没有schedule函数,那optee的mutex会让出CPU吗

  • 13-大系统的的同步机制
    在不同的操作系统之间,如何实现spinlock?
    在不同的master硬件之间,如何实现spinlock?

  • 14-optee线程管理
    optee os中是否有进程、线程的概念?
    optee os中的thread该如何理解?
    optee os中是否有调度?
    optee os中线程是如何切换的?
    线程切换或调度的本质是什么?它依托的硬件基础是什么?

  • 15-optee中的线程调度
    1、optee中支持多核吗?支持多线程吗?线程是怎样切换的?
    2、TA中呢,TA中是否支持多线程?
    3、你为什么会问TEE是否支持多线程?想必你想问的是TA中是否支持多线程吧。
    4、optee侧的线程之前如何调度的呢?
    5、你能举一个TEE侧线程调度的示例吗?
    6、optee中支持多核吗?支持多线程吗?线程是怎样切换的?
    7、TA中呢,TA中是否支持多线程?
    8、你为什么会问TEE是否支持多线程?想必你想问的是TA中是否支持多线程吧。

  • 16-optee之大系统调度
    cpu是如何在REE/TEE之间来回调度的?
    当CPU在TEE OS中执行的时候,此时来一个想给REE处理的中断(如蓝牙中断),此时CPU是如何响应的?
    CPU切入到TEE后陷入死循环不回来了,会影响到REE的调度吗?
    多系统下如何分配CPU资源?如何做到来回切换的?

  • 17-optee os的MMU的使用
    让MMU工作的五大步骤,optee os中都是怎样实现设计的?
    设置页表基地址TTBR(translation table base address)
    初始化MAIR_EL3 (Memory Attribute Indirection Register)
    配置TCR_EL3 (Configure the translation regime)
    创建页表 (Generate the translation tables)
    Enable the MMU

  • 18-optee os的根密钥(信任根)
    HUK到底是什么? HUK有什么要求?有什么特性?
    一般情况下HUK都是怎么获取? 经典的HUK获取的示例都是怎样的?
    你能想到哪些安全地获取HUK的方法?

  • 19-optee的系统调用
    系统调用的本质是啥?什么是系统调用?
    syscall、system call、utee call有什么区别?
    linux kernel和optee os的系统调用有什么区别?
    在函数调用的时候,传入的参数尽量小于等于8个的原理是啥?
    系统调用是如何实现的?

  • 20-optee的存储系统
    TA之间的安全内存是如何隔离的?
    不同TA之间的存储是如何隔离的?
    如果有一个需求,TA1和TA2想使用共同的证书怎么办?
    TA存储的最终的路径是在哪里?
    optee os支持多少种方式的存储?
    TA支持多少种方式的存储?
    GP规范里定义了多少种规范的存储?
    存储的数据,重新开机后会丢失吗? 刷机或OTA后会丢失吗?格式化后会丢失吗?
    如果想刷机或OTA后不丢失怎么办?如果想丢失又怎么办?
    如果想格式化不丢失怎么办?如果想格式化丢失又怎么办?
    在linux内核态,你想存储一个文件,如何做得到呢?在optee的内核,是否可以调用存储接口?
    TA的存储是怎样通过uuid隔离的? Tee os内核的存储,没有uuid怎么办?
    TA存储的数据是怎样加密的?FEK是怎样生成的?
    TA存储的数据能否防回滚?怎样做到的?

  • 21-optee的Timer实现
    什么是monotonic time ? 什么是 utc time?
    TEE_GetSystemTime和TEE_GetREETime有什么区别?
    optee的TEE_GetSystemTime的实现是否有问题?是否follow了GP规范?
    如果想把TEE_GetSystemTime实现为utc + monotonic time? 需要进行哪些考量?
    如果TEE_GetSystemTime的时间来自REE,如何抵御时间回滚的攻击?
    当前optee中TEE_GetSystemTime的具

  • 22-optee中密码学函数的支持
    optee支持哪些密码学算法?
    在optee中如何新增一个密码学算法?
    在optee中,如何基础一个crypto engine?
    optee中的tomcrypt和mbedtls有什么关系?到底在使用的哪个?
    Optee的密码学算法,是运行在用户空间的,还是运行在kernel空间的?
    分别使用Libtomcrypt和libmbedtls实现的密码学算法,是运行在userspace还是kernel space
    Cryptographic Operations API

  • 23-optee中的service和init程序

  • 24-optee中的 PTA
    什么是PTA? PTA和TA有什么不同?
    optee中有哪些PTA?分别都是什么功能?
    如何编写一个PTA呢?
    PTA存在的意义是什么?为什么说PTA是连接用户TA和secure driver的桥梁?

  • 25-optee中的 secure driver
    什么是安全驱动程序?如何开发一个安全驱动程序?
    安全驱动程序和普通的linux kernel的驱动程序有什么不同?
    在安全驱动程序中,可以读写文件吗?可以调用加解密算法吗?

  • 26-optee中的 Early TA
    什么是Early TA?
    Early TA和普通的TA有什么不同?
    Early TA如何开发?如何使用?它的应用场景什么?
    Early TA是如何打包的?如何启动的?
    Early TA和embed TA有什么不同?

  • 27-optee的栈指针和栈内存的介绍
    什么是栈? 什么是栈指针? 什么是栈内存?
    什么是栈溢出?
    optee有哪些栈内存? 分别是什么作用?
    optee使用了哪些栈指针? 为什么要这样设计?
    optee有哪些类栈内存?分别都是多大?
    堆和栈有什么区别?
    在optee中是否有堆的概念?

  • 28-optee中使用虚函数(平台客制化)的设计模型
    什么是虚函数?
    虚函数在操作系统中的意义什么?
    在optee为何大量使用了虚函数?

  • 29-optee的panic的实现
    TEE_Panic函数是给谁用的?
    TEE_Panic函数的具体实现是什么?
    tee有没有主动panic的函数?

  • 30-optee的socket的实现
    optee是否支持socket接口?是如何实现的呢
    optee是否支持TLS?是如何实现的?

  • 31-optee的RPC技术
    CA可以调用TA? 那TA可以主动调用CA吗?
    optee os内的程序是如何反向调用REE,其技术原理是什么?
    为什么会有TA反向调用REE的需求?
    optee反向调用REE的接口是否开放给TA?
    在TA程序中如何实现反向调用?

  • 32-optee的RPMB的实现
    什么是RPMB?RPMB的重要意义是什么?
    在optee os中如何集成RPMB?
    RPMB的硬件工作原理是什么?
    一般的TEE和TA中都是如何使用RPMB的?有什么标准规范吗?

  • 33-RPMB协议
    RPMB的读写最终落盘是在TEE中还是在REE中?
    为什么说任何人任何程序都可以读RPMB?
    写入RPMB的数据会被自动加密吗?
    读写RPMB有什么标准规范吗?

  • 34-RPMBmmc-util代码导读

  • 35-optee的RPMB实现代码导读

  • 36-CA_TA的开发模型
    什么是TA?TA如何开发?TA可以第三方独立开发吗?
    如何开发一个TA? sdk又是什么?
    如何写一个TA的hello world程序?
    第三方TEE如何开发TA?

  • 37-CA到TA的调用
    【面试必考题】CA到TA的调用流程是什么?
    GP client API和GP internal API有什么不同?
    在不同的TEE OS操作系统上都是如何开发CA/TA的?

  • 38-TA和PTA的调用
    什么是early TA? 使用场景如何?
    什么是PTA? 什么是secstor TA? 什么是User TA ? 什么是REE_FS TA?
    CA如何调用到TA的? CA可以直接调用PTA吗?
    TA如何调用到TA的?TA如何调用到PTA的?
    PTA可以调用TA吗?
    PTA可以调用CA吗?
    TA可以调用CA吗?
    TA或PTA想去调用Linux kernel space如何实现?
    TA或PTA想去调用Linux Userspacce space如何实现?

  • 39-uboot和TA的通信
    uboot可以和optee通信吗?
    uboot可以和TA通信吗?
    uboot是如何调用optee或TA的?有没有标准的API?

  • 40-linux kernel和TA的通信
    在linux kernel中如何调用TA? 有哪些API函数呢?

  • 41-TEE虚拟化技术简介(场景)
    单VM调用TEE模型
    多VM调用TEE模型-直通
    多VM调用TEE模型-代理
    多VM调用多TEE模型
    单VM调用多TEE模型
    硬件隔离的多VM调用多TEE模型

  • 42-TEE安全内存的保护
    TEE怎么就是安全操作系统了的?
    TEE所在的内存怎么就安全了呢?
    TEE的安全内存是怎样硬件隔离的?
    为什么说TEE是安全系统?TEE怎么就安全的?TEE是如何跑到安全内存中的?
    TEE能够访问安全内存?那能否访问非安全内存呢?
    在一个大系统中,哪些内存是安全的?
    安全内存是如何划分的?由谁来管控的?
    说一说以下的概念:安全内存、安全寄存器、安全外设

  • 43-大系统的MMU隔离机制
    在一个大系统中,有多少个MMU?
    MMU和translation regime两者有什么区别?
    当REE和TEE同时使用MMU的时候两者会不会冲突?
    当软件强制修改MMU页表中的NS比特属性的时候,是否有安全攻击的可能性?

  • 44-大系统的cache隔离机制
    cache是否分为安全cache和非安全cache?
    非安全数据的访问是否可以命中安全的cache?
    非安全的cache和安全的cache是如何靠硬件隔离的?
    cache里都有啥? TLB里都有啥?

  • 45-TA的加载过程
    TA是如何被加载到安全内存的?
    TA是如何被验签的?

  • 46-optee中属性的介绍
    optee中也有属性的概念?都有哪些属性呢?
    optee中的属性都是怎么使用的呢,常见的使用场景有哪些呢?

  • 47-TA是如何校验CA的
    TA也是可以校验CA的,常见的方法有哪些?
    什么是LOGIN Flag,都有哪些用法?
    如何设置TA只允许某个TA的调用?

  • 48-共享内存的介绍
    什么是共享内存?
    共享内存的本质是怎样的?
    optee中如何实现和REE的共享内存的?
    什么是静态共享内存?什么是动态共享内存?
    共享内存有多大?在使用时有什么上限吗?

  • 49-TA链接静态库的方法
    optee os支持静态库吗?
    TA支持静态库吗?
    在编译TA的时候如何link一个静态库?
    如何讲一段代码编译出静态库?

  • 50-optee支持动态库
    optee os支持动态库吗?
    TA支持动态库吗?
    在编译TA的时候如何link一个动态库?
    如何讲一段代码编译出动态库?

  • 51-TA的签名和验签
    optee中的TA是如何签名的?支持哪些签名算法?
    TEE OS中是如何打包验签使用的公钥的?
    能否同时支持多把签名密钥?

  • 52-optee的标准错误码
    optee os中的标准错误码是谁定义的?遵循什么规范?
    CA侧和TA侧都有标准错误码,两者有何区别?
    每家TEE厂商都是否完全follow标准错误码呢?

  • 53-optee的TA防回滚技术
    什么是放回滚技术?
    optee_os是否支持防回滚?
    TA是否支持防回滚?
    storage是否支持防回滚?
    secure time是否支持防回滚?
    RPMB对防回滚的支持?

  • 54-Multi instance和Multi Session
    不同的CA调用同一个TA,会怎样? 怎样迸发的?
    什么是multi instance? 什么是multi session?
    什么是single instance? 什么是single session?
    如果配置multi instance或single instance?
    如果是multi instance的TA,那么不同的instance TA之间能够共享数据吗?
    不同的TA调用同时访问存储接口,是如何互斥的?
    同一个TA的不同的instance,能够访问同一个存储吗?
    对于一个single instance TA而言,是如何保障opensession不被调用两次的?
    对于一个single instance TA而言,在CA的主线程重调用opensession后,然后多个线程开始同时调用invoke,这时TEE是如何互斥的,保障只有一个invoke能进来?
    对于一个single instance TA, CA端同时发起两次的opensession的调用,第二次调用的结果如何? 是卡住,还是报错?

  • 55-optee plugins
    什么是optee plugins?
    optee plugins的本质和原理是什么?
    optee plugins为得是解决哪些问题?

  • 56-TEE LOG是如何打印的
    optee的打印log是如何实现的?
    在optee_os中的打印log函数是啥? 有几种log输出级别控制? 能否动态控制?
    在TA中的打印log函数是啥? 有几种log输出级别控制?能否动态控制?
    那如何控制optee os的log输出呢? 如何控制TA的log输出呢?
    除了uart打印log方案,还有别的方案吗?
    uart打印log方案中,串口终端会不会出现乱码,如何解决呢?
    在optee启动很早期的,uart driver还没初始化呢,这个时候如果需要看log有什么办法实现?
    在TA中关闭log后,TA调用到optee_os后,optee_os的log级别是否受TA的trace_level控制?
    在TA中控制log的输出,到底是怎样控制的?是靠宏比较? 还是靠底层C语言代码检查flag?
    如何自己实现一套TA log的输出机制?尽量不依赖平台、不依赖os。

  • 57-optee的dump stack
    optee os有哪些调试技术?是否支持dump stack?

  • 58-optee ftrace
    什么是optee ftrace?
    如何开启optee ftrace?
    optee ftrace和linux ftrace有什么不同?

  • 59-optee gprof
    什么是optee Gprof?
    如何开启optee gprof?
    optee gprof和linux gprof有什么不同?

  • 60-大系统的标准规范介绍
    当前的主流软件框架是怎样的?有什么标准规范吗?
    不同的SOC系统启动时有什么标准规范吗?
    在运行状态跨系统进行电源管理时有什么标准规范吗

  • 61-GP规范的支持

  • 62-PSCI规范的支持

  • 63-SEDI的支持

  • 64-SCMI的支持

  • 65-FF-A架构的支持

  • 66-optee HSM硬核应用介绍

 

查看更多

课程目录