爱的罗曼史吉他谱入门:mobile鉴权加密

来源:百度文库 编辑:中财网 时间:2024/04/25 10:32:37
我们知道,手机在做位置更新、发起呼叫时必须首先进行鉴权和加密。通过鉴权,系统可以为合法的用户提供服务,对不合法的用户拒绝服务。那么鉴权和加密是如何实现的呢?我们先看下面一个用户开机并成功进行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信息,其次,还包含有VLR向HLR/AUC所请求的鉴权集的组数(5组),如下:
我们再看看HLR/AUC给MSC/VLR回的取鉴权集证实消息里面有什么东西:

我们可以看出HLR/AUC一共给VLR回了4组[font color=#000000]鉴权[/font]集,每组鉴权集包含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组鉴权集里面的[font color=#000000]rand参数的值[/font]通过该消息下发给手机。
手机收到网络下发的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去取新的鉴权集