|
:lol
加密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卡,返回的肯定是认证失败,因为这是我自己用的测试数据。
结束。大家有啥意见就直接提啊。
|
[ 本帖最后由 pengbaozhu 于 2008-12-1 21:06 编辑 ]
上一篇:ISO内审过程 下一篇:ISO的冥思矫正 |
|