![](https://img-blog.csdnimg.cn/20210806083907512.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
TEE从入门到精通
文章平均质量分 75
作者现就职全球TEE TOP1厂,11年SOC芯片底层、安全开发经验,多家商用TEE开发经验、开源Optee开发经验。擅长Trustzone/TEE/安全产品的设计和开发。全网最早科普TEE,输出高质量、体系化文章。
优惠券已抵扣
余额抵扣
还需支付
¥99.90
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
代码改变世界ctw
ARMv8/ARMv9/TEE/安全/芯片
展开
-
【置顶】TEE从入门到精通-[目录]
此专栏讲解包含不限于optee、商用TEE、常规的安全业务设计。但主要基于optee最新代码,深度讲解和剖析各项原理和机制...原创 2022-05-06 08:35:45 · 4431 阅读 · 2 评论 -
TA都支持哪些密码学算法?TEE OS支持哪些密码学算法-Trustzone/TEE百问百答
实际上,GP(GlobalPlatform)规范中明确列出了TEE OS必须支持的算法和可选支持的算法。一般来说,TA必须支持的算法和可选的算法在各大厂商的实现中都支持。所以,如果你想知道TA支持哪些算法,可以查看你的SDK中的相关头文件,列出支持的算法。:GP规范规定了TA可以暴露给应用的接口,这些接口通常包括GP标准中的算法。不过,有些厂商可能会提供更多的接口,超出GP规范的范围。:GP规范明确规定了哪些算法是必须支持的,哪些是可选支持的。你可以查看GP API中的相关文档,了解具体的算法列表。原创 2024-07-09 09:42:29 · 85 阅读 · 0 评论 -
TEE共享内存的介绍-共享内存的限制是什么? TA堆内存/栈内存有限制吗?Trustzone/TEE
这是在编译时设置的,因此,TA的内存需求越大,所配置的内存也就越大。例如,当TA被加载到安全内存时,系统会自动为其分配配置好的内存,这意味着无论TA是否使用这些内存,系统都会预留相应的内存空间。例如,在OPTE中,TA的虚拟地址空间大约为几十兆字节,如果配置的内存超过了这个限制,系统会报错并且无法运行。例如,如果TA需要2兆字节的栈和4兆字节的堆,但初始配置为2兆字节的栈和1兆字节的堆。最后,TA的堆内存和栈内存是在什么时候分配的呢?在OPTEE中,TA的堆内存和栈内存是在加载到安全内存时分配的。原创 2024-07-09 09:37:54 · 125 阅读 · 0 评论 -
TEE开发Secure driver介绍-TEE安全驱动/trustzone
但是,PTA可以看作是一个伪TA,通过TA的逻辑接口,TA可以调用PTA,而PTA不调用GP API,而是调用内部的API,这就可以直接调用secure driver。对于一些商用的tee,他们设计的模式是TA和secure driver的开发是独立的,拿到SDK就能开发TA和secure driver,因为它是微内核,secure driver可以运行在EL0,而不需要修改Tee OS。TA来调用secure driver时会编译出两个东西:一个是真正的secure driver,它以TA的形式存在;原创 2024-07-09 09:32:43 · 73 阅读 · 0 评论 -
TA都可以使用哪些存储接口?分别都存放在了哪里?
有些厂商利用RPMB-FS机制,反向调用存储接口后具体存储位置由系统集成工程师配置。当然,集成工程师也可能误配置,使得存储位置在恢复出厂设置时会丢失数据。因此,根据需求,存储位置可以配置为丢失或不丢失的数据分区。这是一个数据分区,断电不会丢失数据,但在刷机或恢复出厂设置时数据会丢失。而RPMB-FS存储在RPMB中,其特点是在断电和恢复出厂设置后数据都不会丢失。接下来我们探讨TA可以使用哪些存储接口及其存储。因此,TA的具体存储位置并不完全由TEE OS厂商决定,而是由系统集成商根据需求和配置来决定。原创 2024-07-06 23:35:58 · 44 阅读 · 0 评论 -
TEE RPMB的简介以及开发流程
在TEE_ CreatePersistentObject、TEE_ReadObject Data和CloseObject等标准GP存储API中,我们可以看到传递了一个TEE_Storage_Private的标志,这表示数据存储在标准文件系统中。TA调用RPMB API时,这些API会调用secure Driver,而secure Driver最终会调用TEE OS来完成RPMB的读写操作。在storage模型中,当CA调用TA时,TA只要调用TEE的存储API,数据就会自动存储到RPMB中。原创 2024-07-06 23:29:03 · 44 阅读 · 0 评论 -
集成一家TEE都需要干哪些活?TEE厂/SOC厂/OEM各方职责?
对于硬件要求,首先在大系统的软件架构中必须有ATF的支持,这意味着芯片中的软件必须包含atf。你需要将其放到某个位置,并且要在Linux内核中集成tee driver,还要在用户空间中集成libteec.so及tee-supplicant。如果出厂软件不支持BL32,则需要手动将BL32集成进去,这就需要硬件厂商的支持来划分磁盘分区,并确保BL2源码可以修改以加载BL32到安全内存中。在实际操作中,Tee厂商和SoC厂商共同完成大部分集成工作,而OEM厂商只需要配置并启用相应功能,开发CA和TA。原创 2024-07-06 23:20:47 · 165 阅读 · 0 评论 -
Trusty qemu + android环境搭建详细步骤
注意:ATF 会先停用控制台,然后再返回测试运行程序。如需在本地停用此设置,请注释掉 external/arm-trusted-firmware/plat/common/aarch64/plat_common.c 内 bl31_plat_runtime_setup 中的所有代码。原创 2024-06-13 11:04:22 · 1472 阅读 · 0 评论 -
optee v4.2.0版本更新
可信固件 OP-TEE v4.2.0于 2024 年 4 月 12 日发布。此版本是次要版本更新,但仍包含相当多的修复,总共合并了 145 个拉取请求,包括 optee_os、optee_client、optee_test 和 build gits。自今年早些时候的上一个版本以来,这 145 个拉取请求增加了 320 个新提交。更新包括增加了几个新平台、对核心进行了各种更新以及对 OP-TEE OS 本身的驱动程序。除此之外,我们还对 CI 作业和 OP-TEE 附带的可信应用程序进行了一些改进。原创 2024-06-06 03:01:45 · 78 阅读 · 0 评论 -
Trustzone/TEE/安全 面试100问-目录
Trustzone/tee/安全面试100问原创 2023-11-22 08:59:26 · 1514 阅读 · 0 评论 -
optee4.0.0 qemu_v8的环境搭建篇(ubuntu20.10)
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈。原创 2023-11-18 19:10:13 · 293 阅读 · 0 评论 -
Armv9的Cryptographic Extension
armv9的cryptograpic extension扩展,aes加密的实现原理。armv9视频,armv8视频在Linux Kernel中,国密已经由ARM CE实现。原创 2023-08-20 01:39:23 · 190 阅读 · 0 评论 -
TEE OS中使用secure timer
在TEE OS中,一般情况下,只是使用counter和frequency值,计算出一个时间。在optee os也提供了timer TVAL功能的使用接口,如果您想使用直接调用该接口即可。如下便是plat-synquacer平台的一个使用的参考示例。在ATF和TEE OS的代码中,只能有一处使用,并且也需要设计者实现提前约定好。我们知道Arm的架构设计中,timer这一块是有缺陷的:Timer的TVAL功能不能。好在大多数的TEE OS 都不会去使用Timer TVAL功能,这也就避免了冲突。原创 2023-08-19 12:29:31 · 283 阅读 · 0 评论 -
optee读取Arm系统寄存器的模板
如何读取arm寄存器? 在EL0如何读取arm寄存器?armv9,armv8原创 2023-08-19 08:37:31 · 1110 阅读 · 0 评论 -
optee中如何开启或关闭所有中断的
这和linux kernel的local_irq_enable()和local_irq_disable()不同。只是关闭或打开IRQ。我们知道在Linux Kernel中开启或关闭中断的函数是:local_irq_enable()和local_irq_disable(), 那么在optee os中是怎样做到的呢?optee中通过使用thread_mask_exceptions()和thread_unmask_exceptions()来开启或关闭中断。原创 2023-08-19 08:21:28 · 164 阅读 · 0 评论 -
optee支持哪些密码学算法
【代码】optee支持哪些密码学算法。原创 2023-08-03 00:59:38 · 277 阅读 · 1 评论 -
DRM简介
DRM原创 2022-11-20 11:29:21 · 149 阅读 · 0 评论 -
有关HDCP的十问十答
HDCP高带宽数字内容保护( HDCP :High-bandwidth Digital Content Protection )是数字版权内容从一个设备传输到另一个设备时,防止内容被复制的一种协议,或者说是一个技术规范、一个标准。通常是使用 HDMI 或 DVI 连接传输的。例如从手机投屏到电视机的传输 Netflix视频 需要 HDCP的保护。原创 2022-12-15 14:35:23 · 166 阅读 · 0 评论 -
optee系统中的路径
tee原创 2023-06-14 16:48:55 · 181 阅读 · 0 评论 -
有关CC认证的总结
Common Criteria原创 2023-03-31 13:49:03 · 126 阅读 · 0 评论 -
optee编译TA时的属性配置和设置
TA_FLAG_SECURE_DATA_PATH未设置值的TA TA_FLAGS将无法处理与安全数据路径缓冲区相关的内存引用调用参数。属性的值必须由中的宏定义TA_DATA_SIZE(user_ta_header_defines.h参见 TA 属性)。属性的值必须由中的宏定义TA_STACK_SIZE( user_ta_header_defines.h参见TA 属性)。这些TA_FLAG_USER_MODE是 TA_FLAG_EXEC_DDR和TA_FLAG_REMAP_SUPPORT。原创 2022-09-25 14:09:20 · 1143 阅读 · 0 评论 -
Trusted Applications介绍
由于 optee_os不与 libutee链接,PTA只能使用optee_os内部的API。user mode TA 是GlobalPlatform API TEE 规范指定的全功能可信应用程序,这就是所谓的“可信应用程序”,并且在大多数情况下,这是编写和使用首选的就是这种user mode TA。PTA 是一个接口,一个OP-TEE 核心export到外部的接口,即暴漏给TA或CA的接口。PTA无法使用GP API,PTA只能使用optee_os内的API。CA或TA都可以直接调用PTA。原创 2022-09-25 11:34:03 · 1778 阅读 · 0 评论 -
Trusty TEE简介
Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE)。Trusty 操作系统与 Android 操作系统在同一处理器上运行,但 Trusty 通过硬件和软件与系统的其余组件隔离开来。Trusty 与 Android 彼此并行运行。Trusty 可以访问设备主处理器和内存的全部功能,但完全隔离。隔离可以保护 Trusty 免受用户安装的恶意应用以及可能在 Android 中发现的潜在漏洞的侵害。Trusty 与 ARM 和 Intel 处理器兼容。原创 2022-09-10 10:42:31 · 729 阅读 · 0 评论 -
optee中支持的时间函数
optee支持以下3个获取时间的函数(也是GP规定的):这3个API函数都是通过系统调用,调用到底层的, 在该函数中会根据传来的参数走不同的分支。其中:(1)、获取TEE系统时间戳直接读取arch timer寄存器而获取的。(2)、获取REE系统时间戳通过RPC反向调用到Linux Kernel侧的driver后,通过调用获取的时间...原创 2022-06-25 00:53:03 · 704 阅读 · 0 评论 -
optee中的timer代码导读
optee默认支持的timer是arch timer,当然你也可以使用SOC Timer来替换这个timer。使用 可以注册一个timer上述代码注册的是一个arch timer,和硬件交互的有两个寄存器:如果optee跑在VM(SP)里,则读取的cntvct_el0,如果optee没有跑在VM(SP)里则读取的是cntpct_el0...原创 2022-06-25 00:36:02 · 388 阅读 · 0 评论 -
GlobalPlatform规范中的密码学算法总结
2、对称密码算法3、MAC4、Authenticated Encryption5、非对称加密解密6、非对称签名验签7、随机数8、derive原创 2022-06-11 13:44:08 · 413 阅读 · 0 评论 -
Common Criteria认证
信息技术安全评估通用标准( CC) 和配套的信息技术安全评估通用方法( CEM) 是国际协议通用标准认可安排(CCRA) 的技术基础,该协议确保:CC标准是一个框架,计算机相关产品或信息技术产品开发者可以根据保护配置文件(Protection Profile, 简称PP)中的安全功能要求(SFR)和安全功能保证要求(SAR)开发自己的产品来满足认证需求。信息技术安全评估通用标准(ISO15408)(Common Criteria for Information Technology Security Eva原创 2022-06-07 00:35:29 · 442 阅读 · 0 评论 -
再谈optee中是否支持多线程
optee中支持多核多线程,以下情况都是可以出现:如下所示,举一个"1个核跑了3个optee线程"的示例:1个核跑了3个user线程,也就对应了3个optee线程,optee中没有线程调度的机制。所以线程调度只可以发生在如下图所示的userspace或kernelspace中Optee TA (GP TA)中只支持单线程, 一个TA是一个线程,如果你想在应用程序中实现多线程,那么你就应该实现多个TA,利用多个TA来实现多线程。............原创 2022-06-04 22:54:53 · 675 阅读 · 0 评论 -
optee中的线程调度
optee原创 2022-06-05 09:30:23 · 549 阅读 · 0 评论 -
Trustzone/TEE学习方法和资料汇总
Trustzone/TEE Quick Start资料汇总TODO原创 2022-05-27 18:10:25 · 1039 阅读 · 1 评论 -
[思考]-32位的应用程序和64位的应用程序有什么区别
文章目录1、32位的应用程序和64位的应用程序有什么区别2、在aarch64的linux os中,是否同时支持运行32位app和64位app★★★ 链接 : 个人博客导读首页—点击此处 ★★★1、32位的应用程序和64位的应用程序有什么区别(1)、在内存上的区别 : 64位的可执行程序要比32位的可执行程序大如下实验所示,同一份代码,编译出32位和64位的程序,两个binary相差2倍$ cat main.cint main(){ return 0;}$ aarch6原创 2020-09-11 18:14:29 · 7752 阅读 · 1 评论 -
FF-A学习环境搭建:基于qemu_v8/spmc_at_el3/optee(ubuntu20.10)
快速链接:. 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈文章目录前提条件1、拉取代码2、下载工具链3、编译4、运行前提条件(1)如下这些工具,是否安装了 sudo apt-get install android-tools-adb android-tools-fastboot autoconf \ automake bc bison build-essential ccache cscope curl device-tree-compiler \ expec.原创 2022-05-12 23:31:24 · 547 阅读 · 0 评论 -
探究optee中的RPC机制中的上下文切换和PC跳转
为了学习上下文切换以及跳转模型,我们先看一个简单的示例,一个中断的上下文切换以及跳转模型:这种模型很简单,就是当一个中断来了,PC会自动跳转到中断处理函数(PC的下一条指令地址也会自动保存到ELR中),到了中断处理函数中,需要软件保存ctx,等中断处理完成后,在退出之前需要软件来恢复ctx,然后调用ERET指令,ELR中的值会自动恢复到PC中。这很简单吗,跳转的行为硬件就帮我们搞定了,我们只要触发中断、调用ERET指令返回中断就可以了。我们再看一个稍微复杂点的例子,这种情况就是thread A切换到原创 2022-05-09 22:07:31 · 633 阅读 · 0 评论 -
optee中线程和调度的介绍
(optee_os/core/arch/arm/kernel/thread_private.h)struct thread_ctx { struct thread_ctx_regs regs; enum thread_state state; vaddr_t stack_va_end; uint32_t flags; struct core_mmu_user_map user_map; bool have_user_map;#ifdef ARM64 vaddr_t kern_sp; /*原创 2022-05-09 00:11:01 · 630 阅读 · 0 评论 -
tee_workder线程模型的介绍
快速链接:. 👉👉👉 [专题目录]–optee精选系列 👈👈👈付费专栏-付费课程-【购买须知】博客笔记导读目录(全部)原创 2022-05-07 21:51:10 · 313 阅读 · 0 评论 -
Linux Kernel(tee_worker)到TEE的调度模型
原子模式-非计数模式原子模式: 从Kernel的视角,在TEE侧,该thread不会被TEE侧的其它thread打断,即进入TEE时为得执行threadX, 那么从TEE返回的时候也是从threadX返回的。非计数模式:cpu从TEE返回后,REE侧不知道TEE侧是否还有任务,有多少任务。optee的设计采用这种模式。在optee的设计中,tee_worker()属于APP User线程的一部分。每个User线程被切换到TEE,从TEE回来后:如果任务没有处理完成,则再切回TEE,如果任务处理完成原创 2022-05-07 21:38:22 · 1144 阅读 · 0 评论 -
驱动调用Userspace的设计与实现
背景做过底层的人都能够非常熟练的实现Userspace调用底层驱动,大多数场景无非就是调用open/read/write/close/ioctl等函数嘛。但你是否想过“驱动程序是否也可以调用应用程序呢?”而这类需求恰好在REE+TEE(Linux + Optee)的系统中使用到了,即一个RPC的机制,也就是TEE反向调用REE的流程中,要求反向通知Usersapce的程序去协助做一些任务。在这个场景中,就涉及到了KernelSpace的驱动通知(并传参数)UserSpace的程序去干活。原理如原创 2022-05-07 20:02:35 · 452 阅读 · 0 评论 -
optee中使用虚函数(平台客制化)的设计模型
optee属于open source,里面有很多设计和机制。这些内容也不需要我们来维护,紧随社区的修改即可。但是如果我们有对这部分的需求呢?比如如下fast call的代码中,我想增加几组命令?如果直接修改原生的entry_fast.c文件,似乎不太明智。将以上代码,总结成以下调用模型。其实社区设计这些代码的时候,已经考虑到上述问题了,他们将func1设计成了__weak函数。所以平台上只需要override func1即可完成客制化的动作。例如我增加了case 1 和case 2两个客制化。原创 2022-05-07 19:21:06 · 298 阅读 · 0 评论 -
optee进入和退出方式的设计模型
进入和退出TEE的设计模型透过事务看本质,本文以直接写答案的方式总结其模型,就不再贴具体的代码了。进入TEE的方式有两种:(1)在启动阶段,设置optee的启动地址(这是物理地址)到ELR_EL3后,然后ERET到TEE-(2)在runtime阶段(启动多核时也属于runtime阶段),将thread_vector_table的offset(这是物理地址)设置到ELR_EL3寄存器,然后ERET到TEE退出TEE的方式有三种:(1)在optee干完活后(boot阶段初始化完成、runti原创 2022-05-07 16:31:00 · 423 阅读 · 0 评论 -
基于optee的GP Socket API的设计与实践
GP Socket API在一篇单独的文档中:GPD_TEE Sockets API _v1.0.1_PublicRelease.pdf。GP Socket API的实现也在libutee.a中PTA socket的实现:optee_os/lib/libutee/tee_socket_pta.c使用GP Socket API的示例:optee_test/ta/socket/ta_entry.c...原创 2022-05-06 15:07:38 · 371 阅读 · 0 评论