EMV随记(1)

1:

卡片是否需要做发卡行认证操作,首先看GPO返回的数据AIP里面,是否支持发卡行认证。

其次是看CDOL2(tag:8D)的数据里面是否有91,有的话说明GAC2需要发送91的值到卡片,该值是联机交易返回的55域里面取到的。

第二次GAC,第一次GAC发送GAC指令时组织数据采用的是CDOL1,第二次GAC组织命令时用的是CDOL2,CDOL2也是在读记录时候获取到的。

以下日志说明:CODL2有91,但是GAC2的时候,终端没有发送91的值(为全0)到卡片,导致卡片发卡行认证失败,卡片拒绝。

 
 
2:银联卡,GPO没有直接返回9F27(密文信息数据CID)的(有的有返回,有的没有返回),可以从9F10(发卡行应用数据)获取 
 
3:9F1B:终端最低限额,应用设置为int,终端里面是为16进制:00001000-》000003E8,真正意义为最大脱机限额 
 
 
 
3)根据TVR、IAC、TAC参数作出拒绝交易、联机交易或脱机交易的初步决定:
●   如果判定应该转为脱机交易,终端使用生成应用密码命令,请求IC卡返回一个TC;
●   如果判断应该转为联机交易,终端使用生成应用密码命令要求IC卡返回一个批准请求密码(ARQC);
●   如果判定应该拒绝交易,终端使用生成应用密码命令要求IC卡返回一个应用认证密码(AAC);
4)行为决策的顺序是从IAC/TAC-Denial, IAC/TAC-Online到IAC/TAC-Default5)
当终端向卡发送GenerateAC命令时,IC卡执行卡片行为分析,然后IC卡返回应用密文
C-80 ae 80 00 34 00           (控制参数80: bit8,bit7 :00=AAC--拒绝 、  01=TC--脱机、 10=ARQC--联机、  11=RFU)
Len: 52
00 00 00 00 00 01 00 00 00 00 00 00 01 56 00 80
88 80 00 01 56 18 05 15 00 ef 08 3f 1a 11 02 02
d2 f8 c1 aa b2 e2 ca d4 c9 cc bb a7 00 00 00 00
00 00 00 00
R-SW: 90-00
Len: 32
80 1e 80 00 38 6e b0 d2 f3 72 ed 1b da 07 01 01      ( 80: 模板此模板的响应数据为: 密文信息数据(L:1:80) + 应用交易计数器(L:2:00 38)
03 a0 28 02 01 0a 01 00 00 00 00 00 00 e1 9e 24       + 应用密文L8:(6e b0 d2 f3 72 ed 1b da + 发卡行应用数据)
6) IAC-Online不存在,则使用缺省值‘FFFFFFFFFF’IAC-Default不存在, 使用缺省值‘FFFFFFFFFFF'其他不存在,则采用缺省值‘0000000000’7)Denial: ——   把授权响应码置为‘Z1’(脱机拒绝);
——   把 GENERATE AC(产生应用密文)命令的 P1 参数设为请求应用认证密文(AAC);
——   进行请求应用密文步骤
Online:——  把产生应用密文(GENERATE AC)命令的 P1 参数设为授权请求密文(ARQC),以进行联机授权请求;
——  进行生成应用密文步骤。
Default:——  把授权响应码置为‘Z3’(不能联机,脱机拒绝),仅脱机终端授权响应码置为‘Z1’;
——  把产生应用密文(GENERATE AC)命令的的 P1 参数设置为请求 AAC;
——  进行生成应用密文步骤。都不满足:如果在以上的比较中没有出现对应位同时为‘1 ’的情况,则终端:
——  把授权响应码置为‘Y1’(脱机批准);
——  把 GENERATE AC(请求应用密文)命令的 P1 参数设置为请求交易证书(TC);
——  进行请求应用密文步骤。

5:各种DOL意思:

PDOL(处理选项数据对象列表):

卡所需终端数据的标签和长度列表。终端在SELECT最终选择命令的卡片响应中获得它。终端在GPO命令下提供列表中所需要的数据给卡片

DDOL(动态脱机数据认证对象列表):

用于DDA,终端在读记录阶段获取该数据DDOL(9F49), 如9F 49 03 9F 37 04,这个数据是卡片告诉终端(如果卡片没有返回,终端也需要有默认值,如果都没有则交易终止;

如果DDOL中不含有9F37不可预知数,则交易终止)卡片需要终端的哪些数据来做动态签名;

在接下来的INTERNAL AUTHENTICATE命令中,终端将9F37对应的数值送入卡片,卡片根据该值以及本身的一些动态数据(包括ATC),生成动态签名返回给终端进行认证。

 CDOL(卡风险管理数据对象列表):

GAC命令中需要传送给卡片的数据对象列表。CDOL是终端在读应用记录处理过程中从卡片中读取的

TDOL(交易证书数据对象列表):

列出生成交易证书(TC)哈希计算的数据对象(标签和长度)

 6:SDA

1):目的:防止卡片数据被篡改

2):步骤:

卡片静态数据A;卡片数据hash计算结果Hash(A);发卡行公钥Pk;发卡行私钥Prk;

A+Hash(A)通过Prk进行RSA加密形成数字签名sData;

3):

终端读取卡片数据:sData,用终端里面的Pk进行解密,得到A+Hash(A);

终端在前面的步骤已经读取卡的静态数据A,终端对该数据进行hash计算得到Hash(B);

只要Hash(A)== Hash(B),说明卡片里面的静态数据未被篡改,SDA验证成功。

4):终端的Pk哪里来:

如果Pk直接从发卡行那边获取,无法保证公钥的合法性。这时候需要更高一级的机构即CA中心来获取:

CA中心也有公私钥对,CPk(公钥)和CPrk(私钥),

PK + CPrk通过RSA加密生成数字证书,连同CPk存放到发卡行秘钥管理系统;

数字证书写入卡片;

5):此时卡片中有两个数据:

数字证书(发卡行公钥+CA私钥数字签名签名)和静态数据签名sData;

6):终端通过远程下载或者本地预先写入得到CA公钥:CPk

7):终端通过读取卡片中的数字证书以及本身已有的CPk,恢复发卡行公钥Pk;

8):当终端得到发卡行公钥之后,就可以根据第3步验证卡片数据的完整性。

 7:DDA:

如果SDA是二级秘钥的话(CA秘钥和发卡行秘秘钥),那么DDA就是三级秘钥(CA+发卡行+IC卡秘钥);

通过CA认证发卡行公钥,通过发卡行秘钥认证IC卡秘钥:

1):相比SDA,DDA多了卡片的公私钥对,私钥存储在卡片的安全区域内,能够保证无法被复制

2):终端在读记录阶段,获取到卡片的公钥9F46(发卡行认证过的I卡公钥)

读记录的时候,需要一个关键数据DDOL(9F49),如:9F 49 03 9F 37 04,这个数据是卡片告诉终端(如果卡片没有返回,终端也需要有默认值,如果都没有则交易终止;如果DDOL中不含有9F37不可预知数,则交易终止)卡片需要终端的哪些数据来做动态签名

3):终端发起内部认证命令,请求一个动态签名;

4):卡片得到终端发送的动态数据,终端用本身的私钥进行签名,返回给终端;

5):终端用IC卡公钥对该签名进行验证;

 

8:Visa fDDA:

流程
1):最终选择,卡片返回
Terminal Transaction Qualifiers (tag '9F66')
Unpredictable Number (tag'9F37')
Amount, Authorized (tag'9F02')
Transaction Currency Code(tag '5F2A')
Other tags not related to fDDA
(与Contact不同点:contact只返回9F37,且是通过内部认证发送给终端)
2):终端发起GPO指令:将上述tag对应的数据发到卡片
3):卡片返回:动态签名数据(终端发送过来的动态数据+卡片本身动态数据+IC卡私钥签名)+AFL
4):终端根据上一步骤得到的AFL读取记录(得到卡内的IC卡公钥证书和发卡行公钥证书,认证静态数据)
5):卡片认证相关数据9F69被添加在最后一条记录,终端根据该tag决定FDDA使用的签名算法,如果位返回,默认使用“01”
该版本默认使用01
6):移开卡片
7):终端根据IC卡公钥进行动态数据认证。
8):如果FDDA失败,根据卡片交易属性CTQ(9F6C)决定是拒绝还是联机
10):FDDA失败条件:aip不支持;终端相关数据缺失;卡片支持的版本和卡片认证相关数据9F69要求的版本不符;

 

9:签购单数据打印:

1)APP NAME:9F12、50

2)AID:84

3)TVR:95

4)TC:  9F26

5)TSI: 9B

10:TVR:未进行脱机数据认证:两个原因:一个是capk未设置,一个是卡片不支持,TAG AIP可知

TVR:

AIP:

 

 

 

 

 

原文地址:https://www.cnblogs.com/wnpp/p/13023489.html