一种内存页转移方法转让专利

申请号 : CN201710726204.7

文献号 : CN107392011B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴宇杜朝晖应志伟

申请人 : 海光信息技术有限公司

摘要 :

本发明涉及一种内存页转移方法,方法包括:处理器接收到第一安全容器enclave调用第二安全容器函数的请求;确定第一安全容器对应的待转移的安全内存EPC页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;以第一安全容器为当前安全容器,第二安全容器为目标安全容器,在第一安全容器中调用跨安全容器跳转EAJMP指令来传递指令参数;找到安全内存页对应的安全内存控制表EPCM,将其中的安全内存页归属字段ENCLAVESECS内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段ENCLAVEADDRESS内容由当前线性地址修改为目标线性地址。

权利要求 :

1.一种内存页转移方法,其特征在于,方法包括:

处理器接收到第一安全容器(enclave)调用第二安全容器函数的请求;

确定所述第一安全容器对应的待转移的安全内存(EPC)页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;

获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;

以所述第一安全容器为当前安全容器,所述第二安全容器为目标安全容器,在所述第一安全容器中调用跨安全容器跳转(EAJMP)指令来传递指令参数;

所述跨安全容器跳转(EAJMP)指令将其携带的参数存放在待转移的安全内存页上,并找到所述安全内存页对应的安全内存控制表(EPCM),将其中的安全内存页归属字段(ENCLAVESECS)内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段(ENCLAVEADDRESS)内容由第一线性地址修改为第二线性地址;

所述跨安全容器跳转(EAJMP)指令的指令参数包括以下字段:目标安全容器身份标签(Target_Enclave_ID)、当前安全容器身份标签(Current_Enclave_ID)、共享随机数(Shared_Key)、目标安全容器的函数编号(Target_Enclave_Func)、待转移安全内存页面数量(EPC_PAGE_NUM)、待转移的安全内存页在当前安全容器中的线性地址(Current_Enclave_Page_Vaddr)、待转移的安全内存页在目标安全容器中的线性地址(Target_Enclage_Page_Vaddr)、当前安全容器的线程控制信息(Current_Enclave_TCS)和目标安全容器的线程控制信息(Target_Enclave_TCS);

所述第二安全容器读取转移过来的安全内存(EPC)页面上的安全容器跳转(EAJMP)指令的指令参数;

通过目标安全容器的函数编号(Target_Enclave_Func)找到对应函数,并根据目标安全容器的线程控制信息(Target_Enclave_TCS)运行该函数;

将函数的处理结果存放在待转移的安全内存(EPC)页面上。

2.根据权利要求1所述的方法,其特征在于,方法还包括:

所述第一安全容器与所述第二安全容器进行相互认证,如果认证成功,则相互交换各自安全容器身份标签(enclave ID)、所述第一线性地址和所述第二线性地址,以及共享随机数。

3.根据权利要求1所述的方法,其特征在于,所述跨安全容器跳转(EAJMP)指令参数分两部分传递;

所述目标安全容器身份标签(Target_Enclave_ID)存放在约定好的寄存器传递;

所述当前安全容器身份标签(Current_Enclave_ID)、共享随机数(Shared_Key)、目标安全容器的函数编号(Target_Enclave_Func)、待转移安全内存页面数量(EPC_PAGE_NUM)、待转移的安全内存页在当前安全容器中的线性地址(Current_Enclave_Page_Vaddr)、待转移的安全内存页在目标安全容器中的线性地址(Target_Enclage_Page_Vaddr)、当前安全容器的线程控制信息(Current_Enclave_TCS)和目标安全容器的线程控制信息(Target_Enclave_TCS)存放在待转移的安全内存页传递。

4.根据权利要求3所述的方法,其特征在于,所述待转移的安全内存页还存放调用函数所需要的参数信息和函数执行结果。

5.根据权利要求4所述的方法,其特征在于,所述目标安全容器的线程控制信息(Target_Enclave_TCS)为空时,则产生全新的线程控制信息(TCS)。

6.根据权利要求1所述的方法,其特征在于,还包括:

当所述第二安全容器执行完函数后,以所述第二安全容器为当前安全容器,以所述第一安全容器为目标安全容器,在所述第二安全容器中再次调用跨安全容器跳转(EAJMP)指令,并更新所述跨安全容器跳转指令内的字段;

将安全内存页归属字段(ENCLAVESECS)的内容由当前安全容器身份标签修改为目标安全容器身份标签,将合法线性地址字段(ENCLAVEADDRESS)的内容由第二线性地址修改为第一线性地址;

所述第一安全容器从所述安全内存页面读取函数执行结果;

处理器根据第一安全容器的线程控制信息,重新返回所述第一安全容器中对应的线程继续执行程序。

说明书 :

一种内存页转移方法

技术领域

[0001] 本发明涉及内存页转移方法,尤其是涉及一种在多个enclave之间进行内存页相互转移的方法。

背景技术

[0002] Intel的SGX(Software Guard Extensions)技术,是Intel公司为建立一个安全可靠的程序运行环境而提供的一套软硬件解决方案(包括新产生的17条相关指令,和对应的硬件设施)。与普通程序不同,安全容器(enclave)中的程序是运行在隔离的内存中(称为EPC,Enclave Page Cache),所有非enclave的程序都将无法访问EPC,这是由硬件控制的。另外每个enclave的EPC物理页面都对应一个控制访问权限的EPCM(Enclave Page Cache Map)结构,只有自身的enclave才能访问自己的EPC物理页面,而别的enclave会因为无法通过EPCM检查而无法访问该页面,从而达到多个enclave之间的隔离。
[0003] 多个enclave之间的访问隔离虽然强化了软件的安全性,但同时也产生一些问题:1)两个enclave之间无法快速实现函数相互调用,这样容易导致同一个函数在EPC内存中存在多个副本,浪费EPC内存空间且不便于维护。2)两个enclave之间不能进行快速的数据交换和通讯,这导致一些需要多个enclave协作的高级应用变得复杂和低效。

发明内容

[0004] 本发明主要针对安全容器因为为相互隔离而产生的问题,本发明提出一种动态修改物理页面拥有者权限的方法,从而可以实现:1)两个enclave之间可以快速相互调用函数2)两个enclave可以快速进行数据交换和通讯enclave之间由于相互隔离导致的上述不足之处。
[0005] 为实现上述目的,本发明提供了一种内存页转移方法,方法包括:处理器接收到第一安全容器enclave调用第二安全容器函数的请求;确定第一安全容器对应的待转移的安全内存EPC页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;以第一安全容器为当前安全容器,第二安全容器为目标安全容器,在第一安全容器中调用跨安全容器跳转EAJMP指令来传递指令参数;找到安全内存页对应的安全内存控制表EPCM,将其中的安全内存页归属字段ENCLAVESECS内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段ENCLAVEADDRESS内容由当前线性地址修改为目标线性地址。
[0006] 优选的,方法还包括:第一安全容器与第二安全容器进行相互认证,如果认证成功,则相互交换各自安全容器身份标签enclave ID、第一线性地址和第二线性地址,以及共享随机数。
[0007] 优选的,跨安全容器跳转EAJMP指令的指令参数包括以下字段:目标安全容器身份标签Target_Enclave_ID、当前安全容器身份标签Current_Enclave_ID、共享随机数Shared_Key、目标安全容器的函数编号Target_Enclave_Func、待转移安全内存页面数量EPC_PAGE_NUM、待转移的安全内存页在当前安全容器中的线性地址Current_Enclave_Page_Vaddr、待转移的安全内存页在目标安全容器中的线性地址Target_Enclage_Page_Vaddr)、当前安全容器的线程控制信息Current_Enclave_TCS和目标安全容器的线程控制信息Target_Enclave_TCS。
[0008] 优选的,跨安全容器跳转EAJMP指令参数分两部分传递;目标安全容器身份标签Target_Enclave_ID存放在约定好的寄存器传递;其余参数存放在待转移的安全内存页传递。
[0009] 优选的,待转移的安全内存页还存放调用函数所需要的参数信息和函数执行结果。
[0010] 优选的,还包括:第二安全容器读取转移过来的安全内存EPC页面上的安全容器跳转EAJMP指令的指令参数;通过目标安全容器的函数编号Target_Enclave_Func)到对应函数,并根据目标安全容器的线程控制信息Target_Enclave_TCS运行该函数;将函数的处理结果存放在待转移的安全内存EPC页面上。
[0011] 优选的,目标安全容器的线程控制信息Target_Enclave_TCS为空时,则产生全新的线程控制信息TCS。
[0012] 优选的,还包括:当第二安全容器执行完函数后,以第二安全容器为当前安全容器,以第一安全容器为目标安全容器,在第二安全容器中再次调用跨安全容器跳转EAJMP指令,并更新跨安全容器跳转指令内的字段;将安全内存页归属字段ENCLAVESECS的内容由当前安全容器身份标签修改为目标安全容器身份标签,将合法线性地址字段ENCLAVEADDRESS的内容由当前线性地址修改为目标线性地址;第一安全容器从安全内存页面读取函数执行结果;处理器根据第一安全容器的线程控制信息,重新返回第一安全容器中对应的线程继续执行程序。
[0013] 通过动态修改EPCM中的ENCLAVESECS和ENCLAVEADDRESS字段,可以实现一个EPC页面分时被不同的enclave访问。这样可以达到如下效果:1)不同的enclave之间可以实现函数调用2)不同的enclave之间时间数据传递和通讯。

附图说明

[0014] 图1为本发明实施例提供的一种内存页转移方法流程图;
[0015] 图2为根据本发明一个实施例实现一种数据存放示意图;
[0016] 图3为根据本发明一个实施例实现的一种初始状态示意图;
[0017] 图4为根据本发明一个实施例实现的一种传递页面结构示意图;
[0018] 图5为根据本发明一个实施例实现的一种页面返回结构示意图。

具体实施方式

[0019] 下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
[0020] 如图1所示,为本发明实施例提供的一种内存页转移方法流程图。
[0021] 本发明实施例提供了一种内存页转移方法,方法包括:处理器接收到第一安全容器enclave调用第二安全容器函数的请求;确定第一安全容器对应的待转移的安全内存EPC页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;以第一安全容器为当前安全容器,第二安全容器为目标安全容器,在第一安全容器中调用跨安全容器跳转EAJMP指令来传递指令参数;找到安全内存页对应的安全内存控制表EPCM,将其中的安全内存页归属字段ENCLAVESECS内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段ENCLAVEADDRESS内容由当前线性地址修改为目标线性地址,本实施例中,当前线性地址为第一线性地址,目标线性地址为第二线性地址。
[0022] 本发明的核心是动态修改物理页面拥有者权限,而每个EPC页面的权限都是由对应的安全内存控制表EPCM控制的。EPCM的结构如下:
[0023]字段 说明
VALID 当前这个EPCM是否合法
R/W/X enclave对相应的EPC页是否有读/写/执行权限
ENCLAVESECS 对应EPC页属于哪个enclave
ENCLAVEADDRESS 能够访问对应EPC页的合法虚拟地址
BLOCKED/PENDING/MODIFIED 对应的EPC所处的状态
[0024] 只要能够动态修改ENCLAVESECS和ENCLAVEADDRESS两个字段,就能够把一个enclave的物理页面转移给另一个enclave,从而实现enclave间的函数调用和数据传递。为了加快这一过程的执行速度,定义一条带参数指令跨安全容器跳转EAJMP(Enclave Across Jump),该指令的参数分两部分传递(寄存器的传递速率快,但寄存器的数量有限,因此把一部分参数放在物理页面上传递):
[0025] 第一部分参数:通过约定好的寄存器传递,如下:
[0026]参数名称 说明
Target_Enclave_ID 目标enclave的ID
[0027] 第二部分参数,通过物理页面传递,如下:
[0028]参数名称 说明
Current_Enclave_ID 当前enclave的ID
Shared_Key 共享随机数
Target_Enclave_Func 目标enclave的函数编号
EPC_PAGE_NUM 要转移权限的EPC页面数量
Current_Enclave_Page_Vaddr 当前enclave中将要转移的页面的线性地址Target_Enclage_Page_Vaddr 目标enclave中将要接收被转移物理页面的线性地址Current_Enclave_TCS 当前enclave的TCS(Thread Control Structure)地址Target_Enclave_TCS 目标enclave的TCS地址
[0029] 表1:EAJMP指令参数说明
[0030] 注意:enclave的ID声明为一个enclave对应的安全容器控制信息SECS(SGXEnclaveControlStructure)的物理地址。
[0031] EAJMP第二部分参数被存放在待转移页面上,其页面的结构如图2所示。参看图2,其示出根据本发明一个实施例的一种数据存放示意图。如图2所示,在待转移的页面上,存放以下参数:当前enclave的ID,共享随机数,目标enclave的函数编号,要转移权限的EPC页面数量,当前enclave中将要转移的页面的线性地址,目标enclave中将要接收被转移物理页面的线性地址,当前enclave的线程控制信息TCS(Thread Control Structure)地址,目标enclave的TCS地址。
[0032] 此外,在该页面中还预留空间来存放函数执行所需要的参数,以及函数执行的结果。
[0033] 如图3所示,为根据本发明一个实施例实现的一种初始状态示意图。在该实施例中,假定安全容器B需要调用安全容器A中的函数,于是处理器执行以下过程。
[0034] 处理器接收到安全容器enclave B调用安全容器A函数的请求;确定安全容器B对应的待转移的安全内存EPC页,以及线性地址B,即待转移的安全内存页在第一安全容器中的线性地址;获取线性地址A,即待转移的安全内存页在第二安全容器中的线性地址。此时,如图3所述,安全容器B与安全容器A进行相互认证,如果认证成功,则相互交换各自安全容器身份标签enclave ID、线性地址B和线性地址A,以及共享随机数。但是此时,应用A中的安全容器A仍然无法访问待转移页面,而安全容器B可以通过安全内存控制表进行对待转移页面的访问。
[0035] 如图4所示,为根据本发明一个实施例实现的一种传递页面示意图。
[0036] 此时,在安全容器B中调用跨安全容器跳转EAJMP指令来传递指令参数;找到安全内存页对应的安全内存控制表EPCM,将其中的安全内存页归属字段ENCLAVESECS内容由当前安全容器身份标签修改为目标安全容器身份标签,此时也就是将安全容器B标签改为安全容器A标签,并将合法线性地址字段ENCLAVEADDRESS内容由当前线性地址修改为目标线性地址,也就是将线性地址B改为线性地址A。通过修改上述字段,安全容器A现在可以通过安全内存控制表访问安全内存中的待转移页面。接着,安全容器A根据页面结构中的Target_Enclave_Func和Target_Enclave_TCS字段,找到应用A中需要用到的函数以及线程,通过读取页面中的函数执行所需参数,进行函数计算。并将结果存放于函数执行结果存放区。此时,应用B中的安全容器B因为没有权限,而无法对该页面进行访问。
[0037] 如图5所示,为根据本发明一个实施例实现的一种页面返回示意图。
[0038] 当安全容器A执行完函数后,以安全容器A为当前安全容器,以安全容器B为目标安全容器,在安全容器A中再次调用跨安全容器跳转EAJMP指令,并更新跨安全容器跳转指令内的字段;将安全内存页归属字段ENCLAVESECS的内容由当前安全容器身份标签修改为目标安全容器身份标签,此时也就是将安全容器A标签改回安全容器B标签,将合法线性地址字段ENCLAVEADDRESS的内容由当前线性地址修改为目标线性地址,也就是将线性地址A改回线性地址B。于是,安全容器B可以从安全内存页面读取函数执行结果。处理器根据安全容器B的线程控制信息,重新返回安全容器B中对应的线程继续执行程序。在此阶段,由于访问权限归还于安全容器B,所以安全容器B可以在此访问该安全页面,而安全容器A无法进行页面访问。
[0039] 通过以上操作,执行了安全容器之间转移页面、返还页面的过程,既实现了安全容器之间函数的调用,又保证了安全容器的运行安全。
[0040] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。