• 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:

     

     

     

     

     

  • 相关阅读:
    领会一些比较巧妙的算法
    操作系统os常识
    C++中的继承与虚函数各种概念
    我学shell程序的记录
    matlab:linux环境中将m文件编译成动态链接库
    struct内存对齐:gcc与VC的差别
    fedora中丢失或损坏fstab,无法启动,如何补救
    判断一个字符串中的字符是否都在另一个中出现
    linux下的不错的小软件:apvlv,zathura和vifm
    C语言中将结构体写入文件
  • 原文地址:https://www.cnblogs.com/wnpp/p/13023489.html
Copyright © 2020-2023  润新知