JavaCard虚拟机栈的防错误注入方法及系统与流程

文档序号:11251266阅读:455来源:国知局
Java Card虚拟机栈的防错误注入方法及系统与流程

本发明涉及javacard虚拟机栈防护技术领域,特别是涉及一种javacard虚拟机栈的防错误注入方法及系统。



背景技术:

javacard支持很多应用,并且具有非常高的安全性。近年来,javacard在金融、移动支付等行业中的应用越来越广范,与此同时,针对javacard的攻击手段也越来越多,目前非常重要的攻击手段是针对javacard虚拟机栈的错误注入,而现有技术中还没有针对这种攻击手段的防护方法,使javacard虚拟机栈的安全性降低。

因此,如何提供一种解决上述技术问题的javacard虚拟机栈的防错误注入方法及系统成为本领域的技术人员需要解决的问题。



技术实现要素:

本发明的目的是提供一种javacard虚拟机栈的防错误注入方法和系统,在使用过程中增加攻击者对javacard虚拟机栈进行错误注入的难度,并在一定程度上防止了对javacard虚拟机栈的错误注入,提高了javacard虚拟机栈的安全性。

为解决上述技术问题,本发明提供了一种javacard虚拟机栈的防错误注入方法,包括:

在启动javacard虚拟机之前产生随机数;

依据所述随机数计算出javacard虚拟机栈的内存地址;

启动javacard虚拟机,并将所述内存地址确定为所述javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

可选的,所述依据所述随机数计算出javacard虚拟机栈的内存地址的过程具体为:

依据所述随机数对所述javacard虚拟机栈的内存空间的起始地址和结束地址进行调整,得到调整后的起始地址和结束地址,并依据所述调整后的起始地址和结束地址确定出所述javacard虚拟机栈的内存地址。

可选的,所述方法还包括:

对待进栈的第一数据进行按位取反操作,得到相应的第二数据;

将所述第一数据与所述第二数据进行结合得到第三数据,并将所述第三数据压入栈;

对待出栈的数据进行反向验证,以判断待出栈的数据是否为所述第一数据,如果是,则所述第一数据正常,并进行所述第一数据的返回;否则,所述第一数据受到错误注入,并进入安全异常处理流程。

可选的,所述将所述第一数据与所述第二数据进行结合得到第三数据的过程具体为:

将所述第二数据的尾部与所述第一数据的首部相接后得到第三数据;

则,所述对待出栈的数据进行反向验证,以判断待出栈的数据是否为所述第一数据的过程具体为:

将待出栈的数据从中间分开得到第一部分数据和第二部分数据,将所述第一部分数据进行按位取反得到第三部分数据,并将所述第三部分数据与所述第二部分数据进行比较,当所述第三部分数据与所述第二部分数据相同时,则所述待出栈的数据为所述第一数据;否则,所述出栈后的数据不是所述第一数据,所述第一数据受到错误注入,并进入安全异常处理流程。

可选的,所述安全异常处理流程为自动停止后续执行动作。

可选的,所述安全异常处理流程为自动复位,并返回至所述javacard虚拟机栈的初始化状态。

可选的,所述安全异常处理流程为记录异常数据后进行自动复位。

为解决上述技术问题,本发明提供了一种javacard虚拟机栈的防错误注入系统,包括:

数据发生器,用于在启动javacard虚拟机之前产生随机数;

计算模块,用于依据所述随机数计算出javacard虚拟机栈的内存地址;

定位模块,用于启动javacard虚拟机,并将所述内存地址确定为所述javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

本发明提供了一种javacard虚拟机栈的防错误注入方法及系统,包括在启动javacard虚拟机之前产生随机数;依据随机数计算出javacard虚拟机栈的内存地址;启动javacard虚拟机,并将内存地址确定为javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

由于攻击者在对javacard虚拟机栈进行错误注入时,首先需要找到javacard虚拟机栈的位置,也就是需要找到javacard虚拟机栈的实际内存地址。本发明通过在启动javacard虚拟机之前产生随机数,并依据该随机数计算出javacard虚拟机栈的内存地址,并在启动javacard虚拟机时将该内存地址定位为javacard虚拟机栈的实际内存地址,因此在每次启动javacard虚拟机时就可以实现动态随机调整javacard虚拟机栈的位置,使攻击者较难找到javacard虚拟机栈的实际内存地址,进一步增加攻击者对javacard虚拟机栈进行错误注入的难度。本发明在一定程度上防止了对javacard虚拟机栈的错误注入,提高了javacard虚拟机栈的安全性。

附图说明

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

图1为本发明提供的一种javacard虚拟机栈的防错误注入方法的流程示意图;

图2为本发明所提的一种javacard虚拟机栈的内存地址浮动示意图;

图3为本发明提供的一种javacard虚拟机栈的防错误注入系统的结构示意图。

具体实施方式

本发明的核心是提供一种javacard虚拟机栈的防错误注入方法和系统,在使用过程中增加攻击者对javacard虚拟机栈进行错误注入的难度,在一定程度上防止了对javacard虚拟机栈的错误注入,提高了javacard虚拟机栈的安全性。

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参照图1,图1为本发明提供的一种javacard虚拟机栈的防错误注入方法的流程示意图。该方法包括:

步骤10:在启动javacard虚拟机之前产生随机数;

步骤20:依据随机数计算出javacard虚拟机栈的内存地址;

步骤30:启动javacard虚拟机,并将内存地址确定为javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

具体的,在每次启动javacard虚拟机之前都通过数据产生器(可以为随机数产生模块)产生随机数,并且依据该随机数可以计算出javacard虚拟机栈的内存地址,再启动javacard虚拟机,并将javacard虚拟机栈的实际内存地址定位为依据随机数计算出的内存地址,这样在每次启动javacard虚拟机时都可以对javacard虚拟机栈的实际内存地址进行动态调整,并且使随机调整,因而实现对javacard虚拟机栈的具体位置的隐藏,使攻击者不易找到javacard虚拟机栈的实际内存地址,从而加大了对javacard虚拟机栈进行错误注入的难度。

需要说明的是,利用随机数计算javacard虚拟机栈的内存地址时,是将空闲的内存地址用来作为javacard虚拟机栈的内存地址。

可选的,依据随机数计算出javacard虚拟机栈的内存地址的过程具体为:

依据随机数对javacard虚拟机栈的内存空间的起始地址和结束地址进行调整,得到调整后的起始地址和结束地址,并依据调整后的起始地址和结束地址确定出javacard虚拟机栈的内存地址。

具体的,请参照图2,图2为本发明所提的一种javacard虚拟机栈的内存地址浮动示意图。假定在系统中javacard虚拟机栈s所需要的内存大小为z,系统中给javacard虚拟机栈分配大小为z+x的内存空间,其中x是给javacard虚拟机额外分配的一块内存空间e,则设大小为z+x的内存空间的起始位置为d,其对应的结束位置(即末端位置)为d+z+x;在启动javacard虚拟机之前所产生的随机数为r,则根据额外分配的内存空间e的大小x对该随机数r进行调整,可以通过函数f(r,x)对r进行调整,使调整后的值r1=f(r,x),且满足0≤r1≤x,则由随机数调整后的javacard虚拟机栈的内存地址的起始位置为d+r1,调整后的末端位置为d+r1+z,所以根据随机数所确定出的javacard虚拟机栈的内存地址可以依据调整后的起始位置为d+r1,调整后的末端位置为d+r1+z进行确定,javacard虚拟机栈的内存地址根据随机数进行浮动。

当启动javacard虚拟机时,javacard虚拟机栈的实际内存地址的实际起始地址将定位为d+r1,其结束位置(即末端位置)定位为d+r1+z,故javacard虚拟机栈的实际内存地址即由其实际起始位置和实际末端位置进行确定,从d+r1到d+r1+z之间的一段内存空间作为javacard虚拟机栈的实际内存空间。故,通过随机数就可以调整javacard虚拟机栈的实际内存地址。

可选的,该方法还包括:

对待进栈的第一数据进行按位取反操作,得到相应的第二数据;

将第一数据与第二数据进行结合得到第三数据,并将第三数据压入栈;

对待出栈的数据进行反向验证,以判断待出栈的数据是否为第三数据,如果是,则第一数据正常,并进行第一数据的返回;否则,第一数据受到错误注入,并进入安全异常处理流程。

需要说明的是,在对javacard虚拟机栈的内存地址进行调整后,还可以通过对待进栈的数据进行按位取反的操作,并对待出栈的数据进行验证,以进一步验证进栈的数据是否受到错误注入。

具体的,假设待进栈数据为第一数据a,在第一数据a进栈之前对该第一数据a进行按位取反的操作,得到与其相应的第二数据b,其中,b=~a;将第二数据b和第一数据a进行拼接后得到第三数据a1,具体可以按照ba的形式进行拼接,也可以按照ab的形式进行拼接,还可以按照aba的形式进行拼接,具体按照哪种形式可以根据实际情况而定,并依据具体的拼接形式对待出栈的数据进行反向验证,判断待出栈的数据与进栈数据是否一致。

可选的,将第一数据与第二数据进行结合得到第三数据的过程具体为:

将第二数据的尾部与第一数据的首部相接后得到第三数据;

则,对待出栈的数据进行反向验证,以判断待出栈的数据是否为第一数据的过程具体为:

将待出栈的数据从中间分开得到第一部分数据和第二部分数据,将第一部分数据进行按位取反得到第三部分数据,并将第三部分数据与第二部分数据进行比较,当第三部分数据与第二部分数据相同时,则待出栈的数据为第一数据;否则,待出栈的数据不是第一数据,所述第一数据受到错误注入,并进入安全异常处理流程。

具体的,可以按照第二数据在前第一数据在后(即ba)的形式进行拼接,得到第三数据ba,将第三数据压入栈后,再将待出栈的数据从中间分开,分成左右两个部分(即b'a'),左侧部分为第一部分数据b',右侧部分为第二部分数据a',将第一部分数据b'按位取反得到第三部分数据a'',比较第三部分数据a''是否等于第二部分数据a',若a''=a',则证明待出栈的数据就是进栈的第一数据,进一步表明进栈的第一数据正常,没有受到错误注入;否则,证明待出栈的数据不是进栈的第一数据,也进一步表明进栈的第一数据异常,受到错误注入。

采用本发明所提供的防错误注入方法,即使在攻击者找到javacard虚拟机栈的实际内存地址,并对数据进行了精确的错误注入的情况下,依然可以检查出该错误注入,进一步提高了javacard虚拟机栈的安全系数。

可选的,安全异常处理流程为自动停止后续执行动作。

可选的,安全异常处理流程为自动复位,并返回至javacard虚拟机栈的初始化状态。

可选的,安全异常处理流程为记录异常数据后进行自动复位。

需要说明的是,当javacard虚拟机栈受到错误注入时,系统将进入安全异常处理流程,其中,安全异常处理流程不仅包括上述几种方式,还可以包括其他的安全异常处理方式,本发明对此不做特殊的限定,能实现本发明的目的即可。

本发明提供了一种javacard虚拟机栈的防错误注入方法,包括在启动javacard虚拟机之前产生随机数;依据随机数计算出javacard虚拟机栈的内存地址;启动javacard虚拟机,并将内存地址确定为javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

由于攻击者在对javacard虚拟机栈进行错误注入时,首先需要找到javacard虚拟机栈的位置,也就是需要找到javacard虚拟机栈的实际内存地址。本发明通过在启动javacard虚拟机之前产生随机数,并依据该随机数计算出javacard虚拟机栈的内存地址,并在启动javacard虚拟机时将该内存地址定位为javacard虚拟机栈的实际内存地址,因此在每次启动javacard虚拟机时就可以实现动态随机调整javacard虚拟机栈的位置,使攻击者较难找到javacard虚拟机栈的实际内存地址,进一步增加攻击者对javacard虚拟机栈进行错误注入的难度。本发明在一定程度上防止了对javacard虚拟机栈的错误注入,提高了javacard虚拟机栈的安全性。

请参照图3,图3为本发明提供的一种javacard虚拟机栈的防错误注入系统的结构示意图。在上述实施例的基础上:

该系统包括:

数据发生器1,用于在启动javacard虚拟机之前产生随机数;

计算模块2,用于依据随机数计算出javacard虚拟机栈的内存地址;

定位模块3,用于启动javacard虚拟机,并将内存地址确定为javacard虚拟机栈的实际内存地址,以防止攻击者找到javacard虚拟机栈的实际内存地址后进行错误注入。

需要说明的是,本发明在使用过程中增加攻击者对javacard虚拟机栈进行错误注入的难度,并在一定程度上防止了对javacard虚拟机栈的错误注入,提高了javacard虚拟机栈的安全性。

另外,对应本发明中所提供的javacard虚拟机栈的防错误注入系统中所涉及到的防错误注入方法的具体介绍请参照上述实施例,本申请在此不再赘述。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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