当前位置: 首页 > news >正文

IC芯片 trustzone学习

搭建Airplay TA环境需要在IC的TrustZone中进行。TrustZone是一种安全技术,用于隔离安全和非安全环境,并保护敏感文件。在TrustZone中,我们需要编写一个叫做TA(Trusted Application)的应用程序来控制这些私密文档。
🐇
因此,为了实现这个目标,需要学习以下几个步骤:

  1. 了解TrustZone技术:深入了解TrustZone的原理和功能,包括如何实现安全隔离、访问权限管理等。
  2. 搭建TrustZone开发环境:准备所需的开发工具和硬件设备,例如ARM TrustZone开发板和相关软件开发工具链。
  3. 编写TA应用程序:在TrustZone开发环境中,编写一个名为TA的应用程序,用于控制私密文档。这可能涉及到文件系统的> 访问、加密解密操作等。
  4. 测试和调试:在搭建好的环境中,对编写的TA应用程序进行测试和调试,确保其功能和性能达到要求。
    通过以上学习和实践,我将能够搭建并编写Airplay TA所需的TrustZone环境,并实现对私密文档的控制。

1. TrustZone介绍

ARM TrustZone® 技术是一种系统级的安全方法,专为高性能计算平台上的各种应用而设计,包括安全支付、数字版权管理(DRM)、企业服务和基于Web的服务。该技术与Cortex™-A处理器紧密集成,并通过AMBA® AXI总线和特定的TrustZone系统IP块在系统中进行扩展。

使用TrustZone技术,可以实现以下优势:

  1. 安全保护:TrustZone技术允许对安全内存、加密模块、键盘和屏幕等外设进行保护,以确保它们不受到恶意软件攻击。通过将系统分割为安全世界和非安全世界,TrustZone提供了一个隔离环境,使得敏感数据和关键功能可以在受保护的执行环境中运行。

  2. 完全可信执行环境(TEE)支持:符合TrustZone Ready Program建议的设备可以提供完全可信的执行环境(TEE),其中运行的代码和应用程序具有更高的特权级别和安全性。这样的环境可用于保护敏感数据和执行关键任务,提供更高级别的安全性。

  3. 支持安全感知应用程序和安全服务:利用TrustZone技术开发和利用设备可以提供安全感知应用程序和安全服务。这些应用程序和服务可以利用TrustZone提供的安全环境,实现更高级别的安全保护。

通过以上优势,ARM TrustZone技术为高性能计算平台上的各种应用程序提供了强大的安全保护、完全可信执行环境(TEE)以及安全感知应用程序和安全服务的支持。

在这里插入图片描述

  1. TrustZone介绍

1.1 安全背景

在介绍TrustZone前有必要简单回顾下目前的一些安全手段。

CPU通过内存映射手段为每个进程创建独的地址空间,以隔离多个进程之间的代码和数据。同时,通过内核空间和用户空间的不同特权级别,实现操作系统和用户进程的代码和数据的隔离。然而,由于内存中的代码和数据是明文存储的,容易受到同一内存中其他应用程序的窥视。为了解决这个问题,引入了扩展的安全模块。应用程序将加密数据发送到安全模块进行处理,并将处理结果返回给相应的应用。

为确保数据安全,许多消费电子设备都采用了扩展的安全模块。目前常见的方式包括:

  1. 外部挂接硬件安全模块

    数据的处理交由外部的安全模块实现,这些模块能够保护自己的资源和密钥等数据的安全,如SIM卡、各种智能卡或连接到外部的硬件加解密模块等,但其同主芯片的通信线路暴露在外部,容易被监听破解。另外,通信的速率比较低。

  2. 内部集成硬件安全模块

    将外部安全模块的功能集成到芯片内,因此一个芯片上至少有两个核:一个普通核和一个安全核。优点是核与核之间的通信在芯片内部实现,不再暴露在外面。缺点是核之间的通信速度仍然较低,而且单独的安全核性能有限,还会会占用SoC面积,成本较高。

1.2 TrustZone是个什么?

TrustZone是ARM针对消费电子设备设计的一种硬件架构,其目的是为消费电子产品构建一个安全框架来抵御各种可能的攻击。

TrustZone在概念上将SoC的硬件和软件资源划分为安全(Secure World)和非安全(Normal World)两个世界,所有需要保密的操作在安全世界执行(如指纹识别、密码处理、数据加解密、安全认证等),其余操作在非安全世界执行(如用户操作系统、各种应用程序等),安全世界和非安全世界通过一个名为Monitor Mode的模式进行转换,如图1:

在这里插入图片描述
图1. ARM的安全世界和非安全世界

处理器架构上,TrustZone将每个物理核虚拟为两个核,一个非安全核(Non-secure Core, NS Core),运行非安全世界的代码;和另一个安全核(Secure Core),运行安全世界的代码。

两个虚拟的核以基于时间片的方式运行,根据需要实时占用物理核,并通过Monitor Mode在安全世界和非安全世界之间切换,类似同一CPU下的多应用程序环境,不同的是多应用程序环境下操作系统实现的是进程间切换,而Trustzone下的Monitor Mode实现了同一CPU上两个操作系统间的切换。

AMBA3 AXI(AMBA3 Advanced eXtensible Interface)系统总线作为TrustZone的基础架构设施,提供了安全世界和非安全世界的隔离机制,确保非安全核只能访问非安全世界的系统资源,而安全核能访问所有资源,因此安全世界的资源不会被非安全世界(或普通世界)所访问。

设计上,TrustZone并不是采用一刀切的方式让每个芯片厂家都使用同样的实现。总体上以AMBA3 AXI总线为基础,针对不同的应用场景设计了各种安全组件,芯片厂商根据具体的安全需求,选择不同的安全组件来构建他们的TrustZone实现。

其中主要的组件有:

  • 必选组件
    AMBA3 AXI总线,安全机制的基础设施
    虚拟化的ARM Core,虚拟安全和非安全核
    TZPC (TrustZone Protection Controller),根据需要控制外设的安全特性
    TZASC (TrustZone Address Space Controller),对内存进行安全和非安全区域划分和保护

  • 可选组件
    TZMA (TrustZone Memory Adapter),片上ROM或RAM安全区域和非安全区域的划分和保护
    AXI-to-APB bridge,桥接APB总线,配合TZPC使APB总线外设支持TrustZone安全特性

除了以上列出的组件外,还有诸如 Level 2 Cache Controller, DMA Controller, Generic Interrupt Controller等。

逻辑上,安全世界中,安全系统的OS提供统一的服务,针对不同的安全需求加载不同的安全应用TA(Trusted Application)。 例如:针对某具体DRM的TA,针对DTCP-IP的TA,针对HDCP 2.0验证的TA等。
在这里插入图片描述
图2. 基于TrustZone的应用示意图

图2是一个ARM官网对TrustZone介绍的应用示意图:

基于TrustZone的应用

图中左边蓝色部分Rich OS Application Environment(REE)表示用户操作环境,可以运行各种应用,例如电视或手机的用户操作系统,图中右边绿色部分Trusted Execution Envrionment(TEE)表示系统的安全环境,运行Trusted OS,在此基础上执行可信任应用,包括身份验证、授权管理、DRM认证等,这部分隐藏在用户界面背后,独立于用户操作环境,为用户操作环境提供安全服务。

  • 可信执行环境(TEE, Trusted Execution Environment)是Global Platform(GP)提出的概念。对应于TEE还有一个REE(Rich Execution Environment)概念,分别对应于安全世界(Secure World)和非安全世界(Non-secure World, Normal World)。

  • GlobalPlatform(GP)是跨行业的国际标准组织,致力于开发、制定并发布安全芯片的技术标准,以促进多应用产业环境的管理 及其安全、可互操作的业务部署。目标是创建一个标准化的基础架构, 加快安全应用程序及其关联资源的部署,如数据和密钥,同时保护安全应用程序及其关联资源免受软件方面的攻击。

2. TrustZone原理和设计

以下主要从TrustZone的总线设计,CPU设计(包括处理器模型、内存模型和中断模型)和安全隔离机制来介绍TrustZone的设计和工作原理。

2.1 总线设计

总线

设计上,TrustZone 在系统总线上针对每一个信道的读写增加了一个额外的控制信号位,这个控制位叫做Non-Secure或者NS位,是AMBA3 AXI总线针对TrustZone作出的最重要、最核心的扩展设计。

这个控制信号针对读和写分别叫做ARPORT[1]和AWPORT[1]:

寄存器功能位[1]描述
ARPROT用于读操作的访问权限保护寄存器低位表示Secure,高位表示Non-Secure
AWPROT用于写操作的访问权限保护寄存器低位表示Secure,高位表示Non-Secure

在这两个寄存器中,位[1]用于表示访问操作的安全级别。低位表示Secure(安全),高位表示Non-Secure(非安全)。

总线上的所有主设备(master)在发起新的操作(transaction)时会设置这些信号,总线或从设备(slave)上解析模块会对主设备发起的信号进行辨识,来确保主设备发起的操作在安全上没有违规。

例如:硬件设计上,所有非安全世界的主设备(Non-Secure masters)在操作时必须将信号的NS位置高,而NS位置高又使得其无法访问总线上安全世界的从设备(Secure Slaves),简单来说就是对非安全世界主设备发出的地址信号进行解码时在安全世界中找不到对应的从设备,从而导致操作失败。

NS控制信号在AMBA3 AXI总线规范中定义。可以将其看作为原有地址的扩展位,如果原有32为寻址,增加NS可以看成是33位寻址,其中一半的32位物理寻址位于安全世界,另一半32位物理寻址位于非安全世界。

当然,非安全世界的主设备尝试访问安全世界的从设备会引发访问错误,可能是SLVERR(slave error)或者DECERR(decode error),具体的错误依赖于其访问外设的设计或系统总线的配置。

外设

在TrustZone出现前,ARM的外设基于AMBA2 APB (Advanced Peripheral Bus)总线协议,但是APB总线上不存在类似AXI总线上的NS控制位。为了兼容已经存在的APB总线设计,AMBA3规范中包含了AXI-to-APB bridge组件,这样就确保基于AMBA2 APB的外设同AMBA3 AXI的系统兼容。AXI-to-APB bridge负责管理APB总线设备的安全事宜,其会拒绝不合理的安全请求,保证这些请求不会被转发到相应的外设。

例如:新一代的芯片可以通过增加AXI-to-APB bridge组件来沿用上一代芯片的设计来使其外围设备可以支持TrustZone。

2.2 处理器设计

2.2.1 处理器模型

TrustZone中,每个物理处理器核被虚拟为一个安全核(Secure)和一个非安全核(Non-Secure),安全核运行安全世界的代码,非安全核运行除安全世界外的其它代码。由于安全世界和非安全世界的代码采用时间片机制轮流运行在同一个物理核上,相应的节省了一个物理处理器核。

多核处理器上,也有建议说让将某一个或几个核指定为安全专用核,只运行安全系统代码来构建安全世界,其余核运行非安全代码,暂不清楚目前有哪些平台采用这个实现。

在这里插入图片描述
图3. 多核处理器上的安全核和非安全核

如上图中,系统中有4个物理核,并且每个物理核都被划分为两个虚拟核,即安全核和非安全核。这种情况下,系统总共有8个虚拟核。

在多核处理器上,每个物理核都是一个独立的处理单元,具有自己的执行资源和寄存器。通过将每个物理核划分为安全核和非安全核,可以实现对不同特权级别的隔离和管理。

安全核通常用于运行处于高特权级别的代码和应用程序,例如TrustZone安全世界中的代码。它们具有更高的特权级别和访问权限,可以直接访问系统资源和执行特权指令。

非安全核则用于运行一般用户应用程序和操作系统内核等低特权级别的代码。它们通常受到限制,无法直接访问系统资源和执行特权指令,以增加系统的安全性和稳定性。

通过将安全核和非安全核组合在一起,系统可以同时运行安全世界和非安全世界的任务,实现安全保护和并行处理的功能。

2.2.2 L1内存模型

MMU

MMU是一种硬件电路,它包含两类部件,一类是分段部件,一类是分页部件,对应于内存管理的分段机制和分页机制。分段机制把一个逻辑地址转换为线性地址;接着,分页机制把一个线性地址转换为物理地址。

当CPU访问一个虚拟地址时,这个虚地址被送到MMU翻译,硬件首先把它和TLB中的所有条目同时(并行地)进行比较,如果它的虚页号在TLB中,并且访问没有违反保护位,它的页面会直接从TLB中取出而不去访问页表,从而提高地址转换的效率。

安全世界和非安全世界都有自己的虚拟MMU,各自管理物理地址的映射。实际上只是两个世界都有一份TTBR0、TTBR1、TTBCR寄存器,因此就会对应两个MMU表。

尽管MMU有两套,但TBL缓存硬件上只有一套,因此TBL对于两个世界来说是共享的,其通过NS位来标志其每一项具体属于哪一个世界。这样在两个世界间进行切换时不再需要重新刷新TLB,提高执行效率。

对于TLB共享并不是硬性规定的,部分芯片在两个世界间切换时可能通过硬件部分或全部刷新TLB。

Cache

同TLB类似,硬件上两个世界共享一套Cache,具体的Cache数据属于哪一个世界也由其NS位指定,在世界间切换也不需要刷新Cache。

2.2.3 中断模型

基于TrustZone的处理器有三套异常向量表:

  • 一套用于非安全世界,
  • 一套用于安全世界,
  • 还有一套用于Monitor模式。

与之前非TrustZone的处理器不同的是,这三套中断向量表的基地址在运行时可以通过CP15的寄存器VBAR(Vector Base Address Register)进行修改。

复位时,安全世界的中断向量表由处理器的输入信号VINITHI决定,没有设置时为0x00000000,有设置时为0xFFFF0000;非安全世界和Monitor模式的中断向量表默认没有设置,需要通过软件设置后才能使用。

默认情况下,IRQ和FIQ异常发生后系统直接进入Monitor模式,由于IRQ是绝大多数环境下最常见的中断源,因此ARM建议配置IRQ作为非安全世界的中断源,FIQ作为安全世界的中断源。这样配置有两个优点:

当处理器运行在非安全世界时,IRQ直接进入非安全世界的处理函数;如果处理器运行在安全世界,当IRQ发生时,会先进入到Monitor模式,然后跳到非安全世界的IRQ处理函数执行
仅将FIQ配置为安全世界的中断源,而IRQ保持不变,现有代码仅需做少量修改就可以满足

将IRQ设置为非安全世界的中断源时系统IRQ的切换见图4:
IRQ作为非安全世界的中断源
在这里插入图片描述

图4. IRQ作为非安全世界的中断源

2.2.4 系统模式切换

基于TrustZone的系统有三种状态,安全世界、非安全世界和用于二者切换的Monitor Mode。

协处理器CP15的寄存器SCR(Secure Configuration Register)有一个NS位用于指示当前处理器位于哪一个世界,该寄存器在非安全世界是不能访问的。当CPU处于Monitor Mode时,无论NS位是0还是1,处理器都是在安全世界运行代码。因此Monitor Mode下总是安全世界,但如果此时NS为1,访问CP15的其它寄存器获取到的是其在非安全世界的值。
非安全世界到Monitor模式的切换

处理器从非安全世界进入Monitor Mode的操作由系统严格控制,而且所有这些操作在Monitor Mode看来都属于异常。
从非安全世界到Monitor Mode的操作可通过以下方式触发:

软件执行SMC (Secure Monitor Call)指令
硬件异常机制的一个子集(换而言之,并非所有硬件异常都可以触发进入Monitor Mode),包括:IRQFIQexternal Data Abortexternal Prefetch Abort

Monitor Mode

Monitor Mode内执行的代码依赖于具体的实现,其功能类似于进程切换,不同的是这里是不同模式间CPU状态切换。

软件在Monitor Mode下先保存当前世界的状态,然后恢复下一个世界的状态。操作完成后以从异常返回的方式开始运行下一个世界的代码。
为什么安全模式和非安全模式不能直接切换?

非安全世界无权访问CP15的SCR寄存器,所以无法通过设置NS来直接切换到安全世界,只能先转换到Monitor Mode,再到安全世界。

如果软件运行在安全世界(非Monitor Mode)下,通过将CP15的NS位置1,安全世界可以直接跳转到非安全世界,由于此时CPU的流水线和寄存器还遗留了安全世界的数据和设置,非安全模式下的应用可以获取到这些数据,会有极大的安全风险。因此,只建议在Monitor Mode下通过设置NS位来切换到非安全模式。

综上,安全世界和非安全世界不存在直接的切换,所有切换操作都通过Monitor Mode来执行。

图5展现了安全世界和非安全世界之间的切换方式:
安全世界和非安全世界之间的切换
在这里插入图片描述

图5. 安全世界和非安全世界之间的切换

2.3 隔离机制

除了CPU执行时实行安全世界和非安全世界的隔离外,AMBA3 AXI总线提供了外设隔离的基础。

2.3.1 内存隔离机制

这里的内存指外部的DDR和片上的ROM以及SRAM,其隔离和保护通过总线组件TZASC和TZMA的设置来实现。

下面是关于TZASC和TZMA的表格描述:

组件功能适用设备
TZASC (TrustZone Address Space Controller)将外部DDR划分为多个区域,每个区域可以配置为安全或非安全区域,只有非安全世界的代码和应用可以访问非安全区域。内存设备
TZMA (TrustZone Memory Adapter)将片上ROM和SRAM划分为安全和非安全区域。最大可将低2MB的片上存储配置为安全区域,其余部分为非安全区域。大小划分可以在芯片出厂前固定设置,或者通过TZPC在运行时动态配置。片上存储

需要注意的是,TZASC适用于内存设备而不适用于配置块设备(如Nand Flash)。而TZMA虽然可以配置一个安全区域,但不适用于外部内存划分。

2.3.2 外设隔离机制

外设上,基于APB总线的设备不支持AXI总线的NS控制信号,所以AXI到APB总线需要AXI-to-APB bridge设备连接,除此之外,还需要TZPC (TrustZone Protection Controller) 来向APB总线上的设备提供类似AXI上的NS控制信号。

由于TZPC可以在运行时动态设置,这就决定了外设的安全特性是动态变化的,例如键盘平时可以作为非安全的输入设备,在输入密码时可以配置为安全设备,只允许安全世界访问。

2.3.3 隔离机制示意图

整个系统内存和外设隔离机制示意图见图6.
系统内存和外设隔离机制
在这里插入图片描述

图6. 系统内存和外设隔离机制示意图

此图来源于网上,实际上TZPC还连接到片内的ROM/RAM设备上,用于配置片上存储的安全区域。

2.4 安全启动

AMBA3 AXI总线机制隔离出安全世界和非安全世界,但这是系统启动之后的事情。如何确保系统本身是安全的呢?这就涉及到系统启动的过程。

系统上电复位后,先从安全世界开始执行。安全世界会对非安全世界的bootloader进行验证,确保非安全世界执行的代码经过授权而没有被篡改过。然后非安全世界的bootloader会加载非安全世界的OS,完成整个系统的启动。

在非安全系统的bootloader加载OS时,仍然需要安全世界对OS的代码进行验证,确保没有被篡改。

图7是典型的TrustZone芯片的启动流程:
典型的TruestZone芯片启动流程
在这里插入图片描述

图7. 典型的TruestZone芯片启动流程

整个启动流程跟目前博通平台的安全启动原理基本一致,上电后安全芯片先启动,然后校验主芯片的bootloader,接下来bootloader提交系统的OS和文件系统给BSP进行校验,通过后加载主系统,确保主系统是安全的。

从上电复位开始的整个启动过程中,下一级的安全基于上一级的验证,最终依赖于芯片内置的OTP和安全硬件,逐级的验证构成了整个系统的信任链。信任链中的某一个环节被破坏,都会导致整个系统不安全。

3. 各家TrustZone实现

基于安全考虑,各家TrustZone都实行闭源,关于其实现细节的介绍都较少。

网上能找到少许关于高通方案上TrustZone的介绍:

  • 安全世界(Secure World)是指在TrustZone技术中运行的受保护的环境。QSEE是高通公司为其处理器提供的安全执行环境,用于运行敏感和受保护的代码。它提供了一种隔离的环境,确保安全世界中的应用程序和数据不会被非安全世界访问或破坏。

  • 非安全世界(Non-Secure World)是指在TrustZone技术中运行的普通操作系统环境。HLOS是通常在非安全世界中运行的高级操作系统,例如Android、Linux等。非安全世界中的应用程序和数据可以与其他非安全世界的组件进行交互,但无法直接访问或影响安全世界中的内容。

通过将安全和非安全世界分离,TrustZone技术提供了一种有效的安全机制,以保护敏感数据和应用程序免受恶意攻击或未经授权的访问。

整个系统的架构如图8:
高通QSEE系统架构图
在这里插入图片描述

图8. 高通QSEE系统架构图

4. 其它

ARMv8-A架构定义了四个异常等级,分别为EL0到EL3。每个等级代表一种特权级别,数字越大表示特权越高。

  • EL0(无特权模式):也称为用户模式,是最低特权级别。在EL0中运行的应用程序没有直接访问系统资源和特权指令的权限。

  • EL1(操作系统内核模式):也称为内核模式,是操作系统内核运行的特权级别。在EL1中,操作系统具有对系统资源和特权指令的完全访问权限。

  • EL2(虚拟机监视器模式):也称为虚拟化模式,用于运行虚拟机监控器(如Hypervisor)。在EL2中,虚拟机监控器可以管理和监控多个虚拟机实例。

  • EL3(TrustZone监控模式):也称为TrustZone监控模式,用于运行TrustZone技术相关的监控程序。在EL3中,可以进行安全世界(Secure World)和非安全世界(Non-Secure World)之间的切换和通信。

通过这些不同的异常等级,ARMv8-A架构提供了灵活的特权管理,并支持安全保护和虚拟化功能。

在这里插入图片描述

ARMv8-A Security Level

TrustZone设计的相关方

  • ARM公司,定义TrustZone并实现硬件设计,TEE,TZAPI等

  • 芯片厂家,在具体芯片上实现TrustZone设计,包括三星、高通、MTK、RTK、TI、ST、华为等

  • 应用提供方,如DRM厂家和安全应用开发商,实现DRM、Playready、DTCP-IP和一些其它安全应用开发和认证

    Trust OS

    TEE环境下也要有一个操作系统,各家都有自己的Trustzone的操作系统,如Trustonic、高通的QSEE、国内的豆荚,还有开源的OPTEE等。在操作系统之上自然要有应用程序,在Trustzone里面我们一般叫TrustApp,当然TEE里面每个TrustApp都在一个沙盒里,互相之间是隔离的。比如说支付,就可以做成一个App(需要注意的是,和Normal World里面的App是两个概念),这个App简单来说就负责用私钥把网上发来的Challenge签个名,而这个签名的动作是需要在Secure World里面做的,避免恶意程序窃取到私钥来伪造签名。

    例如支付宝,其实支付宝也是只支持几个Trust OS的。同时,支付宝还定义了一系列标准,用来完成他的行为。

    现在的Trust OS大都会遵循GlobalPlatform的规范,这个组织致力于制定统一的Trust OS的API的接口规范,这样一个TrustApp只要用GP API,就可以方便移植到各个不同的TEE操作系统上了。

    Intel 平台的 SGX

    针对可信计算,类似ARM的TrustZone,Intel也针对x86平台提出了自己的安全架构SGX:

    Intel® Software Guard Extensions (Intel® SGX)

    https://software.intel.com/zh-cn/sgx-sdk

    SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性。这种方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中,保护其不受恶意软件的攻击,特权或者非特权的软件都无法访问enclave,也就是说,一旦软件和数据位于enclave中,即便操作系统或者和VMM(Hypervisor)也无法影响enclave里面的代码和数据。Enclave的安全边界只包含CPU和它自身。SGX创建的enclave也可以理解为一个可信执行环境TEE(Trusted Execution Environment)。不过其与ARM TrustZone(TZ)还是有一点小区别的,TZ中通过CPU划分为两个隔离环境(安全世界和正常世界),两者之间通过SMC指令通信;而SGX中一个CPU可以运行多个安全enclaves,并发执行亦可。

    简单来讲, Intel SGX最关键的优势在于将程序以外的software stack如OS和BIOS都排除在了TCB(Trusted Computing Base)以外。换句话说,就是在容器enclave里的code只信任自己和intel的CPU。

网上有人是这样对比TrustZone和SGX的:

  1. Trustzone默认相信SecureOS,安全世界。SGX仅相信CPU core,通过SGX指令构建enclave容器。简单比喻,TEE是个公用大保险柜,什么东西都装进去,有漏洞的app可能也进去了,而且保险柜钥匙在管理员手上,必须相信管理员。SGX每个app有自己的保险柜,钥匙在自己手上
  2. SGX要进入工业界应用尚需时间,一个重要的问题是现在在intel发行的服务器芯片上还没有SGX,而SGX的重要应用就是在数据中心和云端的应用。

5. TrustZone开源项目

除了各家私有实现外,ARM也有不少开源项目,知名度较高的有:

  • Arm Trusted Firmware
    基于ARMv8-A应用处理器,ARM官方提供了一个开源参考实现BL31。
    https://github.com/ARM-software/arm-trusted-firmware

  • Openvirtualization
    带有一些商业属性的开源项目,部分TEE实现只有商业版支持
    http://www.openvirtualization.org/

  • Op-Tee
    Linaro 推出的开源TEE
    https://github.com/OP-TEE

有参考rocky的博文:https://blog.csdn.net/guyongqiangx/article/details/78020257

相关文章:

IC芯片 trustzone学习

搭建Airplay TA环境需要在IC的TrustZone中进行。TrustZone是一种安全技术,用于隔离安全和非安全环境,并保护敏感文件。在TrustZone中,我们需要编写一个叫做TA(Trusted Application)的应用程序来控制这些私密文档。 &am…...

Day19-异步请求-axios文件上传

Day19-异步请求 什么是同步请求当前浏览器刷新或者改变浏览器地址栏地址才能发送请求,这种请求称为同步请求 什么是异步请求当我们发送请求时,浏览器不会刷新,浏览器地址栏也不会变化,这种请求称为异步请求异步请求用到的前端技术: ajax 或 axios一 封装Ajax /*** 编写ajax函…...

从零学算法79

79.给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直…...

ctfshow-web-红包题第六弹

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 首先跑一下字典,这里用的dirmap,可以看到有一个web.zip 下载下来之后发现是一个网站备份,备份的是check.php.bak 然后接着看,可以看到这里不太可能是sql注入,有…...

蓝蓝设计UI设计公司-界面设计与开发案例

天津航天中为项目 中国南方电网十二个软件交互优化和界面设计 图标设计 | 交互设计 | 界面设计 天津航天中为数据系统科技有限公司是航天503所控股的专业化公司,坐落于天津滨海新区航天技术产业园,是航天五院家入住天津未来科技城的军民融合型企业&…...

IDEA 配置注释模板

目录 一、配置类模板注释 二、配置方法注释 一、配置类模板注释 打开IDEA,打开settings(快捷键:Ctrl Alt s),选择Editor,找到File and Code Templates,设置需要配置注释的文件类型,如下图所示&#xf…...

Kuka机器人设计通用码垛程序

假设需要一个码垛程序, 从输送线抓到托盘, 托盘每层4个, 需要码5层, 可以用以下程序架构设计: 1, 再config中定义层数cengshu , 每层码垛的个数(码垛的次数)cishu , 每层的高度levelHeight , 码垛放置点的集合putPoint[,] ,预放点1集合prePut1[,], 预放点2集合prePut2[,] DEC…...

pandas由入门到精通-数据清洗-扩展数据类型

pandas-02-数据清洗&预处理 扩展数据类型1. 传统数据类型缺点2. 扩展的数据类型3. 如何转换类型文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分…...

深入理解 Vue Router:构建可靠的前端路由系统

目录 01-什么是前端路由以及路由两种模式实现原理02-路由的基本搭建与嵌套路由模式03-动态路由模式与编程式路由模式04-命名路由与命名视图与路由元信息05-路由传递参数的多种方式及应用场景06-详解route对象与router对象07-路由守卫详解及应用场景 01-什么是前端路由以及路由两…...

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4,因为 页10 最多只能放3条记录所以我们不得不再分配一个新页: 新分配的数据页编号可能并不是连续的,也…...

在window上配置NASM

NASM是支持x86、x64架构CPU的汇编器(汇编软件);NASM也支持大量的文件格式,包括Linux,*BSD,a.out,ELF,COFF,Mach−O,Microsoft 16−bit OBJ,Win32以及Win64,同…...

用QT实现MVP模式

近些天用qt 作项目,遇到参数界面.偷闲写个mvp模式示例. mvp模式重要的有两点 1 低耦合: 界面与后端数据类,不直接引用,可方便替换. 2 形成界面驱动-界面更新的闭环.:通过函数指针类技术,让数据自动回流. MVP (Model-View-Presenter) 视图(View): 接…...

(2023)Linux安装pytorch并使用pycharm远程编译运行

(2023)Linux安装pytorch并使用pycharm远程编译运行 安装miniconda 这部分参考我这篇博客的前半部分Linux服务器上通过miniconda安装R(2022)_miniconda 安装r_Dream of Grass的博客-CSDN博客 创建环境 创建一个叫pytorch的环境…...

poi带表头多sheet导出

导出工具类 package com.hieasy.comm.core.excel;import com.hieasy.comm.core.excel.fragment.ExcelFragment; import com.hieasy.comm.core.utils.mine.MineDateUtil; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; import org.apache.po…...

RedisDesktopManager(redis客户端,可输入用户名密码)

RedisDesktopManager(redis客户端,可输入用户名密码) Redis桌面管理器(又名RDM) - 是一个用于Windows,Linux和MacOS的快速开源Redis数据库管理应用程序。可以使用url连接或账号密码。 redis设置账号密码后…...

【Adobe After Effects】关于ae点击空格不会播放反而回退一帧的解决方案

最近玩ae的时候遇见了一个小问题,就是有时候敲空格,视频没办法播放,反而会回退一帧,经过摸索发现了一个解决办法: 点击编辑---首选项 然后选择“音频硬件” 然后选择正确的默认输出,点击确定即可...

Linux网络编程:多路I/O转接服务器(select poll epoll)

文章目录: 一:select 1.基础API select函数 思路分析 select优缺点 2.server.c 3.client.c 二:poll 1.基础API poll函数 poll优缺点 read函数返回值 突破1024 文件描述符限制 2.server.c 3.client.c 三:epoll …...

Mybatis系列原理剖析之项目实战:自定义持久层框架

Mybatis系列原理剖析之:项目实战:自定义持久层框架 持久层是JAVA EE三层体系架构中,与数据库进行交互的一层,持久层往往被称为dao层。需要说明的是,持久层的技术选型有很多,绝不仅仅只有mybatis一种。像早…...

阿里云 Serverless 应用引擎 2.0,正式公测!

阿里云 Serverless 应用引擎 SAE2.0 正式公测上线!全面升级后的 SAE2.0 具备极简体验、标准开放、极致弹性三大优势,应用冷启动全面提效,秒级完成创建发布应用,应用成本下降 40% 以上。 此外,阿里云还带来容器服务 Se…...

西北大学计算机考研844高分经验分享

西北大学计算机考研844经验分享 个人介绍 ​ 本人是西北大学22级软件工程研究生,考研专业课129分,过去一年里在各大辅导机构任职,辅导考研学生专业课844,辅导总时长达288小时,帮助多名学生专业课高分上岸。 前情回顾…...

【java并发编程的艺术读书笔记】volatile关键字介绍、与synchronized的区别

volatile的简介 volatile是轻量级锁,只用来修饰变量,保证这个变量在多线程下的可见性以及一致性(一个volatile变量被线程修改时会立刻通知其他所有线程),防止指令重排序,但是并不能保证绝对的线程安全 vol…...

LinkedList的顶级理解

目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…...

再学http-为什么文件上传要转成Base64?

1 前言 最近在开发中遇到文件上传采用Base64的方式上传,记得以前刚开始学http上传文件的时候,都是通过content-type为multipart/form-data方式直接上传二进制文件,我们知道都通过网络传输最终只能传输二进制流,所以毫无疑问他们本…...

使用oracleVM搭建虚拟机

选择新建,点击 取名字,选择你的安装路径,选择你爹镜像光盘,再勾选下面的,表示跳过一些步骤 其他的都可以默认,下一步即可 创建好了,点击设置,改变光驱,硬盘的顺序 等待它…...

深入探讨C存储类和存储期——Storage Duration

🔗 《C语言趣味教程》👈 猛戳订阅!!! ​—— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅&#…...

医学图像融合的深度学习方法综述

文章目录 Deep learning methods for medical image fusion: A review摘要引言非端到端的融合方法基于深度学习的决策映射基于深度学习的特征提取 端到端图像融合方法基于卷积神经网络(CNN)的图像融合方法单级特征融合方法多级特征融合基于残差神经网络的图像融合方法基于密集神…...

【Qt学习】04:QDialog

QDialog OVERVIEW QDialog一、自定义对话框1.模态对话框2.非模态对话框3.练习代码 二、标准对话框1.消息对话框2.文件对话框3.颜色对话框4.字体对话框 对话框是 GUI 程序中不可或缺的组成部分,对话框通常会是一个顶层窗口出现在程序最上层,用于实现短期任…...

如何更好的进行异常处理

背景 在实际开发中,我们都希望程序可以一直按照期望的流程,无误的走下去。但是由于不可避免的内外部因素,可能导致出现异常的情况,轻则导致报错,重则数据错乱、服务不可用等情况。严重影响系统的稳定性,甚至…...

若依微服务版部署到IDEA

1.进入若依官网,找到我们要下的微服务版框架 2.点击进入gitee,获取源码,下载到本地 3.下载到本地后,用Idea打开,点击若依官网,找到在线文档,找到微服务版本的,当然你不看文档,直接按…...

Elasticsearch 入门安装

1.Elasticsearch 是什么 The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。 Elaticsearch,简称为…...