公开/公告号CN103729179A
专利类型发明专利
公开/公告日2014-04-16
原文格式PDF
申请/专利权人 飞天诚信科技股份有限公司;
申请/专利号CN201310724111.2
申请日2013-12-25
分类号G06F9/44;G06F21/52;
代理机构
代理人
地址 100085 北京市海淀区学清路9号汇智大厦B楼17层
入库时间 2024-02-19 23:23:46
法律状态公告日
法律状态信息
法律状态
2017-02-15
授权
授权
2014-05-14
实质审查的生效 IPC(主分类):G06F9/44 申请日:20131225
实质审查的生效
2014-04-16
公开
公开
技术领域
本发明涉及智能卡领域,尤其涉及安全执行委托管理命令的方法。
背景技术
Java卡是能够运行Java程序的智能卡,Java卡上可见的对象有两类,卡管理器 (CardManager)和Java卡应用(Applet)。卡管理器又称为发卡商安全域或主安 全域(Card Issuer’s Security Domain,简称ISD),一张Java卡上除了有ISD外还可 以有多个从安全域(Security Domain,简称SD),通常ISD不会管理所有的Applet, 尤其是不属于发卡方的Applet。因此,出现SD经ISD授权后通过执行委托管理命 令来代理管理Applet的机制。
在上述机制中,委托管理指令具体为APDU数据,其中包含令牌(token), SD接收到运行环境(Runtime Environment,简称RE)派遣的委托管理命令后, 根据委托管理命令执行委托管理操作,在执行委托管理操作的过程中需要通过 验证委托管理命令中包含的令牌判断该委托管理命令的合法性,本领域技术人 员在实现本发明的过程中发现,由于现有技术中没有具体的令牌验证方法,导 致委托管理命令的合法性存在极大的安全隐患。
发明内容
本发明的目的是为了克服现有技术的缺陷,提供安全执行委托管理命令的 方法。
本发明方法是通过下述技术方案实现的:
安全执行委托管理命令的方法,其基本实施过程如下:
步骤A:从安全域接收运行环境派遣的APDU数据,当所述APDU数据为 委托管理命令时,对所述APDU数据进行解析,定位所述APDU数据中的令牌 长度并获取所述APDU数据中的令牌长度和令牌;
步骤B:所述从安全域将所述APDU数据中的预设字节、所述令牌长度和 所述令牌发送给主安全域;
步骤C:所述主安全域接收到所述从安全域发送的数据后,检查自身的生命 周期状态是否为锁定状态,是则执行恢复操作,并向所述从安全域返回异常码, 执行步骤F,否则执行步骤D;
步骤D:所述主安全域检查所述从安全域是否满足执行委托管理操作条件, 是则执行步骤E,否则向所述从安全域返回异常码,执行步骤F;其中,当所述 从安全域的生命周期状态为应用选择状态或个人化状态,且所述从安全域具有 委托管理权限时所述从安全域满足执行委托管理操作条件;
步骤E:所述主安全域调用验签函数,将所述APDU数据中的预设字节和 所述令牌,以及验签密钥传入所述验签函数,根据所述验签函数的返回值判断 令牌验证是否通过,是则向所述从安全域返回预设状态码,执行步骤F;否则向 所述从安全域返回异常码,执行步骤F;
步骤F:所述从安全域接收所述主安全域返回的数据,若所述主安全域返回 的数据为所述预设状态码则根据所述APDU数据执行委托管理操作,结束,否 则终止操作,向所述运行环境返回错误码,结束。
进一步地,步骤A包括:
步骤A1:所述从安全域接收所述运行环境派遣的APDU数据,判断所述 APDU数据的类型,若为第一委托管理指令则执行步骤A2,若为第二委托管理 指令则执行步骤A3,若为第三委托管理指令则执行步骤A4,若为第四委托管理 指令则执行步骤A5;
步骤A2:按照第一预设方法定位所述APDU数据中的令牌长度,并获取所 述APDU数据的令牌长度和令牌,执行步骤A6;
步骤A3:按照第二预设方法定位所述APDU数据中的令牌长度并获取所述 APDU数据的令牌长度和令牌,执行步骤A6;
步骤A4:按照第三预设方法定位所述APDU数据中的令牌长度并获取所述 APDU数据的令牌长度和令牌,执行步骤A6;
步骤A5:按照第四预设方法定位所述APDU数据中的令牌长度并获取所述 APDU数据的令牌长度和令牌,执行步骤A6;
步骤A6:获取所述APDU数据中的令牌长度和令牌;
更进一步地:所述第一委托管理命令为预加载命令,所述按照第一预设方 法定位所述APDU数据中的令牌长度具体包括:
步骤A2-1:根据所述APDU数据中的加载文件标识长度定位安全域标识长 度;
步骤A2-2:根据所述安全域标识长度定位加载文件数据块哈希值长度;
步骤A2-3:根据所述加载文件数据块哈希值长度定位加载参数域长度;
步骤A2-4:根据所述加载参数域长度定位令牌长度;
当所述APDU数据为所述第一委托管理命令时,所述执行委托管理操作包 括:保存所述APDU数据中的加载文件标识,赋予所述从安全域可加载应用的 权限;
所述第二委托管理命令为安装命令,所述按照第二预设方法定位所述APDU 数据中的令牌长度具体包括:
步骤A3-1:根据所述APDU数据中的可执行加载文件标识长度定位可执行 模块标识长度;
步骤A3-2:根据所述可执行模块标识长度定位应用标识长度;
步骤A3-3:根据所述应用标识长度定位应用权限长度;
步骤A3-4:根据所述应用权限长度定位安装参数域长度;
步骤A3-5:根据所述安装参数域长度定位令牌长度;
当所述APDU数据为所述第二委托管理命令时,所述执行委托管理操作包 括:当所述APDU数据的第三个字节为第二预设值时,根据所述APDU数据中 的应用标识索引应用,设置索引到的应用的上下文,调用索引到的应用的安装 接口安装索引到的应用;当所述APDU数据的第三个字节为第三预设值时,根 据所述APDU数据中的应用标识索引应用,设置索引到的应用的上下文,调用 索引到的应用的安装接口安装索引到的应用,并为索引到的应用添加被选择的 权限;
所述第三委托管理命令为选择命令,所述按照第三预设方法定位所述APDU 数据中的令牌长度具体包括:
步骤A4-1:根据所述APDU命令中的应用标识长度定位应用权限长度;
步骤A4-2:根据所述应用权限长度定位令牌长度;
当所述APDU数据为第三委托管理命令时,所述执行委托管理操作包括: 根据所述APDU数据中的应用标识索引应用,为索引到的应用添加被选择的权 限;
所述第四委托管理命令为引渡命令,所述按照第四预设方法定位所述APDU 数据中的令牌长度具体包括:
步骤A5-1:根据所述APDU数据中的安全域标识长度定位应用标识长度;
步骤A5-2:根据所述应用标识长度定位令牌长度;
当所述APDU数据为第四委托管理命令时,所述执行委托管理操作包括: 根据所述APDU数据中的应用标识索引应用,将索引到的应用关联的安全域修 改为所述APDU数据中的安全域标识对应的安全域。
进一步地,所述步骤A之后还包括:所述从安全域判断所述APDU数据中 的令牌长度是否为0x00,若所述APDU数据中的令牌长度为0x00则检查自身是 否具有卡片管理权限,是则执行委托管理操作,结束,否则向所述运行环境返 回错误码;若所述APDU数据中的令牌长度不为0x00则执行所述步骤B;
更进一步地,所述从安全域检查自身是否具有卡片管理权限具体包括:所 述从安全域根据第一预设全局变量获取自身的ID号,根据获取到的ID号索引 从安全域数组中的对象,获取所述对象的第一预设元素,判断所述第一预设元 素的值是否为第一预设值,是则所述从安全域具有卡片管理权限,否则所述从 安全域不具有卡片管理权限。
进一步地,所述主安全域执行恢复操作,并向所述从安全域返回异常码, 具体包括:所述主安全域检查第二预设全局变量,判断ID号等于所述第二预设 全局变量当前值的包是否已经提交,是则向所述从安全域返回异常码,否则开 始事务处理,删除所述包、涉及所述包的异常表、全局引用表中涉及到所述包 的内容和所述包中的临时变量,释放为所述包分配的对象空间,结束事务处理, 并提交事务,向所述从安全域返回异常码。
进一步地,所述主安全域检查自身的生命周期状态是否为锁定状态具体包 括:所述主安全域获取主安全域对象的第二预设元素,检查所述第二预设元素 的值是否为第四预设值,是则所述主安全域的生命周期状态是锁定状态,否则 所述主安全域的生命周期状态不是锁定状态。
进一步地,所述步骤D具体包括:所述主安全域检查所述从安全域的生命 周期状态是否为应用选择状态或个人化状态,是则所述主安全域检查所述从安 全域是否具有委托管理权限,若具有委托管理权限,则所述从安全域满足执行 委托管理操作条件,执行步骤E,若不具有委托管理权限则所述从安全域不满足 执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F; 否则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全 域返回异常码,执行步骤F;
或者所述步骤D具体包括:所述主安全域检查所述从安全域是否具有委托 管理权限,若具有委托管理权限则所述主安全域检查所述从安全域的生命周期 状态是否为应用选择状态或个人化状态,是则所述从安全域满足执行委托管理 操作条件,执行步骤E,否则所述从安全域不满足执行委托管理操作条件,所述 主安全域向所述从安全域返回异常码,执行步骤F;若不具有委托管理权限则所 述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回 异常码,执行步骤F;
更进一步地,所述主安全域检查所述从安全域的生命周期状态是否为应用 选择状态或个人化状态具体包括:所述主安全域根据第一预设全局变量获取所 述从安全域的ID号,根据所述ID号索引从安全域数组中的对象,获取所述对 象的第三预设元素,检查所述第三预设元素的值,若为第五预设值则所述从安 全域的生命周期状态为应用选择状态,若为第六预设值则所述从安全域的生命 周期状态为个人化状态,若为其他值则所述从安全域的生命周期状态既不是应 用选择状态也不是个人化状态;
所述主安全域检查所述从安全域是否具有委托管理权限具体包括:所述主 安全域根据第一预设全局变量获取所述从安全域的ID号,根据获取到的ID号 索引从安全域数组中的对象,获取索引到的对象的第一预设元素,判断所述第 一预设元素的预设比特位的值是否为第七预设值,是则所述从安全域具有委托 管理权限,否则所述从安全域不具有委托管理权限。
进一步地,所述步骤E之前还包括:所述主安全域从内存中获取密钥值, 根据所述密钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验 签密钥;
更进一步地,所述主安全域从内存中获取密钥值具体包括:所述主安全域 获取内存中的密钥表里的令牌校验密钥的安全密钥数组,获取所述安全密钥数 组中的RSA密钥,获取所述RSA密钥的密钥值。
本发明方法的有益效果在于,根据本发明提供的安全执行委托管理命令的 方法,可以判断出委托管理命令的合法性,可以进一步通过避免执行非法的委 托管理命令,从而保证Java卡中数据的安全性。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所 需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本 领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中提供的安全执行委托管理命令的方法的流程图;
图2为本发明实施例1中提供的ISD执行恢复操作,并向SD返回异常码的具体流程图;
图3为本发明实施例2提供的安全执行委托管理命令的方法的流程图;
图4为图3中步骤103的具体流程图;
图5为图3中步骤104的具体流程图;
图6为图3中步骤105的具体流程图;
图7为图3中步骤106的具体流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳 动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明中,委托管理操作包括:预加载操作、安装操作、选择操作和引渡 操作。相应地,委托管理命令包括:预加载命令、安装命令、选择命令和引渡 命令。
实施例1
本发明实施例1提供一种安全执行委托管理命令的方法,参见图1,所述方 法具体包括:
步骤S1:SD接收RE派遣的APDU数据;
步骤S2:当APDU数据为委托管理命令时,SD对APDU数据进行解析, 定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌;
优选地,步骤S2之后还包括:
步骤S2-1:SD判断APDU数据中的令牌长度是否为0x00,是则执行步骤 S2-2,否则执行步骤S3;
步骤S2-2:SD判断自身是否具有卡片管理权限,是则执行步骤S11,否则 向RE返回错误码;
在Java卡中,每个SD都对应SD数组中的一个对象,而当每个SD被创建 时都会被分配并保存一个ID号,该ID号为SD数组的下标,根据该ID号可以 索引到SD数组中的一个对象,从而可以获取该对象的元素;
具体地,SD判断自身是否具有卡片管理权限具体包括:SD根据第一预设 全局变量获取SD的ID号,根据获取到的ID号索引SD数组中的对象,获取该 对象的第一预设元素,判断第一预设元素的值是否为第一预设值,是则SD具有 卡片管理权限,否则SD不具有卡片管理权限;
本实施例中,第一预设全局变量为SD的上下文,第一预设元素为privilege 元素;第一预设值为0x00;
具体地,SD的上下文为一个长度为一个字节的全局变量,高四位表示当前 SD所在的通道,低四位表示当前SD的ID号,SD根据SD的上下文的低四位 获得SD的ID号。
步骤S3:SD将APDU数据中的预设字节、令牌长度和令牌发送给ISD;
具体地,本实施例中,APDU数据中的预设字节为APDU数据中的第三个 字节至令牌长度前的字节。
步骤S4:ISD接收到SD发送的数据后检查自身的生命周期状态是否为锁定 状态(CARD_LOCKED),是则ISD执行恢复操作,并向SD返回异常码,执 行步骤S10;否则执行步骤S5;
具体地,ISD检查自身的生命周期状态是否为CARD_LOCKED包括:ISD 获取ISD对象的第二预设元素,检查第二预设元素的值是否为第四预设值,是 则ISD的生命周期状态为CARD_LOCKED,否则ISD的生命周期状态不为 CARD_LOCKED;
本实施例中,第二预设元素为state元素;第六预设值为0x7F;
参见图2,ISD执行恢复操作,并向SD返回异常码包括:
步骤S4-1:ISD检查第二预设全局变量;
本实施例中,第二预设全局变量为包ID;
步骤S4-2:ISD判断ID号为第二预设全局变量当前值的包是否已经提交, 是则ISD向SD返回异常码,否则执行步骤S4-3;
步骤S4-3:ISD开始事务处理,删除ID号为第二预设全局变量当前值的包;
步骤S4-4:ISD删除卡内涉及到ID号为第二预设全局变量当前值的包的异 常表;
步骤S4-5:ISD删除卡内全局引用表中涉及到ID号为第二预设全局变量当 前值的包的内容;
步骤S4-6:ISD释放卡内为ID号为第二预设全局变量当前值的包分配的对 象空间;
步骤S4-7:ISD删除ID号为第二预设全局变量当前值的包中的临时变量, 结束事务处理,提交事务,向SD返回异常码;
本实施例中,若在事务处理过程中出现异常,导致事务处理失败,则进行 事务回滚,然后向SD返回异常码。
步骤S5:ISD检查SD的生命周期状态是否为应用选择状态(SELECTABLE) 或个人化状态(PERSONALIZED),是则执行步骤S6,否则ISD向SD返回异常 码,执行步骤S10;
具体地,ISD检查SD的生命周期状态是否为SELECTABLE或 PERSONALIZED包括:ISD根据第一预设全局变量获取SD的ID号,根据获 取到的ID号索引SD数组中对象,获取该对象的第三预设元素,检查第三预设 元素的值,若为第五预设值则SD的生命周期状态为SELECTABLE;若为第六 预设值则SD的生命周期状态为PERSONALIZED;若为其他值则SD的生命周 期既不是SELECTABLE也不是PERSONALIZED;
本实施例中,第一预设全局变量为SD的上下文,第三预设元素为state元 素;第七预设值为0x07;第六预设值为0x0F;
具体地,ISD根据SD的上下文的低四位获得SD的ID号。
步骤S6:ISD检查SD是否具有委托管理权限,是则执行步骤S7,否则ISD 向SD返回异常码,执行步骤S10;
具体地,ISD检查SD是否具有委托管理权限包括:ISD根据第一预设全局 变量获取SD的ID号,根据获取到的ID号索引SD数组中的对象,获取该对象 的第一预设元素,判断第一预设元素的预设比特位的值是否为第七预设值,是 则SD具有委托管理权限,否则SD不具有委托管理权限;
本实施例中,第一预设全局变量为SD的上下文,第一预设元素为privilege 元素;预设比特位为低位端起第6比特位和第8比特位;第七预设值为1;判断 第一预设元素预设比特位的值是否为第七预设值具体为:判断第一预设元素的 低位端起的第6比特位和第8比特位的值是否均为1;
具体地,ISD根据上下文的低四位获得SD的ID号;
本实施例中,步骤S5和S6的顺序可调换。
步骤S7:ISD调用验签函数,向所述验签函数中传入所述APDU数据中的 预设字节和令牌,以及验签密钥;
步骤S7之前还包括:ISD从内存中获取密钥值(Key值),根据获取到的密 钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥;
具体地,内存中存储有Key表;
ISD从内存中获取Key值具体包括:检查内存中的Key表里的令牌校验密 钥,获取令牌校验密钥中的安全密钥数组,获取安全密钥数组中的RSA Key,获 取RSA Key的Key值。
步骤S8:ISD根据所述验签函数的返回值判断令牌验证是否通过,是则执 行步骤S9;否则ISD向SD返回异常码,执行步骤S10;
本实施例中,ISD判断验签函数的返回值是否为预设值,是则令牌验证通过, 否则令牌验证未通过,具体地,预设值为1。
步骤S9:ISD向SD返回预设状态码,执行步骤S10;
具体地,本实施例中,预设状态码为0x00。
步骤S10:SD接收到ISD返回的数据后判断接收到的数据是否为预设状态 码,是则执行步骤S11,否则执行步骤S12;
具体地,本实施例中,预设状态码为0x00。
步骤S11:SD执行委托管理操作,结束;
步骤S12:SD终止操作,向RE返回错误码,结束。
实施例2
本发明实施例2提供一种安全执行委托管理命令的方法,参见图3,所述方 法具体包括:
步骤101:SD接收RE派遣的APDU数据;
步骤102:SD判断APDU数据的类型,若为预加载命令则执行步骤103; 若为安装命令则执行步骤104;若为选择命令则执行步骤105;若为引渡命令则 执行步骤106,若为其他命令则执行其他命令,结束;
本实施例中,SD判断APDU数据的类型具体包括:
步骤102-1:SD检查APDU数据的第一个字节,若为0x80或0x84则执行步 骤102-2,否则判定APDU数据为其他命令;
步骤102-2:SD检查APDU数据的第二个字节,若为0xE6则执行步骤102-3, 否则判定APDU数据为其他命令;
步骤102-3:SD检查APDU数据的第三个字节,若为0x02则执行步骤102-4, 若为0x04或0x0C则执行步骤102-5,若为0x08则执行步骤102-6,若为0x10则 执行步骤102-7,否则判定APDU数据为其他命令;
步骤102-4:SD检查APDU数据的第四个字节是否不小于0x0A,是则判定 APDU数据为预加载命令,否则判定APDU数据为其他命令;
步骤102-5:SD检查APDU数据的第四个字节是否不小于0x18,是则判定 APDU数据为安装命令,否则判定APDU数据为其他命令;
步骤102-6:SD检查APDU数据的第四个字节是否不小于0x0C,是则判定 APDU数据为选择命令,否则判定APDU数据为其他命令;
步骤102-7:SD检查APDU数据的第四个字节是否不小于0x10,是则判定 APDU数据为引渡命令,否则判定APDU数据为其他命令。
步骤103:SD按照第一预设方法定位APDU数据中的令牌长度,并获取 APDU数据中的令牌长度和令牌,执行步骤107;
参见图4,本实施例中,步骤103具体包括:
步骤103-1:SD根据APDU数据中的加载文件标识长度定位安全域标识长 度;
具体地,当APDU数据为预加载命令时,APDU数据的数据域的第一个字 节为加载文件标识长度;步骤103-1包括:SD根据APDU数据的数据域的第一 个字节确定APDU数据中的加载文件标识,定位加载文件标识后面的一个字节 为安全域标识长度;
例如,APDU数据的数据域的第一个字节为0x05,则加载文件标识的长度为 5个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为加载文 件标识,定位加载文件标识后面的字节即APDU数据的数据域的第七个字节为 安全域标识长度;
步骤103-2:SD根据APDU数据中的安全域标识长度定位加载文件数据块 哈希值长度;
具体地,步骤103-2包括:SD根据APDU数据中的安全域标识长度确定 APDU数据中的安全域标识,定位安全域标识后面的一个字节为加载文件哈希 值长度;
例如,APDU数据的数据域的第七个字节是安全域标识长度,为0x00,则 安全域标识的长度为0个字节,可以确定APDU数据的数据域中不包含安全域 标识,定位安全域标识长度后面的字节即APDU数据的数据域的第八个字节为 加载文件哈希值长度;
步骤103-3:SD根据APDU数据中的加载文件数据块哈希值长度定位加载 参数域长度;
具体地,步骤103-3包括:SD根据APDU数据中的加载文件哈希值长度确 定APDU数据中的加载文件哈希值,定位加载文件哈希值后面的一个字节为加 载参数域长度;
例如,APDU数据的数据域的第八个字节是加载文件哈希值长度,为0x02, 则加载文件哈希值的长度为2个字节,可以确定APDU数据的数据域的第九个 字节至第十个字节为加载文件哈希值,定位加载文件哈希值后面的字节即APDU 数据的数据域的第十一个字节为加载参数域长度;
步骤103-4:SD根据APDU数据中的加载参数域长度定位令牌长度;
具体地,步骤103-4包括:SD根据APDU数据中的加载参数域长度确定 APDU数据中的加载参数域,定位加载参数域后面的一个字节为令牌长度;
例如,APDU数据的数据域的第十一个字节是加载参数域长度,为0x00,则 加载参数域的长度为0个字节,可以确定APDU数据中不包含加载参数域,定 位加载参数域长度后面的字节即APDU数据的数据域的第十二个字节为令牌长 度;
步骤103-5:SD获取APDU数据中的令牌长度;
步骤103-6:SD根据令牌长度获取APDU数据中的令牌。
例如,APDU数据的数据域的第十二个字节是令牌长度,为0x05,则令牌 的长度为5个字节,获取APDU数据的数据域的第十三个字节至第十七个字节, 得到令牌。
步骤104:SD按照第二预设方法定位APDU数据中的令牌长度,并获取 APDU数据中的令牌长度和令牌,执行步骤107;
参见图5,本实施例中,步骤104具体包括:
步骤104-1:SD根据APDU数据中的可执行加载文件标识长度定位可执行 模块标识长度;
具体地,当APDU数据为安装命令时,APDU数据的数据域的第一个字节 为可执行加载文件标识长度;步骤104-1包括:SD根据APDU数据的数据域的 第一个字节确定APDU数据中的可执行加载文件标识,定位可执行加载文件标 识后面的一个字节为可执行模块标识长度;
例如,APDU数据的数据域的第一个字节为0x05,则可执行加载文件标识的 长度为5个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为 可执行加载文件标识,定位可执行加载文件标识后面的字节即APDU数据的数 据域的第七个字节为可执行模块标识长度;
步骤104-2:SD根据APDU数据中的可执行模块标识长度定位应用标识长 度;
具体地,步骤104-2包括:SD根据APDU数据中的可执行模块标识长度确 定APDU数据中的可执行模块标识,定位可执行模块标识后面的一个字节为应 用标识长度;
例如,APDU数据的数据域的第七个字节是可执行模块标识长度,为0x00, 则可执行模块标识的长度为0个字节,可以确定APDU数据的数据域中不包含 可执行模块标识,定位可执行模块标识长度后面的字节即APDU数据的数据域 的第八个字节为应用标识长度;
步骤104-3:SD根据APDU数据中的应用标识长度定位应用权限长度;
具体地,步骤104-3包括:SD根据APDU数据中的应用标识长度确定APDU 数据中的应用标识,定位应用标识后面的一个字节为应用权限长度;
例如,APDU数据的数据域的第八个字节是应用标识长度,为0x02,则应用 标识的长度为2个字节,可以确定APDU数据的数据域的第九个字节至第十个 字节为应用标识,定位应用标识后面的字节即APDU数据的数据域的第十一个 字节为应用权限长度;
步骤104-4:SD根据APDU数据中的应用权限长度定位安装参数域长度;
具体地,步骤104-4包括:SD根据APDU数据中的应用权限长度确定APDU 数据中的应用权限,定位应用权限后面的一个字节为安装参数域长度;
例如,APDU数据的数据域的第十一个字节是应用权限长度,为0x02,则应 用权限的长度为2个字节,可以确定APDU数据的数据域的第十二个字节至第 十三个字节为应用权限,定位应用权限后面的字节即APDU数据的数据域的第 十四个字节为安装参数域长度;
步骤104-5:SD根据APDU数据中的安装参数域长度定位令牌长度;
具体地,步骤104-5包括:SD根据APDU数据中的安装参数域长度确定 APDU数据中的安装参数域,定位安装参数域后面的一个字节为令牌长度;
例如,APDU数据的数据域的第十四个字节是安装参数域长度,为0x00,则 安装参数域的长度为0个字节,可以确定APDU数据中不包含安装参数域,定 位安装参数域长度后面的字节即APDU数据的数据域的第十五个字节为令牌长 度;
步骤104-6:SD获取APDU数据中的令牌长度;
步骤104-7:SD根据令牌长度获取APDU数据中的令牌。
例如,APDU数据的数据域的第十五个字节是令牌长度,为0x05,则令牌 的长度为5个字节,获取APDU数据的数据域的第十五个字节至第十九个字节, 得到令牌。
步骤105:SD按照第三预设方法定位APDU数据中的令牌长度,并获取 APDU数据中的令牌长度和令牌,执行步骤107;
参见图6,本实施例中,步骤105具体包括:
步骤105-1:SD根据APDU数据中的应用标识长度定位应用权限长度;
具体地,当APDU数据为选择命令时,APDU数据的数据域的第一个字节 和第二个字节均为0x00,第三个字节为应用标识长度;步骤105-1包括:SD根 据APDU数据的数据域的第三个字节确定APDU数据中的应用标识,定位应用 标识后面的一个字节为应用权限长度;
例如,APDU数据的数据域的第三个字节为0x05,则应用标识的长度为5个 字节,可以确定APDU数据的数据域的第四个字节至第八个字节为可执行加载 文件标识,定位可执行加载文件标识后面的字节即APDU数据的数据域的第九 个字节为应用权限长度;
步骤105-2:SD根据APDU数据中的应用权限长度定位令牌长度;
具体地,当APDU数据为选择命令时,应用权限长度为0x01,应用权限之 后的第一个字节为0x00,步骤105-2包括:SD根据APDU数据中的应用权限长 度确定APDU数据中的应用权限,定位应用权限之后的第二个字节为令牌长度;
例如,APDU数据的数据域的第九个字节是应用权限长度,为0x01,即应 用权限长度为1个字节,可以确定APDU数据的数据域的第十个字节为应用标 识,定位应用标识之后的第二个字节即APDU数据的数据域的第十二个字节为 令牌长度;
步骤105-3:SD获取APDU数据中的令牌长度;
步骤105-4:SD根据令牌长度获取APDU数据中的令牌。
例如,APDU数据的数据域的第十二个字节是令牌长度,为0x04,则令牌 的长度为4个字节,获取APDU数据的数据域的第十三个字节至第十六个字节, 得到令牌。
步骤106:SD按照第四预设方法定位APDU数据中的令牌长度,并获取 APDU数据中的令牌长度和令牌,执行步骤107;
参见图7,本实施例中,步骤106具体包括:
步骤106-1:SD根据APDU数据中的安全域标识长度定位应用标识长度;
具体地,当APDU数据为引渡命令时,APDU数据的数据域的第一个字节 为安全域标识长度,安全域标识之后的第一个字节为0x00;步骤106-1包括:SD 根据APDU数据的数据域的第一个字节确定APDU数据中的安全域标识,定位 安全域标识之后的第二个字节为应用标识长度;
例如,APDU数据的数据域的第一个字节为0x05,则安全域标识的长度为5 个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为安全域标 识,定位安全域标识之后的第二个字节即APDU数据的数据域的第八个字节为 应用标识长度;
步骤106-2:SD根据APDU数据中的应用标识长度定位令牌长度;
具体地,当APDU数据为选择命令时,应用标识之后的第一个字节和第二 个字节均为0x00,步骤106-2包括:SD根据APDU数据中的应用标识长度确定 APDU数据中的应用标识,定位应用标识之后的第三个字节为令牌长度;
例如,APDU数据的数据域的第八个字节是应用标识长度,为0x06,则应 用标识长度为6个字节,可以确定APDU数据的数据域的第九个字节至第十四 个字节为应用标识,定位应用标识之后的第三个字节即APDU数据的数据域的 第十七个字节为令牌长度;
步骤106-3:SD获取APDU数据中的令牌长度;
步骤106-4:SD根据令牌长度获取APDU数据中的令牌。
例如,APDU数据的数据域的第十七个字节是令牌长度,为0x03,则令牌 的长度为3个字节,获取APDU数据的数据域的第十八个字节至第二十个字节, 得到令牌。
步骤107:SD将APDU数据的第三个字节至令牌长度前的字节、令牌长度 和令牌发送给ISD;
步骤108:ISD接收到SD发送的数据后检查自身的生命周期状态是否为 CARD_LOCKED,是则ISD执行恢复操作,并向SD返回异常码,执行步骤114; 否则执行步骤109;
本实施例中,ISD检查自身的生命周期状态是否为CARD_LOCKED具体包 括:ISD获取ISD对象的state元素,检查state元素的值是否为0x7F,是则ISD 的生命周期状态为CARD_LOCKED,否则ISD的生命周期状态不为 CARD_LOCKED;
执行恢复操作,并向SD返回异常码包括:
步骤108-1:检查第二预设全局变量;
本实施例中,第二预设全局变量为包ID;
步骤108-2:判断ID号为第二预设全局变量当前值的包是否已经提交,是 则ISD向SD返回异常码,否则执行步骤108-3;
步骤108-3:开始事务处理,删除ID号为第二预设全局变量当前值的包;
步骤108-4:删除卡内涉及到ID号为第二预设全局变量当前值的包的异常 表;
步骤108-5:删除卡内全局引用表中涉及到ID号为第二预设全局变量当前 值的包的内容;
步骤108-6:释放卡内为ID号为第二预设全局变量当前值的包分配的对象 空间;
步骤108-7:删除ID号为第二预设全局变量当前值的包中的临时变量,结 束事务处理,提交事务,执行步骤108-8;
本实施例中,若在事务处理过程中出现异常,导致事务处理失败,则进行 事务回滚,然后执行步骤108-8;
步骤108-8:向SD返回异常码。
步骤109:ISD检查SD的生命周期状态是否为SELECTABLE或 PERSONALIZED,是则执行步骤110,否则ISD向SD返回异常码,执行步骤 114;
具体地,在Java卡中,每个SD都对应SD数组中的一个对象,而当每个SD 被创建时都会被分配并保存一个ID号,该ID号为SD数组的下标,根据该ID 号可以索引到SD数组中的一个对象,从而可以获取该对象的元素;
本实施例中,ISD检查SD的生命周期状态是否为SELECTABLE或 PERSONALIZED具体包括:ISD根据SD的上下文的低四位获取SD的ID号, 根据获取到的ID号索引SD数组中对象,获取该对象的state元素,检查state 元素的值,若为0x07则SD的生命周期状态为SELECTABLE;若为0x0F则SD 的生命周期状态为PERSONALIZED;若为其他则SD的生命周期既不是 SELECTABLE也不是PERSONALIZED。
步骤110:ISD检查SD是否具有委托管理权限,是则执行步骤111,否则ISD 向SD返回异常码,执行步骤114;
本实施例中,ISD检查SD是否具有委托管理权限具体包括:ISD根据SD 的上下文的低四位获取SD的ID号,根据获取到的ID号索引SD数组中的对象, 获取该对象的privilege元素,检查privilege元素,若privilege元素的低位端起的 第6比特和第8比特的取值为1,则SD具有委托管理权限,否则SD不具有委 托管理权限;
本实施例中,步骤109和步骤110的顺序可以调换。
步骤111:ISD调用验签函数,向验签函数中传入所述APDU数据中的预设 字节和令牌,以及验签密钥;
步骤111之前还包括:ISD从内存中获取密钥值,根据获取到的密钥值初始 化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥;
具体地,内存中存储有Key表,Key表中包括令牌校验密钥、收条密钥、 DAP(Data Authentication Pattern,数据验证模式)密钥等;令牌校验密钥中包 括:安全密钥数组、最大密钥数、安全密钥数、第一密钥句柄、当前密钥句柄、 原始密钥句柄、顺序容器和密钥版本等;安全密钥数组中包括RSA Key和DES Key等;
ISD从内存中获取密钥值具体包括:检查内存中的Key表里的令牌校验密 钥,获取令牌校验密钥中的安全密钥数组,获取安全密钥数组中的RSA Key,获 取RSA Key的Key值。
步骤112:ISD根据验签函数的返回值判断令牌验证是否通过,是则执行步 骤113;否则ISD向SD返回异常码,执行步骤114;
本实施例中,ISD判断验签函数的返回值是否为预设值,是则令牌验证通过, 否则令牌验证未通过,具体地,预设值为1。
步骤113:ISD向SD返回预设状态码,执行步骤114;
本实施例中,预设状态码为0x00。
步骤114:SD接收到ISD返回的数据后判断接收到的数据是否为预设状态 码,是则执行步骤115,否则执行步骤116;
本实施例中,预设状态码为0x00。
步骤115:SD根据APDU数据执行委托管理操作,结束;
具体地,当APDU数据为预加载命令时,步骤115具体包括:保存APDU 数据中的加载文件标识,赋予SD可加载应用的权限;
当APDU数据为安装命令时,步骤115具体包括:当APDU数据的第三个 字节为第二预设值时,根据APDU数据中的应用标识索引应用,设置所述应用 的上下文,调用所述应用的安装接口安装所述应用;当APDU数据的第三个字 节为第三预设值时,根据APDU数据中的应用标识索引应用,设置所述应用的 上下文,调用所述应用的安装接口安装所述应用,并为所述应用添加被选择的 权限;
本实施例中,第二预设值为0x04,第三预设值为0x0C;
当APDU数据为选择命令时,步骤115具体包括:根据APDU数据中的应 用标识索引应用,为所述应用添加被选择的权限;
当APDU数据为引渡命令时,步骤115具体包括:根据APDU数据中的应 用标识索引应用,将所述应用关联的安全域修改为APDU数据中的安全域标识 对应的安全域。
步骤116:SD终止操作,向RE返回错误码,结束。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员 在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围 内。
机译: 一种安全执行委托管理命令的方法
机译: 虚拟机环境命令执行管理程序,虚拟机环境命令执行管理方法,虚拟机环境命令执行设备,虚拟机环境命令执行管理系统
机译: 主站装置,从站装置,处理委托管理方法,处理执行方法,处理委托管理程序以及处理执行程序