CN102521094A - 一种对java卡进行初始化的方法和java卡 - Google Patents

一种对java卡进行初始化的方法和java卡 Download PDF

Info

Publication number
CN102521094A
CN102521094A CN2011103856759A CN201110385675A CN102521094A CN 102521094 A CN102521094 A CN 102521094A CN 2011103856759 A CN2011103856759 A CN 2011103856759A CN 201110385675 A CN201110385675 A CN 201110385675A CN 102521094 A CN102521094 A CN 102521094A
Authority
CN
China
Prior art keywords
order
java card
zone bit
value
card
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011103856759A
Other languages
English (en)
Other versions
CN102521094B (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN2011103856759A priority Critical patent/CN102521094B/zh
Publication of CN102521094A publication Critical patent/CN102521094A/zh
Application granted granted Critical
Publication of CN102521094B publication Critical patent/CN102521094B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开一种对java卡进行初始化的方法和java卡,该方法包括以下步骤:java卡上电,接收命令,对接收到的命令进行判断,针对不同的命令执行不同的操作,如果所述接收到的命令为第一APDU命令,则判断所述生命周期标志位的取值是否为所述预设值,如果为所述生命周期标志位的取值不是所述预设值,所述java卡返回错误码;否则,所述java卡从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中。本发明通过APDU命令将运行环境数据写入到java卡的NVM中,能够减少java卡的初始化时间,提高java卡的生产效率。

Description

一种对java卡进行初始化的方法和java卡
技术领域
本发明涉及智能卡领域,特别涉及一种对java卡进行初始化的方法和java卡。
背景技术
现有技术中,对掩膜后首次运行的java卡,java虚拟机需要大量时间进行初始化,初始化时间已经远超ISO7816-3所规定的ATR发送时间,导致必须使用专用读卡器才能完成java卡的首次运行。这将严重影响java卡的生产效率,尤其是发卡量数量级以万为单位的情况下,问题更显突出。
发明内容
本发明提供了一种对java卡进行初始化的方法和java卡,以解决上述现有技术中存在的问题。
本发明提供了一种对java卡进行初始化的方法,包括以下步骤:
①、java卡上电;
②、所述java卡接收命令,对接收到的命令进行判断,如果所述接收到的命令为激活命令,则执行步骤③;如果所述接收到的命令为切换命令,则执行步骤④;如果所述接收到的命令为第一应用协议数据单元APDU命令,则执行步骤⑤;
③、所述java卡判断自身的激活成功标志位是否已被置位,如果所述激活成功标志位未被置位,所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值,并返回步骤②;否则,所述java卡返回错误码,并返回步骤②;
④、所述java卡判断所述生命周期标志位的取值是否为所述第一预设值,如果为所述生命周期标志位的取值为所述第一预设值,所述java卡将所述生命周期标志位的取值修改为所述第二预设值,并返回步骤②;否则,所述java卡返回错误码,并返回步骤②;
⑤、所述java卡判断所述生命周期标志位的取值是否为所述第二预设值,如果为所述生命周期标志位的取值不是所述第二预设值,所述java卡返回错误码,并返回步骤②;否则,所述java卡从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,并返回步骤②,所述运行环境数据为运行java卡虚拟机所必需的数据。
本发明还提供了一种对java卡进行初始化的方法,包括以下步骤:
①、java卡上电;
②、所述java卡检查自身的生命周期标志位的取值以及激活成功标志位是否被置位,如果所述激活成功标志位未被置位,则执行步骤③;如果所述生命周期标志位的取值为第一预设值,则执行步骤⑥;如果所述生命周期标志位的取值为第二预设值,则执行步骤⑧;
③、所述java卡对接收到的命令进行判断,如果所述接收到的命令为激活命令,则执行步骤④;否则,执行步骤⑤;
④、所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值,并返回步骤③;
⑤、所述java卡返回错误码,并返回步骤③;
⑥、所述java卡对接收到的命令进行判断,如果所述接收到的命令为切换命令,则执行步骤⑦;
⑦、所述java卡将所述生命周期标志位的取值修改为第二预设值,并返回步骤⑥;
⑧、所述java卡对接收到的命令进行判断,如果所述接收到的命令为第一应用协议数据单元APDU命令,则执行步骤⑨;
⑨、所述java卡从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,并返回步骤⑧,所述运行环境数据为运行java卡虚拟机所必需的数据。
本发明还提供了一种java卡,包括:
接收模块,用于接收命令;
第一判断模块,用于对所述接收模块接收到的命令进行判断;
第二判断模块,用于在所述第一判断模块判断所述接收到的命令为激活命令时,判断所述java卡的激活成功标志位是否已被置位;在所述第一判断模块判断所述接收到的命令为切换命令时,判断所述生命周期标志位的取值是否为所述第一预设值;在所述第一判断模块判断接收到的命令为第一APDU命令时,判断所述生命周期标志位的取值是否为所述第二预设值;
第一设置模块,用于在所述第二判断模块判断所述激活成功标志位未被置位时,在所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块,用于在所述第二判断模块判断所述生命周期标志位的取值为所述第一预设值时,将所述生命周期标志位的取值修改为所述第二预设值;
处理模块,用于在所述第二判断模块判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块,用于在所述第二判断模块判断所述激活成功标志位已被置位时,返回错误码;在所述第二判断模块判断所述生命周期标志位的取值不是所述第一预设值时,返回错误码;在所述第二判断模块判断所述生命周期标志位的取值不是所述第二预设值时,返回错误码。
本发明还提供了一种java卡,包括:
检查模块,用于检查所述java卡的生命周期标志位的取值以及激活成功标志位是否被置位;
接收模块,用于接收命令;
第一判断模块,用于对所述接收模块接收到的命令进行判断;
第一设置模块,用于在所述检查模块检查到所述激活成功标志位未被置位,且所述第一判断模块判断接收到的命令为激活命令时,在所述java卡被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块,用于在所述检查模块检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块判断所述接收到的命令为切换命令时,将所述生命周期标志位的取值修改为第二预设值;
处理模块,用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第一应用协议数据单元APDU命令时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块,用于在所述检查模块检查到所述激活成功标志位未被置位,且所述第一判断模块判断接收到的命令不为激活命令时,返回错误码。
本发明通过APDU命令将运行环境数据写入到java卡的NVM中,进而实现对java卡的初始化,能够减少java卡的初始化时间,提高java卡的生产效率。
附图说明
图1为本发明实施例一提供的一种对java卡进行初始化的方法流程图;
图2为开发软件向卡片发送脚本文件的过程的流程图;
图3为本发明实施例二提供的另一种对java卡进行初始化的方法流程图;
图4为本发明实施例三提供的一种java卡的结构图;
图5为本发明实施例四提供的另一种java卡的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
卡片生命周期的定义:
1)非激活状态(Non-Active):掩膜出厂的卡片所处的状态,即整个COS首次运行所处的状态,此时卡片只处理激活命令,如在预设的激活次数内未激活成功,卡片将作废;
2)激活状态(Active):卡片处于非激活状态时,接收到正确的激活命令,经过一系列的认证后,不再处理重复接收到的激活命令,同时可以处理其它命令。此状态又可以分为:
a)超级管理员状态(Administrator):卡片处于此状态时,可以处理除激活命令外的其它命令,包括卡片参数设定、下载器选择、切换至虚拟机状态等。
b)下载器状态(Loader):卡片处于超级管理员状态时,接收到下载器切换命令后,将处于此状态。卡片处于下载器状态时,只处理与下载相关的命令序列,即NVM镜像下载命令序列及切换回超级管理员状态命令。
c)Java虚拟机状态(JCVM):卡片处于超级管理员状态时,接收到虚拟机切换命令,将处于此状态。当卡片处于JCVM状态时,卡片将作为java卡虚拟机正常运行。实施例一
本发明实施例一提供了一种对java卡进行初始化的方法。该方法中,利用开发软件从仿真卡片中获取镜像,对镜像进行处理后再应用到未初始化的java卡中。
在本实施例中,在利用开发软件对未初始化的java卡进行初始化之前,首先进行以下操作:
将掩膜时写入java卡的ROM中的二进制文件下载至仿真器的ROM中,仿真器运行所述二级制文件,得到运行环境数据,所述运行环境数据存储在所述仿真器的NVM中。所述仿真器则为仿真卡片,仿真卡片首次上电后处于未激活状态。从所述仿真卡片中获取镜像的过程如下:
步骤A:仿真卡片插接到读卡器中,首次上电;
步骤B:开发软件激活仿真卡片;
在本实施例中,仿真卡片激活后处于超级管理员状态;
步骤C:开发软件发送命令使激活后的仿真卡片进入虚拟机状态,并复位仿真卡片;
在本实施例中,开发软件通过读卡器向仿真卡片发送切换状态命令;
步骤D:暂停仿真卡片的运行,并使用仿真卡片工具将仿真卡片的NVM中存储的内容转存至一文件中;
所述NVM中存储的内容即为所述运行环境数据;
步骤E:对所述文件加密计算,得到最终获取的镜像文件。
对所述获取的镜像文件进行处理的过程如下:
步骤a:解密所述镜像文件;
步骤b:获取所述解密镜像文件得到的明文中的有效数据;
在本实施例中,仿真卡片处于虚拟机状态,仿真卡片的NVM中除了所述运行环境数据之外,其他信息均为无效数据,所以只从解密镜像文件得到的明文数据中提取运行环境数据;
步骤c:对所述有效数据加密计算,得到加密的APDU(application protocoldata unit,应用协议数据单元)数据域;
在本实施例中,使用预先设置的数据转换密钥(Data Converter Key,以下简称DCK)对所述有效数据加密计算;
优选地,所述DCK密钥为采用DES算法的16字节密钥;
步骤d:生成完整的APDU命令,并将所述生成的APDU命令以脚本的形式存放于脚本文件中;
APDU命令的格式如表1所示:
表1APDU命令格式表
Figure BDA0000113414100000061
所述脚本文件是由以上加密的完整的APDU命令构成的命令序列。
当所述未初始化的java卡插接到读卡器中时,参见图1,卡片进行的操作如下:
步骤101:卡片上电;
步骤102:卡片等待接收命令;
步骤103:卡片对所述接收到的命令进行判断,并做相应处理;
在本实施例中,卡片根据接收到的命令执行不同的操作,具体如下:
情况一:
步骤11-1:若所述命令是激活命令,卡片判断卡片的当前状态是否为激活状态,是则卡片返回错误码,返回步骤102,否则执行步骤11-2;
步骤11-2:卡片判断是否激活成功,是则执行步骤11-3,否则执行步骤11-4;
在本实施例中,当开发软件被启动时,开发软件激活卡片,使卡片处于激活状态下的超级管理员状态;
步骤11-3:卡片置位激活成功标识,并修改卡片的生命周期标志位的取值为第一预设值;
具体地,在本实施例中,所述第一预设值为超级管理员状态时卡片的生命周期标志位的取值,例如:01;
相应地,当卡片被复位后,所述第一预设值有效;
步骤11-4:卡片将记录激活次数的计数值减1;
优选地,在本实施例中,预先设置所述记录激活次数的计数值的初始值为三次;
步骤11-5:卡片判断所述记录激活次数的计数值是否为0,是则卡片自毁,否则返回步骤102;
情况二:
步骤12-1:若所述命令为验证管理员pin(Personal Identification Number,个人识别号码)码的命令,卡片判断卡片的当前状态是否是超级管理员状态,是则执行步骤12-2,否则卡片返回错误码,返回步骤102;
步骤12-2:卡片对接收到的管理员pin码执行验证操作,验证成功则执行步骤12-5,验证失败则执行步骤12-3;
具体地,在本实施例中,所述管理员pin码是携带在所述接收到的验证管理员pin码的命令中的;
步骤12-3:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤12-4:卡片判断所述记录验证次数的计数值是否为0,是则卡片自毁,返回步骤102;
步骤12-5:卡片置pin码验证通过标志位,返回步骤102;
情况三:
步骤13-1:若所述命令为设置SDEK密钥、SMACK密钥的命令,卡片判断当前状态是否为超级管理员状态,是则执行步骤13-2,否则卡片返回错误码,返回步骤102;
步骤13-2:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤13-3,否则执行步骤13-4;
步骤13-3:卡片设置SDEK密钥和SMACK密钥并保存,返回步骤102;
在本实施例中,开发软件设置下载器所使用的各种密钥,包括APDU数据域解密静态密钥(Static Data Encrypt Key,以下简称SDEK)和MAC验证静态密钥(static MAC verify Key,以下简称SMACK);
优选地,在本实施例中,所述SDEK密钥和SMACK密钥均为采用DES算法的16字节密钥;
相应地,预先约定所述接收到的设置SDEK密钥和SMACK密钥命令的前16字节为设置SDEK密钥的内容,后16字节为设置SMACK密钥的内容;
开发软件也可以分别向卡片发送设置SEDK密钥和SMACK密钥的命令,即,若卡片接收到设置SDEK密钥的命令,设置SDEK密钥;若卡片接收到设置SMACK密钥的命令,设置SMACK密钥;
卡片采用同样的方法设置SDEK密钥和SMACK密钥,与开发软件设置的SDEK密钥和SMACK密钥相同;
步骤13-4:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤13-5:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤102;
情况四:
步骤14-1:若所述命令为切换至下载器状态的命令,卡片判断当前状态是否为超级管理员状态,是则执行步骤14-2,否则卡片返回错误码,返回步骤102;
步骤14-2:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤14-3,否则执行步骤14-4;
步骤14-3:卡片修改卡片的生命周期标志位的取值为第二预设值,返回步骤102;
具体地,在本实施例中,所述第二预设值为下载器状态时卡片的生命周期标志位的取值,例如:02;
相应地,当卡片被复位后,所述第二预设值有效;
步骤14-4:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤14-5:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤102;
情况五:
步骤15-1:若所述命令为切换至虚拟机状态的命令,卡片判断当前状态是否为超级管理员状态,是则执行步骤15-2,否则卡片返回错误码,返回步骤102;
步骤15-2:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤15-3,否则执行步骤15-4;
步骤15-3:卡片修改卡片的生命周期标志位的取值为第三预设值,返回步骤102;
具体地,在本实施例中,所述第三预设值为虚拟机状态时卡片的生命周期标志位的取值,例如:03;
相应地,当卡片被复位后,所述第四预设值有效;
步骤15-4:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤15-5:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤102;
情况六:
步骤16-1:若所述命令为获取随机数的命令,卡片判断当前状态是否为下载器状态,是则执行步骤16-2,否则卡片返回错误码,返回步骤102;
步骤16-2:卡片生成第一随机数;
优选地,所述第一随机数的长度为16字节;
步骤16-3:卡片分别使用所述设置的SDEK密钥和SMACK密钥对所述第一随机数加密计算,得到会话数据域加密密钥(Session Data Encrypt Key,以下简称SeDEK)和会话MAC验证密钥(Session MAC verify Key,以下简称SeMACK);
优选地,所述SeDEK密钥和SeMACK密钥均为采用DES算法的16字节密钥;
步骤16-4:卡片保存所述生成的第一随机数并将所述第一随机数返回给开发软件,返回步骤102;
在本实施例中,卡片将所述生成的第一随机数返回给开发软件,开发软件采用同样的方法设置SeDEK密钥和SeMACK密钥,与所述卡片设置的SeDEK密钥和SeMACK密钥相同;
情况七:
步骤17-1:若所述命令为APDU命令,卡片判断当前状态是否为下载器状态,是则执行步骤17-2,否则卡片返回错误码,返回步骤102;
步骤17-2:卡片用所述SeMACK密钥及所述接收到的APDU命令后8个字节的MAC码(Message Authentication Codes,消息认证码)对所述APDU命令的完整性进行验证,即验证MAC签名,验证成功则执行步骤17-3,否则卡片返回错误码,返回步骤102;
具体地,在本实施例中,卡片判断是否有存储的MAC码,是则将所述存储的MAC码作为验证MAC签名的初始向量,否则,优选地,预先设置验证MAC签名的初始向量为8个0,进而使用所述预先设置的初始向量验证MAC签名;
所述脚本文件是开发软件向卡片发送的APDU命令序列,参见图2,发送过程如下:
步骤1001:开发软件读取脚本文件中一条经过加密的APDU命令;
步骤1002:开发软件使用所述DCK密钥对所述加密的APDU命令解密得到APDU命令明文;
步骤1003:开发软件使用所述SeDEK密钥对所述APDU命令明文中的APDU数据域部分进行加密计算;
优选地,在本实施例中,采用初始向量为0的CBC(Cipher Block Chaining,密码分组链接)模式对所述APDU数据域进行加密;
步骤1004:开发软件使用所述SeMACK密钥对所述已经加密数据域的完整的APDU命令(包括APDU命令头)采用符合ISO9797_M2_ALG3规范的算法作签名;
优选地,在本实施例中,如果所述读取的APDU命令是所述脚本文件中的第一条APDU命令,则所述算法的初始向量为0,否则为上一条APDU命令签名得到的MAC码;
同时,将使用所述算法得到的8字节MAC码追加至所述加密的APDU数据域之后,作为APDU命令的一部分,并保存所述生成的8字节MAC码,将所述MAC码作为下一次签名使用的初始向量;
步骤1005:开发软件将所述加密的APDU数据域后追加了MAC码的APDU命令发出;
步骤1006:当开发软件接收到返回码时,判断所述返回码是否正常,是则执行步骤1008,否则报错,执行步骤1007;
在本实施例中,卡片在接收到APDU命令后,对APDU命令做相关处理,如果卡片正确处理了APDU命令,则返回码为正常状态,否则为不正常状态;
步骤1007:开发软件判断该条APDU命令的发送次数是否超过预设次数,是则发出提示信息,停止生产,否则返回步骤1003;
优选地,在本实施例中,所述预设次数为三次;
步骤1008:开发软件判断所述脚本文件是否已全部发送完成,是则跳出,否则返回步骤1001,继续发送脚本文件中的下一条APDU命令;
步骤17-3:卡片保存所述APDU命令后8个字节的MAC值;
步骤17-4:卡片使用所述SeDEK密钥解密所述APDU命令加密的数据域;
步骤17-5:卡片根据所述APDU命令头将解密APDU数据域得到的内容写入NVM中指定的地址,返回步骤102;
具体地,在本实施例中,所述将解密APDU数据域得到的内容写入NVM中指定的地址的过程如下:
步骤一:卡片接收APDU命令;
具体地,在本实施例中,卡片根据接收到的APDU命令中的命令头,确定所述APDU命令的类型,并执行对应的操作;
若所述APDU命令为开始下载指令,执行步骤二(1):
步骤二(1):卡片置开始下载标志位,返回步骤一;
具体地,所述卡片接收到的开始下载指令为00010000;
若所述APDU命令为设置基地址指令,执行步骤二(2):
步骤二(2):卡片检查开始下载标志位是否已置位,是则将地址变量设为基地址,并保存所述基地址,否则返回步骤一;
具体地,在本实施例中,开发软件设置基地址并发送给卡片;
优选地,所述卡片接收到的设置基地址的指令为0002P1P2,其中,P1、P2为NVM的基地址的高2个字节,
例如,P1:P2=0x8010,则卡片将NVM的地址变量设为基地址0x801000;
若所述APDU命令为下载指令,执行步骤二(3)至步骤二(4):
步骤二(3):卡片检查开始下载标志位是否已置位,是则执行步骤二(4)否则返回步骤一;
步骤二(4):卡片检查是否有保存的基地址,是则向NVM中指定的地址写入数据,否则返回错误码,返回步骤一;
优选地,在本实施例中,所述卡片接收到的下载指令为0003P3P4LCDATA,LC字节为数据域的长度,DATA为LC字节的数据,即为所述解密APDU数据域得到的内容;
其中,P3、P4为偏移地址,因此实际写入数据的地址,即步骤12-5中所述指定的地址为:所述基地址+P3:P4;
例如,P3:P4=0x0040,则所述实际写入数据的地址为0x80140;
若所述APDU命令为下载完成指令,执行步骤二(5):
步骤二(5):卡片检查开始下载标志位是否已置位,是则置下载完成标志位,返回步骤102,否则返回步骤一;
具体地,所述卡片接收到的下载完成指令为00040000;
情况八:
步骤18-1:若所述命令为切换超级管理员状态的命令时,卡片判断当前状态是否为下载器状态,是则执行步骤18-2,否则卡片返回错误码,返回步骤102;
步骤18-2:卡片修改卡片的生命周期标志位的取值为所述第一预设值;
在本实施例中,当卡片被复位后,所述第一预设值有效;
预设时间内,开发软件向卡片发送获取卡片信息命令,确认卡片是否处于超级管理员状态,是则跳出,否则重新向卡片发送状态切换命令;
如果命令重发次数超过预设次数(如三次),卡片仍未切换到超级管理员状态,则开发软件发出提示信息,停止生产;
情况九:
步骤19-1:若所述命令为选择文件的命令,卡片判断当前状态是否为虚拟机状态,是则执行步骤19-2,否则卡片返回错误码,返回步骤102;
步骤19-2:卡片返回卡管理器(MF)信息,并返回步骤102;
在本实施例中,开发软件根据卡片返回的所述卡管理器信息判断卡片是否处于虚拟机状态并工作正常,卡片返回的所述卡管理器信息可能有以下三种情况:
1)如果卡管理器信息提示卡片仍处于超级管理员状态,则重新发送“切换至虚拟机状态”命令,如果重发命令次数超过三次,卡片仍未切换至虚拟机状态时,开发软件发出提示信息,停止生产;
2)如果卡管理器信息提示虚拟机相关错误码,则说明写入卡片的镜像文件已被篡改,该张卡片作废,开发软件发出提示信息,停止生产;
3)如果卡管理器信息提示结果正常,则激活下一张卡片,即继续生产下一张卡片。
在本实施例中,生产过程正确的情况下,卡片的最终状态为虚拟机状态,当卡片被复位后,卡片的生产过程结束,该卡片可以供用户使用;
情况十:
步骤20-1:若所述命令为其他命令,卡片判断当前状态是否为虚拟机状态,是则执行步骤20-2,否则卡片返回错误码,返回步骤102;
步骤20-2:卡片对所述其他命令进行处理,处理后返回步骤102。
实施例二
本发明实施例二提供了另一种对java卡进行初始化的方法,参见图3,具体如下:
步骤301:卡片上电;
步骤302:卡片检查卡片当前的状态标志,根据各状态标志在相应的状态下执行操作;
具体地,在本实施例中,卡片当前的状态标志可能为以下四种状态之一:非激活状态、超级管理员状态、下载器状态、虚拟机状态;
若当前的状态标志为非激活状态,执行以下操作:步骤303-1:卡片接收命令;
具体地,在本实施例中,卡片处于非激活状态时卡片的生命周期标志位的取值为第四预设值,例如:04;
在本实施例中,卡片根据接收到的命令执行相应的操作,具体如下:
若所述命令为激活命令,执行步骤21-1至步骤21-4:
步骤21-1:卡片判断是否激活成功,是则执行步骤21-2,否则执行步骤21-3;
步骤21-2:卡片置激活成功标识,并修改卡片的生命周期标志位的取值为第一预设值;
在本实施例中,当卡片被复位后,所述第一预设值有效;
步骤21-3:卡片将记录激活次数的计数值减1;
优选地,在本实施例中,预先设置所述记录激活次数的计数值的初始值为三次;
步骤21-4:卡片判断所述记录激活次数的计数值是否为0,是则卡片自毁,否则返回步骤303-1;
若所述命令为其他命令,执行步骤22-1:
步骤22-1:卡片返回错误码,返回步骤303-1;
若当前的状态标志为超级管理员状态,执行以下操作:
步骤303-2:卡片接收命令;
在本实施例中,当卡片处于超级管理员状态时,卡片根据接收到的命令执行相应的操作,具体如下:
若所述命令为激活命令,执行步骤31-1:
步骤31-1:卡片返回错误码,并返回步骤303-2;
若所述命令为验证管理员pin码的命令,执行步骤32-1至步骤32-4:
步骤32-1:卡片执行验证操作,验证成功则执行步骤32-4,验证失败则执行步骤32-2;
步骤32-2:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤32-3:卡片判断所述记录验证次数的计数值是否为0,是则卡片自毁,返回步骤303-2;
步骤32-4:卡片置pin码验证通过标志位,返回步骤303-2;
若所述命令为设置SDEK、SMACK密钥的命令,执行步骤33-1至步骤33-4:
步骤33-1:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤33-4,否则执行步骤33-2;
步骤33-2:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤33-3:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤303-2;
步骤33-4:卡片设置SDEK密钥和SMACK密钥并保存,返回步骤303-2;
在本实施例中,开发软件设置下载器所使用的各种密钥,包括APDU数据域解密静态密钥(Static Data Encrypt Key,以下简称SDEK)和MAC验证静态密钥(static MAC verify Key,以下简称SMACK);
优选地,在本实施例中,所述SDEK密钥和SMACK密钥均为采用DES算法的16字节密钥;
相应地,预先约定所述接收到的设置SDEK密钥和SMACK密钥命令的前16字节为设置SDEK密钥的内容,后16字节为设置SMACK密钥的内容;
开发软件也可以分别向卡片发送设置SEDK密钥和SMACK密钥的命令,即,若卡片接收到设置SDEK密钥的命令,设置SDEK密钥;若卡片接收到设置SMACK密钥的命令,设置SMACK密钥;
卡片采用同样的方法设置SDEK密钥和SMACK密钥,与开发软件设置的SDEK密钥和SMACK密钥相同;
若所述命令为切换至下载器状态的命令,执行步骤34-1至步骤34-4:
步骤34-1:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤34-4,否则执行步骤34-2;
步骤34-2:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤34-3:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤303-2;
步骤34-4:卡片修改卡片的生命周期标志位的取值为所述第二预设值,返回步骤303-2;
在本实施例中,当卡片被复位后,所述第二预设值有效;
若所述命令为切换至虚拟机状态的命令,执行步骤35-1至步骤35-4:
步骤35-1:卡片判断pin码验证通过标志位是否置位,即pin码是否验证通过,是则执行步骤35-4,否则执行步骤35-2;
步骤35-2:卡片将记录验证次数的计数值减1;
优选地,在本实施例中,预先设置所述记录验证次数的计数值的初始值为三次;
步骤35-3:卡片判断所述记录管理员pin码验证次数的计数值是否为0,是则卡片自毁,否则返回步骤303-2;
步骤35-4:卡片修改卡片的生命周期标志位的取值为所述第三预设值,返回步骤303-2;
在本实施例中,当卡片被复位后,所述第三预设值有效;
若所述命令为其他命令,执行步骤36-1:
步骤36-1:卡片返回错误码,并返回步骤303-2;
若当前的状态标志为下载器状态,执行以下操作:
步骤303-3:卡片接收命令;
在本实施例中,当卡片处于下载器状态时,卡片根据接收到的命令执行相应的操作,具体如下:
若所述命令为获取随机数的命令,执行步骤41-1至步骤41-3:
步骤41-1:卡片生成第一随机数;
优选地,所述第一随机数的长度为16字节;步骤41-2:卡片分别使用所述设置的SDEK密钥和SMACK密钥对所述第一随机数加密计算,得到会话数据域加密密钥(Session Data Encrypt Key,以下简称SeDEK)和会话MAC验证密钥(Session MAC verify Key,以下简称SeMACK);
优选地,所述SeDEK密钥和SeMACK密钥均为采用DES算法的16字节密钥;
步骤41-3:卡片保存所述生成的第一随机数,并将所述第一随机数返回给开发软件,返回步骤303-3;
在本实施例中,卡片将所述生成的第一随机数返回给开发软件,开发软件采用同样的方法设置SeDEK密钥和SeMACK密钥,与所述卡片设置的SeDEK密钥和SeMACK密钥相同;
若所述命令为APDU命令,执行步骤42-1至步骤42-4:
步骤42-1:卡片用所述SeMACK密钥及所述接收到的APDU命令后8个字节的MAC码对所述接收到的APDU命令的完整性进行验证,即验证MAC签名,验证成功则执行步骤42-2,否则卡片返回错误码,返回步骤303-3;
具体地,在本实施例中,卡片判断是否有存储的MAC码,是则将所述存储的MAC码作为验证MAC签名的初始向量,否则,优选地,使用预先设置的初始向量验证MAC签名,优选地,所述初始向量为8个0;
所述脚本文件是开发软件向卡片发送的APDU命令序列,发送过程与实施例一步骤17-2中描述的发送过程相同,在此不再赘述:
步骤42-2:卡片保存所述APDU命令后8个字节的MAC值;
步骤42-3:卡片使用所述SeDEK密钥解密所述APDU命令加密的数据域;
步骤42-4:卡片根据所述APDU命令头将解密APDU数据域得到的内容写入NVM中指定的地址,返回步骤303-3;
所述将解密APDU数据域得到的内容写入NVM中指定的地址的过程与实施例一步骤17-5中描述的写入过程相同,在此不再赘述:
若所述命令为切换超级管理员状态的命令,执行步骤43-1:
步骤43-1:卡片修改卡片的生命周期标志位的取值为所述第一预设值,返回步骤303-3;
在本实施例中,当卡片被复位后,所述第一预设值有效;
若所述命令为其他命令,执行步骤44-1:
步骤44-1:卡片返回错误码,并返回步骤303-3;
若当前的状态标志为虚拟机状态,执行以下操作:
步骤303-4:卡片接收命令;
在本实施例中,当卡片处于虚拟机状态时,卡片根据接收到的命令执行相应的操作,具体如下:
若所述命令为选择文件的命令,执行步骤51-1:
步骤51-1:卡片返回卡管理器(MF)信息,并返回步骤303-4;
在本实施例中,开发软件根据卡片返回的所述卡管理器信息判断卡片是否处于虚拟机状态并工作正常,卡片返回的所述卡管理器信息与实施例一步骤19-2中返回的所述卡管理器信息相同,在此不再赘述;
若所述命令为其他命令,执行步骤52-1:
步骤52-1:卡片对所述其他命令进行处理,处理后返回步骤303-4。
实施例三
本发明实施例三提供了一种java卡,如图4所示,包括:
接收模块410,用于接收命令;
第一判断模块420,用于对所述接收模块410接收到的命令进行判断;
第二判断模块430,用于在所述第一判断模块420判断所述接收到的命令为激活命令时,判断所述java卡的激活成功标志位是否已被置位;在所述第一判断模块420判断所述接收到的命令为切换命令时,判断所述生命周期标志位的取值是否为所述第一预设值;在所述第一判断模块420判断接收到的命令为第一APDU命令时,判断所述生命周期标志位的取值是否为所述第二预设值;
第一设置模块440,用于在所述第二判断模块430判断所述激活成功标志位未被置位时,在所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块450,用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第一预设值时,将所述生命周期标志位的取值修改为所述第二预设值;
处理模块460,用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块470,用于在所述第二判断模块430判断所述激活成功标志位已被置位时,返回错误码;在所述第二判断模块430判断所述生命周期标志位的取值不是所述第一预设值时,返回错误码;在所述第二判断模块430判断所述生命周期标志位的取值不是所述第二预设值时,返回错误码。
进一步地,上述java卡,还可以包括第三设置模块480和第三判断模块490;
所述第二判断模块430,还用于在所述第一判断模块420判断所述接收到的命令为个人识别码PIN码验证命令时,判断所述生命周期标志位的取值是否为所述第一预设值;
所述第三设置模块480,用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第一预设值时,在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
所述第三判断模块490,用于判断所述java卡的验证通过标志位是否已被置位;
相应地,所述第二设置模块450,具体用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第一预设值,且所述第三判断模块490判断所述验证通过标志位已被置位时,将所述生命周期标志位的取值修改为第二预设值。
所述处理模块460,具体用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第二预设值时,判断所述java卡是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码,使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储,使用所述第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中。
上述java卡,还可以进一步包括:
获取模块400,用于在所述第一判断模块420判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令中获取地址信息;
相应地,所述处理模块460,具体用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据,根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
其中,所述地址信息可以为基地址;
相应地,所述获取模块400,具体用于从所述第二APDU命令的命令头中获取所述基地址;
所述处理模块460,具体用于在所述第二判断模块430判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据和偏移地址,根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
实施例四
本发明实施例四提供了另一种java卡,如图5所示,包括
检查模块510,用于检查所述java卡的生命周期标志位的取值以及激活成功标志位是否被置位;
接收模块520,用于接收命令;
第一判断模块530,用于对所述接收模块520接收到的命令进行判断;
第一设置模块540,用于在所述检查模块510检查到所述激活成功标志位未被置位,且所述第一判断模块530判断接收到的命令为激活命令时,在所述java卡被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块550,用于在所述检查模块510检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块530判断所述接收到的命令为切换命令时,将所述生命周期标志位的取值修改为第二预设值;
处理模块560,用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第一APDU命令时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块570,用于在所述检查模块510检查到所述激活成功标志位未被置位,且所述第一判断模块530判断接收到的命令不为激活命令时,返回错误码。
进一步地,上述java卡,还可以包括:
第三设置模块580,用于在所述检查模块510检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块530判断所述接收到的命令为个人识别码PIN码验证命令,在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
第二判断模块590,用于判断所述java卡的验证通过标志位是否已被置位;
相应地,所述第二设置模块550,具体用于在所述检查模块510检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块530判断所述接收到的命令为切换命令,以及所述第二判断模块590判断所述验证通过标志位已被置位时,将所述生命周期标志位的取值修改为第二预设值。
所述处理模块560,具体用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第一应用协议数据单元APDU命令时,判断所述java卡是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码,使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储,使用所述第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中。
上述java卡,还可以进一步包括:
获取模块500,用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令中获取地址信息;
所述处理模块560,具体用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第一APDU命令时,从所述第一APDU命令中获取运行环境数据,根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
其中,所述地址信息可以为基地址;
相应地,所述获取模块500,具体用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令的命令头中获取所述基地址;
所述处理模块560,具体用于在所述检查模块510检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块530判断所述接收到的命令为第一APDU命令时,从所述第一APDU命令中获取运行环境数据和偏移地址,根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (20)

1.一种对java卡进行初始化的方法,其特征在于,包括以下步骤:
①、java卡上电;
②、所述java卡等待接收命令;
③、所述java卡接收命令,对接收到的命令进行判断,如果所述接收到的命令为激活命令,则执行步骤④;如果所述接收到的命令为切换命令,则执行步骤⑤;如果所述接收到的命令为第一应用协议数据单元APDU命令,则执行步骤⑥;
④、所述java卡判断自身的激活成功标志位是否已被置位,如果所述激活成功标志位未被置位,所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值,并返回步骤②;否则,所述java卡返回错误码,并返回步骤②;
⑤、所述java卡判断所述生命周期标志位的取值是否为所述第一预设值,如果所述生命周期标志位的取值为所述第一预设值,所述java卡将所述生命周期标志位的取值修改为所述第二预设值,并返回步骤②;否则,所述java卡返回错误码,并返回步骤②;
⑥、所述java卡判断所述生命周期标志位的取值是否为所述第二预设值,如果为所述生命周期标志位的取值不是所述第二预设值,所述java卡返回错误码,并返回步骤②;否则,所述java卡从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,并返回步骤②,所述运行环境数据为运行java卡虚拟机所必需的数据。
2.如权利要求1所述的方法,其特征在于,所述java卡对所述接收到的命令进行判断之后,还包括:
当所述接收到的命令为个人识别码PIN码验证命令时,所述java卡判断所述生命周期标志位的取值是否为所述第一预设值;
如果所述生命周期标志位的取值不是所述第一预设值,所述java卡返回错误码,并返回步骤②;
如果所述生命周期标志位的取值为所述第一预设值,所述java卡在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,并返回步骤②,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
所述java卡判断所述接收到的命令为切换命令之后,还包括:
所述java卡判断自身的验证通过标志位是否已被置位;
所述java卡将所述生命周期标志位的取值修改为第二预设值,具体为:
当所述验证通过标志位已被置位时,所述java卡将所述生命周期标志位的取值修改为第二预设值。
3.如权利要求1所述的方法,其特征在于,所述java卡判断所述生命周期标志位的取值为所述第二预设值之后,还包括:
所述java卡判断自身是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储;
所述java卡从所述第一APDU命令中获取运行环境数据,具体为:
当完整性验证成功时,所述java卡使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据。
4.如权利要求1所述的方法,其特征在于,所述java卡对所述接收到的命令进行判断之后,还包括:
当所述接收到的命令为第二APDU命令时,所述java卡从所述第二APDU命令中获取地址信息;
所述java卡将所述运行环境数据写入到自身的NVM中,具体为:
所述java卡根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
5.如权利要求4所述的方法,其特征在于,所述地址信息为基地址;
所述java卡从所述第二APDU命令中获取地址信息,具体为:
所述java卡从所述第二APDU命令的命令头中获取所述基地址;
所述java卡将所述运行环境数据写入到自身的NVM中,具体为:
所述java卡从所述第一APDU命令中获取偏移地址;
所述java卡根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
6.一种对java卡进行初始化的方法,其特征在于,包括以下步骤:
①、java卡上电;
②、所述java卡检查自身的生命周期标志位的取值以及激活成功标志位是否被置位,如果所述激活成功标志位未被置位,则执行步骤③;如果所述生命周期标志位的取值为第一预设值,则执行步骤⑥;如果所述生命周期标志位的取值为第二预设值,则执行步骤⑧;
③、所述java卡对接收到的命令进行判断,如果所述接收到的命令为激活命令,则执行步骤④;否则,执行步骤⑤;
④、所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值,并返回步骤③;
⑤、所述java卡返回错误码,并返回步骤③;
⑥、所述java卡对接收到的命令进行判断,如果所述接收到的命令为切换命令,则执行步骤⑦;
⑦、所述java卡将所述生命周期标志位的取值修改为第二预设值,并返回步骤⑥;
⑧、所述java卡对接收到的命令进行判断,如果所述接收到的命令为第一应用协议数据单元APDU命令,则执行步骤⑨;
⑨、所述java卡从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,并返回步骤⑧,所述运行环境数据为运行java卡虚拟机所必需的数据。
7.如权利要求6所述的方法,其特征在于,所述步骤⑥,还包括:
如果所述接收到的命令为个人识别码PIN码验证命令,所述java卡在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
所述java卡判断所述接收到的命令为切换命令之后,还包括:
所述java卡判断自身的验证通过标志位是否已被置位;
所述java卡将所述生命周期标志位的取值修改为第二预设值,具体为:
当所述验证通过标志位已被置位时,所述java卡将所述生命周期标志位的取值修改为第二预设值。
8.如权利要求6所述的方法,其特征在于,所述java卡判断所述接收的命令为第一APDU命令之后,还包括:
所述java卡判断自身是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储;
所述java卡从所述第一APDU命令中获取运行环境数据,具体为:
当完整性验证成功时,所述java卡使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据。
9.如权利要求6所述的方法,其特征在于,所述步骤⑧,还包括:
当所述接收到的命令为第二APDU命令时,所述java卡从所述第二APDU命令中获取地址信息;
所述java卡将所述运行环境数据写入到自身的NVM中,具体为:
所述java卡根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
10.如权利要求9所述的方法,其特征在于,所述地址信息为基地址;
所述java卡从所述第二APDU命令中获取地址信息,具体为:
所述java卡从所述第二APDU命令的命令头中获取所述基地址;
所述java卡将所述运行环境数据写入到自身的NVM中,具体为:
所述java卡从所述第一APDU命令中获取偏移地址;
所述java卡根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
11.一种java卡,其特征在于,包括:
接收模块,用于接收命令;
第一判断模块,用于对所述接收模块接收到的命令进行判断;
第二判断模块,用于在所述第一判断模块判断所述接收到的命令为激活命令时,判断所述java卡的激活成功标志位是否已被置位;在所述第一判断模块判断所述接收到的命令为切换命令时,判断所述生命周期标志位的取值是否为所述第一预设值;在所述第一判断模块判断接收到的命令为第一APDU命令时,判断所述生命周期标志位的取值是否为所述第二预设值;
第一设置模块,用于在所述第二判断模块判断所述激活成功标志位未被置位时,在所述java卡在被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块,用于在所述第二判断模块判断所述生命周期标志位的取值为所述第一预设值时,将所述生命周期标志位的取值修改为所述第二预设值;
处理模块,用于在所述第二判断模块判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块,用于在所述第二判断模块判断所述激活成功标志位已被置位时,返回错误码;在所述第二判断模块判断所述生命周期标志位的取值不是所述第一预设值时,返回错误码;在所述第二判断模块判断所述生命周期标志位的取值不是所述第二预设值时,返回错误码。
12.如权利要求11所述的java卡,其特征在于,还包括第三设置模块和第三判断模块;
所述第二判断模块,还用于在所述第一判断模块判断所述接收到的命令为个人识别码PIN码验证命令时,判断所述生命周期标志位的取值是否为所述第一预设值;
所述第三设置模块,用于在所述第二判断模块判断所述生命周期标志位的取值为所述第一预设值时,在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
所述第三判断模块,用于判断所述java卡的验证通过标志位是否已被置位;
所述第二设置模块,具体用于在所述第二判断模块判断所述生命周期标志位的取值为所述第一预设值,且所述第三判断模块判断所述验证通过标志位已被置位时,将所述生命周期标志位的取值修改为第二预设值。
13.如权利要求11所述的java卡,其特征在于,
所述处理模块,具体用于在所述第二判断模块判断所述生命周期标志位的取值为所述第二预设值时,判断所述java卡是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码,使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储,使用所述第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中。
14.如权利要求11所述的java卡,其特征在于,还包括:
获取模块,用于在所述第一判断模块判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令中获取地址信息;
所述处理模块,具体用于在所述第二判断模块判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据,根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
15.如权利要求14所述的java卡,其特征在于,所述地址信息为基地址;
所述获取模块,具体用于从所述第二APDU命令的命令头中获取所述基地址;
所述处理模块,具体用于在所述第二判断模块判断所述生命周期标志位的取值为所述第二预设值时,从所述第一APDU命令中获取运行环境数据和偏移地址,根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
16.一种java卡,其特征在于,包括:
检查模块,用于检查所述java卡的生命周期标志位的取值以及激活成功标志位是否被置位;
接收模块,用于接收命令;
第一判断模块,用于对所述接收模块接收到的命令进行判断;
第一设置模块,用于在所述检查模块检查到所述激活成功标志位未被置位,且所述第一判断模块判断接收到的命令为激活命令时,在所述java卡被激活成功后,对所述java卡的激活成功标志位进行置位,将所述生命周期标志位的取值修改为第一预设值;
第二设置模块,用于在所述检查模块检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块判断所述接收到的命令为切换命令时,将所述生命周期标志位的取值修改为第二预设值;
处理模块,用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第一应用协议数据单元APDU命令时,从所述第一APDU命令中获取运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中,所述运行环境数据为运行java卡虚拟机所必需的数据;
发送模块,用于在所述检查模块检查到所述激活成功标志位未被置位,且所述第一判断模块判断接收到的命令不为激活命令时,返回错误码。
17.如权利要求16所述的java卡,其特征在于,还包括:
第三设置模块,用于在所述检查模块检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块判断所述接收到的命令为个人识别码PIN码验证命令,在对所述PIN码验证命令所包含的PIN码验证成功后,对所述java卡的验证通过标志位进行置位,所述验证通过标识位用于标识所述java卡对PIN码是否验证成功;
第二判断模块,用于判断所述java卡的验证通过标志位是否已被置位;
所述第二设置模块,具体用于在所述检查模块检查到所述生命周期标志位的取值为第一预设值,且所述第一判断模块判断所述接收到的命令为切换命令,以及所述第二判断模块判断所述验证通过标志位已被置位时,将所述生命周期标志位的取值修改为第二预设值。
18.如权利要求16所述的java卡,其特征在于,
所述处理模块,具体用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第一应用协议数据单元APDU命令时,判断所述java卡是否存储有初始向量,如果存储有初始向量,则使用所述初始向量和第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述初始向量更新为所述第一APDU命令中的MAC码,使用第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中;如果没有存储初始向量,则使用预设向量和所述第一密钥对所述第一APDU命令进行完整性验证,并在完整性验证成功时,将所述第一APDU命令中的消息认证码MAC码作为初始向量进行存储,使用所述第二密钥对所述第一APDU命令中的APDU数据域进行解密,得到所述运行环境数据,将所述运行环境数据写入到自身的非易失性存储器NVM中。
19.如权利要求16所述的java卡,其特征在于,还包括:
获取模块,用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令中获取地址信息;
所述处理模块,具体用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第一APDU命令时,从所述第一APDU命令中获取运行环境数据,根据所述地址信息,将所述运行环境数据写入到自身的NVM中。
20.如权利要求19所述的java卡,其特征在于,所述地址信息为基地址;
所述获取模块,具体用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第二APDU命令时,从所述第二APDU命令的命令头中获取所述基地址;
所述处理模块,具体用于在所述检查模块检查到所述生命周期标志位的取值为第二预设值,且所述第一判断模块判断所述接收到的命令为第一APDU命令时,从所述第一APDU命令中获取运行环境数据和偏移地址,根据所述基地址和所述偏移地址,将所述运行环境数据写入到自身的NVM中。
CN2011103856759A 2011-11-28 2011-11-28 一种对java卡进行初始化的方法和java卡 Active CN102521094B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011103856759A CN102521094B (zh) 2011-11-28 2011-11-28 一种对java卡进行初始化的方法和java卡

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011103856759A CN102521094B (zh) 2011-11-28 2011-11-28 一种对java卡进行初始化的方法和java卡

Publications (2)

Publication Number Publication Date
CN102521094A true CN102521094A (zh) 2012-06-27
CN102521094B CN102521094B (zh) 2013-11-13

Family

ID=46292027

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011103856759A Active CN102521094B (zh) 2011-11-28 2011-11-28 一种对java卡进行初始化的方法和java卡

Country Status (1)

Country Link
CN (1) CN102521094B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103116518A (zh) * 2013-01-28 2013-05-22 飞天诚信科技股份有限公司 一种基于java卡虚拟机中对象管理的方法
CN103345610A (zh) * 2013-06-20 2013-10-09 武汉天喻信息产业股份有限公司 快速验证智能卡数据完整性的设备及方法
CN106296155A (zh) * 2016-08-04 2017-01-04 武汉天喻信息产业股份有限公司 一种发卡行脚本指令链式mac的实现方法
CN106406932A (zh) * 2016-08-26 2017-02-15 北京中电华大电子设计有限责任公司 一种改进的Java卡初始化方法和Java卡
CN109739779A (zh) * 2019-01-07 2019-05-10 金邦达有限公司 一种获取java卡内可用存储空间的方法、计算机装置以及计算机可读存储介质
CN117407928A (zh) * 2023-12-13 2024-01-16 合肥康芯威存储技术有限公司 存储装置、存储装置的数据保护方法、计算机设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040250191A1 (en) * 2003-06-09 2004-12-09 Stmicroelectronics, Inc. Smartcard test system and related methods
CN101097606A (zh) * 2006-06-29 2008-01-02 北京握奇数据系统有限公司 一种智能卡操作系统和方法
US20100088447A1 (en) * 2006-11-30 2010-04-08 Kian Teck Soh Secure mmc standard smartcard with multi-application operation capability, process of operation
CN101789070A (zh) * 2010-01-28 2010-07-28 华为终端有限公司 一种智能卡初始化方法和终端设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040250191A1 (en) * 2003-06-09 2004-12-09 Stmicroelectronics, Inc. Smartcard test system and related methods
CN101097606A (zh) * 2006-06-29 2008-01-02 北京握奇数据系统有限公司 一种智能卡操作系统和方法
US20100088447A1 (en) * 2006-11-30 2010-04-08 Kian Teck Soh Secure mmc standard smartcard with multi-application operation capability, process of operation
CN101789070A (zh) * 2010-01-28 2010-07-28 华为终端有限公司 一种智能卡初始化方法和终端设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王爱英: "《智能卡技术:IC卡(第二版)》", 31 December 2000, article "java智能卡(Java card)", pages: 247-248 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103116518A (zh) * 2013-01-28 2013-05-22 飞天诚信科技股份有限公司 一种基于java卡虚拟机中对象管理的方法
CN103116518B (zh) * 2013-01-28 2015-09-23 飞天诚信科技股份有限公司 一种基于java卡虚拟机中对象管理的方法
CN103345610A (zh) * 2013-06-20 2013-10-09 武汉天喻信息产业股份有限公司 快速验证智能卡数据完整性的设备及方法
CN103345610B (zh) * 2013-06-20 2015-09-23 武汉天喻信息产业股份有限公司 快速验证智能卡数据完整性的设备及方法
CN106296155A (zh) * 2016-08-04 2017-01-04 武汉天喻信息产业股份有限公司 一种发卡行脚本指令链式mac的实现方法
CN106296155B (zh) * 2016-08-04 2019-07-23 武汉天喻信息产业股份有限公司 一种发卡行脚本指令链式mac的实现方法
CN106406932A (zh) * 2016-08-26 2017-02-15 北京中电华大电子设计有限责任公司 一种改进的Java卡初始化方法和Java卡
CN109739779A (zh) * 2019-01-07 2019-05-10 金邦达有限公司 一种获取java卡内可用存储空间的方法、计算机装置以及计算机可读存储介质
CN109739779B (zh) * 2019-01-07 2023-04-21 金邦达有限公司 一种获取java卡内可用存储空间的方法、计算机装置以及计算机可读存储介质
CN117407928A (zh) * 2023-12-13 2024-01-16 合肥康芯威存储技术有限公司 存储装置、存储装置的数据保护方法、计算机设备及介质
CN117407928B (zh) * 2023-12-13 2024-03-22 合肥康芯威存储技术有限公司 存储装置、存储装置的数据保护方法、计算机设备及介质

Also Published As

Publication number Publication date
CN102521094B (zh) 2013-11-13

Similar Documents

Publication Publication Date Title
CN102521094B (zh) 一种对java卡进行初始化的方法和java卡
Garcia et al. Wirelessly pickpocketing a Mifare Classic card
Peris-Lopez et al. Cryptanalysis of a novel authentication protocol conforming to EPC-C1G2 standard
US20140025940A1 (en) Updating an operating system for secure element
US8532295B2 (en) Method for the secure loading in a NFC chipset of data allowing access to a service
US20080189554A1 (en) Method and system for securing communication between a host computer and a secure portable device
WO2017208063A1 (en) Increased security through ephemeral keys for software virtual contactless card in mobile phone
CN102045333B (zh) 一种安全报文过程密钥的生成方法
US20110064224A1 (en) Duplication means for an electronically coded key and related method
US20210351942A1 (en) Embedding protected memory access into a rfid authentication process based on a challenge-response mechanism
JP2008541163A (ja) 通信プロトコル及び電気通信システム、特に認証管理システム及び対応する方法
JP2004519050A (ja) アルゴリズムコードを記憶するための揮発性メモリを備える機密保護モジュール
US8032663B2 (en) Information processing system, information processing apparatus and integrated circuit chip
Garcia et al. Dismantling iclass and iclass elite
CN101156157A (zh) 软件保护方法
JP2007173999A (ja) 認証システム及び認証対象装置
CN101741823B (zh) 一种交叉验证的安全通讯方法及系统
CN112291201B (zh) 业务请求的传输方法及装置、电子设备
CN106056017A (zh) 智能卡cos加密下载系统
CN101136071A (zh) 通信装置、通信方法和程序
US9553729B2 (en) Authentication method between a reader and a radio tag
Kasper et al. Chameleon: A versatile emulator for contactless smartcards
CN110515640A (zh) 一种安全芯片的固件升级方法、装置、设备及存储介质
ES2634891T3 (es) Sistema de autorización con tarjeta y lector
CN102831357A (zh) 二次开发嵌入式应用程序的加密和认证保护的方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant