电子钱包交易过程中利用PSAM卡计算 TAC--交易验证码

来源:互联网 发布:java runnable 编辑:程序博客网 时间:2024/04/30 15:43

目的:自己计算TAC并且和CPU卡消费成功后产生的TAC值相同

原因:电子钱包交易过程中可能会出现闪卡现象(用户卡中的金额已经扣除,但是终端没有收到卡片返回的TAC和MAC2),所以再次靠卡时,终端会判断是否是闪卡,如果是则终端根据之前的交易数据,自行计算TAC,然后上送后台系统。


TAC的计算方法:
初始向量: 00 00 00 00 00 00 00 00
待处理数据:4字节交易金额 +1字节交易类型标识+6字节终端机编号+4字节终端交易序号+4字节终端交易日期+3字节终端交易时间
密钥:TAC密钥左8字节与右8字节异或得到的8字节数据

算法:DES_MAC 算法


说明:

以上过程全部CPU卡,PSAM内部COS自动完成。

以下计算TAC的流程适用于:

 1.如果PSAM卡中TAC秘钥类型是口令重装密钥类型,则此PSAM卡中的TAC密钥对CPU卡中的分散因子分散之后=CPU卡中的TAC密钥,因为 口令重装密钥在被使用时COS会自动左右8字节进行异或。

  2.如果PSAM卡中的TAC密钥类型是加密MAC密钥,或者是MAC密钥类型,则此PSAM卡TAC密钥对CPU卡中的分散因子分散之后=CPU卡中的TAC密钥左右8字节异或的值



例程计算:

先用CPU卡消费计算一个TAC,并且保存计算TAC需要的数据,

 然后用相关数据自己计算TAC,比较和CPU卡产生的TAC是否相同,

 计算过程中使用PSAM卡的DES初始化命令进行分散密钥,DES命令计算TAC。


CPU卡消费过过程中的相关数据:
CPU卡机构代码:   07 92 80 00 00 00 01 45
用户卡序列号:       20 16 12 21 00 00 10 03
日期时间:               0170214154000
终端交易序号 :      00000005
交易金额:              00000001
终端机编号:          36 04 86 60 00 02

交易类型标识:      09


CPU卡消费成功返回的TAC+MAC2
a5 71 7b 4f 99 09 f5 38


使用PSAM卡计算TAC:
1.发送DES初始化命令分散TAC密钥:
80 1A 44 00 10 20 16 12 21 00 00 10 03 07 92 80 00 00 00 01 45
 

 

长度  

  值       

描述    

代码

(byte)

(Hex)

 

CLA

1

80

 

INS

1

1A

 

P1

1

                   44

密钥用途,TAC密钥

P2

1

00

密钥版本,TAC密钥标识

Lc

1

10

分散因子的长度16字节

DATA

XX

20 16 12 21 00 00 10 03

07 92 80 00 00 00 01 45

分散因子:

卡序列号

机构代码

Le

 

不存在

 
<=90 00


2.发送DES命令计算TAC
待处理数据:
00000001 09  36 04 86 60 00 02 00000005 20170214154000
4字节交易金额 +1字节交易类型标识+6字节终端机编号+4字节终端交易序号+4字节终端交易日期+3字节终端交易时间
因为数据不是8的倍数,所以要分块补足:
00000001 09  36 04 86 60 00 02 00000005 20170214154000 80 00
(补80 00凑够16字节)


DES命令:
80 FA 05 00 20  00 00 00 00 00 00 00 00 00000001 09  36 04 86 60 00 02 00000005 20170214154000 80 00

 

长度  

  值       

描述    

代码

(byte)

(Hex)

 

CLA

1

80

 

INS

1

FA

 

P1

1

                   05


采用MAC计算方式,有初始值,无后续块

P2

1

00

DES标识号

Lc

1

20

要计算的数据长度

DATA

XX


00 00 00 00 00 00 00 00 

00000001 09  36 04 86
60 00 02 00000005 

20170214154000 80 00


16字节的计算+

TAC所需数据8字节初始值

Le

 

不存在



采用MAC计算方式,有初始值,无后续块

<=a5 71 7b 4f 90 00


CPU卡返回的TAC:a5 71 7b 4f
结论:利用PSAM卡自己计算TAC是可行的,方法如上