首页 / 专利库 / 人工智能 / 语言代码 / 在Python虚拟机中执行安全计算的方法及装置

在Python虚拟机中执行安全计算的方法及装置

阅读:514发布:2020-05-11

专利汇可以提供在Python虚拟机中执行安全计算的方法及装置专利检索,专利查询,专利分析的服务。并且本 说明书 实施例 提供一种执行安全计算的方法和装置,通过第一Python应用实现,其中该第一Python应用加载在Python 虚拟机 中,Python虚拟机通过原生代码实现,并安装于Android系统之上。上述方法包括,响应于Android系统中安装的第一Android应用对第一Python应用的调用 请求 ,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;通过Java本地 接口 JNI,调用Android系统中的第一Java服务,使得该第一Java服务执行可信密钥运算。然后,向第一Android应用返回第一安全计算的结果。,下面是在Python虚拟机中执行安全计算的方法及装置专利的具体信息内容。

1.一种执行安全计算的方法,通过第一Python应用执行,所述第一Python应用加载在Python虚拟机中,所述Python虚拟机通过原生代码实现,并安装于Android系统之上,所述方法包括:
响应于所述Android系统中安装的第一Android应用对所述第一Python应用的调用请求,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;
通过Java本地接口JNI,调用所述Android系统中的第一Java服务,使得所述第一Java服务执行所述可信密钥运算;
向所述第一Android应用返回所述第一安全计算的结果。
2.根据权利要求1所述的方法,其中,所述原生代码包括C语言代码或C++语言代码。
3.根据权利要求1所述的方法,其中,所述Python虚拟机通过原生开发工具包NDK编译为Android系统可调用的动态运行库文件;
所述调用请求在所述Android系统中被转换为APDU指令,并通过所述JNI接口传递到通过NDK实现的APDU事件驱动模,通过该APDU事件驱动模块接入到所述动态运行库中的Python虚拟机,以使得所述Python虚拟机基于所述APDU指令,执行所述第一Python应用。
4.根据权利要求1所述的方法,其中,所述Python虚拟机中包括通过所述原生代码实现的安全计算库;
所述执行第一安全计算包括,在所述安全计算库中搜索所述第一安全计算所需的计算模块;
所述调用所述Android系统中的第一Java服务包括,在所述安全计算库中不包含用于所述可信密钥运算的计算模块时,通过所述JNI接口调用所述Android系统中的第一Java服务。
5.根据权利要求1所述的方法,其中,所述第一Java服务包括,Android Keystore服务,其中包括基于可信根的以下至少一种秘钥运算:非对称加密运算,对称加密运算,椭圆曲线数字签名运算。
6.根据权利要求1所述的方法,其中,所述第一Java服务包括,通过Android OMA协议,调用外部安全元件SE,执行所述可信密钥运算。
7.根据权利要求1所述的方法,其中,所述第一Java服务包括,在Android系统下的可信执行环境TEE中,执行所述可信秘钥运算。
8.根据权利要求1所述的方法,其中,向所述第一Android应用返回所述第一安全计算的结果,包括:
从所述第一Java服务获得可信秘钥运算的运算结果;
通过JNI接口将所述运算结果返回给所述第一Android应用。
9.根据权利要求1所述的方法,其中,
调用所述Android系统中的第一Java服务包括,指定调用结果返回目标为所述第一Android应用;
向所述第一Android应用返回所述第一安全计算的结果包括,使得所述第一Java服务将所述可信秘钥运算的结果返回给所述第一Android应用。
10.一种执行安全计算的装置,通过第一Python应用实现,所述第一Python应用加载在Python虚拟机中,所述Python虚拟机通过原生代码实现,并安装于Android系统之上,所述装置包括:
执行单元,配置为响应于所述Android系统中安装的第一Android应用对所述第一Python应用的调用请求,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;
调用单元,配置为通过Java本地接口JNI,调用所述Android系统中的第一Java服务,使得所述第一Java服务执行所述可信密钥运算;
返回单元,配置为向所述第一Android应用返回所述第一安全计算的结果。
11.根据权利要求10所述的装置,其中,所述原生代码包括C语言代码或C++语言代码。
12.根据权利要求10所述的装置,其中,所述Python虚拟机通过原生开发工具包NDK编译为Android系统可调用的动态运行库文件;
所述调用请求在所述Android系统中被转换为APDU指令,并通过所述JNI接口传递到通过NDK实现的APDU事件驱动模块,通过该APDU事件驱动模块接入到所述动态运行库中的Python虚拟机,以使得所述Python虚拟机基于所述APDU指令,执行所述第一Python应用。
13.根据权利要求10所述的装置,其中,所述Python虚拟机中包括通过所述原生代码实现的安全计算库;
所述执行单元配置为,在所述安全计算库中搜索所述第一安全计算所需的计算模块;
所述调用单元配置为,在所述安全计算库中不包含用于所述可信密钥运算的计算模块时,通过所述JNI接口调用所述Android系统中的第一Java服务。
14.根据权利要求10所述的装置,其中,所述第一Java服务包括,Android Keystore服务,其中包括基于可信根的以下至少一种秘钥运算:非对称加密运算,对称加密运算,椭圆曲线数字签名运算。
15.根据权利要求10所述的装置,其中,所述第一Java服务包括,通过Android OMA协议,调用外部安全元件SE,执行所述可信密钥运算。
16.根据权利要求10所述的装置,其中,所述第一Java服务包括,在Android系统下的可信执行环境TEE中,执行所述可信秘钥运算。
17.根据权利要求10所述的装置,其中,所述返回单元配置为:
从所述第一Java服务获得可信秘钥运算的运算结果;
通过JNI接口将所述运算结果返回给所述第一Android应用。
18.根据权利要求10所述的装置,其中,
所述调用单元配置为,指定调用结果返回目标为所述第一Android应用;
所述返回单元配置为,使得所述第一Java服务将所述可信秘钥运算的结果返回给所述第一Android应用。
19.一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行权利要求1-9中任一项的所述的方法。
20.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-9中任一项所述的方法。

说明书全文

在Python虚拟机中执行安全计算的方法及装置

技术领域

[0001] 本说明书一个或多个实施例涉及虚拟机技术和安全计算领域,尤其涉及在Python虚拟机中执行安全计算的方法及装置。

背景技术

[0002] Python虚拟机以及Python应用(又称为Python小程序Applet)多用于智能卡中,提供多种智能卡功能。具体地,智能卡是包含微处理器的芯片卡,一般具有片内操作系统。可以在该片内操作系统之上安装Python虚拟机,通过该Python虚拟机运行Python小程序。由于智能卡固有的信息安全等优点,智能卡在身份认证、行、电信、公共交通、车场管理等领域得到越来越多的应用,例如智能卡可以实现为,二代身份证,银行的电子钱包,电信的手机SIM卡,公共交通的公交卡、地卡,用于收取停车费的停车卡等。以上各种与安全相关的功能可以通过在智能卡中运行的Python小程序来实现。
[0003] 鉴于Python虚拟机和Python小程序在安全相关领域的优势,考虑将Python虚拟机和Python小程序应用于更多的场景中,例如将其应用于具有Android系统的Android主机设备上。在将Python虚拟机应用于Android系统的情况下,需要针对主机设备的计算平台,进行多项适配。对于Python小程序来说,往往涉及一些与计算平台相关的安全计算,而各个计算平台框架通常不一致,这就使得对于这样的Python安全小程序,开发者需要针对不同计算平台开发不同版本的程序,所开发的Python安全小程序不能跨平台移植,导致较大的开发成本和不便。
[0004] 因此,希望能有改进的方案,便于开发的Python安全小程序可以跨平台地适用于Android系统。发明内容
[0005] 本说明书一个或多个实施例描述了在Python虚拟机中通过Python应用执行安全计算的方法和装置,以使得Python应用可以跨平台地执行安全计算,提升开发效率。
[0006] 根据第一方面,提供了一种执行安全计算的方法,通过第一Python应用执行,所述第一Python应用加载在Python虚拟机中,所述Python虚拟机通过原生代码实现,并安装于Android系统之上,所述方法包括:
[0007] 响应于所述Android系统中安装的第一Android应用对所述第一Python应用的调用请求,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;
[0008] 通过Java本地接口JNI,调用所述Android系统中的第一Java服务,使得所述第一Java服务执行所述可信密钥运算;
[0009] 向所述第一Android应用返回所述第一安全计算的结果。
[0010] 在一个实施例中,上述原生代码包括C语言代码或C++语言代码。
[0011] 根据一种实施方式,所述Python虚拟机通过原生开发工具包NDK编译为Android系统可调用的动态运行库文件;并且,所述调用请求在所述Android系统中被转换为APDU指令,并通过所述JNI接口传递到通过NDK实现的APDU事件驱动模,通过该APDU事件驱动模块接入到所述动态运行库中的Python虚拟机,以使得所述Python虚拟机基于所述APDU指令,执行所述第一Python应用。
[0012] 在一个实施例中,Python虚拟机中包括通过所述原生代码实现的安全计算库;在这样的情况下,在执行第一安全计算时,可以在所述安全计算库中索所述第一安全计算所需的计算模块;在所述安全计算库中不包含用于所述可信密钥运算的计算模块时,通过所述JNI接口调用所述Android系统中的第一Java服务。
[0013] 在一个实施例中,所述第一Java服务包括Android Keystore服务,其中包括基于可信根的以下至少一种秘钥运算:非对称加密运算,对称加密运算,椭圆曲线数字签名运算。
[0014] 在另一实施例中,所述第一Java服务包括,通过Android OMA协议,调用外部安全元件SE,执行所述可信密钥运算。
[0015] 在又一实施例中,所述第一Java服务包括,在Android系统下的可信执行环境TEE中,执行所述可信秘钥运算。
[0016] 根据一个实施例,向所述第一Android应用返回所述第一安全计算的结果可以包括,从第一Java服务获得可信秘钥运算的运算结果;通过JNI接口将所述运算结果返回给所述第一Android应用。
[0017] 根据另一实施例,可以在调用所述第一Java服务时,指定调用结果返回目标为所述第一Android应用;如此使得所述第一Java服务将所述可信秘钥运算的结果返回给所述第一Android应用。
[0018] 根据第二方面,提供一种执行安全计算的装置,通过第一Python应用实现,所述第一Python应用加载在Python虚拟机中,所述Python虚拟机通过原生代码实现,并安装于Android系统之上,所述装置包括:
[0019] 执行单元,配置为响应于所述Android系统中安装的第一Android应用对所述第一Python应用的调用请求,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;
[0020] 调用单元,配置为通过Java本地接口JNI,调用所述Android系统中的第一Java服务,使得所述第一Java服务执行所述可信密钥运算;
[0021] 返回单元,配置为向所述第一Android应用返回所述第一安全计算的结果。
[0022] 根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
[0023] 根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
[0024] 根据本说明书一个实施例提供的方法和装置,在Android应用调用Python应用,而该Python应用需要进行涉及可信根的可信秘钥运算时,Python应用通过JNI接口直接调用Android系统中相应的Java服务来进行可信秘钥运算,而不需要关注Android平台的细节,也不需要针对不同平台开发对应的实现可信秘钥运算的逻辑,如此使得Python应用可以跨平台移植,大大提高开发者的效率。附图说明
[0025] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0026] 图1示出了根据本说明书实施例的计算设备100的结构图;
[0027] 图2示出Android系统对不同语言开发应用的支持示意图;
[0028] 图3示出JNI的作用示意图;
[0029] 图4示出根据一个实施例的Python应用执行过程示意图;
[0030] 图5示出根据一个实施例的执行安全计算的装置的示意性框图

具体实施方式

[0031] 下面结合附图,对本说明书提供的方案进行描述。
[0032] 图1示出了根据本说明书实施例的计算设备100的结构图。如图1所示,计算设备100包括硬件架构110、Android操作系统120、Android应用区130、原生模块区140。
[0033] 在不同实施例中,计算设备100可以体现为各种形式的设备,例如,手机,平板电脑,PC机,等等。硬件架构110至少包括,处理器,存储器(ROM/RAM/EEPROM等),输入/输出(Input/Output,I/O)接口,等等。
[0034] 在本说明书实施例所考虑的场景中,在硬件架构110上,安装有Android操作系统120。使用Java语言开发的Android应用,例如图1中Android应用区130中示出的Java APP1,Java APP2和Java APP3,可以安装并运行在Android系统上。
[0035] 然而,与常规通过Java开发的软件应用不同的,Python虚拟机一般是使用原生(Native)代码实现的,例如C语言代码,或C++语言代码。对于使用原生代码开发实现的模块,例如,图1中原生模块区140中示出的Python虚拟机和其他C语言开发的功能模块,Android系统也提供了相应的开发包和支持接口。
[0036] 下面结合图2描述Android系统对不同语言开发应用的支持。
[0037] 如本领域技术人员所知,在Android系统上开发应用程序,需要使用Android平台提供的开发包。SDK软件开发包(software development kit)是主流的广为使用的开发包,主要基于Java语言,因此,目前多数Android应用都是使用Java语言利用SDK开发的。
[0038] 此外,Android平台还提供有NDK(Native Develop Kit)开发包,即原生开发工具包,或称为本地开发工具包。Android NDK提供一套工具集,允许开发者使用原生代码语言(例如C和C++)实现部分应用。NDK可以帮助开发者实现在Java中调用C/C++代码的工作。具体地,可以使用NDK工具,把原生语言(C/C++)开发的模块编译为动态运行库中的文件,具体为so文件,然后在Java中调用。
[0039] 在Java中调用C/C++需要遵从JNI的规范。JNI(Java Native Interface),即Java本地接口,是Java调用原生(Native)语言的一种特性。通过JNI可以使得Java与C/C++实现交互,即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。
[0040] 因此,如图2所示,对于Java应用来说,可以利用SDK提供的接口,直接运行在Java框架环境中;另一方面,也可以通过JNI接口,调用原生代码运行库,该运行库通过NDK编译生成,并通过NDK提供的接口,运行在诸如C的原生框架环境中。
[0041] 图3示出JNI的作用示意图。如图3所示,JNI一侧是Java代码,另一侧是C/C++的原生代码,JNI可以作用为两者之间调用的桥梁。具体地,如前所述,C/C++代码可以通过NDK实现为动态运行库so文件的形式,而Java代码中可以包括具体业务类。JNI中包括本地(Native)方法接口类,使得各个业务类可以像调用普通Java类一样调用该接口类中的方法,从而实现间接调用基于原生代码实现的本地方法。
[0042] 回到图1,基于图2和图3所示的NDK和JNI接口,可以将原生代码(C/C++)开发的Python虚拟机适配于Android系统平台。具体地,与其他C模块类似的,可以利用NDK工具包,将Python虚拟机编译为Android系统下的动态运行库so文件,供Android应用通过JNI接口调用。因此,如图1所示,基于Java开发的Android应用通过SDK提供的接口直接运行在系统Java框架中,而Python虚拟机和其他C模块则通过NDK工具包和JNI接口与Android应用交互。
[0043] 如本领域技术人员所知,Python虚拟机主要用于提供Python运行环境,从而执行基于Python语言开发的应用程序,或称为小程序Applet。具体地,Python虚拟机中可以包括加载模块,执行引擎,运行时模块。当接收到执行某个Python应用Applet的指令时,加载模块可以从应用程序存储区加载该Python应用对应的字节码(bytecode)文件。字节码文件是经由Python编译器编译后产生的文件,通常存储为pyc格式。于是,执行引擎可以根据字节码文件中的逐条字节码指令,产生机器码在处理器中运行。运行时模块提供应用执行期间的执行环境数据,其中包括执行过程中的数据、函数数据,等等。
[0044] 在一个实施例中,Python应用可以通过可信服务管理平台TSM(TrustedService Manger)进行分发发行。Android系统可以连接到TSM平台,从中拉取Python应用,并对其进行安全管理。安全管理包括使用加密文件,对与Python应用相关的证书,以及Applet字节码文件等进行存储和管理。并且,可以采用白盒加密技术,保证其他方不能容易地从分发的Python应用中恢复出秘钥数据。
[0045] 如前所述,一些Python应用用以执行一些专用的与安全计算相关的功能。因此,在图1的结构框架下,会存在这样一种应用需求:Android系统中的Android应用需要调用Python应用的功能,而该Python应用在执行过程中又需要进行与可信根相关的秘钥计算。例如,上述Android应用可以是电子支付类应用,比如支付宝,或者可以是应用于区块链数字货币钱包App。而所需要调用的Python应用例如可以是进行币种之间转换功能的安全小程序。在例如需要将转换后的数字货币上传至区块链的情况下,Python应用需要进行基于可信根的秘钥计算。可信根一般基于设备硬件生成,利用基于可信根的秘钥签名算法可以保证数据的真实不可篡改。然而,Android系统所基于的各种设备平台和编程框架并不一致,这为Python应用跨平台进行安全计算带来困难。
[0046] 根据本说明书的实施例,将Python应用设计为,在被Android应用调用,且需要进行与可信根相关的安全计算时,通过JNI接口调用Android系统的相关Java服务,通过Java服务执行上述安全计算,然后将安全计算结果返回给Android应用。下面具体描述这样的过程。
[0047] 图4示出根据一个实施例的Python应用执行过程示意图。
[0048] 如图4所示,首先在步骤S401,某个Android应用请求调用某个Python应用。为了描述的方便,下文将发出调用请求的Android应用称为第一Android应用,被调用的Python应用称为第一Python应用。在一个具体例子中,第一Android应用例如是数字货币钱包App,第一Python应用例如用于进行数字货币转换。
[0049] 然后,在步骤S402,Android系统获取到上述调用请求后,将其转换或翻译为APDU指令的形式。
[0050] 需要理解,Python虚拟机最初是安装在智能卡中,通过APDU报文的形式与诸如读卡器之类的外部设备交互。APDU是应用协议数据单元(Application Protocol Data Unit)协议,其结构格式在IC卡国际标准ISO 7816中进行了定义。根据协议的定义,外部设备使用的APDU报文为命令APDU,即C-APDU(Command APDU);智能卡使用的APDU报文为响应APDU,即R-APDU(Response APDU)。由此,智能卡中的Python虚拟机以命令-响应的方式,与外部设备交互。
[0051] 尽管在图1的架构中,将Python虚拟机应用于Android设备,但是Python虚拟机仍然需要通过APDU报文接收命令。因此,为了与Python虚拟机通信,在该步骤中,系统将调用请求翻译为APDU指令。
[0052] 接着,在步骤S403,通过调用JNI接口,将上述APDU指令传递到APDU事件驱动模块。
[0053] 上述APDU事件驱动模块是针对Android应用调用Python应用的场景而设计的模块,该模块采用与Python虚拟机同样的原生语言编写,并通过NDK实现为Android下的动态运行库文件。如此,Java环境可以通过JNI接口与该APDU事件驱动模块交互。
[0054] 根据APDU事件驱动模块的设计,在步骤404,APDU事件驱动模块将上述APDU指令接入到Python虚拟机。
[0055] Python虚拟机获取到上述APDU指令后,就可以对其进行解析。通过解析,可以确定出调用请求中指定要执行的Python应用,即前述第一Python应用,以及可选的传递的参数。于是,Python虚拟机加载该第一Python应用的字节码,并通过解释执行字节码对应的指令,执行该第一Python应用。假定第一Python应用在执行时,需要进行安全计算。例如,该安全计算可以包括,利用私钥为数据添加签名,以便传入区块链。更具体的,上述私钥需要基于设备可信根产生。
[0056] 在一个实施例中,Python虚拟机挂载有通过原生代码(C/C++)实现的安全计算库作为其内置安全模块,该安全计算库中包括例如SM2加密算法的计算模块。在这样的情况下,如步骤S405所示,第一Python应用执行过程中,首先调用或搜索上述安全计算库。如果上述安全计算库中的计算模块可以实现所需的安全计算,则利用该安全计算库进行计算。
[0057] 需要理解,该安全计算库是利用原生语言代码实现的纯软件的计算算法库。当第一Python应用需要进行涉及可信根的可信秘钥运算时,安全计算库由于无法获得与底层硬件相关的可信根而无法实现这样的可信秘钥运算。
[0058] 在这样的情况下,在步骤S406,第一Python应用则通过JNI接口,调用Android系统中相应的Java服务,为了描述的方便,将其称为第一Java服务。该第一Java服务可以用于执行上述涉及可信根的可信密钥运算。
[0059] 在一个实施例中,上述第一Java服务为Android  KeyStore服务。Android KeyStore是从Android 4.0开始引入的一项服务,提供包括RSA非对称加密运算,AES对称加密运算,ECDSA椭圆曲线数字签名运算等多种可信密钥运算。开发者可以使用KeyStore API生成密钥、使用密钥签名、使用密钥加解密、获取密钥的属性信息,但无法将密钥本身从KeyStore中取出,这使得密钥本身不进入应用进程,大大提高了密钥的安全性。特别是在Android 8.0之后的版本中,增加了设备证明(Key Attestation)能,开发者可通过验证Key Attestation的证书链,确认密钥的确保存在安全硬件中。这使得秘钥的生成和存储与硬件紧密关系,进一步确保了秘钥运算的安全性。
[0060] 在另一实施例中,上述第一Java服务包括,通过Android OMA(Open Mobile API)协议,调用外部安全元件SE,执行上述可信密钥运算。
[0061] 安全元件SE(Secure Element)提供私密信息的安全存储、重要程序的安全执行等功能,外在表现上呈现为一块物理上独立的芯片卡,例如手机SIM卡,Micro SD卡,或者也可以是嵌入式Embedded SE芯片。安全元件SE物理上独立,具有自己独立的执行环境和安全存储,采用安全协议与外部通讯,可以实现软件和硬件上防篡改。
[0062] 对于Android系统来说,可以通过Android OMA协议,调用与Android设备相连接的安全元件,使其执行与可信根相关的可信秘钥运算,并返回运算后的结果。
[0063] 在又一实施例中,上述第一Java服务包括,在Android系统下的可信执行环境TEE中,执行上述可信秘钥运算。
[0064] TEE是一个硬件安全执行环境,可以与Android系统共用同一个主处理器,但是通过一定隔离手段提供代码和数据的安全防护、外置设备的安全访问等功能。存在多种TEE实现方案,其中包括较好地适用于Android系统的ARM处理器下的TEE方案TrustZone。由于TEE环境的安全隔离性,可以确保基于可信根的可信秘钥运算的安全执行。
[0065] 在其他实施例中,还可能调用Android系统中其他具体的Java服务,来执行上述可信秘钥运算。
[0066] 在Java服务执行所述的可信秘钥运算,得到运算结果后,可以将安全计算的结果返回给第一Android应用。
[0067] 在一个实施例中,第一Python应用通过调用上述第一Java服务,获得可信秘钥运算的结果,通过JNI接口将其返回给第一Android应用。在另一实施例中,第一Python应用还可以在调用上述第一Java服务时,指定运算结果的返回目标为第一Android应用,如此使得,第一Java服务在执行可信秘钥运算后,将运算结果直接传递给第一Android应用。
[0068] 在一种实施方式中,第一Python应用还可以将调用上述第一Java服务得到的可信秘钥运算结果与Python虚拟机内置的安全计算库进行结合,例如利用安全计算库中的算法模块对可信秘钥运算结果进行进一步计算,以得到最终安全计算的结果,并将该安全计算的结果返回给第一Android应用。
[0069] 回顾以上过程可以看到,根据本说明书实施例的方式,在第一Android应用调用第一Python应用,而第一Python应用需要进行涉及可信根的可信秘钥运算时,第一Python应用通过JNI接口直接调用Android系统中相应的Java服务来进行可信秘钥运算,而不需要关注Android平台的细节,也不需要针对不同平台开发对应的实现可信秘钥运算的逻辑,如此使得Python应用可以跨平台移植,大大提高开发者的效率。
[0070] 根据另一方面的实施例,提供了一种执行安全计算的装置,通过第一Python应用实现,其中所述第一Python应用加载在Python虚拟机中,所述Python虚拟机通过原生代码实现,并安装于Android系统之上。图5示出根据一个实施例的执行安全计算的装置的示意性框图。如图5所示,该安全计算装置500包括:
[0071] 执行单元51,配置为响应于所述Android系统中安装的第一Android应用对所述第一Python应用的调用请求,在原生代码环境中执行第一安全计算,所述第一安全计算请求基于可信根的可信密钥运算;
[0072] 调用单元52,配置为通过Java本地接口JNI,调用所述Android系统中的第一Java服务,使得所述第一Java服务执行所述可信密钥运算;
[0073] 返回单元53,配置为向所述第一Android应用返回所述第一安全计算的结果。
[0074] 在一个实施例中,原生代码包括C语言代码或C++语言代码。
[0075] 根据一种实施方式,所述Python虚拟机通过原生开发工具包NDK编译为Android系统可调用的动态运行库文件。相应地,所述调用请求在所述Android系统中被转换为APDU指令,并通过所述JNI接口传递到通过NDK实现的APDU事件驱动模块,通过该APDU事件驱动模块接入到所述动态运行库中的Python虚拟机,以使得所述Python虚拟机基于所述APDU指令,执行所述第一Python应用。
[0076] 在一个实施例中,Python虚拟机中包括通过所述原生代码实现的安全计算库。在这样的情况下,执行单元51可以配置为,在所述安全计算库中搜索所述第一安全计算所需的计算模块;调用单元52配置为,在所述安全计算库中不包含用于所述可信密钥运算的计算模块时,通过所述JNI接口调用所述Android系统中的第一Java服务。
[0077] 根据一个实施例,调用单元52所调用的第一Java服务包括AndroidKeystore服务,其中包括基于可信根的以下至少一种秘钥运算:非对称加密运算,对称加密运算,椭圆曲线数字签名运算。
[0078] 根据另一实施例,调用单元52所调用的第一Java服务包括,通过Android OMA协议,调用外部安全元件SE,执行所述可信密钥运算。
[0079] 根据又一实施例,调用单元52所调用的第一Java服务包括,在Android系统下的可信执行环境TEE中,执行所述可信秘钥运算。
[0080] 根据一种实现方式,返回单元53配置为:
[0081] 从所述第一Java服务获得可信秘钥运算的运算结果;
[0082] 通过JNI接口将所述运算结果返回给所述第一Android应用。
[0083] 根据另一种实现方式,调用单元52可以向第一Java服务指定调用结果返回目标为所述第一Android应用;返回单元53配置为,使得第一Java服务将所述可信秘钥运算的结果返回给所述第一Android应用。
[0084] 通过以上的装置,Python应用实现了跨平台的安全计算。
[0085] 根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图4所描述的方法。
[0086] 根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图4所述的方法。
[0087] 本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
[0088] 以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈