一种java卡上安全域的实现方法技术领域
本发明涉及智能卡领域,尤其涉及一种java卡上安全域的实现方法。
背景技术
随着智能卡的广泛应用,智能卡的用途、功能集成程度越来越高,卡
片内应用的安全关系到持卡人的重大利益,现有技术中,一般采用卡
片密钥加解密的方式实现卡片与上位机的内外部认证,认证通过即允
许对卡片内应用进行管理,安全性低,持卡人的利益不能得到保障。
发明内容
为解决上述问题,根据本发明的一方面,提供了一种java卡上安全域
的实现方法,包括:
S1:卡片上电,所述卡片的当前安全域开始工作;
S2:所述当前安全域等待接收上位机发送的命令,当接收到APDU命令
时,检测所述APDU命令的类型,若为第一命令,则执行S3;若为第二
命令,则执行S4;若为第三命令,则执行S11;若为第四命令,则执行
S13;若为第五命令,则执行S14;若为其他APDU命令,则根据所述AP
DU命令进行操作;
S3:所述当前安全域对所述第一命令进行解析得到命令头和数据域,
按照第二预设方式对所述第一命令的数据域进行解析得到装载文件标
识符,装载文件所关联的安全域标识符、装载文件哈希值和装载令牌
,将所述装载文件标识符,装载文件所关联的安全域标识符写入到注
册表中,并将所述装载文件哈希值缓存在第一缓存区,根据所述装载
文件哈希值和所述装载令牌验证所述第一命令是否合法,是则将第一
状态设为等待接收第二命令,返回S2,否则直接返
回S2;
S4:所述当前安全域对所述第二命令进行解析得到命令头和数据域,
获取所述第二命令的第四字节上的值并判断其是否为0,是则执行S5,
否则执行S7;
S5:所述当前安全域判断所述第一状态是否为等待接收第二命令,是
则执行S6,否则初始化所述第一状态和第二状态,返回S2;
S6:所述当前安全域按照第一预设方式对所述第二命令的数据域进行
解析并存储解析结果得到验证数据块及第一装载文件数据块,并将所
述第一装载文件数据块存储于第一存储区,根据所述验证数据块验证
所述第二命令是否合法,如合法则执行S9,如不合法则初始化第一状
态和第二状态并清空所述第一存储区,返回S2;
S7:所述当前安全域判断所述命令的第四字节上的值与所述第二状态
的值是否相符,是则执行S8,否则初始化所述第一状态和所述第二状
态,返回S2;
S8:所述当前安全域按照第一预设方式对所述命令的数据域进行解析
,并从解析得到的数据中获得第二装载文件数据块,并将所述第二装
载文件数据块存储于所述第一存储区,顺序执行S9;
S9:所述当前安全域用所述命令的第四字节上的值更新第二状态的值
,获取所述命令的第三字节上的数据,并判断所述命令的第三字节上
的数据的最高位是否为1,是则执行S10,否则返回S2;
S10:所述当前安全域对所述第一存储区中的数据进行哈希算法得到验
证哈希值,判断所述验证哈希值与所述第一缓存区的所述装载文件哈
希值是否一致,是则初始化所述第一状态及第二状态,返回S2,否则
报错,初始化第一状态及第二状态并清空第一存储区,返回S2;
S11:所述当前安全域对所述第三命令进行解析,并根据解析得到的数
据验证所述第三命令是否合法,是则执行S12,否则报错,返回S2;
S12:所述当前安全域调用安装方法对所述第一存储区的装载文件数据
进行安装,并在安装结束后,返回S2;
S13:所述当前安全域对所述第四命令进行解析,并根据解析结果验证
所述第四命令是否合法,是则将所述第一状态设置为等待接收第五命
令状态,返回S2,否则报错,返回S2;
S14:所述当前安全域验证所述第一状态是否为等待接收第五命令,是
则执行S15,否则报错,返回S2;
S15:所述当前安全域执行个人化操作,执行完成后返回S2。
根据本发明的另一方面,提供了一种一种java卡上安全域的实现装置
,包括:
接收模块:用于接收上位机发送的命令;
第一检测模块:用于当所述接收模块接收到APDU命令时,检测所述AP
DU命令的类型,若为第一命令,则第一解析模块工作;若为第二命令
,则第二解析模块工作;若为第三命令,则第一解析验证模块工作;
若为第四命令,则第二解析验证模块工作;若为第五命令,则验证操
作模块工作;
所述第一解析模块,用于按照对所述第一命令进行解析得到命令头和
数据域,按照第二预设方式对所述第一命令的数据域进行解析得到装
载文件标识符、装载文件所关联的安全域标识符、装载文件哈希值和
装载令牌,并将所述装载文件哈希值缓存在第一缓存区;
第一写入模块,用于将所述装载文件标识符,装载文件所关联的安全
域标
识符写入到注册表中;
第一验证模块,用于根据装载文件哈希值和装载令牌验证所述第一命
令是否合法,是则第一设置模块工作;
所述第一设置模块,用于将第一状态设为等待接收第二命令;
所述第二解析模块,包括第一解析单元、第二解析单元和第三解析单
元,所述第一解析单元用于对所述第二命令进行解析得到命令头和数
据域;所述第二解析单元用于按照第一预设方式对所述第二命令的数
据域进行解析得到验证数据块及第一装载文件数据块;所述第三解析
单元用于按照第一预设方式对所述命令的数据域进行解析得到第二装
载文件数据块;
第一判断模块,用于获取所述第二命令的命令第四字节上的值并判断
其是否为预设标识,是则第二判断模块工作,否则第三判断模块工作
;
所述第二判断模块,用于判断所述第一状态是否为等待接收第二命令
,是则第二解析单元工作,否则初始化模块工作;
所述初始化模块,用于初始化所述第一状态和第二状态;
第二验证模块,用于根据所述验证数据块验证所述第二命令是否合法
,如合法则更新模块工作,如不合法则所述初始化模块和清空模块工
作;
所述清空模块用于清空所述第一存储区;
所述第三判断模块,用于判断所述命令的第四字节上的值与所述第二
状态的值是否相符,是则所述第三解析单元工作,否则所述初始化模
块工作;
所述更新模块,用于用所述命令的第四字节上的值更新第二状态的值
;
第四判断模块,用于获取所述命令的第三字节上的数据,并判断所述
命令
的第三字节上的数据的最高位是否为1,是则计算判断模块工作,否则
报错模块工作;
所述计算判断模块,用于对所述第一存储区中的数据进行哈希计算得
到验证哈希值,判断所述验证哈希值与所述第缓存区中的装载文件哈
希值是否一致,是则所述初始化模块工作,否则报错模块和清空模块
工作;
所述报错模块用于报错;
所述第一解析验证模块,用于对所述第三命令进行解析,并根据所述
解析得到的数据验证所述第三命令是否合法,是则安装模块工作,否
则所述报错模块工作;
所述安装模块,用于调用安装方法对所述第一存储区的装载文件数据
进行安装;
所述第二解析验证模块,用于对所述第四命令进行解析,并根据解析
结果验证所述第四命令是否合法,是则第二设置模块工作,否则报错
模块工作;
所述第二设置模块,用于将所述第一状态设置为等待接收第五命令状
态;
所述验证操作模块,用于验证所述第一状态是否为等待接收第五命令
,是则执行个人化操作,否则报错模块工作。
所述安全域包括主安全域和用户安全域。通过本发明方案获得的有益
效果是为发卡商提供灵活的卡片管理界面;提高了对卡片应用管理的
安全性。
附图说明
图1为本发明实施例1提供的一种java卡上安全域的实现方法的流程图
;
图2为本发明实施例2提供的又一种java卡上安全域的实现方法流程图
;
图3为本发明实施例3提供的再一种java卡上安全域的实现方法流程图
;
图4为本发明实施例4提供的一种java卡安全域的实现装置。
具体实施方式
本发明中,一个用户安全域或应用的下载通过一条install for lo
ad命令及至少load命令完成,一个应用或一个用户安全域的安装通过
install for install命令完成,用户安全域的个人化通过install
for personalization命令及store data命令完成,
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本
发明实施方式做进一步的详细描述。
实施例1
S1:卡片上电,所述卡片的当前安全域开始工作;
S2:所述当前安全域等待接收上位机发送的命令,当接收到APDU命令
时,检测所述APDU命令的类型,若为第一命令,则执行S3;若为第二
命令,则执行S4-S10;若为第三命令,则执行S11-S12;若为第四命令
,则执行S13;若为第五命令,则执行S14-S15;若为其他APDU命令,
则根据所述APDU命令进行操作;
在本实施例中,所述第一命令为install for load命令,第二命令
为load命令,第三命令为install for install命令,第四命令为i
nstall for personalization命令,所述第五命令为store data命
令。
S3:所述当前安全域按照对所述第一命令进行解析得到命令头和数据
域,按照第二预设方式对所述第一命令的数据域进行解析得到装载文
件标识符,装载文件所关联的安全域标识符、装载文件哈希值和装载
令牌,将所述装载文件
标识符,装载文件所关联的安全域标识符写入到注册表中,根据装载
文件哈希值和装载令牌验证所述第一命令是否合法,是则将第一状态
设为等待接收第二命令,返回S2,否则直接返回S2;
S4:所述当前安全域对所述第二命令进行解析得到命令头和数据域,
获取所述第二命令的第四字节上的值并判断其是否为0,是则执行S5,
否则执行S7;
S5:所述当前安全域判断所述第一状态时是否为等待接收第二命令,
是则执行S6,否则报错,并初始化所述第一状态和第二状态,返回S2
;
S6:所述当前安全域按照第一预设方式对所述第二命令的数据域进行
解析得到验证数据块及第一装载文件数据块,并将所述第一装载文件
数据块存储于第一存储区,根据所述验证数据块验证所述第二命令是
否合法,如合法则执行S9,如不合法则报错,初始化第一状态和第二
状态并清空所述第一存储区,返回S2;
S7:所述当前安全域判断所述命令的第四字节上的值与所述第二状态
的值是否相符,是则执行S8,否则初始化所述第一状态和所述第二状
态,返回S2;
S8:所述当前安全域按照第一预设方式对所述命令的数据域进行解析
,并从解析得到的数据中获得第二装载文件数据块,并将所述第二装
载文件存储于所述第一存储区,顺序执行S9;
S9:所述当前安全域用所述命令的第四字节上的值更新第二状态的值
,获取所述命令的第三字节上的数据,并判断所述命令的第三字节上
的数据的最高位是否为1,是则执行S10,否则返回S2;
S10:所述当前安全域对所述第一存储区中的数据进行哈希算法得到验
证哈希值,判断所述验证希值与所述第一缓存区的装载文件哈希值是
否一致,是则
初始化所述第一状态及第二状态,返回S2,否则报错,初始化第一状
态及第二状态并清空第一存储区,返回S2;
S11:所述当前安全域对所述第三命令进行解析,并根据解析得到的数
据验证所述第三命令是否合法,是则执行S12,否则报错,返回S2;
S12:所述当前安全域调用安装方法对所述第一存储区的装载文件数据
进行安装,并在安装结束后,返回S2;
S13:所述当前安全域对所述第四命令进行解析,并根据解析结果验证
所述第四命令是否合法,是则将所述第一状态设置为等待接收第五命
令状态,返回S2,否则报错,返回S2;
S14:所述当前安全域验证所述第一状态是否为等待接收第五命令,是
则执行S15,否则报错,返回S2;
S15:所述当前安全域执行个人化操作,执行完成后返回S2。
实施例2
本发明实施例2提供了一种java卡上安全域的实现方法,该方法以主安
全域接收到install for load命令、load 命令、install for
install命令、install for personalization命令及store data命
令为例,具体处理过程如下:
步骤101:卡片上电;
步骤102:卡片的当前安全域接收到上位机发送的APDU命令,并判断命
令类型;
当前安全域可以为主安全域或用户安全域;可以为卡片上电后缺省的
安全域应用也可以为通过select命令选择的安全域应用,特别地,当
卡片上电后缺
省的应用为非安全域应用或select命令选择应用的为非安全域应用时
,则该步骤前还包括通过缺省或选择的非安全域应用调用所关联的安
全域得到当前安全域。优先地,在本实施例中,当前安全域以缺省的
或者通过select命令选择的主安全域为例。
优选地,在本实施例中,所述卡片的当前安全域接收到上位机发送的
APDU命令后还包括,对收到的命令进行解析得到命令的命令头及数据
域的步骤,
根据所述APDU命令类型,执行相应步骤,若收到的APDU命令为第一命
令则执行步骤103-1至步骤103-4,若为第二命令则执行步骤104-1至步
骤104-6;若为第三命令则执行步骤105-1至步骤105-5,若为第四命令
则执行步骤106-1至步骤106-3,若为第五命令则执行步骤107-1至步骤
107-4;其他类型的命令不在本发明考虑范围内。
具体地,在本实施例中,所述第一命令为install for load(准备下
载)命令,所述第二命令为load(下载)命令,所述第三命令为insta
ll for install(安装)命令,所述第四命令为install for pe
rsonalization(应用个人化)命令,所述第五命令为store data(
传送数据)命令。当前安全域判断命令类型具体为:若命令的高位端
两个字节为“80E8”或“84E8”则命令为第二命令;若命令的高位端
两个字节为“80E2”或“84E2”,则命令为第五命令;若高位端第一
个字节为“80”或“84”,第二个字节为“E6”且第四个字节为“00
”,则:当第三个字节低位端6个比特为二进制数“100000”时,APD
U命令为第四命令;若第三字节低位端三个比特为“100”且第三第四
比特位“00”时,APDU命令为第三命令;若第三字节低位端6个比特为
二进制数“000010”时,命令为第一命令。
步骤103-1:卡片的当前安全域解析命令的数据域字段,得到装载文件
的AID、
装载文件所关联安全域的AID、装载文件hash值及装载token;
优选地,在本实施例中,卡片按解析“LV”格式数据方式,对APDU命
令的数据域进行解析,其中L(长度)占一个字节,V(内容)的长度
等于L(长度)所占的一个字节数据的值。所述按解析“LV”格式数据
方式解析具体为,根据命令的数据域字段的第一个字节的值得到所述
装载文件的AID所占的字节数,相应取第一字节之后后续字节数上的数
据得到所述装载文件的AID,再根据后续一个字节数据的值,相应取之
后相应字节数上的数据得到所述装载文件所关联安全域的AID,按此方
式,对后续字节数据进行解析得到装载文件数据块的hash值及装载to
ken。
步骤103-2:验证所述装载文件AID是否与卡片中存在的包或应用或应
用实例的AID(应用标识符)重复,是则报错,返回步骤102,否则执
行步骤103-3;
优选地,在本实施例中卡片中存在的包或应用或应用实例的AID均记录
在注册表中,所述注册表中数据为TLV格式。
步骤103-3:验证所述装载文件所关联安全域的AID对应的安全域是否
存在且处于个人化(personalized)状态,是则执行步骤103-4,否则
报错;
优选地,在本实施例中,各个安全域对应有生命周期状态,各个安全
域的生命周期状态也包含在所述注册表中,用一个字节表示,判断安
全域的生命周期状态是否为个人化状态,即判断该安全域生命周期状
态是否为00001111,是则为个人化状态,否则不为个人化状态。
步骤103-4:当前安全域验证所述装载token是否合法,是则将第一状
态设置为准备下载状态,返回步骤102,否则报错;
主安全域验证装载token是否合法具体为:主安全域调用主安全域密钥
对所述包含装载文件数据块hash值的install for load命令包含的
内容进行签名
计算,并验证签名结果与所述装载token是否一致,是则认为合法,否
则不合法。具体地,在本实施例中,主安全域用主安全域密钥对所述
命令的第三、第四字节数据和/或装载文件的AID和/或装载文件所关联
安全域的AID及装载文件数据块的hash值进行签名计算得到签名结果。
优选地,在本实施例中,该步骤后还包括卡片将与所述装载文件的相
关信息写入注册表中,相关信息包括所述装载文件AID及所关联安全域
AID。
步骤104-1:验证当前load命令的第四字节是否为“00”,是则执行步
骤104-2,否则执行步骤104-4;
优选地,在本实施例中,验证当前load命令的第四字节的值是否为0,
若是,则当前load命令为第一条load命令,若不是,则当前load命令
不是第一条load命令。
步骤104-2:将当前load命令的第四字节的值赋值给第二状态,并对l
oad命令的数据域字段进行解析,得到DAP(数据验证模式,Data Au
thentication Pattern)块及当前load命令包含的装载文件数据块,
将解析当前load命令得到的装载文件数据块存储在第一存储区;
优选地,在本实施例中,卡片对load命令的数据域字段按解析“TLV格
式”数据方式进行解析,得到全部的DAP块及第一部分装载文件数据块
,具体地,在本实施例中DAP的Tag(标签)为0xE2,卡片在当前load命
令的数据域字段查找所有值为0xE2的字节,根据找到的字节之后指示
L(长度)的字节的值,取L之后相应字节数上的数据即得到DAP块。按
照上述方式查找第一部分装载文件数据块的Tag(标签)0xC4得到第一
部分装载文件数据块。
在本实施例中,该步骤104-2前还包括:当前安全域验证第一状态是否
为准备下载状态,是则继续,否则报错返回步骤102。
步骤104-3:调用相应的安全域分别验证相应的DAP块,若所有的DAP块
均验证成功,则执行步骤104-5,否则报错,停止装载;
优选地,在本实施例中,每块DAP验证实现方法具体为:
A:卡片按照解析“TLV格式”数据方式解析DAP块,得到该DAP块所关联
的安全域AID及该DAP相应的装载文件数据块签名;
其中,所关联的安全域AID的Tag为0x4F,装载文件数据块签名的Tag为
0xC3。
B:根据关联安全域AID调用所关联安全域的密钥对步骤1062-1中得到
的装载文件数据块的hash值做签名运算,验证得到的签名结果与该DA
P相应的装载文件数据块签名是否一致,若一致则合法,否则不合法。
在本实施例中,各个DAP块所关联的安全域根据其支持的算法做签名运
算,算法可以为DES或RSA算法,具体实现方式为:根据该DAP块所关联
安全域的AID找到并获取该安全域的接口(FTSecurityDomain),调用
该接口中的方法verifyDAP(…)来实现。
步骤104-4:获取当前load命令的第四字节 值是否与第二状态相符,
是则获取当前load命令的数据域得到当前load命令包含的装载文件数
据块并存储在所述第一存储区,执行步骤104-5,否则报错;
优选地,在本实施例中,验证第四字节值是否与第二状态相符即验证
第四字节值是否比第二状态当前值大1,是则相符,否则不相符。
步骤104-5:用当前load命令的第四字节的值更新第二状态的值,并根
据从当前load命令中解析得到的装载文件数据块计算并更新验证hash
值;
优选地,在本实施例中,验证hash值为根据之前所有load命令中解析
得到的装载文件数据块得到的hash值,特别地,当前load命令为最后
一条load命
令时,则更新后的验证hash值为接收到的整个装载文件的验证hash值
。
步骤104-6:验证当前load命令第三字节的最高位是否为1,是则将所
述第一状态及第二状态初始化,执行步骤104-7,否则返回步骤102;
优选地,在本实施例中,所述当前load命令的第三字节的最高比特位
为1时,当前load命令为最后一条load命令,若不是1,则当前load命
令不是最后一条load命令。
步骤104-7:验证验证hash值与所述装载文件数据块的hash值是否一致
,是则装载成功,否则报错,返回步骤102;
优选地,在本步骤中,装载成功后,所述第一存储区中的数据即下载
得到的装载文件,该装置文件的AID即步骤103-1中得到的装载文件的
AID。报错后还包括清空所述第一存储区。
优选地,在本实施例中,所述验证哈希值还可以在本步骤中得到,具
体为:
将步骤104-5的内容替换为步骤104-5、,相应的将步骤104-7替换为10
4-7、;
步骤104-5、:用当前load命令的第四字节的值更新第二状态的值;
步骤104-7、:对所述第一存储区中的数据进行哈希计算得到验证hash
值,验证所述验证hash值是否与所述装载文件的hash值一致,是则装
载成功,否则报错,返回步骤102;
当若所述APDU令为安装应用的命令即install for install命令,则
执行步骤105-1至步骤105-5:
步骤105-1:卡片解析接收到install for install命令,得到待安
装应用对应的装载文件AID、第一可执行模块AID、待安装应用AID、待
安装应用的应用权限、安装参数及安装token;
优选地,在本实施例中,卡片解析所述install for install命令具
体为:
获取命令的数据域,对命令数据域按解析“LV格式”数据方式解析,
根据数据域第一个字节的值取后续相应字节数上的数据得到所述待安
装应用对应的装载文件AID,再根据后续一个字节的值取其后相应字节
数上的数据得到所述第一可执行模块AID,相同方式得到所述待安装应
用AID、待安装应用权限、安装参数及所述安装token。
优选地,在本实施例中,所述待安装应用的应用权限为一个字节,当
表示应用权限的字节的第一比特即最高位为0时,则对应的应用为非安
全域应用;最高位为1时,该应用为安全域;第一及第二比特均为1时
对应的安全域支持DAP验证;第一及第二比特均为1时,该应用为具有
代理权限的安全域。
步骤105-2:判断待安装应用对应的装载文件是否已下载至卡片中,否
则返回错误码,停止安装,是则执行步骤105-3;
优选地,在本实施例中,判断所述待安装应用对应的装载文件是否已
下载至卡片中具体为:判断所述注册表中是否存在所述待安装应用对
应的装载文件AID。
步骤105-3:判断所述待安装应用对应的装载文件中是否包含所述第一
可执行模块,是则继续,否则报错,停止安装;
具体地,根据所述第一可执行模块AID判断所述待安装应用对应的装载
文件中是否包含所述第一可执行模块。
步骤105-4:检查所述待安装应用是否已被安装过,是则报错,否则执
行步骤105-5;
具体地,在本实施例中,判断所述待安装应用是否已被安装过具体为
:判断注册表中是否包含所述待安装应用AID。
步骤105-5:验证所述安装token是否合法,是则继续,否则报错,返
回步
骤102;
具体地,在本实施例中,主安全域调用主安全密钥对命令中的全部或
部分内容进行签名计算,判断签名结果是否与所述安装token一致,是
则所述安装token合法,否则不合法。优选地,在本实施例中,
步骤105-6:卡片调用所述待应用的安装方法完成应用的安装过程,并
将所述待安装应用的相关信息写入所述注册表。
具体地,在本实施例中,所述待安装应用的相关信息包括该应用的AI
D和所述待安装应用对应的装载文件AID及所述待安装应用的应用权限
。所述接收到的安装应用的命令中还可以包含选择选项,则将所述安
装的应用设置于可选择状态;
优选地,所述接收到的install for install命令提供的安装参数中
还可以存在将所述安装的应用设置于缺省选择应用,则将所述安装的
应用设置于缺省选择状态,且卡片复位后所述设置生效。
若为install for personalization(应用个人化)命令则执行步骤
106-1至步骤106-3 :
步骤106-1:对所述应用个人化命令进行解析,得到待个人化应用的A
ID,检查所述待个人化的应用所关联的安全域是否为当前安全域,是
则执行步骤106-2,否则报错;
在本实施例中,所述待个人化的应用可以为用户安全域,用户安全域
与主安全域相关联。获取所述应用个人化命令的数据域,根据其数据
域的第三个字节的值取后续相应字节数上的数据得到所述待个人化应
用的AID;卡片从注册表中查找所述待个人化的应用所关联的安全域。
步骤106-2:卡片检查所述待个人化的应用是否为个人化状态,是则返
回错
误码,停止执行,否则执行步骤106-3;
优选地,在本实施例中,应用被下载时初始的生命周期状态为可选择
状态,具体地,在本实施例中,应用的生命周期状态为二进制000001
11时为可选择状态,为00001111时为个人化状态,验证待个人化的应
用是否已被个人化即验证该用户安全域的生命周期状态的值是否为00
001111。
步骤106-3:卡片检查所述待个人化的应用是否被锁定,是则报错,否
则将第一状态设置为等待接收store data命令状态,返回步骤102;
判断所述待个人化的应用是否被锁定即判断所述待个人化应用的生命
周期状态的最高位及最低两位是否均为0,是则被锁定,否则不是被锁
定。
当若接收到的APDU命令为store data命令,则执行步骤107-1至步骤
107-3:
步骤107-1:卡片判断第一状态是否为等待接受store data命令状态
,是则执行步骤107-2,否则返回错误码,停止执行;
步骤107-2:根据所述待个人化应用的AID调用该应用,执行进程数据
方法,完成应用个人化。
在本实施例中,卡片执行接口Application中的进程数据方法process
data(),传入所述进程数据方法中的参数,包括个人化数据,如密
钥及持卡人信息,以所述待安装的应用为用户安全域为例,传入所述
进程数据方法中的参数包括:是否支持DES形式的DAP验证;用于DAP验
证的DES密钥信息(即密钥版本号及密钥索引);是否支持RSA形式的
DAP验证;用于DAP验证的RSA密钥信息(即密钥版本号及密钥索引);
用户根据自身需求传入的参数,如持卡者信息。
实施例3
本发明实施例3提供了又一种java卡上安全域的实现方法,该方法以用
户
安全域接收到install for load命令、load 命令、install for
install命令、install for personalization命令及store dat
a命令为例,方法具体如下:
步骤201:卡片上电;
步骤202:卡片中的当前安全域接收到上位机发送的APDU命令,判断命
令类型,若命令类型为预设类型命令则执行步骤204-206,否则执行步
骤203;
优选地,所述当前安全域为用户安全域,在该步骤之前还可以包括:
所述卡片接收到上位机发送的select命令选择所述用户安全域为当前
安全域的步骤。在本实施例中所述预设类型命令包括install for
load命令、及install for install命令。
优选地,在本实施例中,以接收到APDU命令的当前安全域为用户安全
域为例。
步骤203:用户安全域处理接收到的命令,并在处理结束后返回步骤2
02;
特别地,在本实施例中,当所述命令为install for personalizat
ion(应用个人化)命令时,本步骤具体为:
当前用户安全域验证待个人化的应用是否与当前用户安全域相关联,
是则调用待个人化应用,执行数据进程方法,完成个人化,则继续,
否则报错;
步骤204:卡片判断当前安全域是否有代理权限,是则执行步骤205,
否则报错,返回步骤202;
在本实施例中,判断当前安全域是否被主安全域授予了代理权限具体
为:判断该用户安全域的应用权限第一个及第三个比特是否均为1,是
则被授予了代理权限,否则没有代理权限;
步骤205:当前安全域调用主安全域,当前安全域切换为主安全域;
优选地,在本实施例中,用户安全域在安装到卡片的过程中时,关联
了主
安全域,当前安全域为用户安全域,通过执行FTDelegatedService.d
elegatedManageService(APDU apdu)方法,调用主安全域,同时当
前安全域切换为主安全域。
步骤206:当前安全域处理预设类型的APUD命令,并在处理结束后返回
步骤202;
主安全域处理装载命令过程同实施例1所述,在此不再赘述。优选地,
在本实施例中,主安全域装载或删除命令成功执行之后还包括生成收
条返回给上位机的步骤。
卡片中非安全域应用均在安装时建立了相关联的安全域,因此当当前
安全域为非安全域应用时,则当前安全域通过接口GPSystem.getSecu
reChannel()调用相关联的安全域,若相关联的安全域为主安全域,则
当前安全域接收到相关命令时调用主安全域来处理,具体参见本发明
实施例1,若相关联的安全域为用户安全域,则当前安全域调用用户安
全域来处理接收到的APDU命令,具体参见实施例2中步骤。
实施例4
参见图4,本发明实施例4提供了一种java卡上安全域的实现装置,包
括:
接收模块3001:用于接收上位机发送的命令;
第一检测模块3002:用于当所述接收模块3001接收到APDU命令时,检
测所述APDU命令的类型,若为第一命令,则第一解析模块3003工作;
若为第二命令,则第二解析模块3004工作;若为第三命令,则第一解
析验证模块3005工作;若为第四命令,则第二解析验证模块3006工作
;若为第五命令,则验证
操作模块3007工作;
所述第一解析模块3003,用于按照对所述第一命令进行解析得到命令
头和数据域,按照第二预设方式对所述第一命令的数据域进行解析得
到装载文件标识符、装载文件所关联的安全域标识符、装载文件哈希
值和装载令牌;
第一写入模块3008,用于将所述装载文件标识符,装载文件所关联的
安全域标识符写入到注册表中;
第一验证模块3009,用于根据装载文件哈希值和装载令牌验证所述第
一命令是否合法,是则第一设置模块3010工作;
所述第一设置模块3010,用于将第一状态设为等待接收第二命令;
所述第二解析模块3004,包括第一解析单元30041、第二解析单元300
42和第三解析单元30043,所述第一解析单元30041用于对所述第二命
令进行解析得到命令头和数据域;所述第二解析单元30042用于按照第
一预设方式对所述第二命令的数据域进行解析并存储解析结果得到验
证数据块及第一装载文件数据块;所述第三解析单元30043用于按照第
一预设方式对所述命令的数据域进行解析得到第二装载文件数据块;
第一判断模块3011,用于获取所述第二命令的第四字节上的值并判断
其是否为预设标识,是第二判断模块工作3012,否则第三判断模块30
13工作;
所述第二判断模块3012,用于判断所述第一状态时是否为等待接收第
二命令,是则第二解析单元30042工作,否则初始化模块3014工作;
所述初始化模块3014,用于初始化所述第一状态和第二状态;
第二验证模块3015,用于根据所述验证数据块验证所述第二命令是否
合法,如合法则更新模块3017工作,如不合法则所述初始化模块3014
和清空模块
3016工作;
所述清空模块3016用于清空所述第一存储区;
所述第三判断模块3013,用于判断所述命令的第四字节上的值与所述
第二状态的值是否相符,是则所述第三解析单元工作30043,否则所述
初始化模块3014工作;
所述更新模块3017,用于用所述命令的第四字节上的值更新第二状态
的值;
第四判断模块3018,用于获取所述命令的第三字节上的数据,并判断
所述命令的第三字节上的数据的最高位是否为1,是则计算判断模块3
0119工作;
所述计算判断模块3019,用于对所述第一存储区中的数据进行哈希计
算得到验证哈希值,判断所述验证哈希值与所述装载文件哈希值是否
一致,是则所述初始化模块3014工作,否则报错模块3020和所述清空
模块30116工作;
所述报错模块3020用于报错;
所述第一解析验证模块3005,用于对所述第三命令进行解析,并根据
所述解析得到的数据验证所述第三命令是否合法,是则安装模块3021
工作,否则所述报错模块3020工作;
所述安装模块3021,用于调用安装方法对所述第一存储区的装载文件
数据进行安装;
所述第二解析验证3006模块,用于对所述第四命令进行解析,并根据
解析结果验证所述第四命令是否合法,是则第二设置模块3022工作,
否则所述报错模块3020工作;
所述第二设置模块3022,用于将所述第一状态设置为等待接收第五命
令状态;
所述验证操作模块3007,用于验证所述第一状态是否为等待接收第五
命令,是则执行个人化操作,否则所述报错模块3020工作。
所述第一检测模块3002,具体用于检测所述APDU命令的高位端字节数
据,若高位端两个字节为80E8或84E8,则所述APDU命令为第二命令;
若高位端两个字节为80E2或84E2,则所述APDU命令为第五命令;若高
位端两个字节为80E6或84E6,且第四个字节为00,则当第三个字节低
位端六个比特位的数据为100000,所述APDU命令为第四命令;当第三
字节的第三第四比特位的数据为00且第六第七第八比特位的数据为10
0时,APDU命令为第三命令;若第三字节低位端六个比特位的数据为0
00010时,所述APDU命令为令第一命令。
所述第一验证模块3009具体包括:
第一判断单元30091,用于判断所述装载文件标识符是否与所述卡片中
存在的包或应用或应用实例的应用标识符重复,是则所述报错模块30
20工作,否则第二判断单元工作30092;
所述第二判断单元30092,用于判断是否存在与所述装载文件所关联的
安全域标识符对应的安全域,如存在则第三判断单元30093工作,否则
所述报错模块3020工作;
第三判断单元30093,用于判断所述对应的安全域是否处于个人化状态
,是则验证单元30094工作,否则所述报错模块3020工作;
所述验证单元30094,用于根据装载文件哈希值和装载令牌验证所述第
一命令是否合法,是则所述第一设置模块3010工作,否则报错模块30
20工作。
所述验证单元30094具体用于根据所述装载文件所关联安全域标识符获
取主安全域密钥,使用所述主安全域密钥对预定数据进行签名计算,
并判断签名
结果是否与所述装载令牌中的签名值一致。
所述预定数据包括:所述第一命令的第三、第四字节数据和/或装载文
件标识符和/或装载文件所关联的安全域标识符及装载文件哈希值。
所述第二验证模块3015具体包括:
第四解析单元30151,用于按照所述第一预设方式对所述验证数据块进
行解析得到验证数据块所关联的安全域标识符和对应的装载文件数据
块签名值;
签名单元30152,用于根据所述验证数据块所关联的安全域标识符获取
安全域密钥,并使用所述安全域密钥对所述第一命令中解析得到的装
载文件数据块签名值进行签名;
第四判断单元30153,用于判断所述签名单元30152中的签名结果是否
与所述装载文件数据块签名值一致,是则所述第二命令合法,否则所
述第二命令不合法。
所述第一解析验证模块3005具体包括:
第五解析单元30051,用于对所述第三命令进行解析得到命令头和数据
域,按照所述第二预设方式对所述第三命令的数据域进行解析得到待
安装应用对应的装载文件标识符、第一可执行模块标识符、待安装应
用标识符、待安装应用的权限、安装参数和安装令牌;
第五判断单元30052,用于判断卡片中是否存在与所述待安装应用对应
的装载文件标识符对应的装载文件,是则第六判断单元30053工作,否
则报所述错模块工作;
所述第五判断单元30052具体用于判断所述注册表中是否存所述待安装
应用对应的装载文件标识符。
所述第六判断单元30053,用于判断所述卡片中的装载文件中是否包含
有与所述第一可执行模块标识符对应的模块,是则第七判断单元3005
4工作,否则所述报错模块3020工作;
所述第七判断单元30054,用于根据所述待安装应用标识符判断对应的
待安装应用是否已被安装过,是则所述报错模块3020工作,否则所述
安装模块3021工作;
所述第七判断单元30054具体用于判断所述注册表中是否存在所述待安
装应用标识符,是则待安装应用已被安装,否则未被安装。
所述安装模块3021具体用于根据待安装应用的权限、安装参数和安装
令牌调用相应的安装方法,对所述第一存储区的装载文件数据进行安
装,并将安装信息写入所述注册表。
所述第二解析验证模块3006具体包括:
第六解析单元30061,用于对所述第四命令进行解析得到命令头和数据
域,对所述第四命令的数据域进行解析得到待个人化应用标识符;
第八判断单元30062,用于判断所述待个人化应用标识符所关联的安全
域是否为当前安全域,是则第九判断单元30063工作,否则所述初始化
模块3014和报错模块3020工作;
所述第九判断单元30063,用于判断与所述待个人化应用标识符对应的
待个人化应用是否为个人化状态,是则所述报错模块3020工作,否则
检测单元30064工作;
检查单元30064,用于检查所述待个人化的应用是否被锁定,是则所述
报错模块3022工作,否则所述第二设置模块工作。
所述检查单元30064具体用于判断所述待个人化应用的生命周期状态值
的最高位及最低位是否均为0,是则被锁定,否则未被锁定。
所述第八判断单元30062具体包括:
查找子单元300621,用于从注册表中查找所述待个人化应用标识符所
关联的安全域,如找到则判断子单元300622工作或所述第九判断单元
30063工作,如未找到则所述初始化模块3014和报错模块3020工作;
所述判断子单元300622,用于判断所属找到的安全域是否为当前安全
域,是则所述第九判断单元30063工作,否则所述初始化模块3014和报
错模块3022工作。
所述第九判断单元30063具体用于判断所述所关联的安全域的生命周期
状态的值是否为00001111,是则所述报错模块3022工作,否则所述检
查单元30064工作。
所述接收模块3001包括第一接收单元30011和第二接收单元30012,所
述装置还包括第二检测模块3023、第三检测模块3024、第五判断模块
3025、操作处理模块3026、调用模块3027;
所述第二检测模块3023用于检测当前安全域的类型,如为主安全域则
所述第一接收单元30011工作,如为用户安全域,则所述第二接收单元
30012工作;
所述第一接收单元30011和第二接收单元30012均用于接收上位机发送
的命令;
所述第二检测模块3023用于检测所述第一接收单元3011接收到的APDU
命令;
所述第三检测模块3024用于检测所述第二接收单元30012接收到的APD
U
命令的类型,若为预设类型命令则第一检测模块3002开始工作,否则
所述操作处理模块3026工作;
所述操作处理模块3026用于根据接收到的命令进行操作;
所述第五判断模块3025用于判断自身是否被主安全域授予了代理权限
,是则所述调用模块工作,否则所述报错模块3020工作;
所述第五判断模块3025具体用于判断自身应用权限的第一比特位和第
三个比特位的值是否均为1,是则被授予了代理权限,否则未被授予代
理权限。
所述调用模块3027用于调用主安全域,所述主安全域处理预设类型的
APUD命令。