1.POS终端MAC的算法
POS终端采用ECB的加密方式,简述如下:
a) 将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MACELEMEMENT BLOCK (MAB)。
b) 对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。
示例:
MAB = M1 M2 M3 M4
其中:
M1 = MS11 MS12MS13 MS14 MS15 MS16 MS17 MS18
M2 = MS21 MS22MS23 MS24 MS25 MS26 MS27 MS28
M3 = MS31 MS32MS33 MS34 MS35 MS36 MS37 MS38
M4 = MS41 MS42MS43 MS44 MS45 MS46 MS47 MS48
按如下规则进行异或运算:
MS11MS12 MS13 MS14 MS15 MS16 MS17 MS18
XOR) MS21 MS22 MS23 MS24MS25 MS26 MS27 MS28
---------------------------------------------------
TEMP BLOCK1 = TM11 TM12 TM13 TM14 TM15 TM16 TM17 TM18
然后,进行下一步的运算:
TM11TM12 TM13 TM14 TM15 TM16 TM17 TM18
XOR) MS31 MS32 MS33 MS34MS35 MS36 MS37 MS38
---------------------------------------------------
TEMP BLOCK2 = TM21 TM22 TM23 TM24 TM25 TM26 TM27 TM28
再进行下一步的运算:
TM21TM22 TM23 TM24 TM25 TM26 TM27 TM28
XOR) MS41 MS42 MS43 MS44MS45 MS46 MS47 MS48
---------------------------------------------------
RESULT BLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
c) 将异或运算后的最后8个字节(RESULT BLOCK)转换成16个HEXDECIMAL:
RESULTBLOCK = TM31 TM32 TM33 TM34 TM35 TM36 TM37 TM38
= TM311 TM312 TM321 TM322 TM331 TM332 TM341 TM342 ||
TM351 TM352 TM361 TM362 TM371 TM372TM381 TM382
d) 取前8个字节用MAK加密:
ENCBLOCK1 = eMAK(TM311TM312 TM321 TM322 TM331 TM332 TM341 TM342)
= EN11 EN12EN13 EN14 EN15 EN16 EN17 EN18
e) 将加密后的结果与后8个字节异或:
EN11 EN12 EN13 EN14 EN15 EN16 EN17 EN18
XOR) TM351 TM352 TM361 TM362 TM371 TM372 TM381TM382
------------------------------------------------------------
TEMP BLOCK= TE11 TE12 TE13 TE14 TE15 TE16 TE17 TE18
f) 用异或的结果TEMP BLOCK再进行一次单倍长密钥算法运算。
ENC BLOCK2 = eMAK(TE11 TE12 TE13 TE14 TE15 TE16TE17 TE18)
= EN21 EN22 EN23 EN24 EN25 EN26EN27 EN28
g) 将运算后的结果(ENCBLOCK2)转换成16个HEXDECIMAL:
ENC BLOCK2 = EN21 EN22 EN23 EN24 EN25 EN26 EN27 EN28
= EM211 EM212 EM221 EM222 EM231 EM232 EM241 EM242 ||
EM251 EM252 EM261 EM262 EM271 EM272 EM281EM282
示例:
ENC RESULT=%H84, %H56, %HB1, %HCD, %H5A,%H3F, %H84, %H84
转换成16个HEXDECIMAL:
“8456B1CD5A3F8484”
h) 取前8个字节作为MAC值。
取”8456B1CD”为MAC值。
2.MAC算法实例操作
用到的计算工具:DES算法工具和Tools.exe
预授权测撤销报文:
00 76 60 00 02 00 00 60 32 00 32 00 03 02 00 70 24 04 80 0C C0 80 19 1962 17 90 76 00 00 09 91 40 10 20 00 00 00 00 00 00 00 01 00 01 29 26 04 01 2000 31 32 33 34 35 36 37 38 39 30 31 32 31 32 35 36 35 38 31 32 33 34 36 31 3336 31 32 33 34 35 36 37 38 39 30 32 31 32 34 32 31 35 36 00 14 23 00 00 01 0006 01 00 12 00 00 01 00 01 25 42 34 34 44 31 32 32 35
将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK(MAB)。对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”,
0200702404800CC0
8019196217907600
0009914010200000
0000000000010001
2926040120003132
3334353637383930
3132313235363538
3132333436313336
3132333435363738
3930323132343231
3536001423000001
0006010012000001
0001250000000000
最后得到的异或结果为:
A531EE26210C71C4
将异或运算后的最后8个字节转换成16个HEXDECIMAL,结果为:
4135333145453236
3231304337314334
取前8个字节用MAK加密,结果为:
8AB6D7B0D940E3C0
将加密后的结果与后8个字节异或得到的结果为:
B887E7F3EE71A0F4
用异或的结果TEMP BLOCK再进行一次单倍长密钥算法运算,结果为:
B44D1225E4D21238
将运算后的结果转换成16个HEXDECIMAL,结果如下图:
取前8个字节作为MAC值:
4234344431323235
对比64报文解析:
00域: 0200
01域: 702404800CC08019
02域: 长度区: 19 数据区:62179076000009914010
03域: 200000
04域: 000000000001
11域: 000129
14域: 2604
22域: 0120
25域: 00
37域: 123456789012
38域: 125658
41域: 12346136
42域: 123456789021242
49域: 156
60域: 长度区: 0014 数据区23000001000601
61域: 长度区: 0012 数据区000001000125
64域: 4234344431323235
发现计算正确!