通信人家园
标题:
从信令上深入了解鉴权和加密的过程
[查看完整版帖子]
[打印本页]
时间:
2011-3-22 22:30
作者:
seasonjie
标题:
从信令上深入了解鉴权和加密的过程
从信令上深入了解鉴权和加密的过程
我们知道
,
手机在做位置更新、发起呼叫时必须首先进行鉴权和加密。通过鉴权,系统可以为合法的用户提供服务,对不合法的用户拒绝服务。那么鉴权和加密是如何实现的呢?我们先看下面一个用户开机并成功进行
IMSI ATTACH
位置更新的信令流程:
MSC/VLR
通过
IU
口收到手机开机的消息后
,
判断该
IMSI
是否为新用户
(
即
VLR
里不存在数据的,华为
MSOFTX3000
可以通过
DEL MS
命令实现删除
VLR
数据
)
。如果是新用户,就向
HLR/AUC
发起取鉴权集请求的消息(
SEND_AUTHENTICATION_INFO_REQ
);作为响应,
HLR/AUC
给
MSC/VLR
回取鉴权集证实消息(
SEND_AUTHENTICATION_INFO_CNF
):
我们看看取鉴权集请求消息里面有什么内容,首先,它包含有该用户的
IMSI
信息(
460004314210031
),其次,还包含有
VLR
向
HLR/AUC
所请求的鉴权集的组数(
5
组),如下:
我们再看看
HLR/AUC
给
MSC/VLR
回的取鉴权集证实消息里面有什么东西:
我们可以看出
HLR/AUC
一共给
VLR
回了
4
组鉴权集,每组鉴权集包含
3
个参数,分别是
rand
(随机数)、
sres
(符号响应)、
kc
(密钥)。这
3
个参数即是我们平时常说的鉴权三参组,由此,我们判断出该用户是
2G
用户。此处爱立信
HLR/AUC
只给回了
4
组鉴权集,正常情况下是会回
5
组鉴权集的(华为
HLR
不存在这样的问题);我就此事询问过广州爱立信
HLR
的现场技术人员,对方表示也不清楚原因。
MSC/VLR
取到鉴权集后,会使用
4
组鉴权集中的
1
组,通过
IU
口向手机发出鉴权请求消息(
AUTHENTICATION_REQUEST
),其余
3
组留着供下次的鉴权使用;随后,手机给
MSC/VLR
回鉴权响应消息(
AUTHENTICATION_RESPONSE
):
我们来看一看鉴权请求消息里面有什么我们需要关注的东西:
可以看出
VLR
将第
1
组鉴权集里面的
rand
参数的值通过该消息下发给手机。
手机收到网络下发的
rand
参数的值后,在
SIM
卡进行如下运算:
KI(IMSI) + rand + A3 ---------> sres
KI(IMSI) + rand + A8 ---------> kc
在此有必要说明,
KI
是制卡的时候就以特殊工艺烧进
SIM
卡的一个参数值,由
32
个十六进制的字符组成,如
D17F20239EEDBE1520F64A851F3C44C9
,每个字符以二进制表示的话,长度是
32
×
4=128
位。
KI
值并不在空中传送;
KI
值必须在开户时在
HLR
定进去的,华为
HLR
的相关命令是
ADD KI
;而爱立信
HLR
的相关命令是
AGSUI
。
手机用
A3
算法计算出
sres
以后,通过
IU
口以鉴权响应消息回给
MSC/VLR
。同时,手机以
A8
算法计算出密钥
kc
。利用密钥
kc
,手机再对加密之前的消息
M
以
A5
算法进行如下加密运算,得出加密后的消息
M
':
M + kc + A5 ---------> M
'
该算法是可逆的,即
MSC/VLR
收到
IU
口上加过密的消息
M
'后,能以同样的运算法则进行解密将消息还原:
M
'
+ kc + A5 ---------> M
至此我们应该知道,鉴权是通过
sres
参数来实现的,而加密是通过
kc
参数来实现。下面再来看看鉴权响应消息里面的
sres
是什么:
响应消息里的
sres
的值为
f7 6c 0a 8d
,与第
1
组鉴权集里面的
sres
一致;所以该用户鉴权通过,视为合法用户。
如果鉴权响应消息里面的
sres
值与
VLR
内的
sres
值不一致,那么该用户将被
VLR
判为鉴权失败,属于非法用户;我们来看一个鉴权失败的用户的消息跟踪:
该用户就因为回的
sres
与
VLR
不一致被视为鉴权失败,
MSC/VLR
直接给
HLR/AUC
发出鉴权失败报告,并给
IU
口回鉴权拒绝消息,导致接下来的位置更新不能够继续进行。
出现这种情况的原因是因为
SIM
卡内的
KI
值与
HLR
开户的
KI
不一致所致。所以一个企图盗打的
SIM
卡,光烧有别人的
IMSI
号还不行,还必须烧入别人的
KI
值,而这个
KI
值是很难从
SIM
卡读取出来的;就算知道
KI
,如何将其烧进
SIM
卡,其特殊的工艺也是一个难题。
如果鉴权成功,那么
MSC/VLR
将给
HLR
发位置更新请求消息(
UPDATE_LOCATION_REQ
),
HLR
向
VLR
插用户数据,
VLR
回插用户数据响应消息,
HLR
再回应
MSC/VLR
位置更新证实消息(
UPDATE_LOCATION_CNF
)。这一系列步骤完成之后,
MSC/VLR
将向手机发出身份请求消息(
IDENTITY_REQUEST
),该消息请求手机必须响应
IMEI
码:
看手机在身份响应消息(
IDENTITY_RESPONSE
)回的
IMEI
是多少:
MSC/VLR
会对该手机的
IMEI
码进行检查,如果是合法的设备,那么到此为止位置更新成功。
SECURITY_MODE_COMMAND
消息是
MSC/VLR
用来通知手机进行加密的,
SECURITY_MODE_COMPLETE
消息则是手机响应
MSC/VLR
的,标明以后的消息将加密后才在空中接口传送。
3G
用户的鉴权加密与
2G
大同小异,不同的是三参组变成了五元组,我们来看看
3G
用户的取鉴权集证实消息(
SEND_AUTHENTICATION_INFO_CNF
)里面的鉴权集是什么:
可以看到鉴权集里面有
5
个参数值,它们分别是:
rand
(网络质询随机数)、
xres
(用户应答的期望值)、
ck
(加密密钥)、
ik
(完整性密钥)、
autn
(网络身份确认标记)。
3G
鉴权与
2G
最大的不同是多了一个
autn
(网络身份确认标记)值。我们前述知道,
sres
是网络用来对手机进行鉴权的,而
autn
却是手机用来对网络进行鉴权。我们看到
autn
会在鉴权请求消息里通过
IU
口与
rand
一起下发:
手机收到
autn
后是如何对网络进行鉴权的,这里不再深究。我们看看
xres
与
2G
里的
sres
有何不同,观察鉴权响应消息里带的
xres
值:
发现
xres
值由两部分组成:一部分是
4
字节长的
ff a0 88 6f
(与
sres
等长);另一部分是扩展部分(
ext
):
00 ad f1 8c 26 89 85 76 da 16 6f 26
;两部分在一起即构成了
xres
的值。相当于
xres = sres + ext
。
每次
MSC/VLR
从
HLR/AUC
取得
5
组鉴权集,只使用
1
组,其余
4
组留给以后的鉴权和加密使用。手机在做位置更新、发起呼叫时,如
MSC/VLR
判断其
IMSI
为旧卡
(
即
VLR
里已经存在数据的
)
,则调用
VLR
中的一个五数组,不再到
HLR/AUC
去取新的鉴权集。
时间:
2011-3-23 08:59
作者:
yinhexitaiyang
OK
时间:
2011-5-22 21:39
作者:
nody_txrjy
太棒了,查找了好多鉴权加密方面的信息,都不是很清楚。在这里,我终于找到了,谢谢楼主,希望你再接再厉,谢谢!!!
通信人家园 (https://www.txrjy.com/)
Powered by C114