一种基于TEE的WebAssembly模型执行引擎制造技术

技术编号:24207212 阅读:13 留言:0更新日期:2020-05-20 15:11
本发明专利技术公开了一种基于TEE的WebAssembly模型执行引擎,所述WebAssembly模型执行引擎包括函数解析、函数执行、内存管理、函数管理功能模块和接口;所述接口包括可信层接口和不可信层接口,可信层接口由Rust编译的初始化函数wasm_init、模型调用函数wasm_call、关闭函数wasm_close组成;可信层接口用于实现功能模块在SGX中执行具体的可信操作;不可信层接口由Rust编译的初始化函数init、模型调用函数call、关闭函数close和C语言编译的可信层的C头文件组成。C头文件用于申明初始化函数init、模型调用函数call、关闭函数close,函数init、call、close用于对应可信层代码的功能封装。本发明专利技术通过采用Intel SGX技术改造数据共享模型执行引擎,确保模型执行过程中数据不可被窃取,实现了一个可信的模型执行引擎。

A web assembly model execution engine based on tee

【技术实现步骤摘要】
一种基于TEE的WebAssembly模型执行引擎
本专利技术属于模型执行引擎设计领域,具体涉及一种基于TEE的WebAssembly模型执行引擎。
技术介绍
目前的WebAssembly虚拟机直接运行在普通环境中,在没有额外保护的情况下执行WebAssembly模型。在云服务器等开放环境中,程序与数据运行在不可信环境,容易收到攻击,无法保证程序与数据的安全。
技术实现思路
本专利技术针对现有技术的不足,提出了一种基于TEE的WebAssembly模型执行引擎,该WebAssembly模型执行引擎在可信环境中执行,能有效保证程序与数据的安全。本专利技术采用的技术方案如下:一种基于TEE的WebAssembly模型执行引擎,所述WebAssembly模型执行引擎包括函数解析、函数执行、内存管理、函数管理功能模块和接口;所述接口包括可信层接口和不可信层接口,可信层接口由Rust编译的初始化函数wasm_init、模型调用函数wasm_call、关闭函数wasm_close组成;可信层接口用于实现功能模块在SGX中执行具体的可信操作;不可信层接口由Rust编译的初始化函数init、模型调用函数call、关闭函数close和C语言编译的可信层的C头文件组成。C头文件用于申明初始化函数init、模型调用函数call、关闭函数close,初始化函数init、模型调用函数call、关闭函数close用于对应可信层代码的功能封装。进一步地,将WebAssembly模型执行引擎封装成SDK,便于外界的调用方便以及程序的可扩展性。进一步地,所述初始化函数init、模型调用函数call、关闭函数close还可以用于实现功能模块中不需要在SGX中执行的功能执行。本专利技术的有益效果是:本专利技术设计并实现了基于可信执行环境的隐私保护技术,通过采用IntelSGX技术改造数据共享模型执行引擎,确保模型执行过程中数据不可被窃取。具体的,我们用IntelSGX改造了WebAssembly虚拟机,实现了一个可信的模型执行引擎。增强了在不可信环境中数据共享的安全性和隐私性。附图说明图1为本专利技术执行引擎的整体架构设计示意图;图2为接口结构示意图。具体实施方式WebAssembly模型执行引擎通常包括函数解析、函数执行、内存管理、函数管理功能模块和接口;目前的WebAssembly虚拟机直接运行在普通环境中,在没有额外保护的情况下执行WebAssembly模型。在云服务器等开放环境中,程序与数据运行在不可信环境,容易收到攻击,无法保证程序与数据的安全。为了赋予WebAssembly模型执行引擎可行性,我们用IntelSGX改造了WebAssembly虚拟机,根据SGX设计规范将接口包括可信层接口和不可信层接口,整体架构设计如图1所示,可信层接口用于实现功能模块在SGX中执行具体的可信操作;不可信层用于实现功能模块中不需要在SGX中执行的功能执行,以及对应可信层代码的功能封装。接口设计的难点在于跨语言调用。开发IntelSGX可信应用需要用到IntelSGXSDK,而IntelSGXSDK是用Rust开发的,因此我们需要先将Rust开发的SGX可信库编译成C库,所以,该平台的开发会涉及到两种语言,先将Rust实现的SGX可信应用在C语言的帮助下编译成.so动态库。具体的接口设计如图2所示,WebAssembly模型执行引擎接口(WASMTrustedLibrary)由可信层接口(Trusted)和不可信层接口(Untrusted)两部分组成。Trusted部分在SGX中实现WebAssembly模型执行引擎(WebAssemblyVM)的初始化wasm_init()、模型调用wasm_call()、关闭wasm_close(),三个函数采用Rust编写。然后,Unstrusted部分对这三个函数做了一层封装,分别是init(),call(),close()。并编写了adaptor.h,它是WebAssemblyVM可信库的C头文件,声明了WebAssemblyVM可信层的接口,用以辅助生成.so动态链接库。最后,将整个WebAssembly模型执行引擎根据应用需求通过语言封装成SDK,即可方便供其他应用调用。本实施方式中,以Golang为例对整个WebAssembly模型执行引擎的接口进行详细阐述。在接口中,用C作为中转语言,通过用C语言编写的可信库的C头文件adapter.h即可实现在rust实现的执行引擎基础上开放Golang接口。具体来说,我们定义了需要暴露给Golang调用的两个虚拟机相关接口:adapter.hvoidinit();voidcall(char*args,intinput_len,char*result,intresult_capacity,int*result_len);其中,close()可自动实现,无需定义。接着,Golang的函数调用到C库后,C库调用wasm虚拟机的untrusted部分接口,以间接实现对trusted部分,也即sgxwasm虚拟机的调用。trusted部分的初始化函数的接口调用设计如下:Wasm.Init()->C.Init()->init_enclave()->sgxwasm_init(enclave_id,retval)trusted部分的调用合约函数的接口调用设计如下:其中,sgxwasm_call()包括部署、加载和调用功能,具体地:1.部署(deploy)wasm的部署,将一个wasm文件部署到本地的BitXMesh节点上,此部分由外部应用发起调用,指定一个wasm文件的路径,经过部署过程后会将wasm文件放置的Enclave的bin目录下同时加载解析得到一个ABIJSON字符串。sgx_enclave_wasm_deploy<P:AsRef<path::Path>>(path:P)->Result<String>参数:pathwasm的路径。返回值:wasmexportedcallablefunctionAPI的ABI,该API是在untrusted部分执行的,该API会将指定的路径下的wasm文件加载到Enclave的bin目录下,同时将wasm加载解析,得到wasmmodule导出的外部可调用函数,后续使用者可以通过该ABI调用wasm的功能。特别注意:wasm支持传入的参数只有整形(i32、i64)和浮点型(f32、f64)。2.加载(load)wasm的加载是将wasm二进制装载到Enclave内部,该过程首先会将wasm读成bytes数组,再加载到内部,加载可以提供一个名词,后续调用通过该名称即可调用。参数:modulewasm的bytes序列name为该w本文档来自技高网...

【技术保护点】
1.一种基于TEE的WebAssembly模型执行引擎,所述WebAssembly模型执行引擎包括函数解析、函数执行、内存管理、函数管理功能模块和接口;其特征在于,所述接口包括可信层接口和不可信层接口,可信层接口由Rust编译的初始化函数wasm_init、模型调用函数wasm_call、关闭函数wasm_close组成;可信层接口用于实现功能模块在SGX中执行具体的可信操作;不可信层接口由Rust编译的初始化函数init、模型调用函数call、关闭函数close和C语言编译的可信层的C头文件组成。C头文件用于申明初始化函数init、模型调用函数call、关闭函数close,初始化函数init、模型调用函数call、关闭函数close用于对应可信层代码的功能封装。/n

【技术特征摘要】
1.一种基于TEE的WebAssembly模型执行引擎,所述WebAssembly模型执行引擎包括函数解析、函数执行、内存管理、函数管理功能模块和接口;其特征在于,所述接口包括可信层接口和不可信层接口,可信层接口由Rust编译的初始化函数wasm_init、模型调用函数wasm_call、关闭函数wasm_close组成;可信层接口用于实现功能模块在SGX中执行具体的可信操作;不可信层接口由Rust编译的初始化函数init、模型调用函数call、关闭函数close和C语言编译的可信层的C头文件组成。C头文件用于...

【专利技术属性】
技术研发人员:尹可挺匡立中李伟邱炜伟胡为
申请(专利权)人:杭州趣链科技有限公司
类型:发明
国别省市:浙江;33

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

1