一种基于TEE规范的安全应用中远程函数调用的方法与流程

文档序号:33820074发布日期:2023-04-19 19:00阅读:55来源:国知局
一种基于TEE规范的安全应用中远程函数调用的方法与流程

本发明涉及一种远程函数调用的方法,尤其是涉及一种基于tee规范的安全应用中远程函数调用的方法。


背景技术:

1、国际标准组织(global platform,gp)定义了一套标准的可信执行环境(trustedexecution environment,tee)内安全应用的执行模型和与安全应用通信的接口规范。在该套模型中,安全应用(trusted application,ta)的使用者被称为客户应用(clientapplication,ca);安全应用以类似客户端-服务端的模式向客户应用提供服务。在处理客户应用的请求的过程中,安全应用可以调用global platform internal api(国际标准组织制定的网络接口规范)定义的接口,以满足具体一些业务的基础需求,比如存储功能,密钥使用,内存管理等。

2、global platform internal api所开放的接口拥有较高的通用性。但相对于富执行环境(rich execution environment,ree)所提供的接口(如posix api),其实现的功能是极为有限的。而随着安全应用内部的逻辑日益复杂,规范中定义的接口已经不太能够满足开发的需求。

3、目前安全应用的开发者一般需要手动将所需的功能从富执行环境中的实现移植到可信执行环境的安全应用中。但这种方法存在几个问题:1)对开发者的开发水平拥有相对较高的要求;2)增加了可信执行环境内的资源要求;3)部分需要移植的功能其本身对操作系统的底层特性存在要求,而目前可信执行环境内的操作系统无法满足这一要求。

4、同时,在一个安全应用的完整业务内,不同的业务逻辑的安全要求是存在差异的。可能存在部分业务逻辑(比如网络包的发送等)的安全要求相对较低,可以直接在富执行环境中执行。因此,对于该类型的业务逻辑,与其将其完整地移植进入可信执行环境,直接由可信执行环境内的应用调用富执行环境内的对应功能是节省资源和降低开发难度的较佳选择。

5、然而,目前的global platform接口规范使得上述方法难以实现。这是因为,该规范不允许安全应用在处理请求的过程中临时返回并调用富执行环境内的功能。因此,现有的方案通常需要对整个安全应用的业务逻辑进行细粒度的拆分,这实际上增加了整个安全方案的复杂度,并且其本身的安全性也不高。


技术实现思路

1、本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于tee规范的安全应用中远程函数调用的方法,实现在global platform安全应用内随时可通过远程调用使用富执行环境内功能。

2、本发明的目的可以通过以下技术方案来实现:

3、一种基于tee规范的安全应用中远程函数调用的方法,所述的方法包括以下步骤:

4、1)客户应用调用teec_invokecommand,安全应用备份入口函数上下文,进入步骤2);

5、2)安全应用执行业务逻辑并判断是否需要远程函数调用,若否,则安全应用业务逻辑执行完成,返回调用结果给客户应用;若是,则安全应用封装调用参数并备份中断函数上下文,快速从安全应用中返回客户应用,执行步骤3);

6、3)客户应用解析调用参数、系统调用和封装调用结果,并再次调用teec_invokecommand,执行步骤4);

7、4)安全应用获取远程函数调用上下文,并恢复调用现场,解析远程调用结果,执行步骤2)。

8、进一步地,所述的步骤1)具体为:

9、101)在安全应用中分配内存,创建一个远程函数跳转上下文实例;

10、102)将ta_invokecommandentrypoint传入的会话上下文、命令id和命令参数备份至远程函数跳转上下文实例中;

11、103)跳转至入口记录函数。

12、进一步地,所述的步骤103)具体为:

13、1031)、备份除了程序计数器寄存器之外的所有通用寄存器;

14、1032)、将链接寄存器的值压入栈中,并依次将r0、r1、r2寄存器的值赋为r1、r2、r3寄存器的值,跳转至真实的业务逻辑中;

15、1033)、将栈指针寄存器的值减去指定值,增加入口记录函数的栈帧尺寸;

16、1034)、跳转至处理真正业务逻辑的函数入口,执行步骤2)。

17、进一步地,所述的入口记录函数接收4个参数,包括远程函数跳转上下文实例中的入口函数上下文、远程函数跳转上下文中备份的会话上下文、远程函数跳转上下文中备份的命令id和远程函数跳转上下文中备份的命令参数。

18、进一步地,所述的步骤2)具体为:

19、201)、获得当前的远程函数调用上下文;

20、202)、将需要传至富执行环境的函数的参数序列化,并将序列化后的内容拷贝至远程函数调用上下文中的远程函数调用请求参数中;

21、203)、调用快速中断函数,并备份中断函数上下文,从安全应用快速返回;其中,快速中断函数接受远程函数调用上下文中的中断函数上下文作为参数,采用汇编实现。

22、进一步地,所述的步骤203)具体为:

23、2031)、将除程序计数器寄存器之外的所有通用寄存器备份至中断函数上下文对应的结构体中;

24、2032)、通过内存拷贝将入口记录函数的下一个栈帧到快速中断函数前的所有的栈内容备份至远程函数调用上下文的栈备份空间中;

25、2033)、根据远程函数调用上下文中的入口函数上下文的内容设置通用寄存器的值;

26、2034)、将r0复制为一个预先定义的远程函数调用请求魔数,表示此次函数返回的原因为远程函数调用,其实际的业务逻辑尚未执行完成;

27、2035)、将链接寄存器内容赋给程序计数器寄存器,构成入口记录函数返回的位置的跳转,并返回远程函数调用请求魔数。

28、进一步地,所述的步骤3)具体为:

29、入口记录函数返回处判断返回值,若返回值为远程函数调用请求魔数,则安全应用直接返回;在客户应用中根据安全应用的返回值和返回参数进行富执行环境功能的调用;调用完成后,客户应用将调用结果通过teec_invokecommand重新传回到安全应用中,此时teec_invokecommand的命令id为远程函数调用恢复魔数。

30、进一步地,所述的步骤4)具体为:

31、401)、根据传入参数中获取的上下文id获得指定的远程函数调用上下文;

32、402)、调用恢复上下文函数,其中恢复上下文函数接受远程函数调用上下文中的中断函数上下文作为参数,采用汇编实现;

33、403)、在快速中断函数返回的位置,根据返回值判断远程函数调用是否成功;若为非0,则远程函数调用失败;若为0,则根据预先定义的规则从远程调用上下文中的远程调用恢复缓冲区中获得远程调用函数的返回值以及其他数据的更新;

34、404)、安全应用继续执行。

35、进一步地,所述的步骤402)具体为:

36、4011)、根据远程函数调用上下文中的栈备份空间,恢复从入口记录函数的下一个栈帧到中断记录函数的栈底的所有的栈内容;

37、4012)、修改刚才恢复的栈内容的顶部,将备份链接寄存器的位置的数据替换为当前的链接寄存器的值;

38、4013)、根据远程函数调用上下文中的中断函数上下文设置当前通用寄存器的值;

39、4014)、将r0寄存器的值赋为0;

40、4015)、将链接寄存器的值赋给程序计数器寄存器,构成向快速中断函数返回的位置的跳转,且返回值为0。

41、进一步地,所述的安全应用向所述的客户应用传递的参数包括:远程函数调用上下文的id、唯一描述远程函数调用的函数id和按照远程函数调用的参数顺序的参数;所述的客户应用向所述的安全应用传递的参数包括:远程函数调用上下文的id、返回内容的序列化后内容和所有传出类型参数的序列化后内容。

42、与现有技术相比,本发明具有以下有益效果:

43、一、本发明通过对于c语言进行函数调用过程中的栈帧进行非标准的操作,使得安全应用能够绕过函数调用过程中栈帧先进后出的限制,实现在执行过程中跳转至最外层函数的入口位置,从而实现在执行过程中临时中断并回到富执行环境的效果,并在最外层函数入口处跳转至上次执行过程中中断的位置,从而实现从富执行环境返回并继续从上次中断位置继续执行的效果。

44、二、本发明在遵循global platform规范且不要求可信执行环境提供任何系统层面支持的前提下,允许安全应用随时通过远程调用方式使用富执行环境内的功能,满足复杂的安全应用业务逻辑的同时并没有提升安全应用的开发难度。

45、三、本发明定义了安全应用通过远程调用富执行环境功能时参数以及返回结果的传输方法,允许任意类型、任意方向的参数传递。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1