一种JavaCard应用功能扩展的实现方法

文档序号:6550681阅读:268来源:国知局
一种JavaCard应用功能扩展的实现方法
【专利摘要】本发明公开一种JavaCard应用功能扩展的实现方法,注册过程包括:扩展应用接收到注册命令时对随机数进行处理,并将处理结果、扩展应用标识和扩展接口编号发送给主应用;主应用对处理结果进行验证,如验证通过则当与扩展应用标识对应的扩展应用已安装时,根据扩展编号设置扩展点的位,获取并保存扩展应用的句柄;扩展应用注册的扩展接口的状态保存到缓存区中;调用过程包括:主应用接收到功能命令后在运行原程序过程中如检测到扩展点,则判断该扩展点的位是否已设置,是则当对应的扩展接口可用时根据扩展应用的句柄调用扩展应用,主应用根据扩展应用返回的结果判断是否继续运行原程序,是则继续,否则给运行环境返回执行结果及信息,结束。
【专利说明】-种JavaCard应用功能扩展的实现方法

【技术领域】
[0001] 本发明涉及JavaCard应用领域,尤其涉及一种JavaCard应用功能扩展的实现方 法。

【背景技术】
[0002] 智能卡的存储器体系主要是由读写存储器(RAM)、只读存储器(ROM)以及可擦写 编程存储器(EEPR0M)组成。Java Card是可以运行Java程序代码的智能卡。保存在Java Card上EEPR0M中的应用程序可以通过GlobalPlatform标准指令(简称GP指令)进行下 载、安装和删除的操作。掩膜应用是存储在ROM中的无法删除的应用;非掩膜应用是存储在 flash与e2p中的应用。
[0003] 现有技术中,如果Java Card使用过程中发现原有应用存在功能缺失或错误,可以 通过删除原应用程序,下载并安装新的应用程序来解决问题,但是该方法会导致用户使用 过程中的数据丢失。同时,如果Java Card上的应用程序本身占用的空间较大,而修改的内 容较小时,则整个应用程序需要在修改后重新下载,安装及个人化,因而浪费时间。对于掩 摸的Java Card卡,将代码写入ROM后,无法删除,如果有缺陷整个应用将无法使用。同样, 在C0S (英文全称:Chip Operating System,中文全称:卡片操作系统)开发过程中,使用 Java语言实现的无论是卡片管理、JCRE (英文全称:Java Card Runtime Environment,中 文全称:Java Card运行环境)还是JCVM(英文全称:Java Card Virtual Machine,中文全 称:Java Card虚拟机)模块,都有可能存储缺陷,一但掩摸后程序将无法修改。


【发明内容】

[0004] 本发明的目的是为了克服现有技术的不足,提供一种JavaCard应用功能扩展的 实现方法。
[0005] 本发明提供了一种JavaCard应用功能扩展的实现方法,包括注册过程和调用过 程,扩展应用和主应用激活后开始工作,其中所述注册过程包括:
[0006] 步骤S1 :当所述扩展应用接收到运行环境派遣的注册命令时,所述扩展应用获取 所述主应用生成的随机数;
[0007] 步骤S2 :所述扩展应用对所述随机数进行处理,并将处理结果、所述注册命令中 的扩展应用标识和扩展接口编号发送给主应用;
[0008] 步骤S3 :所述主应用根据所述生成的随机数对接收到的所述处理结果进行验证, 如验证通过则执行步骤S4,否则报错,结束;
[0009] 步骤S4 :所述主应用根据所述接收到的扩展应用标识判断对应的扩展应用是否 已安装,是则执行步骤S5,否则报错,结束;
[0010] 步骤S5 :所述主应用根据所述扩展编号设置主应用的缓存区中对应的扩展点的 位,获取并保存所述扩展应用的句柄,给所述扩展应用返回关联成功信息;
[0011] 步骤S6 :所述扩展应用注册所述扩展接口的状态,并将所述扩展接口的状态保存 到所述主应用的所述缓存区中;
[0012] 所述调用过程包括:
[0013] 步骤S7 :所述主应用接收到运行环境派遣的功能命令时,开始运行所述原程序;
[0014] 步骤S8 :当所述主应用检测到扩展点时,所述主应用判断所述缓存区中对应的扩 展点的位是否已设置,是则执行步骤S9,否则继续运行原程序,返回步骤S8 ;
[0015] 步骤S9 :所述主应用根据所述缓存区中与所述扩展点对应的扩展接口编号所对 应的扩展接口的状态判断对应的扩展接口是否可用,是则执行步骤S10,否则继续运行原程 序,返回步骤S8 ;
[0016] 步骤S10 :所述主应用根据保存的所述扩展应用的句柄调用对应的扩展应用,所 述扩展应用调用与所述扩展接口编号对应的扩展接口;
[0017] 步骤S11 :所述主应用根据所述扩展应用调用与所述扩展接口编号对应的扩展接 口返回的结果判断是否继续运行原程序,是则继续运行原程序,返回步骤S8,否则给运行环 境返回执行结果及信息,结束。
[0018] 进一步地,在所述步骤S1之前还包括:
[0019] 当扩展应用接收到运行环境派遣的认证命令时,执行步骤A1-步骤A4 ;
[0020] 步骤A1 :所述扩展应用判断安全通道实例是否已经实例化,是则执行步骤A3,否 则执行步骤A2;
[0021] 步骤A2 :所述扩展应用获取安全通道实例并将其存储在非易失性缓存中,执行步 骤A3 ;
[0022] 步骤A3 :所述扩展应用根据所述认证命令得到送往卡外的数据长度,从安全域执 行所述认证命令所返回的结果中获取相应的所述数据长度的数据并将其存储在apdu缓存 中;
[0023] 步骤A4:所述扩展应用调用通讯接口将结果数据发送到卡外,并设置安全级别, 等待接收命令。
[0024] 进一步地,所述步骤A3包括:
[0025] 步骤A3-1 :所述扩展应用判断所述认证命令的类型,如为第一认证命令则执行步 骤A3_2,如为第二认证命令则执行步骤A3_3 ;
[0026] 步骤A3-2 :所述扩展应用根据所述第一认证命令得到送往卡外的数据长度,根据 所述数据长度从安全域执行所述第一认证命令所返回的结果中获取相应长度的数据并将 其存储在apdu缓存中,执行步骤A4 ;
[0027] 步骤A3-3 :所述扩展应用根据所述第二认证命令得到需要送往卡外的数据长度 为〇〇,执行步骤A4。
[0028] 进一步地,如认证命令为第一认证命令,则所述步骤A4包括:所述扩展应用调用 通讯接口将所述apdu缓存中的数据方式到卡外,设置安全级别的值为00 ;
[0029] 如认证命令为第二认证命令,则所述步骤A4包括:所述扩张应用调用通讯接口将 正确信息发送到卡外,设置安全级别的值为非00。
[0030] 进一步地,所述步骤S1中获取主应用生成的随机数之前还包括:所述扩展应用获 取安全级别,并判断安全级别是否满足条件,是则获取主应用生成的随机数,否则调用通讯 接口将安全条件不满足信息发送到卡外,等待接收命令。
[0031] 进一步地,所述判断安全级别是否满足条件,具体为:通过调用第一接口函数获取 安全级别的值,判断所述获取的值是否为〇〇,是则安全级别不满足条件,否则安全级别满足 条件。
[0032] 进一步地,在所述步骤S1之前还包括:步骤B :当扩展应用接收到选择命令时,调 用通讯接口将文件控制信息发送到卡外,等待接收命令。
[0033] 进一步地,在所述步骤B之前当运行环境接收到APDU命令时执行步骤P1 ;
[0034] 步骤P1 :所述运行环境判断接收到的所述APDU命令是否为选择命令,是则执行步 骤P2,否则执行步骤P4;
[0035] 步骤P2 :所述运行环境根据所述选择命令中的应用标识在JavaCard中的应用表 中查找对应的应用,并判断是否找到,是则执行步骤P3,否则执行步骤P4 ;
[0036] 步骤P3 :所述运行环境从找到的所述应用表中获取与所述应用标识对应的应用 句柄,调用当前激活应用的deselect ()接口,再根据所述与所述应用标识对应的应用句柄 调用对应应用的select函数,如果所述select函数执行正确,则将与所述应用标识对应的 应用置为当前激活应用,执行步骤P4 ;如果所述select函数执行不正确,则所述运行环境 捕获异常,异常处理完成后,执行步骤P4 ;
[0037] 步骤P4 :所述上层将接收到的所述APDU命令派遣给当前激活应用。
[0038] 进一步地,所述步骤S2包括:所述扩展应用使用保存的密钥对所述获取的随机 数进行加密,并将加密结果、所述注册命令中的扩展应用标识和扩展接口编号发送给主应 用;
[0039] 所述步骤S3包括:所述主应用使用保存的密钥对接收到的所述加密结果进行解 密,如解密成功则判断解密得到的随机数与所述生成的随机数是否相同,是则执行步骤S4, 否则给所述扩展应用返回错误信息;如解密失败则给所述扩展应用返回错误信息。
[0040] 进一步地,所述步骤S2包括:所述扩展应用使用保存的私钥对所述获取的随机 数进行签名,并将签名结果、所述注册命令中的扩展应用标识和扩展接口编号发送给主应 用;
[0041] 所述步骤S3包括:所述主应用使用保存的公钥对接收到的所述签名结果进行解 密,如解密成功则对所所述生成的随机数进行哈希计算,判断哈希结果与解密结果是否相 同,是则执行步骤S4,否则返回错误信息,如解密失败则给所述扩展应用返回错误信息。
[0042] 进一步地,所述步骤S5还包括:所述主应用给所述扩展应用返回成功信息;
[0043] 所述步骤S5与步骤S6之间包括:所述扩展应用根据所述主应用返回的信息判断 关联是否成功,是则执行步骤S6,否则调用通讯接口将错误信息发送到卡外,结束。
[0044] 进一步地,所述步骤S6之后包括:判断是否保存成功,是则调用通讯接口将注册 成功信息发送到卡外,等待接收指令,否则运行环境会捕获异常,异常处理完成后,结束。
[0045] 进一步地,所述步骤S6之前包括:
[0046] 步骤S6-1 :所述扩展应用根据注册命令中的数据域判断对应的扩展接口是否已 注册,是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤S6。
[0047] 进一步地,所述步骤S6包括:所述扩展应用调用所述主应用的第三函数,传入所 述扩展接口编号和所述扩展接口的状态;所述主应用检测到所述第三函数被调用后,检查 与所述扩展接口编号对应的扩展点是否存在,是则根据所述扩展接口的状态修改扩展点的 状态,给所述扩展应用返回正确信息,返回步骤S1,否则给所述扩展应用返回错误信息,结 束。
[0048] 进一步地,所述步骤S6替换为:所述扩展应用判断所述注册命令是否合法,是则 等待接收命令,否则调用通讯接口将错误信息发送到卡外,结束;
[0049] 所述方法还包括:当所述扩展应用接收到关联命令时执行步骤D1 ;
[0050] 步骤D1 :所述扩展应用根据所述关联命令中的数据域判断对应的扩展接口是否 已注册,是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤D2 ;
[0051] 步骤D2 :所述扩展应用调用所述主应用的第三函数,传入所述扩展接口编号和所 述扩展接口的状态;所述主应用检测到第三函数被调用后,判断与所述扩展接口编号对应 的扩展点是否存在,是则根据所述扩展接口的状态修改扩展点的状态,给所述扩展应用返 回正确信息,等待接收命令,否则给所述扩展应用返回错误信息,结束。
[0052] 进一步地,根据所述扩展接口的状态修改扩展点的状态,具体为:将所述扩展点的 状态设置为活动状态;
[0053] 所述步骤S9具体为:所述主应用判断所述扩展点的状态是否为活动状态,是则对 应的扩展接口可用,否则对应的扩展接口不可用。
[0054] 进一步地,所述步骤S5中的获取并保存所述扩展应用的句柄,包括:所述主应用 通过所述扩展应用标识和预定参数调用第一标准接口获取所述扩展应用的句柄并保存。
[0055] 进一步地,所述主应用调用第一标准接口获取所述扩展应用的句柄并保存,具体 包括:
[0056] 步骤L1、所述运行环境根据所述扩展应用标识在所述应用列表中根据查找是否有 对应的应用,是则执行步骤L2,否则给主应用返回错误信息;
[0057] 步骤L2、所述运行环境判断与扩展应用标识对应的应用是否为Shareable类型的 应用,是则执行步骤L3,否则给主应用返回错误信息;
[0058] 步骤L3、所述运行环境根据所述应用列表中存储的应用句柄和所述预定参数,调 用所述扩展应用的第二标准接口;
[0059] 步骤L4、当所述扩展应用所述第二标准接口被调用时,所述扩展应用检查调用所 述第二标准接口的上一个应用是否符合预设要求,是则执行步骤L5,否则给所述运行环境 返回错误信息;
[0060] 步骤L5、所述扩展应用判断所述预定参数的值是否为0,是则给所述运行环境返 回扩展应用的句柄,执行步骤L6 ;否则给所述运行环境返回错误信息;
[0061] 步骤L6、所述运行环境将所述扩展应用的句柄返回给所述主应用,所述接收所述 扩展应用的句柄并保存。
[0062] 进一步地,所述步骤S9与步骤S10之间包括:所述主应用判断与所述扩展应用标 识对应的扩展应用是否为所述Shareable类型的应用,是则执行步骤S10,否则继续运行原 程序,返回步骤S8。
[0063] 本发明与现有技术相比,具有以下优点:
[0064] 本方案提供的是一种在掩膜后可不丢失用户个人化数据的情况下进行更新应用 程序的实现方法;在掩膜应用出错后可以继续使用,适用于掩膜卡和非掩膜卡。

【专利附图】

【附图说明】
[0065] 图1和图2为本发明实施例一提供的一种JavaCard应用功能扩展的实现方法流 程图;
[0066] 图3为本发明实施例一提供的一种JavaCard应用功能扩展的实现方法中注册扩 展应用的另一种实现流程图;
[0067] 图4为本发明实施例一提供的命令派遣与选择过程的实现流程图。

【具体实施方式】
[0068] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施 例,都属于本发明保护的范围。
[0069] 实施例一
[0070] 本发明实施例一提供一种JavaCard应用功能扩展的实现方法,包括注册过程和 调用过程两个过程,扩展应用和主应用在激活后开始工作,其中,注册过程如图1所示,包 括:
[0071] 步骤100 :扩展应用等待接收命令;
[0072] 步骤101 :当扩展应用接收到运行环境派遣的命令时,扩展应用判断命令的类型, 如为选择命令则执行步骤102,如为认证命令则执行步骤103 ;如为注册命令则执行步骤 107 ;
[0073] 具体的,在本实施例中,命令为APDU格式,判断命令的类型包括:如命令的INS为 0xA4则为选择命令,如命令的CLA与INS为8482或8050则为认证命令,如INS为OxCO则 为注册命令;
[0074] 例如,选择命令为 00 A4 04 00 ;认证命令为 8050 00 00 08 03af7a7d446a24f6 和 84820000 10 619f9d758006f9b6 c290dfl4738f005f;注册命令为 00C00000 020102,其 中0102分别表示扩展应用实现的第一扩展接口、第二扩展接口,对应主应用的扩展点分别 是第一扩展点,第二扩展点;
[0075] 步骤102 :扩展应用调用通讯接口将FCI (英文全称:File Control Information, 中文全称:文件控制信息)发送到卡外,返回步骤100 ;
[0076] 在本实施例中,步骤102具体包括:扩展应用把FCI信息组织好后,直接调用 apdu. setOutGoingAndSendO接口,将组织好的数据发送到卡外;
[0077] 具体的,如选择命令的数据域为D0000000000601则表示选择的是主应用;如选择 命令的数据域为D000000000060101则表示选择的是扩展应用;
[0078] 步骤103 :扩展应用判断安全通道实例是否已经实例化,是则执行步骤105,否则 执行步骤104 ;
[0079] 步骤104 :扩展应用获取安全通道实例并将其存储在非易失性缓存中,执行步骤 105 ;
[0080] 具体的,在本实施例中,扩展应用调用GPSystem. getSecureChannelO来获取安 全通道实例;
[0081] 步骤105 :扩展应用根据认证命令得到送往卡外的数据长度,从安全域执行认证 命令所返回的结果中获取相应的数据长度的数据并将其存储在apdu缓存中;
[0082] 在本实施例中,扩展应用将接收到的认证命令作为参数通过安全通道实例 调用安全通道实例函数processSecurity (APDu apdu)得到送往卡外的数据长度; processsecurity的实现由安全通道实例完成,执行成功后,会返回需要送往卡外的数据及 数据长度;
[0083] 具体的,本实施例中步骤105包括:
[0084] 步骤105-1 :扩展应用判断认证命令的类型,如为第一认证命令则执行步骤 105-2,如为第二认证命令则执行步骤105-3 ;
[0085] 具体的,本实施例中的第一认证命令为:8050 00 00 08 03af7a7d446a24f6 ;第 二认证命令为:84820000 10 619f9d758006f9b6 c290dfl4738f005f ;
[0086] 步骤105-2 :扩展应用根据第一认证命令得到送往卡外的数据长度,根据数据长 度从安全域执行第一认证命令所返回的结果中获取相应长度的数据并将其存储在apdu缓 存中;
[0087] 步骤105-3 :扩展应用根据第二认证命令得到需要送往卡外的数据长度00 ;
[0088] 步骤106 :扩展应用调用通讯接口将结果数据发送到卡外,并设置安全级别,返回 步骤100 ;
[0089] 在本实施例中,如为第一认证命令8050 00 00 08 03af7a7d446a24f6,其中数据 域为:主机随机数03af7a7d446a24f6 ;则步骤105具体为:扩展应用将apdu缓存中的数 据发送到卡外,设置安全级别的值为00 ;apdu缓存中的数据为:00007118035454911734 FF02 000C 4081ED9718CD 48257D1BDAA46CAA,数据解析结果为:密钥分散数 据:00007118035454911734 ;当前使用密钥版本:FF ;安全通道协议版本:2 ;计数器:000c ; 卡内随机数:4081ed9718cd ;卡内密文:48257dlbdaa46caa ;
[0090] 如为第二认证命令 84820000 10 619f9d758006f9b6 c290dfl4738f005f,其中, 619f9d758006f9b6为卡外密文,c290dfl4738f005f为mac数据;则步骤105具体为:扩展 应用返回正确信息,设置安全级别的值为非00 ;
[0091] 步骤107 :扩展应用获取安全级别,判断安全级别是否满足条件,是则执行步骤 108,否则调用通讯接口将安全条件不满足信息发送到卡外,返回步骤100 ;
[0092] 具体的,在本实施例中,扩展应用通过调用第一接口函数获取安全级别的值,判断 获取的值是否为〇〇,是则安全级别不满足条件,否则安全级别满足条件;安全级别的初始 值为 〇〇 ;具体的,第一接口 函数为 SecureChannel. getSecurityLevel ();
[0093] 步骤108 :扩展应用获取主应用生成的随机数;
[0094] 具体的,在本实施例中,扩展应用调用主应用的第一函数,主应用监测到第一函数 被调用时,生成随机数并返回,同时主应用保存该随机数用于后续的验证过程;
[0095] 第一函数具体为getRandomO,用于获取随机数,具体包括:getRandomO首先 调用 RandomData. getlnstance (byte algorithm)接口,得到一个 randomData 的实例 rndlnstance, getRandomO 再调用 rndlnstance 的 generateData(byte[]buffer, short offset, short length)接口获取随机数;
[0096] 例如,本实施例中的随机数为:48257dlbdaa46caa ;
[0097] 步骤109 :扩展应用使用保存的密钥对该随机数进行加密;
[0098] 在本实施例中,扩展应用在进行个人化时已设置了密钥的类型;优选的,本实施例 中的密钥为对称密钥,例如3DES密钥:404142434445464748494A4B4C4D4E4F ;加密结果为: 6719758F25E91945 ;
[0099] 步骤110 :扩展应用将注册命令中的扩展应用标识、扩展接口编号和加密结果发 送给主应用;
[0100] 具体的,本实施例中,扩展应用将扩展应用标识、扩展接口编号和加密结果作为参 数调用主应用的第二函数为extendlnstalio,第二函数用于获取注册扩展应用接口;扩 展应用通过调用主应用的第二函数对加密结果进行解密;
[0101] 本实施例中的扩展应用标识和扩展接口编号可以在同一条注册命令中也可以在 不同的命令中;
[0102] 步骤111 :主应用使用保存的密钥对加密结果进行解密,如解密成功则执行步骤 112,如解密失败则给扩展应用返回错误信息,执行步骤115 ;
[0103] 本实施例中,主应用中保存的密钥与扩展应用中的密钥相对应;
[0104] 步骤112 :主应用判断解密得到的随机数与保存的随机数是否相同,是则执行步 骤113,否则给扩展应用返回错误信息,执行步骤115 ;
[0105] 在本实施例中,步骤112是验证扩展应用的合法性,防止恶意的扩展应用破坏主 应用的执行逻辑,产生不可预期的结果;
[0106] 步骤113 :主应用根据扩展应用标识判断对应的扩展应用是否已安装,是则执行 步骤114,否则给扩展应用返回错误信息,执行步骤115 ;
[0107] 具体的,在本实施例中,主应用根据扩展应用标识调用JCSystem. lookupAID (byte []buffer, short offset, byte length),如果返回值为空,则表不对应的 扩展应用未安装,返回错误信息给扩展应用,执行步骤115 ;否则执行步骤114 ;
[0108] 在本实施例中,扩展应用中有不同的扩展接口,不同的扩展接口对应不同的扩展 接口编号,每个扩展接口有相应的状态;
[0109] 步骤114 :主应用根据扩展编号设置主应用的缓存区中对应的扩展点的位,获取 并保存扩展应用的句柄,给扩展应用返回关联成功信息,执行步骤115 ;
[0110] 具体的,主应用通过标准接口在原程序中设置扩展接口编号,实现与扩展接口标 识对应的扩展应用进行关联,本实施例中的标准接口为JCSystem. getAppletShareablelnt erfaceObject (AID serverAID, byte parameter);
[0111] 在本实施例中,获取并保存扩展应用的句柄,具体为:所述主应用通过所述扩展应 用标识和预定参数调用第一标准接口获取所述扩展应用的句柄并保存;第一标准接口具体 为:JCSystem. getAppletShareablelnterfaceOjbect(AID serverAID, byte parameter), 实现过程包括:
[0112] 步骤LI、运行环境根据扩展应用标识(serverAID)在应用列表中查找是否有对应 的应用,是则执行步骤L2,否则给主应用返回错误信息;
[0113] 步骤L2、运行环境判断与扩展应用标识对应的应用是否为Shareable类型的应 用,是则执行步骤L3,否则给主应用返回错误信息;
[0114] 步骤L3、运行环境根据应用列表中存储的应用句柄和预定参数,调用扩展应用的 第二标准接口;
[0115] 步骤L4、当扩展应用第二标准接口被调用时,扩展应用检查调用第二标准接口的 上一个应用是否符合预设要求,是则执行步骤L5,否则给运行环境返回错误信息;
[0116] 步骤L5、扩展应用判断预定参数(parameter)的值是否为0,是则给运行环境返回 扩展应用的句柄,执行步骤L6 ;否则给运行环境返回错误信息;
[0117] 步骤L6、运行环境将扩展应用的句柄返回给主应用,接收扩展应用的句柄并保存。
[0118] 步骤115 :扩展应用根据主应用返回的信息判断关联是否成功,是则执行步骤 116,否则给调用通讯接口将错误信息发送到卡外,结束;
[0119] 在本实施例中,如主应用返回的信息为成功信息则关联成功,如主应用返回的信 息为错误信息则关联失败;运行环境接收到错误信息后会重新组织再发向卡外;
[0120] 步骤116 :扩展应用注册扩展接口的状态;
[0121] 具体的,在本实施例中,扩展接口的状态包括为锁定或活动;当扩展接口的状态为 锁定时,扩展接口不可用;当扩展接口的状态为活动时,扩展接口可用;
[0122] 在本实施例中,步骤116之前包括:扩展应用根据注册命令的数据域判断对应 的扩展接口是否已注册,是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤 116 ;
[0123] 本实施例中扩展接口的编号为:01、02,扩展接口的状态为锁定或活动;
[0124] 步骤117 :扩展应用将扩展接口的状态保存到主应用的缓存区中并判断是否保存 成功,是则调用通讯接口将注册成功信息发送到卡外,返回步骤100,否则调用通讯接口将 错误信息发送到卡外,结束;
[0125] 相应的,本实施例中,步骤117具体为:扩展应用调用主应用的第三函数,传入扩 展接口编号和扩展接口的状态;主应用检测到第三函数被调用后,根据第三函数的参数检 查扩展接口编号对应的扩展点是否存在,是则根据传入的扩展接口的状态修改扩展点的 状态,调用通讯接口将注册成功信息发送到卡外,返回步骤100,否则给运行环境返回错误 信息,结束;第三函数具体为:boolean setPatchPointSwitch (byte patchPoint, boolean ppSwitch);
[0126] 在本实施例中,运行环境接收到错误信息后会捕获异常,异常处理完成后,结束;
[0127] 在本实施例中,返回错误信息表示执行错误,是报错的一种实现方式;
[0128] 在本实施例中,步骤116注册过程还可以通过选择注册默认扩展接口来实现;即 扩展应用标识和扩展接口编号在不同的命令中,则步骤116-步骤117替换为 :
[0129] 步骤116' :扩展应用判断注册命令是否合法,是则返回步骤100,否则调用通讯接 口将错误信息发送到卡外,结束;
[0130] 具体的,如注册命令为00c00000 00则合法;
[0131] 如在步骤101中扩展应用判断命令的类型为关联命令则执行步骤117' :
[0132] 例如,本实施例中的关联命令为00D00000 02 0102 ;
[0133] 步骤117' :扩展应用根据关联命令中的数据域判断对应的扩展接口是否已注册, 是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤118' ;
[0134] 在本实施例中,关联命令中的数据域为扩展接口编号;
[0135] 步骤118' :扩展应用调用主应用的第三函数,传入扩展接口编号和扩展接口状态; 主应用检测到第三函数被调用后,判断与扩展接口编号对应的扩展点是否存,是则根据传 入的扩展接口的状态修改扩展点的状态,给所述扩展应用返回正确信息,返回步骤100,否 则给扩展应用返回错误信息,结束;
[0136] 在本实施例中,扩展点与扩展接口编号一一对应;
[0137] 其中,调用扩展应用如图2所示,包括:
[0138] 步骤201 :当主应用接收到运行环境派遣的功能命令时开始运行原程序;
[0139] 在本实施例中,原程序是用于实现功能命令的具体程序代码;
[0140] 步骤202 :当主应用检测到原程序中的扩展点时,主应用判断缓存区中对应的扩 展点的位是否已设置,是则执行步骤203,否则继续运行原程序,返回步骤202 ;
[0141] 步骤203 :主应用根据缓存区中与扩展点对应的扩展接口编号所对应的扩展接口 的状态判断对应的扩展接口是否可用,是则执行步骤204,否则继续执行原程序,返回202 ;
[0142] 在本实施例中,步骤203具体包括:主应用根据检测到的扩展点,获取对应的扩展 接口编号所对应的扩展接口的状态,判断扩展接口的状态的类型,如为锁定则扩展应用不 可用;如为活动则扩展应用可用;
[0143] 步骤204:主应用根据保存的扩展应用的句柄调用对应的扩展应用,扩展应用再 调用与扩展接口编号对应的扩展接口;
[0144] 具体的,在本实施例中,步骤203与步骤204之间包括:主应用判断与扩展应用标 识对应的扩展应用是否为Shareable类型的应用,是则执行步骤204,否则继续运行原程 序,返回步骤201。
[0145] 步骤205 :主应用根据扩展应用调用与扩展接口编号对应的扩展接口所返回结果 判断是否继续运行原程序,是则继续运行原程序,返回步骤202,否则给运行环境返回执行 结果及?目息,结束;
[0146] 具体的,在本实施例中,如扩展应用返回0则主应用不需继续运行原程序,否则继 续运行原程序。
[0147] 在本实施例中,如图3所示,步骤109-步骤112可替换为:
[0148] 步骤109' :扩展应用使用保存的私钥对该随机数进行签名;
[0149] 在本实施例中,扩展应用在进行个人化时已设置了密钥的类型;优选的,本实施例 中的密钥为非对称密钥;
[0150] 步骤110' :扩展应用将注册命令中的扩展应用标识、扩展接口编号和签名结果发 送给主应用;
[0151] 具体的,本实施例中,扩展应用将扩展应用标识、扩展接口编号和签名结果作为参 数调用主应用的第二函数为extendlnstallO,第二函数用于获取注册扩展应用接口;扩 展应用通过调用主应用的第二函数对签名结果进行验证;
[0152] 步骤11Γ :主应用使用保存的公钥对签名结果进行解密,如解密成功则执行步骤 112',如解密失败则给扩展应用返回错误信息,执行步骤115 ;
[0153] 本实施例中,主应用中保存的公钥与扩展应用中的私钥相对应;
[0154] 步骤112' :主应用对保存的随机数进行哈希计算,判断哈希结果与解密结果是否 相同,是则执行步骤113,否则给扩展应用返回错误信息,执行步骤115。
[0155] 在本实施例中,对随机数的进行处理具体以对随机数进行加密和进行签名为例进 行说明。
[0156] 在本实施例中,在步骤100之前当运行环境接收到APDU命令时需要进行相应处 理,具体处理过程如图4所示,包括:
[0157] 步骤a :运行环境判断接收到的APDU命令时是否为选择命令,是则执行步骤b,否 则执行步骤d ;
[0158] 步骤b :运行环境根据选择命令中的应用标识在JavaCard中的应用表中查找对应 的应用,并判断是否找到,是则执行步骤c,否则执行步骤d ;
[0159] 具体的,运行环境检查是否满足以下条件,CLS = 0x00、INS = 0xA4、P1 = 0x04、 P2 = 0x00、Lc = length (应用标识),且5彡lc彡16,如果不满足则未找到对应的应用, 否则查找到对应的应用;
[0160] 步骤c :运行环境从应用表中获取应用标识对应的应用句柄,调用当前激活应用 的deselect ()接口,再根据与应用标识对应的应用句柄调用对应应用的select函数,如 果select函数执行正确,则将与应用标识对应的应用置为当前激活应用,执行步骤d;如果 select函数执行不正确,则运行环境捕获异常,异常处理完成后,执行步骤d ;
[0161] 本实施例中的deselect ()用于取消选择运行环境中当前的激活应用;select函 数用于选择运行环境中当前的激活应用;如应用标识对应的为主应用则当前激活应用为主 应用,如AID对应的为扩展应用则当前激活应用为扩展应用;例如AID为D0000000000601 则当前激活应用为主应用;如AID为D000000000060101则当前激活应用为扩展应用;主应 用和/或扩展应用激活后开始工作;
[0162] 步骤d :将该APDU命令派遣给当前激活应用。
[0163] 本实施例的方法也适用于类似于ISD之类的应用,即在类似于ISD之类的应用中 设置扩展点,掩膜或者下载cos后,仍然可以再下载一个扩展应用,不影响其他应用的工 作。
[0164] 以上所述,仅为本发明较佳的【具体实施方式】,但本发明的保护范围并不局限于此, 任何熟悉本【技术领域】的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围 为准。
【权利要求】
1. 一种JavaCard应用功能扩展的实现方法,其特征在于,包括注册过程和调用过程, 扩展应用和主应用激活后开始工作,其中所述注册过程包括: 步骤S1 :当所述扩展应用接收到运行环境派遣的注册命令时,所述扩展应用获取所述 主应用生成的随机数; 步骤S2 :所述扩展应用对所述随机数进行处理,并将处理结果、所述注册命令中的扩 展应用标识和扩展接口编号发送给主应用; 步骤S3 :所述主应用根据所述生成的随机数对接收到的所述处理结果进行验证,如验 证通过则执行步骤S4,否则报错,结束; 步骤S4 :所述主应用根据所述接收到的扩展应用标识判断对应的扩展应用是否已安 装,是则执行步骤S5,否则报错,结束; 步骤S5 :所述主应用根据所述扩展编号设置主应用的缓存区中对应的扩展点的位,获 取并保存所述扩展应用的句柄,给所述扩展应用返回关联成功信息; 步骤S6 :所述扩展应用注册所述扩展接口的状态,并将所述扩展接口的状态保存到所 述主应用的所述缓存区中; 所述调用过程包括: 步骤S7 :所述主应用接收到运行环境派遣的功能命令时,开始运行所述原程序; 步骤S8 :当所述主应用检测到扩展点时,所述主应用判断所述缓存区中对应的扩展点 的位是否已设置,是则执行步骤S9,否则继续运行原程序,返回步骤S8 ; 步骤S9:所述主应用根据所述缓存区中与所述扩展点对应的扩展接口编号所对应的 扩展接口的状态判断对应的扩展接口是否可用,是则执行步骤S10,否则继续运行原程序, 返回步骤S8 ; 步骤S10 :所述主应用根据保存的所述扩展应用的句柄调用对应的扩展应用,所述扩 展应用调用与所述扩展接口编号对应的扩展接口; 步骤S11 :所述主应用根据所述扩展应用调用与所述扩展接口编号对应的扩展接口返 回的结果判断是否继续运行原程序,是则继续运行原程序,返回步骤S8,否则给运行环境返 回执行结果及信息,结束。
2. 如权利要求1所述的方法,其特征在于,在所述步骤S1之前还包括: 当扩展应用接收到运行环境派遣的认证命令时,执行步骤A1-步骤A4 ; 步骤A1 :所述扩展应用判断安全通道实例是否已经实例化,是则执行步骤A3,否则执 行步骤A2 ; 步骤A2:所述扩展应用获取安全通道实例并将其存储在非易失性缓存中,执行步骤 A3 ; 步骤A3 :所述扩展应用根据所述认证命令得到送往卡外的数据长度,从安全域执行所 述认证命令所返回的结果中获取相应的所述数据长度的数据并将其存储在apdu缓存中; 步骤A4 :所述扩展应用调用通讯接口将结果数据发送到卡外,并设置安全级别,等待 接收命令。
3. 如权利要求2所述的方法,其特征在于,所述步骤A3包括: 步骤A3-1 :所述扩展应用判断所述认证命令的类型,如为第一认证命令则执行步骤 A3_2,如为第二认证命令则执行步骤A3_3 ; 步骤A3-2 :所述扩展应用根据所述第一认证命令得到送往卡外的数据长度,根据所述 数据长度从安全域执行所述第一认证命令所返回的结果中获取相应长度的数据并将其存 储在apdu缓存中,执行步骤A4 ; 步骤A3-3 :所述扩展应用根据所述第二认证命令得到需要送往卡外的数据长度为00, 执行步骤A4。
4. 如权利要求3所述的方法,其特征在于, 如认证命令为第一认证命令,则所述步骤A4包括:所述扩展应用调用通讯接口将所述 apdu缓存中的数据方式到卡外,设置安全级别的值为00 ; 如认证命令为第二认证命令,则所述步骤A4包括:所述扩张应用调用通讯接口将正确 信息发送到卡外,设置安全级别的值为非00。
5. 如权利要求2所述的方法,其特征在于,所述步骤S1中获取主应用生成的随机数之 前还包括: 所述扩展应用获取安全级别,并判断安全级别是否满足条件,是则获取主应用生成的 随机数,否则调用通讯接口将安全条件不满足信息发送到卡外,等待接收命令。
6. 如权利要求5所述的方法,其特征在于,所述判断安全级别是否满足条件,具体为: 通过调用第一接口函数获取安全级别的值,判断所述获取的值是否为〇〇,是则安全级 别不满足条件,否则安全级别满足条件。
7. 如权利要求1所述的方法,其特征在于,在所述步骤S1之前还包括: 步骤B:当扩展应用接收到选择命令时,调用通讯接口将文件控制信息发送到卡外,等 待接收命令。
8. 如权利要求7所述的方法,其特征在于,在所述步骤B之前当运行环境接收到APDU 命令时执行步骤P1 ; 步骤P1 :所述运行环境判断接收到的所述APDU命令是否为选择命令,是则执行步骤 P2,否则执行步骤P4 ; 步骤P2 :所述运行环境根据所述选择命令中的应用标识在JavaCard中的应用表中查 找对应的应用,并判断是否找到,是则执行步骤P3,否则执行步骤P4 ; 步骤P3 :所述运行环境从找到的所述应用表中获取与所述应用标识对应的应用句柄, 调用当前激活应用的deselect ()接口,再根据所述与所述应用标识对应的应用句柄调用 对应应用的select函数,如果所述select函数执行正确,则将与所述应用标识对应的应用 置为当前激活应用,执行步骤P4 ;如果所述select函数执行不正确,则所述运行环境捕获 异常,异常处理完成后,执行步骤P4 ; 步骤P4 :所述上层将接收到的所述APDU命令派遣给当前激活应用。
9. 如权利要求1所述的方法,其特征在于, 所述步骤S2包括:所述扩展应用使用保存的密钥对所述获取的随机数进行加密,并将 加密结果、所述注册命令中的扩展应用标识和扩展接口编号发送给主应用; 所述步骤S3包括:所述主应用使用保存的密钥对接收到的所述加密结果进行解密,如 解密成功则判断解密得到的随机数与所述生成的随机数是否相同,是则执行步骤S4,否则 给所述扩展应用返回错误信息;如解密失败则给所述扩展应用返回错误信息。
10. 如权利要求1所述的方法,其特征在于, 所述步骤S2包括:所述扩展应用使用保存的私钥对所述获取的随机数进行签名,并将 签名结果、所述注册命令中的扩展应用标识和扩展接口编号发送给主应用; 所述步骤S3包括:所述主应用使用保存的公钥对接收到的所述签名结果进行解密,如 解密成功则对所所述生成的随机数进行哈希计算,判断哈希结果与解密结果是否相同,是 则执行步骤S4,否则返回错误信息,如解密失败则给所述扩展应用返回错误信息。
11. 如权利要求9或10所述的方法,其特征在于,所述步骤S5还包括:所述主应用给 所述扩展应用返回成功信息; 所述步骤S5与步骤S6之间包括:所述扩展应用根据所述主应用返回的信息判断关联 是否成功,是则执行步骤S6,否则调用通讯接口将错误信息发送到卡外,结束。
12. 如权利要求1所述的方法,其特征在于,所述步骤S6之后包括:判断是否保存成 功,是则调用通讯接口将注册成功信息发送到卡外,等待接收指令,否则运行环境会捕获异 常,异常处理完成后,结束。
13. 如权利要求1所述的方法,其特征在于,所述步骤S6之前包括: 步骤S6-1 :所述扩展应用根据注册命令中的数据域判断对应的扩展接口是否已注册, 是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤S6。
14. 如权利要求1所述的方法,其特征在于,所述步骤S6包括:所述扩展应用调用所述 主应用的第三函数,传入所述扩展接口编号和所述扩展接口的状态;所述主应用检测到所 述第三函数被调用后,检查与所述扩展接口编号对应的扩展点是否存在,是则根据所述扩 展接口的状态修改扩展点的状态,给所述扩展应用返回正确信息,返回步骤S1,否则给所述 扩展应用返回错误信息,结束。
15. 如权利要求1所述的方法,其特征在于,所述步骤S6替换为:所述扩展应用判断 所述注册命令是否合法,是则等待接收命令,否则调用通讯接口将错误信息发送到卡外,结 束; 所述方法还包括:当所述扩展应用接收到关联命令时执行步骤D1 ; 步骤D1 :所述扩展应用根据所述关联命令中的数据域判断对应的扩展接口是否已注 册,是则调用通讯接口将错误信息发送到卡外,结束,否则执行步骤D2 ; 步骤D2 :所述扩展应用调用所述主应用的第三函数,传入所述扩展接口编号和所述扩 展接口的状态;所述主应用检测到第三函数被调用后,判断与所述扩展接口编号对应的扩 展点是否存在,是则根据所述扩展接口的状态修改扩展点的状态,给所述扩展应用返回正 确信息,等待接收命令,否则给所述扩展应用返回错误信息,结束。
16. 如权利要求14或15所述的方法,其特征在于,根据所述扩展接口的状态修改扩展 点的状态,具体为:将所述扩展点的状态设置为活动状态; 所述步骤S9具体为:所述主应用判断所述扩展点的状态是否为活动状态,是则对应的 扩展接口可用,否则对应的扩展接口不可用。
17. 如权利要求1所述的方法,其特征在于,所述步骤S5中的获取并保存所述扩展应用 的句柄,包括:所述主应用通过所述扩展应用标识和预定参数调用第一标准接口获取所述 扩展应用的句柄并保存。
18. 如权利要求17所述的方法,其特征在于,所述主应用调用第一标准接口获取所述 扩展应用的句柄并保存,具体包括: 步骤L1、所述运行环境根据所述扩展应用标识在所述应用列表中根据查找是否有对应 的应用,是则执行步骤L2,否则给主应用返回错误信息; 步骤L2、所述运行环境判断与扩展应用标识对应的应用是否为Shareable类型的应 用,是则执行步骤L3,否则给主应用返回错误信息; 步骤L3、所述运行环境根据所述应用列表中存储的应用句柄和所述预定参数,调用所 述扩展应用的第二标准接口; 步骤L4、当所述扩展应用所述第二标准接口被调用时,所述扩展应用检查调用所述第 二标准接口的上一个应用是否符合预设要求,是则执行步骤L5,否则给所述运行环境返回 错误信息; 步骤L5、所述扩展应用判断所述预定参数的值是否为0,是则给所述运行环境返回扩 展应用的句柄,执行步骤L6 ;否则给所述运行环境返回错误信息; 步骤L6、所述运行环境将所述扩展应用的句柄返回给所述主应用,所述接收所述扩展 应用的句柄并保存。
19.如权利要求18所述的方法,其特征在于,所述步骤S9与步骤S10之间包括: 所述主应用判断与所述扩展应用标识对应的扩展应用是否为所述Shareable类型的 应用,是则执行步骤S10,否则继续运行原程序,返回步骤S8。
【文档编号】G06F21/44GK104102507SQ201410286117
【公开日】2014年10月15日 申请日期:2014年6月24日 优先权日:2014年6月24日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1