1:
卡片是否需要做发卡行认证操作,首先看GPO返回的数据AIP里面,是否支持发卡行认证。
其次是看CDOL2(tag:8D)的数据里面是否有91,有的话说明GAC2需要发送91的值到卡片,该值是联机交易返回的55域里面取到的。
第二次GAC,第一次GAC发送GAC指令时组织数据采用的是CDOL1,第二次GAC组织命令时用的是CDOL2,CDOL2也是在读记录时候获取到的。
以下日志说明:CODL2有91,但是GAC2的时候,终端没有发送91的值(为全0)到卡片,导致卡片发卡行认证失败,卡片拒绝。
● 如果判定应该转为脱机交易,终端使用生成应用密码命令,请求IC卡返回一个TC;
● 如果判断应该转为联机交易,终端使用生成应用密码命令要求IC卡返回一个批准请求密码(ARQC);
● 如果判定应该拒绝交易,终端使用生成应用密码命令要求IC卡返回一个应用认证密码(AAC);
—— 把 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: