主动响应式可信Python虚拟机及其执行的方法
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及主动响应式可信Python虚拟机及其执行的方法。
背景技术
集成电路IC卡(Integrated Circuit Card),也称为智能卡(Smart card),是包含微处理器的芯片卡。由于其固有的信息安全、便于携带、比较完善的标准化等优点,智能卡越来越多的应用在人们的生活中,提供多种多样的功能,为人们的生活带来便利。具体的,在身份认证、银行、电信、公共交通、车场管理等领域,智能卡正得到越来越多的应用,例如智能卡可以实现为,二代身份证,银行的电子钱包,电信的手机SIM卡,公共交通的公交卡、地铁卡,用于收取停车费的停车卡等,这些都在人们日常生活中扮演重要角色。
另一方面,在数据处理和计算领域,信息安全是非常重要的问题。因此,在许多场景下,要求计算设备,例如智能卡,和通信系统之间进行可信计算。可信计算要求使用可信平台模块(Trusted Platform Module,TPM)安全芯片。目前,在智能卡中,通常是使用基于Java开发的Javacard实现TPM安全单元。然而,由于授权使用(License)费用等原因,Javacard的使用成本很高。并且,Javacard在一些应用场景下,扩展性非常受限。
因此,希望能有其他方式,替代javacard,降低IC卡费用,同时提高扩展性,以适用于各种可信计算场景。
发明内容
本说明书一个或多个实施例描述了一种主动响应式Python虚拟机及其执行的方法,其中扩展设置通信模块,使得其中的目标可信应用程序可以主动与外部服务器进行通信交互,提高执行效率。
根据第一方面,提供了一种主动响应式可信Python虚拟机,包括:
接口模块,用于接收主机设备发送的命令报文,所述命令报文指示所述虚拟机执行基于Python的目标可信应用程序;
应用程序管理模块,用于获取所述目标可信应用程序对应的字节码文件;
加载模块,用于从所述应用程序管理模块加载所述字节码文件;
Python执行引擎,用于执行所述字节码文件;
运行时模块,与所述Python执行引擎交互,获取所述字节码文件执行中产生的第一数据;
第一通信模块,用于响应于所述运行时模块的调用,对所述第一数据进行封装,并通过对应的第一协议,将封装的第一数据传输到所述目标可信应用程序对应的服务端平台。
在一个实施例中,所述Python虚拟机部署在智能卡芯片中,所述接口模块是与智能卡接口对应的模块,所述智能卡接口包括以下中的至少一项:7816接口,蓝牙模块,NFC模块,UART接口,I2C接口。
在以上情况下,主机设备可以为所述智能卡对应的外部设备,所述命令报文为应用协议数据单元APDU命令报文。
在另一实施例中,所述Python虚拟机部署在软安全芯片中,所述接口模块包括数据/函数接口。
根据一种实施方式,所述应用程序管理模块,从应用程序存储区读取所述目标可信应用程序对应的字节码文件。
根据另一种实施方式,Python虚拟机还包括,可信应用程序的软件开发工具包SDK,第二通信模块,以及内部通道模块,其中,
所述软件开发工具包SDK通过所述第二通信模块,从所述目标可信应用程序对应的可信服务管理平台TSM拉取所述目标可信应用程序对应的字节码文件;
所述内部通道模块,用于建立内部安全通道,并经由该内部安全通道,传输所述字节码文件;
所述应用程序管理模块,从所述内部安全通道获取所述字节码文件,并将其存储到应用程序存储区。
在一个实施例中,Python虚拟机还包括白盒安全模块,用于在应用层对所述字节码文件进行安全加/解密;
所述应用程序管理模块通过所述白盒安全模块与所述应用程序存储区交互。
根据进一步的实施例,上述第二通信模块通过远程过程调用RPC或MQTT消息协议实现;上述内部通道模块通过SCP02协议,建立所述内部安全通道。
在一个实施例中,Python虚拟机还包括,密钥管理模块,所述密钥管理模块中保管有所述目标可信应用程序的、与所述内部安全通道相关的第一密钥;所述应用程序管理模块,利用所述第一密钥获取所述字节码文件,并将其存储到应用程序存储区。
根据一个实施例,密钥管理模块中保管有所述目标可信应用程序的、与可信计算相关的第二密钥;所述Python执行引擎在执行所述字节码文件过程中,利用所述第二密钥进行可信计算,产生所述第一数据。
根据一种实施方式,Python虚拟机还包括,安全计算模块,基于所述第二密钥进行安全计算,得到安全计算结果;
所述第一通信模块将所述第一数据与所述安全计算结果一同封装。
在一个具体实施例中,所述第一通信模块具体用于,通过套接字socket库,将传输层中TCP/IP协议的第一数据进行封装,并通过应用层HTTP/HTTPS协议,将封装的数据传输到所述服务端平台。
在一个具体例子中,所述目标可信应用程序为区块链应用,所述第一数据为存证数据,所述对应的服务端平台为区块链平台。
根据第二方面,提供一种执行可信应用程序的方法,在Python虚拟机中执行,包括:
通过接口模块,接收主机设备发送的命令报文,所述命令报文指示所述虚拟机执行基于Python的目标可信应用程序;
通过应用程序管理模块,获取所述目标可信应用程序对应的字节码文件;
通过加载模块,从应用程序管理模块加载所述字节码文件;
通过Python执行引擎,执行所述字节码文件;
通过运行时模块,获取所述字节码文件执行中产生的第一数据;
通过第一通信模块,对所述第一数据进行封装,并通过对应的第一协议,将封装的第一数据传输到所述目标可信应用程序对应的服务端平台。
根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第二方面的方法。
根据第四方面,提供了一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第二方面的方法。
根据本说明书实施例提供的虚拟机和方法,可以实现应用程序的高效执行和主动响应。其中。通过Python虚拟机中的第一通信模块,可信应用程序可以在执行过程中直接主动地与对应的服务端交互,而不必通过响应报文经由主机设备中转。进一步地,通过SDK等模块,Python虚拟机可以直接拉取所需的应用程序。即使在接收到的命令报文指示执行尚未下载的目标应用程序时,Python虚拟机也可以现场拉取然后加载执行目标应用程序,而无需进一步命令报文的逐步指示和干预。此外,通过各种管理模块,例如应用程序管理模块以及密钥、证书等管理模块,以及辅助模块,例如内存隔离模块等,Python虚拟机可以独立地完成目标应用程序执行期间的各种操作,无需操作系统的辅助管理,也无需命令报文的逐步指示和干预。由此,提高可信应用程序执行的效率,并简化其开发。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出了根据本说明书实施例的计算设备100的结构图;
图2示出在一个实施例中Python虚拟机的结构示意图;
图3示出在一个实施例中Python虚拟机与外部交互的示意图;
图4示出根据一个实施例的主动响应式Python虚拟机的结构示意图;
图5示意性示出主动响应式Python虚拟机的交互示意图;
图6示出根据一个实施例的在Python虚拟机中执行可信应用程序的方法流程图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
如前所述,通过Java语言开发的Java智能卡成本比较高。因此,根据一种实施方案,提出在例如智能卡的计算设备中使用Python虚拟机,从而支持用Python语言开发各种应用程序。
图1示出了根据本说明书实施例的计算设备100的结构图。如图1所示,计算设备100包括硬件架构110、操作系统120、Python虚拟机130和应用程序(Applet)存储区140。
在一个实施例中,计算设备100体现为智能卡。但是,在其他实施例中计算设备100也可以体现为其他形式的设备。
在一个实施例中,硬件架构110至少包括,处理器芯片,存储器(ROM/RAM/EEPROM等),输入/输出(Input/Output,I/O)接口。I/O接口被配置为与外部设备进行数据/信息交互。在不同计算设备中,例如在不同类型的智能卡中,根据与外部设备的通信需要,I/O接口可以包括下述I/O接口中的至少一项:UART接口;NFC模块;7816接口;蓝牙模块;I2C接口。处理器芯片被配置为基于I/O接口所接收的指令/数据,执行相应的程序运算。
在硬件架构110上,可以安装操作系统120,该操作系统120一般是COS片内操作系统(Chip Operating System)。对于传统的单一功能的智能卡,往往是在安全的环境下开发COS和卡片应用,之后将其一同装载到芯片中。近来推出的开放式操作系统平台,如MultOS,Windows For Smart Card,允许动态地装载、更新或删除卡片中的应用,从而实现一卡多用的多功能卡。一般地,操作系统120中可以包括I/O接口驱动模块,用于对I/O接口进行驱动,以启用I/O接口来进行输入/输出操作。在一些实施例中,操作系统120中还可以包括存取服务模块,用于在应用程序存储区140中安装或卸载应用程序,以及在进行程序计算时,执行针对键/值(key/value,KV)数据库的键/值存取操作等。另外,操作系统120还可以包括一些算法库或函数库。
取代于Java卡中的Java虚拟机,在图1所示的实施方式中,在操作系统120上安装Python虚拟机130,提供Python运行环境。Python虚拟机130中包括Python执行引擎,用于执行基于Python编程语言开发的应用程序,或称为小程序Applet。
相应的,在应用程序存储区140可以存储已经安装的基于Python开发的应用程序Applet。图1中示例性示出了若干应用程序,包括区块链应用程序141,银行卡应用142,身份应用143,公交应用144。
图2示出在一个实施例中Python虚拟机的结构示意图。如图2所示,Python虚拟机中至少包括,加载模块203,执行引擎204,运行时模块205。
当接收到执行某个应用程序Applet的指令时,例如指示执行区块链应用程序141,加载模块203从图1中的应用程序存储区加载该应用程序。具体地,加载模块203加载应用程序对应的字节码(bytecode)文件。字节码文件是经由Python编译器编译后产生的文件,通常存储为pyc格式。于是,执行引擎204可以根据字节码文件中的逐条字节码指令,产生机器码在处理器中运行。运行时模块205提供应用程序执行期间的执行环境数据,其中包括执行过程中的帧数据、函数数据,等等。此外,Python虚拟机还包括执行应用程序所需要的程序计数器、调用栈、垃圾回收(GC)机制,等等。
图3示出在一个实施例中Python虚拟机与外部交互的示意图。可以理解,如图1所示,Python虚拟机安装于操作系统OS之上,通过操作系统,经由接口与外部进行交互。为了使得Python虚拟机执行指定的Python应用程序,安装Python虚拟机的计算设备100一般至少需要与应用服务管理平台200以及主机设备300交互。
应用服务管理平台是发布和管理各种应用程序的平台,在可信计算的场景下体现为可信服务管理平台(Trusted Service Manager)TSM 200。该可信服务管理平台TSM提供各种可信应用程序的发行和更新,并可将指定的可信应用程序,例如前述的区块链应用114,远程发行到计算设备100。计算设备100通过操作系统和接口,与可信服务管理平台TSM远程交互,从中获取可信应用程序,并将其存储在应用程序存储区。
主机设备300通常是需要业务应用程序的外部设备。例如,在计算设备100是智能卡,其上安装有业务应用程序(例如,银行卡应用,公交应用等)的情况下,主机设备300例如可以是读卡机具。或者,主机设备300也可以是其他需要计算设备100运行应用程序的设备或终端,例如可以是一个Android主机。
智能卡与主机设备300之间多采用应用协议数据单元APDU协议的形式,以命令-响应的方式进行交互,即,主机设备300主动发出命令APDU报文,智能卡100以响应APDU的形式被动进行响应应答。具体的,主机设备300可以通过命令APDU选择要执行的程序Applet,或要执行的指令,还可以通过命令APDU传入待处理的数据。智能卡接收到命令APDU之后,可以根据命令中的指示,启动或执行相应的Applet或指令,对传入数据进行处理,还可以将处理结果以响应APDU的形式返回给主机设备。
因此,例如智能卡的计算设备100中的Python虚拟机通常是以被动响应的方式工作。也就是,每接收到一条命令APDU,执行其中的命令,返回响应APDU,然后等待下一条APDU。
例如,在一个例子中,主机设备300通过命令APDU,指示计算设备100执行区块链应用114。假定该区块链应用114执行的目标内容包括,将某些数据作为存证数据,提交到区块链应用114对应的区块链平台400。那么,在命令-响应的工作方式下,计算设备100只能通过响应APDU,将相关的存证数据返回给主机设备300,由主机设备300提交到区块链平台400。并且,这样的过程一般需要经过多次命令-响应的交互才可以实现。在此过程中,计算设备100被动地接收命令APDU,执行其中的命令后将执行结果以响应的形式返回给主机设备300,并被动地等待下一条APDU。
通过图3所示的示意图可以看到,图2所示的Python虚拟机通过操作系统与外部交互,其中与主机设备在命令-响应的方式下,被动地进行响应交互。因此,可以将图2所示的Python虚拟机称为被动响应式虚拟机。
为进一步提升Python虚拟机的执行效率,同时简化上层应用程序Applet的开发,根据本说明书的实施例,进一步提出主动响应式Python虚拟机。
图4示出根据一个实施例的主动响应式Python虚拟机的结构示意图。如图4所示,该主动响应式Python虚拟机400至少包括:接口模块401,用于接收主机设备的命令报文;应用程序管理模块402,用于管理可信应用程序的存储;加载模块403,用于加载应用程序对应的字节码文件;执行引擎404,用于执行字节码文件;运行时模块405,用于获取字节码文件执行中产生的数据;第一通信模块406,用于封装数据,并通过一定协议,将其传输给应用程序对应的服务端。
下面结合执行一个可信应用程序的过程,描述该主动响应式Python虚拟机中包含的各个模块及其作用。
如图所示,主动响应式可信Python虚拟机400包括接口模块401,用于接收主机设备发送的命令报文。
在一个实施例中,该主动响应式Python虚拟机400可以部署在智能卡芯片中。此时,接口模块401是与智能卡接口对应的模块,所述智能卡接口包括以下中的至少一项:7816接口,蓝牙模块,NFC模块,UART接口,I2C接口。
在智能卡的情况下,主机设备可以是智能卡对应的外部设备,例如读卡设备;主机设备发出的命令报文可以是前述APDU命令报文。
在另一实施例中,该Python虚拟机也可以部署在软件实现的软安全芯片上或虚拟机具中,整体作为一个软件安全沙箱。此时,接口模块401可以是软件接口,包括通用数据/函数接口,例如一些动态链接库DLL函数接口。
在这样的情况下,主机设备可以是任何需要虚拟机运行应用程序的设备或终端,例如可以是一个Android主机。此时,主机设备与Python虚拟机的交互可以不限于APDU命令的形式,而是采用双方约定的其他格式。
通过解析主机设备发送的命令报文,可以确定出命令的内容。在一个实施例中,命令报文指示Python虚拟机执行某个基于Python的可信应用程序,在此将其称为目标可信应用程序。
可以理解,Python虚拟机所在的设备中可以安装有多个应用程序,例如图1所示的区块链应用程序141,银行卡应用142,身份应用143,公交应用144。这些应用程序可以通过应用程序管理模块402实现存储和读取的管理。例如,多个应用程序中每个应用程序各自对应一个字节码文件,应用程序管理模块402可以分别对应地记录,各应用程序对应哪个字节码文件,存储在应用存储区的哪个位置。在一个实施例中,应用程序管理模块402还可以与其他管理模块配合,例如秘钥管理模块,ID管理模块,证书管理模块等(这些模块将在后续进行描述),对应用程序存储和读取过程中相关的操作进行管理。
对于命令报文中指定的目标可信应用程序,应用程序管理模块402可以获取目标可信应用程序的字节码文件,以供加载。
在一种情况下,Python虚拟机所在设备已经预先下载了目标可信应用程序,相应的,应用程序存储区已经存储有目标可信应用程序对应的字节码文件。在这样的情况下,应用程序管理模块402可以从应用程序存储区读取目标可信应用程序的字节码文件。
在一个实施例中,Python虚拟机400中还包括白盒安全模块410,设置在与应用程序存储区连接的接口处,用于在应用层对字节码文件进行安全加/解密。相应的,在一个实施例中,应用程序管理模块402经由该白盒安全模块410,从应用程序存储区读取字节码文件,其中,应用程序存储区可以存储经过加密的字节码文件,这样的字节码文件在白盒安全模块410中被解密,于是,应用程序管理模块402安全地读取得到解密的字节码文件。
需要理解的是,初始地,应用程序存储区并不存在任何应用程序;各种可信应用程序是由Python虚拟机所在设备从可信服务管理平台TSM远程获取得到,并存储到应用程序存储区的。这个过程又称为拉取应用程序。根据本说明书的一种实施方式,与常规地通过操作系统拉取可信应用程序的方式不同的,将用于拉取应用程序的模块也设置在Python虚拟机中。
如图4所示,在一个实施例中,Python虚拟机400还包括,第二通信模块407,可信应用程序的软件开发工具包SDK 408,以及内部通道模块409,这些模块共同作用,从可信服务管理平台TSM拉取目标可信应用程序。
具体地,软件开发工具包SDK 408又可称为TSM SDK,是客户端对接作为服务端的可信服务管理平台TSM的API,其中包含与TSM平台交互的接口函数和一些辅助工具。
第二通信模块407,提供与TSM平台交互的通信通道。在一个具体例子中,第二通信模块407通过远程过程调用RPC与TSM平台建立通信通道;在另一例子中,第二通信模块407通过MQTT消息协议与TSM平台建立通信通道,其中MQTT消息协议的方式适用于TSM发布应用程序,SDK订阅相应应用程序的情况。
于是,TSM SDK 408可以通过第二通信模块407,从目标可信应用程序对应的可信服务管理平台TSM拉取目标可信应用程序。在一个实施例中,TSM平台可以直接发布各应用程序的经过编译的字节码文件(pyc文件)。在这样的情况下,TSM SDK 408可以直接拉取获得目标可信应用程序的字节码文件。在另一实施例中,TSM平台发布各应用程序的源代码文件;在这样的情况下,TSMSDK 408拉取目标应用程序的源代码文件后,交由Python编译器编译为字节码文件。
TSM SDK 408拉取获得目标可信应用程序后,需要交由应用程序管理模块402进行存储和管理,这涉及字节码文件的安全传输。因此,根据一个实施例,Python虚拟机中还包括内部通道模块409,用于建立内部安全通道,并经由该内部安全通道,传输字节码文件。
在一个实施例中,内部通道模块409通过SCP02协议,建立内部安全通道。如本领域技术人员所知,在智能卡中,卡和卡外实体都可以作为安全消息的发送实体和接受实体,而SCP02是卡和卡外实体之间,用于保证实体认证,传输数据完整性和数据来源认证,传输数据的机密性的安全通道协议。因此,根据前述实施例,当TSM SDK 408从TSM平台,即卡外实体,获取到目标可信应用程序的字节码文件后,可以利用SCP 02协议,在Python虚拟机内部建立一个内部安全通道,来传输该字节码文件,以保证数据完整性和并认证其来源。在其他实施例中,也可以采用其他协议,或其他加解密的方案,构建安全通道,传输字节码文件。
相应的,前述的应用程序管理模块402可以通过该内部安全通道,获取到拉取的目标可信应用程序的字节码文件,并将其存储到应用程序存储区。
在存在白盒安全模块410的情况下,应用程序管理模块402经由该白盒安全模块410将字节码文件存储到应用程序存储区,其中,字节码文件在白盒安全模块410中被加密,于是在应用程序存储区中存储经过加密的字节码文件。后续需要从应用程序存储区读取该字节码文件的时候,再经由白盒安全模块410解密。
以上拉取目标可信应用程序的过程,可以在多种情况下执行。
在一种情况下,在Python虚拟机400初始化的时候,上述TSM SDK 408拉取包括目标可信应用程序在内的各种应用程序,应用程序管理模块402对拉取的应用程序进行存储。
在另一种情况下,在TSM平台对目标应用程序进行更新的时候,TSM SDK408拉取更新的目标可信应用程序,应用程序管理模块402对其进行存储。
在又一种情况下,在上述接口模块401接收到执行目标可信应用程序的命令报文,而应用程序存储区还没有存储相应的字节码文件时,TSM SDK 408现场拉取所需的目标可信应用程序,应用程序管理模块402获得目标可信应用程序对应的字节码文件,并对其进行存储。
以上,不管是预先下载有目标可信应用程序,或者现场从TSM平台拉取目标可信应用程序,应用程序管理模块402均可以获取到目标可信应用程序的字节码文件。于是,加载模块403可以从应用程序管理模块402加载目标可信应用程序对应的字节码文件。相应地,执行引擎404可以执行该字节码文件中的字节码指令。运行时模块405与执行引擎404交互,从执行引擎获取执行中产生的数据,并向其提供执行所需的环境数据。
在一个实施例中,目标可信应用程序在执行过程中需要与对应的服务端交互。例如,在一个具体例子中,目标可信应用程序为区块链应用程序,该应用程序执行中需要将某些数据作为存证数据,提交到区块链应用对应的区块链平台(服务端)。
不同于图3所示的被动响应方式,在图4所示的主动响应式Python虚拟机中,在上述情况下,运行时模块405调用第一通信模块406,通过该第一通信模块,主动与目标应用程序对应的服务端交互。第一通信模块406响应于运行时模块405的调用,在对待传输数据进行封装,并通过应用层协议,将封装的数据传输到目标可信应用程序对应的服务端平台。
在一个具体实施例中,第一通信模块包括套接字Socket库,实现Socket接口,对传输层TCP/IP数据进行封装。可以理解,应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,可以在应用层和传输层之间提供套接字Socket接口。Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为简单的接口供应用层调用,从而实现不同应用程序进程在网络中通信。
第一通信模块406通过socket库在传输层对数据进行封装后,就可以在应用层,利用应用层协议,例如HTTP/HTTPS,将封装的数据传输到服务端平台。
更具体的,延续上例,对于区块链应用程序,假定该应用程序的字节码指令中包含向区块链平台上传存证数据的指令。执行引擎404执行对应指令时,根据指令指示,产生(例如通过计算产生或读取)存证数据。运行时模块405获取该存证数据,调用第一通信模块406对其进行传输。第一通信模块406通过socket库对存证数据进行封装,然后通过HTTP/HTTPS协议,将存证数据传输到区块链平台。
在另一例子中,假定目标应用程序在执行过程中,需要调用外部数据。那么类似的,当执行引擎404执行到相应的指令时,会向运行时模块405请求数据。运行时模块405于是调用第一通信模块406,向服务端发送读取数据的请求。此时,第一通信模块406封装并传输的数据可以是请求数据。
如图4所示,在一个实施例中,Python虚拟机400还包括密钥管理模块411,用于管理与可信应用程序相关的密钥。在一个例子中,密钥管理模块411管理的密钥包括,与内部安全通道相关的密钥,称为第一密钥。在这样的情况下,应用程序管理模块402从密钥管理模块411中获取第一密钥,利用该第一密钥获取通过内部安全通道传输的应用程序字节码文件,从而对其进行存储和管理。
根据一个实施例,密钥管理模块411管理的密钥包括,各可信应用程序的、与可信计算相关的密钥,称为第二密钥。如此,在前述的目标可信应用程序涉及可信计算的情况下,执行引擎404在执行对应的字节码文件过程中,通过运行时模块405调用该密钥管理模块411,从中获取第二密钥,利用该第二密钥进行可信计算。在一个具体例子中,有待传输到外部设备的数据,例如,有待上传到区块链平台的存证数据,可以是利用上述第二密钥产生的。
在一个实施例中,Python虚拟机400还包括证书管理模块412,用于管理各可信应用程序相关的证书。应用程序管理模块402可以与该证书管理模块412交互,在存储阶段中需要验证可信应用程序的证书时,从该模块获取证书。在可信应用程序执行过程中需要证书的情况下,执行引擎404或运行时模块405也可以与该证书管理模块412交互,从中获得目标可信应用程序对应的证书文件。
在一个实施例中,Python虚拟机400还包括ID管理模块413,用于管理各个安全实体SE的唯一ID。在可信应用程序拉取、加载或执行过程中,应用程序管理模块402、执行引擎404或运行时模块405可以调用该模块413,实现ID管理。
在一个实施例中,Python虚拟机400还包括内存隔离模块414,用于保证各个应用程序执行期间访问数据的内存安全隔离。在一个具体例子中,内存隔离模块414可以对不同可信应用程序访问的数据文件添加与应用程序对应的前缀,通过这样的前缀处理,每个可信应用程序只能访问相应前缀的数据,从而实现数据的内存隔离。在其他例子中,内存隔离模块414还可以采用其他方案,区分并隔离不同应用程序访问的内存数据。
在一个实施例中,Python虚拟机400还包括安全计算模块415,用于对可信计算相关的密钥进行安全计算,得到安全计算结果。具体地,部分可信应用程序在与外部通信之前,需要进行密钥协商或密钥计算,在这样的情况下,安全计算模块415可以对涉及可信计算的密钥进行加密。加密可以采用国密标准加密算法。在一个例子中,加密的结果可以作为公钥,用于对待传输内容进行签名。签名内容作为安全计算结果,可以通过第一通信模块,与待传输数据一起封装并发送。
Python虚拟机400还可以根据需要包含其他扩展模块,各扩展模块,包括接口模块401,第一通信模块406,第二通信模块407,安全计算模块415,以及可能的其他模块,可以是采用非Python的其他语言编写(例如C,C++)且预先编译好的模块。
通过图4所示的Python虚拟机,可以实现应用程序的高效执行和主动响应。图5示意性示出主动响应式Python虚拟机的交互示意图。结合图4和图5,在主动响应式Python虚拟机中,通过第一通信模块406,可信应用程序可以在执行过程中直接主动地与对应的服务端交互,而不必通过响应报文经由主机设备中转。进一步地,通过SDK等模块,Python虚拟机可以直接拉取(而不必经由操作系统)所需的应用程序。即使在接收到的命令报文指示执行尚未下载的目标应用程序时,Python虚拟机400也可以现场拉取然后加载执行目标应用程序,而无需进一步命令报文的逐步指示和干预。此外,通过各种管理模块,例如应用程序管理模块以及密钥、证书等管理模块,以及辅助模块,例如内存隔离模块等,Python虚拟机400可以独立地完成目标应用程序执行期间的各种操作,无需操作系统的辅助管理,也无需命令报文的逐步指示和干预。
由此可见,图4所示的主动响应式Python虚拟机可以省却大量的命令报文指示和等待时间,并省却许多与操作系统的交互操作,如此使得可信应用程序的执行更加高效。并且,基于这样的主动响应式Python虚拟机,Python应用程序开发人员可以集中于程序中的执行逻辑,而不必如常规一样对执行过程中与操作系统的各种交互,通过报文的各种交互进行特殊设计,因此极大简化了开发人员的程序开发成本。
根据另一方面的实施例,还提供一种在Python虚拟机中执行可信应用程序的方法。图6示出根据一个实施例的方法流程图,如图6所示,该方法包括:在步骤61,通过接口模块接收主机设备发送的命令报文,所述命令报文指示所述虚拟机执行基于Python的目标可信应用程序;在步骤62,通过应用程序管理模块,获取所述目标可信应用程序对应的字节码文件;在步骤63,通过加载模块,从应用程序管理模块加载所述字节码文件;在步骤64,通过Python执行引擎执行所述字节码文件;在步骤65,通过运行时模块获取所述字节码文件执行中产生的第一数据;在步骤66,通过第一通信模块,对所述第一数据进行封装,并通过对应的第一协议,将封装的第一数据传输到所述目标可信应用程序对应的服务端平台。
在一个实施例中,步骤62具体为,通过所述应用程序管理模块,从应用程序存储区读取所述目标可信应用程序对应的字节码文件。
在一个实施例中,在步骤62之前,还包括,
通过软件开发工具包SDK,经由第二通信模块,从所述目标可信应用程序对应的可信服务管理平台TSM拉取所述目标可信应用程序对应的字节码文件;
通过内部通道模块建立内部安全通道,并经由该内部安全通道,传输所述字节码文件;
相应的,步骤62具体包括,通过所述应用程序管理模块,从所述内部安全通道获取所述字节码文件,并将其存储到应用程序存储区。
在一个实施例中,所述方法还包括,通过白盒安全模块,在应用层对所述字节码文件进行安全加/解密。
根据一个具体实施例,上述方法中,第二通信模块通过远程过程调用RPC或MQTT消息协议实现;内部通道模块通过SCP02协议,建立所述内部安全通道。
根据一种具体实施方式,上述从内部安全通道获取所述字节码文件,并将其存储到应用程序存储区包括:
利用第一密钥获取所述字节码文件,并将其存储到应用程序存储区,所述第一密钥是所述目标可信应用程序的、与所述内部安全通道相关的密钥。
在一种具体实施方式中,通过Python执行引擎执行所述字节码文件包括:
在执行所述字节码文件过程中,利用第二密钥进行可信计算,产生所述第一数据,所述第二密钥是目标可信应用程序的、与可信计算相关的密钥。
进一步地,在一个实施例中,所述方法还包括,通过安全计算模块,基于所述第二密钥进行安全计算,得到安全计算结果;
所述第一通信模块将所述第一数据与所述安全计算结果一同封装。
在一个具体实施例中,步骤66具体实现为,第一通信模块通过套接字socket库,将传输层中TCP/IP协议的第一数据进行封装,并通过应用层HTTP/HTTPS协议,将封装的第一数据传输到所述服务端平台。
在一个具体例子中,上述目标可信应用程序为区块链应用,所述第一数据为存证数据,所述对应的服务端平台为区块链平台。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图6所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图6所述的方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。