ARQC与ARPC的生成和校验方法

news/2024/11/9 20:38:43 标签: java

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)

 

转载于:https://www.cnblogs.com/ttss/p/4364328.html


http://www.niftyadmin.cn/n/917661.html

相关文章

java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)

简单介绍一下: 老王是个新人,心血来潮想用java试试写爬虫,完全零基础,搜了很多教程,往往因为作者水平太高,不能一下子理解大佬代码中的深意,并且有些看似很简单的东西,对于我这种菜…

mysql metadata lock(三)

前言 MDL锁主要用来保护Mysql内部对象的元数据,通过MDL机制保证DDL与DML以及SELECT查询操作的并发。MySQL Meta Lock(一)和MySQL Meta Lock(二)已经讲了一些关于MDL知识,本文将会对MDL进行一个补充,并解释查询堵塞和mysqldump获取一致性备份的…

java爬虫入门第三弹——正则表达式简单应用(抓取豆瓣读书信息并以文本文件输出)

简单介绍一下: 老王是个新人,心血来潮想用java试试写爬虫,完全零基础,搜了很多教程,往往因为作者水平太高,不能一下子理解大佬代码中的深意,并且有些看似很简单的东西,对于我这种菜…

Java学习基础知识

J2SEJava的标准开发平台。是J2EE和J2ME的基础,Core Java开发基于该平台 J2EEJava的企业己开发平台,Java的主要应用方向,大型系统的开发都是在该平台的完成,Web开发也属于其中的一部分 J2MEJava的微系统开发平台,是一个正在成长的平台,主要用于资源有限的设备上的Java的…

为Windows 7的winsxs目录瘦身,谨慎。

刚使用Win7 系统不久,前段时间在清理系统垃圾时发现,win7系统的windows文件夹下的winsxs 文件夹占用空间很大,想清理之,却提示无权限无法清理。随即在网上查了个到底,原来winsxs是一个超大的文件仓库,系统所…

Java 反射基础

语言对自身的一个检验实现: import java.lang.reflect.Method;import java.util.Stack; public class HelloWord

codevs1145

题目描述 Description 给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n3的情…

Java format date to String or String to date

参考类: java.text 类 DateFormat java.lang.Objectjava.text.Formatjava.text.DateFormat所有已实现的接口: Serializable, Cloneable 直接已知子类: SimpleDateFormat 构造方法摘要protected DateFormat() 创建一个新的 DateFormat。