隐私计算之TEE的双操作系统支撑

在关于隐私计算的系列文字中,《从隐私到隐私计算》一文提到了实现隐私计算的三种主要技术路径,包括:多方安全加密、联邦学习和可信执行环境。其中,在《隐私计算中可信执行环境的一知半解》中,可信执行环境(TEE)也有两种主流的实现方式,即物理隔离TrustZone 和虚拟化隔离。

那么,如何实现TrustZone的可信执行环境来支持隐私计算呢?

1. 关于TrustZone

TrustZone技术是ARM公司开发的一种系统安全扩展技术。TrustZone技术的主要目标是保证嵌入式系统的安全,防止系统中的敏感数据发生安全泄漏或者系统中的关键功能遭到恶意程序的攻击。TrustZone的技术架构如下图所示:

TrustZone通过软硬结合的方式对整个系统进行了资源划分,并将其中一部分划为安全域,另一部分划为普通域。安全域为整个系统提供相应的安全服务,既可以仅运行一个安全服务,也可以运行一个完整的操作系统;普通域则是一个传统的通用操作系统。两个执行区域之间相互独立,一般地,二者的系统运行时均不会受到对方的影响。

为确保系统内安全域和普通域之间的独立性,安全域中的敏感数据由其内部设备进行管理。支持TrustZone技术的系统在其安全域和普通域中各自拥有独立的地址映射表,使得两个执行区域内的地址转换完全独立,从而杜绝了安全域在地址转换过程中受到攻击的可能性。

1.1 TrustZone 的CPU架构

ARM处理器在实现TrustZone技术时通常会被划分为两个虚拟内核,称之为普通态和安全态,分别负责运行系统中普通域和安全域内的任务。

如上图所示,以ARMv8为例,系统处于普通态时,EL0中一般执行普通的用户程序;EL1中一般运行通用操作系统内核等特权软件;EL2用于实现虚拟化技术,一般运行支持虚拟化技术的相关代码。出于系统安全考虑,普通域内不存在EL3模式。当系统处于安全态时,EL0中通常运行如加密、解密等安全相关的安全服务;EL1中的软件负责为其上层应用提供支持;EL3模式具有整个系统的最高权限,一般运行系统的底层固件如用于切换执行区域的安全监控器。在安全域中,通常不存在EL2模式,但ARMv8.4发布后,开发者可以根据实际需要使用。

1.2 TrustZone 的软件架构

安全域内的应用主要负责为系统提供具体的安全服务,如敏感数据的加解密、安全储存等。可信内核主要用于支持上层应用的正常运行,负责处理安全域中的安全中断、与普通域间的通信以及为上层应用提供统一的安全接口等。

普通域内用户空间的应用通常不会感知到TrustZone的存在,系统会通过用户空间为这些应用提供相应的接口。在执行区域间相互通信时,通常使用消息队列等方式进行,这些数据结构所处的内存被称为共享内存。由于安全域和普通域内的软件都需要对共享内存中的数据进行操作,且系统处于普通态时无法获取安全域内 的任何资源,故共享内存必须为非安全内存。

安全域内的安全服务在接收到经由可信内核处理的信息后,将处理相应请求并把结果发送到对应的共享内存,最终返回普通域。

1.3 基于TrustZone的TEE

基于TrustZone的技术特性,可信执行环境可作为一个独立的执行环境运行在ARM处理器的安全域中,并为整个系统提供灵活的安全服务。TEE标准的系统架构如下图所示。

其中可信执行环境由可信操作系统(Trusted OS,TOS)、可信应用(Trusted Application,TA)组成。TOS负责管理TEE内的软硬件资源以及为TA提供其运行需要的资源和接口。TA则负责为REE内的程序提供具体的安全服务。在TEE内部,TA之间也是相互独立的,除非通过特殊的API接口,否则它们无法直接访问其它TA内的资源。

2. 关于双操作系统

为同时保证系统的功能性及实时性的需求,将实时系统与非实时系统整合在同一硬件平台上可以组成双操作系统架构。在该架构中,实时系统负责处理实时任务及一些安全相关的任务,非实时系统负责处理功能相对复杂但实时性要求较低的非关键任务。双操作系统架构的性能取决于多个指标如复杂度、独立性和实时响应时间等。这些指标之间往往相互矛盾,很难达到完美。

双操作系统的实现同样有两种形式,一种是双内核操作系统,另一种基于虚拟化技术。

2.1 双内核系统

双内核系统将一个小的实时操作系统(RTOS)内核置于通用操作系统(GPOS)的底层,并把GPOS 作为该系统内的一个实时任务运行。

双内核系统具有较低的运行开销且不需要任何硬件的额外支持,但是该架构需要大幅修改GPOS的内核代码,显著降低了系统的灵活性。而且,双内核系统中RTOS和GPOS间的独立性较差,当GPOS遭到恶意攻击或其本身运行发生错误时,RTOS内的高关键度任务也会因此而无法正常运行。

2.2 虚拟化双系统

虚拟化技术将RTOS和GPOS作为两个虚拟机同时运行在同一硬件平台上,两个虚拟机由虚拟机管理器(Hypervisor)负责管理。

虚拟化使得操作系统之间具有较好的独立性,操作系统的数量也不仅限于GPOS和RTOS两个,同时,所有上层的操作系统均不需要做任何修改,具有良好的灵活性。但是该技术会为整个系统带来较大的额外开销,降低了RTOS和GPOS的性能,同时虚拟机管理器必须重新设计以满足系统实时性的要求。

3. 双操作系统支持TrustZone

利用TrustZone技术,可以在安全域内运行嵌入式实时操作系统,负责处理关键度较高的实时任务,普通域内运行Linux内核,负责处理关键度较低的通用任务。若普通域内的相关任务不需要和安全域相互通信,则Linux内核仅需要做极少量的修改,且在运行过程中将无法感知到安全域的存在,其内部程序也无法访问安全域内的任何资源,保证了安全域的独立性。若普通域中有程序需要使用安全域内提供的系统服务,可在Linux内核中添 加TrustZone驱动,该驱动将负责通过安全监控器与安全域间传递数据,普通域的用户层通常还需添加TrustZone相关的库,用于为用户程序提供TrustZone相关的API接口。

其中,安全监控器在系统中主要负责执行区域间的切换,具体包括:

(1)响应两个执行区域的指令。

(2)在通用操作系统运行期间负责响应安全中断,并将中断交由安全域中实时操作系统的中断处理程序处理。

(3)当发生执行区域间的切换时,负责保存并恢复相关上下文等具体的切换工作。

3.1 中断处理机制

系统将所有中断划分为安全中断和非安全中断,其中非安全中断由普通域的Linux负责处理,安全中断则由TrustZone 中的RTOS负责处理。

若安全域产生了非安全中断,为保证当前安全域内运行的关键任务可以正确执行,系统将暂时忽略该中断,也就是说,RTOS运行时,IRQ中断会一直处于屏蔽状态,待关键任务执行完毕,系统切换至普通域后,该中断才会由Linux负责处理。若普通域产生了安全中断,为确保安全域内关键任务的实时响应能力,系统将立刻通过安全监控器将系统切换至安全域处理中断。

3.2 调度策略

双操作系统中的调度算法需要建立合适的任务模型。为了判断系统中相应任务集的可调度性,一般需要计算所有任务的最坏响应时间。在确定了任务响应时间的分析方法后,需要一个算法为系统内所有任务分配各自的优先级。完成优先级排序后,将根据该优先级序列调度任务集中的任务运行。

一般地,可以采用两级调度策略,第一级是两个操作系统间的调度,由RTOS负责,采用固定优先级与时间片轮转相结合的调度策略。为使RTOS内的调度器可以调度Linux的运行,RTOS内部始终存在两个区域切换任务。当RTOS调度到区域切换任务时,将通过相应接口切换至Linux中运行。其中,一个任务作为RTOS的空闲任务运行;另一个任务用于降低Linux内核的响应时间,提高用户的使用体验,减小对其性能的影响。

4.小结

如果通过TrustZone 技术来实现TEE以支持隐私计算,那么,双操作系统可能是一个潜在的解决方案,同样地要处理诸如中断和调度等问题,或许,可以看作是分布式操作系统的一个特例。

【关联阅读】

  • 隐私计算与区块链的融合思考
  • 隐私计算中可信执行环境的一知半解
  • 隐私计算之全同态加密
  • 隐私计算中的联邦学习
  • 从隐私到隐私计算
  • 与代码无关的网络安全
  • 放心用吧!浅谈DuerOS的安全性
  • 零信任安全的认知
  • 物联网安全与区块链
  • 从构造函数看线程安全
  • QCon:工程师成长的金字塔思维