Michael's Space

Technology changes the world, serves the people.
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

ICC的数据存储

Posted on 2006-06-29 16:49 奔跑的阿甘 阅读(981) 评论(0)  编辑 收藏 引用 所属分类: ATM Technology/EMV Notes

ICC的数据存储
Michael 2006/06/29

ICC卡支持多应用,每个应用都存储着相关的信息,这些信息像操作系统的文件结构一样存储。
最小的信息单位是数据元素,它包含数据元素名称、内容描述、格式和编码,比如:
Name          |          Description               |   Source  |       Format          |Template | Tag   |    Length
Application | Valid cardholder account number | ICC | cn var. up to 19 |  '70' or '77' | '5A' | var. up to 10
Primary Account
Number (PAN)

数据对象,由TAG、LENGTH、VALUE组成,每个数据对象由一个该应用范围内唯一的TAG进行标识。和OS的文件夹类似,一个数据对象可仅仅包含数据元素,或者子数据对象,如果该数据对象值为数据元素,则被称作“原始数据对象(Primitive Data Object)”;如果该数据对象值为其他(一个或多个)数据对象,则它被称作“组合数据对象(Constructed Data Object)”,相应地,它的值被称作“模板(Template)”。这两类数据对象的TAG是不一样的,所以,从TAG可以知道它属于哪一种类型。例如,77099F1A0208409F350101,它是一个组合对象,TAG='77',组合对象的长度为9个字节,组合对象的值为"9F1A0208409F350101",即它包含两个原始数据对象,分别是对象"9F1A"(LEN=02, VALUE=0840)和"9F35"(LEN=01, VALUE=01)。

上面我们讨论了一些逻辑概念,现在让我们具体看看ICC中对上述概念是如何存储的。

每个应用包含一个或多个文件(Files),它是ICC中信息的存储格式,文件中包含大量的记录(Records),记录就是模板(即它存放了一个或多个数据对象)。关于他们之间的关系,我们可以做个形象的比喻,文件就像数据库系统中的数据库,记录如同数据库中的表,数据对象则似表中的每条记录。

那么如何访问文件呢?
文件有三种类型:AEF(Application Elementary File)、ADF(Application Definition File)、DDF(Directory Definition File)。对于ADF和DDF,采用文件名称进行访问,文件不可以重名,它在中必须是独一无二的。对于AEF,采用一个整数标识(范围从1-30)即SFI(Short File Identifier)进行访问,同样地,该标识不可以重复,它在同一应用中是独一无二的。

我们再来看看终端通过哪些命令来和ICC交互。
不同的发卡行对IC卡的定义是不一样的,在EMV标准中,定义了以下命令集,除此之外,发卡行可以定义针对自身的命令集。
终端发给ICC的命令集合(共13个):
命令类别   指令码   含义
‘8x’         ‘1E’     APPLICATION BLOCK
‘8x’         ‘18’     APPLICATION UNBLOCK
‘8x’         ‘16’     CARD BLOCK
‘0x’         ‘82’     EXTERNAL AUTHENTICATE【请求ICC校验ISSUER AUTHENTICATION DATA】
‘8x’         ‘AE’     GENERATE APPLICATION CRYPTOGRAM【返回CID(Cryptogram Information Data), ATC
                                     (Application  Transaction Counter, AC(Application Cryptogram)数据】
‘0x’         ‘84’     GET CHALLENGE【获取随机数】
‘8x’         ‘CA’     GET DATA【限于读取ATC(tag '9F36'), Last Online ATC Register(tag '9F13'), PIN Try
                                     Counter(tag '9F17')】
‘8x’         ‘A8’     GET PROCESSING OPTIONS【返回AIP(Application Interchange Profile)和AFL
                                    (Application File Locator)】
‘0x’         ‘88’     INTERNAL AUTHENTICATE【请求ICC计算并返回Signed Dynamic Application Data】
‘8x’         ‘24’     PERSONAL IDENTIFICATION NUMBER (PIN)CHANGE/UNBLOCK【激活PIN,
                                    重设PIN RETRY Counter】
‘0x’         ‘B2’     READ RECORD【读取RECORD数据,如Application Expiration Date, Application PAN, 
                           Card Risk Managemt Data Object List1, Card Risk Management Data Object List2, etc】
‘0x’         ‘A4’     SELECT
‘0x’         ‘20’     VERIFY【要求ICC进行脱机密码校验(Transaction PIN & Reference PIN)】
‘8x’         ‘Dx’     RFU for the payment systems
‘8x’         ‘Ex’     RFU for the payment systems
‘9x’         ‘xx’     RFU for manufacturers for proprietary INS coding
‘Ex’         ‘xx’     RFU for issuers for proprietary INS coding

终端发给ICC的命令由4个字节的命令包头和命令码以及相关参数组成。ICC返回给终端的数据是我们在前面提到的数据对象模板,再添加2个字节的命令执行状态。

到这里,我们知道了ICC中有哪些数据,以及它们如何存储,终端如何访问它们。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理