金融系列6《借贷记交易流程》

1.应用选择


      终端发送SELECT命令给卡片,获取卡片支持的应用信息。这些信息由发卡行设定,包括应用优先权、应用名称和首选语言等。命令数据中可以包含PSE名(使用目录选择方法)、DDF名或请求的AID(AID列表选择方法)


//选择PSE文件
Send:00A404000E315041592E5359532E4444463031
--->:611C
 
Send:00C000001C
//选择PSE后回送的FCI: 6F(FCI模板)+84(DF名)+A5(FCI数据专用模板)+88(目录基本文件的SFI)+5F2D(语言选择,O)+9F11(发卡行代码表索引,O)+BF0C(发卡行自定义数据,O)
//IC卡返回:PSE9102
//如果选择失败,终端则直接改用AID列表选择方法
--->:6F1A+840E315041592E5359532E4444463031+A508+880101+5F2D027A689000
 
//根据88(目录基本文件的SFI,01),读取基本数据0001文件的第一条:
Send:00B2010C00
--->:6C1D
 
Send:00B2010C1D
//IC卡返回:PSE0101
--->:701B6119+4F08A000000333010101+500A50424F43204445424954+8701019000
 
//读取基本数据0001文件的第二条,返回6A83(未找到记录),说明0001文件下只有一条记录(每条记录列出一个应用)
Send:00B2020C00
--->:6A83
 
//选择标准借贷记文件
Send:00A4040008A000000333010101
--->:6147
 
Send:00C0000047
//选择借贷记应用后回送的FCI:6F(FCI模板)+84(DF名)+A5(FCI数据专用模板)+50(应用标签,O)+87(应用优先指示符,O)+9F38(PDOL数据对象列表,O)+5F2D(语言选择,O)+9F11(发卡行代码表索引,O)+9F12(应用优先名称,O)+BF0C(发卡行自定义数据,O)
//IC卡返回:PSE9102
--->:6F45+8408A000000333010101+A539+500A50424F43204445424954+870101+9F38099F7A019F02065F2A02+5F2D027A68+9F110101+9F120A50424F43204445424954+BF0C059F4D020B0A9000
 


 

2. 应用初始化

     

      终端发送到卡的GETPROCESSING OPTIONS命令包括PDOL指定的所有终端数据元。如果卡片支持PDOL,则应用选择时PDOL会被包含在SELECT响应里。如果卡片不允许执行所选择的应用,终端就退出当前应用处理,并返回应用选择过程再选择另一个应用。

//获取处理选项GPO:用来启动IC卡内的交易
//根据9F38(PDOL)的值,来拼装数据,如下:
//9F7A01:电子现金终端支持指示器,00(不支持电子现金处理)
//9F0206:授权金额,000000000001
//5F2A02:货币代码,0156
Send:80A800000B+8309000000000001000156
--->:6114
 
//GPO返回:80(Tag,接触)+应用交互特征(AIP)+应用文件定位器(AFL)
//7C(SDA+DDA+支持持卡人认证+支持终端风险管理+支持发卡行认证)+00
//根据GPO返回的AFL,从卡中读取数据
Send:00C0000014
--->:8012+7C00+08010200+10010401+20010300+280101009000


3. 读应用数据

       终端通过AFL决定要从卡片中读取哪些交易数据记录,每个AFL项(四个字节)代表了卡片一个文件中的连续记录。对每个AFL项(四个字节),从第1条记录开始,终端依次对每条记录向卡片发送一个读记录(READRECORD)命令读取记录数据,一直到最后一条记录。如此将所有AFL项处理完。读到的交易数据中可以识别的应存储在终端上供交易使用。如果读取到终端无法理解的数据,将其忽略。对于AFL指明要用于脱机数据认证的记录,则将其数据加到脱机认证的数据列表中供脱机数据认证使用。


AFL=08010200+10010401+20010300+28010100
08010200//0101~0102
10010401//0201~0104, SDA:0201
20010300//0401~0103
28010100//0501
//静态认证数据列表 = DGI0201 + TagValue["82"]
SDA_Value =5A0A6230360501000269314F5F3401008E0C000000000000000002031F009F0D05D86004A8009F0E0500109800009F0F05D86804F8005F24032412315F280201569F0702FF005F25031512137C00


 4. 静态数据认证


终端支持:非对称加密算法和哈希算法;至少支持六组认证中心公钥,公钥长度最大可至1984位;

SDA:验证卡内数据的正确性

DDA:验证卡内数据的正确性及卡的合法性

CDA:将动态数据认证(DDA)和应用密文生成结合起来,提供对卡内数据、卡片本身和交易安全的认证

在一个交易中,最多只执行一种脱机数据认证方法

 

1)  由终端恢复认证中心公钥。

2)  由终端恢复发卡行公钥。

3)  由终端验证签名的静态应用数据。

 




4.1 恢复发卡行公钥

//CA公钥索引 (8F) ——  由终端恢复发卡行的公钥对 CA_E, CA_N
//认证中心公钥指数必须等于3或2^16+1
CA_E = 03
//认证中心公钥模
CA_N =EB374DFC5A96B71D2863875EDA2EAFB96B1B439D3ECE0B1826A2672EEEFA7990286776F8BD989A15141A75C384DFC14FEF9243AAB32707659BE9E4797A247C2F0B6D99372F384AF62FE23BC54BCDC57A9ACD1D5585C303F201EF4E8B806AFB809DB1A3DB1CD112AC884F164A67B99C7D6E5A8A6DF1D3CAE6D7ED3D5BE725B2DE4ADE23FA679BF4EB15A93D8A6E29C7FFA1A70DE2E54F593D908A3BF9EBBD760BBFDC8DB8B54497E6C5BE0E4A4DAC29E5
 
//发卡行公钥证书(90)
CA_I =BED0C8FBB87D9ACDA831A02211E67ECC25BFEAD3D39FE625722CAC62BD1C35DC8D736B9096F2038B98A061372390B853FCC2A3CF63A87C8861973ECFFA3E3312E40092FA9B0F7909FE18B9E1F199E029436FCD1ABC8A9D310AFF63470AD3A454A7CBC2150E97C516001157D95B51CE72CFB01E3EC443F62C4A76C5CAB5D6E04738DDC3273939BCD556DEA6A9D8DBE4D534D504FB980146A3C58271BB883ECA0D077E0119D3193DE2E70D47D4128B21EB
 
//终端恢复发卡行公钥
//CA_O = DeRSA(CA_N, CA_E, CA_I)
CA_O =6A02623036FF12300009870101B001D5C5C2BFE845E14E75681F83973E1E4F9543E7FCCA49D13D82E35CD2F5B6CBDC5005CA3A7B8E92B52443AECE23C2D1BB57F76D43D0D9A339AFB4BE186CB82515EDCD9B6278BF42B31083944FC524412580680824E0A0F2FC5F41A969FC0F19B67F9054D41FF0D7D0600C8E1E51AA80B4EDBEA34411403B497A3D4C2E47BB77442F584ABF26D618B28374543D84182929FB4D1C5D5E92597CE8DB56D552F2E4F3BC
 
//组织摘要输入信息 + 发卡行公钥余项(如果有) + 发卡行公钥指数
//HashValueInfo = CA_O.Mid(2, CA_O.GetLength()- 42 - 2) + TagValue[_T("92")] + TagValue[_T("9F32")];
//HashV = SHA1(HashValueInfo)
HashV =84182929FB4D1C5D5E92597CE8DB56D552F2E4F3
[√]  发卡行公钥证书摘要信息比对结果一致..



字段名    

长度                

描述  

格式                 

恢复数据头

1

十六进制,值为‘6A’

b

证书格式

1

十六进制,值为‘02’

b

发卡行标识

4

主账号最左面的3-8个数字(在右边补上十六进制数‘F’)

cn8

证书失效日期

2

MMYY,在此日期后,这张证书无效

n4

证书序列号

3

由认证中心分配给这张证书的,唯一的二进制数

b

哈希算法标识

1

标识用于在数字签名方案中产生哈希结果的哈希算法

b

发卡行公钥算法标识

1

标识使用在发卡行公钥上的数字签名算法

b

发卡行公钥长度

1

标识发卡行公钥的模的字节长度

b

发卡行公钥指数长度

1

标识发卡行公钥指数的字节长度

b

发卡行公钥或发卡行公钥的最左边字节

NCA-36

如果NI ≤NCA–36,这个字段包含了在右边补上了

NCA–36–NI个值为‘BB’的字节的整个发卡行公钥。

如果NI>NCA-36,这个字段包含了发卡行公钥最高位的

N CA–36个字节

b


 注意:终端恢复发卡行公钥中发卡行标识必须正确, 证书失效日期必须大于5F24的值。

 

 

4.2 恢复签名静态应用数据

//发卡行公钥指数(9F32)必须等于3或2^16+1
_CA_E = 03
 
//发卡行公钥模 = 发卡行公钥的最左边字节 + 发卡行公钥的余项(如果有)
//_CA_N = CA_O.Mid(30, CA_N.GetLength() - 72) +TagValue[_T("92")];
_CA_N =D5C5C2BFE845E14E75681F83973E1E4F9543E7FCCA49D13D82E35CD2F5B6CBDC5005CA3A7B8E92B52443AECE23C2D1BB57F76D43D0D9A339AFB4BE186CB82515EDCD9B6278BF42B31083944FC524412580680824E0A0F2FC5F41A969FC0F19B67F9054D41FF0D7D0600C8E1E51AA80B4EDBEA34411403B497A3D4C2E47BB77442F584ABF26D618B28374543D776CA628A371A4E09CE3C1FB1B49852381E38B167A69E44866421CC66B55D5727A916D65
 
//签名的静态数据(93)
_CA_I =6B4EC2C144B1A46D42608253C157A53008D9626D70EB593294271ADF5BE8B76A57D38C82DD9B2BBBD02C6C91C046C80818D6A606ADC1FC6E2989BE0AB2CFCEE89B62EC7F132B5AFBFC65D46A7A26FD1A49586158F640169985C5BB74975585BCFC38CEFB63CB9D25EEFB3D067F418FB0C225BC86702732153FBD36FF2CE8A51F8B0116B45DE91FD5B68861383033D99FAB9B235C5D0EB2CDE256E23040FBC4ECF2EEB765192AEEAE011AE022241EFB8E
 
//恢复签名静态应用数据
//_CA_O = DeRSA(_CA_N, _CA_E, _CA_I);
_CA_O = 6A03016230BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB286C6208DA7D7B7659DF24FA3129490FCDAE43EDBC
 
//数据验证代码(9F45),由发卡行分配的代码
TagValue["9F45"] = 6230
 
//BB = ('B', CA_N.GetLength() - 52);
//HashValueInfo = _CA_O.Mid(2, 8) + BB +SDA_Value;
//HashV = SHA1(HashValueInfo);同一张卡相同
HashV =286C6208DA7D7B7659DF24FA3129490FCDAE43ED
[√]  静态签名数据Hash值比对一致......

 

字段名

长度

描述

格式

恢复数据头

1

十六进制,值为‘6A’

b

签名数据格式

1

十六进制,值为‘03’

b

哈希算法标识

1

标识用于在数字签名方案中产生哈希结果的哈希算法

b

数据验证代码

2

由发卡行分配的代码

b

填充字节

NI–26

填充字节由NI–26个值为‘BB’的字节组成

b

哈希结果

20

需认证的静态应用数据的哈希值

b

恢复数据结尾

1

十六进制,值为‘BC’

b

 

注意:如果静态数据认证标签列表存在,并且其包含非‘82’的标签,那么静态数据认证失败。

文/yanxin8原创,获取更多信息请访问http://yanxin8.com/441.html


C++ EMV EP/ED  Javascript MFC MIFARE  noteCard  PBOC  php QPBOC WordPress  wp插件 创意发明 发现 小众软件 常识 教程 旗舰版 智能卡 注册码 游记 社保 算法 美文 职场 金融 面试题 地图  


Meet so Meet. C plusplus I-PLUS....
原文地址:https://www.cnblogs.com/iplus/p/4467215.html