一旦MS需要和网络侧有报文的交互,在获取访问之前需要对MS进行身份认证。 举一个例子,鉴权有可能在下述场景中执行: - 路由区更新流程; - GPRS附着或去附着流程; - GPRS报文传递。 鉴权流程的目的是对试图访问网络的用户身份进行确认,以保证对方使用的正确的SIM卡并带有有效的Ki。鉴权密钥Ki不通过空中接口传递,只存储在MS的SIM和鉴权中心(以下简称AUC,该节点通常和HLR是合并设置的)。鉴权流程是由SGSN发起和控制的。 在MS可以和网络侧交换数据之前,SGSN就将发起针对MS的鉴权流程。首先,SGSN将发送包含用户IMSI的消息给AUC去请求用于鉴权的三参数组。根据SGSN提供的用户IMSI,AUC可以找到相关联的Ki并且能够据此计算出必要的密钥并返回给SGSN。这个鉴权三参数组包括RAND、SRES和Kc,含义如下: - RAND:是一个随机数,用于确保鉴权三参数组的唯一性。 - SRES(signed response):可以被认为是该MS的数字签名。 - Kc:是一个加密密钥,用于加密MS和SGSN之间传送的数据。 SRES是通过A3算法产生的,而加密密钥则是通过A8算法生成。这两种算法A3和A8都有相同的输入:Ki和RAND。这两个输入,Ki总是相同的并存储在AUC中,但RAND总是不相同的。 为了鉴权用户,SGSN给MS发送RAND。MS的SIM卡里也支持相同的A3和A8算法,并且也存储了相同的Ki。因此,MS也可以根据收到的RAND、Ki以及算法来计算出SRES和Kc,由于所使用的相关参数和AUC完全相同,则MS侧生成的SRES和Kc也应该和AUC侧生成的SRES和Kc完全相同。MS接下来将生成的SRES返回给SGSN,SGSN将MS生成的SRES和AUC生成的SRES进行对比,如果两者完全相同,则鉴权成功。SGSN将返回给MS一个鉴权成功的确认,否则SGSN将给MS返回一个消息指示鉴权失败。 过程如图所示: 下面三张图分别给出了某实例中SGSN从HLR/AUC获取的鉴权三参数组,SGSN给MS发送的鉴权及加密请求消息以及MS给SGSN发送的鉴权及加密响应消息。 图1 AUC返回的鉴权三参数组 图2 发给MS的鉴权及加密请求消息 图3 MS回的鉴权及加密响应 关于GPRS鉴权过程曾经有两个顾虑,有人认为,所有的这些消息在空中接口传递的时候都是未加密的(因为加密流程是在鉴权流程完成之后进行的),因此有可能RAND和SRES会被黑客在空中接口窃取,并且如果该黑客还能够破解A3算法,则有可能通过以上条件反向获取到用户的Ki,达到仿冒用户身份的目的。但实际上,算法的设计保证了很难从数据结果SRES反向得出输入Ki(128位),这可能需要大量的时间或巨型计算机才能完成。 另一个顾虑就是有人担心如果鉴权流程中,HLR/AUC针对SGSN的请求每次只返回一组鉴权三参数组,将会导致过量的信令消息在HLR/AUC和SGSN之间传递,加重信令网络的负担。但实际上HLR/AUC通常会被配置成一次发送多组鉴权参数给SGSN。SGSN可以将未使用完的鉴权保存在本地,供MS后续的信令流程使用。如图1所示,HLR/AUC在一个消息中给SGSN返回了两组鉴权三数据组(即SGSN可以使用两次,用于MS不同的信令流程)。 |