用于在安全模块上执行代码序列的方法与流程

文档序号:12287780阅读:248来源:国知局
用于在安全模块上执行代码序列的方法与流程

本发明涉及一种用于在安全模块上执行代码序列的方法。本发明还涉及对应的安全模块以及用于在安全模块上产生代码序列的方法和装置。



背景技术:

从现有技术中已知在安全模块上对待解释的代码序列进行压缩。在文献G.Bizzotto等的“Practical Java Card Bytecode compression”,RENPAR’14/ASF/SYMPA,Hamamet,Tunesien,10.–13.April 2002中,描述了在使用在JavaCard规范中不使用的指令的条件下对JavaCard字节码(JavaCard Bytecode)进行压缩。

文献EP 1 709 534 B1描述了一种用于通过虚拟机借助以不同版本暂存并使用的代码解释器来执行程序的方法。

在文献EP 1 920 328 B1中描述了一种用于在便携式数据载体上执行应用的方法,其中,通过在不同的操作代码表之间切换来在操作代码语音之间进行变换。

用于对代码进行压缩或者用于执行压缩的代码的已知方法具有以下缺点,即,压缩是预先固定地设置的,并且例如不能灵活地匹配于安全模块上的情况。



技术实现要素:

本发明要解决的技术问题是,在安全模块上灵活地存储代码序列并且对应地进行解释。

上述技术问题通过独立权利要求的主题来解决。在从属权利要求中限定了本发明的扩展方案。

根据本发明的方法用于在安全模块上执行代码序列,其中,代码序列包括待替换的代码和待解释的代码。在方法的步骤a)中,用子代码序列临时替换相应的待替换的代码,其中,子代码序列包括至少一个具有可解释的代码值的代码。在此,所述替换与待替换的代码的代码值有关地进行。在步骤b)中,借助用于代码值的解释信息对代码序列和子代码序列的待解释的代码进行解释。

根据本发明的方法的特征在于,在上面的替换步骤中,不仅依据代码值,而且依据选择信息,产生用于待替换的代码的代码值的子代码序列。

在此,根据本发明的方法具有如下优点,即,通过合适地规定选择信息,能够灵活地针对对应的子代码序列定义待替换的代码。特别是在此对待替换的代码进行压缩,即其比用来替换待替换的代码的子代码序列更小。由此能够节省安全模块上的存储空间。

在其上执行代码序列的安全模块可以不同地构造。安全模块优选是硬件安全模块。特别地,安全模块可以是优选能够在终端设备中使用的便携式数据载体。安全模块也可以固定地安装在终端设备中。因此优选地,安全模块是如下部件中的一个或多个:SIM/USIM卡(SIM=Subscriber Identity Modul(订户身份模块),USIM=Universal Subscriber Identity Modul(通用订户身份模块))、MikroSD卡、USB令牌(USB=Universal Serial Bus(通用串行总线))、芯片卡、RFID模块(RFID=Radio Frequency Identification(射频识别))、TPM模块(TPM=Trusted Platform Modul(可信平台模块))、NFC模块(NFC=Near Field Communication(近场通信))、嵌入式SIM模块、TEE环境(TEE=Trusted Execution Environment im Sinne der GlobalPlatform Spezifikation(在全局平台规范意义下的可信执行环境))。

在根据本发明的方法中使用的选择信息可以不同地构造。在一个变形方案中,能够与选择信息有关地针对同一代码值产生不同的子代码序列。选择信息也可以被构造为,其针对待替换的代码选择多个替换规则中的一个。

在根据本发明的方法的另一种构造中,代码序列除了代码之外还包括参数和/或选择信息本身。在此,选择信息可以包括位置选择信息,该位置选择信息给出在子代码序列中的哪个位置插入代码序列的相应的参数。优选地,选择信息是位置选择信息,即选择信息仅由位置选择信息构成。位置选择信息优选包含在上面描述的替换规则中或者在需要时还包含在解释信息中、例如在对应的解释器表中。

在另一个优选变形方案中,选择信息与代码序列相关联,并且与以下内容有关:

-代码序列属于哪个,例如代码序列是否属于操作系统、程序库、安全模块上的应用或小程序(Applet);和/或

-代码序列存储在安全模块中的哪个存储位置,特别是代码序列是存储在ROM中、非易失性存储器中、目录中、还是存储在安全模块上的安全域中;和/或

-代码序列属于哪个应用和/或哪个数据包和/或哪种方法;和/或

-代码序列源自哪个代码发行方,特别是代码序列源自安全模块的制造商、安全模块的发行方、还是未知的第三方;和/或

-代码序列与哪个安全级别相关联,即代码序列处于哪个证书层级。

在方法的另一种构造中,待解释的代码具有在代码规范中预先给定的代码值,而待替换的代码具有在代码规范中未使用的代码值。代码规范在此例如可以是JavaCard规范,其中,在这种情况下在安全模块上运行Java虚拟机。代码规范的代码值例如可以是字节码、特别是JavaCard字节码。

在方法的另一种构造中,代码序列的待解释的代码和/或子代码序列的代码具有专门的、在代码规范中不使用的代码值,其借助解释信息来解释。与上面定义的可以用于待替换的代码的未使用的代码值不同,专门的代码值可以在没有替换的中间步骤的情况下直接借助解释信息进行解释。

除了上面描述的用于执行代码序列的方法之外,本发明还包括一种具有在其上存储的代码序列的安全模块,其中,代码序列包括待替换的代码和待解释的代码,其中,安全模块被配置用于执行上面描述的根据本发明的用于执行代码序列的方法或者该方法的一个或多个优选的变形方案。

本发明还涉及一种用于在安全模块上产生代码序列的方法,其中,代码序列包括待替换的代码和待解释的代码。代码序列在此由相应地具有至少一个具有可解释的代码值的代码的子代码序列并且由待解释的代码生成,并且存储在安全模块上。所述方法的特征在于,规定选择信息,使得在安全模块上执行代码序列时,依据选择信息临时用相应的子代码序列替换待替换的代码。

在此描述的方法优选被构造为,由此产生的代码序列能够利用上面描述的根据本发明的用于执行代码序列的方法或者该方法的一个或多个优选的变形方案来执行。

本发明还涉及一种用于在安全模块上产生代码序列的装置,其中,代码序列包括待替换的代码和待解释的代码,其中,装置被构造用于执行上面描述的用于产生代码序列的方法或者该方法的一个或多个优选的变形方案。

附图说明

下面根据附图详细描述本发明的实施例。

其中:

图1示出了基于根据本发明的方法的一个变形方案执行由JavaCard字节码构成的代码序列的示意性图示;

图2示出了在执行图1中的代码序列时可使用的解释器表;

图3示出了在执行图1中的代码序列时可使用的解压缩表;以及

图4示出了再现在图1中描绘的代码序列的产生的流程图。

具体实施方式

下面,根据芯片卡形式的安全模块SM,示例性地说明根据本发明的方法。安全模块在图1中仅示意性地通过虚线矩形示出。代表安全模块的芯片卡是所谓的JavaCard,其使用虚拟机来执行由JavaCard字节码构成的代码序列。在此,在下面提及的字节码的示例源自JavaCard规范。

由相继的代码C1和C2以及与代码相关联的参数P构成的待执行的代码序列CS位于安全模块SM上。在此,代码C1在权利要求的意义上是待替换的代码。类似地,代码C2在权利要求的意义上是待解释的代码。虽然使用相同的附图标记,但是代码C1和其代码值以及代码C2和其代码值是不同的。各个代码C1和C2可以与一个或多个参数P相关联,或者也可能不与任何参数相关联。如果代码序列CS的代码与一个或多个参数相关联,则其在图1中沿从左向右的方向在对应的代码之后。

在执行代码序列CS的范围内,将待解释的代码C2与所属的参数P(如果存在)在不变的情况下传递到作为安全模块SM的组成部分的解释器IN。在此,代码C2是在JavaCard规范中定义的字节码,利用其能够执行预定功能。在需要时,代码C2还可以附加地包括未在JavaCard规范中定义并且与其专用功能相关联的专用字节码。这在下面描述的图2的解释器表IN中可以看出。

与待解释的代码C2不同,在执行代码序列CS时,待替换的代码C1临时被相应的子代码序列CS'替换,该子代码序列相应地包含由解释器IN可解释的代码。为此,将子代码序列CS'传输到解释器IN。在这里描述的实施例中,待替换的代码C1相对于代替其的相应的子代码序列是压缩的,从而节省安全模块SM上的存储空间。

传输到解释器IN的子代码序列CS'以及代码C2借助解释器表进行解释。在图2中示出了这种解释器表的示例。根据图2的解释器表ITab特别是在第一列中指定了在待解释的代码C2中使用的字节码00至79。在此,字节码00至70是在JavaCard规范中规定的。与此不同,字节码71至79是在JavaCard规范中未使用的专用字节码。在解释器表ITab的第二列“地址”中,字节码00至70与在JavaCard规范中定义的功能Fkt0至Fkt70相关联。与此相对,字节码71至79与专用功能prop_Fktl至prop_Fkt9相关联。此外,在解释器表ITab的右边的列中,给出了在对字节码进行解释的范围内需要的属于字节码的相应的参数的数量。

此外,解释器表ITab的下部包含用于对应的待替换的代码C1的字节码81至99,其中,在此其是在JavaCard规范中未使用的空闲的字节码。对于这些代码,在列“地址”中代替功能,给出选择信息AI,该选择信息规定以何种方式将参数插入解压缩的代码序列CS'中。由此解释器识别出字节码81至99与待替换的代码C1有关,该待替换的代码在对其进行解释之前必须进行解压缩,这在右边的列中通过用于参数的数量的值9示出。

根据图2,字节码82具有选择信息“1,3”,这意味着,该字节码的唯一的参数要被插入解压缩的代码序列CS'的位置3。与此相对,字节码99与选择信息“2,2”相关联,其示出该字节码的两个参数要被插入解压缩的代码序列CS'的位置2。与字节码82和99不同,没有参数属于字节码81,这在该解释器表的第二列中通过值“0”示出。值“0”也表示规定没有参数要插入代码序列CS'的选择信息。

为了由对应的代码序列CS'临时替换字节码81至99,使用在图3中简要地示出的解压缩表DC。在此,对于字节码81至99中的每一个,在列“替换”中规定了解压缩的代码序列CS'。然后,在该代码序列中,基于相关联的选择信息AI,在指定的位置插入对应的参数(如果存在)。该代码序列然后可以由解释器IN处理。

根据上面描述的示例,对于待替换的代码相应地规定选择信息AI,该选择信息是位置选择信息,其指定要插入的参数在代码序列CS'中的位置。代替位置选择信息,选择信息还可以规定从多个替换规则中选择的替换规则(特别是解压缩表)。选择信息还可以依据不同的标准来规定。例如,选择信息可以与代码序列布置在安全模块SM上的哪个逻辑区域有关。逻辑区域特别是可以通过虚拟机的上下文参考数据包和/或小程序和/或所调用的方法来定义。上面已经提及了用于规定选择信息的标准的其它示例。

在上面描述的实施例中,选择信息包含在解释器表ITab中。虽然如此,也可能存在如下可能性:选择信息在解压缩表DC中规定,该解压缩表为此可以包含另外的列,其以与在图2中的解释器表ITab的列“地址”中相同的方式包含选择信息。

下面,根据图4说明用于产生代码C1的对图1中的子代码序列CS'进行压缩的可能的方式。对应的解压缩对选择信息AI进行处理。如在图4中所示出的,在步骤S1中,首先读入待压缩的子代码序列CS'。在步骤S2中,对子代码序列CS'进行直方图分析。在此,确定同一代码在所有子代码序列CS'中的频度。在这里考虑的实施例中,子代码序列CS'中的代码相应地包括由JavaCard规范构成的单个字节码,该字节码可能与一个或多个参数相关联。下面将这种字节码称为标准字节码。

在接下来的步骤S3中,对于在子代码序列CS'中出现的具有相同的代码值的代码在考虑其频度的情况下确定权重。权重的值在此是对应的代码在所有子代码序列中的频度(即出现的次数)乘以字节的数量,这些字节通过使用对应地规定的空闲的字节码(即在JavaCard规范中未使用的字节码)作为用于子代码序列的代码的压缩代码(即作为根据图1的待替换的代码C1)保存。

在一个示例场景中,字节码/参数组合SSPUSH 1024需要3个字节用于其存储。其在子代码序列中被找到了500次。该组合用仅需要一个字节的存储空间的空闲的字节码PROPB207替换。由此,总共保存两个字节500次,这对应于权重1000。在该示例场景中,与此相对,字节码/参数组合BSPUSH8需要两个字节,并且在子代码序列中被找到了800次。该组合用长度为一个字节的空闲的字节码PROPB208替换。对于该组合,由此得到权重800。

在步骤S4中,以最高的权重开始,按照权重的降序依次将子代码序列CS'的字节码/参数组合用对应的压缩代码替换。以这种方式产生图1的代码序列CS的代码C1。由用压缩代码对子代码序列的该替换,得出规定从压缩代码到子代码序列的代码的反替换(Rückersetzung)的替换规则。在这里描述的实施方式中,该替换规则是将压缩代码与子代码序列的对应的解压缩代码相关联的解压缩表。在步骤S5中,将该解压缩表与指定要使用的替换规则的选择信息AI一起加载到安全模块SM上。随后,在步骤S6中,将由压缩代码C1、待解释的(未压缩的)代码C2以及相关联的参数P构成的代码序列CS(图1)存储在安全模块SM上。在此,每个代码C1与选择信息AI关联。

下面,说明压缩方法的变化。在一个变形方案中,对子代码序列中的标准字节码的参数仅部分地进行压缩或者根本不进行压缩。在这种情况下,确定在不考虑不压缩的参数的情况下其代码部分一致的代码的频度。这在下面以一个示例来说明。

考虑下面的具有相关联的参数的代码:

0xBC 0x10 0x20 0x30 0x40。

在此,0xBC是标准字节码,0x10、0x20、0x30和0x40是4个参数。根据先前描述的压缩,在子代码序列中寻找整个字节码/参数组合的出现。在这里描述的变化中,不对第二个参数0x20进行压缩,而将其视为可变的。因此,确定下面的字节码/参数组合的频度:

0xBC 0x10<任意第二个参数>0x30 0x40。

随后,与上面所描述的类似,确定该代码结构的对应的权重。然后,在进行压缩时,用空闲的字节码替换没有第二个参数值的代码部分。第二个参数值在压缩代码中继续作为参数保留。

如果考虑下面的字节码/参数组合:

0xBC 0x10 0xAA 0x30 0x40,

则在使用空闲的字节码0xEC的条件下将其转换为下面的压缩代码:

0xEC 0xAA。

在需要时,还可以将两个或者多个参数视为可变的,由此在压缩代码中继续作为参数保留。如果例如考虑字节码/参数组合

0xBC 0x10 0xAA 0x30 0xBB,

并且将第二个参数字节0xAA和第四个参数字节0xBB视为可变的,则由此在使用空闲的字节码0xEC的条件下可以得到下面的压缩代码:

0xEC 0xAA 0xBB。

上面描述了对于相应地具有标准字节码和其参数的相同的代码产生直方图的示例。在需要时,还可以以相同的方式对多个标准字节码与其参数的相关的块进行直方图分析。换句话说,在这种情况下,待压缩的代码包括具有相关联的参数的多个标准字节码。

例如,该代码可以包括具有一个字节的参数的标准字节码以及随后的没有参数的标准字节码。其示例是代码“0xC7XX 0x3B”,其中,0xC7和0x3B是标准字节码,XX是字节码0xC7的参数。然后,在进行直方图分析时,将参数XX视为可变的,由此寻找下面的代码模式:

0xC7<任意参数值>0x3B。

然后,例如可以用具有代码值0xDl的空闲的字节码PROPB209替换字节码组合“0xC7 0x3B”。该字节码与参数XX相关联。因此,用代码“0xDl XX”替换字节码/参数组合“0xC7XX 0x3B”。

上面描述的本发明的实施方式具有一系列优点。特别是能够在安全模块中实现对代码序列的非常好的压缩,其中,能够依据任意标准对于代码序列的对应的代码适当地调整压缩。这通过使用选择信息来实现。

在本解决方案的一个仅是可选的扩展方案中,除了使用选择信息之外,附加地还可以设置多个解释器表和/或解压缩表。第一组小程序使用第一解释器表(和/或解压缩表),而至少一个第二小程序或第二组小程序使用对应的第二解释器表(和/或解压缩表)。下面提到解释器表时,不相应地指出该和/或替换的解压缩表。如先前参考附图详细描述的那样,至少使用第一(和/或第二)解释器表。第一组小程序由预先加载的小程序形成(Pre-issuance(预发行))。第二组小程序由后加载的小程序形成(Post-issuance(后发行))。利用小程序,可以后加载第二解释器表。因此,第二解释器表可以是小程序专用的或者对于小程序组是专用的。安全模块针对小程序存储组说明,例如对于第二组的小程序存储特征“后加载”。对于预先加载的小程序(在安全模块向用户输出之前),安全模块使用第一解释器表。对于后加载的小程序(在安全模块向用户输出之后),安全模块使用第二解释器表或者来自于多个第二解释器表中的与该小程序相关联的第二解释器表。

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