安全执行委托管理命令的方法

文档序号:6525483阅读:271来源:国知局
安全执行委托管理命令的方法
【专利摘要】本发明公开了一种安全执行委托管理命令的方法,属于智能卡领域。所述方法包括:从安全域接收到委托管理命令后解析命令,获取命令中的预设字节、令牌长度和令牌,并发送给主安全域;主安全域接收到数据后检查主安全域的生命周期状态、从安全域的生命周期状态和权限,当检查均通过时校验令牌,并返回状态码给从安全域;从安全域判断接收到的状态码,如果是预设状态码则执行委托管理操作。本发明的有益效果在于:根据本发明提供的安全执行委托管理命令的方法,可以判断出委托管理命令的合法性,可以进一步通过避免执行非法的委托管理命令,从而保证Java卡中数据的安全性。
【专利说明】安全执行委托管理命令的方法
【技术领域】
[0001]本发明涉及智能卡领域,尤其涉及安全执行委托管理命令的方法。
【背景技术】
[0002]Java卡是能够运行Java程序的智能卡,Java卡上可见的对象有两类,卡管理器(CardManager)和Java卡应用(Applet)。卡管理器又称为发卡商安全域或主安全域(CardIssuer’s Security Domain,简称ISD),—张Java卡上除了有ISD外还可以有多个从安全域(Security Domain,简称SD),通常ISD不会管理所有的Applet,尤其是不属于发卡方的Applet。因此,出现SD经ISD授权后通过执行委托管理命令来代理管理Applet的机制。
[0003]在上述机制中,委托管理指令具体为APDU数据,其中包含令牌(token ),SD接收到运行环境(Runtime Environment,简称RE)派遣的委托管理命令后,根据委托管理命令执行委托管理操作,在执行委托管理操作的过程中需要通过验证委托管理命令中包含的令牌判断该委托管理命令的合法性,本领域技术人员在实现本发明的过程中发现,由于现有技术中没有具体的令牌验证方法,导致委托管理命令的合法性存在极大的安全隐患。

【发明内容】

[0004]本发明的目的是为了克服现有技术的缺陷,提供安全执行委托管理命令的方法。
[0005]本发明方法是通过下述技术方案实现的:
[0006]安全执行委托管理命令的方法,其基本实施过程如下:
[0007]步骤A:从安全域接收运行环境派遣的APDU数据,当所述APDU数据为委托管理命令时,对所述APDU数据进行解析,定位所述APDU数据中的令牌长度并获取所述APDU数据中的令牌长度和令牌;
[0008]步骤B:所述从安全域将所述APDU数据中的预设字节、所述令牌长度和所述令牌发送给主安全域;
[0009]步骤C:所述主安全域接收到所述从安全域发送的数据后,检查自身的生命周期状态是否为锁定状态,是则执行恢复操作,并向所述从安全域返回异常码,执行步骤F,否则执行步骤D ;
[0010]步骤D:所述主安全域检查所述从安全域是否满足执行委托管理操作条件,是则执行步骤E,否则向所述从安全域返回异常码,执行步骤F ;其中,当所述从安全域的生命周期状态为应用选择状态或个人化状态,且所述从安全域具有委托管理权限时所述从安全域满足执行委托管理操作条件;
[0011]步骤E:所述主安全域调用验签函数,将所述APDU数据中的预设字节和所述令牌,以及验签密钥传入所述验签函数,根据所述验签函数的返回值判断令牌验证是否通过,是则向所述从安全域返回预设状态码,执行步骤F;否则向所述从安全域返回异常码,执行步骤F;
[0012]步骤F:所述从安全域接收所述主安全域返回的数据,若所述主安全域返回的数据为所述预设状态码则根据所述APDU数据执行委托管理操作,结束,否则终止操作,向所述运行环境返回错误码,结束。
[0013]进一步地,步骤A包括:
[0014]步骤A1:所述从安全域接收所述运行环境派遣的APDU数据,判断所述APDU数据的类型,若为第一委托管理指令则执行步骤A2,若为第二委托管理指令则执行步骤A3,若为第三委托管理指令则执行步骤A4,若为第四委托管理指令则执行步骤A5 ;
[0015]步骤A2:按照第一预设方法定位所述APDU数据中的令牌长度,并获取所述APDU数据的令牌长度和令牌,执行步骤A6 ;
[0016]步骤A3:按照第二预设方法定位所述APDU数据中的令牌长度并获取所述APDU数据的令牌长度和令牌,执行步骤A6 ;
[0017]步骤A4:按照第三预设方法定位所述APDU数据中的令牌长度并获取所述APDU数据的令牌长度和令牌,执行步骤A6 ;
[0018]步骤A5:按照第四预设方法定位所述APDU数据中的令牌长度并获取所述APDU数据的令牌长度和令牌,执行步骤A6 ;
[0019]步骤A6:获取所述APDU数据中的令牌长度和令牌;
[0020]更进一步地:所述第一委托管理命令为预加载命令,所述按照第一预设方法定位所述APDU数据中的令牌长度具体包括:
[0021]步骤A2-1:根据所述APDU数据中的加载文件标识长度定位安全域标识长度;
[0022]步骤A2-2:根据所述安全域标识长度定位加载文件数据块哈希值长度;
[0023]步骤A2-3:根据所述加载文件数据块哈希值长度定位加载参数域长度;
[0024]步骤A2-4:根据所述加载参数域长度定位令牌长度;
[0025]当所述APDU数据为所述第一委托管理命令时,所述执行委托管理操作包括:保存所述APDU数据中的加载文件标识,赋予所述从安全域可加载应用的权限;
[0026]所述第二委托管理命令为安装命令,所述按照第二预设方法定位所述APDU数据中的令牌长度具体包括:
[0027]步骤A3-1:根据所述APDU数据中的可执行加载文件标识长度定位可执行模块标识长度;
[0028]步骤A3-2:根据所述可执行模块标识长度定位应用标识长度;
[0029]步骤A3-3:根据所述应用标识长度定位应用权限长度;
[0030]步骤A3-4:根据所述应用权限长度定位安装参数域长度;
[0031]步骤A3-5:根据所述安装参数域长度定位令牌长度;
[0032]当所述APDU数据为所述第二委托管理命令时,所述执行委托管理操作包括:当所述APDU数据的第三个字节为第二预设值时,根据所述APDU数据中的应用标识索引应用,设置索引到的应用的上下文,调用索引到的应用的安装接口安装索引到的应用;当所述APDU数据的第三个字节为第三预设值时,根据所述APDU数据中的应用标识索引应用,设置索引到的应用的上下文,调用索引到的应用的安装接口安装索引到的应用,并为索引到的应用添加被选择的权限;
[0033]所述第三委托管理命令为选择命令,所述按照第三预设方法定位所述APDU数据中的令牌长度具体包括:[0034]步骤A4-1:根据所述APDU命令中的应用标识长度定位应用权限长度;
[0035]步骤A4-2:根据所述应用权限长度定位令牌长度;
[0036]当所述APDU数据为第三委托管理命令时,所述执行委托管理操作包括:根据所述APDU数据中的应用标识索引应用,为索引到的应用添加被选择的权限;
[0037]所述第四委托管理命令为引渡命令,所述按照第四预设方法定位所述APDU数据中的令牌长度具体包括:
[0038]步骤A5-1:根据所述APDU数据中的安全域标识长度定位应用标识长度;
[0039]步骤A5-2:根据所述应用标识长度定位令牌长度;
[0040]当所述APDU数据为第四委托管理命令时,所述执行委托管理操作包括:根据所述APDU数据中的应用标识索引应用,将索引到的应用关联的安全域修改为所述APDU数据中的安全域标识对应的安全域。
[0041]进一步地,所述步骤A之后还包括:所述从安全域判断所述APDU数据中的令牌长度是否为0x00,若所述APDU数据中的令牌长度为0x00则检查自身是否具有卡片管理权限,是则执行委托管理操作,结束,否则向所述运行环境返回错误码;若所述APDU数据中的令牌长度不为0x00则执行所述步骤B ;
[0042]更进一步地,所述从安全域检查自身是否具有卡片管理权限具体包括:所述从安全域根据第一预设全局变量获取自身的ID号,根据获取到的ID号索引从安全域数组中的对象,获取所述对象的第一预设元素,判断所述第一预设元素的值是否为第一预设值,是则所述从安全域具有卡片管理权限,否则所述从安全域不具有卡片管理权限。
[0043]进一步地,所述主安全域执行恢复操作,并向所述从安全域返回异常码,具体包括:所述主安全域检查第二预设全局变量,判断ID号等于所述第二预设全局变量当前值的包是否已经提交,是则向所述从安全域返回异常码,否则开始事务处理,删除所述包、涉及所述包的异常表、全局引用表中涉及到所述包的内容和所述包中的临时变量,释放为所述包分配的对象空间,结束事务处理,并提交事务,向所述从安全域返回异常码。
[0044]进一步地,所述主安全域检查自身的生命周期状态是否为锁定状态具体包括:所述主安全域获取主安全域对象的第二预设元素,检查所述第二预设元素的值是否为第四预设值,是则所述主安全域的生命周期状态是锁定状态,否则所述主安全域的生命周期状态不是锁定状态。
[0045]进一步地,所述步骤D具体包括:所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态,是则所述主安全域检查所述从安全域是否具有委托管理权限,若具有委托管理权限,则所述从安全域满足执行委托管理操作条件,执行步骤E,若不具有委托管理权限则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F;否则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F ;
[0046]或者所述步骤D具体包括:所述主安全域检查所述从安全域是否具有委托管理权限,若具有委托管理权限则所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态,是则所述从安全域满足执行委托管理操作条件,执行步骤E,否则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F ;若不具有委托管理权限则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F ;
[0047]更进一步地,所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态具体包括:所述主安全域根据第一预设全局变量获取所述从安全域的ID号,根据所述ID号索引从安全域数组中的对象,获取所述对象的第三预设元素,检查所述第三预设元素的值,若为第五预设值则所述从安全域的生命周期状态为应用选择状态,若为第六预设值则所述从安全域的生命周期状态为个人化状态,若为其他值则所述从安全域的生命周期状态既不是应用选择状态也不是个人化状态;
[0048]所述主安全域检查所述从安全域是否具有委托管理权限具体包括:所述主安全域根据第一预设全局变量获取所述从安全域的ID号,根据获取到的ID号索引从安全域数组中的对象,获取索引到的对象的第一预设元素,判断所述第一预设元素的预设比特位的值是否为第七预设值,是则所述从安全域具有委托管理权限,否则所述从安全域不具有委托
管理权限。
[0049]进一步地,所述步骤E之前还包括:所述主安全域从内存中获取密钥值,根据所述密钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥;
[0050]更进一步地,所述主安全域从内存中获取密钥值具体包括:所述主安全域获取内存中的密钥表里的令牌校验密钥的安全密钥数组,获取所述安全密钥数组中的RSA密钥,获取所述RSA密钥的密钥值。
[0051]本发明方法的有益效果在于,根据本发明提供的安全执行委托管理命令的方法,可以判断出委托管理命令的合法性,可以进一步通过避免执行非法的委托管理命令,从而保证Java卡中数据的安全性。
【专利附图】

【附图说明】
[0052]为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0053]图1为本发明实施例1中提供的安全执行委托管理命令的方法的流程图;
[0054]图2为本发明实施例1中提供的ISD执行恢复操作,并向SD返回异常码的具体流程图;
[0055]图3为本发明实施例2提供的安全执行委托管理命令的方法的流程图;
[0056]图4为图3中步骤103的具体流程图;
[0057]图5为图3中步骤104的具体流程图;
[0058]图6为图3中步骤105的具体流程图;
[0059]图7为图3中步骤106的具体流程图。
【具体实施方式】
[0060]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0061]本发明中,委托管理操作包括:预加载操作、安装操作、选择操作和引渡操作。相应地,委托管理命令包括:预加载命令、安装命令、选择命令和弓I渡命令。
[0062]实施例1
[0063]本发明实施例1提供一种安全执行委托管理命令的方法,参见图1,所述方法具体包括:
[0064]步骤S1:SD接收RE派遣的APDU数据;
[0065]步骤S2:当APDU数据为委托管理命令时,SD对APDU数据进行解析,定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌;
[0066]优选地,步骤S2之后还包括:
[0067]步骤S2-1:SD判断APDU数据中的令牌长度是否为0x00,是则执行步骤S2-2,否则执行步骤S3 ;
[0068]步骤S2-2:SD判断自身是否具有卡片管理权限,是则执行步骤S11,否则向RE返回错误码;
[0069]在Java卡中,每个SD都对应SD数组中的一个对象,而当每个SD被创建时都会被分配并保存一个ID号,该ID号为SD数组的下标,根据该ID号可以索引到SD数组中的一个对象,从而可以获取该对象的元素;
[0070]具体地,SD判断自身是否具有卡片管理权限具体包括:SD根据第一预设全局变量获取SD的ID号,根据获取到的ID号索引SD数组中的对象,获取该对象的第一预设元素,判断第一预设元素的值是否为第一预设值,是则SD具有卡片管理权限,否则SD不具有卡片管理权限;
[0071 ] 本实施例中,第一预设全局变量为SD的上下文,第一预设元素为privilege元素;第一预设值为0x00 ;
[0072]具体地,SD的上下文为一个长度为一个字节的全局变量,高四位表示当前SD所在的通道,低四位表示当前SD的ID号,SD根据SD的上下文的低四位获得SD的ID号。
[0073]步骤S3:SD将APDU数据中的预设字节、令牌长度和令牌发送给ISD ;
[0074]具体地,本实施例中,APDU数据中的预设字节为APDU数据中的第三个字节至令牌长度前的字节。
[0075]步骤S4:ISD接收到SD发送的数据后检查自身的生命周期状态是否为锁定状态(CARD_L0CKED),是则ISD执行恢复操作,并向SD返回异常码,执行步骤S10 ;否则执行步骤S5 ;
[0076]具体地,ISD检查自身的生命周期状态是否为CARD_L0CKED包括:ISD获取ISD对象的第二预设元素,检查第二预设元素的值是否为第四预设值,是则ISD的生命周期状态为CARD_L0CKED,否则ISD的生命周期状态不为CARD_L0CKED ;
[0077]本实施例中,第二预设元素为state元素;第六预设值为0x7F ;
[0078]参见图2,ISD执行恢复操作,并向SD返回异常码包括:
[0079]步骤S4-1:ISD检查第二预设全局变量;
[0080]本实施例中,第二预设全局变量为包ID ;
[0081]步骤S4-2:1SD判断ID号为第二预设全局变量当前值的包是否已经提交,是则ISD向SD返回异常码,否则执行步骤S4-3 ;
[0082]步骤S4-3:ISD开始事务处理,删除ID号为第二预设全局变量当前值的包;
[0083]步骤S4-4:ISD删除卡内涉及到ID号为第二预设全局变量当前值的包的异常表;
[0084]步骤S4_5:1SD删除卡内全局引用表中涉及到ID号为第二预设全局变量当前值的包的内容;
[0085]步骤S4-6:ISD释放卡内为ID号为第二预设全局变量当前值的包分配的对象空间;
[0086]步骤S4-7:ISD删除ID号为第二预设全局变量当前值的包中的临时变量,结束事务处理,提交事务,向SD返回异常码;
[0087]本实施例中,若在事务处理过程中出现异常,导致事务处理失败,则进行事务回滚,然后向SD返回异常码。
[0088]步骤S5:ISD检查SD的生命周期状态是否为应用选择状态(SELECTABLE)或个人化状态(PERSONALIZED),是则执行步骤S6,否则ISD向SD返回异常码,执行步骤S10 ;
[0089]具体地,ISD检查SD的生命周期状态是否为SELECTABLE或PERSONALIZED包括:ISD根据第一预设全局变量获取SD的ID号,根据获取到的ID号索引SD数组中对象,获取该对象的第三预设元素,检查第三预设元素的值,若为第五预设值则SD的生命周期状态为SELECTABLE ;若为第六预设值则SD的生命周期状态为PERSONALIZED ;若为其他值则SD的生命周期既不是SELECTABLE也不是PERSONALIZED ;
[0090]本实施例中,第一预设全局变量为SD的上下文,第三预设元素为state元素;第七预设值为0x07 ;第六预设值为OxOF ;
[0091]具体地,ISD根据SD的上下文的低四位获得SD的ID号。
[0092]步骤S6:ISD检查SD是否具有委托管理权限,是则执行步骤S7,否则ISD向SD返回异常码,执行步骤S10;
[0093]具体地,ISD检查SD是否具有委托管理权限包括:ISD根据第一预设全局变量获取SD的ID号,根据获取到的ID号索引SD数组中的对象,获取该对象的第一预设元素,判断第一预设元素的预设比特位的值是否为第七预设值,是则SD具有委托管理权限,否则SD不具有委托管理权限;
[0094]本实施例中,第一预设全局变量为SD的上下文,第一预设元素为privilege元素;预设比特位为低位端起第6比特位和第8比特位;第七预设值为1 ;判断第一预设元素预设比特位的值是否为第七预设值具体为:判断第一预设元素的低位端起的第6比特位和第8比特位的值是否均为1 ;
[0095]具体地,ISD根据上下文的低四位获得SD的ID号;
[0096]本实施例中,步骤S5和S6的顺序可调换。
[0097]步骤S7:1SD调用验签函数,向所述验签函数中传入所述APDU数据中的预设字节和令牌,以及验签密钥;
[0098]步骤S7之前还包括:ISD从内存中获取密钥值(Key值),根据获取到的密钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥;
[0099]具体地,内存中存储有Key表;
[0100]ISD从内存中获取Key值具体包括:检查内存中的Key表里的令牌校验密钥,获取令牌校验密钥中的安全密钥数组,获取安全密钥数组中的RSA Key,获取RSA Key的Key值。
[0101]步骤S8:1SD根据所述验签函数的返回值判断令牌验证是否通过,是则执行步骤S9 ;否则ISD向SD返回异常码,执行步骤SlO ;
[0102]本实施例中,ISD判断验签函数的返回值是否为预设值,是则令牌验证通过,否则令牌验证未通过,具体地,预设值为I。
[0103]步骤S9 =ISD向SD返回预设状态码,执行步骤SlO ;
[0104]具体地,本实施例中,预设状态码为0x00。
[0105]步骤S10:SD接收到ISD返回的数据后判断接收到的数据是否为预设状态码,是则执行步骤SI I,否则执行步骤S12 ;
[0106]具体地,本实施例中,预设状态码为0x00。
[0107]步骤Sll:SD执行委托管理操作,结束;
[0108]步骤S12:SD终止操作,向RE返回错误码,结束。
[0109]实施例2
[0110]本发明实施例2提供一种安全执行委托管理命令的方法,参见图3,所述方法具体包括:
[0111]步骤101:SD接收RE派遣的APDU数据;
[0112]步骤102:SD判断APDU数据的类型,若为预加载命令则执行步骤103 ;若为安装命令则执行步骤104 ;若为选择命令则执行步骤105 ;若为引渡命令则执行步骤106,若为其他命令则执行其他命令,结束;
[0113]本实施例中,SD判断APDU数据的类型具体包括:
[0114]步骤102-1:SD检查APDU数据的第一个字节,若为0x80或0x84则执行步骤102-2,否则判定APDU数据为其他命令;
[0115]步骤102-2:SD检查APDU数据的第二个字节,若为0xE6则执行步骤102_3,否则判定APDU数据为其他命令;
[0116]步骤102-3:SD检查APDU数据的第三个字节,若为0x02则执行步骤102_4,若为0x04或OxOC则执行步骤102-5,若为0x08则执行步骤102-6,若为0x10则执行步骤102-7,否则判定APDU数据为其他命令;
[0117]步骤102-4:SD检查APDU数据的第四个字节是否不小于OxOA,是则判定APDU数据为预加载命令,否则判定APDU数据为其他命令;
[0118]步骤102-5:SD检查APDU数据的第四个字节是否不小于0x18,是则判定APDU数据为安装命令,否则判定APDU数据为其他命令;
[0119]步骤102-6:SD检查APDU数据的第四个字节是否不小于OxOC,是则判定APDU数据为选择命令,否则判定APDU数据为其他命令;
[0120]步骤102-7:SD检查APDU数据的第四个字节是否不小于0x10,是则判定APDU数据为引渡命令,否则判定APDU数据为其他命令。
[0121]步骤103:SD按照第一预设方法定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌,执行步骤107 ;
[0122]参见图4,本实施例中,步骤103具体包括:
[0123]步骤103-1:SD根据APDU数据中的加载文件标识长度定位安全域标识长度;[0124]具体地,当APDU数据为预加载命令时,APDU数据的数据域的第一个字节为加载文件标识长度;步骤103-1包括:SD根据APDU数据的数据域的第一个字节确定APDU数据中的加载文件标识,定位加载文件标识后面的一个字节为安全域标识长度;
[0125]例如,APDU数据的数据域的第一个字节为0x05,则加载文件标识的长度为5个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为加载文件标识,定位加载文件标识后面的字节即APDU数据的数据域的第七个字节为安全域标识长度;
[0126]步骤103-2:SD根据APDU数据中的安全域标识长度定位加载文件数据块哈希值长度;
[0127]具体地,步骤103-2包括:SD根据APDU数据中的安全域标识长度确定APDU数据中的安全域标识,定位安全域标识后面的一个字节为加载文件哈希值长度;
[0128]例如,APDU数据的数据域的第七个字节是安全域标识长度,为0x00,则安全域标识的长度为O个字节,可以确定APDU数据的数据域中不包含安全域标识,定位安全域标识长度后面的字节即APDU数据的数据域的第八个字节为加载文件哈希值长度;
[0129]步骤103-3:SD根据APDU数据中的加载文件数据块哈希值长度定位加载参数域长度;
[0130]具体地,步骤103-3包括:SD根据APDU数据中的加载文件哈希值长度确定APDU数据中的加载文件哈希值,定位加载文件哈希值后面的一个字节为加载参数域长度;
[0131]例如,APDU数据的数据域的第八个字节是加载文件哈希值长度,为0x02,则加载文件哈希值的长度为2个字节,可以确定APDU数据的数据域的第九个字节至第十个字节为加载文件哈希值,定位加载文件哈希值后面的字节即APDU数据的数据域的第十一个字节为加载参数域长度;
[0132]步骤103-4:SD根据APDU数据中的加载参数域长度定位令牌长度;
[0133]具体地,步骤103-4包括:SD根据APDU数据中的加载参数域长度确定APDU数据中的加载参数域,定位加载参数域后面的一个字节为令牌长度;
[0134]例如,APDU数据的数据域的第十一个字节是加载参数域长度,为0x00,则加载参数域的长度为O个字节,可以确定APDU数据中不包含加载参数域,定位加载参数域长度后面的字节即APDU数据的数据域的第十二个字节为令牌长度;
[0135]步骤103-5:SD获取APDU数据中的令牌长度;
[0136]步骤103-6:SD根据令牌长度获取APDU数据中的令牌。
[0137]例如,APDU数据的数据域的第十二个字节是令牌长度,为0x05,则令牌的长度为5个字节,获取APDU数据的数据域的第十三个字节至第十七个字节,得到令牌。
[0138]步骤104:SD按照第二预设方法定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌,执行步骤107 ;
[0139]参见图5,本实施例中,步骤104具体包括:
[0140]步骤104-1: SD根据APDU数据中的可执行加载文件标识长度定位可执行模块标识长度;
[0141]具体地,当APDU数据为安装命令时,APDU数据的数据域的第一个字节为可执行加载文件标识长度;步骤104-1包括:SD根据APDU数据的数据域的第一个字节确定APDU数据中的可执行加载文件标识,定位可执行加载文件标识后面的一个字节为可执行模块标识长度;
[0142]例如,APDU数据的数据域的第一个字节为0x05,则可执行加载文件标识的长度为5个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为可执行加载文件标识,定位可执行加载文件标识后面的字节即APDU数据的数据域的第七个字节为可执行模块标识长度;
[0143]步骤104-2:SD根据APDU数据中的可执行模块标识长度定位应用标识长度;
[0144]具体地,步骤104-2包括:SD根据APDU数据中的可执行模块标识长度确定APDU数据中的可执行模块标识,定位可执行模块标识后面的一个字节为应用标识长度;
[0145]例如,APDU数据的数据域的第七个字节是可执行模块标识长度,为0x00,则可执行模块标识的长度为O个字节,可以确定APDU数据的数据域中不包含可执行模块标识,定位可执行模块标识长度后面的字节即APDU数据的数据域的第八个字节为应用标识长度;
[0146]步骤104-3:SD根据APDU数据中的应用标识长度定位应用权限长度;
[0147]具体地,步骤104-3包括:SD根据APDU数据中的应用标识长度确定APDU数据中的应用标识,定位应用标识后面的一个字节为应用权限长度;
[0148]例如,APDU数据的数据域的第八个字节是应用标识长度,为0x02,则应用标识的长度为2个字节,可以确定APDU数据的数据域的第九个字节至第十个字节为应用标识,定位应用标识后面的字节即APDU数据的数据域的第十一个字节为应用权限长度;
[0149]步骤104-4:SD根据APDU数据中的应用权限长度定位安装参数域长度;
[0150]具体地,步骤104-4包括:SD根据APDU数据中的应用权限长度确定APDU数据中的应用权限,定位应用权限后面的一个字节为安装参数域长度;
[0151]例如,APDU数据的数据域的第十一个字节是应用权限长度,为0x02,则应用权限的长度为2个字节,可以确定APDU数据的数据域的第十二个字节至第十三个字节为应用权限,定位应用权限后面的字节即APDU数据的数据域的第十四个字节为安装参数域长度;
[0152]步骤104-5:SD根据APDU数据中的安装参数域长度定位令牌长度;
[0153]具体地,步骤104-5包括:SD根据APDU数据中的安装参数域长度确定APDU数据中的安装参数域,定位安装参数域后面的一个字节为令牌长度;
[0154]例如,APDU数据的数据域的第十四个字节是安装参数域长度,为0x00,则安装参数域的长度为O个字节,可以确定APDU数据中不包含安装参数域,定位安装参数域长度后面的字节即APDU数据的数据域的第十五个字节为令牌长度;
[0155]步骤104-6:SD获取APDU数据中的令牌长度;
[0156]步骤104-7:SD根据令牌长度获取APDU数据中的令牌。
[0157]例如,APDU数据的数据域的第十五个字节是令牌长度,为0x05,则令牌的长度为5个字节,获取APDU数据的数据域的第十五个字节至第十九个字节,得到令牌。
[0158]步骤105:SD按照第三预设方法定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌,执行步骤107 ;
[0159]参见图6,本实施例中,步骤105具体包括:
[0160]步骤105-1:SD根据APDU数据中的应用标识长度定位应用权限长度;
[0161]具体地,当APDU数据为选择命令时,APDU数据的数据域的第一个字节和第二个字节均为0x00,第三个字节为应用标识长度;步骤105-1包括:SD根据APDU数据的数据域的第三个字节确定APDU数据中的应用标识,定位应用标识后面的一个字节为应用权限长度;
[0162]例如,APDU数据的数据域的第三个字节为0x05,则应用标识的长度为5个字节,可以确定APDU数据的数据域的第四个字节至第八个字节为可执行加载文件标识,定位可执行加载文件标识后面的字节即APDU数据的数据域的第九个字节为应用权限长度;
[0163]步骤105-2:SD根据APDU数据中的应用权限长度定位令牌长度;
[0164]具体地,当APDU数据为选择命令时,应用权限长度为0x01,应用权限之后的第一个字节为0x00,步骤105-2包括:SD根据APDU数据中的应用权限长度确定APDU数据中的应用权限,定位应用权限之后的第二个字节为令牌长度;
[0165]例如,APDU数据的数据域的第九个字节是应用权限长度,为0x01,即应用权限长度为I个字节,可以确定APDU数据的数据域的第十个字节为应用标识,定位应用标识之后的第二个字节即APDU数据的数据域的第十二个字节为令牌长度;
[0166]步骤105-3:SD获取APDU数据中的令牌长度;
[0167]步骤105-4:SD根据令牌长度获取APDU数据中的令牌。
[0168]例如,APDU数据的数据域的第十二个字节是令牌长度,为0x04,则令牌的长度为4个字节,获取APDU数据的数据域的第十三个字节至第十六个字节,得到令牌。
[0169]步骤106:SD按照第四预设方法定位APDU数据中的令牌长度,并获取APDU数据中的令牌长度和令牌,执行步骤107 ;
[0170]参见图7,本实施例中,步骤106具体包括:
[0171]步骤106-1:SD根据APDU数据中的安全域标识长度定位应用标识长度;
[0172]具体地,当APDU数据为引渡命令时,APDU数据的数据域的第一个字节为安全域标识长度,安全域标识之后的第一个字节为0x00 ;步骤106-1包括:SD根据APDU数据的数据域的第一个字节确定APDU数据中的安全域标识,定位安全域标识之后的第二个字节为应用标识长度;
[0173]例如,APDU数据的数据域的第一个字节为0x05,则安全域标识的长度为5个字节,可以确定APDU数据的数据域的第二个字节至第六个字节为安全域标识,定位安全域标识之后的第二个字节即APDU数据的数据域的第八个字节为应用标识长度;
[0174]步骤106-2:SD根据APDU数据中的应用标识长度定位令牌长度;
[0175]具体地,当APDU数据为选择命令时,应用标识之后的第一个字节和第二个字节均为0x00,步骤106-2包括:SD根据APDU数据中的应用标识长度确定APDU数据中的应用标识,定位应用标识之后的第三个字节为令牌长度;
[0176]例如,APDU数据的数据域的第八个字节是应用标识长度,为0x06,则应用标识长度为6个字节,可以确定APDU数据的数据域的第九个字节至第十四个字节为应用标识,定位应用标识之后的第三个字节即APDU数据的数据域的第十七个字节为令牌长度;
[0177]步骤106-3:SD获取APDU数据中的令牌长度;
[0178]步骤106-4:SD根据令牌长度获取APDU数据中的令牌。
[0179]例如,APDU数据的数据域的第十七个字节是令牌长度,为0x03,则令牌的长度为3个字节,获取APDU数据的数据域的第十八个字节至第二十个字节,得到令牌。
[0180]步骤107:SD将APDU数据的第三个字节至令牌长度前的字节、令牌长度和令牌发送给ISD ;[0181]步骤108:1SD接收到SD发送的数据后检查自身的生命周期状态是否为CARD_LOCKED,是则ISD执行恢复操作,并向SD返回异常码,执行步骤114 ;否则执行步骤109 ;
[0182]本实施例中,ISD检查自身的生命周期状态是否为CARD_L0CKED具体包括:ISD获取ISD对象的state元素,检查state元素的值是否为0x7F,是则ISD的生命周期状态为CARD_L0CKED,否则ISD的生命周期状态不为CARD_L0CKED ;
[0183]执行恢复操作,并向SD返回异常码包括:
[0184]步骤108-1:检查第二预设全局变量;
[0185]本实施例中,第二预设全局变量为包ID ;
[0186]步骤108-2:判断ID号为第二预设全局变量当前值的包是否已经提交,是则ISD向SD返回异常码,否则执行步骤108-3 ;
[0187]步骤108-3:开始事务处理,删除ID号为第二预设全局变量当前值的包;
[0188]步骤108-4:删除卡内涉及到ID号为第二预设全局变量当前值的包的异常表;
[0189]步骤108-5:删除卡内全局引用表中涉及到ID号为第二预设全局变量当前值的包的内容;
[0190]步骤108-6:释放卡内为ID号为第二预设全局变量当前值的包分配的对象空间;
[0191]步骤108-7:删除ID号为第二预设全局变量当前值的包中的临时变量,结束事务处理,提交事务,执行步骤108-8 ;
[0192]本实施例中,若在事务处理过程中出现异常,导致事务处理失败,则进行事务回滚,然后执行步骤108-8 ;
[0193]步骤108-8:向SD返回异常码。
[0194]步骤109 =ISD检查SD的生命周期状态是否为SELECTABLE或PERSONALIZED,是则执行步骤110,否则ISD向SD返回异常码,执行步骤114 ;
[0195]具体地,在Java卡中,每个SD都对应SD数组中的一个对象,而当每个SD被创建时都会被分配并保存一个ID号,该ID号为SD数组的下标,根据该ID号可以索引到SD数组中的一个对象,从而可以获取该对象的元素;
[0196]本实施例中,ISD检查SD的生命周期状态是否为SELECTABLE或PERSONALIZED具体包括:ISD根据SD的上下文的低四位获取SD的ID号,根据获取到的ID号索引SD数组中对象,获取该对象的state元素,检查state元素的值,若为0x07则SD的生命周期状态为SELECTABLE ;若为OxOF则SD的生命周期状态为PERSONALIZED ;若为其他则SD的生命周期既不是 SELECTABLE 也不是 PERSONALIZED。
[0197]步骤110:1SD检查SD是否具有委托管理权限,是则执行步骤111,否则ISD向SD返回异常码,执行步骤114;
[0198]本实施例中,ISD检查SD是否具有委托管理权限具体包括:ISD根据SD的上下文的低四位获取SD的ID号,根据获取到的ID号索引SD数组中的对象,获取该对象的privilege元素,检查privilege元素,若privilege元素的低位端起的第6比特和第8比特的取值为1,则SD具有委托管理权限,否则SD不具有委托管理权限;
[0199]本实施例中,步骤109和步骤110的顺序可以调换。
[0200]步骤111:1SD调用验签函数,向验签函数中传入所述APDU数据中的预设字节和令牌,以及验签密钥;[0201]步骤111之前还包括:ISD从内存中获取密钥值,根据获取到的密钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥;
[0202]具体地,内存中存储有Key表,Key表中包括令牌校验密钥、收条密钥、DAP (DataAuthentication Pattern,数据验证模式)密钥等;令牌校验密钥中包括:安全密钥数组、最大密钥数、安全密钥数、第一密钥句柄、当前密钥句柄、原始密钥句柄、顺序容器和密钥版本等;安全密钥数组中包括RSA Key和DES Key等;
[0203]ISD从内存中获取密钥值具体包括:检查内存中的Key表里的令牌校验密钥,获取令牌校验密钥中的安全密钥数组,获取安全密钥数组中的RSA Key,获取RSA Key的Key值。
[0204]步骤112:1SD根据验签函数的返回值判断令牌验证是否通过,是则执行步骤113 ;否则ISD向SD返回异常码,执行步骤114 ;
[0205]本实施例中,ISD判断验签函数的返回值是否为预设值,是则令牌验证通过,否则令牌验证未通过,具体地,预设值为I。
[0206]步骤113 =ISD向SD返回预设状态码,执行步骤114 ;
[0207]本实施例中,预设状态码为0x00。
[0208]步骤114:SD接收到ISD返回的数据后判断接收到的数据是否为预设状态码,是则执行步骤115,否则执行步骤116 ;
[0209]本实施例中,预设状态码为0x00。
[0210]步骤115:SD根据APDU数据执行委托管理操作,结束;
[0211]具体地,当APDU数据为预加载命令时,步骤115具体包括:保存APDU数据中的加载文件标识,赋予SD可加载应用的权限;
[0212]当APDU数据为安装命令时,步骤115具体包括:当APDU数据的第三个字节为第二预设值时,根据APDU数据中的应用标识索引应用,设置所述应用的上下文,调用所述应用的安装接口安装所述应用;当APDU数据的第三个字节为第三预设值时,根据APDU数据中的应用标识索引应用,设置所述应用的上下文,调用所述应用的安装接口安装所述应用,并为所述应用添加被选择的权限;
[0213]本实施例中,第二预设值为0x04,第三预设值为OxOC ;
[0214]当APDU数据为选择命令时,步骤115具体包括:根据APDU数据中的应用标识索引应用,为所述应用添加被选择的权限;
[0215]当APDU数据为引渡命令时,步骤115具体包括:根据APDU数据中的应用标识索引应用,将所述应用关联的安全域修改为APDU数据中的安全域标识对应的安全域。
[0216]步骤116:SD终止操作,向RE返回错误码,结束。
[0217]以上所述的实施例只是本发明较优选的【具体实施方式】,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
【权利要求】
1.一种安全执行委托管理命令的方法,其特征在于,包括:步骤A:从安全域接收运行环境派遣的APDU数据,当所述APDU数据为委托管理命令时,对所述APDU数据进行解析,定位所述APDU数据中的令牌长度并获取所述APDU数据中的令牌长度和令牌;步骤B:所述从安全域将所述APDU数据中的预设字节、所述令牌长度和所述令牌发送给主安全域;步骤C:所述主安全域接收到所述从安全域发送的数据后,检查自身的生命周期状态是否为锁定状态,是则执行恢复操作,并向所述从安全域返回异常码,执行步骤F,否则执行步骤D ;步骤D:所述主安全域检查所述从安全域是否满足执行委托管理操作条件,是则执行步骤E,否则向所述从安全域返回异常码,执行步骤F ;其中,当所述从安全域的生命周期状态为应用选择状态或个人化状态,且所述从安全域具有委托管理权限时所述从安全域满足执行委托管理操作条件;步骤E:所述主安全域调用验签函数,将所述APDU数据中的预设字节和所述令牌,以及验签密钥传入所述验签函数,根据所述验签函数的返回值判断令牌验证是否通过,是则向所述从安全域返回预设状态码,执行步骤F ;否则向所述从安全域返回异常码,执行步骤F ;步骤F:所述从安全域接收所述主安全域返回的数据,若所述主安全域返回的数据为所述预设状态码则根据所述APDU数据执行委托管理操作,结束,否则终止操作,向所述运行环境返回错误码,结束。
2.根据权利要求1所述的方法,其特征在于,所述步骤A之后还包括:所述从安全域判断所述APDU数据中的令牌长度是否为0x00,若所述APDU数据中的令牌长度为0x00则检查自身是否具有卡片管理权限,是则执行委托管理操作,结束,否则向所述运行环境返回错误码;若所述APDU数据中的令牌长度不为0x00则执行所述步骤B。
3.根据权利要求2所述的方法,其特征在于,所述从安全域检查自身是否具有卡片管理权限具体包括:所述从安全域根据第一预设全局变量获取自身的ID号,根据获取到的ID号索引从安全域数组中的对象,获取所述对象的第一预设元素,判断所述第一预设元素的值是否为第一预设值,是则所述从安全域具有卡片管理权限,否则所述从安全域不具有卡片管理权限。
4.根据权利要求1所述的方法,其特征在于,所述主安全域执行恢复操作,并向所述从安全域返回异常码,具体包括:所述主安全域检查第二预设全局变量,判断ID号等于所述第二预设全局变量当前值的包是否已经提交,是则向所述从安全域返回异常码,否则开始事务处理,删除所述包、涉及所述包的异常表、全局引用表中涉及到所述包的内容和所述包中的临时变量,释放为所述包分配的对象空间,结束事务处理,并提交事务,向所述从安全域返回异常码。
5.根据权利要求1所述方法,其特征在于,所述步骤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数据中的令牌长度和令牌。
6.根据权利要求5所述的方法,其特征在于,所述第一委托管理命令具体为预加载命令;所述按照第一预设方法定位所述APDU数据中的令牌长度具体包括:步骤A2-1:根据所述APDU数据中的加载文件标识长度定位安全域标识长度;步骤A2-2:根据所述安全域标识长度定位加载文件数据块哈希值长度;步骤A2-3:根据所述加载文件数据块哈希值长度定位加载参数域长度;步骤A2-4:根据所述加载参数域长度定位令牌长度。
7.根据权利要求6所述`的方法,其特征在于,所述执行委托管理操作包括:保存所述APDU数据中的加载文件标识,赋予所述从安全域可加载应用的权限。
8.根据权利要求5所述的方法,其特征在于,所述第二委托管理命令具体为安装命令;所述按照第二预设方法定位所述APDU数据中的令牌长度具体包括:步骤A3-1:根据所述APDU数据中的可执行加载文件标识长度定位可执行模块标识长度;步骤A3-2:根据所述可执行模块标识长度定位应用标识长度;步骤A3-3:根据所述应用标识长度定位应用权限长度;步骤A3-4:根据所述应用权限长度定位安装参数域长度;步骤A3-5:根据所述安装参数域长度定位令牌长度。
9.根据权利要求8所述的方法,其特征在于,所述执行委托管理操作包括:当所述APDU数据的第三个字节为第二预设值时,根据所述APDU数据中的应用标识索引应用,设置索引到的应用的上下文,调用索引到的应用的安装接口安装索引到的应用;当所述APDU数据的第三个字节为第三预设值时,根据所述APDU数据中的应用标识索引应用,设置索引到的应用的上下文,调用索引到的应用的安装接口安装索引到的应用,并为索引到的应用添加被选择的权限。
10.根据权利要求5所述的方法,其特征在于,所述第三委托管理命令具体为选择命令;所述按照第三预设方法定位所述APDU数据中的令牌长度具体包括:步骤A4-1:根据所述APDU命令中的应用标识长度定位应用权限长度;步骤A4-2:根据所述应用权限长度定位令牌长度。
11.根据权利要求10所述的方法,其特征在于,所述执行委托管理操作包括:根据所述APDU数据中的应用标识索引应用,为索引到的应用添加被选择的权限。
12.根据权利要求5所述的方法,其特征在于,所述第四委托管理命令具体为引渡命令;所述按照第四预设方法定位所述APDU数据中的令牌长度具体包括:步骤A5-1:根据所述APDU数据中的安全域标识长度定位应用标识长度;步骤A5-2:根据所述应用标识长度定位令牌长度。
13.根据权利要求12所述的方法,其特征在于,所述执行委托管理操作包括:根据所述APDU数据中的应用标识索引应用,将索引到的应用关联的安全域修改为所述APDU数据中的安全域标识对应的安全域。
14.根据权利要求1所述的方法,其特征在于,所述主安全域检查自身的生命周期状态是否为锁定状态具体包括:所述主安全域获取主安全域对象的第二预设元素,检查所述第二预设元素的值是否为第四预设值,是则所述主安全域的生命周期状态是锁定状态,否则所述主安全域的生命周期状态不是锁定状态。
15.根据权利要求1所述的方法,其特征在于,所述步骤D具体包括:所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态,是则所述主安全域检查所述从安全域是否具有委托管理权限,若具有委托管理权限,则所述从安全域满足执行委托管理操作条件,执行步骤E,若不具有委托管理权限则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F;否则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F ;或者所述步骤D具体 包括:所述主安全域检查所述从安全域是否具有委托管理权限,若具有委托管理权限则所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态,是则所述从安全域满足执行委托管理操作条件,执行步骤E,否则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F ;若不具有委托管理权限则所述从安全域不满足执行委托管理操作条件,所述主安全域向所述从安全域返回异常码,执行步骤F。
16.根据权利要求15所述的方法,其特征在于,所述主安全域检查所述从安全域的生命周期状态是否为应用选择状态或个人化状态具体包括:所述主安全域根据第一预设全局变量获取所述从安全域的ID号,根据所述ID号索引从安全域数组中的对象,获取所述对象的第三预设元素,检查所述第三预设元素的值,若为第五预设值则所述从安全域的生命周期状态为应用选择状态,若为第六预设值则所述从安全域的生命周期状态为个人化状态,若为其他值则所述从安全域的生命周期状态既不是应用选择状态也不是个人化状态。
17.根据权利要求15所述的方法,其特征在于,所述主安全域检查所述从安全域是否具有委托管理权限具体包括:所述主安全域根据第一预设全局变量获取所述从安全域的ID号,根据获取到的ID号索引从安全域数组中的对象,获取索引到的对象的第一预设元素,判断所述第一预设元素的预设比特位的值是否为第七预设值,是则所述从安全域具有委托管理权限,否则所述从安全域不具有委托管理权限。
18.根据权利要求1所述的方法,其特征在于,所述步骤E之前还包括:所述主安全域从内存中获取密钥值,根据所述密钥值初始化RSA公钥系数和RSA公钥指数,并初始化RSA公钥为验签密钥。
19.根据权利要求18所述的方法,其特征在于,所述主安全域从内存中获取密钥值具体包括:所述主安全域获取内存中的密钥表里的令牌校验密钥的安全密钥数组,获取所述安全密钥数组中的RSA密钥, 获取所述RSA密钥的密钥值。
【文档编号】G06F9/44GK103729179SQ201310724111
【公开日】2014年4月16日 申请日期:2013年12月25日 优先权日:2013年12月25日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1