zoukankan      html  css  js  c++  java
  • ARQC与ARPC的生成和校验方法

    ARQC:authenticate request cryptogram,授权请求报文

    ARPC:authenticate response cryptogram,授权响应报文

    AC:application cryptogram,应用密文

    AAC:application authenticate cryptogram,应用认证密文

    TC:transaction certificate,交易证书

    ATC:application transaction counter,应用交易计数器

    ARC:authenticate response code,授权应答码

    前提: 
    1. 获得IC卡AC子密钥(应用子密钥),或者获得发卡行AC主密钥(应用主密钥)  本例假设卡片的应用主密钥为MDKAC,十六字节: 
    MDKAC  = C4D689158AD9FB9D23105B91CE046D0E 
    2. 已知IC卡卡号PAN(5A)及卡序列号(5F34) 
    本例:  PAN = 6210220110002707355  卡号一般为19位,最后一位是校验位,  PAN ser =  01 ,卡序列号一般是一个字节,存储在tag5F34中 


    二、TC、ARQC及AAC的计算

    a.首先需要取IC卡AC子密钥(应用子密钥),如果已经获得了IC卡AC子密钥(应用子密钥)则略过此步。

    获取应用子密钥的方法:  用发卡行的应用主密钥===》分散===》IC卡的应用子密钥

    用发卡行主密钥分散出IC卡AC子密钥。方法为使用发卡行主密钥,对PAN(卡号)的后14位(如果PAN不足14位前面补0)加PAN序列号(卡序列号,tag5F34)(共8B)和对此取反的8个字节连接得到的16字节数据,做3DES加密计算就得到IC卡AC子密钥(应用子密钥)。

    如:  用MDKAC=C4D689158AD9FB9D23105B91CE046D0E    PAN = 62102 20110002707355  ,PAN ser =   01

            对20110002707355 01 DFEEFFFD8F8CAAFE 做3DES加密得 B8A15DA5F7043C317D9FD8F8DFE2BD75(UDK)应用子密钥

    (2011000270735501)  =》取反  =》( DFEEFFFD8F8CAAFE)

    (这就是所谓的有应用主密钥分散得到应用子密钥的过程)

    b.计算得到过程密钥:

    用IC卡AC子密钥(应用子密钥),对交易计数器ATC做3DES加密:

    1.在ATC前补6字节0x00,对ATC取反,并在前补6字节0x00,并连接成16字节的数据,作为3DES的加密数据

    例 如:ATC = 03D3 则  链接后的数据为: 00000000000003D3 000000000000FC2C     (其中FC2C为03D3取反后的值,可以用计算器(程序员模式)验证)

    2. 用IC卡的AC子密钥(应用子密钥)对如上数据做3DES加密得过程密钥:

     如: 用UDK对00000000000003D3000000000000FC2C做3DES加密得到的结果即是:4A43440B2D932ACDC4E2776ED562EE43 (过程密钥 )

    3.校验AAC、TC及ARQC

    IC卡返回的55域数据为:      待校验的密文: 81 A9 DC 93 10 F8 88 56

    授权金额:                     000000000000                                  9F0206

    其它金额:                     000000000000                                  9F0306

    国家代码:                     0156                                                9F1A02

    终端验证:                     0000000000                                     9505

    货币代码:                     0156                                                5F2A0

    交易日期:                     000000                                            9A03

    交易类型:                     00                                                   9C01

    随机数:                        00000444                                        9F3704

    AIP:                           7C00                                                 8202  

    ATC:                          03D3                                                9F3602

    CVR:                          0380A800                                        9F1013

    连接如上数据得:

    000000000000 000000000000 0156 0000000000 0156 00000000 00000444 7C00 03D3 0380A800

    用过程密钥对如上数据做MAC运算得到了AAC(应用认证密文)、TC(交易证书)或ARQC(授权响应报文):

     AAC、TC或ARQC  =   81A9DC9310F88856 与IC卡返回的响应密文比较相等,校验成功!

    三、ARPC的计算方式

    a.取授权应答码(ARC)  

    授权应答码为服务器返回的两字节数据,本例假设为:“00”  则ARC = 0x30 0x30  (十六进制)

    ARPC计算过程  

    1. 在ARC后补6个字节0x00,并和ARQC做异或运算  如:   3030 000000000000 异或(XOR) 81A9DC9310F88856  得 B199DC9310F88856  

    2. 使用过程密钥对异或结果做3DES加密运算就得到ARPC

    过程密钥:4A43440B2D932ACDC4E2776ED562EE43 对B199DC9310F88856 做3DES加密运算得ARPC密文:84DD63A221F915CA(ARPC)

    3. 命令(外部认证)  00 82 00 00 0A +ARPC(8B)+ARC(2B)

  • 相关阅读:
    漫谈程序员系列:咦,你也在混日子啊
    JVM加载class文件的原理机制
    maven编译的时候排除junit测试类
    mysql之——存储过程 + 游标 + 事务
    JSP页面之${fn:}内置函数
    生成24位字符串ID__IdGenerator.java
    oracle创建用户,表空间,虚拟路径,导入dbf
    eclipse手动修改默认工作空间
    资源
    http协议发送header+body+json及接收解析
  • 原文地址:https://www.cnblogs.com/ttss/p/4364328.html
Copyright © 2011-2022 走看看