CN106228090A - 一种多主安全域Java智能卡及其实现方法 - Google Patents
一种多主安全域Java智能卡及其实现方法 Download PDFInfo
- Publication number
- CN106228090A CN106228090A CN201610606151.0A CN201610606151A CN106228090A CN 106228090 A CN106228090 A CN 106228090A CN 201610606151 A CN201610606151 A CN 201610606151A CN 106228090 A CN106228090 A CN 106228090A
- Authority
- CN
- China
- Prior art keywords
- security domain
- main security
- module
- current
- operating system
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/77—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in smart cards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
- G06K19/067—Record carriers with conductive marks, printed circuits or semiconductor circuit elements, e.g. credit or identity cards also with resonating or responding marks without active components
- G06K19/07—Record carriers with conductive marks, printed circuits or semiconductor circuit elements, e.g. credit or identity cards also with resonating or responding marks without active components with integrated circuit chips
- G06K19/073—Special arrangements for circuits, e.g. for protecting identification code in memory
- G06K19/07309—Means for preventing undesired reading or writing from or onto record carriers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种Java智能卡及其实现方法,所述方法包括:Java智能卡复位后,操作***读取缺省主安全域数量,对应创建多个主安全域,并设置其中的默认主安全域为当前主安全域;操作***接收上位机发送的APDU数据并派遣到当前主安全域;当前主安全域判断出自身有权限处理APDU数据时,若APDU数据为第一命令,则执行设置缺省主安全域的数量或者默认主安全域的操作,若APDU数据为第二命令,则执行加载及安装与自身对应的应用的操作,并通过操作***返回操作结果上位机,操作***继续等待接收上位机发送的APDU数据。本发明的技术方案,使得各应用供应商相互独立的存在于同一张物理卡片中,并独立管理自己的应用。
Description
技术领域
本发明涉及智能卡领域,尤其涉及一种多主安全域Java智能卡及其实现方法。
背景技术
随着社会的发展,智能卡由于其便于随身携带、存储容量大、信息记录可靠安全等优点受到了越来越广泛的关注,而为了适应智能卡应用领域的不断扩展,多种应用集成在一张物理卡片中已成为普遍现象。
在现有Java智能卡技术中,在一张物理卡片中,通常只存在一个拥有主安全域(Card Issuer’s Security Domain,简称ISD)管理权限的应用供应商,其可以管理与主安全域关联的应用(Application,简称APP),包括应用的下载、安装、删除等操作;而多数的应用供应商则没有主安全域管理权限,管理其应用只能通过经主安全域授权的辅助安全域(Security Domain,简称SD)来实现。因此在行业应用过程中,对于多数的应用供应商来说管理自己的应用存在安全担忧。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种多主安全域Java智能卡及其实现方法。
一方面,本发明提供了一种多主安全域Java智能卡实现方法,所述Java智能卡复位后,执行以下操作:
步骤S1:操作***读取缺省主安全域数量,对应创建多个主安全域,并设置所述多个主安全域中的默认主安全域为当前主安全域;
步骤S2:操作***等待并接收上位机发送的APDU数据,派遣接收到的APDU数据到所述当前主安全域,所述当前主安全域判断自身是否有权限处理所述APDU数据,是则执行步骤S3,否则异常,通过操作***返回非通讯状态码给所述上位机,继续执行步骤S2;
步骤S3:所述当前主安全域判断所述APDU数据的类型,如果是第一命令,则执行步骤S4;如果是第二命令,则执行步骤S5;
步骤S4:当所述第一命令为第三预个人化命令时,所述当前主安全域执行设置缺省主安全域的数量的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第一命令为第四预个人化命令时,所述当前主安全域执行设置默认主安全域的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;
步骤S5:当所述第二命令为第一个人化命令时,所述当前主安全域执行预加载与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第二命令为第二个人化命令时,所述当前主安全域执行加载与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第二命令为第三个人化命令时,所述当前主安全域执行安装与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2。
可选地,当所述Java智能卡首次复位时,所述步骤S1之前,还包括:
所述操作***初始化缺省主安全域的数量和默认主安全域编号并保存。
可选地,所述步骤S1中,所述读取缺省主安全域数量,对应创建多个主安全域,具体包括:
步骤A1:所述操作***读取缺省主安全域数量,将其作为当前缺省主安全域数量,并获取预置标识和预置密钥;
步骤A2:所述操作***根据所述预置标识和所述预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中;
步骤A3:所述操作***将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为所述当前缺省主安全域数量;
步骤A4:所述操作***判断所述当前缺省主安全域数量是否为零,是则设置所述多个主安全域中的默认主安全域为当前主安全域,否则返回步骤A2。
可选地,所述步骤A2中,根据所述预置标识和所述预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中,具体为:
所述操作***调用主安全域创建函数,将所述预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为所述创建的主安全域的初始标识,将所述预置密钥作为所述创建的主安全域的初始密钥,并将所述初始标识和所述初始密钥填充到注册表中。
可选地,所述步骤S2中,派遣接收到的APDU数据到当前主安全域之前,还包括:
步骤C1:所述操作***判断接收到的APDU数据是否为选择命令,是则解析所述接收到的APDU数据得到主安全域标识,设置所述主安全域标识对应的主安全域为当前主安全域,执行步骤C2;否则派遣接收到的APDU数据到所述当前主安全域;
步骤C2:所述操作***继续接收上位机发送的APDU数据,派遣接收到的APDU数据到所述当前主安全域。
可选地,所述设置所述主安全域标识对应的主安全域为当前主安全域之前,还包括:所述操作***检查卡片中是否存在所述主安全域标识,是则设置所述主安全域标识对应的主安全域为当前主安全域,否则异常,返回非通讯状态码给所述上位机,返回行步骤S2。
可选地,所述当前主安全域判断自身是否有权限处理所述APDU数据,具体为:所述当前主安全域判断所述APDU数据的预设字节上是否为预设数据,是则确认自身有权限处理所述APDU数据,否则确认自身没有权限处理所述APDU数据。
可选地,所述步骤S4中,所述当前主安全域执行设置缺省主安全域的数量的操作,具体包括:
所述当前主安全域解析所述第三预个人化命令得到缺省主安全域的数量,并判断得到的缺省主安全域的数量是否正确,是则将当前缺省主安全域的数量更新为得到的缺省主安全域的数量,否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
可选地,所述判断得到的缺省主安全域的数量是否正确,具体为:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
可选地,所述步骤S4中,所述当前主安全域执行设置默认主安全域的操作,具体包括:
所述当前主安全域解析所述第四预个人化命令得到默认主安全域编号,并判断得到的默认主安全域编号是否正确,是则将当前默认主安全域编号更新为得到的默认主安全域编号,否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
可选地,所述判断得到的默认主安全域编号是否正确,具体为:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
可选地,所述步骤S1中,设置所述多个主安全域中的默认主安全域为当前主安全域,具体为:所述操作***读取当前默认主安全域编号,并设置所述当前默认主安全域编号对应的主安全域为当前主安全域。
可选地,所述步骤S4之前,还包括:所述当前主安全域判断卡片的生命周期状态是否为预设状态,是则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2,否则执行步骤S4。
可选地,所述当前主安全域判断卡片的生命周期状态是否为预设状态,具体为:所述当前主安全域判断默认主安全域的生命周期状态是否为预设状态。
可选地,所述方法还包括:
当所述第一命令为第一预个人化命令时,所述当前主安全域根据所述第一预个人化命令设置会话密钥,并通过所述操作***返回设置结果给所述上位机,返回步骤S2;
当所述第一命令为第二预个人化命令时,所述当前主安全域判断所述会话密钥是否设置完成,是则设置卡片的第四状态为安全状态,并通过所述操作***返回设置结果给所述上位机;否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2;
所述步骤S4之前,还包括:所述当前主安全域判断所述第四状态是否为安全状态,是则执行步骤S4;否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
可选地,所述方法还包括:
当所述第二命令为第四个人化命令时,所述当前主安全域修改其初始密钥为私有密钥,并通过所述操作***返回修改结果给所述上位机,返回步骤S2;
当所述第二命令为第五个人化命令时,所述当前主安全域修改其初始标识为私有标识,并通过所述操作***返回修改结果给所述上位机,返回步骤S2;
当所述第二命令为第六个人化命令时,所述当前主安全域执行与所述当前主安全域对应的应用的个人化设置操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2。
可选地,所述步骤S1之前,还包括:操作***读取卡片的第一状态,如果所述第一状态是初始化状态,则执行步骤S1,如果所述第一状态是虚拟机状态,则执行卡片内容管理操作;
相应地,所述步骤S1中,操作***读取缺省主安全域数量,对应创建多个主安全域完成之后,还包括:设置所述第一状态为虚拟机状态;
所述步骤S4中,当通过所述操作***返回成功操作结果给所述上位机时,还包括:设置所述第一状态为初始化状态。
可选地,所述执行卡片内容管理操作,具体为:所述操作***设置当前应用,并派遣接收到的APDU数据到所述当前应用,所述当前应用根据所述APDU数据执行相应操作,并通过所述操作***将操作结果返回给上位机;所述当前应用为主安全域或者安全域或者应用。
另一方面,本发明还提供了一种多主安全域Java智能卡,包括:
创建模块,用于所述Java智能卡复位后,读取缺省主安全域数量,对应创建多个主安全域;
第一设置模块,用于设置所述创建模块创建的多个主安全域中的默认主安全域为当前主安全域;
接收模块,用于等待并接收上位机发送的APDU数据;
派遣模块,用于派遣所述接收模块接收到的APDU数据到所述当前主安全域;
第一判断模块,用于判断所述当前主安全域是否有权限处理所述APDU数据;
第二判断模块,用于当所述第一判断模块判断出所述当前主安全域有权限处理所述APDU数据时,判断所述APDU数据的类型;
第一发送模块,用于当所述第一判断模块判断出所述当前主安全域没有权限处理所述APDU数据时,通过操作***返回非通讯状态码给所述上位机;
第一执行模块,用于当所述第一命令为第三预个人化命令时,执行设置缺省主安全域的数量的操作;
第二执行模块,用于当所述第一命令为第四预个人化命令时,执行设置默认主安全域的操作;
第三执行模块,用于当所述第二命令为第一个人化命令时,执行预加载与所述当前主安全域对应的应用的操作;
第四执行模块,用于当所述第二命令的类型为第二个人化命令时,执行加载与所述当前主安全域对应的应用的操作;
第五执行模块,用于当所述第二命令的类型为第三个人化命令时,执行安装与所述当前主安全域对应的应用的操作;
所述第一发送模块,还用于通过操作***返回所述第一执行模块、所述第二执行模块、所述第三执行模块、所述第四执行模块和所述第五执行模块的操作结果给所述上位机,触发所述接收模块。
可选地,所述智能卡,还包括:
初始化模块,用于当所述Java智能卡首次复位时,所述创建模块读取缺省主安全域数量,对应创建多个主安全域之前,初始化缺省主安全域的数量和默认主安全域编号并保存。
可选地,所述创建模块,具体包括:
读取子模块,用于读取缺省主安全域数量,将其作为当前缺省主安全域数量;
获取子模块,用于获取预置标识和预置密钥;
创建子模块,用于根据所述获取子模块获取到的预置标识和预置密钥创建主安全域;
保存子模块,用于将所述创建子模块创建的主安全域的信息保存到注册表中;
运算子模块,用于将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为所述当前缺省主安全域数量;
判断子模块,用于判断所述当前缺省主安全域数量是否为零;
所述创建子模块,还用于当所述判断子模块判断出所述当前缺省主安全域数量不为零时,根据所述获取子模块获取到的预置标识和预置密钥创建主安全域;
所述第一设置模块,具体用于当所述判断子模块判断出所述当前缺省主安全域数量为零时,设置所述创建子模块创建的多个主安全域中的默认主安全域为当前主安全域。
可选地,所述创建子模块,具体用于:调用主安全域创建函数,将所述预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为所述创建的主安全域的初始标识,将所述预置密钥作为所述创建的主安全域的初始密钥;
所述保存子模块,具体用于将所述初始标识和所述初始密钥填充到注册表中。
可选地,所述智能卡,还包括:第三判断模块、解析模块和第二设置模块;
其中,所述第三判断模块,用于所述派遣模块派遣所述接收模块接收到的APDU数据到当前主安全域之前,判断所述接收模块接收到的APDU数据是否为选择命令;
所述解析模块,用于当所述第三判断模块判断出所述接收模块接收到的APDU数据是选择命令时,解析所述接收到的APDU数据得到主安全域标识;
所述第二设置模块,用于设置所述解析模块得到的主安全域标识对应的主安全域为当前主安全域;
所述接收模块,还用于当所述第二设置模块设置所述主安全域标识对应的主安全域为当前主安全域之后,继续接收APDU数据;
所述派遣模块,还用于当所述第三判断模块判断出所述接收模块接收到的APDU数据不是选择命令时,派遣所述接收模块接收到的APDU数据到所述当前主安全域。
可选地,所述智能卡,还包括:检查模块和第二发送模块;
其中,所述检查模块,用于所述第二设置模块设置所述主安全域标识对应的主安全域为当前主安全域之前,检查卡片中是否存在所述主安全域标识;
所述第二设置模块,具体用于当所述检查模块检查到卡片中存在所述主安全域标识时,设置所述主安全域标识对应的主安全域为当前主安全域;
所述第二发送模块,用于当所述检查模块检查到卡片中不存在所述主安全域标识时,返回非通讯状态码给所述上位机,触发所述接收模块。
可选地,所述第一判断模块,具体用于:判断所述APDU数据的预设字节上是否为预设数据,是则确认所述当前主安全域有权限处理所述APDU数据,否则确认所述当前主安全域没有权限处理所述APDU数据。
可选地,所述第一执行模块,具体包括:
解析子模块,用于解析所述第三预个人化命令得到缺省主安全域的数量;
判断子模块,用于判断所述解析子模块得到的缺省主安全域的数量是否正确;
更新子模块,用于当所述判断子模块判断出所述解析子模块得到的缺省主安全域的数量正确时,将当前缺省主安全域的数量更新为得到的缺省主安全域的数量;
发送子模块,用于当所述判断子模块判断出所述解析子模块得到的缺省主安全域的数量不正确时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
可选地,所述判断子模块,具体用于:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
可选地,所述第二执行模块,具体包括:
解析子模块,用于解析所述第四预个人化命令得到默认主安全域编号;
判断子模块,用于判断所述解析子模块得到的默认主安全域编号是否正确;
更新子模块,用于当所述判断子模块判断出所述解析子模块得到的默认主安全域编号正确时,将当前默认主安全域编号更新为得到的默认主安全域编号;
发送子模块,用于当所述判断子模块判断出所述解析子模块得到的默认主安全域编号不正确时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
可选地,所述判断子模块,具体用于:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
可选地,所述第一设置模块,具体用于:读取当前默认主安全域编号,并设置所述当前默认主安全域编号对应的主安全域为当前主安全域。
可选地,所述智能卡,还包括:第四判断模块;
所述第四判断模块,用于当所述第二判断模块判断出所述APDU数据的类型为第一命令时,判断卡片的生命周期状态是否为预设状态,如果是则继续;
所述第一发送模块,还用于当所述第四判断模块判断出卡片的生命周期状态是预设状态时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
可选地,所述第四判断模块,具体用于:判断默认主安全域的生命周期状态是否为预设状态。
可选地,所述智能卡,还包括:第六执行模块、第五判断模块、第七执行模块和第六判断模块;
其中,所述第六执行模块,用于当所述第一命令为第一预个人化命令时,根据所述第一预个人化命令设置会话秘钥;
所述第五判断模块,用于当所述第一命令为第二预个人化命令时,判断所述会话密钥是否设置完成;
所述第七执行模块,用于当所述第五判断模块判断出所述会话密钥设置完成时,设置卡片的第四状态为安全状态;
所述第六判断模块,用于所述第二判断模块判断出所述APDU数据的类型为第一命令时,判断所述第四状态是否为安全状态,如果是,则继续;
所述第一发送模块,还用于通过所述操作***返回所述第六执行模块和所述第七执行模块的设置结果给所述上位机,触发所述接收模块;还用于当所述第五判断模块判断出所述会话密钥未设置完成时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块;还用于当所述第六判断模块判断出所述第四状态不为安全状态时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
可选地,所述智能卡,还包括:第八执行模块、第九执行模块和第十执行模块;
其中,所述第八执行模块,用于当所述第二命令为第四个人化命令时,修改其初始密钥为私有密钥;
所述第九执行模块,用于当所述第二命令为第五个人化命令时,修改其初始标识为私有标识;
所述第十执行模块,用于当所述第二命令为第六个人化命令时,执行与所述当前主安全域对应的应用的个人化设置操作;
所述第一发送模块,还用于通过所述操作***返回所述第八执行模块和所述第九执行模块的修改结果给所述上位机,触发所述接收模块;还用于通过所述操作***返回所述第十执行模块的操作结果给所述上位机,触发所述接收模块。
可选地,所述智能卡,还包括:读取模块、管理模块和第三设置模块;
其中,所述读取模块,用于所述创建模块读取缺省主安全域数量,对应创建多个主安全域之前,读取卡片的第一状态;
所述创建模块,具体用于当所述读取模块读取到所述第一状态为初始化状态时,读取缺省主安全域数量,对应创建多个主安全域;
所述管理模块,用于当所述读取模块读取到所述第一状态为虚拟机状态时,执行卡片内容管理操作;
所述第三设置模块,用于所述创建模块读取缺省主安全域数量,对应创建多个主安全域完成之后,设置所述第一状态为虚拟机状态;还用于当所述第一发送模块通过所述操作***返回成功操作结果给所述上位机时,设置所述第一状态为初始化状态。
可选地,所述管理模块,具体用于:设置当前应用,并派遣接收到的APDU数据到所述当前应用,所述当前应用根据所述APDU数据执行相应操作,并通过所述操作***将操作结果返回给上位机;所述当前应用为主安全域或者安全域或者应用。
本发明与现有技术相比,具有以下优点:本发明的技术方案,可以使得各应用供应商相互独立的存在于同一张物理卡片中,互不影响,对其自己的应用拥有独立的管理权限。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种多主安全域Java智能卡的平面结构框图;
图2为本发明实施例一提供的一种多主安全域Java智能卡的内容管理示意图;
图3为本发明实施例二提供的一种多主安全域Java智能卡的实现方法流程图;
图4和图5为本发明实施例三提供的一种多主安全域Java智能卡的实现方法中预个人化的流程图;
图6为本发明实施例四提供的一种多主安全域Java智能卡的实现方法中应用供应商个人化的流程图;
图7为本发明实施例五提供的一种多主安全域Java智能卡的模块组成框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本发明实施例一提供一种多主安全域Java智能卡,如图1所示,包括集成在一张物理卡片上的多个相互独立的虚拟卡,以及JavaCard虚拟机、智能卡操作***和智能卡芯片。在本发明中,智能卡操作***以下简称操作***。
其中,JavaCard虚拟机用于解释执行智能卡应用的字节码;操作***用于管理智能卡芯片的各种硬件资源;每个虚拟卡对应一个应用供应商,用于提供应用,并且每个虚拟卡包含一个卡管理器(CardManager),用于控制其对应虚拟卡的资源,提供终端访问对应虚拟卡的安全认证服务,卡管理器又称为发卡商安全域或主安全域。
图2为卡片的内容管理所使用的注册表,当某个虚拟卡创建时,在该注册表中做增加操作;当在某个虚拟卡中增加或删除一个应用或包时,同样找到该注册表,并在注册表中做增加或删除的操作;
需要说明地,每个虚拟卡的应用和包均由自己独立管理,包括下载、安装和删除,在虚拟卡管理其应用和包的过程中,根据需求在智能卡操作***中获取或者退还相应的存储空间,相应地,智能卡操作***将其存储空间做减少或者增加管理。
卡片的发行流程包括:卡片预个人化过程和应用供应商个人化过程;
其中,卡片预个人化过程是指在卡片中创建主安全域的过程,应用供应商个人化过程是指应用供应商通过其对应的主安全域管理其应用的过程,详见实施例二所述的内容。
实施例二
本发明实施二提供一种多主安全域Java智能卡的实现方法,如图3所示,卡片复位后,执行以下操作:
步骤101:操作***读取缺省主安全域数量,对应创建多个主安全域,并设置多个主安全域中的默认主安全域为当前主安全域;
在本实施例中,步骤101具体包括:
步骤A1:操作***读取缺省主安全域数量,将其作为当前缺省主安全域数量,并获取预置标识和预置密钥;
步骤A2:操作***根据获取到的预置标识和预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中;
在本实施例中,根据获取到的预置标识和预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中,具体为:
操作***调用主安全域创建函数,将预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为创建的主安全域的初始标识,将预置密钥作为创建的主安全域的初始密钥,并将初始标识和初始密钥填充到注册表中。
步骤A3:操作***将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为当前缺省主安全域数量;
步骤A4:操作***判断当前缺省主安全域数量是否为零,是则设置多个主安全域中的默认主安全域为当前主安全域,否则返回步骤A2
进一步地,在本实施例中,当卡片首次复位时,步骤101之前,还包括:操作***初始化缺省主安全域的数量和默认主安全域编号并保存。
步骤101中,设置多个主安全域中的默认主安全域为当前主安全域,具体为:操作***读取当前默认主安全域编号,并设置当前默认主安全域编号对应的主安全域为当前主安全域。
步骤102:操作***等待并接收上位机发送的APDU数据,派遣接收到的APDU数据到当前主安全域,当前主安全域判断自身是否有权限处理接收到的APDU数据,是则执行步骤103,否则异常,通过操作***返回非通讯状态码给上位机,继续执行步骤102;
在本实施例中,步骤102中,派遣接收到的APDU数据到当前主安全域之前,还包括:
步骤C1:操作***判断接收到的APDU数据是否为选择命令,是则解析接收到的APDU数据得到主安全域标识,设置主安全域标识对应的主安全域为当前主安全域,执行步骤C2;否则派遣接收到的APDU数据到当前主安全域;
步骤C2:操作***继续接收上位机发送的APDU数据,派遣接收到的APDU数据到当前主安全域。
其中,设置主安全域标识对应的主安全域为当前主安全域之前,还包括:操作***检查卡片中是否存在得到的主安全域标识,是则设置得到的主安全域标识对应的主安全域为当前主安全域,否则异常,返回非通讯状态码给上位机,继续执行步骤102。
进一步地,当前主安全域判断自身是否有权限处理APDU数据,具体为:当前主安全域判断APDU数据的预设字节上是否为预设数据,是则确认自身有权限处理APDU数据,否则确认自身没有权限处理APDU数据。
步骤103:当前主安全域判断APDU数据的类型,如果是第一命令,则执行步骤104;如果是第二命令,则执行步骤105;
在本实施例中,第一命令具体为预个人化命令,第二命令具体为个人化命令。
步骤104:当第一命令为第三预个人化命令时,当前主安全域执行设置缺省主安全域的数量的操作,并通过操作***返回操作结果给上位机,返回步骤102;当第一命令为第四预个人化命令时,当前主安全域执行设置默认主安全域的操作,并通过操作***返回操作结果给上位机,返回步骤102;
在本实施例中,当前主安全域执行设置缺省主安全域的数量的操作,具体包括:
当前主安全域解析第三预个人化命令得到缺省主安全域的数量,并判断得到的缺省主安全域的数量是否正确,是则将当前缺省主安全域的数量更新为得到的缺省主安全域的数量,否则异常,通过操作***返回非通讯状态码给上位机,返回步骤S2。
其中,判断得到的缺省主安全域的数量是否正确,具体为:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
在本实施例中,当前主安全域执行设置默认主安全域的操作,具体包括:
当前主安全域解析第四预个人化命令得到默认主安全域编号,并判断得到的默认主安全域编号是否正确,是则将当前默认主安全域编号更新为得到的默认主安全域编号,否则异常,通过操作***返回非通讯状态码给上位机,返回步骤S2。
其中,判断得到的默认主安全域编号是否正确,具体为:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
相应地,步骤S1中,设置多个主安全域中的默认主安全域为当前主安全域,具体为:操作***读取当前默认主安全域编号,并设置当前默认主安全域编号对应的主安全域为当前主安全域。
进一步地,在本实施例中,步骤104之前,还包括:
当前主安全域判断卡片的生命周期状态是否为预设状态,是则异常,通过操作***返回非通讯状态码给所述上位机,继续执行步骤102,否则执行步骤104。
具体地,所述当前主安全域判断默认主安全域的生命周期状态是否为预设状态。
更进一步地,在本实施例中,还包括:
当第一命令为第一预个人化命令时,当前主安全域根据第一预个人化命令设置会话密钥,并通过操作***返回设置结果给上位机,返回步骤S2;
当第一命令为第二预个人化命令时,当前主安全域判断会话密钥是否设置完成,是则设置卡片的第四状态为安全状态,并通过操作***返回设置结果给上位机;否则异常,通过操作***返回非通讯状态码给上位机,返回步骤S2;
步骤S4之前,还包括:当前主安全域判断第四状态是否为安全状态,是则执行步骤S4;否则异常,通过操作***返回非通讯状态码给上位机,返回步骤S2。
步骤105:当第二命令为第一个人化命令时,当前主安全域执行预加载与自身对应的应用的操作,并通过操作***返回操作结果给上位机,返回步骤102;当第二命令为第二个人化命令时,当前主安全域执行加载与自身对应的应用的操作,并通过操作***返回操作结果给上位机,返回步骤102;当第二命令为第三个人化命令时,当前主安全域执行安装与自身对应的应用的操作,并通过操作***返回操作结果给上位机,返回步骤102。
在本实施例中,还包括:
当第二命令为第四个人化命令时,当前主安全域修改其初始密钥为私有密钥,并通过操作***返回修改结果给上位机,返回步骤S2;
当第二命令为第五个人化命令时,当前主安全域修改其初始标识为私有标识,并通过操作***返回修改结果给上位机,返回步骤S2;
当第二命令为第六个人化命令时,当前主安全域执行与当前主安全域对应的应用的个人化设置操作,并通过操作***返回操作结果给上位机,返回步骤S2。
在本实施例中,步骤101之前,还包括:操作***读取卡片的第一状态,如果第一状态是初始化状态,则执行步骤101,如果第一状态是虚拟机状态,则执行卡片内容管理操作;
相应地,步骤101中,操作***读取缺省主安全域数量,对应创建多个主安全域完成之后,还包括:设置第一状态为虚拟机状态;
步骤104中,当通过所述操作***返回成功操作结果给所述上位机时,还包括:设置第一状态为初始化状态。
其中,执行卡片内容管理操作,具体为:操作***设置当前应用,并派遣接收到的APDU数据到当前应用,当前应用根据APDU数据执行相应操作,并通过所述操作***将操作结果返回给上位机;其中,当前应用为主安全域或者安全域或者应用;
需要说明地,在本发明中,主安全域和安全域均为特殊的应用。
实施例三
本发明实施例三提供一种多主安全域Java智能卡的实现方法中预个人化的实现过程;卡片复位后,操作***读取卡片的第一状态,优选地,卡片的第一状态保存在配置区的第一预设区域中,当其为初始化状态时,进入预个人化过程,如图4和图5所示,包括:
步骤201:操作***读取缺省主安全域数量,将其作为当前缺省主安全域数量;
在本实施例中,当前缺省主安全域数量为待创建主安全域的个数。
进一步地,在本实施例中,当卡片首次复位时,步骤201之前还包括:操作***进行初始化;
具体地,操作***初始化缺省主安全域数量和默认主安全域编号并保存;
优选地,操作***将缺省主安全域数量和默认主安全域编号分别保存到配置区的第二预设区域和第三预设区域中;
在本实施例中,每个主安全域对应一个主安全域编号,默认主安全域编号为主安全域编号中的其中一个,其对应的主安全域为默认主安全域;
需要说明地,在本实施例中,初始化的缺省主安全域数量为不小于1的正整数;
例如,操作***初始化缺省主安全域数量为5个,按照主安全域创建的先后顺序对应的主安全域编号分别为0、1、2、3、4,默认主安全域的编号为2,则操作***将5保存到配置区的第二预设区域中,将2保存到配置区的第三预设区域中;
进一步地,在本实施例中,操作***进行初始化还包括:操作***初始化卡片的第二状态为可配置状态,并保存到配置区中;
优选的,初始化卡片的第二状态为0,并保存到配置区的第四预设区域中;
在本实施例中,操作***进行初始化还包括:初始化卡片的注册表。
步骤202:操作***获取预置标识和预置密钥;
优选地,操作***读取配置区的第五预设区域中的数据,得到预置标识,读取配置区的第六预设区域中的数据,得到预置密钥;
在本实施例中,预置标识和预置密钥在卡片出厂时,预置在卡片的配置区中;
优选的,预置标识为D00000000000000000000000000000 00,预置密钥为404142434445464748494a4b4c4d4e4f。
步骤203:操作***根据获取到的数据创建主安全域并将创建的主安全域的信息保存在注册表中,得到索引编号;
具体地,操作***根据预置在卡片中的主安全域创建函数地址,查找到主安全域创建函数,通过调用主安全域创建函数来创建主安全域;
在本实施例中,步骤203具体为:操作***调用主安全域创建函数,将获取到的预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为创建的主安全域的初始标识;将获取到的预置密钥作为创建的主安全域的初始密钥,并将其分别填充到注册表中同一数据项的第一位置和第二位置中,同时得到索引编号;
在Java卡中,每个主安全域的信息对应于注册表中的一个数据项(一行),并关联一个索引编号,通过索引编号可以索引到注册表中的数据项,从而获取该索引编号关联的主安全域;
进一步地,当创建的主安全域为第M个主安全域时,其关联的索引编号为M-1;即在本实施例中,一个主安全域的主安全域编号同关联该主安全域的索引编号在数值上相同,因此通过主安全域编号同样可以索引到注册表中对应的数据项,进而获取该数据项对应的主安全域。
例如,创建的主安全域为第2个安全域,则其对应的主安全域编号为1,其初始标识为D00000000000000000000000000000 01,其初始密钥为404142434445464748494a4b4c4d4e4f,其关联的索引编号为1。
步骤204:操作***将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为当前缺省主安全域数量;
优选地,在本实施例中,主安全域全部创建完成之后,得到的注册表如表1所示:
表1
需要说明地,主安全域在创建完成时,其生命周期状态均为Ready,并且拥有安全域权限、锁定卡片权限、终止卡片权限、默认选择权限、如表1所示表示为0x9E,并且主安全域关联其自身;
进一步地,当主安全域全部创建完成时,卡片中对应存在5张虚拟卡。
步骤205:操作***判断当前缺省主安全域数量是否为零,是则执行步骤206,否则执行步骤203;
步骤206:操作***设置卡片的第一状态为虚拟机状态并保存;
优选的,操作***设置卡片的第一状态为1,并保存到配置区的第一预设区域中。
步骤207:操作***设置默认主安全域编号对应的主安全域为当前主安全域;
具体地,操作***读取配置区的第三预设区域中的数据得到默认主安全域编号,设置默认主安全域编号对应的主安全域为当前主安全域,执行步骤208;
例如,在本实施例中,读取到的默认主安全域编号为2,设置其对应的主安全域ISD2为当前主安全域,即卡片当前为虚拟卡2,虚拟卡2的应用开发商可以管理其应用。
步骤208:操作***设置卡片的第三状态为通讯状态;
在本实施例中,卡片的第三状态用来标识卡片的状态是否可以通讯;
优选的,操作***设置卡片的第三状态为0x00。
步骤209:操作***判断卡片的第三状态是否为通讯状态,是则执行步骤211,否则执行步骤210;
步骤210:操作***发送卡片的第三状态信息给上位机,返回步骤209;
步骤211:操作***等待并接收上位机发送的APDU数据命令头;
步骤212:操作***接收到上位机发送的APDU数据命令头之后,解析接收到的APDU数据命令头,判断本次接收的APDU数据是否为select命令,是则执行步骤213,否则执行步骤218;
具体地,智能卡操作***解析接收到的APDU数据命令头,判断其INS字节上的数据是否为预设值,如果是,则确认本次接收的APDU数据是select命令,否则,确认本次接收的APDU数据不是select命令;优选的,在本实施例中,预设值为0xA4。
步骤213:操作***继续接收APDU数据,得到完整APDU数据;
在本实施例中,APDU数据的长度不超过18个字节,并且在APDU数据命令头中的P3字节中指定。
步骤214:操作***解析接收到的APDU数据,得到主安全域标识;
步骤215:操作***检查卡片中是否存在得到的主安全域标识,是则执行步骤217,否则,异常,执行步骤216;
具体地,操作***检查注册表中第一位置中的数据,判断是否存在得到的主安全域标识,是则执行步骤217,否则,异常,执行步骤216。
步骤216:操作***设置第三状态为非通讯状态,返回步骤209;
优选的,操作***设置第三状态为0x6A82。
步骤217:操作***设置得到的主安全域标识对应的主安全域为当前主安全域,执行步骤218;
步骤218:操作***继续接收APDU数据,并在接受完成之后,派遣完整的APDU数据到当前主安全域;
步骤219:当前主安全域判断接收到的APDU数据的类型,如果是第一预个人化命令,则执行步骤220,如果是第二预个人化命令,则执行步骤221,如果是第三预个人化命令,则执行步骤223,如果是第四预个人化命令,则执行步骤230;
在本实施例中,操作***判断接收到的APDU数据的类型,具体为:操作***判断接收到的APDU数据中INS字节上的数据类型,如果是0x50,则确认接收到的APDU数据为第一预个人化命令,如果是0x82,则确认接收到的APDU数据为第二预个人化命令,如果是0xE2,则继续读取Ln字节的数据,当其为df81时,则确认接收到的APDU数据为第三预个人化命令,当其为df82时,则确认接收到的APDU数据为第四预个人化命令。
进一步地,在本实施例中,APDU数据还可以为个人化命令,当前主安全域对个人化命令的处理过程具体为应用供应商个人化的过程,具体地在实施例四中进行详述。
步骤220:当前主安全域根据接收到的第一预个人化命令,设置会话密钥,如果设置成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果设置失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
在本实施例中,当前主安全域将状态码或者错误码通过操作***返回给上位机,具体为:当前主安全域将状态码或者错误码返回给操作***,操作***将接收到的状态码或者错误码返回给上位机。
步骤221:当前主安全域判断会话密钥是否设置完成,是则执行步骤222,否则返回步骤216;
步骤222:当前主安全域设置卡片的第四状态为安全状态,如果设置成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果设置失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
优选地,当前主安全域设置卡片的第四状态为预设值0x80;
在本实施例中,第一预个人化命令和第二预个人化命令具体为安全认证操作,执行安全认证操作的详细过程在此不再赘述。
步骤223:当前主安全域检查卡片的生命周期状态是否为锁定状态或者终止状态,是则返回步骤216,否则执行步骤224;
在本实施例中,卡片的生命周期状态与默认主安全域的生命周期状态等同;
步骤223具体为:当前主安全域读取默认主安全域编号,并索引到其对应的主安全域,读取对应的数据项中第三位置中的数据,判断其是否为Locked或者Terminated,是则返回步骤216,否则执行步骤224;
例如,在本实施例中,当前主安全域读取默认主安全域编号2,在表1中,索引到其关联的主安全域ISD2,读取主安全域ISD2对应的数据项中第三位置中的数据Ready,则执行步骤224。
步骤224:当前主安全域判断卡片的第四状态是否为安全状态,是则执行步骤225,否则返回步骤216;
具体地,当前主安全域判断卡片的第四状态是否为预设值,如果是,则确认卡片的第四状态是安全状态,否则,确认卡片的第四状态不是安全状态,优选地,在本实施例中,所述预设值为0x80。
步骤225:当前主安全域判断接收到的APDU数据中预设字节上的数据是否为预设数据,是则执行步骤226,否则返回步骤216;
在本实施例中,第三预个人化命令的数据域为TLV(Tn,Ln,Vn)结构的数据;
步骤225具体为:当前主安全域判断接收到的APDU数据中Tn字节上的数据是否为预设数据,是则执行步骤226,否则返回步骤216;优选的,在本实施中,预设数据为df80。
步骤226:当前主安全域获取卡片的第二状态,判断其是否为可配置状态,是则执行步骤227,否则返回步骤216;
步骤227:当前主安全域解析接收到的APDU数据,获取缺省主安全域数量;
具体地,当前主安全域解析接收到的APDU数据,读取其Vn字节上的数据,得到缺省主安全域数量。
步骤228:当前主安全域判断获取到的缺省主安全域数量是否正确,是则执行步骤229,否则返回步骤216;
具体地,当前主安全域判断Vn字节上的数据是否为大于1的整数,如果是,则确认获取到的缺省主安全域数量正确,否则,确认获取到的缺省主安全域数量错误;
例如,在本实施例中,获取到的缺省主安全域的数量为7,则正确。
步骤229:当前主安全域更新当前缺省主安全域数量为获取到的缺省主安全域数量,如果设置成功,则执行步骤237,如果设置失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
具体地,当前主安全域将配置区的第二预设区域中的数据更新为获取到的缺省主安全域数量;
例如,在本实施例中,当前主安全域将当前缺省主安全域的数量5更新为获取到的缺省主安全域的数量7;
进一步地,在本实施例中,在卡片复位时,更新的数据生效,进入预个人化过程,操作***根据当前缺省主安全域数量,执行创建主安全域操作。
步骤230:当前主安全域检查卡片的生命周期状态是否为锁定状态或者终止状态,是则返回步骤216,否则执行步骤231;
在本实施例中,卡片的生命周期状态与默认主安全域的生命周期状态等同;
步骤230具体为:当前主安全域读取默认主安全域编号,并索引到其对应的主安全域,读取对应的数据项中第三位置中的数据,判断其是否为Locked或者Terminated,是则返回步骤216,否则执行步骤231;
例如,在本实施例中,当前主安全域读取默认主安全域编号2,在表1中,索引到其关联的主安全域ISD2,读取主安全域ISD2对应的数据项中第三位置中的数据Ready,则执行步骤231。
步骤231:当前主安全域判断卡片的第四状态是否为安全状态,是则执行步骤232,否则返回步骤216;
具体地,当前主安全域判断卡片的第四状态是否为预设值,如果是,则确认卡片的第四状态是安全状态,否则,确认卡片的第四状态不是安全状态,优选地,在本实施例中,所述预设值为0x80。
步骤232:当前主安全域判断接收到的APDU数据中预设字节上的数据是否为预设数据,是则执行步骤233,否则返回步骤216;
在本实施例中,第四预个人化命令的数据域为TLV(Tn,Ln,Vn)结构的数据;
步骤232具体为:当前主安全域判断接收到的APDU数据中Tn字节上的数据是否为预设数据,是则执行步骤233,否则返回步骤216;优选的,在本实施中,预设数据为df80。
步骤233:当前主安全域获取卡片的第二状态,判断其是否为可配置状态,是则执行步骤234,否则返回步骤216;
步骤234:当前主安全域解析接收到的APDU数据,获取默认主安全域编号;
具体地,当前主安全域解析接收到的APDU数据,读取其Vn字节上的数据,得到默认主安全域编号。
步骤235:当前主安全域判断获取到的默认主安全域编号是否正确,是则执行步骤236,否则返回步骤216;
具体地,当前主安全域判断Vn字节上的数据是否为卡片中当前包含的主安全域编号中的其中一个,如果是,则确认获取到的默认主安全域编号正确,否则,确认获取到的默认主安全域编号错误;
例如,在本实施例中,获取到的默认主安全域编号为3,判断出其是卡片中当前包含的主安全域编号0、1、2、3、4中的一个,则确认获取到的默认主安全域编号正确。
步骤236:当前主安全域更新默认主安全域编号为获取到的默认主安全域编号,如果设置成功,则执行步骤237,如果设置失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
具体地,当前主安全域将配置区的第三预设区域中的数据更新为获取到的默认主安全域编号;
例如,在本实施例中,更新第三预设区域中的数据2为获取到的默认主安全域编号3。
需要说明地,当卡片重新复位时,更新的数据生效。
步骤237:当前主安全域设置卡片的第一状态为需要初始化状态,生成相应状态码并通过操作***返回给上位机,返回步骤209;
进一步地,在本实施例中,操作***读取卡片的第一状态,当其为虚拟机状态时,执行卡片内容管理操作;
优选地,操作***读取配置区的第一预设区域中的数据,当其为1时,确认卡片的第一状态为虚拟机状态,否则确认卡片的第一状态为初始化状态;
在本实施例中,执行卡片内容管理操作,具体为:操作***设置当前应用,并派遣接收到的APDU数据到当前应用,当前应用根据APDU数据执行相应操作,并将操作结果返回给上位机;
在本实施例中,当前应用可以为主安全域或者安全域或者应用。
需要说明地,在本实施例中,主安全域和安全域均为特殊的应用。
本实施例中的方法,实现了卡片预个人化的过程,即实现了根据需求在一张物理卡片上创建多个虚拟卡的过程。
实施例四
本发明实施例四提供一种多主安全域Java智能卡的实现方法中应用供应商个人化的实现过程,如图6所示,具体包括:
步骤301:当前主安全域判断APDU数据的类型,当接收到第一个人化命令时,执行步骤302-1,当接收到第二个人化命令时,执行步骤303-1,当接收到第三个人化命令时,执行步骤304-1,当接收到第四个人化命令时,执行步骤305,当接收到第五个人化命令时,执行步骤306,当接收到第六个人化命令时,执行步骤307;
步骤302-1:当前主安全域判断接收到的第一个人化命令是否合法,是则执行步骤302-2,否则数据错误,生成相应错误码并通过操作***返回给上位机,返回步骤209;
在本实施例中,第一个人化命令的数据域部分可看作是由多个数据块组成的,每个数据块都是一个LV结构,即数据长度+数据的结构;
具体地,当前主安全域判断第一个人化命令的数据域中各数据块是否均符合预设要求,是则确认第一个人化命令合法,否则确认第一个人化命令不合法。
步骤302-2:当前主安全域解析第一个人化命令,得到加载文件标识、加载文件关联安全域标识、加载文件哈希值和加载令牌;
具体地,当前主安全域解析第一个数据块得到加载文件标识,解析第二个数据块得到加载文件关联安全域标识,解析第三个数据块得到加载文件哈希值并存储,解析第四个数据块得到加载令牌。
步骤302-3:当前主安全域创建注册表数据项,并将解析得到的加载文件标识和加载文件关联安全域标识填充到创建的注册表数据项中,初始化卡片内的全局块编号,如果操作成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果操作失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
在本实施例中,当前主安全域创建注册表数据项,具体为在注册表中增加一行;
进一步地,在本实施例中,步骤302-3之前,还包括:验证加载令牌是否正确,是则执行步骤302-3,否则生成相应错误码并返回给上位机,返回步骤209。
进一步地,在本实施例中,当前主安全域将状态码或者错误码通过操作***返回给上位机,具体为:当前主安全域将状态码或者错误码返回给操作***,操作***将接收到的状态码或者错误码返回给上位机。
步骤303-1:当前主安全域判断第二个人化命令是否合法,是则执行步骤303-2,否则数据错误,生成相应错误码并返回给上位机,返回步骤209;
具体地,当前主安全域判断第二个人化命令的第四个字节上的数据是否与卡片内的全局块编号相同,是则确认第二个人化命令合法,否则确认第二个人化命令不合法。
步骤303-2:当前主安全域解析第二个人化命令得到加载文件数据块并存储,将存储地址填充到注册表数据项中;
在本实施例中,加载文件在卡片外被分割成若干个加载文件数据块,每次将一个加载文件数据块封装成一条APDU数据发送给卡片。
步骤303-3:当前主安全域判断加载文件数据块是否为加载文件的最后一个加载文件数据块,是则执行步骤303-4,否则返回步骤303-2;
优选地,应用程序判断第二个人化命令的第三个字节上的数据是否为0x80,是则确认加载文件数据块是加载文件的最后一个加载文件数据块,否则确认加载文件数据块不是加载文件的最后一个加载文件数据块.
步骤303-4:当前主安全域验证所有加载文件数据块的哈希值是否正确,是则加载成功,生成相应状态码并通过操作***返回给上位机,返回步骤209,否则加载失败,生成相应错误码并通过操作***返回给上位机,返回步骤209;
具体第,当前主安全域将卡片内存储的全部加载文件数据块进行哈希计算得到计算结果,判断计算结果与卡片中存储的加载文件哈希值是否相同,是则确认所有加载文件数据块的哈希值正确,否则确认所有加载文件数据块哈希值不正确。
步骤304-1;当前主安全域判断第三个人化命令是否合法,是则执行步骤304-2,否则数据错误,生成相应错误码并通过操作***返回给上位机,返回步骤209;
在本实施例中,第三个人化命令的数据域部分可看作是由多个数据块组成的,每个数据块都是一个LV结构,即数据长度+数据的结构;
具体地,当前主安全域判断第三个人化命令中各数据块是否均符合预设要求,是则确认第三个人化命令合法,否则确认第三个人化命令不合法。
步骤304-2:当前主安全域解析第三个人化命令,得到可执行加载文件标识、可执行模块标识、应用标识、应用权限、安装参数和安装令牌;
具体地,当前主安全域解析第一个数据块得到可执行加载文件标识,解析第二个数据块得到可执行模块标识,解析第三个数据块得到应用标识,解析第四个数据块得到应用权限,解析第五个数据块得到安装参数,解析第六个数据块得到安装令牌。
步骤304-3:当前主安全域判断待安装应用对应的加载文件是否已加载至卡片中,是则执行步骤304-4;否则生成相应错误码并返回给上位机,返回步骤209;
步骤304-4:当前主安全域判断待安装应用对应的加载文件中是否包含与可执行模块标识对应的可执行模块,是则执行步骤304-5,否则生成相应错误码并返回给上位机,返回步骤209;
步骤304-5:当前主安全域根据解析得到的数据安装应用,如果安装成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果安装失败,则生成相应错误码码并通过操作***返回给上位机,返回步骤209;
具体地,当前主安全域创建与解析得到的可执行模块标识对应的可执行模块的一个实例,将该实例与解析得到的应用标识唯一关联,设置该实例的状态为初始值,根据解析得到的应用权限设置该实例的权限,并设置该实例的关联安全域为与解析得到的可执行加载文件标识对应的可执行加载文件的关联安全域。
在本实施例中,当安装的应用具有默认选择权限时,还包括:当前主安全域设置安装的应用为默认应用,且在卡片复位后生效;
进一步地,在本实施例中,步骤304-5之前,还包括:当前主安全域验证安装令牌是否正确,是则继续,否则生成相应错误码并返回给上位机,返回步骤209;
更进一步地,在本实施例中,当第三个人化命令为密文数据时,步骤304-1之前还包括:当前主安全域判断其初始密钥是否已修改,是则使用其私有密钥解密第三个人化命令,继续;否则生成相应错误码并返回给上位机,返回步骤209。
步骤305:当前主安全域将其预个人化过程中的初始密钥修改为私有密钥,如果修改成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果修改失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209;
在本实施例中,将初始密钥修改为私有密钥,以保证其他虚拟卡的应用供应商无权管理当前主安全域对应的虚拟卡;
例如,当前主安全域为通过select命令选择的ISD3,ISD3将其初始密钥404142434445464748494a4b4c4d4e4f修改为私有密钥585152545455565758595a5b5c565e5f。
步骤306:当前主安全域将其预个人化过程中的初始标识修改为私有标识;如果修改成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果修改失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209
在本实施例中,将初始标识修改为私有标识,以保证其他虚拟卡的应用供应商无权管理当前主安全域对应的虚拟卡;
例如,当前主安全域为通过select命令选择的ISD3,ISD3将其初始标识D00000000000000000000000000000 03修改为私有标识D0000000000953264821036548921003。
步骤307:当前主安全域根据待个人化应用的应用标识调用该应用,执行进程数据方法,完成应用个人化操作,如果操作成功,则生成相应状态码并通过操作***返回给上位机,返回步骤209;如果操作失败,则生成相应错误码并通过操作***返回给上位机,返回步骤209。
具体地,卡片执行接口Application中的进程数据方法processdata(),并将个人化数据作为参数传入进程数据方法中;例如,个人化数据为持卡人信息。
通过本实施例中的方法,实现了应用供应商个人化的过程,使应用供应商能够独立的、有效的管理其应用。
实施例五
本发明实施例五提供一种多主安全域Java智能卡,如图7所示,包括:
创建模块501,用于Java智能卡复位后,读取缺省主安全域数量,对应创建多个主安全域;
第一设置模块502,用于设置创建模块501创建的多个主安全域中的默认主安全域为当前主安全域;
接收模块503,用于等待并接收上位机发送的APDU数据;
派遣模块504,用于派遣接收模块503接收到的APDU数据到当前主安全域;
第一判断模块505,用于判断当前主安全域是否有权限处理APDU数据;
第二判断模块506,用于当第一判断模块505判断出当前主安全域有权限处理APDU数据时,判断APDU数据的类型;
第一发送模块507,用于当第一判断模块505判断出当前主安全域没有权限处理APDU数据时,通过操作***返回非通讯状态码给上位机;
第一执行模块508,用于当第一命令为第三预个人化命令时,执行设置缺省主安全域的数量的操作;
第二执行模块509,用于当第一命令为第四预个人化命令时,执行设置默认主安全域的操作;
第三执行模块510,用于当第二命令为第一个人化命令时,执行预加载与当前主安全域对应的应用的操作;
第四执行模块511,用于当第二命令为第二个人化命令时,执行加载与当前主安全域对应的应用的操作;
第五执行模块512,用于当第二命令为第三个人化命令时,执行安装与当前主安全域对应的应用的操作;
第一发送模块507,还用于通过操作***返回第一执行模块508、第二执行模块509、第三执行模块510、第四执行模块511和第五执行模块512的操作结果给上位机,触发接收模块503。
本实施例中的智能卡,还包括:
初始化模块,用于当Java智能卡首次复位时,创建模块501读取缺省主安全域数量,对应创建多个主安全域之前,初始化缺省主安全域的数量和默认主安全域编号并保存。
在本实施例中,创建模块501,具体包括:
读取子模块,用于读取缺省主安全域数量,将其作为当前缺省主安全域数量;
获取子模块,用于获取预置标识和预置密钥;
创建子模块,用于根据获取子模块获取到的预置标识和预置密钥创建主安全域;
保存子模块,用于将创建子模块创建的主安全域的信息保存到注册表中;
运算子模块,用于将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为当前缺省主安全域数量;
判断子模块,用于判断当前缺省主安全域数量是否为零;
创建子模块,还用于当判断子模块判断出当前缺省主安全域数量不为零时,根据获取子模块获取到的预置标识和预置密钥创建主安全域;
相应地,第一设置模块502,具体用于当判断子模块判断出当前缺省主安全域数量为零时,设置创建子模块创建的多个主安全域中的默认主安全域为当前主安全域。
在本实施例中,创建子模块,具体用于:调用主安全域创建函数,将预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为创建的主安全域的初始标识,将预置密钥作为创建的主安全域的初始密钥;
相应地,保存子模块,具体用于将初始标识和初始密钥填充到注册表中。
本实施例中的智能卡,还包括:第三判断模块、解析模块和第二设置模块;
其中,第三判断模块,用于派遣模块504派遣接收模块503接收到的APDU数据到当前主安全域之前,判断接收模块503接收到的APDU数据是否为选择命令;
解析模块,用于当第三判断模块判断出接收模块503接收到的APDU数据是选择命令时,解析接收到的APDU数据得到主安全域标识;
第二设置模块,用于设置解析模块得到的主安全域标识对应的主安全域为当前主安全域;
接收模块503,还用于当第二设置模块设置主安全域标识对应的主安全域为当前主安全域之后,继续接收APDU数据;
派遣模块504,还用于当第三判断模块判断出接收模块503接收到的APDU数据不是选择命令时,派遣接收模块接收到的APDU数据到当前主安全域。
本实施例中的智能卡,还包括:检查模块和第二发送模块;
其中,检查模块,用于第二设置模块设置主安全域标识对应的主安全域为当前主安全域之前,检查卡片中是否存在得到的主安全域标识;
第二设置模块,具体用于当检查模块检查到卡片中存在得到的主安全域标识时,设置主安全域标识对应的主安全域为当前主安全域;
第二发送模块,用于当检查模块检查到卡片中不存在主安全域标识时,返回非通讯状态码给上位机,触发接收模块503。
在本实施例中,第一判断模块505,具体用于:判断APDU数据的预设字节上是否为预设数据,是则确认当前主安全域有权限处理APDU数据,否则确认当前主安全域没有权限处理APDU数据。
在本实施例中,第一执行模块508,具体包括:
解析子模块,用于解析第三预个人化命令得到缺省主安全域的数量;
判断子模块,用于判断解析子模块得到的缺省主安全域的数量是否正确;
更新子模块,用于当判断子模块判断出解析子模块得到的缺省主安全域的数量正确时,将当前缺省主安全域的数量更新为得到的缺省主安全域的数量;
发送子模块,用于当判断子模块判断出解析子模块得到的缺省主安全域的数量不正确时,通过操作***返回非通讯状态码给上位机,触发接收模块503。
在本实施例中,判断子模块,具体用于:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
在本实施例中,第二执行模块509,具体包括:
解析子模块,用于解析第四预个人化命令得到默认主安全域编号;
判断子模块,用于判断解析子模块得到的默认主安全域编号是否正确;
更新子模块,用于当判断子模块判断出解析子模块得到的默认主安全域编号正确时,将当前默认主安全域编号更新为得到的默认主安全域编号;
发送子模块,用于当判断子模块判断出解析子模块得到的默认主安全域编号不正确时,通过操作***返回非通讯状态码给上位机,触发接收模块503。
在本实施例中,判断子模块,具体用于:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
相应地,第一设置模块502,具体用于:读取当前默认主安全域编号,并设置当前默认主安全域编号对应的主安全域为当前主安全域。
本实施例中的智能卡,还包括:第四判断模块;
第四判断模块,用于当所述第二判断模块506判断出APDU数据的类型为第一命令时,判断卡片的生命周期状态是否为预设状态,如果是则继续;
第一发送模块507,还用于当第六四判断模块判断出卡片的生命周期状态是预设状态时,通过操作***返回非通讯状态码给上位机,触发接收模块503。
第四判断模块,具体用于:判断默认主安全域的生命周期状态是否为预设状态。
本实施例中的智能卡,还包括:第六执行模块、第五判断模块、第七执行模块和第六判断模块;
其中,第六执行模块,用于当第一命令为第一预个人化命令时,根据第一预个人化命令设置会话秘钥;
第五判断模块,用于当第一命令为第二预个人化命令时,判断会话密钥是否设置完成;
第七执行模块,用于当第五判断模块判断出会话密钥设置完成时,设置卡片的第四状态为安全状态;
第六判断模块,用于第二判断模块506判断出APDU数据的类型为第一命令时,判断第四状态是否为安全状态,如果是,则继续;
第一发送模块507,还用于通过操作***返回第六执行模块和第七执行模块的设置结果给上位机,触发接收模块503;还用于当第五判断模块判断出会话密钥未设置完成时,通过操作***返回非通讯状态码给上位机,触发接收模块503;还用于当第六判断模块判断出第四状态不为安全状态时,通过操作***返回非通讯状态码给上位机,触发接收模块503。
本实施例中的智能卡,还包括:第八执行模块、第九执行模块和第十执行模块;
其中,第八执行模块,用于当第二命令为第四个人化命令时,修改其初始密钥为私有密钥;
第九执行模块,用于当第二命令为第五个人化命令时,修改其初始标识为私有标识;
第十执行模块,用于当第二命令为第六个人化命令时,执行与当前主安全域对应的应用的个人化设置操作;
第一发送模块507,还用于通过操作***返回第八执行模块和第九执行模块的修改结果给上位机,触发接收模块503;还用于通过操作***返回第十执行模块的操作结果给上位机,触发接收模块503。
本实施例中的智能卡,还包括:读取模块、管理模块和第三设置模块;
其中,读取模块,用于创建模块501读取缺省主安全域数量,对应创建多个主安全域之前,读取卡片的第一状态;
创建模块501,具体用于当读取模块读取到第一状态为初始化状态时,读取缺省主安全域数量,对应创建多个主安全域;
管理模块,用于当读取模块读取到第一状态为虚拟机状态时,执行卡片内容管理操作;
第三设置模块,用于创建模块501读取缺省主安全域数量,对应创建多个主安全域完成之后,设置第一状态为虚拟机状态;还用于当第一发送模块507通过操作***返回成功操作结果给上位机时,设置第一状态为初始化状态。
在本实施例中,管理模块,具体用于:设置当前应用,并派遣接收到的APDU数据到当前应用,当前应用根据APDU数据执行相应操作,并通过操作***将操作结果返回给上位机;当前应用为主安全域或者安全域或者应用。
需要说明地,在本本发明中,主安全域和安全域均为特殊的应用。
本发明的技术方案,可以使得各应用发行商相互独立的存在于同一张物理卡片中,互不影响,并对其自己的应用拥有独立的管理权限。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (36)
1.一种多主安全域Java智能卡实现方法,其特征在于,所述Java智能卡复位后,执行以下操作:
步骤S1:操作***读取缺省主安全域数量,对应创建多个主安全域,并设置所述多个主安全域中的默认主安全域为当前主安全域;
步骤S2:操作***等待并接收上位机发送的APDU数据,派遣接收到的APDU数据到所述当前主安全域,所述当前主安全域判断自身是否有权限处理所述APDU数据,是则执行步骤S3,否则异常,通过操作***返回非通讯状态码给所述上位机,继续执行步骤S2;
步骤S3:所述当前主安全域判断所述APDU数据的类型,如果是第一命令,则执行步骤S4;如果是第二命令,则执行步骤S5;
步骤S4:当所述第一命令为第三预个人化命令时,所述当前主安全域执行设置缺省主安全域的数量的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第一命令为第四预个人化命令时,所述当前主安全域执行设置默认主安全域的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;
步骤S5:当所述第二命令为第一个人化命令时,所述当前主安全域执行预加载与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第二命令为第二个人化命令时,所述当前主安全域执行加载与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2;当所述第二命令为第三个人化命令时,所述当前主安全域执行安装与自身对应的应用的操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2。
2.根据权利要求1所述的方法,其特征在于,当所述Java智能卡首次复位时,所述步骤S1之前,还包括:
所述操作***初始化缺省主安全域的数量和默认主安全域编号并保存。
3.根据权利要求1所述的方法,其特征在于,所述步骤S1中,所述读取缺省主安全域数量,对应创建多个主安全域,具体包括:
步骤A1:所述操作***读取缺省主安全域数量,将其作为当前缺省主安全域数量,并获取预置标识和预置密钥;
步骤A2:所述操作***根据所述预置标识和所述预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中;
步骤A3:所述操作***将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为所述当前缺省主安全域数量;
步骤A4:所述操作***判断所述当前缺省主安全域数量是否为零,是则设置所述多个主安全域中的默认主安全域为当前主安全域,否则返回步骤A2。
4.根据权利要求3所述的方法,其特征在于,所述步骤A2中,根据所述预置标识和所述预置密钥创建主安全域并将创建的主安全域的信息保存到注册表中,具体为:
所述操作***调用主安全域创建函数,将所述预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为所述创建的主安全域的初始标识,将所述预置密钥作为所述创建的主安全域的初始密钥,并将所述初始标识和所述初始密钥填充到注册表中。
5.根据权利要求1所述的方法,其特征在于,所述步骤S2中,派遣接收到的APDU数据到当前主安全域之前,还包括:
步骤C1:所述操作***判断接收到的APDU数据是否为选择命令,是则解析所述接收到的APDU数据得到主安全域标识,设置所述主安全域标识对应的主安全域为当前主安全域,执行步骤C2;否则派遣接收到的APDU数据到所述当前主安全域;
步骤C2:所述操作***继续接收上位机发送的APDU数据,派遣接收到的APDU数据到所述当前主安全域。
6.根据权利要求5所述的方法,其特征在于,所述设置所述主安全域标识对应的主安全域为当前主安全域之前,还包括:所述操作***检查卡片中是否存在所述主安全域标识,是则设置所述主安全域标识对应的主安全域为当前主安全域,否则异常,返回非通讯状态码给所述上位机,返回行步骤S2。
7.根据权利要求1所述的方法,其特征在于,所述当前主安全域判断自身是否有权限处理所述APDU数据,具体为:所述当前主安全域判断所述APDU数据的预设字节上是否为预设数据,是则确认自身有权限处理所述APDU数据,否则确认自身没有权限处理所述APDU数据。
8.根据权利要求1所述的方法,其特征在于,所述步骤S4中,所述当前主安全域执行设置缺省主安全域的数量的操作,具体包括:
所述当前主安全域解析所述第三预个人化命令得到缺省主安全域的数量,并判断得到的缺省主安全域的数量是否正确,是则将当前缺省主安全域的数量更新为得到的缺省主安全域的数量,否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
9.根据权利要求8所述的方法,其特征在于,所述判断得到的缺省主安全域的数量是否正确,具体为:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
10.根据权利要求1所述的方法,其特征在于,所述步骤S4中,所述当前主安全域执行设置默认主安全域的操作,具体包括:
所述当前主安全域解析所述第四预个人化命令得到默认主安全域编号,并判断得到的默认主安全域编号是否正确,是则将当前默认主安全域编号更新为得到的默认主安全域编号,否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
11.根据权利要求10所述的方法,其特征在于,所述判断得到的默认主安全域编号是否正确,具体为:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
12.根据权利要求2或10所述的方法,其特征在于,所述步骤S1中,设置所述多个主安全域中的默认主安全域为当前主安全域,具体为:所述操作***读取当前默认主安全域编号,并设置所述当前默认主安全域编号对应的主安全域为当前主安全域。
13.根据权利要求1所述的方法,其特征在于,所述步骤S4之前,还包括:所述当前主安全域判断卡片的生命周期状态是否为预设状态,是则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2,否则执行步骤S4。
14.根据权利要求13所述的方法,其特征在于,所述当前主安全域判断卡片的生命周期状态是否为预设状态,具体为:所述当前主安全域判断默认主安全域的生命周期状态是否为预设状态。
15.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述第一命令为第一预个人化命令时,所述当前主安全域根据所述第一预个人化命令设置会话密钥,并通过所述操作***返回设置结果给所述上位机,返回步骤S2;
当所述第一命令为第二预个人化命令时,所述当前主安全域判断所述会话密钥是否设置完成,是则设置卡片的第四状态为安全状态,并通过所述操作***返回设置结果给所述上位机;否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2;
所述步骤S4之前,还包括:所述当前主安全域判断所述第四状态是否为安全状态,是则执行步骤S4;否则异常,通过所述操作***返回非通讯状态码给所述上位机,返回步骤S2。
16.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述第二命令为第四个人化命令时,所述当前主安全域修改其初始密钥为私有密钥,并通过所述操作***返回修改结果给所述上位机,返回步骤S2;
当所述第二命令为第五个人化命令时,所述当前主安全域修改其初始标识为私有标识,并通过所述操作***返回修改结果给所述上位机,返回步骤S2;
当所述第二命令为第六个人化命令时,所述当前主安全域执行与所述当前主安全域对应的应用的个人化设置操作,并通过所述操作***返回操作结果给所述上位机,返回步骤S2。
17.根据权利要求1所述的方法,其特征在于,所述步骤S1之前,还包括:操作***读取卡片的第一状态,如果所述第一状态是初始化状态,则执行步骤S1,如果所述第一状态是虚拟机状态,则执行卡片内容管理操作;
所述步骤S1中,操作***读取缺省主安全域数量,对应创建多个主安全域完成之后,还包括:设置所述第一状态为虚拟机状态;
所述步骤S4中,当通过所述操作***返回成功操作结果给所述上位机时,还包括:设置所述第一状态为初始化状态。
18.根据权利要求17所述的方法,其特征在于,所述执行卡片内容管理操作,具体为:所述操作***设置当前应用,并派遣接收到的APDU数据到所述当前应用,所述当前应用根据所述APDU数据执行相应操作,并通过所述操作***将操作结果返回给上位机;所述当前应用为主安全域或者安全域或者应用。
19.一种多主安全域Java智能卡,其特征在于,包括:
创建模块,用于所述Java智能卡复位后,读取缺省主安全域数量,对应创建多个主安全域;
第一设置模块,用于设置所述创建模块创建的多个主安全域中的默认主安全域为当前主安全域;
接收模块,用于等待并接收上位机发送的APDU数据;
派遣模块,用于派遣所述接收模块接收到的APDU数据到所述当前主安全域;
第一判断模块,用于判断所述当前主安全域是否有权限处理所述APDU数据;
第二判断模块,用于当所述第一判断模块判断出所述当前主安全域有权限处理所述APDU数据时,判断所述APDU数据的类型;
第一发送模块,用于当所述第一判断模块判断出所述当前主安全域没有权限处理所述APDU数据时,通过操作***返回非通讯状态码给所述上位机;
第一执行模块,用于当所述第一命令为第三预个人化命令时,执行设置缺省主安全域的数量的操作;
第二执行模块,用于当所述第一命令为第四预个人化命令时,执行设置默认主安全域的操作;
第三执行模块,用于当所述第二命令为第一个人化命令时,执行预加载与所述当前主安全域对应的应用的操作;
第四执行模块,用于当所述第二命令为第二个人化命令时,执行加载与所述当前主安全域对应的应用的操作;
第五执行模块,用于当所述第二命令为第三个人化命令时,执行安装与所述当前主安全域对应的应用的操作;
所述第一发送模块,还用于通过操作***返回所述第一执行模块、所述第二执行模块、所述第三执行模块、所述第四执行模块和所述第五执行模块的操作结果给所述上位机,触发所述接收模块。
20.根据权利要求19所述的智能卡,其特征在于,还包括:
初始化模块,用于当所述Java智能卡首次复位时,所述创建模块读取缺省主安全域数量,对应创建多个主安全域之前,初始化缺省主安全域的数量和默认主安全域编号并保存。
21.根据权利要求19所述的智能卡,其特征在于,所述创建模块,具体包括:
读取子模块,用于读取缺省主安全域数量,将其作为当前缺省主安全域数量;
获取子模块,用于获取预置标识和预置密钥;
创建子模块,用于根据所述获取子模块获取到的预置标识和预置密钥创建主安全域;
保存子模块,用于将所述创建子模块创建的主安全域的信息保存到注册表中;
运算子模块,用于将当前缺省主安全域数量减一得到运算结果,将得到的运算结果作为所述当前缺省主安全域数量;
判断子模块,用于判断所述当前缺省主安全域数量是否为零;
所述创建子模块,还用于当所述判断子模块判断出所述当前缺省主安全域数量不为零时,根据所述获取子模块获取到的预置标识和预置密钥创建主安全域;
所述第一设置模块,具体用于当所述判断子模块判断出所述当前缺省主安全域数量为零时,设置所述创建子模块创建的多个主安全域中的默认主安全域为当前主安全域。
22.根据权利要求21所述的智能卡,其特征在于,
所述创建子模块,具体用于:调用主安全域创建函数,将所述预置标识的最后一个字节替换为创建的主安全域的主安全域编号,作为所述创建的主安全域的初始标识,将所述预置密钥作为所述创建的主安全域的初始密钥;
所述保存子模块,具体用于:将所述初始标识和所述初始密钥填充到注册表中。
23.根据权利要求19所述的智能卡,其特征在于,还包括:第三判断模块、解析模块和第二设置模块;
所述第三判断模块,用于所述派遣模块派遣所述接收模块接收到的APDU数据到当前主安全域之前,判断所述接收模块接收到的APDU数据是否为选择命令;
所述解析模块,用于当所述第三判断模块判断出所述接收模块接收到的APDU数据是选择命令时,解析所述接收到的APDU数据得到主安全域标识;
所述第二设置模块,用于设置所述解析模块得到的主安全域标识对应的主安全域为当前主安全域;
所述接收模块,还用于当所述第二设置模块设置所述主安全域标识对应的主安全域为当前主安全域之后,继续接收APDU数据;
所述派遣模块,还用于当所述第三判断模块判断出所述接收模块接收到的APDU数据不是选择命令时,派遣所述接收模块接收到的APDU数据到所述当前主安全域。
24.根据权利要求23所述的智能卡,其特征在于,还包括:检查模块和第二发送模块;
所述检查模块,用于所述第二设置模块设置所述主安全域标识对应的主安全域为当前主安全域之前,检查卡片中是否存在所述主安全域标识;
所述第二设置模块,具体用于当所述检查模块检查到卡片中存在所述主安全域标识时,设置所述主安全域标识对应的主安全域为当前主安全域;
所述第二发送模块,用于当所述检查模块检查到卡片中不存在所述主安全域标识时,返回非通讯状态码给所述上位机,触发所述接收模块。
25.根据权利要求19所述的智能卡,其特征在于,所述第一判断模块,具体用于:判断所述APDU数据的预设字节上是否为预设数据,是则确认所述当前主安全域有权限处理所述APDU数据,否则确认所述当前主安全域没有权限处理所述APDU数据。
26.根据权利要求19所述的智能卡,其特征在于,所述第一执行模块,具体包括:
解析子模块,用于解析所述第三预个人化命令得到缺省主安全域的数量;
判断子模块,用于判断所述解析子模块得到的缺省主安全域的数量是否正确;
更新子模块,用于当所述判断子模块判断出所述解析子模块得到的缺省主安全域的数量正确时,将当前缺省主安全域的数量更新为得到的缺省主安全域的数量;
发送子模块,用于当所述判断子模块判断出所述解析子模块得到的缺省主安全域的数量不正确时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
27.根据权利要求26所述的智能卡,其特征在于,所述判断子模块,具体用于:判断得到的缺省主安全域的数量是否为大于1的整数,是则确认得到的缺省主安全域的数量正确,否则,确认得到的缺省主安全域的数量不正确。
28.根据权利要求19所述的智能卡,其特征在于,所述第二执行模块,具体包括:
解析子模块,用于解析所述第四预个人化命令得到默认主安全域编号;
判断子模块,用于判断所述解析子模块得到的默认主安全域编号是否正确;
更新子模块,用于当所述判断子模块判断出所述解析子模块得到的默认主安全域编号正确时,将当前默认主安全域编号更新为得到的默认主安全域编号;
发送子模块,用于当所述判断子模块判断出所述解析子模块得到的默认主安全域编号不正确时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
29.根据权利要求28所述的智能卡,其特征在于,所述判断子模块,具体用于:判断得到的默认主安全域编号是否为Java智能卡中当前包含的主安全域编号中的一个,是则确认得到的默认主安全域编号正确,否则确认得到的默认主安全域编号不正确。
30.根据权利要求20或28所述的智能卡,其特征在于,所述第一设置模块,具体用于:读取当前默认主安全域编号,并设置所述当前默认主安全域编号对应的主安全域为当前主安全域。
31.根据权利要求19所述的智能卡,其特征在于,还包括:第四判断模块;
所述第四判断模块,用于当所述第二判断模块判断出所述APDU数据的类型为第一命令时,判断卡片的生命周期状态是否为预设状态,如果是则继续;
所述第一发送模块,还用于当所述第四判断模块判断出卡片的生命周期状态是预设状态时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
32.根据权利要求31所述的智能卡,其特征在于,所述第四判断模块,具体用于:判断默认主安全域的生命周期状态是否为预设状态。
33.根据权利要求19所述的智能卡,其特征在于,还包括:第六执行模块、第五判断模块、第七执行模块和第六判断模块;
所述第六执行模块,用于当所述第一命令为第一预个人化命令时,根据所述第一预个人化命令设置会话秘钥;
所述第五判断模块,用于当所述第一命令为第二预个人化命令时,判断所述会话密钥是否设置完成;
所述第七执行模块,用于当所述第五判断模块判断出所述会话密钥设置完成时,设置卡片的第四状态为安全状态;
所述第六判断模块,用于所述第二判断模块判断出所述APDU数据的类型为第一命令时,判断所述第四状态是否为安全状态,如果是,则继续;
所述第一发送模块,还用于通过所述操作***返回所述第六执行模块和所述第七执行模块的设置结果给所述上位机,触发所述接收模块;还用于当所述第五判断模块判断出所述会话密钥未设置完成时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块;还用于当所述第六判断模块判断出所述第四状态不为安全状态时,通过所述操作***返回非通讯状态码给所述上位机,触发所述接收模块。
34.根据权利要求19所述的智能卡,其特征在于,还包括:第八执行模块、第九执行模块和第十执行模块;
所述第八执行模块,用于当所述第二命令为第四个人化命令时,修改其初始密钥为私有密钥;
所述第九执行模块,用于当所述第二命令为第五个人化命令时,修改其初始标识为私有标识;
所述第十执行模块,用于当所述第二命令为第六个人化命令时,执行与所述当前主安全域对应的应用的个人化设置操作;
所述第一发送模块,还用于通过所述操作***返回所述第八执行模块和所述第九执行模块的修改结果给所述上位机,触发所述接收模块;还用于通过所述操作***返回所述第十执行模块的操作结果给所述上位机,触发所述接收模块。
35.根据权利要求19所述的智能卡,其特征在于,还包括:读取模块、管理模块和第三设置模块;
所述读取模块,用于所述创建模块读取缺省主安全域数量,对应创建多个主安全域之前,读取卡片的第一状态;
所述创建模块,具体用于当所述读取模块读取到所述第一状态为初始化状态时,读取缺省主安全域数量,对应创建多个主安全域;
所述管理模块,用于当所述读取模块读取到所述第一状态为虚拟机状态时,执行卡片内容管理操作;
所述第三设置模块,用于所述创建模块读取缺省主安全域数量,对应创建多个主安全域完成之后,设置所述第一状态为虚拟机状态;还用于当所述第一发送模块通过所述操作***返回成功操作结果给所述上位机时,设置所述第一状态为初始化状态。
36.根据权利要求35所述的智能卡,其特征在于,所述管理模块,具体用于:设置当前应用,并派遣接收到的APDU数据到所述当前应用,所述当前应用根据所述APDU数据执行相应操作,并通过所述操作***将操作结果返回给上位机;所述当前应用为主安全域或者安全域或者应用。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610606151.0A CN106228090B (zh) | 2016-07-28 | 2016-07-28 | 一种多主安全域Java智能卡及其实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610606151.0A CN106228090B (zh) | 2016-07-28 | 2016-07-28 | 一种多主安全域Java智能卡及其实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106228090A true CN106228090A (zh) | 2016-12-14 |
CN106228090B CN106228090B (zh) | 2019-02-05 |
Family
ID=57534090
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610606151.0A Active CN106228090B (zh) | 2016-07-28 | 2016-07-28 | 一种多主安全域Java智能卡及其实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106228090B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108665045A (zh) * | 2018-05-02 | 2018-10-16 | 北京中电华大电子设计有限责任公司 | 一种实现多发行方的多应用Java卡的方法 |
CN111310243A (zh) * | 2020-03-17 | 2020-06-19 | 中孚信息股份有限公司 | 一种具有多主安全域的智能ic卡片内操作*** |
CN114492691A (zh) * | 2022-01-26 | 2022-05-13 | ***股份有限公司 | 一种ic卡应用的硬件调用方法、装置及智能ic卡 |
CN116305093A (zh) * | 2021-11-19 | 2023-06-23 | 荣耀终端有限公司 | 小应用程序的操作方法和电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6005942A (en) * | 1997-03-24 | 1999-12-21 | Visa International Service Association | System and method for a multi-application smart card which can facilitate a post-issuance download of an application onto the smart card |
CN102394743A (zh) * | 2011-08-10 | 2012-03-28 | 武汉天喻信息产业股份有限公司 | 实现Java卡个人化的方法及装置 |
CN102801705A (zh) * | 2012-06-25 | 2012-11-28 | 飞天诚信科技股份有限公司 | 一种java卡上安全域的实现方法 |
CN103617440A (zh) * | 2013-12-04 | 2014-03-05 | 武汉天喻信息产业股份有限公司 | 实现多方独立管控的多应用智能卡及其发行方法 |
CN102711101B (zh) * | 2012-04-28 | 2015-01-14 | 大唐微电子技术有限公司 | 一种实现智能卡发行的方法及*** |
-
2016
- 2016-07-28 CN CN201610606151.0A patent/CN106228090B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6005942A (en) * | 1997-03-24 | 1999-12-21 | Visa International Service Association | System and method for a multi-application smart card which can facilitate a post-issuance download of an application onto the smart card |
CN102394743A (zh) * | 2011-08-10 | 2012-03-28 | 武汉天喻信息产业股份有限公司 | 实现Java卡个人化的方法及装置 |
CN102711101B (zh) * | 2012-04-28 | 2015-01-14 | 大唐微电子技术有限公司 | 一种实现智能卡发行的方法及*** |
CN102801705A (zh) * | 2012-06-25 | 2012-11-28 | 飞天诚信科技股份有限公司 | 一种java卡上安全域的实现方法 |
CN103617440A (zh) * | 2013-12-04 | 2014-03-05 | 武汉天喻信息产业股份有限公司 | 实现多方独立管控的多应用智能卡及其发行方法 |
Non-Patent Citations (1)
Title |
---|
张德银 等: "多安全域下访问控制模型研究", 《计算机应用》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108665045A (zh) * | 2018-05-02 | 2018-10-16 | 北京中电华大电子设计有限责任公司 | 一种实现多发行方的多应用Java卡的方法 |
CN111310243A (zh) * | 2020-03-17 | 2020-06-19 | 中孚信息股份有限公司 | 一种具有多主安全域的智能ic卡片内操作*** |
CN116305093A (zh) * | 2021-11-19 | 2023-06-23 | 荣耀终端有限公司 | 小应用程序的操作方法和电子设备 |
CN114492691A (zh) * | 2022-01-26 | 2022-05-13 | ***股份有限公司 | 一种ic卡应用的硬件调用方法、装置及智能ic卡 |
Also Published As
Publication number | Publication date |
---|---|
CN106228090B (zh) | 2019-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9311588B2 (en) | Secure portable object | |
CN107241353B (zh) | 用于服务供应商计算***与安全元件的接口连接方法、***和计算机可读存储介质 | |
CN106228090A (zh) | 一种多主安全域Java智能卡及其实现方法 | |
US10409588B2 (en) | Method for managing objects in a secure element | |
CN106133739A (zh) | 数据到安全元件的非易失性存储器中的加载的安全保护 | |
US10430177B2 (en) | Method for updating a package | |
US20040078798A1 (en) | Computing device with an emedded microprocessor or micro-controller | |
EP3384383B1 (en) | Method for managing a package in a secure element | |
CN104102507A (zh) | 一种JavaCard应用功能扩展的实现方法 | |
US20230030478A1 (en) | Pre-personalized secure element and embedded personalization | |
CN108713200A (zh) | 用于将订阅加载到移动终端设备的嵌入式安全元件中的方法 | |
KR101995151B1 (ko) | 제2 애플리케이션에 의한 사용을 위해 제1 애플리케이션으로부터 제1 데이터를 전송하도록 구성된 집적 회로 카드 | |
US11039318B2 (en) | Multi-configuration secure element and associated method | |
JP2019028602A (ja) | 電子情報記憶媒体、icカード、電子情報記憶媒体によるアップデート方法及びアップデートプログラム | |
JP7334718B2 (ja) | セキュアエレメント,セキュアエレメントにおける特権の割り当て管理方法およびicチップ | |
EP3683708A1 (en) | Method for managing a package of an application | |
WO2016015949A1 (en) | Method for managing application packages in an electronic device | |
KR20230034178A (ko) | 변환된 애플릿 파일의 업데이트 방법들 및 단말, 및 자바 카드 장치 | |
CN117158016A (zh) | 用于个性化安全元件的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |