本发明涉及可信执行环境TEE技术领域,具体涉及一种TEE系统与REE系统配合以实现服务的方法及终端设备。
背景技术:
伴随着终端智能化的快速发展,移动终端越来越多的涉及商业秘密和个人隐私等敏感信息,移动终端也面临各种安全威胁。为了打造更安全的智能终端,TEE(Trusted execution environment,可信执行环境)技术应运而生,TEE创建了一个新的可信任环境,主要应用于安全智能设备,安全支付等领域,在此环境下可以运行涉及敏感资料的应用,TEE是一个独立的运行环境,它与REE(Rich Execution Environment,一般指通用的操作系统)隔离开,它的优势就是将不安全部件的运行与安全部件的运行分离开来,在REE操作系统中执行的攻击或操作系统中运行的应用无法抵达TEE中受保护的软件和数据。
在TEE应用中,由于资源的限制,TEE系统服务可使用的资源有限,或者系统服务的功能有限,当TEE系统没有所需的服务,而又要求服务程序必须在TEE系统中运行时,就需要TEE系统向REE系统申请服务资源,包括服务数据、设备驱动等;当TEE系统服务功能不完整,需要REE系统提供部分功能与之配合时,就需要TEE系统在服务程序执行过程中向REE系统申请部分服务资源,包括服务数据、设备驱动、服务程序等;当TEE系统服务不能单独工作,需要REE系统配合工作时,就需要TEE系统在服务程序执行过程中向REE系统申请相配合的服务,包括设备驱动、服务程序等。
目前,TEE系统服务需要REE侧提供服务支持时,是通过REE侧的监听程序(Listener)来完成TEE侧的请求的,当TEE系统需要REE系统提供服务支持时,TEE系统服务的API(TEE Internal API)会向REE侧的Listener发送特定请求,然后由Listener为TEE代理服务支持。当完成服务支持程序后,Listener向TEE返回处理结果,此时,TEE系统服务API得以返回,用户TA程序得以继续运行。但是该方案的实现依赖于REE侧的监听程序Listener,需要预先在REE侧注册相应的Listener,即需要对REE侧进行改造,具有较大的改造难度。
技术实现要素:
针对现有技术中存在的缺陷,本发明实施例的目的在于提供一种能够克服上述问题或者至少能够部分地解决上述问题的一种TEE系统与REE系统之间的通信方法及一种终端设备。
为实现上述目的,本发明的一个实施例中提供了一种TEE系统与REE系统配合以实现服务的方法,适用于终端设备,所述终端设备支持丰富执行环境REE系统和可信执行环境TEE系统;所述方法包括:
当TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统控制用于运行所述第一可信应用程序TA的虚拟机暂停,并保存所述虚拟机的当前状态信息;
TEE系统向REE系统发送所述第一可信应用TA的服务支持请求;所述服务支持请求包括所述第一可信应用TA所需要的服务支持的相关数据信息;
REE系统接收所述服务支持请求并处理,将处理结果发回到TEE系统;
TEE系统接收所述处理结果,根据所保存的虚拟机的当前设备状态信息恢复所述虚拟机的运行,虚拟机根据所述处理结果继续执行所述第一可信应用TA的后续程序。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,还包括:
位于REE系统的第一用户端应用程序CA向TEE系统发送第一安全服务请求;
TEE系统接收所述第一安全服务请求,根据所述第一安全服务请求,启动所述第一可信应用TA,对所述第一安全服务请求进行处理。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,所述当TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统控制用于运行所述第一可信应用程序TA的虚拟机暂停,包括:
所述第一可信应用TA通过TEE系统的第一内部应用接口TEE Internal API向TEE系统发送应用处理请求;所述应用处理请求与所述服务支持请求相对应;
TEE系统接收所述应用处理请求,当所述应用处理请求需要REE系统的服务支持时,TEE系统在所述第一内部应用接口的Java本地接口JNI中设置虚拟机暂停标记;
TEE系统内运行所述第一可信应用程序TA的虚拟机监测到所述虚拟机暂停标志时,虚拟机暂停运行。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,所述虚拟机的当前设备状态信息包括虚拟机的当前栈帧结构、程序计数器的值和当前时刻的虚拟机快照。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,所述虚拟机的当前状态信息保存于全局变量中。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,所述第一用户端应用程序CA通过TEE客户端应用接口TEE Client API与TEE系统建立会话通道,通过所述会话通道将所述第一安全服务请求发送到TEE系统;
TEE系统通过所述会话通道向REE系统的客户端驱动程序发送所述第一可信应用TA的服务支持请求,REE系统对所述服务支持请求进行处理后,将处理结果通过其客户端驱动程序由会话通道发回到TEE系统。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,所述REE系统中设有命令缓冲区和响应缓存区,所述命令缓冲区用于存储REE系统发送到TEE系统的第一数据,所述响应缓存区用于缓存TEE系统对所述第一数据的响应结果、以及TEE系统需要REE系统进行服务支持时,两者之间的交互数据;所述第一数据包括所述第一安全服务请求的相关信息,所述响应结果包括所述服务支持请求和服务支持请求的处理结果;
TEE系统通过所述会话通道从REE系统的响应缓存区获取所述服务支持请求的处理结果。
进一步,如上所述的一种TEE系统与REE系统配合以实现服务的方法,TEE系统向REE系统发送服务支持请求,包括:TEE系统设置一服务请求标识,TEE系统将所述服务支持请求和所述服务请求标识发送到REE系统;所述服务请求标识用于标识TEE系统需要REE系统的服务支持。
本发明实施例中还提供了一种终端设备,所述终端设备支持丰富执行环境REE系统和可信执行环境TEE系统,所述TEE系统包括:
虚拟机暂停控制模块,用于在TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统控制用于运行所述第一可信应用程序TA的虚拟机暂停,并保存所述虚拟机的当前状态信息;
服务支持请求发送模块,用于向REE系统发送所述第一可信应用TA的服务支持请求;所述服务支持请求包括所述第一可信应用TA所需要的服务支持的相关数据信息;
处理结果接收模块,用于接收REE系统对所述服务支持请求的处理结果;
虚拟机恢复模块,用于根据所保存的虚拟机的当前设备状态信息恢复所述虚拟机的运行,虚拟机根据REE系统发回的处理结果继续执行所述第一可信应用TA的后续程序;
所述REE系统包括:
服务支持请求处理模块,用于接收并处理TEE系统发送的所述服务支持请求,并将处理结果发回到TEE系统。
进一步,如上所述的一种终端设备,所述虚拟机的当前设备状态信息包括虚拟机的当前栈帧结构、程序计数器的值和当前时刻的虚拟机快照。
本发明的有益效果在于:本发明实施例中所提供的TEE系统与REE系统配合以实现服务的方法及终端设备,当TEE系统服务需要REE系统提供服务支持以配合工作时,TEE系统会自动完成从TEE到REE再回到TEE的过程,可以不再依赖REE侧的Listener程序,从而降低了REE侧的改造难度,且实现过程对上层应用来说是透明的,上层应用也无需关心TEE系统服务的实现细节,应用调用TEE系统服务时更加简洁,TEE系统服务的用户接口(开发人员的系统接口)也更加灵活,应用开发者在开发上层应用时,无需关心TEE系统服务的实现细节,开发体验可以得到最大程度的优化。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,附图仅限于示出优选实施方式的目的,而并不认为是本发明的限制,且对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明具体实施方式中一种TEE系统与REE系统配合以实现服务的方法的流程示意图;
图2为本发明具体实施方式中一种终端设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均属于本发明保护的范围。
图1示出了本发明具体实施方式中一种TEE系统与REE系统配合以实现服务的方法的流程示意图,该方法适用于终端设备,所述终端设备支持丰富执行环境REE系统和可信执行环境TEE系统。由图1中可以看出,所述通信方法主要可以包括以下步骤:
步骤S100:位于REE系统的第一用户端应用程序CA向TEE系统发送第一安全服务请求;
步骤S200:TEE系统根据所述第一安全服务请求,启动第一可信应用TA,对所述第一安全服务请求进行处理;
步骤S300:TEE系统控制用于运行其上所运行的第一可信应用程序TA的虚拟机暂停,并保存所述虚拟机的当前状态信息;
步骤S400:TEE系统向REE系统发送所述第一可信应用TA的服务支持请求;
步骤S500:REE系统接收所述服务支持请求并处理,将处理结果发回到TEE系统;
步骤S600:TEE系统接收所述处理结果,根据所保存的虚拟机的当前设备状态信息恢复所述虚拟机的运行,虚拟机根据处理结果继续执行第一可信应用TA的后续程序。
本实施例中,所述TEE系统即可信执行环境TEE的操作系统,位于TEE系统中的程序为可信应用TA,所述REE系统即丰富执行环境REE的操作系统,一般指通用的操作系统。具备TEE的终端设备在开机或重新开机时,为了确保操作安全,先启动TEE系统,再启动一般操作系统REE系统。
位于REE系统中第一用户端应用程序CA(一般指开放操作系统下开发的程序)在运行过程中,如果需要进行安全操作,即需要TEE系统的支持时,第一客户端应用程序CA则向TEE系统发送第一安全服务请求,具体的,第一用户端应用程序CA通过TEE客户端应用接口TEE Client API与TEE系统建立会话通道,将所述第一安全服务请求发送到TEE系统,例如:在进行交易时,REE系统中对应的客户端应用程序需要经由TEE系统提供的可信使用者界面Trusted UI输入卡片密码,传递给后端安全元件产生交易授权资料,再回传给REE的用户端程序进行交易验证。
TEE系统接收到所述第一用户端应用程序CA发送来的所述第一安全请求后,启动其系统中的第一可信应用TA,对所述第一安全服务请求进行相应处理。所述第一可信应用TA即是TEE系统中用于完成所述第一安全请求的应用程序。
在所述第一可信应用TA的运行过程中,第一可信应用TA通过TEE系统的第一内部应用接口TEE Internal API向TEE系统发送应用处理请求,第一可信应用TA只有接收到TEE系统对该应用处理请求的处理结果之后才能够继续运行。TEE系统接收到第一可信应用TA的所述应用处理请求后,当TEE系统可能由于其可使用的资源有限,依靠自身的资源无法单独完成该应用处理请求的处理时,即当所述应用处理请求需要REE系统的服务支持时,TEE系统则需要向REE系统请求服务支持,即TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持。
本实施例中,当TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统首先控制用于运行所述第一可信应用程序TA的虚拟机暂停,并保存所述虚拟机的当前状态信息。其中,所述虚拟机的当前设备状态信息是指用于将虚拟机恢复到当前状态的信息,包括虚拟机的当前栈帧结构(Java帧空间)、程序计数器的值(字节码PC指针)和当前时刻的虚拟机快照jmp_buf等等。
对于JavaTEE系统,由于系统内的TA运行于虚拟机之上,因此可以通过暂停虚拟机并保存虚拟机状态的方式,创造执行REE侧服务支持程序的机会。当虚拟机暂停后,虚拟机字节码解析器(字节码执行引擎、字节码解释器)会主动退出,停止执行后续字节码。在实际操作中,为了保证虚拟机能够安全的恢复至暂停时的暂停状态,所述虚拟机的当前状态信息保存于全局变量中,以防止保存于局部变量时导致数据被清除的情况发生。
本发明的一个实施例中,当TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统控制用于运行所述第一可信应用程序TA的虚拟机暂停的具体实现方式为:
所述第一可信应用TA通过TEE系统的第一内部应用接口TEE Internal API向TEE系统发送应用处理请求;所述应用处理请求与所述服务支持请求相对应;
TEE系统接收所述应用处理请求,当所述应用处理请求需要REE系统的服务支持时,TEE系统在所述第一内部应用接口TEE Internal API的Java本地接口JNI中设置虚拟机暂停标记;
TEE系统内运行所述第一可信应用程序TA的虚拟机监测到所述虚拟机暂停标志时,虚拟机暂停运行。
即通过在第一可信应用TA与TEE系统进行通信的第一内部应用接口TEE Internal API的Java本地接口JNI中设置虚拟机暂停标记,运行第一可信应用程序TA的虚拟机在调用JNI时,即可监测到虚拟机暂停标记,监测该标记后,虚拟机暂停,停止执行后续字节码,同时保存虚拟机的当前状态信息。
TEE系统完成所述虚拟机暂停并保存了虚拟机的当前状态后,TEE系统向REE系统发送所述第一可信应用TA的服务支持请求,具体实现为TEE系统向REE系统的客户端驱动程序发送所述服务支持请求,其中,该服务支持请求与第一可信应用TA发送给TEE系统的应用处理请求相对应,包括所述第一可信应用TA所需要的服务支持的相关数据信息,即REE系统要完成对TEE系统的服务支持所必须的数据,该数据由具体的服务支持请求确定。
REE系统的客户端驱动程序接收所述服务支持请求后,调用REE系统的相关服务资源,对所述服务支持请求进行处理,处理完成后,客户端驱动程序将处理结果发回到TEE系统。其中,所述相关服务资源由所述服务支持请求的具体内容决定。
TEE系统接收到所述处理结果后,根据所保存的虚拟机的当前设备状态信息,恢复所述虚拟机的运行,虚拟机根据所述处理结果继续运行所述第一可信应用TA的后续程序,由于此时,TEE系统已经在REE系统的服务支持下,完成了第一可信应用TA的应用处理请求,因此第一可信应用TA可以根据处理结果继续正常运行。
在实际应用中,位于REE系统的所述第一用户端应用程序CA通过TEE客户端应用接口TEE Client API与TEE系统建立会话通道即建立session,通过该会话通道完成两者间的数据交互,即所述第一用户端应用程序CA通过所述会话通道将第一安全服务请求发送到TEE系统,TEE系统通过所述会话通道向REE系统的客户端驱动程序发送所述第一可信应用TA的服务支持请求。
为了保证REE系统与TEE系统之间再次进行通信时,能够恢复所述会话通道,实际应用中,TEE系统的会话(Session)管理程序会对两者的会话现场信息(特定的用户会话所需的信息)进行保存,对于不同的会话session过程(例如:OpenSession、InvokeCommand、CloseSession),所需要保存的会话现场信息也会有所不同。
在本发明的一个实施例中,所述REE系统中设有命令缓冲区和响应缓存区,所述命令缓冲区用于存储REE系统发送到TEE系统的第一数据,所述响应缓存区用于缓存TEE系统对所述第一数据的响应结果,以及TEE系统需要REE系统进行服务支持时,两者之间的交互数据;所述第一数据包括所述第一安全服务请求的相关信息,所述响应结果包括所述服务支持请求和服务支持请求的处理结果;
TEE系统通过所述会话通道从REE系统的响应缓存区获取所述服务支持请求的处理结果。
通过所述命令缓冲区和响应缓冲区,保证了REE系统或TEE系统都能够获取到保证两者间通信正常进行的数据,例如,位于REE系统的第一用户端应用程序CA向TEE系统发送上述第一安全服务请求时,该请求的相关数据会保存在所述命令缓冲区,TEE系统通过从所述命令缓冲区获取相关数据完成对CA的服务支持,TEE系统在执行所述第一可信应用TA的过程中需要REE系统的服务支持时,通过响应缓冲区将服务支持请求发送到REE,REE在处理完所述服务支持请求后,将处理结果也存储在该响应缓冲区。由于命令缓冲区的数据为CA的第一安全服务请求的相关数据,TEE系统根据该区域中的数据才能够完成对第一安全服务请求的处理,因此,该区域中的数据不能够改动,所以,在TEE系统需要REE系统的中间服务支持时,通过所述响应缓冲区进行两者交互数据的存储。通过命令缓冲区和响应缓冲区对两者间整个通信过程中所涉及到交互数据进行存储,以保证通信能够正常进行。
在本发明的一个实施例中,TEE系统向REE系统发送服务支持请求时,为了使REE系统知道其发送的是服务支持请求,而并非其它数据(如TEE系统对REE系统发送来的安全处理请求的处理结果),该通信还可以包括:TEE系统设置一服务请求标识,TEE系统将所述服务支持请求和所述服务请求标识发送到REE系统;所述服务请求标识用于标识TEE系统需要REE系统的服务支持。
与图1中所示的方法相对应,本发明实例中还提供了一种终端设备,如图2所示,所述终端设备支持丰富执行环境REE系统200和可信执行环境TEE系统100,其中,所述TEE系统100包括虚拟机暂停控制模块110、服务支持请求发送模块120,处理结果接收模块130和虚拟机恢复模块140;所述REE系统200包括服务支持请求处理模块210。其中:
虚拟机暂停控制模块110,用于在TEE系统需要REE系统对其上所运行的第一可信应用TA的服务支持时,TEE系统控制用于运行所述第一可信应用程序TA的虚拟机暂停,并保存所述虚拟机的当前状态信息;所述虚拟机的当前设备状态信息包括虚拟机的当前栈帧结构、程序计数器的值和当前时刻的虚拟机快照等数据;
服务支持请求发送模块120,用于向REE系统发送所述第一可信应用TA的服务支持请求;所述服务支持请求包括所述第一可信应用TA所需要的服务支持的相关数据信息;
处理结果接收模块130,用于接收REE系统对所述服务支持请求的处理结果;
虚拟机恢复模块140,用于根据所保存的虚拟机的当前设备状态信息,恢复所述虚拟机的运行,虚拟机根据REE系统发回的处理结果继续执行所述第一可信应用TA的后续程序;
服务支持请求处理模块210,用于接收并处理TEE系统发送的所述服务支持请求,并将处理结果发回到TEE系统。
为了更好的理解本发明实施例中所提供的方法,下面结合实施例对本发明进行进一步说明。
实施例
本实施例中,所述终端设备为智能手机,智能手机中同时具有TEE系统和REE系统,本实施例中,TEE系统中虚拟机为Dalvik虚拟机。
为了在TEE系统向REE系统请求服务支持时,控制Dalvik虚拟机暂停并保存虚拟机暂停时的当前状态信息,以在接收到REE侧返回的处理结果时,能够恢复虚拟机暂停时的状态,首先需要对Dalvik虚拟机进行以下处理:
为了保证虚拟机能够恢复,需要将Dalvik虚拟机中的解释器环境配置函数dvmInterpret()函数的局部变量interpSaveState的存储空间由栈改为堆,将虚拟机解释器即执行引擎dvmMterpStdRun()函数的局部变量jmpBuf的存储空间也由栈改为堆,具体的:
interpSaveState的原来栈的存储方式是:InterpSaveStateinterpSaveState,改为堆的存储方式是;InterpSaveState*interpSaveState=(InterpSaveState*)malloc(sizeof(InterpSaveState));
jmpBuf的原来栈的存储方式是:jmp_bufjmpBuf,改为堆的存储方式是:jmp_buf*jmpBuf=(jmp_buf*)malloc(sizeof(jmp_buf));
通过该上述改变,使用于字节码解释器的当前状态信息的存储空间的形式均可由局部变量改变成全局变量,从而保证虚拟机暂停后,该变量的内容不会因为函数的退出而丢失。
为了实现对虚拟机暂停的控制,需要进行暂停标记设置,本实施例中,Dalvik虚拟机暂停标记须在以下函数中进行处理:解释器入口dvmCallMethodV、解释器环境配置函数dvmInterpret和虚拟机解释器dvmMterpStdRun,具体的,暂停标记设置在虚拟机解释器dvmMterpStdRun中,当字节码解释器在执行过程中,监测到暂停标记设置时,即暂停执行后续字节码,然后直接退出虚拟机解释器dvmMterpStdRun函数,之后,解释器环境配置函数dvmInterpret和解释器入口dvmCallMethodV会依次退出,暂停执行,完成整个虚拟机的暂停。
当REE侧服务处理完成而重新回到TEE侧时,TEE侧根据保存的虚拟机的状态信息恢复虚拟机暂停时的状态,虚拟机根据接收到的处理结果直接从上次停止的字节码的下一个字节码继续执行。
在实际应用中,如果dvmCallMethod()(调用dvmCallMethodV()的函数)存在嵌套情况,则需要对其后面的流程中的虚拟机中间结果采用数组保存(例如g_interpSaveState[]),并结合调用深度指示符(vm_count)来实现逐层恢复虚拟机现场。但是,由于虚拟机暂停的情况主要用于TEE系统服务需要请求REE侧服务支持的场景,因此,可以通过良好的API设计和Java功能模块划分,避免出现dvmCallMethod()嵌套,从而降低实现的难度。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述装置实施方式中各部分的全部或部分可以以硬件实现,或者以在一个或多个硬件上运行的软件模块来实现,方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。本领域技术人员应该明白,本发明所述的方法和装置并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。