面向可信执行环境的系统调用处理方法及装置制造方法及图纸

技术编号:33929016 阅读:36 留言:0更新日期:2022-06-25 22:10
本说明书实施例中提供了一种面向可信执行环境的系统调用处理方法及装置。该方法可以包括:接收运行在可信执行环境中的应用程序发起的IO类系统调用请求。接着向可信执行环境外的共享内存区域写入该系统调用请求,并且向可信执行环境外的IO请求队列写入IO请求事件,其中该IO请求事件包括系统调用请求在共享内存区域中的第一地址以及共享内存区域中用于存储业务数据的第二地址。如此,系统内核可以根据该IO请求事件处理该系统调用请求,并且向可信执行环境外的IO完成队列写入IO完成事件,该IO完成事件包括系统内核对IO请求的处理结果。最后,至少向可信执行环境中的应用程序返回该IO完成事件中的处理结果。IO完成事件中的处理结果。IO完成事件中的处理结果。

【技术实现步骤摘要】
面向可信执行环境的系统调用处理方法及装置
[0001]本申请为2020年12月31日提交的申请号为202011638265.6、名称为“面向可信执行环境的系统调用处理方法及装置”的专利技术专利申请的分案申请。


[0002]本说明书一个或多个实施例涉及计算机领域,尤其涉及面向可信执行环境的系统调用处理方法及装置。

技术介绍

[0003]软件保护扩展(software guard extensions,SGX)是英特尔(Intel)芯片架构下的一种安全扩展。SGX允许应用程序运行在被称为Enclave的可信执行环境(trusted execution environment,TEE)中。Enclave是一块可信内存区域,Enclave中的内容全部经过加密,只有在中央处理器(central processing unit,CPU)内部才能对Enclave中的内容进行解密,从而提供机密性。此外,还会对Enclave中的内容进行完整性度量,从而提供完整性。基于SGX提供的完整性和机密性,可以为应用程序提供进行安全敏感计算的TEE。
[0004]运行在Enclave中的计算机程序被称为可信代码(trusted code),运行在Enclave外的计算机程序被称为不可信代码(untrusted code)。可信代码和不可信代码之间可以相互调用,从而在保证机密计算的情况下实现程序功能。可信代码调用不可信代码通常被称为OCall。由于Enclave是用户态的,运行在Enclave中的应用程序经常需要调用外部系统来实现程序功能,即需要通过不可信代码来实现程序功能。当Enclave中的应用程序进行系统调用时,则需要进行OCall,将调用参数复制到Enclave外,通过EEXIT指令退出Enclave,然后通过不可信代码执行系统调用,执行完毕后恢复到Enclave,将调用结果复制到Enclave内,并将Enclave内的调用结果提供给应用程序。
[0005]进行一次OCall通常需要大约8300

14100个CPU周期,进行一次典型的系统调用大约需要150个CPU周期,因此在可信执行环境中通过进行OCall来处理运行在可信执行环境中的应用程序发起的系统调用请求,需要浪费极大的处理时间。然而,运行在Enclave中的应用程序却往往需要进行高频次的系统调用,因此通过OCall实现系统调用会对运行在Enclave中的应用程序的整体性能造成较大的负面影响。
[0006]希望有一种新的技术方案,以期减少运行在Enclave中的应用程序进行系统调用时的OCall,进而提高运行在Enclave中的应用程序的整体性能。

技术实现思路

[0007]本说明书一个或多个实施例中提供了一种面向可信执行环境的系统调用处理方法及装置。
[0008]第一方面,提供了一种面向可信执行环境的系统调用处理方法。该方法可以由部署在可信执行环境中的系统调用处理装置执行。该方法包括:首先接收运行在可信执行环境中的应用程序发起的系统调用请求,其中该统调用请求用于请求向目标文件写入业务数
据,或者用于请求从目标文件中读取业务数据。接着向可信执行环境外的共享内存区域写入该系统调用请求,并且向存储在可信执行环境外的IO请求队列写入IO请求事件,其中该IO请求事件包括系统调用请求在共享内存区域中的第一地址以及共享内存区域中用于存储业务数据的第二地址。如此,系统内核可以根据该IO请求事件处理该系统调用请求,并向存储在可信执行环境外的IO完成队列写入IO完成事件,该IO完成事件包括系统内核对IO请求的处理结果。最后,至少向可信执行环境中的应用程序返回该IO完成事件中的处理结果。
[0009]在一种可能的实施方式中,所述系统调用请求用于请求向目标文件写入业务数据时,所述方法还包括:根据所述系统调用请求向所述共享内存区域的所述第二地址写入业务数据;其中,所述系统内核具体用于根据所述IO请求事件从所述共享内存区域的所述第一地址读取所述系统调用请求,以及从所述第二地址读取所述业务数据,并根据所述系统调用请求向目标文件写入所述业务数据。
[0010]在一种可能的实施方式中,所述系统调用请求用于请求从目标文件中读取业务数据时,所述系统内核具体用于根据所述IO请求事件从所述共享内存区域的所述第一地址读取所述系统调用请求,根据所述系统调用请求从目标文件中读取业务数据,并根据所述第二地址向所述共享内存区域中写入所述业务数据;
[0011]所述方法还包括:向所述应用程序提供所述共享内存区域中的所述业务数据。
[0012]在一种可能的实施方式中,该方法还包括:生成所述系统调用请求的唯一标识,其中所述IO请求事件和所述IO完成事件还包括所述唯一标识;根据所述唯一标识在所述IO完成队列中轮询所述IO完成事件。
[0013]在一种可能的实施方式中,接收运行在可信执行环境中的应用程序发起的系统调用请求之前,还包括:通过运行在可信执行环境外的业务程序,初始化所述IO请求队列、所述IO完成队列以及所述共享内存区域,并触发系统内核启动用于轮询所述IO请求队列的轮询线程。
[0014]在一种可能的实施方式中,该方法还包括:通过运行在可信执行环境外的业务程序,获取用于访问所述IO请求队列、所述IO完成队列以及所述共享内存区域的配置信息。
[0015]在一种可能的实施方式中,所述向存储在可信执行环境外的IO请求队列写入IO请求事件,具体包括:获取用于访问存储在可信执行环境外的IO请求队列的线程锁,通过该线程锁向所述IO请求队列写入所述IO请求事件。
[0016]在一种可能的实施方式中,所述系统调用请求的类型以下各种类型中的任意一种:read、write、readv、writev、fsync、poll、send_msg、recv_msg、openat、close、accept、connect、epoll_ctl、send以及recv。
[0017]第二方面,提供了一种面向可信执行环境的系统调用处理装置,该装置可以部署在可信执行环境中。该装置至少包括:请求接收单元,用于接收运行在可信执行环境中的应用程序发起的系统调用请求;其中,所述系统调用请求用于请求向目标文件写入业务数据,或者用于请求从目标文件中读取业务数据。数据写入单元,用于向可信执行环境外的共享内存区域写入所述系统调用请求,以及向存储在可信执行环境外的IO请求队列写入IO请求事件;其中,所述IO请求事件包括所述系统调用请求在所述共享内存区域中的第一地址以及所述共享内存区域中用于存储业务数据的第二地址,使系统内核根据所述IO请求事件处理所述系统调用请求,并向存储在可信执行环境外的IO完成队列写入IO完成事件,所述IO
完成事件包括系统内核对所述IO请求的处理结果。数据提供单元,用于至少向所述应用程序提供所述IO完成事件中的所述处理结果。
[0018]在一种可能的实施方式中,所述系统调用请求用于请求向目标文件写入业务数据时,所述数据写入单元还用于根据所述本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向可信执行环境的系统调用处理方法,包括:接收运行在可信执行环境中的应用程序发起的系统调用请求;其中,所述系统调用请求用于请求向目标文件写入业务数据,或者用于请求从目标文件中读取业务数据;向可信执行环境外的共享内存区域写入所述系统调用请求,以及向存储在可信执行环境外的IO请求队列写入IO请求事件;其中,所述IO请求事件包括所述系统调用请求在所述共享内存区域中的第一地址以及所述共享内存区域中用于存储业务数据的第二地址,使系统内核根据所述IO请求事件处理所述系统调用请求,并向存储在可信执行环境外的IO完成队列写入IO完成事件,所述IO完成事件包括系统内核对所述IO请求的处理结果;至少向所述应用程序提供所述IO完成事件中的所述处理结果。2.根据权利要求1所述的方法,其中,所述系统调用请求用于请求向目标文件写入业务数据时,所述方法还包括:根据所述系统调用请求向所述共享内存区域的所述第二地址写入业务数据;其中,所述系统内核具体用于根据所述IO请求事件从所述共享内存区域的所述第一地址读取所述系统调用请求,以及从所述第二地址读取所述业务数据,并根据所述系统调用请求向目标文件写入所述业务数据。3.根据权利要求1所述的方法,其中,所述系统调用请求用于请求从目标文件中读取业务数据时,所述系统内核具体用于根据所述IO请求事件从所述共享内存区域的所述第一地址读取所述系统调用请求,根据所述系统调用请求从目标文件中读取业务数据,并根据所述第二地址向所述共享内存区域中写入所述业务数据;所述方法还包括:向所述应用程序提供所述共享内存区域中的所述业务数据。4.根据权利要求1所述的方法,其中,还包括:生成所述系统调用请求的唯一标识;其中,所述IO请求事件和所述IO完成事件还包括所述唯一标识;根据所述唯一标识在所述IO完成队列中轮询所述IO完成事件。5.根据权利要求1所述的方法,其中,接收运行在可信执行环境中的应用程序发起的系统调用请求之前,还包括:通过运行在可信执行环境外的业务程序,初始化所述IO请求队列、所述IO完成队列以及所述共享内存区域,并触发系统内核启动用于轮询所述IO请求队列的轮询线程。6.根据权利要求5所述的方法,其中,还包括:通过运行在可信执行环境外的业务程序,获取用于访问所述IO请求队列、所述IO完成队列以及所述共享内存区域的配置信息。7.根据权利要求1所述的方法,其中,所述向存储在可信执行环境外的IO请求队列写入IO请求事件,具体包括:获取用于访问存储在可信执行环境外的IO请求队列的线程锁,通过该线程锁向所述IO请求队列写入所述IO请求事件。8.根据权利要求1至7中任一所述的方法,其中,所述系统调用请求的类型以下各种类型中的任意一种:read、write、readv、writev、fsync、poll、send_msg、recv_msg、openat、close、accept、connect、epoll_ctl、send以及recv。9.一种面向可信执行环境的系统调用处理装置,包括:请求接收单元,用于接收运行在可信执行环境中的应用程序发起的系统调用请求;其中,所述系统调用请求用于请求向目标文件写入业务数据,或者用于请求从目标文件中读取业...

【专利技术属性】
技术研发人员:王烁程闫守孟田洪亮顾宗敏
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1