目录

MAC计算

使用3DES/DES算法作为加密运算来计算MAC 。

计算MAC步骤如下:

  1. 线路报文MAC计算。

    1. 取4字节的随机数 + “00 00 00 00”作为初始变量。
    2. 线路报文MAC计算数据。

      按照顺序将以下数据连接在一起形成一个数据块:

      • CLA,INS,P1,P2,Lc

      Lc为终端发出的命令数据域的实际长度,包括4字节MAC 。

      • 命令数据域中包含的明文或密文数据

  2. 特定应用的固定数据MAC计算。

    1. 取8字节“00 00 00 00 00 00 00 00”作为初始变量。
    2. 特定应用MAC计算数据。

      按照顺序将特定应用的固定数据连接在一起形成一个数据块。

  3. 将上一步产生的大数据块分成8字节为单位的小数据块,标号分别为D1,D2,D3,D4等, 最后的数据块可能为1至8个字节。
  4. 对最后一个数据块按如下方法填充数据,使其达到8个字节:

    • 若最后一数据块长度已经为8字节,其后仍然添加8个字节的十六进制数字 “80 00 00 00 00 00 00 00”。
    • 若最后一数据块长度不足8字节,则在其后添加十六进制数字“80”,若仍不足8字节,则在其后添加十六进制数字“00”,直至达到8个字节为止。

  5. 对这些8字节长度的数据块采用应用维护密钥 (AMK),以 3DES 算法进行加密,如图1 。

    采用该算法来计算的8字节长度数据块的个数取决于第一步计算的数据块的长度。MAC是最后得到的8字节数据加密块的从左侧起前4个字节 。

    图1 双长度DEA Key的SM-MAC算法
    • I = 输入
    • = 异或操作
    • O = 输出
    • DEA(e) = 数据加密算法加密模式
    • D = 数据块
    • DEA(d) = 数据加密算法解密模式
    • KMA = 双长度密钥左8字节
    • KMB = 双长度密钥右8字节