IC卡片生命周期
IC卡的生命周期包括芯片阶段、预个人化阶段、个人化阶段以及用户阶段(见图5-1、图5-2)。
5.1卡片生命周期
IC卡的生命周期包括芯片阶段、预个人化阶段、个人化阶段以及用户阶段(见图5-1、图5-2)。
图5-1IC卡生命周期示意图
在IC卡不同的生命周期阶段,都有各阶段数据处理的主要工作以及安全机制。
5.1.1芯片阶段
在芯片阶段,一般在芯片厂商完成。芯片阶段主要的数据处理工作是以下两项工作:
1.安装COS:将卡片的操作系统硬掩膜到IC卡的ROM中。
2.主密钥替换:在正确认证芯片主密钥MK_C后,用卡商唯一产生的卡商主密钥MK_I替换芯片主密钥MK_C。
5.1.2预个人化阶段
在预个人化阶段,一般在卡商完成。预个人化阶段主要的数据处理工作是
图5-2IC卡生命周期
以下四项工作:
1.创建系统环境,比如MF、DDF等。
2.创建文件和数据结构。
3.加载扩展应用,比如补丁机制等。
4.主密钥替换:在正确认证卡商主密钥MK_I后,用个人化阶段主密钥MK_P替换发卡商主密钥MK_I。
5.1.3个人化阶段
在个人化阶段,可在发卡银行完成,也可以在发卡银行指定授权的卡商处完成。个人化阶段主要的工作包括以下三项:
1.写个人化数据到IC卡中。
2.写磁和卡面打印。
3.主密钥替换:在正确认证个人化主密钥MKP后,用用户主密钥MK U替换个人化主密钥MK_P。
5.1.4用户阶段
在用户阶段,在发卡银行完成。用户阶段主要有以下两项工作:
1.激活卡片。
2.发卡。
5.2通用金融IC卡个人化
通用金融IC卡个人化又分初始化、数据准备、密钥管理以及个性化数据写入。
5.2.1预个人化
初始化又称为预个人化,是在个人化之前进行的工作,主要由以下几个部分组成:
(一)初始化设备的处理过程:初始化设备是向IC卡发送个人化数据的芯片读写器。对大多数使用这一通用方法的IC卡初始化过程来讲,这一设备必须与一个安全模块相连,以便向IC卡发送命令时进行数据的加解密和MAC校验。
(二)IC卡的初始化处理过程:IC卡将从初始化设备接受初始化指令和相关数据,并依照初始化指令创建相应的应用、必需的文件结构、写入一定的数据,以便为下一步的个人化作好准备。经过初始化处理后,IC卡将被部分锁定,从而将只能接受个人化指令和应用指令,不能再次修改文件或应用结构。
5.2.2数据准备
为了实现卡片个人化的制作,在个人化之前,需要完成一个数据准备的操作。数据准备是为了创建用于个人化IC卡应用的数据,便于个人化系统在对IC卡写入数据时按照统一的格式处理,也便于采用各种方式对数据进行安全传输。
完成数据准备的个人化数据,应以一定格式存放在一个数据文件中。
个人化制卡数据可分为发卡行主密钥及其相关数据、应用密钥和证书、应用数据三大类。其中一些数据是每张卡都相同的,另一些是每张卡各有所异;一些数据可能是明文传输的,另一些数据可能在整个个人化过程中均是加密的,如密钥等。
5.2.3个人化系统
个人化系统是覆盖从数据准备系统、密钥管理系统到卡片发行系统一整套信息处理、信息管理和卡片管理系统。涉及包括加密机、发卡机等硬件和诸多软件。
个人化设备是指向IC卡发送个人化数据的芯片读写器。此设备必须与一个金融安全模块相连,以便向IC卡发送命令时进行数据、密钥的加解密和MAC校验。个人化设备应该是独立的,并且与应用无关。
5.2.4个人化流程
如图5-4所示,个人化流程包括了从发卡银行生成制卡数据开始,历经密钥管理、数据传输、数据处理,直至将数据安全传输至个人化车间并通过专业的写卡设备将数据写入卡中的全过程。
图5-3卡片个人化进程示意图
图5-4IC卡个人化流程示意图
5.3电子钱包/电子存折应用个人化
5.3.1个人化流程
电子钱包/电子存折应用个人化流程遵循IC卡片通用个人化流程。
5.3.2个人化指令
用于电子钱包/电子存折个人化的基本指令包括以下几个:
1.创建文件(Create File)。
2.安装数据(Install Data)。
3.安装密钥(Install Key)。
5.3.2.1创建文件
创建文件(Create File)命令主要是创建卡片的文件系统。在PBOC电子钱包、电子存折中,需要支持的文件类型有DF(DDF、ADF)、KEY文件、定长记录文件、变长记录文件、循环记录文件、二进制文件。
5.3.2.2安装数据
安装数据(Install Data)命令主要用于装载PIN和电子钱包/电子存折文件数据。
主要对以下电子钱包/电子存折应用的基本文件进行数据安装,包括:
1.电子钱包/电子存折应用的公共应用基本文件。
2.电子钱包/电子存折应用的持卡人基本文件。
3.内部数据元。
5.3.2.3安装密钥
安装密钥(Install Key)命令主要是用于装载电子钱包/电子存折应用中需要的所有密钥的信息,包括以下密钥:
1.主控密钥:应用主控密钥。
2.内部认证密钥:用于内部认证。
3.外部认证密钥:用于外部认证。
4.应用维护密钥(DAMK):是应用维护密钥。发卡方基于应用序列号产生的一个双字节密钥。用于产生应用锁定、应用解锁、卡片锁定和更新二进制命令的MAC。
5.消费密钥(DPK):消费/取现密钥。发卡方基于ED/EP的应用序列号产生的一个双倍长密钥。用来产生消费/取现交易中使用的过程密钥(SESPK)。
6.圈存密钥(DLK):圈存密钥。发卡方基于EP/EP的应用序列号产生的一个双倍长密钥。用来产生圈存交易中使用的过程密钥(SESLK)。
7.圈提密钥(DULK):圈提密钥。发卡方基于ED的应用序列号产生的一个双倍长密钥。用来产生圈提交易中使用的过程密钥(SESULK)。
8.修改密钥(DUK):更新密钥。发卡基于ED的应用序列号产生的一个双倍长密钥。用来产生修改透支限额交易中使用的过程密钥(SESUK)。
9.TAC密钥(DTK):TAC密钥。发卡方基于ED/EP的应用序列号产生的一个双倍长密钥。用来产生消费、取现和圈存交易中使用的TAC。
10.PIN解锁密钥(DPUK):PIN解锁密钥。发卡方基于ED/EP应用序列号产生的一个双字节密钥。用于应用产生解锁PIN命令的MAC。
11.PIN重装密钥(DRPK):重装PIN密钥。发卡方基于应用序列号产生的一个双字节密钥。用于产生重装PIN命令的MAC。
5.4借记/贷记应用个人化
5.4.1个人化规范
借记/贷记应用个人化主要参照以下规范:
1.《中国金融集成电路(IC)卡规范第10部分:借记/贷记应用个人化指南》。
2.《GlobalPlatform Card Specification Version 2.2》。
5.4.2个人化流程
图5-5借记/贷记应用个人化写卡流程
借记/贷记应用的个人化流程遵循IC卡片通用个人化流程,如图5-5所示。
借记/贷记应用流程较为复杂,数据元繁多,为了降低银行个人化系统复杂程度、提高个人化工作效率、加强发卡行对卡片个人化的管理以及减少发卡行对卡片生产商的依赖,人民银行制定了借记/贷记个人化指南。
借记/贷记个人化指南定义了数据准备系统和个人化设备之间的接口以及个人化设备和IC卡之间的接口。
借记/贷记的卡片个人化的流程包括数据准备、个人化设备安装设置和处理以及IC卡应用处理。每个步骤之间的接口在个人化指南中定义。
数据准备包含创建个人化数据、将个人化数据分组、创建个人化指令、创建应用所需记录的数据以及创建个人化设备的输入文件五个步骤。
创建个人化数据包括发卡行主密钥和数据(用于个人化)、应用密钥和证书(用于应用的对称和非对称密钥以及相应的证书)、应用数据(如PAN、AIP、AFL等)。
数据分组设计在个人化过程中占有重要作用。一个数据分组符合TLV数据结构,由数据分组标识DGI(Data Grouping Identifier)、数据分组长度和数据分组的值组成。
个人化设备所使用的指令包括SELECT、INITIALIZE UPDATE、EXTERNAL AUTHENTICATE、STORE DATA、Last STORE DATA。
在结束一个IC卡应用个人化处理过程时,必须为该IC卡应用的个人化过程创建日志。
个人化指南还提出了个人化过程中的安全要求、管理要求(包括环境、操作、管理规范等)、对安全模块(包括物理安全、逻辑安全等)的要求。
5.4.3个人化指令
借记/贷记个人化指令如下:
1.选择(SELECT)命令。
2.初始化更新(INITIALIZEUPDATE)命令。
3.外部认证(EXTERNALAUTHENTICATE)命令。
4.数据存储(STORE DATA)命令。
5.4.3.1SELECT SELECT命令是用来选择每个IC卡应用程序进行个人化。在每次IC卡应用需要进行个人化时,个人化设备发送一次SELECT命令。
5.4.3.2 INITIALIZE UPDATE INITIALIZE UPDATE命令是在个人化设备选择应用后发给IC卡的第一个命令。INITIALIZE UPDATE命令主要是用来建立用于个人化的安全通道进程。交换的数据是经过相互认证的。命令将返回KMC的ID和版本号、用于派生应用的加密密钥(KENC)、MAC密钥(KMAC)和解密密钥(KDEK)的数据。
KEYDATA(密钥数据)是每个IC卡应用分区都可以访问的一个数据单元,KMCID是INITIALIZEUPDATE命令响应数据的一部分,并给定位IC卡发行商的KMC提供了方便。
在做初始化的时候,IC卡响应INITIALIZE UPDATE命令时返回来的序列计数器初始化为“0001”。
5.4.3.3 EXTERNAL AUTHENTICATE外部认证命令是在INITIALIZEUPDATE命令之后执行的,是认证个人化设备的命令。
在每个安全通道初始后只发送一次外部认证命令。
中国金融集成电路(IC)卡规范推荐安全等级设定是在EXTERNAL AU-
THENTICATE命令中使P1=“01”。EXTERNAL AUTHENTICATE后的所有被IC卡应用接收的命令包含一个C-MAC。
5.4.3.4 STORE DATA个人化设备应将最后一个STOREDATA命令的Pl参数的b8设置为“1”,以便表明应用个人化的完成。随着最后一个STORE DATA命令的结束,应用完成个人化,并且STOREDATA命令会被应用屏蔽掉。
中国金融集成电路(IC)卡借记/贷记应用并不要求使用数据分组“7FFF”
在最后一个STOREDATA命令中提出数据请求。
5.4.4个人化数据分组
数据分组(DGI)的设计在个人化过程中承担着重要的作用。数据分组符合TLV结构,通常来说,数据分组(DGI)的标识符是2字节十六进制数表示,长度用一个字节表示,值域的字节不超过长度字节能表示的范围。
表5-1为从PBOC规范摘录的部分数据分组,可供个人化分组作参考。
表5-1PBOC2.0建议的数据分组
5.5借记/贷记卡个人化难点分析
5.5.1数据分组要求
《中国金融集成电路(IC)卡规范第10部分》中表1到表22规定了中国金融集成电路(IC)卡借记/贷记应用建议的数据分组。规范建议的分组并非强制性要求,但很多发卡行错误地认为,数据必须这样分组。实际上,发卡时,不论把数据如何分组,只要能通过AFL将规范规定的应在读记录时返回的数据返回,且终端发Get Data命令时能读出规范规定的应能被Get Data读出的数据即可。
但是,许多发卡行为了增加行内个人化系统的重用性,根据PBOC规范对数据分组的要求,结合行内系统,也发布了行内的“个人化分组规范”,对不同卡商可能存在的不同标准数据分组进行了统一,使得来自所有卡商的卡片的个人化分组设计保持一致。
5.5.2数据重复出现
《中国金融集成电路(IC)卡规范第6部分》的7.4.4节有如下的规定:读数据处理中如果出现如下情况,交易将中止:>一个基本数据对象在卡片中出现超过一次。
>卡片中缺少必须有的数据。
>数据格式错。
>READ RECORD命令返回状态字不是“9000”。
因为第6部分是终端规范,所以通常,制卡商或者发卡行不会去仔细阅读这本规范,也就常常会导致一个数据元重复出现。
例如《中国金融集成电路(IC)卡规范第10部分》有着如此建议(见表5-2、表5-3)。
表5-2数据分组标识“0101”的数据内容
表5-3数据分组标识“0102”的数据内容
在借记/贷记应用的测试中,经常能看到卡片给出的AFL中包括0101和0102两条记录,并且两条记录中都有Tag57。这样的卡片如果拿到终端上做交易,那么肯定会被终止。
所以,卡片不要给出重复的数据元。如果一个数据元在GPO时已经返回了,那么不要试图在读记录时再次给出;如果一个数据元在前面的记录中给出了,不要试图在后面的记录中再次给出。
5.5.3数据重复设置
符合PBOC2.0规范的双界面卡可能既支持标准借记/贷记交易,也支持基于借记/贷记的小额支付(包括电子现金和非接触小额支付)。因此,存在一种情况,同一张卡在不同的应用环境下,可能会面对不同的交易限制。例如当执行接触式的借记/贷记消费时,终端需提示持卡人输入PIN,进行持卡人认证;而当执行电子现金脱机消费时,终端不会提示持卡人输入PIN。
基于这种情况,需要在卡片在个人化时,在不同的应用分支对于同一个标签标识的数据元写入不同的值。例如持卡人认证列表(8E),在标准借记/贷记下为一个值,在电子现金应用下又是另一个不同的值。类似的需要重复设置的数据元还可能有如表5-4所示的数据。
表5-4可能需要重复设置的数据
5.5.4个人化安全控制
5.5.4.1写卡安全控制
在IC卡上必须首选安装一个“个人化主密钥(KMC)”,这个主密钥用来为每个应用生成初始的个人化密钥(KENC、KMAC和KDEK)。这三个密钥用来建立写卡设备和卡片之间的安全通道,并对此安全通道中的个人化命令进行安全保护。
>加密分散密钥(KENC)。
加密分散密钥(KENC)用来做个人化安全通道STOREDATA命令的数据域进行加密。
>校验码分散密钥(KMAC)。
校验码分散密钥(KMAC)用来生成和校验EXTERNALAUTHENTICATE以及STOREDATA命令使用的C-MAC。
>密钥加密分散密钥(KDEK)。
密钥加密分散密钥(KDEK)用来对STOREDATA命令收到的机密数据进行解密。
图5-6个人化数据传输保护
5.5.4.2个人化在途数据保护
发卡行密钥交换密钥(KEKISS):对发卡行与数据准备设备之间的脱机PIN及其他机密数据进行保护。
数据加密密钥/传输密钥(DEK/TK):对数据准备设备与个人化设备之间的脱机PIN及其他机密数据进行保护。
MAC密钥(校验码密钥):用于保证在个人化数据文件中,提供给个人化设备的应用数据的完整性。
5.5.5关键数据个人化5.5.5.1持卡人姓名
《中国金融集成电路(IC)卡规范第5部分》附录A中规定:
持卡人姓名(Tag5F20)为2~26字节持卡人姓名扩展(Tag9FOB)为1~19字节,如果持卡人姓名大于26字节,多出的部分放在这里。
但是EMV规范规定是如果持卡人姓名大于26字节,将不使用Tag5F20,而是将整个持卡人姓名都放入Tag9FOB中。
所以,有些检查严格的EMV终端发现一张卡片既返回了Tag5F20又返回了Tag9FOB时,将会终止交易。
所以为了兼容性,我们在发行PBOC借记/贷记卡时,也要求此二Tag仅使用一个。
5.5.5.2AFL的设置
AFL的全称是Application File Locator,翻译过来就是应用文件定位器,它指出和应用相关的数据存放位置(短文件标识符和记录号)。虽然我们把数据写入了芯片当中,但终端并不知道你把数据写到了哪里,你需要通过AFL告诉终端,本次交易用到的数据在哪些记录里,终端会根据卡片返回的AFL再去读卡片的记录。通常,AFL是在个人化的时候,作为固定数据写入到卡片里去的。当然规范并没有说,AFL不能由COS/Applet动态生成,不过动态生成AFL将会非常难实现。
那么,AFL的格式又是怎样的呢?首先,AFL必须是4个字节的整数倍,每4个字节为一组,它的含义如下:
字节1:
位8-4=SFI短文件标识符。
位3-1=000。
字节2:文件中要读的第1个记录的记录号(不能为0)。
字节3:文件中要读的最后一个记录的记录号(等于或大于字节2)。
字节4:从字节2中的记录号开始,存放认证用静态数据记录的个数(值从0到字节3-字节2+1的值)。
上述是规范中的原话,看起来比较费解,下面我们来举例解释:
AFL示例:080103001003030118020503。
这个AFL长度为12字节,所以它包含三个人口。
我们先来看第一个入口08010300。
08表示读SFI为01的文件。
0103表示从1号记录开始读,读完第3号记录后结束,也就是一共读了01、02、03三条记录。
00表示这三条记录里没有记录是用于脱机数据认证的。
再看第二个入口10030301。
10表示读SFI为02的文件。
0303表示从3号记录开始读,读完第3号记录后结束,也就是一共读了03这条记录。
01表示该文件的03这条记录是用于脱机数据认证的。
再看第三个入口18020503。
18表示读SFI为03的文件。
0205表示从2号记录开始读,读完第5号记录后结束,也就是一共读了02、03、04、05四条记录。
03表示从2号记录开始,有连续的3条记录用于脱机数据认证,即该文件的02、03、04这三条记录用于脱机数据认证。
5.5.5.35F34问题
在数据分组要求中我们介绍过,一个基本数据对象在卡片中出现超过一次将导致交易终止。
当我们在计算签名时如果使用5F34作为数据源的一部分,这将导致卡片不得不在终端读记录时返回5F34,同时规范又规定5F34应当在GPO响应中返回,造成5F34在同一交易中出现超过一次的现象,从而导致交易终止。
5.5.5.4应用失效日期存放
qPBOC个人化时,应用失效日期不应存放在AFL指明的让终端读取的最后一条记录中。这么做的目的是为了使过期的卡片被终端终止交易时,激发卡片内部的防拔机制,使得卡片中的电子现金可用余额恢复到交易前的状态,即不会导致卡内金额的修改。
在qPBOC流程时,《中国金融集成电路(IC)卡规范第12部分》第7.7.20节规定,终端在每读一条记录之后,都要判断该记录中是否存在应用失效日期(Tag5F24)。如果存在,那么终端要立即判断当前日期是否大于该失效日期。如果大于,那么终端会终止交易,不去读后续的记录。同时该规范还规定,卡片在最后一条读记录响应之前,才会把防拔保护位置为“零”,也就是说,如果终端没有读完记录,卡片会恢复内部的一些计数器、金额值到最近一笔成功交易之后的状态。