CN114860382A - 数据处理方法及装置 - Google Patents
数据处理方法及装置 Download PDFInfo
- Publication number
- CN114860382A CN114860382A CN202210489810.2A CN202210489810A CN114860382A CN 114860382 A CN114860382 A CN 114860382A CN 202210489810 A CN202210489810 A CN 202210489810A CN 114860382 A CN114860382 A CN 114860382A
- Authority
- CN
- China
- Prior art keywords
- program
- environment
- instance object
- function
- compiled file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/53—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例提供一种数据处理方法及装置,该方法包括:在处理设备中创建隔离环境。在隔离环境中创建第一程序对应的第一实例对象,以及在处理设备的宿主环境中创建第二程序对应的第二实例对象,第一程序和第二程序为通过目标语言编写得到的。在隔离环境中获取第一程序的编译文件,编译文件为通过静态编译工具对第一程序进行编译得到的。通过第一实例对象、第二实例对象以及编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果。通过高级程序语言编写隔离环境下的第一程序,并且采用静态编译工具对隔离环境下的第一程序进行编译,得到编译文件,从而可以有效提升机密计算应用开发的速度和效率。
Description
技术领域
本申请实施例涉及计算机技术,尤其涉及一种数据处理方法及装置。
背景技术
SGX(Software Guard Extensions)是一种CPU架构扩展技术,其实现了安全等级很高的可信执行环境,因此基于SGX技术可以构建安全等级较高的机密计算应用。
目前,现有技术中在基于SGX进行机密计算应用开发的时候,通常是采用C语言或者C++语言等低级程序语言进行开发,不采用高级程序语言进行开发的原因在于,高级程序语言通常需要依赖于复杂的语言虚拟机以及底层支撑平台,然而SGX执行环境存在诸多的能力限制,因此不足以支撑高级程序语言的正常运行。
然而,根据低级程序语言进行开发,因为语言的限制会导致用户需要进行非常多额外的开发工作,从而会导致机密计算应用的开发效率低下。
发明内容
本申请实施例提供一种数据处理方法及装置,以克服机密计算应用的开发效率低下的问题。
第一方面,本申请实施例提供一种数据处理方法,应用于处理设备,包括:
在所述处理设备中创建隔离环境;
在所述隔离环境中创建第一程序对应的第一实例对象,以及在所述处理设备的宿主环境中创建第二程序对应的第二实例对象,所述第一程序和所述第二程序为通过目标语言编写得到的;
在所述隔离环境中获取所述第一程序的编译文件,所述编译文件为通过静态编译工具对所述第一程序进行编译得到的;
通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果。
在一种可能的设计中,通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果,包括:
在所述宿主环境中获取所述第二程序的编译文件;
通过所述第二实例对象在所述第二程序的编译文件中调用第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,所述第一目标函数的函数名和所述第一目标函数的函数名相同;
在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,包括:
通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,得到所述第二目标函数的函数名和参数;
对所述第二目标函数的函数名和参数进行序列化处理,得到所述函数名和参数对应的第一序列化信息;
将所述函数名和参数对应的第一序列化信息写入所述隔离环境的内存。
在一种可能的设计中,在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果,包括:
在所述隔离环境中,对所述第一序列化信息进行反序列化处理,得到所述函数名和所述参数;
通过所述第一实例对象在所述第一程序的编译文件中调用所述函数名对应的第一目标函数,以通过所述第一目标函数对所述参数进行处理,得到所述第一目标函数对应的运行结果。
在一种可能的设计中,将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果,包括:
在所述隔离环境中,将所述运行结果进行序列化处理,得到所述运行结果对应的第二序列化信息;
将所述运行结果对应的第二序列化信息写入所述宿主环境的内存;
在所述宿主环境中,对所述第二序列化信息进行反序列化处理,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述第一实例对象和所述第二实例对象之间存在映射关系;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果之后,所述方法还包括:
若确定所述第二实例对象在所述宿主环境下的内存被回收,则根据所述第一实例对象和所述第二实例对象的映射关系,回收所述第一实例对象在所述隔离环境下的内存。
在一种可能的设计中,在所述隔离环境中获取第一程序的编译文件之前,所述方法还包括:
获取所述宿主环境对应的第二程序,通过所述第二程序对应的原生编译工具对所述第二程序进行编译,得到所述第二程序对应的编译文件;
获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第一程序对应的编译文件。
在一种可能的设计中,所述第二程序对应的编译文件为静态库;
所述获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第二程序对应的编译文件之后,所述方法还包括:
获取所述第二程序对应的依赖库,获取可信执行环境的软件开发工具包;
将所述静态库、所述第二程序对应的依赖库、所述软件开发工具包进行链接,得到所述隔离环境对应的运行时库,其中,所述运行时库用于完成所述第一目标函数的计算处理。
第二方面,本申请实施例提供一种数据处理装置,应用于处理设备,包括:
创建模块,用于在所述处理设备中创建隔离环境;
所述创建模块,还用于在所述隔离环境中创建第一程序对应的第一实例对象,以及在所述处理设备的宿主环境中创建第二程序对应的第二实例对象,所述第一程序和所述第二程序为通过目标语言编写得到的;
获取模块,用于在所述隔离环境中获取所述第一程序的编译文件,所述编译文件为通过静态编译工具对所述第一程序进行编译得到的;
处理模块,用于通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块具体用于:
在所述宿主环境中获取所述第二程序的编译文件;
通过所述第二实例对象在所述第二程序的编译文件中调用第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,所述第一目标函数的函数名和所述第一目标函数的函数名相同;
在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块具体用于:
通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,得到所述第二目标函数的函数名和参数;
对所述第二目标函数的函数名和参数进行序列化处理,得到所述函数名和参数对应的第一序列化信息;
将所述函数名和参数对应的第一序列化信息写入所述隔离环境的内存。
在一种可能的设计中,所述处理模块具体用于:
在所述隔离环境中,对所述第一序列化信息进行反序列化处理,得到所述函数名和所述参数;
通过所述第一实例对象在所述第一程序的编译文件中调用所述函数名对应的第一目标函数,以通过所述第一目标函数对所述参数进行处理,得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块具体用于:
在所述隔离环境中,将所述运行结果进行序列化处理,得到所述运行结果对应的第二序列化信息;
将所述运行结果对应的第二序列化信息写入所述宿主环境的内存;
在所述宿主环境中,对所述第二序列化信息进行反序列化处理,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述第一实例对象和所述第二实例对象之间存在映射关系;
所述处理模块还用于:
在将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果之后,若确定所述第二实例对象在所述宿主环境下的内存被回收,则根据所述第一实例对象和所述第二实例对象的映射关系,回收所述第一实例对象在所述隔离环境下的内存。
在一种可能的设计中,所述处理模块还用于:
在所述隔离环境中获取第一程序的编译文件之前,获取所述宿主环境对应的第二程序,通过所述第二程序对应的原生编译工具对所述第二程序进行编译,得到所述第二程序对应的编译文件;
获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第一程序对应的编译文件。
在一种可能的设计中,所述第二程序对应的编译文件为静态库;
所述处理模块还用于:
在所述获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第二程序对应的编译文件之后,获取所述第二程序对应的依赖库,获取可信执行环境的软件开发工具包;
将所述静态库、所述第二程序对应的依赖库、所述软件开发工具包进行链接,得到所述隔离环境对应的运行时库,其中,所述运行时库用于完成所述第一目标函数的计算处理。
第三方面,本申请实施例提供一种数据处理设备,包括:
存储器,用于存储程序;
处理器,用于执行所述存储器存储的所述程序,当所述程序被执行时,所述处理器用于执行如上第一方面以及第一方面各种可能的设计中任一所述的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如上第一方面以及第一方面各种可能的设计中任一所述的方法。
第五方面,本申请实施例提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上第一方面以及第一方面各种可能的设计中任一所述的方法。
本申请实施例提供一种数据处理方法及装置,该方法包括:在处理设备中创建隔离环境。在隔离环境中创建第一程序对应的第一实例对象,以及在处理设备的宿主环境中创建第二程序对应的第二实例对象,第一程序和第二程序为通过目标语言编写得到的。在隔离环境中获取第一程序的编译文件,编译文件为通过静态编译工具对第一程序进行编译得到的。通过第一实例对象、第二实例对象以及编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果。通过高级程序语言编写宿主环境下的第二程序,以及通过高级程序语言编写隔离环境下的第一程序,并且采用静态编译工具对隔离环境下的第一程序进行编译,得到编译文件,因为静态编译工具可以有效的避免对直接将字节码编译成汇编代码,从而可以有效的避免对语言虚拟机和底层支撑平台的依赖,之后基于第一实例对象、第二实例对象、编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果,从而可以有效实现基于高级程序语言进行机密计算的应用开发,以提升机密计算应用开发的速度和效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据处理方法的场景示意图;
图2为本申请实施例提供的数据处理方法的流程图;
图3为本申请实施例提供的数据处理方法的流程图二;
图4为本申请实施例提供的数据处理方法的处理结构示意图;
图5为本申请实施例提供的第一目标函数和第二目标函数的实现示意图;
图6为本申请实施例提供的数据处理方法的流程示意图;
图7为本申请实施例提供的数据处理装置的结构示意图;
图8为本申请实施例提供的数据处理设备的硬件结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了更好的理解本申请的技术方案,下面对本申请所涉及的相关技术进行进一步的详细介绍。
随着互联网的不断完善与发展,一方面互联网科技带来了诸多的便利,另一方面,由网络和信息系统构成的网络空间,也面临着日益严峻的安全问题。
因此因特尔推出了SGX(Software Guard Extensions,软件防护扩展)技术,SGX在不依赖于软件和整个固件的安全情况下,通过隔离出一块可信执行环境,其可以在完全安全的情况下,保护用户关键代码和数据的机密性与完整性不受恶意软件的破坏。
实际上SGX是在原有架构上增加了一组新的指令集和内存访问机制,其是一组CPU指令,可以隔离代码和数据,并形成一块特定的可信区域,保护敏感数据和代码免受外部干扰和篡改。
SGX也是可信执行环境(Trusted Execution Environment,TEE)的解决方案之一,使用SGX构建可信执行环境,使得在其中受保护代码在应用程序内生成签名,并进行身份验证。其将创建一个“容器”,在应用程序的地址空间中划分出一块被保护的区域,为容器内的代码和数据提供机密性和完整性的保护,免受拥有特殊权限的恶意软件的破坏。
SGX的实现需要处理器、内存管理部件、基本输入输出系统(Basic Input OutputSystem,BIOS)、驱动程序、运行时环境等软硬件协同完成.除了提供内存隔离与保护安全属性。
Enclave(飞地)则是SGX最关键的技术,可以理解为一个盒子,在运行过程中,只能外部读取,当权限拥有者从外部写入后,非权限拥有者便无法对其更改,因此加载到enclave中去的代码和数据必须被检查。
当应用程序需要保护的部分加载到Enclave后,SGX可以保护这部分内容不被外部软件所访问。Enclave可以向远程认证者证明自己的身份,并提供必需的功能结构用于安全地提供密钥.用户也可以请求独有的密钥,这个密钥通过结合Enclave身份和平台的身份做到独一无二,可以用来保护存储在Enclave之外的密钥或数据。
基于上述介绍可以确定的是,SGX实现了安全等级很高的可信执行环境,基于该技术可以构建安全等级很高的机密计算应用,一般是基于SGX软件开发工具包(SoftwareDevelopment Kit,SDK)进行开发,比如Intel SGX SDK和OpenEnclave SDK等,现有技术中SGX方案呈现出如下特点:
1、需要将应用拆分成Host(宿主)模块和Enclave(飞地)模块两个部分。其中,Host模块运行在普通环境,Enclave模块则运行在可信环境;
2、安全等级高,只将需要要保护的模块放在Enclave环境执行,有效减小了TCB攻击面。
3、只支持C/C++等低级程序语言;
4、需要开发人员手动定义Enclave定义语言(Enclave Definition Language,EDL)底层接口描述文件,其中,EDL文件是Intel SGX SDK中引入的一种描述机密计算服务接口的文件规范;
5、需要编写Makefile等编译构建文件;
可以理解的是,针对上述提到的第3点至第5点,因为低级程序语言的语言本身所存在的限制,会导致用户需要进行非常多的繁琐或者额外的开发工作,比如说需要编写大量的代码才能够实现相应的功能,再比如说需要手动定义EDL文件、需要编写编译构建文件等等,从而会导致应用开发的效率低下。
针对上述问题,若是可以通过高级程序语言(Java/Go/Python等)进行基于SGX的应用开发,因为高级程序语言具备生态丰富,内存自动回收(Garbage Collections,GC)与开发效率高的特点,因此可以有效的提升应用的开发效率。
但这类高级程序语言通常需要依赖复杂的语言虚拟机,以及Runtime底层支撑平台,由于SGX执行环境存在诸多能力限制,不足以支撑高级程序语言的正常运行。正是因为这个原因,才导致目前都是基于低级程序语言进行基于SGX的应用开发。
针对现有技术中的问题,本申请提出了如下技术构思:采用高级程序语言进行基于SGX的应用开发,同时针对应用程序在Enclave部分的代码,采用静态编译工具进行编译,其中静态编译技术可以避免对复杂语言虚拟机和Runtime运行平台的依赖,从而可以有效的实现采用高级程序语言开发机密计算应用。
在上述介绍内容的基础上,下面对本申请提供的数据处理方法进行详细介绍。
首先结合图1对本申请中的数据处理方法的应用场景进行介绍。图1为本申请实施例提供的数据处理方法的场景示意图。
本申请提供的数据处理方法可以应用于处理设备,其中处理设备比如说可以是服务器、处理器等具备数据处理功能的设备。以及在处理设备中比如说可以包括宿主环境和隔离环境。其中宿主环境就可以理解为普通的运行环境,而隔离环境就可以理解为上述介绍的Enclave对应的机密环境。
基于图1介绍的场景,下面结合具体的实施例对本申请提供的数据处理方法进行介绍。图2为本申请实施例提供的数据处理方法的流程图。
如图2所示,该方法包括:
S201、在处理设备中创建隔离环境。
在本实施例中,处理设备中的宿主环境原本就是存在的,而隔离环境需要进行创建才能够产生。因此本实施例中可以在处理设备中创建隔离环境,其创建隔离环境就可以理解为创建一个Enclave。
在一种可能的实现方式中,比如说可以在宿主环境下,调用TEE SDK提供的底层接口,从而在处理设备中创建Enclave执行环境,也就是本实施例中提到的隔离环境。其中调用的底层接口就是用于创建隔离环境的接口。在隔离环境中就可以进行相应的机密计算。
S202、在隔离环境中创建第一程序对应的第一实例对象,以及在处理设备的宿主环境中创建第二程序对应的第二实例对象,第一程序和第二程序为通过目标语言编写得到的。
基于上述介绍可以确定的是,Host-Enclave编程模型,会将机密计算的应用程序分割成Host与Enclave两部分,其中Host模块就运行在宿主环境中,Enclave模块就运行在隔离环境中。
相应的,在应用程序的开发阶段,针对隔离环境就编写有第一程序,以及针对宿主环境就编写有第二程序,其中第一程序和第二程序分别用于实现各自对应的环境下的操作。本实施例中,第一程序和第二程序均是通过目标语言编写得到的。其中目标语言可以是上述介绍的高级程序语言,高级程序语言是指抽象层次较高的计算机编程语言,比如说Java语言、Go语言、Python语言等等,本实施例对此目标语言的具体实现不做限制。
以及,高级程序语言可以采用面向对象编程,那么在执行相应的代码的时候,就需要首先创建对象,然后再基于对象执行相应的数据处理。
因此本实施例中,可以在隔离环境中创建第一程序所对应的第一实例对象,比如说第一程序是通过Java编写的,那么当前的第一程序对应的第一实例对象就可以是Java对象。以及,本实施例中的第一实例对象是隔离环境中的实例对象,其还可以理解为可信服务对象,其用来完成真正的数据处理操作。
同时,本实施例中可以在宿主环境中创建第二程序所对应的第二实例对象。类似的,比如说第二程序是通过Java编写的,那么当前的第二程序对应的第二实例对象就可以是Java对象。以及,本实施例中的第二实例对象是宿主环境中的实例对象,其还可以理解为可信服务代理对象,其用来完成数据的管理、传输等等。
以及当前的处理目的是,在隔离环境中进行数据处理,得到运行结果,然后在宿主环境中获取到隔离环境下的运行结果。因此在一种可能的实现方式中,在隔离环境中创建第一实例对象,在宿主环境总创建第二实例对象之后,还可以建立第一实例对象和第二实例对象之间一对一的映射关系,以保证后续可以通过第二实例对象,得到在隔离环境中第一实例对象调用函数所确定的运行结果。
S203、在隔离环境中获取第一程序的编译文件,编译文件为通过静态编译工具对第一程序进行编译得到的。
以及可以理解的是,在完成隔离环境对应的第一程序的开发,以及宿主环境对应的第二程序的开发之后,还需要针对第一程序和第二程序进行编译,得到相应的编译文件,其中编译是为了将程序设计语言书写的源程序,翻译成等价的语言格式的目标程序,以保证计算机可以实现相应的数据处理。
因此本实施例中还可以在隔离环境中获取得到第一程序的编译文件,其中第一程序的编译文件,可以是通过静态编译工具对第一程序进行编译得到的。
比如说第一程序是通过Java编写的,那么静态编译工具可以是Java的静态编译工具,其中Java的静态编译工具是一种在运行前,就将Java字节码直接编译成汇编代码的方法。
S204、通过第一实例对象、第二实例对象以及编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果。
可以理解的是,第一程序是隔离环境所对应的程序,在应用开发的过程中,需要在第一程序中编写多个函数,以实现应用相应的功能。以及在不同的时刻和不同的情况下,用户可能需要调用第一程序中的不同函数,以实现当前情况下所需要的功能。
在一种可能的实现方式中,假设本实施例中需要确定第一程序中的第一目标函数所对应的运行结果。本实施例对第一运行函数具体是哪一个函数不做限制,其可以根据用户的实际需求进行相应的选择和设置。
以及可以理解的是,第一程序是隔离环境所对应的程序,第一程序中的第一目标函数所对应的运行结果也是在隔离环境下处理得到的,这样可以有效保证数据处理的安全性和机密性。进一步的,本实施例中需要在宿主环境下获取到第一目标函数对应的运行结果。
因此在一种可能的实现方式中,本实施例可以根据上述创建的宿主环境下的第二实例对象,调用隔离环境下的第一实例对象,基于编译文件完成其中的第一目标函数的处理,从而得到运行结果,进而在宿主环境下得到第一目标函数对应的运行结果。从而可以有效实现应用的机密计算,并且可以有效实现对机密计算的结果的获取。
本申请实施例提供的数据处理方法,包括:在处理设备中创建隔离环境。在隔离环境中创建第一程序对应的第一实例对象,以及在处理设备的宿主环境中创建第二程序对应的第二实例对象,第一程序和第二程序为通过目标语言编写得到的。在隔离环境中获取第一程序的编译文件,编译文件为通过静态编译工具对第一程序进行编译得到的。通过第一实例对象、第二实例对象以及编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果。通过高级程序语言编写宿主环境下的第二程序,以及通过高级程序语言编写隔离环境下的第一程序,并且采用静态编译工具对隔离环境下的第一程序进行编译,得到编译文件,因为静态编译工具可以有效的避免对直接将字节码编译成汇编代码,从而可以有效的避免对语言虚拟机和底层支撑平台的依赖,之后基于第一实例对象、第二实例对象、编译文件,在宿主环境中确定第一程序中的第一目标函数对应的运行结果,从而可以有效实现基于高级程序语言进行机密计算的应用开发,以提升应用开发的速度和效率。
在上述介绍内容的基础上,下面结合图3-图5对本申请提供的数据处理方法进行进一步的详细介绍。图3为本申请实施例提供的数据处理方法的流程图二,图4为本申请实施例提供的数据处理方法的处理结构示意图,图5为本申请实施例提供的第一目标函数和第二目标函数的实现示意图。
如图3所示,该方法包括:
S301、在处理设备中创建隔离环境。
其中,S301的实现方式与上述介绍的S201的实现方式类似,此处对具体的实现方式不再进行赘述。
更进一步需要说明的是,尽管本实施例中的第一程序和第二程序都是通过高级程序目标语言编写的,但是SGX的底层处理仍然是低层程序语言来完成的。
同时,高级程序语言和低级程序语言之间存在转换机制,比如说Java对应的转换机制就是Java原生接口(Java Native Interface,JNI)机制,Go语言对应的转换机制就是CGO机制。因此,在处理设备中创建隔离环境之前,比如说还可以在宿主环境中通过NativeCall(也就是上述介绍的语言转换机制),从高级程序语言上下文切换到C语言上下文。之后再利用TEE SDK提供的底层接口,在处理设备中创建隔离环境。
S302、在隔离环境中创建第一程序对应的第一实例对象,以及在处理设备的宿主环境中创建第二程序对应的第二实例对象,第一程序和第二程序为通过目标语言编写得到的。
其中,S302的实现方式与上述介绍的S202的实现方式类似,此处不再赘述。
例如可以结合图4对第一程序和第二程序进行进一步的理解,如图4所示,例如可以在开发阶段,通过高级程序语言编写项目文件。编写的项目文件可以包括,隔离环境对应的第一程序(可以理解为Enclave模块),宿主环境对应的第二程序(可以理解为Host模块)。
以及,在项目文件中还可以包括结果对应的接口程序,也就是图4中所述的api.xx。其中,接口程序采用面向接口编程,秉承可信计算及服务的理念,在接口程序中可以包括定义的一系列接口。
以及,在隔离环境对应的第一程序中,包括在接口程序中定义的一系列接口所定义的服务,也就是说包括各个接口所对应的具体功能的实现。以及,在宿主环境对应的第二程序中,主要包括Enclave的管理(创建与删除),实例对象的加载与回收,以及实例对象的调用和结果收集等。也就是说,隔离环境对应的第一程序,主要是用于服务的具体实现的,而宿主环境对应的第二程序,只要是用于服务的相关管理的。
S303、在隔离环境中获取第一程序的编译文件,编译文件为通过静态编译工具对第一程序进行编译得到的。
其中,S303的实现方式与上述介绍的S203的实现方式类似,此处不再赘述。
例如可以结合图4对第一程序的编译文件进行进一步的理解,如图4所示,可以通过静态编译工具(Native Image Compiler)对第一程序进行编译,从而得到第一程序的编译文件,之后就可以在隔离环境下获取第一程序的编译文件。其中第一程序的编译文件还可以理解为Enclave Native Image(飞地本机映像)。
以及结合图4可以理解的是,第一程序的编译文件是运行在隔离环境的运行时(Enclave Runtime)以及TEE SDK的基础上的。
S304、在宿主环境中获取第二程序的编译文件。
可以理解的是,在完成宿主环境对应的第二程序的开发之后,针对第二程序也会进行编译,以得到第二程序的编译文件。因此本实施例中还可以在宿主环境中获取得到第二程序的编译文件,其中,第二程序的编译文件,可以是通过目标语言的原生编译工具对第二程序进行编译得到的。
其中,因为第二程序是宿主环境对应的代码程序,宿主环境的条件实际上就是处理器的正常条件,因此其是可以支持高级程序语言的编译条件的。
所以可以参照图4进行理解,本实施例中可以通过目标语言的原生编译工具(Original Compiler)对第二程序进行编译,以得到第二程序的编译文件。比如说目标语言是Java,则比如说可以通过Java的原生编译工具对第二程序进行编译,从而得到第二程序的编译文件,其中第二程序的编译文件还可以理解为Host App。
其中第二程序的编译文件还可以理解为在宿主环境下的可运行文件,也就是说基于第二程序的编译文件可以实现第二程序对应的相应数据处理。
以及结合图4可以理解的是,第二程序的编译文件是运行在虚拟机(VirtualManufacturing,VM)或者运行时(runtime)的基础上,以及再底层的基础就是操作系统(Operating System,OS)。
以及,上述的隔离环境和宿主环境都是运行在TEE基础设施(Infrastructure)上的。
S305、通过第二实例对象在第二程序的编译文件中调用第二目标函数,得到第二目标函数的函数名和参数。
以及,在宿主环境中获取到第二程序的编译文件之后,就可以通过第二实例对象在第二程序的编译文件中调用第二目标函数了,其中第一目标函数的函数名和第一目标函数的函数名是相同的。
在一种可能的实现方式中,用户可以在运行程序中编写好需要调用的目标函数的函数名,之后就可以根据程序中的函数名,在第二程序的编译文件中调用第二目标函数。
可以理解的是,本实施例中是需要在宿主环境中确定第一程序中的第一目标函数的运行结果,但是第一目标函数是隔离环境对应的第一程序中的,在宿主环境中无法直接访问到第一目标函数。
因此参照图5,在开发过程中,可以在第二程序中编写第二目标函数,其中第二目标函数的函数名和第一目标函数的函数名是相同的,但是第一目标函数和第二目标函数中的具体函数内容是不同的。
在隔离环境中的第一目标函数,是用于实现具体的函数功能的,而在宿主环境中的第二目标函数,是用于实现对隔离环境的访问、和隔离环境进行信息传输的。
此处可以结合一个示例进行理解,比如说在第一程序中包括helloworld()这个第一目标函数,以及在第二程序中包括helloworld()这个第二目标函数。其中,第一程序中的helloworld()函数是用于输出(printf)“hello,world”这个内容的。而在第二程序中的helloworld()函数是用于作为代理,和宿主环境进行相应的信息交互的。
因此,可以理解的是,在第一程序中存在的函数,在第二程序中都存在对应的函数名相同的函数,只是函数的内容不相同。
其中,在宿主环境中第二程序中的第二目标函数,可以理解为是代理对象方法,用于实现实际的数据处理。以及,在隔离环境中的第一程序中的第一目标函数,可以理解为是真正的可信服务服务对象方法,用于对第一程序中的第一目标方法进行间接调用。
因此本实施例中,在确定第二程序的编译文件之后,可以通过上述创建的第二实例对象,在第二程序的编译文件中调用第二目标函数,其中第二目标函数的具体处理,可以包括获取第二目标函数的函数名以及参数,从而得到第二目标函数的函数名和参数。
S306、对第二目标函数的函数名和参数进行序列化处理,得到函数名和参数对应的第一序列化信息。
以及,第二目标函数的具体处理,还可以包括针对第二目标函数的函数名和参数进行序列化处理,从而得到函数名和参数对应的第一序列化信息。可以理解的是,宿主环境和隔离环境在进行信息交互时,都是需要进行序列化处理,得到序列化的信息,然后再进行相应的数据传输。
S307、将函数名和参数对应的第一序列化信息写入隔离环境的内存。
在得到函数名和参数所对应的第一序列化信息之后,可以将函数名和参数所对应的第一序列化信息写入隔离环境的内存,从而实现将函数名和参数从宿主环境传输给隔离环境。
在一种可能的实现方式中,比如说可以通过eacll(Enclave call)进入隔离环境(Enclave),从而实现将第一序列化信息写入隔离环境的内存。
S308、在隔离环境中,对第一序列化信息进行反序列化处理,得到函数名和参数。
在将第一序列化信息写入隔离环境的内存之后,例如可以在隔离环境中对第一序列化信息进行反序列化处理,从而可以在隔离环境中得到上述介绍的函数名和参数。
S309、通过第一实例对象在第一程序的编译文件中调用函数名对应的第一目标函数,以通过第一目标函数对参数进行处理,得到第一目标函数对应的运行结果。
其中,第一目标函数的函数名和第二函数名是一样的,因此在确定函数名之后,比如说可以根据函数名,通过第一实例对象在第一程序的编译文件中调用函数名对应的第一目标函数,从而通过第一目标函数对参数进行处理,进而得到第一目标函数对应的运行结果。
在一种可能的实现方式中,上述介绍的实现机制可以是高级程序语言的反射机制,其还可以理解为反射调用,是一种在运行时通过方法名对方法进行调用的技术。更为具体的,比如说可以是通过高级程序语言的反射机制,根据函数名动态查询第一目标函数的目标地址,然后根据第一目标函数的目标地址,通过第一实例对象调用第一目标函数,以通过第一目标函数对参数进行处理,得到第一目标函数对应的运行结果。
其中,将高级程序语言的反射调用的特性应用在Enclave服务发现机制中,可以在运行时通过函数名动态查询目标方法并执行目标方法,从而可以避免用户手动定义EDL等底层描述文件,进而可以有效降低开发难度。
S310、在隔离环境中,将运行结果进行序列化处理,得到运行结果对应的第二序列化信息。
在隔离环境中确定第一目标函数的运行结果之后,需要将运行结果进一步的返回给宿主环境。以及基于上述介绍可以确定的是,宿主环境和隔离环境之间传输的信息需要进行序列化处理。
因此本实施例中,可以在隔离环境中将运行结果进行序列化处理,从而得到运行结果所对应的第二序列化信息。
S311、将运行结果对应的第二序列化信息写入宿主环境的内存。
在隔离环境中得到运行结果对应的第二序列化信息之后,可以将运行结果所对应的第二序列化信息写入宿主环境的内存中。
S312、在宿主环境中,对第二序列化信息进行反序列化处理,以在宿主环境中得到第一目标函数对应的运行结果。
进一步的,在宿主环境下,再对第二序列化信息进行反序列化处理,从而可以在宿主环境中得到第一目标函数所对应的运行结果。从而可以有效的实现在隔离环境下进行机密计算,同时在宿主环境下可以获取到隔离环境下的机密计算的结果。
例如可以结合图4对上述介绍的实现过程进行进一步的理解,如图4所示,在宿主环境下就可以通过本地调用(native call)对宿主环境进行服务调用,并且宿主环境会相应的返回服务结果。更进一步的,此处的服务调用也可以理解为上述介绍的,宿主环境下的第二实例对象将第一序列化信息写入隔离环境的内存(通过ecall)。以及服务结果也可以理解为上述介绍的,隔离环境下的第一实例对象将第二序列化信息写入宿主环境的内存(通过ocall),从而实现在宿主环境下,获取到预先指定的函数名在隔离环境中对应的第一目标程序的运行结果。
以及在一种可能的实现方式中,在上述的执行过程执行完成,在宿主环境下获取到第一目标函数对应的运行结果之后,高级程序语言的内存自动回收有可能会将第二实例对象在宿主环境下的内存回收。
因为本实施例中的第一实例对象和第二实例对象之间存在映射关系,因此可以根据第一实例对象和第二实例对象的映射关系,回收第一实例对象在隔离环境下的内存,从而可以有效的实现内存自动化管理,进一步提升了运行时的内存安全性。
以及需要说明的是,并不是在宿主环境下获取到第一目标函数的运行结果之后,就会对第二实例对象进行内存回收,针对第二实例对象进行内存回收的具体时刻,是取决于高级程序语言的内存自动回收机制的具体实现的,本实施例对此不做限制。
以及进一步的,在宿主环境下获取第一目标函数对应的运行结果之后,还例如可以在宿主环境下销毁隔离环境(Enclave)上下文,并且回收隔离环境(Enclave)资源。之后在需要隔离环境进行机密计算的时候,再进行隔离环境的创建,以避免资源的长时间无效占用和浪费。
本申请实施例提供的数据处理方法,通过高级程序语言编写隔离环境对应的第一程序,以及通过高级程序语言编写宿主环境对应的第二程序,同时通过高级程序语言的静态编译技术,可以有效避免高级程序语言编写的代码在编译时的,对复杂语言虚拟机和Runtime运行平台的依赖,进而降低了对SGX SDK支撑能力的要求,从而实现了SGX SDK对高级程序语言的支持。以及,采用高级程序语言进行第一程序和第二程序的编写,由于高级程序语言存在内存管理自动化的能力,因此可以进一步的提升运行时的内存安全性。同时,因为高级程序语言的反射调用的机制,可以通过宿主环境中的第二示例对象调用第二目标函数,所确定的函数名,在隔离环境中调用该函数名对应的第一目标函数,从而可以在运行时通过函数名动态的查询第一目标函数,并且调用第一目标函数对参数进行处理,以得到第一目标函数的运行结果,避免了用户需要手动的定义EDL等底层描述文件,进而降低开发难度。
在上述介绍内容的基础上,需要说明的是,在获取第一程序对应的编译文件和第二程序对应的编译文件之前,需要首先获取第一程序,并对第一程序进行编译,以及需要首先获取第二程序,并对第二程序进行编译。
因此,在一种可能的实现方式中,可以在隔离环境中获取第一程序的编译文件之前,获取宿主环境对应的第二程序,并通过第二程序对应的原生编译工具对第二程序进行编译,以得到第二程序对应的编译文件。
以及,可以获取隔离环境对应的第一程序,并通过静态编译工具对第一程序进行编译,以得到第一程序对应的编译文件。
在一种可能的实现方式中,在通过静态编译工具对第一程序进行编译之后,得到的第一程序对应的编译文件可以是native静态库。
以及在隔离环境的处理过程中,其还需要一些依赖库和TEE SDK作为基础,进行相应的机密计算。
因此在得到第二程序对应的编译文件,也就是native静态库之后。本实施例中还可以通过链接器将native静态库、第二程序对应的依赖库、可信执行环境的软件工具开发包,链接在一起,从而生成一个自包含的可信运行时库。其中,运行时库就是用于支持完成上述的第一目标函数的计算处理的,也可以理解,第一目标函数的计算处理是以运行时库为基础处理完成的。
基于上述介绍可以确定的是,在基于低级程序语言进行机密计算应用的开发过程中,通常需要用户编写Makefile文件,以实现相应的编译处理。然而本申请实施例中,采用高级程序语言进行机密计算应用的开发,因为高级程序语言通常具备功能强大的编译工具链生态(Java Maven/Go Mod等),因此不用编写类似Makefile等与应用无关的编译构建文件,进而能帮助用户集中精力开发应用相关代码,以有效提升机密计算应用的开发效率。
下面可以结合图6对本申请实施例提供的数据处理方法进行进一步的详细介绍。图6为本申请实施例提供的数据处理方法的流程示意图。
如图6所示,本申请提供的数据处理方法可以包括三个阶段,分别是开发阶段、编译阶段和运行阶段。
在开发阶段,可以编写宿主环境对应的第二程序,以及编写接口程序,以及编写隔离环境对应的第一程序,这些程序的编写均是通过高级程序语言完成的。
以及,在编译阶段,可以通过原生编译器,对宿主环境对应的第二程序以及接口程序中宿主环境对应的部分进行编译,从而得到宿主环境的可执行文件,其中,宿主环境对应的可执行文件可以理解为第二程序的编译文件。
以及,还可以通过静态编译器,对隔离环境对应的第一程序以及接口程序中隔离环境对应的部分进行编译,从而得到第一程序的编译文件,也可以理解为native静态库,也就是图6中所示的xx.o的文件。
同时,还可以获取TEE SDK以及其他可信依赖库,通过链接器链接静态库、TEE SDK以及其他可信依赖库,从而得到隔离环境的可信运行时库。
基于上述介绍可以确定的是,宿主环境对应的第二程序,以及隔离环境对应的第一程序,都依赖于接口程序,因为宿主环境的程序与隔离环境的程序是不允许存在依赖关系的,因此本申请中通过接口程序,实现了宿主环境的第二程序和隔离环境的第二程序的依赖隔离。
之后,在运行阶段,可以首先启动宿主环境的可执行文件,从而创建隔离环境,并且在隔离环境中,加载隔离环境的可信运行时库。
然后在宿主环境中创建第一实例对象,以及在隔离环境中创建第二示例对象。然后通过第一实例对象在宿主环境中调用第二目标函数,第二目标函数会将函数名和参数对应的第一序列化信息写入隔离环境的内存。
在隔离环境中,可以根据函数名进行反射调用,从而调用第一目标函数,并且基于参数执行第一目标函数的处理,以实现图6所示的服务计算处理,从而得到第一目标函数的运行结果。
然后,隔离环境可以返回运行结果,也就是说将第一目标函数的运行结果的第二序列化信息写入宿主环境的内存中,然后在宿主环境中对第二序列化信息进行反序列化处理,从而实现在宿主环境中获取第一目标函数的运行结果。
在执行完上述过程之后,可以销毁隔离环境,以实现对隔离环境的资源的释放。
综上所述,本申请实施例提供的数据处理方法,通过将静态编译技术应用到可信计算执行环境,解决可信计算平台支撑能力受限的问题,扩展可信应用的程序语言生态。同时,利用高级程序语言的反射特性,避免定义底层接口描述文件,优化编程模型,降低开发难度。同时,采用不同方式对宿主环境对应的第二程序和隔离环境对应的第一程序进行编译,可以更好的适应可信与非可信执行环境。
进一步可以理解的是,本申请提供了一种基于软件防护扩展(Software GuardExtension,SGX)可信平台,支持高级程序语言(Java/Go/Python)进行可信应用开发的编程模型与构建方法。该方法在保持可信计算库(Trusted Computing Base,TCB)攻击面较小的优势下,极大提升可信应用的开发效率与工程构建体验,将SGX可信计算平台应用开发生态从C/C++拓展到Java/Go/Python多种高级程序语言生态。其中,TCB用于提供安全环境的系统的所有硬件、固件和软件组件。
图7为本申请实施例提供的数据处理装置的结构示意图。如图7所示,该装置70包括:创建模块701、获取模块702以及处理模块703。
创建模块701,用于在所述处理设备中创建隔离环境;
所述创建模块701,还用于在所述隔离环境中创建第一程序对应的第一实例对象,以及在所述处理设备的宿主环境中创建第二程序对应的第二实例对象,所述第一程序和所述第二程序为通过目标语言编写得到的;
获取模块702,用于在所述隔离环境中获取所述第一程序的编译文件,所述编译文件为通过静态编译工具对所述第一程序进行编译得到的;
处理模块703,用于通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块703具体用于:
在所述宿主环境中获取所述第二程序的编译文件;
通过所述第二实例对象在所述第二程序的编译文件中调用第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,所述第一目标函数的函数名和所述第一目标函数的函数名相同;
在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块703具体用于:
通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,得到所述第二目标函数的函数名和参数;
对所述第二目标函数的函数名和参数进行序列化处理,得到所述函数名和参数对应的第一序列化信息;
将所述函数名和参数对应的第一序列化信息写入所述隔离环境的内存。
在一种可能的设计中,所述处理模块703具体用于:
在所述隔离环境中,对所述第一序列化信息进行反序列化处理,得到所述函数名和所述参数;
通过所述第一实例对象在所述第一程序的编译文件中调用所述函数名对应的第一目标函数,以通过所述第一目标函数对所述参数进行处理,得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述处理模块703具体用于:
在所述隔离环境中,将所述运行结果进行序列化处理,得到所述运行结果对应的第二序列化信息;
将所述运行结果对应的第二序列化信息写入所述宿主环境的内存;
在所述宿主环境中,对所述第二序列化信息进行反序列化处理,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
在一种可能的设计中,所述第一实例对象和所述第二实例对象之间存在映射关系;
所述处理模块703还用于:
在将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果之后,若确定所述第二实例对象在所述宿主环境下的内存被回收,则根据所述第一实例对象和所述第二实例对象的映射关系,回收所述第一实例对象在所述隔离环境下的内存。
在一种可能的设计中,所述处理模块703还用于:
在所述隔离环境中获取第一程序的编译文件之前,获取所述宿主环境对应的第二程序,通过所述第二程序对应的原生编译工具对所述第二程序进行编译,得到所述第二程序对应的编译文件;
获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第一程序对应的编译文件。
在一种可能的设计中,所述第二程序对应的编译文件为静态库;
所述处理模块703还用于:
在所述获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第二程序对应的编译文件之后,获取所述第二程序对应的依赖库,获取可信执行环境的软件开发工具包;
将所述静态库、所述第二程序对应的依赖库、所述软件开发工具包进行链接,得到所述隔离环境对应的运行时库,其中,所述运行时库用于完成所述第一目标函数的计算处理。
本实施例提供的装置,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。
图8为本申请实施例提供的数据处理设备的硬件结构示意图,如图8所示,本实施例的数据处理设备80包括:处理器801以及存储器802;其中
存储器802,用于存储计算机执行指令;
处理器801,用于执行存储器存储的计算机执行指令,以实现上述实施例中数据处理方法所执行的各个步骤。具体可以参见前述方法实施例中的相关描述。
可选地,存储器802既可以是独立的,也可以跟处理器801集成在一起。
当存储器802独立设置时,该数据处理设备还包括总线803,用于连接所述存储器802和处理器801。
本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上数据处理设备所执行的数据处理方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本申请各个实施例所述方法的部分步骤。
应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。
总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。
上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
Claims (12)
1.一种数据处理方法,其特征在于,应用于处理设备,所述方法包括:
在所述处理设备中创建隔离环境;
在所述隔离环境中创建第一程序对应的第一实例对象,以及在所述处理设备的宿主环境中创建第二程序对应的第二实例对象,所述第一程序和所述第二程序为通过目标语言编写得到的;
在所述隔离环境中获取所述第一程序的编译文件,所述编译文件为通过静态编译工具对所述第一程序进行编译得到的;
通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果。
2.根据权利要求1所述的方法,其特征在于,通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果,包括:
在所述宿主环境中获取所述第二程序的编译文件;
通过所述第二实例对象在所述第二程序的编译文件中调用第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,所述第一目标函数的函数名和所述第一目标函数的函数名相同;
在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
3.根据权利要求2所述的方法,其特征在于,通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,以将所述第二目标函数的函数名和参数写入所述隔离环境的内存,包括:
通过所述第二实例对象在所述第二程序的编译文件中调用所述第二目标函数,得到所述第二目标函数的函数名和参数;
对所述第二目标函数的函数名和参数进行序列化处理,得到所述函数名和参数对应的第一序列化信息;
将所述函数名和参数对应的第一序列化信息写入所述隔离环境的内存。
4.根据权利要求3所述的方法,其特征在于,在所述隔离环境中,通过所述第一实例对象对所述函数名、所述参数以及所述编译文件进行处理,得到所述第一目标函数对应的运行结果,包括:
在所述隔离环境中,对所述第一序列化信息进行反序列化处理,得到所述函数名和所述参数;
通过所述第一实例对象在所述第一程序的编译文件中调用所述函数名对应的第一目标函数,以通过所述第一目标函数对所述参数进行处理,得到所述第一目标函数对应的运行结果。
5.根据权利要求2-4任一项所述的方法,其特征在于,将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果,包括:
在所述隔离环境中,将所述运行结果进行序列化处理,得到所述运行结果对应的第二序列化信息;
将所述运行结果对应的第二序列化信息写入所述宿主环境的内存;
在所述宿主环境中,对所述第二序列化信息进行反序列化处理,以在所述宿主环境中得到所述第一目标函数对应的运行结果。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述第一实例对象和所述第二实例对象之间存在映射关系;
将所述运行结果写入所述宿主环境的内存,以在所述宿主环境中得到所述第一目标函数对应的运行结果之后,所述方法还包括:
若确定所述第二实例对象在所述宿主环境下的内存被回收,则根据所述第一实例对象和所述第二实例对象的映射关系,回收所述第一实例对象在所述隔离环境下的内存。
7.根据权利要求1-6任一项所述的方法,其特征在于,在所述隔离环境中获取第一程序的编译文件之前,所述方法还包括:
获取所述宿主环境对应的第二程序,通过所述第二程序对应的原生编译工具对所述第二程序进行编译,得到所述第二程序对应的编译文件;
获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第一程序对应的编译文件。
8.根据权利要求7所述的方法,其特征在于,所述第二程序对应的编译文件为静态库;
所述获取所述隔离环境对应的第一程序,通过静态编译工具对所述第一程序进行编译,得到所述第二程序对应的编译文件之后,所述方法还包括:
获取所述第二程序对应的依赖库,获取可信执行环境的软件开发工具包;
将所述静态库、所述第二程序对应的依赖库、所述软件开发工具包进行链接,得到所述隔离环境对应的运行时库,其中,所述运行时库用于完成所述第一目标函数的计算处理。
9.一种数据处理装置,其特征在于,应用于处理设备,所述装置包括:
创建模块,用于在所述处理设备中创建隔离环境;
所述创建模块,还用于在所述隔离环境中创建第一程序对应的第一实例对象,以及在所述处理设备的宿主环境中创建第二程序对应的第二实例对象,所述第一程序和所述第二程序为通过目标语言编写得到的;
获取模块,用于在所述隔离环境中获取所述第一程序的编译文件,所述编译文件为通过静态编译工具对所述第一程序进行编译得到的;
处理模块,用于通过所述第一实例对象、所述第二实例对象以及所述编译文件,在所述宿主环境中确定所述第一程序中的第一目标函数对应的运行结果。
10.一种数据处理设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于执行所述存储器存储的所述程序,当所述程序被执行时,所述处理器用于执行如权利要求1至8中任一所述的方法。
11.一种计算机可读存储介质,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至8中任一所述的方法。
12.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210489810.2A CN114860382A (zh) | 2022-05-06 | 2022-05-06 | 数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210489810.2A CN114860382A (zh) | 2022-05-06 | 2022-05-06 | 数据处理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114860382A true CN114860382A (zh) | 2022-08-05 |
Family
ID=82634939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210489810.2A Pending CN114860382A (zh) | 2022-05-06 | 2022-05-06 | 数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114860382A (zh) |
-
2022
- 2022-05-06 CN CN202210489810.2A patent/CN114860382A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5139975B2 (ja) | 複数の経路最適化を備える関数レベルジャストインタイム変換エンジン | |
EP3807797B1 (en) | Pointer authentication and dynamic switching between pointer authentication regimes | |
US9891900B2 (en) | Generation of specialized methods based on generic methods and type parameterizations | |
WO2018192025A1 (zh) | 安卓平台上可执行程序的保护方法 | |
EP3123340B1 (en) | Object oriented marshaling scheme for calls to a secure region | |
JP4562918B2 (ja) | インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成 | |
CN100492387C (zh) | 基于Keil C51的软件保护开发的方法和系统 | |
CN111597514B (zh) | 安卓源代码保护方法和装置 | |
US8200938B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
Andrus et al. | Cider: Native execution of ios apps on android | |
JP5401561B2 (ja) | クラスファイル内にネイティブコードを埋め込むことによる仮想メカニズム内でのプラットフォーム依存ルーチンの適用 | |
WO2022017242A1 (zh) | 在第一系统运行第二系统应用的方法、装置、设备及介质 | |
US7213098B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
Olivier et al. | A syscall-level binary-compatible unikernel | |
US7350193B2 (en) | Procedure invocation in an integrated computing environment having both compiled and interpreted code segments | |
CN114860382A (zh) | 数据处理方法及装置 | |
CN115629795A (zh) | 一种可执行文件的配置方法、装置及电子设备 | |
Wen et al. | WasmAndroid: a cross-platform runtime for native programming languages on Android (WIP paper) | |
Staursky | Lambda Calculus for Binary Security and Analysis | |
CN114185556A (zh) | 一种智能合约部署方法、装置、设备以及存储介质 | |
Powell et al. | C# and the. NET framework: the C++ perspective | |
Nam et al. | Interface Module for Emulator-Based Web Application Execution Engine | |
KR101788296B1 (ko) | 에뮬레이터 기반 웹 어플리케이션 소스코드 보안방법 | |
Thomm | Exploring the use of WebAssembly for isolating Functions in Dandelion | |
Lin et al. | Bypassing portability pitfalls of high-level low-level programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |