加密SIM卡开发流程 第一步:首先确认流程是否正确:⑥获取ICCID,得到X1--| | |-⑦Kc=3DES(Km,X1)-| | | |--④Km-| |-⑧Kc=3DES(Kc,X2)-| |---②RND1--| | | | |------------⑤X2-----------| | | | ①取20字节--| |--⑨得到C | | | | |----------------------------③RND2-------------------------| 待续...① 从SIM卡接收到20字节的随机数; ② 从20字节随机数中取前4字节作为RND1; ③ 从20字节随机数中取后16字节作为RND2; ④ 取RND1的第四字节(从左到右)与“0X07”进行“与”操作,再对其结果取模5的值,模5的结果(0—4之间)即为所要选择的主密钥的索引号;再根据索引号从主密钥数组中找到一组Km; ⑤ 获取分散因子X2(8字节长),取RND1作为分散因子X2的前四字节,后面不足补0X20; ⑥ 获取分散因子X1(8字节长),取SIM卡的ICCID的后8字节即可;(注意:取回的ICCID每个字节的前4位和后4位是颠倒的) ⑦ 用Km左右主密钥,加密分散因子X1:(注意:加密数据是8字节,加密结果也是8字节) a) Kcl = 3DES(Km, X1);(注意:Kcl为Kc的左8字节) b) Kcr = 3DES(Km, NOT X1); (注意:Kcr为Kc的右8字节) c) Kc = Kcl || Kcr; ⑧ 用第七步骤中的结果Kc作为主密钥,加密分散因子X2,加密方法同步骤七; ⑨ 用第八步骤中的结果Kc作为主密钥,加密RND2,得到的结果即为最后的密文C; a) C = 3DES ( Kc, RND2);(注意:加密数据是16字节,加密结果也是16字节) ⑩ 最后在把厂商代码(1字节)、密钥版本(1字节)和密文C(16字节)发送回SIM卡。 第二步:确认加密算法是否正确: 按照下面的密钥对明文加密,如果结果是一致的,那说明加密算法正确。 * 8字节密钥,8字节明文 * Key : 0123 4567 89ab cdef * Plain : 0123 4567 89ab cde7 * Cipher : c957 4425 6a5e d31d * * 16字节密钥,8字节明文 * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 * Plain : 0123 4567 89ab cde7 * Cipher : 7f1d 0a77 826b 8aff * * 16字节密钥,16字节明文 * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff * Cipher : 27a0 8440 406a df60 278f 47cf 42d6 15d7 * * 24字节密钥,8字节明文 * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 * Plain : 0123 4567 89ab cde7 * Cipher : de0b 7c06 ae5e 0ed5 * * 24字节密钥,16字节明文 * Key : 0123 4567 89ab cdef fedc ba98 7654 3210 89ab cdef 0123 4567 * Plain : 0123 4567 89ab cdef 0123 4567 89ab cdff * Cipher : ad0d 1b30 ac17 cf07 0ed1 1c63 81e4 4de5 * 第三步:验证各个步骤是否正确: 1. 从SIM卡取回20字节随机数,这里用下面这组代替: 5C 34 44 66 20 20 20 20 01 C0 34 E4 19 AB 44 89 90 A5 03 56 2. 取得RND1: RND1 = 5C 34 44 66 3. 取得RND2: RND2 = 20 20 20 20 01 C0 34 E4 19 AB 44 89 90 A5 03 56 4. 取得Km: Index = (0x66 & 0x07)%5 = 1; Km = MainKey[1],在这里用下面这组替代: 6e 5b 38 47 d1 c7 c1 86 28 7c 18 6a 35 a5 e3 20 5. 获取分散因子X2: X2 = 5C 34 44 66 20 20 20 20 6. 获取分散因子X1: ICCID = 98 68 45 23 12 45 67 56 35 45 X1 = 45 23 12 45 67 56 35 45 7. 用Km加密X1: X1 = 45 23 12 45 67 56 35 45 Km = 6e 5b 38 47 d1 c7 c1 86 28 7c 18 6a 35 a5 e3 20 Kcl = 3DES(Km , X1): Kcl = 5A 6B 3D 1D A7 D6 09 35 Kcr = 3DES(Km , NOT X1): Kcr = F9 75 AA E6 47 67 35 B3 Kc = 5A 6B 3D 1D A7 D6 09 35 F9 75 AA E6 47 67 35 B3 8. 用Kc加密X2: X2 = 5C 34 44 66 20 20 20 20 Km = 5A 6B 3D 1D A7 D6 09 35 F9 75 AA E6 47 67 35 B3 Kcl = 3DES(Kc , X1): Kcl = 4F F4 BC 09 32 57 92 7E Kcr = 3DES(Kc , NOT X1): Kcr = 87 23 26 36 8B 48 77 E9 Kc = 4F F4 BC 09 32 57 92 7E 87 23 26 36 8B 48 77 E9 9. 用Kc加密RND2: Kc = 4F F4 BC 09 32 57 92 7E 87 23 26 36 8B 48 77 E9 C = 3DES(Kc, RND2); C = AC DA 08 20 DC 5D EA 94 67 8C EA 4D F9 62 F8 76 10. 把密文C发送回SIM卡,SIM卡会发回91XX。当然根据上面的数据只能验证具体那个步骤可能有问题而已,这个数据发给SIM卡,返回的肯定是认证失败,因为这是我自己用的测试数据。 结束。大家有啥意见就直接提啊。 |
欢迎光临 思步网 (http://www.step365.com/) | Powered by Discuz! X3.2 |