FMCOS(FM1208-9,FM1208-10,FM1216等)除了支持使用常见的明文方式增加/修改密钥,还支持以密文+MAC的方法增加/修改密钥。
FMCOS的密钥,按密钥的增加/修改操作方式不同,可以分为【普通密钥】和【密文+MAC密钥】两类。这种分类对密钥的类型(如外部认证密钥、线路保护密钥等)和密钥的使用方式没有影响。
【密文+MAC密钥】,就是将【普通密钥】的类型字节最高2bit设为“11”。比如【普通】外部认证密钥的类型为39(0011 1001),【密文+MAC】外部认证密钥类型就是F9(1111 1001)。
使用密文+MAC进行密钥增改操作的前提是,当前的密钥文件中必须存在主控密钥(标识为00的外部密钥)。主控密钥用于加密数据和计算MAC。主控密钥的类型可以为39,也可以为F9。(但只能先用明文增加类型为39的主控密钥,然后再使用密文+MAC将其修改为类型F9。)
何时需要使用密文+MAC操作密钥:
1. 增加一个【密文+MAC密钥】(如类型F9);
2. 修改【普通密钥】为【密文+MAC密钥】(如类型39修改为F9);
3. 修改【密文+MAC密钥】,包括将其改为【普通密钥】(如修改F9密钥的值;或将类型F9改为39)。
MF下的密钥文件中存在如下密钥:
1. 主控密钥,密钥值FF FF FF FF FF FF FF FF。
2. 外部认证密钥,标识01,类型39。
欲使用密文带MAC方式,在MF下增加标识为02的外部认证密钥(类型F9,不是39)。
密钥的使用权、修改权均为F0;后续状态A;错误计数器F;密钥值11 22 33 44 55 66 77 88。
命令的数据域:
F9 F0 F0 AA FF 11 22 33 44 55 66 77 88
注意39(0011 1001)变成了F9(1111 1001)。
对数据域进行扩展和填充,得到待加密的明文数据:
0D F9 F0 F0 AA FF 11 22 33 44 55 66 77 88 80 00
注:0D为LD字节,表示原始数据的长度;80 00为填充字节。(具体实现请参阅《FMCOS 2.0用户手册》)
使用主控密钥对明文数据进行DES加密,得到密文:
7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE
注:FMCOS使用DES-ECB加密。
增加密钥的命令:
84 D4 01 02 14 7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE
密文的实际长度是0x10,但因为后面还要附带4字节的MAC,因此Lc为0x14。
因为使用了密文+MAC(也就是加密线路保护),因此CLA的变为84。
请求随机数,并使用主控密钥计算MAC:
随机数:4C 45 BA B9
MAC:D7 C9 43 F6
注:FMCOS对MAC计算的实现,请参阅《FMCOS 2.0用户手册》。
完整命令:
84 D4 01 02 14 7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE D7 C9 43 F6
欲使用密文带MAC,修改MF下标识为01的外部密钥,改变其密钥值和类型(39改为F9)。
密钥的使用权、修改权均为F0;后续状态A;错误计数器F;新的密钥值11 22 33 44 55 66 77 88。
命令的数据域:
F9 F0 F0 AA FF 11 22 33 44 55 66 77 88
39变为F9的原因,前文已经表明,不再赘述。
对数据域进行扩展和填充,得到待加密的明文数据:
0D F9 F0 F0 AA FF 11 22 33 44 55 66 77 88 80 00
使用主控密钥对明文数据进行DES加密,得到密文:
7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE
修改密钥的命令:
84 D4 39 01 14 7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE
请求随机数,并使用主控密钥计算MAC:
随机数:EF 36 48 18
MAC:90 95 E4 E1
完整命令:
84 D4 39 01 14 7C 87 BC 23 14 00 21 B3 AF EA 67 E6 35 9D DC FE 90 95 E4 E1
欲使用密文带MAC,修改MF下标识为02的外部认证密钥类型(F9改为39)。
命令的数据域:
39 F0 F0 AA FF 11 22 33 44 55 66 77 88
对数据域进行扩展和填充,得到待加密的明文数据:
0D 39 F0 F0 AA FF 11 22 33 44 55 66 77 88 80 00
使用主控密钥对明文数据进行DES加密,得到密文:
7E 65 DE 14 2F 66 CA 41 AF EA 67 E6 35 9D DC FE
修改密钥的命令:
84 D4 F9 02 14 7E 65 DE 14 2F 66 CA 41 AF EA 67 E6 35 9D DC FE
请求随机数,并使用主控密钥计算MAC:
随机数:C0 B3 54 9C
MAC:01 2E F5 F5
完整命令:
84 D4 F9 02 14 7E 65 DE 14 2F 66 CA 41 AF EA 67 E6 35 9D DC FE 01 2E F5 F5