内存页转移方法和函数调用方法与流程

专利2022-06-29  46


本申请是申请日为2017年8月22日,申请号为201710726204.7、发明名称为“一种内存页转移方法”的发明专利申请的分案申请。本发明涉及一种内存页转移方法和函数调用方法,尤其是涉及一种在多个enclave之间进行内存页相互转移和函数调用的方法。
背景技术
:intel的sgx(softwareguardextensions)技术,是intel公司为建立一个安全可靠的程序运行环境而提供的一套软硬件解决方案(包括新产生的17条相关指令,和对应的硬件设施)。与普通程序不同,安全容器(enclave)中的程序是运行在隔离的内存中(称为epc,enclavepagecache),所有非enclave的程序都将无法访问epc,这是由硬件控制的。另外每个enclave的epc物理页面都对应一个控制访问权限的epcm(enclavepagecachemap)结构,只有自身的enclave才能访问自己的epc物理页面,而别的enclave会因为无法通过epcm检查而无法访问该页面,从而达到多个enclave之间的隔离。多个enclave之间的访问隔离虽然强化了软件的安全性,但同时也产生一些问题:1)两个enclave之间无法快速实现函数相互调用,这样容易导致同一个函数在epc内存中存在多个副本,浪费epc内存空间且不便于维护。2)两个enclave之间不能进行快速的数据交换和通讯,这导致一些需要多个enclave协作的高级应用变得复杂和低效。技术实现要素:本发明主要针对安全容器因为为相互隔离而产生的问题,本发明提出一种动态修改物理页面拥有者权限的方法,从而可以实现:1)两个enclave之间可以快速相互调用函数2)两个enclave可以快速进行数据交换和通讯enclave之间由于相互隔离导致的上述不足之处。为实现上述目的,本发明提供了一种内存页转移方法,方法包括:处理器接收到第一安全容器enclave调用第二安全容器函数的请求;确定第一安全容器对应的待转移的安全内存epc页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;以第一安全容器为当前安全容器,第二安全容器为目标安全容器,在第一安全容器中调用跨安全容器跳转eajmp指令来传递指令参数;找到安全内存页对应的安全内存控制表epcm,将其中的安全内存页归属字段enclavesecs内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段enclaveaddress内容由当前线性地址修改为目标线性地址。优选的,方法还包括:第一安全容器与第二安全容器进行相互认证,如果认证成功,则相互交换各自安全容器身份标签enclaveid、第一线性地址和第二线性地址,以及共享随机数。优选的,跨安全容器跳转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。优选的,跨安全容器跳转eajmp指令参数分两部分传递;目标安全容器身份标签target_enclave_id存放在约定好的寄存器传递;其余参数存放在待转移的安全内存页传递。优选的,待转移的安全内存页还存放调用函数所需要的参数信息和函数执行结果。优选的,还包括:第二安全容器读取转移过来的安全内存epc页面上的安全容器跳转eajmp指令的指令参数;通过目标安全容器的函数编号target_enclave_func)到对应函数,并根据目标安全容器的线程控制信息target_enclave_tcs运行该函数;将函数的处理结果存放在待转移的安全内存epc页面上。优选的,目标安全容器的线程控制信息target_enclave_tcs为空时,则产生全新的线程控制信息tcs。优选的,还包括:当第二安全容器执行完函数后,以第二安全容器为当前安全容器,以第一安全容器为目标安全容器,在第二安全容器中再次调用跨安全容器跳转eajmp指令,并更新跨安全容器跳转指令内的字段;将安全内存页归属字段enclavesecs的内容由当前安全容器身份标签修改为目标安全容器身份标签,将合法线性地址字段enclaveaddress的内容由当前线性地址修改为目标线性地址;第一安全容器从安全内存页面读取函数执行结果;处理器根据第一安全容器的线程控制信息,重新返回第一安全容器中对应的线程继续执行程序。本发明提供了一种内存页转移方法,包括:确定第一安全容器对应的待转移的安全内存页和所述待转移的安全内存页在第一安全容器的第一线性地址;获取所述待转移的安全内存页在第二安全容器中的第二线性地址;以及将所述待转移的安全内存页的安全内存控制表中的安全内存页归属字段内容从第一安全容器的身份标签修改为第二安全容器的身份标签,以及将合法线性地址字段内容从第一线性地址修改为第二线性地址。优选的,所述方法还可以包括:所述第一安全容器与所述第二安全容器进行相互认证,如果认证成功,则相互交换各自安全容器身份标签、所述第一线性地址和所述第二线性地址,以及共享随机数。优选的,所述方法还可以包括:在所述待转移的安全内存页中存放第一安全容器的身份标签、共享随机数、第二安全容器的函数编号、要转移权限的安全内存页面数量、所述第一线性地址、所述第二线性地址、第一安全容器的线程控制信息以及第二安全容器的线程控制信息中的至少一项。优选的,所述方法还可以包括:在所述待转移的安全内存页中存放函数执行所需要的参数以及函数执行的结果。本发明还提供了一种函数调用方法,包括:接收第一安全容器调用第二安全容器的函数的请求;确定第一安全容器对应的安全内存页和所述安全内存页在第一安全容器的第一线性地址;获取所述安全内存页在第二安全容器中的第二线性地址;将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第一安全容器的身份标签修改为第二安全容器的身份标签,以及将合法线性地址字段内容从第一线性地址修改为第二线性地址;所述第二安全容器根据所述安全内存页中的字段进行函数计算,并将结果存放在所述安全内存页中。优选的,所述方法还可以包括:在所述安全内存页中存放第一安全容器的身份标签、共享随机数、第二安全容器的函数编号、安全内存页面数量、第一线性地址、第二线性地址、第一安全容器的线程控制信息以及第二安全容器的线程控制信息中的至少一项。优选的,所述方法还可以包括:将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第二安全容器的身份标签修改为第一安全容器的身份标签,以及将合法线性地址字段内容从第二线性地址修改为第一线性地址;所述第一安全容器从所述安全内存页读取所述结果;以及根据所述第一安全容器的线程控制信息,重新返回所述第一安全容器中对应的线程。优选的,所述第二安全容器根据所述安全内存页中的字段进行函数计算,可以包括:根据所述安全内存页中的第二安全容器的函数编号字段和第二安全容器的线程控制信息字段,找到需要用到的函数以及线程,通过读取所述安全内存页中的函数执行所需参数,进行函数计算。根据本发明的实施例,通过动态修改epcm中的enclavesecs和enclaveaddress字段,可以实现一个epc页面分时被不同的enclave访问。这样可以达到如下效果:1)不同的enclave之间可以实现函数调用2)不同的enclave之间时间数据传递和通讯。附图说明图1为本发明实施例提供的一种内存页转移方法流程图;图2为根据本发明一个实施例实现一种数据存放示意图;图3为根据本发明一个实施例实现的一种初始状态示意图;图4为根据本发明一个实施例实现的一种传递页面结构示意图;图5为根据本发明一个实施例实现的一种页面返回结构示意图。具体实施方式下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。如图1所示,为本发明实施例提供的一种内存页转移方法流程图。本发明实施例提供了一种内存页转移方法,方法包括:处理器接收到第一安全容器enclave调用第二安全容器函数的请求;确定第一安全容器对应的待转移的安全内存epc页,以及第一线性地址,即待转移的安全内存页在第一安全容器中的线性地址;获取第二线性地址,即待转移的安全内存页在第二安全容器中的线性地址;以第一安全容器为当前安全容器,第二安全容器为目标安全容器,在第一安全容器中调用跨安全容器跳转eajmp指令来传递指令参数;找到安全内存页对应的安全内存控制表epcm,将其中的安全内存页归属字段enclavesecs内容由当前安全容器身份标签修改为目标安全容器身份标签,并将合法线性地址字段enclaveaddress内容由当前线性地址修改为目标线性地址。本发明的核心是动态修改物理页面拥有者权限,而每个epc页面的权限都是由对应的安全内存控制表epcm控制的。epcm的结构如下:只要能够动态修改enclavesecs和enclaveaddress两个字段,就能够把一个enclave的物理页面转移给另一个enclave,从而实现enclave间的函数调用和数据传递。为了加快这一过程的执行速度,定义一条带参数指令跨安全容器跳转eajmp(enclaveacrossjump),该指令的参数分两部分传递(寄存器的传递速率快,但寄存器的数量有限,因此把一部分参数放在物理页面上传递):第一部分参数:通过约定好的寄存器传递,如下:参数名称说明target_enclave_id目标enclave的id第二部分参数,通过物理页面传递,如下:表1:eajmp指令参数说明注意:enclave的id声明为一个enclave对应的安全容器控制信息secs(sgxenclavecontrolstructure)的物理地址。eajmp第二部分参数被存放在待转移页面上,其页面的结构如图2所示。参看图2,其示出根据本发明一个实施例的一种数据存放示意图。如图2所示,在待转移的页面上,存放以下参数:当前enclave的id,共享随机数,目标enclave的函数编号,要转移权限的epc页面数量,当前enclave中将要转移的页面的线性地址,目标enclave中将要接收被转移物理页面的线性地址,当前enclave的线程控制信息tcs(threadcontrolstructure)地址,目标enclave的tcs地址。此外,在该页面中还预留空间来存放函数执行所需要的参数,以及函数执行的结果。如图3所示,为根据本发明一个实施例实现的一种初始状态示意图。在该实施例中,假定安全容器b需要调用安全容器a中的函数,于是处理器执行以下过程。处理器接收到安全容器enclaveb调用安全容器a函数的请求;确定安全容器b对应的待转移的安全内存epc页,以及线性地址b,即待转移的安全内存页在第一安全容器中的线性地址;获取线性地址a,即待转移的安全内存页在第二安全容器中的线性地址。此时,如图3所述,安全容器b与安全容器a进行相互认证,如果认证成功,则相互交换各自安全容器身份标签enclaveid、线性地址b和线性地址a,以及共享随机数。但是此时,应用a中的安全容器a仍然无法访问待转移页面,而安全容器b可以通过安全内存控制表进行对待转移页面的访问。如图4所示,为根据本发明一个实施例实现的一种传递页面示意图。此时,在安全容器b中调用跨安全容器跳转eajmp指令来传递指令参数;找到安全内存页对应的安全内存控制表epcm,将其中的安全内存页归属字段enclavesecs内容由当前安全容器身份标签修改为目标安全容器身份标签,此时也就是将安全容器b标签改为安全容器a标签,并将合法线性地址字段enclaveaddress内容由当前线性地址修改为目标线性地址,也就是将线性地址b改为线性地址a。通过修改上述字段,安全容器a现在可以通过安全内存控制表访问安全内存中的待转移页面。接着,安全容器a根据页面结构中的target_enclave_func和target_enclave_tcs字段,找到应用a中需要用到的函数以及线程,通过读取页面中的函数执行所需参数,进行函数计算。并将结果存放于函数执行结果存放区。此时,应用b中的安全容器b因为没有权限,而无法对该页面进行访问。如图5所示,为根据本发明一个实施例实现的一种页面返回示意图。当安全容器a执行完函数后,以安全容器a为当前安全容器,以安全容器b为目标安全容器,在安全容器a中再次调用跨安全容器跳转eajmp指令,并更新跨安全容器跳转指令内的字段;将安全内存页归属字段enclavesecs的内容由当前安全容器身份标签修改为目标安全容器身份标签,此时也就是将安全容器a标签改回安全容器b标签,将合法线性地址字段enclaveaddress的内容由当前线性地址修改为目标线性地址,也就是将线性地址a改回线性地址b。于是,安全容器b可以从安全内存页面读取函数执行结果。处理器根据安全容器b的线程控制信息,重新返回安全容器b中对应的线程继续执行程序。在此阶段,由于访问权限归还于安全容器b,所以安全容器b可以在此访问该安全页面,而安全容器a无法进行页面访问。通过以上操作,执行了安全容器之间转移页面、返还页面的过程,既实现了安全容器之间函数的调用,又保证了安全容器的运行安全。以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
技术特征:

1.一种内存页转移方法,包括:

确定第一安全容器对应的待转移的安全内存页和所述安全内存页在第一安全容器的第一线性地址;

获取所述安全内存页在第二安全容器中的第二线性地址;以及

将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第一安全容器的身份标签修改为第二安全容器的身份标签,以及将合法线性地址字段内容从第一线性地址修改为第二线性地址。

2.如权利要求1所述的方法,还包括:所述第一安全容器与所述第二安全容器进行相互认证,如果认证成功,则相互交换各自安全容器身份标签、所述第一线性地址和所述第二线性地址,以及共享随机数。

3.如权利要求1或2所述的方法,还包括:

在所述安全内存页中存放第一安全容器的身份标签、共享随机数、第二安全容器的函数编号、待转移的安全内存页面数量、所述第一线性地址、所述第二线性地址、第一安全容器的线程控制信息以及第二安全容器的线程控制信息中的至少一项。

4.如权利要求3所述的方法,还包括:在所述安全内存页中存放函数执行所需要的参数以及函数执行的结果。

5.一种函数调用方法,包括:

接收第一安全容器调用第二安全容器的函数的请求;

确定第一安全容器对应的安全内存页和所述安全内存页在第一安全容器的第一线性地址;

获取所述安全内存页在第二安全容器中的第二线性地址;

将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第一安全容器的身份标签修改为第二安全容器的身份标签,以及将合法线性地址字段内容从第一线性地址修改为第二线性地址;

所述第二安全容器根据所述安全内存页中的字段进行函数计算,并将结果存放在所述安全内存页中。

6.如权利要求5所述的方法,还包括:

在所述安全内存页中存放第一安全容器的身份标签、共享随机数、第二安全容器的函数编号、安全内存页面数量、第一线性地址、第二线性地址、第一安全容器的线程控制信息以及第二安全容器的线程控制信息中的至少一项。

7.如权利要求5或6所述的方法,还包括:

将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第二安全容器的身份标签修改为第一安全容器的身份标签,以及将合法线性地址字段内容从第二线性地址修改为第一线性地址;

所述第一安全容器从所述安全内存页读取所述结果;以及

根据所述第一安全容器的线程控制信息,返回所述第一安全容器中对应的线程。

8.权利要求5至7中任一项所述的方法,其中,所述第二安全容器根据所述安全内存页中的字段进行函数计算,包括:

根据所述安全内存页中的第二安全容器的函数编号字段和第二安全容器的线程控制信息字段,找到需要用到的函数以及线程,通过读取所述安全内存页中的函数执行所需参数,进行函数计算。

技术总结
本公开提供了一种内存页转移方法,包括:确定第一安全容器对应的待转移的安全内存页和所述安全内存页在第一安全容器的第一线性地址;获取所述安全内存页在第二安全容器中的第二线性地址;以及将所述安全内存页的安全内存控制表中的安全内存页归属字段内容从第一安全容器的身份标签修改为第二安全容器的身份标签,以及将合法线性地址字段内容从第一线性地址修改为第二线性地址。本公开了还提供了一种函数调用方法。

技术研发人员:吴宇;杜朝晖;应志伟
受保护的技术使用者:海光信息技术有限公司
技术研发日:2017.08.22
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-22212.html

最新回复(0)