客户端应用与可信应用的通信方法、装置以及终端与流程

文档序号:13688082阅读:1316来源:国知局
客户端应用与可信应用的通信方法、装置以及终端与流程

本发明涉及通信技术领域,尤其涉及一种客户端应用与可信应用的通信方法、装置以及终端。



背景技术:

目前,终端大多集成了可信执行环境(tee,trustedexecutionenvironment),终端中的应用执行环境包括丰富执行环境(ree,richexecutionenvironment)和tee。ree由客户端应用(ca,clientapplication)以及应用操作系统组成。tee由可信应用(ta,trustedapplication)、以及可信操作系统(trustedos,trustedoperatingsystem)组成。ree支持丰富的应用,但ree存在一定的安全风险。tee是终端中一块独立的区域,向该区域安装应用受管理服务器平台控制;该区域可接管关键设备、提供硬件级别的安全隔离、以及保护资源和执行可信代码。ree只能通过专用的clientapi访问ta。ta运行在tee系统中,为相应的ca提供安全服务,如输入密码,生成交易签名等。

例如,在基于arm的trustzone技术架构中,目前应用最广泛的可信执行环境os分别是gp的gptee和高通的qsee,它们都提供了在normalworld(ree)和secureworld(tee)之间进行数据交互的客户端api。ca通过客户端api向ta发送请求数据并从ta接收响应数据。但是,在不同的teeos平台下,ca与ta之间进行数据交互需要遵从teeos平台相关的客户端api的参数结构和语义,这就要求ca组织请求数据、ta解析请求数据、ta组织响应数据、ca解析响应数据等功能模块必须针对不同的teeos平台做相应的定制开发,导致ca与ta的开发和部署的效率、通用性和跨平台能力都受到明显的制约。



技术实现要素:

有鉴于此,本发明要解决的一个技术问题是提供一种客户端应用与可信应用的通信方法、装置以及终端。

根据本发明的一个方面,提供一种客户端应用与可信应用的通信方法,包括:客户端应用ca响应于接收到的可信应用调用命令,生成与所述可信应用调用命令相对应的ca调用指令;所述ca基于预定数据交换格式封装所述ca调用指令生成第一封装数据,将所述第一封装数据发送给与所述可信应用调用命令相对应的可信应用ta;所述ta基于所述预定数据交换格式对所述第一封装数据进行解析,获取所述ca调用指令;所述ta执行与所述ca调用指令相对应的操作,基于所述预定数据交换格式封装操作结果生成第二封装数据,并将所述第二封装数据返回所述ca。

可选地,所述ca运行在应用执行环境ree中,调用在ree和可信执行环境tee之间进行数据交互的tee客户端api将所述第一封装数据发送给所述ta;其中,所述ca确定所述tee客户端api中与所述第一封装数据相对应的第一参数,并通过所述第一参数传输所述第一封装数据;所述ta运行在tee中,获取所述第一参数的值,用以接收所述第一封装数据。

可选地,所述ta将所述第二封装数据发送给所述ca;其中,所述ta确定所述tee客户端api中与所述第二封装数据相对应的第二参数,并通过所述第二参数传输所述第二封装数据;所述ca通过调用所述tee客户端api获取所述第二参数的值,用以接收所述第二封装数据。

可选地,所述tee客户端api包括:gptee操作系统的teec_invokecommand接口、qsee操作系统的qseecom_send_cmd接口;所述第一参数包括:下行数据缓冲区参数;所述第二参数包括:上行数据缓冲区参数。

可选地,所述预定数据交换格式包括:tlv协议格式、json数据格式。

可选地,所述ca调用指令包括:与所述可信应用调用命令相对应的调用原语和调用输入配置参数;所述操作结果包括:与执行的操作相对应的执行结果状态信息、调用输出参数。

可选地,所述ca生成的所述第一封装数据、所述ta生成的所述第二封装数据为tlv协议格式的第一数据包;其中,所述第一数据包携带的数据包括:第一type字段、第一len字段和第一value域;所述第一type字段的值为所述调用原语或所述执行结果标识信息,所述第一len字段的值为第一数据包的长度;所述第一value域中包括至少一个具有tlv格式的配置数据块;对于每个调用输入配置参数或调用输出参数生成所述配置数据块,所述配置数据块携带的数据包括:第二type字段、第二len字段和第二value字段;所述第二type字段的值为所述调用输入配置参数或所述调用输出参数的标识,所述第二value字段的值为所述调用输入配置参数或所述调用输出参数的值。

可选地,所述ca生成的所述第一封装数据和所述ta生成的所述第二封装数据为json数据格式的第二数据包;其中,基于json格式配置模板获取与目标参数对应的键名称,所述目标参数包括:所述调用原语、所述调用输入配置参数、所述执行结果状态信息、所述调用输出参数;以键名称与目标参数值相对应的形式组装符合json格式的目标数据;根据json数据协议对所述目标数据进行封装,生成所述第二数据包。

可选地,所述ca在生成所述第一封装数据后,获取预存的密钥对所述第一封装数据进行加密处理;所述ta基于预存的所述密钥对经过加密处理的所述第一封装数据进行解密处理;所述ta在生成第二封装数据后,基于所述密钥对所述第二封装数据进行加密处理;所述ca基于所述密钥对经过加密处理的所述第二封装数据进行解密处理;

根据本发明的另一发明,提供一种客户端应用与可信应用的通信装置,包括:客户端应用ca和可信应用ta;所述ca,包括:调用指令生成模块,用于响应于接收到的可信应用调用命令,生成与所述可信应用调用命令相对应的ca调用指令;调用数据处理模块,用于基于预定数据交换格式封装所述ca调用指令生成第一封装数据,将所述第一封装数据发送给与所述可信应用调用命令相对应的可信应用ta;所述ta,包括:调用数据解析模块,用于基于所述预定数据交换格式对所述第一封装数据进行解析,获取所述ca调用指令;响应数据处理模块,用于执行与所述ca调用指令相对应的操作,基于所述预定数据交换格式封装操作结果生成第二封装数据,并将所述第二封装数据返回所述ca。

可选地,所述调用数据处理模块,运行在应用执行环境ree中,用于调用在ree和可信执行环境tee之间进行数据交互的tee客户端api将所述第一封装数据发送给所述ta;其中,确定所述tee客户端api中与所述第一封装数据相对应的第一参数,并通过所述第一参数传输所述第一封装数据;所述调用数据解析模块,运行在tee中,用于获取所述第一参数的值,用以接收所述第一封装数据。

可选地,所述响应数据处理模块,用于将所述第二封装数据发送给所述ca;其中,确定所述tee客户端api中与所述第二封装数据相对应的第二参数,并通过所述第二参数传输所述第二封装数据;所述调用数据处理模块,用于通过调用所述tee客户端api获取所述第二参数的值,用以接收所述第二封装数据。

可选地,所述tee客户端api包括:gptee操作系统的teec_invokecommand接口、qsee操作系统的qseecom_send_cmd接口;所述第一参数包括:下行数据缓冲区参数;所述第二参数包括:上行数据缓冲区参数。

可选地,所述预定数据交换格式包括:tlv协议格式、json数据格式。

可选地,所述ca调用指令包括:与所述可信应用调用命令相对应的调用原语和调用输入配置参数;所述操作结果包括:与执行的操作相对应的执行结果状态信息、调用输出参数。

可选地,所述调用数据处理模块生成的所述第一封装数据、所述响应数据处理模块生成的所述第二封装数据为tlv协议格式的第一数据包;其中,所述第一数据包携带的数据包括:第一type字段、第一len字段和第一value域;所述第一type字段的值为所述调用原语或所述执行结果标识信息,所述第一len字段的值为第一数据包的长度;所述第一value域中包括至少一个具有tlv格式的配置数据块;对于每个调用输入配置参数或调用输出参数生成所述配置数据块,所述配置数据块携带的数据包括:第二type字段、第二len字段和第二value字段;所述第二type字段的值为所述调用输入配置参数或所述调用输出参数的标识,所述第二value字段的值为所述调用输入配置参数或所述调用输出参数的值。

可选地,所述调用数据处理模块生成的所述第一封装数据、所述响应数据处理模块生成的所述第二封装数据为json数据格式的第二数据包;其中,所述调用数据处理模块或所述响应数据处理模块,还用于基于json格式配置模板获取与目标参数对应的键名称,所述目标参数包括:所述调用原语、所述调用输入配置参数、所述执行结果状态信息、所述调用输出参数,以键名称与目标参数值相对应的形式组装符合json格式的目标数据;根据json数据协议对所述目标数据进行封装,生成所述第二数据包。

可选地,所述ca,包括:第一加解密处理模块,用于在生成所述第一封装数据后,获取预存的密钥对所述第一封装数据进行加密处理;基于所述密钥对经过加密处理的所述第二封装数据进行解密处理;所述ta,包括:第二加解密处理模块,用于基于预存的所述密钥对经过加密处理的所述第一封装数据进行解密处理;在生成第二封装数据后,基于所述密钥对所述第二封装数据进行加密处理。

根据本发明的又一方面,提供一种终端,包括如上所述的客户端应用与可信应用的通信装置。

根据本发明的再一方面,提供一种客户端应用与可信应用的通信装置,包括:存储器;以及耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行上所述的客户端应用与可信应用的通信方法。

本发明的客户端应用与可信应用的通信方法、装置以及终端,ca基于预定数据交换格式封装ca调用指令生成第一封装数据并发送给ta;ta执行ca调用指令后,基于预定数据交换格式封装操作结果生成第二封装数据并返回ca;通过使在不同的tee平台下的ca与ta之间交换的数据格式相同,有利于代码或模块的复用;对于相同的业务或功能,ca与ta之间交换的数据内容相同,有利于业务功能逻辑的开发调试,并且可以提升ca与ta的开发和部署的效率、通用性和跨平台能力。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为根据本发明的客户端应用与可信应用的通信方法的一个实施例的流程示意图;

图2为ca通过tee平台提供的一组api与ta进行数据通信的示意图;

图3为根据本发明的客户端应用与可信应用的通信装置的一个实施例的模块示意图;

图4为根据本发明的客户端应用与可信应用的通信装置的另一个实施例的模块示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

本发明实施例可以应用于计算机系统/服务器,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器一起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于:智能手机、个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。

计算机系统/服务器可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。

下文中的“第一”、“第二”仅用于描述上相区别,并没有其它特殊的含义。

图1为根据本发明的客户端应用与可信应用的通信方法的一个实施例的流程示意图,如图1所示:

步骤101,客户端应用ca响应于接收到的可信应用调用命令,ca生成与可信应用调用命令相对应的ca调用指令。

可信应用调用命令可由移动终端或第三方应用向ca发送,可信应用调用命令可以为付费、保存消费记录等。

步骤102,ca基于预定数据交换格式封装ca调用指令生成第一封装数据,将第一封装数据发送给与可信应用调用命令相对应的可信应用ta。预定数据交换格式可以为多种格式。

步骤103,ta基于预定数据交换格式对第一封装数据进行解析,获取ca调用指令。

步骤104,ta执行与ca调用指令相对应的操作,基于预定数据交换格式封装操作结果生成第二封装数据,并将第二封装数据返回ca。ca基于预定数据交换格式对第二封装数据进行解析,可以获取ta的操作结果。

ca运行在应用执行环境ree中,调用在ree和可信执行环境tee之间进行数据交互的tee客户端api将第一封装数据发送给ta。ca确定tee客户端api中与第一封装数据相对应的第一参数,并通过第一参数传输第一封装数据。ta运行在tee中,获取第一参数的值,用以接收第一封装数据。

ta将第二封装数据发送给ca。ta确定tee客户端api中与第二封装数据相对应的第二参数,并通过第二参数传输第二封装数据。ca通过调用tee客户端api获取第二参数的值,用以接收第二封装数据。第一封装数据和第二封装数据的格式可以多种,例如为json、tlv等。

在一个实施例中,tee客户端api可以有多种,例如为gptee操作系统的teec_invokecommand接口、qsee操作系统的qseecom_send_cmd接口等。第一参数包括下行数据缓冲区参数等。第二参数包括上行数据缓冲区参数等。如图2所示,运行在ree环境中的ca和运行在tee环境中的ta,可以通过tee平台提供的一组api进行数据交互。

例如,gptee和qsee都提供了在ree和tee之间进行数据交互的客户端api。gptee中定义了teec_invokecommand接口用于在ree和tee之间进行数据交换。高通qsee中定义了qseecom_send_cmd接口用于在ree和tee之间进行数据交换。由于需要同时适配gptee和高通qsee等不同tee平台,可以使用tee平台提供的api所能提供的参数和语义的最小集合。

ca基于预定数据交换格式封装ca调用指令生成第一封装数据,第一封装数据可以为tlv或json格式的第一数据包。ta可以基于预定数据交换格式封装操作结果生成第二封装数据,第二封装数据可以为tlv或json格式的第二数据包。

通过gptee的调用teec_invokecommand接口传输第一数据包,teec_invokecommand接口定义如下:

teec_resultteec_invokecommand(

teec_session*session,

uint32_tcommandid,

teec_operation*operation,

uint32_t*returnorigin

);

typedefstruct

{

uint32_tstarted;

uint32_tparamtypes;

teec_parameterparams[4];

<implementation-definedtype>imp;

}teec_operation;

typedefunion{

teec_tempmemoryreferencetmpref;

teec_registeredmemoryreferencememref;

teec_valuevalue;

}teec_parameter;

typedefstruct{

teec_sharedmemory*parent;/**<共享内存指针*/

size_tsize;/**<共享内存的使用大小*/

size_toffset;/**<共享内存的使用偏移*/

}teec_registeredmemoryreference;

由上述的定义可知,teec_invokecommand有4个参数:session参数传入会话句柄;commandid参数在本发明中不再需要,传入0即可;operation参数中需要设置输入输出buffer;returnorigin参数在本发明中不再需要,传入null即可。

operation参数是一个teec_operation结构体,其中的started需要设置为1。paramtypes是用来设置4个teec_parameter结构,例如teec_memref_partial_input是指一个ca->ta类型的单向内存拷贝、teec_memref_partial_output是指一个ta->ca的单向内存拷贝。teec_operation结构体中还包含4个teec_parameter结构体,已经由teec_operation.paramtypes指定了各自的用途。

使用teec_operation.params[0]和teec_operation.params[1],用于ca->ta和ta->ca两个方向的数据传输,可以通过teec_operation.params[0]和teec_operation.params[1]分别传输ca发送的第一封装数据和ta发送的第二封装数据。

teec_operation.params是一个结构体,其定义为teec_parameter,本发明使用teec_parameter中的成员memref。memref也是一个结构体,其定义为teec_registeredmemoryreference,有3个成员,parent、size和offset分别代表要传输的数据所在的内存地址和数据长度、内存地址偏移。“要传输的数据”即为tlv或json格式的第一封装数据和第二封装数据的内容(保存在内存中)。teec_invokecommand接口本身与数据内容无关,使用内存地址、长度、内存地址偏移来表示。

例如,下面代码示例,ca调用teec_invokecommand接口将gs_ta_cmd_buf中的数据发送给ta,并从ta接收数据到gs_ta_resp_buf,即ca发送第一封装数据到ta,从ta接收到第二封装数据。

teec_operationoperation;

memset(&operation,0,sizeof(teec_operation));

operation.paramtypes=teec_param_types(

teec_memref_partial_input,

teec_memref_partial_output,

teec_none,

teec_none);

operation.started=1;

operation.params[0].memref.parent=&gs_ta_cmd_buf;

operation.params[0].memref.offset=0;

operation.params[0].memref.size=cbcmd;

operation.params[1].memref.parent=&gs_ta_resp_buf;

operation.params[1].memref.offset=0;

operation.params[1].memref.size=max_teec_buffer_size;}

对于高通qsee的qseecom_send_cmd接口,send_buf作为下行数据缓冲区,rcv_buf作为上行数据缓冲区。qseecom_send_cmd接口定义如下:

intqseecom_send_cmd(

structqseecom_handle*handle,

void*send_buf,

uint32_tsbuf_len,

void*rcv_buf,

uint32_trbuf_len

);

send_buf指针指向ca->ta的数据所在的内存地址,sbuf_len是数据长度。rcv_buf指针指向接收ta->ca的数据的内存地址,rbuf_len是内存空间大小,接收到的数据长度通过函数返回值返回。即ca通过send_buf将第一封装数据发送给ta,通过rcv_buf接收ta发送的第二封装数据。

上述实施例中的客户端应用与可信应用的通信方法,通过将ca和ta间的数据封装为预定数据交换格式,可以将ca和ta间的数据交互过程归纳、抽象为“命令与入参-应答与出参”的远程调用过程,使ca与ta之间仅需一个输入buffer和一个输出buffer就能实现各种目的的通用数据交互,不再依赖于不同tee平台下的通讯api设计,从而达到提升ca与ta的开发和部署的效率、通用性和跨平台能力等目的。

在一个实施例中,预定数据交换格式包括tlv协议格式、json数据格式等轻量的数据格式。ca调用指令包括与可信应用调用命令相对应的调用原语和调用输入配置参数等。操作结果包括与执行的操作相对应的执行结果状态信息、调用输出参数等。

ca发起远程调用,发送的ca调用指令包括:调用原语和调用输入参数。使用轻量级的数据交换格式将调用原语和参数封装成第一数据包。ta接收到第一数据包,基于数据交互格式进行解析,得到调用原语和参数。

ta执行与调用原语所对应的功能函数,得到操作结果,操作结果包括执行结果状态信息、调用输出参数等。ta将执行结果状态信息、调用输出参数封装成第二数据包,ca接收第二数据包,通过解析得到执行结果状态信息、调用输出参数。

例如,ca需要读取存储在tee中的证书文件,由ca发起远程调用,调用原语为readcert(由ca与ta约定),调用输入参数为证书文件的id。ta返回的执行结果状态信息包括成功、没找到证书、权限不足、读取失败等状态字,调用输出参数是证书文件的内容。

当需要用tee中的密钥对做签名时,由ca发起远程调用,调用原语为sign,调用输入参数为私钥id、hash算法、签名原文。ta返回的执行结果状态信息是成功、没找到私钥、权限不足、签名失败等状态字,调用输出参数是签名结果。

可以使用tlv格式来封装远程调用的调用原语、调用输入参数、执行结果状态信息、调用输出参数等数据。例如,ca生成的第一封装数据、ta生成的第二封装数据为tlv协议格式的第一数据包。

tlv是一种可变的格式,包括type字段、length字段、value域或字段。type字段是关于标签和编码格式的信息,length字段是定义数值的长度;value:字段表示实际的数值。type和length的长度固定,一般是2个或4个字节。

例如,第一数据包为嵌套式的tlv格式。第一数据包携带的数据包括:第一type字段、第一len字段和第一value域。第一type字段的值为调用原语或执行结果状态信息,第一len字段的值为第一数据包的长度。

第一value域中包括至少一个具有tlv格式的配置数据块。对于每个调用输入配置参数或调用输出参数生成配置数据块,配置数据块也为tlv格式,携带的数据包括:第二type字段、第二len字段和第二value字段。第二type字段的值为调用输入配置参数或调用输出参数的标识,第二value字段的值为调用输入配置参数或调用输出参数的值。

在ca和ta的交互过程中涉及两种数据包:第一数据包和第二数据包。第一数据包为请求数据包(下行,ca->ta);第二数据包为应答数据包(上行,ta->ca),用可嵌套的tlv结构来定义第一数据包和第二数据包,tlv结构中的tag与len字段都使用2字节无符号类型。第一数据包的通用数据格式如下表1所示:

表1-第一数据包的通用数据格式

第二数据包的通用数据格式如下表2所示:

表2-第一数据包的通用数据格式

根据需要实现的业务和功能,ca与ta之间约定所需的调用原语、调用输入参数、执行结果状态信息、调用输出参数等tag的取值。第一数据包中的tag_cmd_xxx即某个调用原语所对应的tag值;tag_param_1、tag_param_2是调用输入参数所对应的tag值。

第二数据包中的tag_rsp_xxx是对应于调用原语的应答tag值;tag_status_code是执行结果状态字所对应的tag值;tag_param_3是输参数所对应的tag值。

以从ta中读取证书为例,ca封装的调用读取证书功能的第一数据包的数据格式如下表3所示:

表3-调用读取证书功能的第一数据包的数据格式

在表3中,第一数据包中的调用原语为tag_cmd_get_cert,第一数据包中包含1个调用输入参数:证书id:tag_cert_id(2字节)。

ta封装的读取证书操作结果的第二数据包的数据格式如下表4所示:

表4-读取证书操作结果的第二数据包的数据格式

在表4中,第二数据包含一个执行结果状态字tag_status_code(4字节)、1个调用输出参数:证书数据:tag_cert_data(变长)。

以用ta中的数字证书做签名为例,ca封装的调用签名功能的第一数据包的数据格式如下表5所示:

表5-调用签名功能的第一数据包的数据格式

在表5中,第一数据包中的调用原语为tag_cmd_sign。第一数据包中包含3个调用输入参数:证书id:tag_cert_id(2字节)、hash算法:tag_hash_alg(4字节)、签名原文:tag_sign_data(变长)。

ta封装的签名操作结果的第二数据包的数据格式如下表6所示:

表6-签名操作结果的第二数据包的数据格式

在表6中,第二数据包包含一个执行结果状态字tag_status_code(4字节)。第二数据包包含2个调用输出参数:口令剩余次数:tag_pin_remain_times(1字节);签名结果:tag_sign_result(变长)。

在一个实施例中,json(javascriptobjectnotation,js对象标记)格式是一种轻量级的数据交换格式,为基于ecmascript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,json键值对是用来保存js对象的一种方式。

ca生成的第一封装数据和ta生成的第二封装数据为json数据格式的第二数据包。例如,基于json格式配置模板获取与目标参数对应的键名称,目标参数包括:调用原语、调用输入配置参数、执行结果状态信息、调用输出参数等。以键名称与目标参数值相对应的形式组装符合json格式的目标数据,根据json数据协议对目标数据进行封装,生成json格式的第二数据包。以json格式为例,ca从ta中读取证书,ca封装的json格式的第一数据包的数据格式如下:

ta封装的json格式的第二数据包的数据格式如下:

在一个实施例中,可以对ca和ta之间传输的数据进行加密/解密处理。ca在生成第一封装数据后,获取预存的密钥对第一封装数据进行加密处理。ta基于预存的密钥对经过加密处理的第一封装数据进行解密处理。ta在生成第二封装数据后,基于密钥对第二封装数据进行加密处理。ca基于密钥对经过加密处理的第二封装数据进行解密处理。密钥的生成和分发可以有多种方法。例如,ta生成密钥,在接收到ca的密钥请求后,将密钥发送给ca。

本发明的客户端应用与可信应用的通信方法,通过使在不同的tee平台下的ca与ta之间交换的数据格式相同,有利于代码或模块的复用,对于相同的业务或功能,ca与ta之间交换的数据内容相同,有利于业务功能逻辑的开发调试,并且可以提升ca与ta的开发和部署的效率、通用性和跨平台能力。

在一个实施例中,本发明提供一种客户端应用与可信应用的通信装置,如图3所示,包括:客户端应用ca31和可信应用ta32。ca31包括:调用指令生成模块311、调用数据处理模块312和第一加解密处理模块313。ta32包括:调用数据解析模块321、响应数据处理模块322和第二加解密处理模块323。

调用指令生成模块311响应于接收到的可信应用调用命令,生成与可信应用调用命令相对应的ca调用指令。调用数据处理模块312基于预定数据交换格式封装ca调用指令生成第一封装数据,将第一封装数据发送给与可信应用调用命令相对应的可信应用ta。

调用数据解析模块321基于预定数据交换格式对第一封装数据进行解析,获取ca调用指令。响应数据处理模块322执行与ca调用指令相对应的操作,基于预定数据交换格式封装操作结果生成第二封装数据,并将第二封装数据返回ca。

调用数据处理模块312运行在应用执行环境ree中,调用在ree和可信执行环境tee之间进行数据交互的tee客户端api将第一封装数据发送给ta。调用数据处理模块312确定tee客户端api中与第一封装数据相对应的第一参数,并通过第一参数传输第一封装数据。调用数据解析模块321运行在tee中,用于获取第一参数的值,用以接收第一封装数据。

响应数据处理模块322将第二封装数据发送给ca。响应数据处理模块322确定tee客户端api中与第二封装数据相对应的第二参数,并通过第二参数传输第二封装数据。调用数据处理模块312通过调用tee客户端api获取第二参数的值,用以接收第二封装数据。

tee客户端api包括:gptee操作系统的teec_invokecommand接口、qsee操作系统的qseecom_send_cmd接口等。第一参数包括:下行数据缓冲区参数等。第二参数包括:上行数据缓冲区参数等。预定数据交换格式包括:tlv协议格式、json数据格式等。ca调用指令包括:与可信应用调用命令相对应的调用原语和调用输入配置参数等。操作结果包括:与执行的操作相对应的执行结果状态信息、调用输出参数等。

调用数据处理模块312生成的第一封装数据、响应数据处理模块322生成的第二封装数据为tlv协议格式的第一数据包。第一数据包携带的数据包括:第一type字段、第一len字段和第一value域。第一type字段的值为调用原语或执行结果状态信息,第一len字段的值为第一数据包的长度。第一value域中包括至少一个具有tlv格式的配置数据块。

对于每个调用输入配置参数或调用输出参数生成配置数据块,配置数据块携带的数据包括:第二type字段、第二len字段和第二value字段。第二type字段的值为调用输入配置参数或调用输出参数的标识,第二value字段的值为调用输入配置参数或调用输出参数的值。

调用数据处理模块312生成的第一封装数据、响应数据处理模块322生成的第二封装数据为json数据格式的第二数据包。调用数据处理模块312或响应数据处理模块322基于json格式配置模板获取与目标参数对应的键名称,目标参数包括:调用原语、调用输入配置参数、执行结果状态信息、调用输出参数等。调用数据处理模块312或响应数据处理模块322以键名称与目标参数值相对应的形式组装符合json格式的目标数据,根据json数据协议对目标数据进行封装,生成第二数据包。

第一加解密处理模块313在生成第一封装数据后,获取预存的密钥对第一封装数据进行加密处理,基于密钥对经过加密处理的第二封装数据进行解密处理。第二加解密处理模块323基于预存的密钥对经过加密处理的第一封装数据进行解密处理,在生成第二封装数据后,基于密钥对第二封装数据进行加密处理。第二加解密处理模块323生成密钥,在接收到第一加解密处理模块313发送的密钥请求后,将密钥发送给第一加解密处理模块313。

在一个实施例中,本发明提供一种终端,包括如上任一实施例中的客户端应用与可信应用的通信装置。终端可以为智能手机、平板电脑等。

图4为根据本发明的客户端应用与可信应用的通信方法装置的另一个实施例的模块示意图。如图4所示,该装置可包括存储器41、处理器42、通信接口43以及总线44。存储器41用于存储指令,处理器42耦合到存储器41,处理器42被配置为基于存储器41存储的指令执行实现上述的客户端应用与可信应用的通信方法。

存储器41可以为高速ram存储器、非易失性存储器(non-volatilememory)等,存储器41也可以是存储器阵列。处理器42可以为中央处理器cpu等。

本发明的客户端应用与可信应用的通信方法、装置以及终端,ca生成ca调用指令,基于预定数据交换格式封装ca调用指令生成第一封装数据并发送给ta;ta执行ca调用指令后,基于预定数据交换格式封装操作结果生成第二封装数据并返回ca;通过使在不同的tee平台下的ca与ta之间交换的数据格式相同,有利于代码或模块的复用;在不同的tee平台下,对于相同的业务或功能,ca与ta之间交换的数据内容相同,有利于业务功能逻辑的开发调试,并且可以提升ca与ta的开发和部署的效率、通用性和跨平台能力。

可能以许多方式来实现本发明的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和系统。用于方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

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