背景技术
目前,智能卡等通信装置应用非常广泛,例如SIM(Subscriber IdentityModule,用户识别模块)卡、公交卡等,随着智能卡的广泛应用,用户对智能卡的要求也越来越高,希望在实现相同功能的基础之上,提高卡片的处理效率,并节省智能卡在处理过程中所占用的空间,同时也希望智能卡能够降低成本。
目前,在STK(SIM Tool Kit,用户识别应用发展工具)卡片与终端的主动式命令交互过程中,Fetch指令(卡片通过Fetch(获取)指令将需要执行的主动式命令通知终端)和TerminalResponse(终端响应)指令(终端通过此命令通知卡片对主动式命令的执行结果)必须是成对出现的,STK卡片通过Fetch指令向终端发送需要终端执行的主动式命令,终端执行该主动式命令后通过TerminalResponse告知STK卡片命令的执行结果。STK卡片在向终端发送Fetch指令后,即进入忙状态,直到接收到TerminalResponse指令后,才恢复正常状态。
在实际应用过程中,终端经常在Fetch指令和TerminalResponse指令中间插入下载指令,该下载指令用于触发智能卡接收数据,可以具体为Envelope(下载)指令,为了正确处理接收到的Envelope指令,STK卡片制定了专门处理忙状态时接收到的Envelope指令的处理机制,如图1所示,处理方法包括:
步骤S101、STK卡片在发送Fetch指令后,设置忙标记,进入忙状态;
步骤S102、接收到指令后判断指令类别,如果接收到Envelope指令,执行步骤S103,如果接收到TerminalResponse指令,执行步骤S106;
步骤S103、缓存接收到的Envelope指令并设置缓存标记;
步骤S104、缓存Envelope指令后判断忙状态标记是否还存在,如果是,则执行步骤S102,如果否,则执行步骤S105;
步骤S105、处理缓存中的Envelope指令,并在缓存中的Envelope指令处理完毕后,清空缓存标记,并执行步骤S107;
步骤S106、清除忙状态标记;
步骤S107、判断是否有新的Fetch指令发送,如果是,执行步骤S101,如果否,继续执行步骤S108;
步骤S108、判断是否存在缓存标记,如果是,继续执行步骤S109,如果否,执行步骤S110。
步骤S109、读取缓存中的Envelope指令,并执行步骤S105;
步骤S110、忙处理流程结束。
本发明的发明人发现,使用上述方法进行忙处理的基本原则是只要卡片处于忙就进行缓存,且缓存内容是整条Envelope指令数据,对于内存容量本身有限的智能卡来讲,十分浪费空间,且频繁的写操作,影响芯片寿命。
具体实施方式
本发明实施例提供一种忙状态时的指令处理方法及智能卡,智能卡在忙状态中接收到下载指令后,先验证下载指令是否满足应用条件,并仅对满足条件的下载指令进行缓存,等待智能卡进行处理,由于不再在卡片处于忙状态时存储所有接收到的下载指令,所以节省了缓存指令所占用的智能卡存储空间,同时,智能卡在退出忙状态后,无需再验证所缓存的下载指令是否满足应用条件,进而提高了指令处理效率。
本发明实施例以Envelope指令为例进行说明,对于其它类似的下载指令,可以根据本发明实施例提供的忙状态时的指令处理方法进行处理。
智能卡在收到PP_DOWN(点到点下载)指令等Envelope指令后,根据03.40、03.48规范,需要验证Envelope指令中短信头和数据格式是否满足预先设定的条件,即判断Envelope指令的有效性,其中,数据格式可以具体为CC(Cryptographic Checksum,加密数据校验)、CNTR(Counter,计数器)等数据,如不满足条件的话,即使智能卡处于空闲状态也不能执行该指令内容,通常处理时直接抛弃该Envelope指令,由于应用环境的不同,短信头和数据格式可以根据实际情况进行变换,同时,进行验证时的预先设定的条件也要重新设定,只要短信头和数据格式符合设定的条件,即可确定Envelope指令是有效的,例如,预先设定的条件为短信头中包括字符A123,那么只要Envelope指令的短信头中包括了字符A123,则可确定该Envelope指令的短信头合法。因此,如果在智能卡忙时接收到Envelope指令后就缓存的话,若该Envelope指令是无效的,那么缓存该无效指令就浪费了存储空间和降低了处理效率。
进一步的,在确定Envelope指令有效后,可以去掉指令中的短信头等部分,只保存用户数据部分即可,即仅缓存Envelope指令中的可执行部分,另外,安全校验部分可以不用存储,从而进一步节省存储空间。
下面,结合附图具体说明该忙状态时的指令处理方法。
如图2所示,本发明实施例提供的忙状态时的指令处理方法包括:
步骤S201、在忙状态下接收下载指令;
步骤S202、在执行缓存下载指令的步骤之前,检测下载指令的有效性;
步骤S203、根据下载指令的有效性的检测结果,当确定检测到下载指令无效时,不缓存该下载指令。
这样,即可保证只缓存有效的下载指令,节省了缓存指令的空间,同时也提高了处理效率。
同时,由于只有在下载指令的执行过程中,触发新的主动式命令时,才会对忙状态中的智能卡当前执行的功能造成影响,所以,智能卡在忙状态中对下载指令的有效性进行检测并不会影响用户的使用。
在步骤S202中,智能卡检测下载指令的有效性,具体为根据下载指令的结构和当前的有效性确定规则进行检测,例如,对于Envelope指令来说,可以检测Envelope指令的短信头、CC以及CNTR是否满足预先设定的条件,当满足时,确定Envelope指令有效,否则确定Envelope指令无效。
由于在步骤S202中已经对下载指令的有效性进行过检测,那么在智能卡退出忙状态后就不需要重新对下载指令的有效性进行检测,可以直接执行该下载指令。所以在步骤S203中,智能卡可以只缓存下载指令的可执行部分,可以不用缓存下载指令的短信头部分、安全校验部分等其它部分,由于不再缓存整个下载指令,进而进一步节省缓存下载指令所占用的存储空间。
同时,在缓存时,可以将下载指令以LV格式通过二进制方式进行缓存,而不再通过直接记录的方式存储,这样可以充分利用缓存空间,进一步节省缓存下载指令所占用的存储空间。
具体的,以Envelope指令为例,如图3所示,智能卡在采用本发明实施例提供的忙状态时的指令处理方法时,具体处理流程包括:
步骤S301、STK卡片在发送Fetch指令后,设置忙标记,进入忙状态;
步骤S302、接收到指令后判断指令类别,如果接收到Envelope指令,执行步骤S303,如果接收到TerminalResponse指令,执行步骤S306;
步骤S303、检测接收到的Envelope指令是否有效,如果是,则执行步骤S304,如果否,执行步骤S304;
步骤S304、丢弃所述Envelope指令并执行步骤S302;
步骤S305、缓存接收到的Envelope指令并设置缓存标记;
步骤S306、缓存Envelope指令后判断忙状态标记是否还存在,如果是,则执行步骤S302,如果否,则执行步骤S307;
步骤S307、处理缓存中的Envelope指令,并在缓存中的Envelope指令处理完毕后,清空缓存标记,并执行步骤S309;
步骤S308、清除忙状态标记;
步骤S309、判断是否有新的Fetch指令发送,如果是,执行步骤S301,如果否,继续执行步骤S310;
步骤S310、判断是否存在缓存标记,如果是,继续执行步骤S311,如果否,执行步骤S312。
步骤S311、读取缓存中的Envelope指令,并执行步骤S307;
步骤S312、忙处理流程结束。
进一步的,下载指令需要缓存的主要原因是该指令会触发新的主动式命令,例如有些Envelope指令在执行过程中,需要A012Fetch指令来取出智能卡对该Envelope指令的响应数据,由于智能卡在处于忙状态时是不能触发新的Fetch指令的,所以这样的下载指令就需要缓存。
而由于并非所有的下载指令都会触发主动式命令,而在忙状态时处理不会触发主动式命令的下载指令是不会对用户的使用造成影响的,也不会影响当前正在执行的功能。例如,对于Envelope指令来讲,在进行OTA应用下载时,通常通过多条短信完成下载,智能卡在接收到除最后一条短信的其它短信时,即使在忙状态中也可以正常处理,不会触发新的主动式命令;如果是最后一条短信A0C2,智能卡在处理后会提示用户:应用下载完成,此时会触发新的主动式命令以提示用户,因此,在进行OTA应用下载时,首条短信和中间的短信是可以直接由智能卡在忙状态中处理的,只有最后一条短信数据则需要缓存,在智能卡退出忙状态后进行处理。所以,若智能卡在处于忙状态时,即在Fetch指令和TerminalResponse指令之间时,收到Envelope指令,则并非所有的有效的Envelope指令都需要缓存,可以根据上述原则对不同的指令数据区别对待。即使智能卡处于忙状态时,不会触发主动式命令的Envelope指令,也可以正常执行,无需缓存,进而更进一步的节省了缓存Envelope指令所占用的空间,并提高了处理效率。
此时,在缓存下载指令时,并非将所有通过检测的下载指令都存储起来,而是进行进一步判断后再确定执行该下载指令还是存储该下载指令。那么,当下载指令有效时,缓存下载指令,具体包括:当下载指令有效时,并确定下载指令不会触发主动式命令时,直接执行下载指令,否则,缓存下载指令。
同样以Envelope指令为例,此时,智能卡在采用本发明实施例提供的忙状态时的指令处理方法时,如图4所示,包括:
步骤S401、在忙状态中接收Envelope指令;
步骤S402、检测Envelope指令的有效性;
步骤S403、在Envelope指令有效时,确定Envelope指令是否会触发主动式命令;
步骤S404、当确定Envelope指令不会触发主动式命令时,直接执行Envelope指令,否则,缓存Envelope指令。
在判断Envelope指令是否会触发新的主动式命令时,可以根据Envelope指令的类型来判断,具体判断时,可以根据Envelope指令中的某个关键字或命令类型来判断,也可以通过设置指令库的方式来判断,例如,可以设置指令库,存储不会触发新的主动式命令的指令名称,当可以在该指令库中找到当前接收到的Envelope指令时,即可确定该Envelope指令不会触发新的主动式命令,可以直接执行,如果找不到,则确定该Envelope指令会触发新的主动式命令,需要进行缓存;或者直连库中也可以存储会触发新的主动式命令的指令名称,当可以在该指令库中找到当前接收到的Envelope指令时,即可确定该Envelope指令会触发新的主动式命令,需要进行缓存,如果找不到,则确定该Envelope指令不会触发新的主动式命令,可以直接执行。
同样,在Envelope指令无效时,可以不再缓存Envelope指令,直接丢弃,在缓存Envelope指令时,可以只缓存下载指令的可执行部分,进而节省存储空间。
相应的,本发明实施例还提供一种智能卡,如图5所示,该装置中包括:
接收单元501,用于在忙状态下接收下载指令;
检测单元502,用于在执行缓存下载指令的步骤之前,检测所述下载指令的有效性;
处理单元503,用于根据下载指令的有效性的检查结果,当确定检测到下载指令无效时,不缓存所述下载指令。
进一步,为更有效的节省缓存下载指令所占用的空间,处理单元503具体用于:
当下载指令有效时,缓存下载指令的可执行部分,否则,丢弃下载指令。
由于并非所有的下载指令都会触发主动式命令,而不触发主动式命令的下载指令是可以在忙状态中进行处理的,此时,处理单元503具体用于:
当下载指令有效时,确定下载指令是否会触发主动式命令,否则,丢弃该下载指令;
以及当确定下载指令不会触发主动式命令时,直接执行Envelope指令,否则,缓存下载指令。
此时,如图6所示,本发明实施例提供的智能卡中,处理单元503具体包括:
确定子单元5031,用于在下载指令有效时,确定下载指令是否会触发主动式命令;
处理子单元5032,用于当确定下载指令不会触发主动式命令时,直接执行下载指令,否则,缓存下载指令。
本发明实施例提供一种忙状态时的指令处理方法及智能卡,智能卡在忙状态中接收到下载指令后,先验证下载指令是否有效,并在确定下载指令无效时,则不再对无效的下载指令进行缓存,由于不再存储所有接收到的下载指令,所以节省了缓存指令所占用的智能卡存储空间,同时,智能卡在退出忙状态后,无需再验证所缓存的下载指令是否有效,进而提高了指令处理效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。