《复旦FMCOS 》《PBOC2.0第2部分》
圈存密钥装载: 80D40102153FF0F2000200112233445566778899aabbccddeeff
02-密钥标识
3F-圈存密钥
F0F2-使用权限更改权限
0002-密钥版本算法标识
选择电子钱包: 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
消费初始化命令
805001020b0000000001001122334455
8050-CLA和INS
0102-P1和P2
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-CLA和INS
0100-P1和P2
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
1.圈存初始化MAC1计算不正确原因是圈存密钥装载时算法标识不对
00-3DES
01-DES
03-255保留
3.一般消费或者圈存,CPU卡中装载的是分散过的密钥,SAM卡中装载的是未分散的密钥
4.本案例中未使用SAM卡,圈存消费密钥都未分散
参考文档一定要认真看,认真看,认真看,尤其是感到不确定的地方
总结一句话,所有的问题都是不认真看文档造成的,所有给自己挖的坑也都是不认真看文档
出了问题自己搞不定及时询问,幸亏及时问了校长帮忙计算,确定是密钥装载错误