月度归档:2018年09月

CPU卡电子钱包圈存与消费(三)

三、 消费

1、选择3F01目录

Send Data : 00 A4 00 00 02 3F 01

RSP[88]: 6F 54 84 09 A0 00 00 00 03 86 98 07 01 A5 47 9F 08 01 02 9F 0C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00

2、取8字节随机数

Send Data :0084000008

RSP[10]: 9B 36 1B 26 CB 9F A8 C8 90 00

3、对随机数进行3DES加密

加密数据:9B 36 1B 26 CB 9F A8 C8

加密密钥:39393939393939393939393939393939(3F01目录外部认证密钥)

处理结果:97 F5 57 D8 ED E9 7F 95

4、外部认证

Send Data :008200000897F557D8EDE97F95

RSP[2]:9000

5、读余额

Send Data :805C000204

RSP[6]: 00 00 12 34 90 00

6、消费初始化

805001020B0000000002000000000001

RSP[17]: 00 00 12 34 00 00 00 00 00 00 01 2A B5 07 51 90 00

电子存折或电子钱包旧余额:00001234

电子存折或电子钱包脱机交易序号:0000

透支限额:000000

密钥版本号:00

算法标识:01

随机数:2A B5 07 51

计算过程密钥

过程密钥由DATA中第一字节即密钥标识符指定的消费密钥对(4字节随机数+2字节电子存折或电子钱包脱机交易序号+终端交易序号的最右两字节)3DES数据加密生成

终端交易序号在消费命令中指定,可以设置位00000000

密钥: 3E013E013E013E013E013E013E013E01
数据:2A B5 07 51 00 00 00 00
加密结果:3A A4 9C 8C D5 B4 45 75

计算消费命令中的MAC1

MAC1由过程密钥对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节终端交易日期+3字节终端交易时间)DES数据加密生成

交易金额:00000002

交易类型标识:

05-电子存折消费

06-电子钱包消费

终端机编号:000000000001

交易日期20180807

交易时间163500

clip_image002

得到MAC1 : 677E4922

7、消费

805401000F0000000020180807163500677E4922

RSP[10]: 78 5C 74 07 6B 7F 5B EC 90 00

交易验证码TAC: 78 5C 74 07

MAC2: 6B 7F 5B EC

校验MAC2

MAC2由过程密钥对4字节交易金额DES数据加密生成

clip_image004

加密结果见上图,校验成功。

校验TAC

TAC码由TAC密钥左右8字节异或运算的结果对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节终端交易序号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

内部密钥为:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34

TacKey.Left(8) = 3434343434343434

TacKey.Right(8) = 3434343434343434

XOR 结果 = 0000000000000000

交易金额:00000002

交易类型:06

终端机编号:000000000001

终端交易序号:00000000

交易日期:20180807

交易时间:163500

clip_image006

加密结果见上图,校验成功。

8、读余额

805C000204

RSP[6]: 00 00 12 34 90 00

RSP[6]: 00 00 12 32 90 00

扣费成功

扣费不需要验证PIN码。

CPU卡电子钱包圈存与消费(二)

二、 圈存命令

1、选择3F01目录

Send Data : 00 A4 00 00 02 3F 01

RSP[88]: 6F 54 84 09 A0 00 00 00 03 86 98 07 01 A5 47 9F 08 01 02 9F 0C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 90 00

2、取8字节随机数

Send Data :0084000008

RSP[10]: 9B 36 1B 26 CB 9F A8 C8 90 00

3、对随机数进行3DES加密

加密数据:9B 36 1B 26 CB 9F A8 C8

加密密钥:39393939393939393939393939393939(3F01目录外部认证密钥)

处理结果:97 F5 57 D8 ED E9 7F 95

4、外部认证

Send Data :008200000897F557D8EDE97F95

RSP[2]:9000

5、校验pin码

Send Data : 00 20 00 00 03 12 34 56
Recv Data : 90 00

6、读余额

Send Data : 80 5C 00 02 04

RSP[6]: 00 00 00 00 90 00

7、初始化圈存

Send Data : 80 50 00 02 0B 0000001234000000000001

RSP[18]: 00 00 00 00 00 00 00 01 F9 CA BA 91 6C 39 4D 64 90 00

电子存折或电子钱包旧余额 00000000

电子存折或电子钱包联机交易序号0000 (注意交易序号每次会变化)

密钥版本号:00

算法标识:01

伪随机数:F9 CA BA 91

MAC1: 6C 39 4D 64

算法标识

00-3DES

01-DES

02-255保留

计算过程密钥

过程密钥由DATA中第一字节即密钥标识符指定的圈存密钥对(4字节随机数+2字节电子存折或电子钱包联机交易序号+8000)3DES数据加密生成

密钥: 3F013F013F013F013F013F013F013F01
数据:F9 CA BA 91 00 00 80 00
加密结果:03 01 5B EA 34 7E A2 31

计算MAC1

MAC1由过程密钥对(4字节电子存折或电子钱包旧余额+4字节交易金额+1字节交易类型+6字节终端机编号)DES数据加密生成

交易类型:

旧余额:00000000

交易金额:00001234

交易类型:

01-电子存折圈存

02-电子钱包圈存

终端机编号:000000000001

KEY: 03 01 5B EA 34 7E A2 31

INITDATA: 0000000000000000

DATA: 000000000000123402000000000001

clip_image002

MAC的高4位和卡片返回的MAC1相等,证明命令执行正确

计算圈存命令中的MAC2

MAC2由过程密钥对(4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

交易金额:00001234

交易类型:02

终端机编号:000000000001

交易日期:20180805

交易时间:164522

密钥:03 01 5B EA 34 7E A2 31

初始向量: 0000000000000000

数据 : 000012340200000000000120180805164522

取前4个字节:

MAC2 = 7F4F6613

clip_image004

7、圈存

Send Data : 80 52 00 00 0B 201808051645227F4F6613

RSP[6]: F7 C1 CC 20 90 00

返回的交易验证TAC码:

F7 C1 CC 20

验证TAC码

TAC码由TAC密钥左右8字节异或运算的结果对(4字节电子存折或电子钱包新余额+2字节电子存折或电子钱包联机交易序号+4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节主机交易日期+3字节主机交易时间)DES数据加密生成

新余额:00001234

交易序号:0000

交易金额:00001234

交易类型标识:02

终端机编号:000000000001

交易日期:20180805

交易时间:164522

内部密钥为:34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34

TacKey.Left(8) = 3434343434343434

TacKey.Right(8) = 3434343434343434

XOR 结果 = 0000000000000000

密钥: 0000000000000000

初始向量: 0000000000000000

数据: 000012340000000012340200000000000120180805164522

clip_image006

计算结果MAC高4字节与卡片返回的TAC相同,圈存成功

8、读余额

Send Data : 80 5C 00 02 04

RSP[6]: 00 00 12 34 90 00

CPU卡电子钱包圈存与消费(一)

首先了解下电子钱包和电子存折的区别:

1、 电子钱包EP:electronic purse

2、 电子存折ED:electronic deposit

3、 电子钱包一般只支持圈存,消费交易,很少的电子钱包支持圈提。电子存折支持圈存,消费,圈提,修改透支限额等功能。

4、 电子钱包消费时无需提交个人PIN,而电子存折消费时必须提交个人PIN。

电子钱包功能简单(只支持圈存和消费),消费简便(不需提交PIN),因此在小额扩展应用中远远要比电子存折来的方便和快速。

一、 CPU卡发卡建立电子钱包命令 继续阅读