C.1.1MAC计算
命令中需要加密的数据加密以后再计算 MAC。MAC 使用对称密钥算法计算的,步骤
如下:
1. 初始值为 8 字节全零。(此步骤可省略)
2. 下列数据按顺序排列得到一个数据块 D:
-
CLA,INS,P1,P2,Lc(Lc 的长度包括 MAC 的长度)
- ATC(对于发卡行脚本处理,此 ATC 在请求中报文中上送)
- 应用密文(对于发卡行脚本处理,此应用密文通常是 ARQC,或 AAC,在请
求报文中上送)
- 命令数据域中的明文或密文数据(如果存在)
3. 将上述数据块 D 分成 8 字节长的数据块 D1,D2,D3…最后一块数据块的字节长
度为 1 到 8。
4. 如果最后一块数据块的长度为 8 字节,后面补 8 字节数据块:80 00 00 00 00 00 00
00,执行步骤 5。
如果最后一块数据块的长度小于 8 字节,后面补一个字节 80,如果长度到 8 字节,
执行步骤 5。如果仍然不够 8 字节,补 00 直到 8 字节。
5. 用 MAC 过程密钥对数据块进行加密。MAC 过程密钥的生成见“C.4 过程密钥生成”。
图是使用 MAC 过程密钥 A 和 B 生成 MAC 的流程图。
6. MAC 的计算结果为 8 字节,从最左边的字节开始取 4 字节。
初始值
I2
I3
I4
I5
+
KMA
DEA(e)
KMA
DEA(e)
KMA
DEA(e)
KMA
DEA(e)
KM
B
DEA(d)
O1
+
D2
O2
+
D3
O3
+
D4
O5
O4
KM
A
DEA(e)
O6
MAC
I1=D1
说明:
I = 输入
DEA(e)= 数据加密算法(加密模式) KMA = MAC过程密钥A
DEA(d)= 数据加密算法(解密模式) KMB = MAC过程密钥B
O = 输出
D = 数据块
+ = 异或
图 C.1:使用双长度DEA密钥计算MAC的算法