CPU卡电子钱包圈存消费调试记录


参考规范:

《复旦FMCOS 》《PBOC2.0第2部分》

1.密钥装载

圈存密钥装载: 80D40102153FF0F2000200112233445566778899aabbccddeeff

02-密钥标识

3F-圈存密钥

F0F2-使用权限更改权限

0002-密钥版本算法标识

2.圈存

选择电子钱包: 00A4000002000200

发送圈存初始化: 805000020b020000200000112233445510

0002-P1P2-电子钱包

02-密钥标识

00002000-四字节交易金额

001122334455 -终端机编号

10- Le

 

1.00圈存密钥 3f 3f 3f3f 3f 3f 3f3f 3f 3f 3f3f3f 3f 3f3f

2.01圈存密钥00112233445566778899aabbccddeeff

3.02圈存密钥00112233445566778899aabbccddeeff


圈存初始化命令和返回数据:

=> 80 50 00 02 0B 02 00 00 20 00 00 11 22 33 44 55 10

<=00 00 00 00 00 00 00 02 39 48 bc 11 31 ba 0b cd 90 00


3DES加密算法-ECB

初始化向量:00 00 00 00 00 00 00 00

处理数据:39 48 bc 11 00 00 80 00 

4字节随机数+2字节联机交易序号+8000)

密钥:00112233445566778899aabbccddeeff

结果:3FF239BBDB26018A


 MAC 加密算法-CBC(PBOC-MAC)

初始化向量:00 00 00 00 00 00 00 00

处理数据:00 00 00 00 00 00 20 00 02 00 11 22 33 44 55

4字节原余额+4字节交易金额+1字节交易类型标识+6字节终端机编号)

密钥:3FF239BBDB26018A

结果:C47312E9

卡片返回结果:31 ba 0b cd

 

圈存密钥装载:

80 D4 01 00 15 3F F0 F2 01 03 3F 3F3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F 3F


圈存初始化命令和返回数据:

805000020b000000200000112233445510

<=00 00 00 00 00 00 01 03 ee 75 37 42 00 00 00 00 90 00

算法标识为03,发圈存初始化命令卡片返回的MAC1是:00 00 00 00

 

以上结果都不对,经过验证定位应该是密钥装载有问题,从新装载密钥然后圈存


从新装载圈存密钥

80D40101153FF0F2010000112233445566778899aabbccddeeff

80D40102153FF0F2000000112233445566778899aabbccddeeff

80D40103153FF0F0010000112233445566778899aabbccddeeff

TAC密钥:

80D401001534F0F2010100112233445566778899aabbccddeeff

消费密钥:

80D40100153EF0F2000000112233445566778899aabbccddeeff


圈存初始化命令和返回数据:

=> 80 50 00 02 0B 02 00 00 20 00 00 11 22 33 44 55 10

<=00 00 00 00 00 00 00 00 e0 b8 47 48 ea 41 1f 90 90 00

过程密钥:7C45FBFB5B3A68F5

MAC1:EA411F90


计算过程:

3DES加密算法-ECB

初始化向量:00 00 00 00 00 00 00 00

处理数据:e0 b8 47 48 00 00 80 00 

4字节随机数+2字节联机交易序号+8000)

密钥:00112233445566778899aabbccddeeff

结果:7C45FBFB5B3A68F5

 

MAC 加密算法-CBC(PBOC-MAC)

初始化向量:    00 0000 00 00 00 00 00

处理数据:  00 00 00 00 00 00 20 00 02 00 11 22 33 44 55

4字节原余额+4字节交易金额+1字节交易类型标识+6字节终端机编号)

密钥:        7C45FBFB5B3A68F5

结果:        EA411F90

卡片结果:  ea 41 1f90


 验证结果正确,再次证明确实是圈存密钥装载的有问题,由于中途卡片拿开,再次做圈存初始化。

圈存命令中卡片计算MAC2使用的过程密钥是计算MAC1时产生的过程密钥,所以圈存初始化和圈存是一个连续的过程,中途卡片不能断电。


圈存初始化命令和返回数据:

=>80 50 00 02 0B 01 00 00 20 00 00 11 22 33 44 55 10

<= 00 00 00 00 00 00 01 00 c9 03 81 4d 03 97 6c 22 90 00

过程密钥:11FDF264E8AEEFA3

MAC1:03976C22


圈存命令和返回数据:

805200000B201612161058008AFA5718

<= fa 00 06 6d 90 00

 

MAC2计算:

MAC 加密算法-CBC(PBOC-MAC)

初始化向量:    00 0000 00 00 00 00 00

处理数据:  000020000200112233445520161216105800

4字节交易金额+1字节交易标识+6字节终端机编号+7字节终端交易日期时间)

密钥:        11FDF264E8AEEFA3

结果:        8AFA5718

 

TAC计算:

MAC 加密算法-CBC(PBOC-MAC)

密钥:       8888888888888888

(内部密钥左右8字节异或)

处理数据:000020000000000020000200112233445520161216105800

4字节新余额+2字节旧联机序号+4字节交易金额+1字节交易类型+6字节终端机编号+4字节终端交易日期+3字节终端交易时间)

结果:     FA 0006 6D

卡片:    FA 0006 6D

 圈存成功,电子钱包余额更新成00002000

 3.消费

消费初始化命令

805001020b0000000001001122334455

8050-CLAINS

0102-P1P2

00-密钥标识

00000001-交易金额

001122334455-终端机编号


 消费初始化命令和返回数据

805001020b0000000001001122334455

<= 00 00 20 00 00 00 00 00 00 00 00 58 46 33 c9 90 00

 

MAC1计算:

3DES加密算法-ECB

初始化向量:00 00 00 00 00 00 00 00

处理数据:58 46 33 c9 00 00 0000 

4字节随机数+2字节脱机交易序号+交易序号最右两字节)

密钥:00112233445566778899aabbccddeeff

结果:C08346DF9F1D457A

 

MAC 加密算法-CBC(PBOC-MAC)

初始化向量:    00 0000 00 00 00 00 00

处理数据:  00 00 00 01 06 0011 22 33 44 55 20161216134600

4字节交易金额+1字节交易类型标识+6字节终端机编号+4字节终端交易日期+3字节终端交易时间

密钥:        C08346DF9F1D457A

结果:        D45737C5

 

消费命令:

805401000F0000000020161216134600D45737C508

8054-CLAINS

0100-P1P2

00000000-终端交易序号

20161216-终端交易日期

134600-终端交易时间

D45737C5-MAC1


 消费命令和返回数据:

805401000F0000000020161216134600D45737C508

<= 8a f2 70 dc 66 b5 4a 6b 90 00


TAC计算:

MAC 加密算法-CBC(PBOC-MAC)

密钥:      

8888888888888888

(内部密钥左右8字节异或)

处理数据:

00000001060011223344550000000020161216134600

4字节交易余额+1字节交易类型标识+6字节终端机编号+4字节终端交易序号+4字节终端交易日期+3字节终端交易时间)

结果:    8AF270DC

卡片:    8a f270 dc

 

MAC2计算:

MAC 加密算法-CBC(PBOC-MAC)

初始化向量:    00 0000 00 00 00 00 00

处理数据:  00000001 4字节交易金额

密钥:      C08346DF9F1D457A

结果:        66B54A6B

卡片:        66b54a6b


4.总结

1.圈存初始化MAC1计算不正确原因是圈存密钥装载时算法标识不对

 00-3DES

 01-DES

 03-255保留


2.过程密钥计算使用ECB模式3DES算法,MAC使用CBC模式des的MAC算法

3.一般消费或者圈存,CPU卡中装载的是分散过的密钥,SAM卡中装载的是未分散的密钥

4.本案例中未使用SAM卡,圈存消费密钥都未分散

参考文档一定要认真看,认真看,认真看,尤其是感到不确定的地方

总结一句话,所有的问题都是不认真看文档造成的,所有给自己挖的坑也都是不认真看文档

出了问题自己搞不定及时询问,幸亏及时问了校长帮忙计算,确定是密钥装载错误



  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值