使用3DES/DES算法作为加密运算来计算MAC 。
计算MAC步骤如下:
- 线路报文MAC计算跳转到步骤1。
- 特定应用的固定数据MAC计算跳转到 步骤2。
- 线路报文MAC计算。
- 取4字节的随机数 + “00 00 00 00”作为初始变量。
- 线路报文MAC计算数据。
按照顺序将以下数据连接在一起形成一个数据块:
Lc为终端发出的命令数据域的实际长度,包括4字节MAC 。
- 特定应用的固定数据MAC计算。
- 取8字节“00 00 00 00 00 00 00 00”作为初始变量。
- 特定应用MAC计算数据。
按照顺序将特定应用的固定数据连接在一起形成一个数据块。
- 将上一步产生的大数据块分成8字节为单位的小数据块,标号分别为D1,D2,D3,D4等, 最后的数据块可能为1至8个字节。
- 对最后一个数据块按如下方法填充数据,使其达到8个字节:
- 若最后一数据块长度已经为8字节,其后仍然添加8个字节的十六进制数字 “80 00 00 00 00 00 00 00”。
- 若最后一数据块长度不足8字节,则在其后添加十六进制数字“80”,若仍不足8字节,则在其后添加十六进制数字“00”,直至达到8个字节为止。
- 对这些8字节长度的数据块采用应用维护密钥 (AMK),以 3DES 算法进行加密,如图1 。
采用该算法来计算的8字节长度数据块的个数取决于第一步计算的数据块的长度。MAC是最后得到的8字节数据加密块的从左侧起前4个字节 。
图1 双长度DEA Key的SM-MAC算法
- I = 输入
= 异或操作- O = 输出
- DEA(e) = 数据加密算法加密模式
- D = 数据块
- DEA(d) = 数据加密算法解密模式
- KMA = 双长度密钥左8字节
- KMB = 双长度密钥右8字节