POS终端“密事”之MAC运算

前言

紧接着上篇,上篇加密计算了PIN BLOCK,这篇计算MAC运算。话不多说,直接开怼。

MAC运算

用上篇的TMK** C1A4AE89BAEAB029

以下是我日志打印出pos向银行终端发送的8583报文消费业务报文,下文简单说一下之后会有文章详讲。

011660001400006031003100060200702406C020C09A1119623501345220000006900000000000000000580003172611071000000012376235013452200000069D2611220778801000003635343635343233393431313330363539393939393235313536FF0C47F016D61C79260000000000000001459F2608AE60C8CABA4C02F99F2701809F101307020103A0A002010A010000001100B96D058B9F3704329971469F36020391950500A00470009A031903199C01009F02060000000000005F2A02015682027C009F1A0201569F03060000000000009F3303E0F0C89F34030203009F3501228408A0000003330101019F090200009F4104000007259F1E0836353436353432330014220001050006014132354434343436

简单区分四个部分
1.报文总长度 0116 2字节
2.TPUD地址 6000140000603100310006 11个字节
3.正文
0200702406C020C09A1119623501345220000006900000000000000000580003172611071000000012376235013452200000069D2611220778801000003635343635343233393431313330363539393939393235313536FF0C47F016D61C79260000000000000001459F2608AE60C8CABA4C02F99F2701809F101307020103A0A002010A010000001100B96D058B9F3704329971469F36020391950500A00470009A031903199C01009F02060000000000005F2A02015682027C009F1A0201569F03060000000000009F3303E0F0C89F34030203009F3501228408A0000003330101019F090200009F4104000007259F1E083635343635343233001422000105000601
4.64域mac校验值
4132354434343436

MAC运算算法

以下方法根据<销售点终端(POS)应用规范> 之 POS终端MAC的算法
a.取消息类型到63域之间的部分构成MAB(MAC ELEMEMENT BLOCK)
就是上面第三部分
b.对MAB,按每八个字节做异或,如果最后不满8个字节则00补全
直接上图
POS终端“密事”之MAC运算

最后得到的异或结果 RESULT Block = 18851A99E017502B

c.RESULT Block运算后的8个字节转换成16个HexDecimal(16进制)
POS终端“密事”之MAC运算
Block1: 18851A99 --> 3138383531413939
Block2: E017502B --> 4530313735303242

d.取前8字节(Block1)用TMK加密

Block1:3138383531413939
**: C1A4AE89BAEAB029
---- DES(单倍)
ENC Block1 20EC0A953EA6F8D7

POS终端“密事”之MAC运算

e.加加密后的结果与后8字节(Block2)异或

ENC Block1 20EC0A953EA6F8D7
Block2  4530313735303242
---xor
TMP Block 65DC3BA20B96CA95

POS终端“密事”之MAC运算

f.用异或结果(TMP BLOCK)在进行一次**加密运算

TMP Block 65DC3BA20B96CA95
**: C1A4AE89BAEAB029
---- DES(单倍)
ENC Block2 A25D44463E410A56

POS终端“密事”之MAC运算

g. 将运算结果(ENC Block2)转换成16个HexDecimal(16进制)
A25D44463E410A56
HEX 41323544343434363345343130413536

h.取前8字节作为MAC值
41323544343434363345343130413536
4132354434343436
一致,解密成功

总结

今天将PIN和MAC的运算书写了一遍,因为是对称算法,所以加密和解密的过程都是一样的。大家觉得干巴巴看没有意思,可以实际动手操作试试。最多花费半天的时间,就能了解清楚。还是上一章的总结,内容很简单,只是信息不对称而已。